|  |  | 
 |  |  | import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper; | 
 |  |  | import com.dy.pmsGlobal.daoPr.PrProductionNodeMapper; | 
 |  |  | import com.dy.pmsGlobal.daoSta.*; | 
 |  |  | import com.dy.pmsGlobal.daoTst.TstCommandMapper; | 
 |  |  | import com.dy.pmsGlobal.dyFile.FileOperate; | 
 |  |  | import com.dy.pmsGlobal.dyFile.FileRestVo; | 
 |  |  | import com.dy.pmsGlobal.pojoOth.OthFile; | 
 |  |  | import com.dy.pmsGlobal.pojoPlt.*; | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrAssemblyPlan; | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrBillOfMaterial; | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrProductionNode; | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction; | 
 |  |  | import com.dy.pmsGlobal.pojoSta.*; | 
 |  |  | import com.dy.pmsGlobal.pojoTst.TstCommand; | 
 |  |  | import com.dy.pmsGlobal.util.DeviceResult; | 
 |  |  | import com.dy.pmsGlobal.util.DeviceStatus; | 
 |  |  | import com.dy.pmsGlobal.util.QrCodeConstant; | 
 |  |  | import com.dy.pmsGlobal.util.UserUtil; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.dubbo.common.utils.PojoUtils; | 
 |  |  | import org.springframework.beans.BeanUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | 
 |  |  |     private StaRepairInfoMapper repairInfoDao; | 
 |  |  |     private PltProductQualityInspectionItemsMapper qualityItemsDao; | 
 |  |  |     private PltProductTestInspectionItemsMapper testItemsDao; | 
 |  |  |     private TstCommandMapper tstCommandDao; | 
 |  |  |     private PltProductMapper productDao; | 
 |  |  |     private PltProParamsMapper paramsDao; | 
 |  |  |     private PltProductFileMapper productFileDao; | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     public void setDeviceLifeLastDao(StaDeviceLifeLastMapper deviceLifeLastDao) { | 
 |  |  |         this.deviceLifeLastDao = deviceLifeLastDao; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     public void setTstCommandDao(TstCommandMapper tstCommandDao) { | 
 |  |  |         this.tstCommandDao = tstCommandDao; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Transactional | 
 |  |  | 
 |  |  |             if (record.outLineTime != null) { | 
 |  |  |                 isEnd = true; | 
 |  |  |             } | 
 |  |  |             if(StringUtils.isNotBlank(params.getContent())){ | 
 |  |  |                 record.nodeContent = params.getContent(); | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             PrProductionNode node = nodeDao.selectByPrimaryKey(workLast.nodeId); | 
 |  |  |             record.nodeContent = node.content; | 
 |  |  |             PrProductionNode nextNode = nodeDao.selectNodeBySort(node.getProcessId() , (node.getSort() + 1)); | 
 |  |  |             record.nextNodeContent = nextNode.content; | 
 |  |  |             record.nextNode = nextNode.id; | 
 |  |  |             if (node.isRecord) { | 
 |  |  |                 record.deviceCycleContent = node.deviceCycleContent; | 
 |  |  |             } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     private Integer getStatus(String status, boolean isEnd, String workType) { | 
 |  |  |         //组装   2024/07/17 目前组装workType 1 只有MarkOk     //测试    //品检 | 
 |  |  |         if (WORK_TYPE_ASSEMBLY.equals(workType) || WORK_TYPE_TEST.equals(workType) || WORK_TYPE_INSPECTION.equals(workType) || WORK_TYPE_REPAIR.equals(workType)) { | 
 |  |  |         if (WORK_TYPE_ASSEMBLY.equals(workType) || WORK_TYPE_TEST.equals(workType) || WORK_TYPE_INSPECTION.equals(workType) || WORK_TYPE_REPAIR.equals(workType)|| WORK_TYPE_OTHER.equals(workType)) { | 
 |  |  |             return switch (status) { | 
 |  |  |                 case QrCodeConstant.MarkOk -> isEnd ? DeviceStatus.COMPLETED.getCode() : DeviceStatus.ASSEMBLING.getCode(); | 
 |  |  |                 case QrCodeConstant.MarkQualified -> isEnd ? DeviceStatus.COMPLETED.getCode() : DeviceStatus.ASSEMBLING.getCode(); | 
 |  |  | 
 |  |  |      * @return 结果 | 
 |  |  |      */ | 
 |  |  |     private Integer getResult(String status, String workType) { | 
 |  |  |         //组装 | 
 |  |  |         if (WORK_TYPE_ASSEMBLY.equals(workType)) { | 
 |  |  |         //组装  临时任务-其他 | 
 |  |  |         if (WORK_TYPE_ASSEMBLY.equals(workType) || WORK_TYPE_OTHER.equals(workType)) { | 
 |  |  |             return switch (status) { | 
 |  |  |                 case QrCodeConstant.MarkOk -> DeviceResult.PASS.getCode(); | 
 |  |  |                 default -> throw new RuntimeException("状态错误"); | 
 |  |  | 
 |  |  |         repairInfo.repairTime = new Date(); | 
 |  |  |         repairInfo.repairBy = workLast.userId; | 
 |  |  |         repairInfo.repairReason = vo.errorMsg; | 
 |  |  |         if(preDeviceRecord!=null) { | 
 |  |  |         if (preDeviceRecord != null) { | 
 |  |  |             repairInfo.fromNode = preDeviceRecord.currNode; | 
 |  |  |         } | 
 |  |  |         repairInfoDao.insertSelective(repairInfo); | 
 |  |  | 
 |  |  |         int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) : | 
 |  |  |                 deviceLastDao.updateByPrimaryKey(deviceLast); | 
 |  |  |         saveDeviceProductionLog(deviceLast); | 
 |  |  |         if(preDeviceRecord.currNode != null){ | 
 |  |  |             boolean isEndNode = nodeDao.isEndNode(preDeviceRecord.currNode); | 
 |  |  |             if (isEndNode) { | 
 |  |  |                 saveDeviceLife(deviceLast); | 
 |  |  |             } | 
 |  |  |         //只要经历过结束节点,就一直记录device life | 
 |  |  |         if (preDeviceRecord != null && preDeviceRecord.getOutLineTime() != null) { | 
 |  |  |             saveDeviceLife(deviceLast); | 
 |  |  |         } | 
 |  |  |         return count; | 
 |  |  |     } | 
 |  |  | 
 |  |  |         if (workLast == null) { | 
 |  |  |             throw new RuntimeException("系统中没有该条登录信息"); | 
 |  |  |         } | 
 |  |  |         //保存工作记录 | 
 |  |  |         StaDeviceProductionLog log = new StaDeviceProductionLog(); | 
 |  |  |         log.setId(null); // 设备生产日志ID设为null,表示新增 | 
 |  |  |         log.setDeviceNo("");  //RepairId  planId  currNode deviceCycleContent  memo | 
 |  |  |         log.setWorkId(workId); | 
 |  |  |         log.setStationId(workLast.getStationId()); | 
 |  |  |         log.setNodeContent(vo.getContent()); | 
 |  |  |         log.setStatus(DeviceStatus.COMPLETED.getCode());//完成状态 | 
 |  |  |         log.setResult(DeviceResult.PASS.getCode());//通过 | 
 |  |  |         log.setErrorMsg(vo.getErrorMsg()); | 
 |  |  |         log.setAssistants(workLast.getAssistants()); | 
 |  |  |         log.setInTime(new Date()); | 
 |  |  |         log.setOutTime(new Date()); | 
 |  |  |         log.setUpdatedBy(workLast.getUserId()); | 
 |  |  |         log.setNumber(vo.getNumber()); | 
 |  |  |         int count = deviceProductionLogDao.insertSelective(log); | 
 |  |  |         int count = 0; | 
 |  |  |         //保存工作记录 //如果有设备码 | 
 |  |  |         if(vo.deviceNo != null && StringUtils.isNotBlank(vo.deviceNo[0])){ | 
 |  |  |             StaDeviceLast deviceLast = buildDeviceLast(vo, workLast, vo.deviceNo[0]); | 
 |  |  |             count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) : | 
 |  |  |                     deviceLastDao.updateByPrimaryKey(deviceLast); | 
 |  |  |             saveDeviceProductionLog(deviceLast); | 
 |  |  |         }else{ | 
 |  |  |             StaDeviceProductionLog log = new StaDeviceProductionLog(); | 
 |  |  |             log.setId(null); // 设备生产日志ID设为null,表示新增 | 
 |  |  |             log.setDeviceNo("");  //RepairId  planId  currNode deviceCycleContent  memo | 
 |  |  |             log.setWorkId(workId); | 
 |  |  |             log.setStationId(workLast.getStationId()); | 
 |  |  |             log.setNodeContent(vo.getContent()); | 
 |  |  |             log.setStatus(DeviceStatus.COMPLETED.getCode());//完成状态 | 
 |  |  |             log.setResult(DeviceResult.PASS.getCode());//通过 | 
 |  |  |             log.setErrorMsg(vo.getErrorMsg()); | 
 |  |  |             log.setAssistants(workLast.getAssistants()); | 
 |  |  |             log.setInTime(new Date()); | 
 |  |  |             log.setOutTime(new Date()); | 
 |  |  |             log.setUpdatedBy(workLast.getUserId()); | 
 |  |  |             log.setNumber(vo.getNumber()); | 
 |  |  |             count = deviceProductionLogDao.insertSelective(log); | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         return count; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         if (node.instruction != null) { | 
 |  |  |             addUrl(node.instruction); | 
 |  |  |         } | 
 |  |  |         if (node.bill != null) { | 
 |  |  |             addBillUrl(node.bill); | 
 |  |  |         } | 
 |  |  |         return node; | 
 |  |  |     } | 
 |  |  | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
 |  |  |             doc.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + doc.fileId; | 
 |  |  |             doc.webUrl = fileRestVo.fileWebDownloadPath + doc.fileId; | 
 |  |  |             doc.orgName = file.orgName; | 
 |  |  |             doc.extName = file.extName; | 
 |  |  |         }); | 
 |  |  | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
 |  |  |         ins.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + ins.fileId; | 
 |  |  |         ins.webUrl = fileRestVo.fileWebDownloadPath + ins.fileId; | 
 |  |  |         ins.orgName = file.orgName; | 
 |  |  |         ins.extName = file.extName; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private PltProduct addWebUrl(PltProduct pro) { | 
 |  |  |         if (pro != null) { | 
 |  |  |             if (pro.image != null) { | 
 |  |  |                 String filePathWithWebUrl = getFilePathWithWebUrl(pro.image); | 
 |  |  |                 pro.imageWebPath = filePathWithWebUrl; | 
 |  |  |                 pro.imageWebPathZip = fileOperate.getImgFileZipPath(filePathWithWebUrl); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             pro.proFiles.stream().forEach(doc -> { | 
 |  |  |                 OthFile file = othFileMapper.selectByPrimaryKey(doc.fileId); | 
 |  |  |                 if (file == null) { | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |                 FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
 |  |  |                 doc.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + doc.fileId; | 
 |  |  |                 doc.orgName = file.orgName; | 
 |  |  |                 doc.extName = file.extName; | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |         return pro; | 
 |  |  |     } | 
 |  |  | //    private PltProduct addWebUrl(PltProduct pro) { | 
 |  |  | //        if (pro != null) { | 
 |  |  | //            if (pro.image != null) { | 
 |  |  | //                String filePathWithWebUrl = getFilePathWithWebUrl(pro.image); | 
 |  |  | //                pro.imageWebPath = filePathWithWebUrl; | 
 |  |  | //                pro.imageWebPathZip = fileOperate.getImgFileZipPath(filePathWithWebUrl); | 
 |  |  | //            } | 
 |  |  | // | 
 |  |  | //            pro.proFiles.stream().forEach(doc -> { | 
 |  |  | //                OthFile file = othFileMapper.selectByPrimaryKey(doc.fileId); | 
 |  |  | //                if (file == null) { | 
 |  |  | //                    return; | 
 |  |  | //                } | 
 |  |  | //                FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
 |  |  | //                doc.webUrl = fileRestVo.fileWebDownloadPath + doc.fileId; | 
 |  |  | //                doc.orgName = file.orgName; | 
 |  |  | //                doc.extName = file.extName; | 
 |  |  | //            }); | 
 |  |  | //        } | 
 |  |  | //        return pro; | 
 |  |  | //    } | 
 |  |  |  | 
 |  |  |     private String getFilePathWithWebUrl(Long fileId) { | 
 |  |  |         OthFile file = othFileMapper.selectByPrimaryKey(fileId); | 
 |  |  | 
 |  |  |         return deviceProductionLogDao.selectByDeviceNo(devoiceNo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void addBillUrl(PrBillOfMaterial bill) { | 
 |  |  |         if (bill == null || bill.fileId == null) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         OthFile file = othFileMapper.selectByPrimaryKey(bill.fileId); | 
 |  |  |         if (file == null) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
 |  |  |         bill.webUrl = fileRestVo.fileWebDownloadPath + bill.fileId; | 
 |  |  |         bill.orgName = file.orgName; | 
 |  |  |         bill.extName = file.extName; | 
 |  |  |     } | 
 |  |  |     public List<TstCommand> getCommand(String proId, int type) { | 
 |  |  |         Map<String, Object> params = new HashMap<>(); | 
 |  |  |         params.put("proId", proId); | 
 |  |  |         params.put("type", type); | 
 |  |  |         return tstCommandDao.selectSome(params); | 
 |  |  |     } | 
 |  |  |     public List<PltProduct> selectAll(QueryVo queryVo) { | 
 |  |  |         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); | 
 |  |  |         return productDao.selectAll(params); | 
 |  |  |     } | 
 |  |  | } |