| | |
| | | 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.*; |
| | | |
| | |
| | | private PrAssemblyPlanMapper assemblyPlanDao; |
| | | // private PrProductionProcessMapper processDao; |
| | | private PrProductionNodeMapper nodeDao; |
| | | private StaRepairInfoMapper repairInfoDao; |
| | | @Autowired |
| | | public void setDeviceLastDao(StaDeviceLastMapper deviceLastDao) { |
| | | this.deviceLastDao = deviceLastDao; |
| | |
| | | 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()); |
| | | // 验证并处理设备号和物料号 |
| | |
| | | }); |
| | | |
| | | 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); |
| | | |
| | |
| | | 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; |
| | |
| | | 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:报废 |
| | |
| | | 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; |
| | | } |
| | | } |