|  |  | 
 |  |  |  | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 移动端服务核心类 | 
 |  |  | 
 |  |  |         return R.error("盘点确认异常"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         /** | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public R pdaWarehousingNow(PdaWarehousingNowParam param, Long userId) { | 
 |  |  |  | 
 |  |  |         String barcode = param.getBarcode(); | 
 |  |  |         Integer sourceStaNo = param.getSourceStaNo(); | 
 |  |  |  | 
 |  |  |         int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", barcode)); | 
 |  |  |         if (zpalletCount > 0) { | 
 |  |  |             throw new CoolException("库存托盘码已存在:" + barcode); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode)); | 
 |  |  |         if (barcodeCount > 0) { | 
 |  |  |             throw new CoolException("工作档已存在该托盘码:" + barcode); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Map<String, List<PdaWarehousingNowParam.Roll>> boxGroup = param.getBoxGroup(); | 
 |  |  |         List<PdaWarehousingNowParam.Roll> leftPosList = boxGroup.get("左"); | 
 |  |  |         List<PdaWarehousingNowParam.Roll> centrePosList = boxGroup.get("中"); | 
 |  |  |         List<PdaWarehousingNowParam.Roll> rightPosList = boxGroup.get("右"); | 
 |  |  |  | 
 |  |  |         // 根据箱号获取包装组号 | 
 |  |  |         List<String> boxNoList = leftPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList()); | 
 |  |  |         boxNoList.addAll(centrePosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList())); | 
 |  |  |         boxNoList.addAll(rightPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList())); | 
 |  |  |         Map<String, String> map = new HashMap<>(); | 
 |  |  | //        if (boxNoList.size() > 0) { | 
 |  |  | //             map = getPackageGroupNoByGwms(boxNoList); | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         LocTypeDto locTypeDto = new LocTypeDto(); | 
 |  |  |         locTypeDto.setLocType1((short)1); | 
 |  |  |  | 
 |  |  |         // 根据源站点寻找库位 | 
 |  |  |         StartupDto dto = commonService.getLocNo(1, sourceStaNo, locTypeDto); | 
 |  |  |  | 
 |  |  |         int workNo = dto.getWorkNo(); | 
 |  |  |         Date now = new Date(); | 
 |  |  |         // 生成工作档 | 
 |  |  |         WrkMast wrkMast = new WrkMast(); | 
 |  |  |         wrkMast.setWrkNo(workNo); | 
 |  |  |         wrkMast.setIoTime(new Date()); | 
 |  |  |         wrkMast.setWrkSts(1L); // 工作状态:1.生成入库id | 
 |  |  |         wrkMast.setIoType(1); // 入出库状态:1.入库 | 
 |  |  |         wrkMast.setIoPri(13D); // 优先级 | 
 |  |  |         wrkMast.setCrnNo(dto.getCrnNo()); | 
 |  |  |         wrkMast.setSourceStaNo(dto.getSourceStaNo()); | 
 |  |  |         wrkMast.setStaNo(dto.getStaNo()); | 
 |  |  |         wrkMast.setLocNo(dto.getLocNo()); | 
 |  |  |         wrkMast.setBarcode(barcode); // 托盘码 | 
 |  |  |         wrkMast.setFullPlt("Y"); // 满板:Y | 
 |  |  |         wrkMast.setPicking("N"); // 拣料 | 
 |  |  |         wrkMast.setExitMk("N"); // 退出 | 
 |  |  |         wrkMast.setEmptyMk("N"); // 空板 | 
 |  |  |         wrkMast.setLinkMis("Y"); | 
 |  |  |         wrkMast.setCtnType(1); // 容器类型 | 
 |  |  |         // 操作人员数据 | 
 |  |  |         wrkMast.setAppeTime(now); | 
 |  |  |         wrkMast.setModiTime(now); | 
 |  |  |         wrkMast.setAppeUser(userId); | 
 |  |  |         wrkMast.setModiUser(userId); | 
 |  |  |         boolean res = wrkMastService.insert(wrkMast); | 
 |  |  |         if (!res) { | 
 |  |  |             throw new CoolException("保存工作档失败"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         for (PdaWarehousingNowParam.Roll roll: leftPosList) { | 
 |  |  |             WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |             wrkDetl.setWrkNo(workNo); | 
 |  |  |             wrkDetl.setMatnr(roll.getSpecs()); // 规格 | 
 |  |  |             wrkDetl.setMaktx(roll.getSpecs()); //规格 | 
 |  |  |             wrkDetl.setBatch(roll.getBoxNo()); // 箱号 | 
 |  |  |             wrkDetl.setModel(roll.getRollNo()); // 卷号 | 
 |  |  |             wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号 | 
 |  |  |             wrkDetl.setZpallet(barcode); // 托盘吗 | 
 |  |  |             wrkDetl.setOrigin("左"); // 木箱在托盘位置 | 
 |  |  |             wrkDetl.setWeight(roll.getNetWeight()); // 净重 | 
 |  |  |             wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 | 
 |  |  |             wrkDetl.setPrice(roll.getLength()); | 
 |  |  |             wrkDetl.setSpecs(String.valueOf(roll.getSplices())); | 
 |  |  |             wrkDetl.setAnfme(1.0); | 
 |  |  |             wrkDetl.setIoTime(now); | 
 |  |  |             wrkDetl.setAppeTime(now); | 
 |  |  |             wrkDetl.setModiTime(now); | 
 |  |  |             wrkDetl.setAppeUser(userId); | 
 |  |  |             wrkDetl.setModiUser(userId); | 
 |  |  |             if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                 throw new CoolException("保存工作明细失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         for (PdaWarehousingNowParam.Roll roll: centrePosList) { | 
 |  |  |             WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |             wrkDetl.setWrkNo(workNo); | 
 |  |  |             wrkDetl.setMatnr(roll.getSpecs()); // 规格 | 
 |  |  |             wrkDetl.setMaktx(roll.getSpecs()); //规格 | 
 |  |  |             wrkDetl.setBatch(roll.getBoxNo()); // 箱号 | 
 |  |  |             wrkDetl.setModel(roll.getRollNo()); // 卷号 | 
 |  |  |             wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号 | 
 |  |  |             wrkDetl.setZpallet(barcode); // 托盘吗 | 
 |  |  |             wrkDetl.setOrigin("中"); // 木箱在托盘位置 | 
 |  |  |             wrkDetl.setWeight(roll.getNetWeight()); // 净重 | 
 |  |  |             wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 | 
 |  |  |             wrkDetl.setPrice(roll.getLength()); | 
 |  |  |             wrkDetl.setSpecs(String.valueOf(roll.getSplices())); | 
 |  |  |             wrkDetl.setAnfme(1.0); | 
 |  |  |             wrkDetl.setIoTime(now); | 
 |  |  |             wrkDetl.setAppeTime(now); | 
 |  |  |             wrkDetl.setModiTime(now); | 
 |  |  |             wrkDetl.setAppeUser(userId); | 
 |  |  |             wrkDetl.setModiUser(userId); | 
 |  |  |             if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                 throw new CoolException("保存工作明细失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         for (PdaWarehousingNowParam.Roll roll: rightPosList) { | 
 |  |  |             WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |             wrkDetl.setWrkNo(workNo); | 
 |  |  |             wrkDetl.setMatnr(roll.getSpecs()); // 规格 | 
 |  |  |             wrkDetl.setMaktx(roll.getSpecs()); //规格 | 
 |  |  |             wrkDetl.setBatch(roll.getBoxNo()); // 箱号 | 
 |  |  |             wrkDetl.setModel(roll.getRollNo()); // 卷号 | 
 |  |  |             wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号 | 
 |  |  |             wrkDetl.setZpallet(barcode); // 托盘吗 | 
 |  |  |             wrkDetl.setOrigin("右"); // 木箱在托盘位置 | 
 |  |  |             wrkDetl.setWeight(roll.getNetWeight()); // 净重 | 
 |  |  |             wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 | 
 |  |  |             wrkDetl.setPrice(roll.getLength()); | 
 |  |  |             wrkDetl.setSpecs(String.valueOf(roll.getSplices())); | 
 |  |  |             wrkDetl.setAnfme(1.0); | 
 |  |  |             wrkDetl.setIoTime(now); | 
 |  |  |             wrkDetl.setAppeTime(now); | 
 |  |  |             wrkDetl.setModiTime(now); | 
 |  |  |             wrkDetl.setAppeUser(userId); | 
 |  |  |             wrkDetl.setModiUser(userId); | 
 |  |  |             if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                 throw new CoolException("保存工作明细失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 更新目标库位状态 | 
 |  |  |         LocMast locMast = locMastService.selectById(dto.getLocNo()); | 
 |  |  |         if (locMast.getLocSts().equals("O")){ | 
 |  |  |             locMast.setLocSts("S"); // S.入库预约 | 
 |  |  |             locMast.setModiTime(now); | 
 |  |  |             if (!locMastService.updateById(locMast)){ | 
 |  |  |                 throw new CoolException("改变库位状态失败"); | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             throw new CoolException(dto.getLocNo()+"目标库位已被占用"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 推送GWCS目标消息 | 
 |  |  |         openServiceImpl.pushStaNoToGwcs(sourceStaNo,dto.getStaNo(),dto.getWorkNo()); | 
 |  |  |         return R.ok("入库启动成功"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private Map<String, String> getPackageGroupNoByGwms(List<String> boxNoList) { | 
 |  |  |         Map<String, String> map = null; | 
 |  |  |         Map<String, Object> headers = new HashMap<>(); | 
 |  |  |         headers.put("Content-Type", "application/json;charset=UTF-8"); | 
 |  |  |  | 
 |  |  |         JSONObject jsonObject = new JSONObject(); | 
 |  |  |         jsonObject.put("boxNoList", JSONObject.toJSONString(boxNoList)); | 
 |  |  |         String body = jsonObject.toJSONString(); | 
 |  |  |         boolean success = false; | 
 |  |  |         String response = ""; | 
 |  |  |         try { | 
 |  |  |             response = new HttpHandler.Builder() | 
 |  |  |                     .setUri(MesConstant.GWMS_IP_PORT) | 
 |  |  |                     .setPath(MesConstant.GWMS_GET_GROUP_NO_URL) | 
 |  |  |                     .setHeaders(headers) | 
 |  |  |                     .setJson(body) | 
 |  |  |                     .build() | 
 |  |  |                     .doPost(); | 
 |  |  |             if (!Cools.isEmpty(response)) { | 
 |  |  |                 JSONObject jsonObject1 = JSONObject.parseObject(response); | 
 |  |  |                 int code = (int) jsonObject1.get("code"); | 
 |  |  |                 String msg = (String) jsonObject1.get("msg"); | 
 |  |  |                  if (code != 200) { | 
 |  |  |                      throw new CoolException(msg); | 
 |  |  |                  } | 
 |  |  |                 map = (Map<String, String>) jsonObject1.get("data"); | 
 |  |  |                 success = true; | 
 |  |  |  | 
 |  |  |             } else { | 
 |  |  |                 log.error("pda组托入库请求gwms接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("pda组托入库请求gwms接口异常,工作号:{},{}", boxNoList.toString(), e.getMessage()); | 
 |  |  |         } finally { | 
 |  |  |             try { | 
 |  |  |                 // 保存接口日志 | 
 |  |  |                 apiLogService.save( | 
 |  |  |                         "pda组托入库请求gwms接口", | 
 |  |  |                         MesConstant.URL + MesConstant.PAKIN_URL, | 
 |  |  |                         null, | 
 |  |  |                         "127.0.0.1", | 
 |  |  |                         body, | 
 |  |  |                         response, | 
 |  |  |                         success | 
 |  |  |                 ); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 log.error("接口日志保存异常", e); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (map == null) { | 
 |  |  |             throw new CoolException("请求gwcs查询包装组号异常"); | 
 |  |  |         } | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |          * 比较两个集合的类的属性,相同则抵消,最后判断两个集合是否完全抵消 | 
 |  |  |          */ | 
 |  |  |         public  boolean compareAndCheckCancellation(List<WrkDetl> list1, List<PdckqrParam.Material> list2) { |