| | |
| | | |
| | | StaDeviceLast deviceLast = buildDeviceLast(params, workLast, deviceList.get(0)); |
| | | int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) : |
| | | deviceLastDao.updateByPrimaryKeySelective(deviceLast); |
| | | deviceLastDao.updateByPrimaryKey(deviceLast); |
| | | |
| | | saveDeviceProductionLog(deviceLast); |
| | | |
| | |
| | | if (preRecord != null) { |
| | | record.id = preRecord.id; |
| | | record.inTime = preRecord.outTime; |
| | | record.inLineTime = preRecord.inLineTime; |
| | | record.outLineTime = preRecord.outLineTime;//下边判断是否结束会用到 得留着 |
| | | } else { |
| | | record.inTime = new Date(); |
| | |
| | | assemblyPlan.setInputNumber(assemblyPlan.getInputNumber() + 1); |
| | | } |
| | | record.outTime = new Date(); |
| | | |
| | | record.planId = workLast.planId; |
| | | record.planId = assemblyPlan.getId(); |
| | | record.workId = Long.parseLong(params.workId); |
| | | record.stationId = workLast.stationId; |
| | | record.deviceNo = deviceNo; |
| | | record.currNode = workLast.nodeId; |
| | | |
| | | record.updatedBy = workLast.userId; |
| | | record.assistants = workLast.assistants; |
| | | record.errorMsg = params.errorMsg; |
| | | |
| | | Boolean isEnd = false;//是否经历过结束节点 |
| | | PrProductionNode node = nodeDao.selectByPrimaryKey(workLast.nodeId); |
| | | // |
| | | record.nodeContent = node.content; |
| | | if (node.isRecord) { |
| | | record.deviceCycleContent = node.deviceCycleContent; |
| | | Boolean isEnd = false;//是否经历过或正在经历结束节点 |
| | | if (workLast.nodeId == null) { |
| | | 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; |
| | | if (node.isRecord) { |
| | | record.deviceCycleContent = node.deviceCycleContent; |
| | | } |
| | | if (node.getIsEnd() && record.outLineTime == null) { |
| | | record.outLineTime = new Date(); |
| | | assemblyPlan.setOutputNumber(assemblyPlan.getOutputNumber() + 1); |
| | | isEnd = true; |
| | | } else if (record.outLineTime != null) { |
| | | isEnd = true; |
| | | } |
| | | } |
| | | if (node.getIsEnd() && record.outLineTime == null) { |
| | | record.outLineTime = new Date(); |
| | | assemblyPlan.setOutputNumber(assemblyPlan.getOutputNumber() + 1); |
| | | isEnd = true; |
| | | }else if(record.outLineTime != null){ |
| | | isEnd = true; |
| | | } |
| | | assemblyPlanDao.updateByPrimaryKeySelective(assemblyPlan); |
| | | |
| | | record.status = getStatus(params.status, isEnd, workLast.workType.toString()); |
| | | record.result = getResult(params.status, workLast.workType.toString()); |
| | | assemblyPlanDao.updateByPrimaryKeySelective(assemblyPlan); |
| | | return record; |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 原状态: 0:待生产,1:组装中,2:完成,3:维修,4:报废,5:测试不通过,6:品检不通过 |
| | | *20240717当前状态 状态: 1, 组装中,2:完成,3:维修,4:报废 |
| | | * @param status 状态 |
| | | * @param isEnd 是否经历过结束节点 |
| | | * 20240717当前状态 状态: 1, 组装中,2:完成,3:维修,4:报废 |
| | | * |
| | | * @param status 状态 |
| | | * @param isEnd 是否经历过结束节点 |
| | | * @return 状态 |
| | | */ |
| | | 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(); |
| | |
| | | //维修 |
| | | throw new RuntimeException("状态错误,无效的节点类型: " + workType); |
| | | } |
| | | |
| | | /** |
| | | * 结果: 1:通过,2:测试通过,3:品检通过,4:维修通过,5:测试不通过,6:品检不通过,7:报废 |
| | | * @param status 前端出来的状态 |
| | | * |
| | | * @param status 前端出来的状态 |
| | | * @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("状态错误"); |
| | | }; |
| | | //测试 |
| | | }else if (WORK_TYPE_TEST.equals(workType)) { |
| | | } else if (WORK_TYPE_TEST.equals(workType)) { |
| | | return switch (status) { |
| | | case QrCodeConstant.MarkQualified -> DeviceResult.TEST_PASS.getCode(); |
| | | case QrCodeConstant.MarkQualified -> DeviceResult.TEST_PASS.getCode(); |
| | | case QrCodeConstant.MarkUnqualified -> DeviceResult.TEST_FAIL.getCode(); |
| | | default -> throw new RuntimeException("状态错误"); |
| | | }; |
| | | //品检 |
| | | }else if (WORK_TYPE_INSPECTION.equals(workType)) { |
| | | } else if (WORK_TYPE_INSPECTION.equals(workType)) { |
| | | return switch (status) { |
| | | case QrCodeConstant.MarkQualified -> DeviceResult.INSPECTION_PASS.getCode(); |
| | | case QrCodeConstant.MarkUnqualified -> DeviceResult.INSPECTION_FAIL.getCode(); |
| | | default -> throw new RuntimeException("状态错误"); |
| | | }; |
| | | //维修 |
| | | }else if (WORK_TYPE_REPAIR.equals(workType)) { |
| | | } else if (WORK_TYPE_REPAIR.equals(workType)) { |
| | | return switch (status) { |
| | | case QrCodeConstant.MarkOk -> DeviceResult.REPAIR_PASS.getCode(); |
| | | case QrCodeConstant.MarkWaste -> DeviceResult.WASTE.getCode(); |
| | |
| | | } |
| | | throw new RuntimeException("状态错误,无效的节点类型: " + workType); |
| | | } |
| | | |
| | | @Transactional |
| | | public int repair(QueryVo vo) { |
| | | long workId = Long.parseLong(vo.workId); |
| | |
| | | repairInfo.repairTime = new Date(); |
| | | repairInfo.repairBy = workLast.userId; |
| | | repairInfo.repairReason = vo.errorMsg; |
| | | repairInfo.fromNode = preDeviceRecord.currNode; |
| | | if (preDeviceRecord != null) { |
| | | repairInfo.fromNode = preDeviceRecord.currNode; |
| | | } |
| | | repairInfoDao.insertSelective(repairInfo); |
| | | |
| | | StaDeviceLast deviceLast = buildDeviceLast(vo, workLast, vo.deviceNo[0]); |
| | | |
| | | deviceLast.setRepairId(repairInfo.getId()); |
| | | int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) : |
| | | deviceLastDao.updateByPrimaryKeySelective(deviceLast); |
| | | deviceLastDao.updateByPrimaryKey(deviceLast); |
| | | saveDeviceProductionLog(deviceLast); |
| | | boolean isEndNode = nodeDao.isEndNode(preDeviceRecord.currNode); |
| | | if (isEndNode) { |
| | | //只要经历过结束节点,就一直记录device life |
| | | if (preDeviceRecord != null && preDeviceRecord.getOutLineTime() != null) { |
| | | saveDeviceLife(deviceLast); |
| | | } |
| | | return count; |
| | |
| | | } |
| | | StaDeviceLast deviceLast = buildDeviceLast(vo, workLast, vo.deviceNo[0]); |
| | | int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) : |
| | | deviceLastDao.updateByPrimaryKeySelective(deviceLast); |
| | | deviceLastDao.updateByPrimaryKey(deviceLast); |
| | | saveDeviceProductionLog(deviceLast); |
| | | PrProductionNode node = nodeDao.selectByPrimaryKey(workLast.nodeId); |
| | | if (node.isRecord) { |
| | | if (node != null && node.isRecord) { |
| | | saveDeviceLife(deviceLast); |
| | | } |
| | | return count; |
| | |
| | | } |
| | | StaDeviceLast deviceLast = buildDeviceLast(vo, workLast, vo.deviceNo[0]); |
| | | int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) : |
| | | deviceLastDao.updateByPrimaryKeySelective(deviceLast); |
| | | deviceLastDao.updateByPrimaryKey(deviceLast); |
| | | saveDeviceProductionLog(deviceLast); |
| | | PrProductionNode node = nodeDao.selectByPrimaryKey(workLast.nodeId); |
| | | if (node.isRecord) { |
| | | if (node != null && node.isRecord) { |
| | | saveDeviceLife(deviceLast); |
| | | } |
| | | return count; |
| | | } |
| | | |
| | | //无任务计划中的其他 传workId ,手写工作内容 , 数量 |
| | | @Transactional |
| | | public int otherWork(QueryVo vo) { |
| | |
| | | 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; |
| | | } |
| | | |
| | | //根据节点查出节点作业指导书 |
| | | public PrProductionNode getSopByNodeId(String nodeId) { |
| | | if (com.alibaba.excel.util.StringUtils.isBlank(nodeId)) { |
| | |
| | | public List<PltProductQualityInspectionItems> getQualityItems(String proId) { |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("proId", proId);//item start count |
| | | params.put("disabled", "0"); |
| | | //查询符合条件的记录 |
| | | return qualityItemsDao.selectSome(params); |
| | | } |
| | |
| | | public List<PltProductTestInspectionItems> getTestItems(String proId) { |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("proId", proId); |
| | | params.put("disabled", "0"); |
| | | return testItemsDao.selectSome(params); |
| | | } |
| | | |
| | |
| | | return fileRestVo.fileWebUrl + file.filePath; |
| | | } |
| | | |
| | | public Map<String, String> queryByDeviceNo(String deviceNo,List<PltProduct> productList) { |
| | | public Map<String, String> queryByDeviceNo(String deviceNo, List<PltProduct> productList) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("deviceNo", deviceNo); |
| | | map.put("proName", ""); |
| | |
| | | map.put("proId", ""); |
| | | map.put("proCode", ""); |
| | | //判断是不是是本厂物料 |
| | | if(CollectionUtils.isEmpty(productList)){ |
| | | if (CollectionUtils.isEmpty(productList)) { |
| | | productList = productDao.selectAll(null); |
| | | } |
| | | PltProduct product = null; |
| | |
| | | map.put("proType", product.getType()); |
| | | BigInteger proId = BigInteger.valueOf(product.getId()); |
| | | map.put("proId", proId.toString()); |
| | | map.put("proCode",product.getCode()); |
| | | map.put("proCode", product.getCode()); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | //查询产品所在的任务 |
| | | public PrAssemblyPlan queryPlanByDeviceNo(String deviceNo) { |
| | | String proCode = ""; |
| | | String lotCode = ""; |
| | | if (StringUtils.isNotEmpty(deviceNo) && deviceNo.length() == 22) { |
| | | proCode = deviceNo.substring(3,6); |
| | | lotCode = deviceNo.substring(6,15); |
| | | proCode = deviceNo.substring(3, 6); |
| | | lotCode = deviceNo.substring(6, 15); |
| | | } |
| | | PrAssemblyPlan plan = assemblyPlanDao.selectByDeviceNo(proCode,lotCode); |
| | | if(plan != null){ |
| | | PrAssemblyPlan plan = assemblyPlanDao.selectByDeviceNo(proCode, lotCode); |
| | | if (plan != null) { |
| | | plan.setBatchNo(lotCode); |
| | | } |
| | | return plan; |
| | | } |
| | | |
| | | public List<StaDeviceLife> queryLifeByDeviceNo(String deviceNo) { |
| | | return deviceLifeDao.selectByDeviceNo(deviceNo); |
| | | } |