| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigInteger; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | |
| | | private OthFileMapper othFileMapper; |
| | | @Value("${dy.webFile.fmUrl}") |
| | | private String fmUrl; |
| | | |
| | | @Autowired |
| | | public void setDeviceLastDao(StaDeviceLastMapper deviceLastDao) { |
| | | this.deviceLastDao = deviceLastDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setDeviceLifeDao(StaDeviceLifeMapper deviceLifeDao) { |
| | | this.deviceLifeDao = deviceLifeDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setWipSnExDao(StaWipSnExMapper wipSnExDao) { |
| | | this.wipSnExDao = wipSnExDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setDeviceProductionLogDao(StaDeviceProductionLogMapper deviceProductionLogDao) { |
| | | this.deviceProductionLogDao = deviceProductionLogDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setAssemblyWorkLastDao(StaAssemblyWorkLastMapper assemblyWorkLastDao) { |
| | | this.assemblyWorkLastDao = assemblyWorkLastDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setAssemblyPlanDao(PrAssemblyPlanMapper assemblyPlanDao) { |
| | | this.assemblyPlanDao = assemblyPlanDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setNodeDao(PrProductionNodeMapper nodeDao) { |
| | | this.nodeDao = nodeDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setRepairInfoDao(StaRepairInfoMapper repairInfoDao) { |
| | | this.repairInfoDao = repairInfoDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setQualityItemsDao(PltProductQualityInspectionItemsMapper qualityItemsDao) { |
| | | this.qualityItemsDao = qualityItemsDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setTestItemsDao(PltProductTestInspectionItemsMapper testItemsDao) { |
| | | this.testItemsDao = testItemsDao; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setProductDao(PltProductMapper productDao) { |
| | | this.productDao = productDao; |
| | |
| | | public void setOthFileMapper(OthFileMapper othFileMapper) { |
| | | this.othFileMapper = othFileMapper; |
| | | } |
| | | |
| | | @Autowired |
| | | public void setDeviceLifeLastDao(StaDeviceLifeLastMapper deviceLifeLastDao) { |
| | | this.deviceLifeLastDao = deviceLifeLastDao; |
| | |
| | | Set<String> deviceSet = new HashSet<>(Arrays.asList(params.deviceNo)); |
| | | // 分类设备号和物料号 |
| | | List<String> deviceList = new ArrayList<>(); |
| | | List<String> materialList = new ArrayList<>(); |
| | | List<Map<String, String>> materialList = new ArrayList<>(); |
| | | List<PltProduct> productList = productDao.selectAll(null); |
| | | deviceSet.forEach(device -> { |
| | | if (device.contains(plan.batchNo)) { |
| | | deviceList.add(device); |
| | | } else if(isOurProduct(device,productList)){ |
| | | materialList.add(device); |
| | | deviceSet.forEach(deviceNo -> { |
| | | if (deviceNo.contains(plan.batchNo)) { |
| | | deviceList.add(deviceNo); |
| | | } else { |
| | | //判断是不是是本厂物料,如果是,则添加物料到ex表中 |
| | | PltProduct product = null; |
| | | if (StringUtils.isNotEmpty(deviceNo) && deviceNo.length() == 22) { |
| | | product = productList.stream().filter(p -> deviceNo.startsWith(QrCodeConstant.TypeProduct + p.getCode())).findFirst().orElse(null); |
| | | } |
| | | if(product != null){ |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("deviceNo", deviceNo); |
| | | map.put("proName", product.getName()); |
| | | BigInteger proId = BigInteger.valueOf(product.getId()); |
| | | map.put("proId", proId.toString()); |
| | | materialList.add(map); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | throw new RuntimeException("设备号(" + Arrays.toString(params.deviceNo) + ")均不属于当前任务计划"); |
| | | } |
| | | if (deviceList.size() > 1) { |
| | | throw new RuntimeException("设备号有且只能有一个属于当前任务计划"); |
| | | throw new RuntimeException("在产设备(" + deviceList.stream().collect(Collectors.joining(",")) + ")有且只能有一个属于当前任务计划"); |
| | | } |
| | | |
| | | StaDeviceLast deviceLast = buildDeviceLast(params, workLast, deviceList.get(0)); |
| | |
| | | saveDeviceLife(deviceLast); |
| | | } |
| | | if (CollectionUtils.isNotEmpty(materialList)) { |
| | | saveSnEx(workLast, deviceList, materialList, plan); |
| | | saveSnEx(workLast, deviceList, materialList); |
| | | } |
| | | return count; |
| | | } |
| | |
| | | if (preRecord != null) { |
| | | record.id = preRecord.id; |
| | | record.inTime = preRecord.outTime; |
| | | record.outLineTime = preRecord.outLineTime; |
| | | }else{ |
| | | record.inTime = new Date(); |
| | | record.inLineTime = new Date(); |
| | |
| | | return record; |
| | | } |
| | | |
| | | private void saveSnEx(StaAssemblyWorkLast workLast, List<String> deviceList, List<String> materialList, PrAssemblyPlan plan) { |
| | | for (String material : materialList) { |
| | | private void saveSnEx(StaAssemblyWorkLast workLast, List<String> deviceList, List<Map<String, String>> materialList) { |
| | | for (Map<String, String> material : materialList) { |
| | | StaWipSnEx snEx = new StaWipSnEx(); |
| | | snEx.deviceNo = deviceList.get(0); |
| | | snEx.productId = plan.process.proId; |
| | | snEx.productNo = material; |
| | | snEx.productNo = material.get("deviceNo"); |
| | | snEx.productName = material.get("proName"); |
| | | snEx.productId = Long.parseLong(material.get("proId")); |
| | | snEx.createTime = workLast.startTime; |
| | | snEx.createBy = workLast.userId; |
| | | snEx.productName = plan.proName; |
| | | |
| | | wipSnExDao.insertSelective(snEx); |
| | | } |
| | | } |
| | |
| | | saveDeviceProductionLog(deviceLast); |
| | | return count; |
| | | } |
| | | |
| | | //根据节点查出节点作业指导书 |
| | | public PrProductionNode getSopByNodeId(String nodeId) { |
| | | if(com.alibaba.excel.util.StringUtils.isBlank(nodeId)){ |
| | |
| | | } |
| | | return node; |
| | | } |
| | | |
| | | //主要技术参数 俩个方法同 platform-->product-->productSv |
| | | public List<PltProductParams> getParamsByProId(String proId) { |
| | | if(StringUtils.isBlank(proId)){ |
| | |
| | | List<PltProductParams> proParams = paramsDao.selectParams(Long.parseLong(proId)); |
| | | return proParams; |
| | | } |
| | | |
| | | // 根据产品查出产品文件 |
| | | public List<PltProductFile> getFileByProId(String proId) { |
| | | if(StringUtils.isBlank(proId)){ |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private void addUrl(PrWorkingInstruction ins) { |
| | | if (ins == null || ins.fileId == null) { |
| | | return; |
| | |
| | | ins.orgName = file.orgName; |
| | | ins.extName = file.extName; |
| | | } |
| | | |
| | | private PltProduct addWebUrl(PltProduct pro) { |
| | | if (pro != null) { |
| | | if (pro.image != null) { |
| | |
| | | } |
| | | return pro; |
| | | } |
| | | |
| | | private String getFilePathWithWebUrl(Long fileId) { |
| | | OthFile file = othFileMapper.selectByPrimaryKey(fileId); |
| | | FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); |