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