|  |  |  | 
|---|
|  |  |  | 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); | 
|---|