Fancy
2024-06-27 90a0cf3b0a84756bcefceb2058317c541a4bb22c
pms-parent/pms-web-station/src/main/java/com/dy/pmsStation/assemblyStep/AssemblyStepSv.java
@@ -12,6 +12,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@@ -31,6 +32,7 @@
    private PrAssemblyPlanMapper assemblyPlanDao;
//    private PrProductionProcessMapper processDao;
    private PrProductionNodeMapper nodeDao;
    private StaRepairInfoMapper repairInfoDao;
    @Autowired
    public void setDeviceLastDao(StaDeviceLastMapper deviceLastDao) {
        this.deviceLastDao = deviceLastDao;
@@ -59,12 +61,17 @@
    public void setNodeDao(PrProductionNodeMapper nodeDao) {
        this.nodeDao = nodeDao;
    }
    @Autowired
    public void setRepairInfoDao(StaRepairInfoMapper repairInfoDao) {
        this.repairInfoDao = repairInfoDao;
    }
    @Transactional
    public int save(QueryVo params) {
        long taskId = Long.parseLong(params.taskId);
        StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(taskId);
        long workId = Long.parseLong(params.workId);
        StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(workId);
        if (workLast == null) {
            throw new RuntimeException("工单不存在");
            throw new RuntimeException("系统中没有该条登录信息");//工单不存在
        }
        PrAssemblyPlan plan = assemblyPlanDao.selectByPrimaryKey(workLast.getPlanId());
        // 验证并处理设备号和物料号
@@ -82,13 +89,13 @@
        });
        if (deviceList.isEmpty()) {
            throw new RuntimeException("设备号不属于当前任务计划");
            throw new RuntimeException("设备号("+ params.deviceNo +")均不属于当前任务计划");
        }
        if (deviceList.size() > 1) {
            throw new RuntimeException("设备号有且只能有一个");
            throw new RuntimeException("设备号有且只能有一个属于当前任务计划");
        }
        StaDeviceLast deviceLast = saveDeviceLast(params, workLast, deviceList);
        StaDeviceLast deviceLast = buildDeviceLast(params, workLast, deviceList.get(0));
        int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) :
                deviceLastDao.updateByPrimaryKeySelective(deviceLast);
@@ -117,22 +124,22 @@
        deviceLifeDao.insertSelective(life);
    }
    private StaDeviceLast saveDeviceLast(QueryVo params, StaAssemblyWorkLast workLast, List<String> deviceList){
    private StaDeviceLast buildDeviceLast(QueryVo params, StaAssemblyWorkLast workLast, String deviceNo){
        //组装数据
        StaDeviceLast record = new StaDeviceLast();
        StaDeviceLast preRecord = deviceLastDao.selectByDeviceNo(deviceList.get(0));
        StaDeviceLast preRecord = deviceLastDao.selectByDeviceNo(deviceNo);
        if(preRecord != null){
            record.id = preRecord.id;
            record.inTime = preRecord.outTime;
        }
        record.outTime = new Date();
        record.setPlanId(workLast.planId);
        record.setClaimId(Long.parseLong(params.taskId));
        record.setStationId(workLast.stationId);
        record.setEquipNo(deviceList.get(0));
        record.setCurrNode(workLast.nodeId);
        record.planId = workLast.planId;
        record.workId = Long.parseLong(params.workId);
        record.stationId = workLast.stationId;
        record.equipNo = deviceNo;
        record.currNode = workLast.nodeId;
//        record.setNextNode(getNextNode(params.status,workLast.nodeId));
        record.updatedBy = workLast.userId;
@@ -146,15 +153,17 @@
        record.status = getStatus(params.status,node.isEnd);
        return record;
    }
    private int saveSnEx(StaAssemblyWorkLast workLast, List<String> deviceList,List<String> materialList, PrAssemblyPlan plan){
        StaWipSnEx snEx = new StaWipSnEx();
        snEx.deviceNo = deviceList.get(0);
        snEx.productNo = plan.batchNo;
        snEx.deviceNo = materialList.get(0);
        snEx.createTime = workLast.startTime;
        snEx.createBy = workLast.userId;
        snEx.productName = plan.proName;
        return wipSnExDao.insertSelective(snEx);
    private void saveSnEx(StaAssemblyWorkLast workLast, List<String> deviceList,List<String> materialList, PrAssemblyPlan plan){
        for (String material:materialList) {
            StaWipSnEx snEx = new StaWipSnEx();
            snEx.deviceNo = deviceList.get(0);
            snEx.productId = plan.process.proId;
            snEx.productNo = material;
            snEx.createTime = workLast.startTime;
            snEx.createBy = workLast.userId;
            snEx.productName = plan.proName;
            wipSnExDao.insertSelective(snEx);
        }
    }
    /**
     * 状态: 1:组装中,2:完成,3:维修,4:报废
@@ -170,4 +179,42 @@
            default -> throw new RuntimeException("状态错误");
        };
    }
    public int repair(QueryVo vo) {
        long workId = Long.parseLong(vo.workId);
        StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(workId);
        if (workLast == null) {
            throw new RuntimeException("工单不存在");
        }
        StaDeviceLast preDeviceRecord = deviceLastDao.selectByDeviceNo(vo.deviceNo);
        StaRepairInfo repairInfo = new StaRepairInfo();
        repairInfo.workId = workId;
        repairInfo.equipNo = vo.deviceNo;
        repairInfo.repairTime = new Date();
        repairInfo.repairBy = workLast.userId;
        repairInfo.repairReason = vo.errorMsg;
        repairInfo.fromNode = preDeviceRecord.currNode;
        repairInfoDao.insertSelective(repairInfo);
        StaDeviceLast deviceLast = new StaDeviceLast();
        BeanUtils.copyProperties(preDeviceRecord, deviceLast);
        deviceLast.repairId = repairInfo.id;
        deviceLast.errorCode = vo.errorMsg;
        deviceLast.assistants = vo.assistants;
        //如果原节点是结束节点或之后的节点,是则更新为完成,否则更新为组装中(默认维修节点的状态只能为 确定或 报废)
        boolean isEndNode = nodeDao.isEndNode(preDeviceRecord.currNode);
        if(QrCodeConstant.MarkWaste.equals(vo.status)){
            deviceLast.status = STATUS_WASTE;
        }else{
            deviceLast.status = isEndNode? STATUS_COMPLETE:STATUS_OK;
        }
        int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) :
                deviceLastDao.updateByPrimaryKeySelective(deviceLast);
        saveDeviceProductionLog(deviceLast);
        if (isEndNode) {
            saveDeviceLife(deviceLast);
        }
        return count;
    }
}