src/main/java/com/zy/asrs/controller/MobileController.java
@@ -246,34 +246,12 @@ return R.ok("组托成功"); } @RequestMapping("/comb/agv/auth") @ManagerAuth(memo = "组托") public R combAgv(@RequestBody CombParam combParam){ // mobileService.comb(combParam, getUserId()); mobileService.combAgv(combParam, getUserId()); return R.ok("组托成功"); } @RequestMapping("/combAuto/auth") @ManagerAuth(memo = "组托") public R combAuto(@RequestBody CombParam combParam){ // mobileService.comb(combParam, getUserId()); mobileService.comb(combParam, getUserId()); return R.ok("组托成功"); } @RequestMapping("/combAuto/wcs/auth") // @ManagerAuth(memo = "组托") public R combAutoWcs(@RequestBody CombParam combParam){ // mobileService.comb(combParam, getUserId()); mobileService.combAuto(combParam, 7777L); return R.ok("组托成功"); } @RequestMapping("/AgvUnlockLoc/wcs/auth") public R agvUnlockLoc(@RequestBody AgvUnlockLoc agvUnlockLoc){ mobileService.agvUnlockLoc(agvUnlockLoc); return R.ok("离库成功"); } @RequestMapping("/kitting/query/auth") src/main/java/com/zy/asrs/service/MobileService.java
@@ -45,9 +45,6 @@ * 组托 */ void comb(CombParam param, Long userId); void combAuto(CombParam param, Long userId); void combAgv(CombParam param, Long userId); void agvUnlockLoc(AgvUnlockLoc agvUnlockLoc); /** * 齐套入库查询 src/main/java/com/zy/asrs/service/OpenService.java
@@ -51,14 +51,8 @@ void taskArmWorkspaceStatus(TaskArmWorkspaceStatusParam param); boolean TaskArmLocStatus(ArmOKParam param); void taskArmWorkOrderStatus(OrderArmEndParam param); boolean TaskArmWorkOrderSign(OrderArmEndParam param); boolean TaskAgvReport(TaskAgvReportParam param); boolean taskAgvCreate(TaskAgvCreateParam param); List<AgvLocListDetlParam> getAgvLocList(AgvLocListParam param); boolean bindCtnrAndBin(bindCtnrAndBinParam param); boolean agvApplicationPassedTheGrating(ArmAgvGratingParam param); boolean agvApplicationPassedTheGrating(AgvGoTheArnParam param); boolean agvBindAndBin(String taskNo); boolean taskArmOrderResult(OrderArmEndParam param); List<PickWrkDetlListParam> getPickList(PdaPickListParam param); src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -24,7 +24,6 @@ import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import com.zy.erp.kingdee.utils.PostMesDataUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -706,334 +705,6 @@ } } @Override @Transactional public void combAgv(CombParam param, Long userId) { if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); } // if(param.getCombMats().size()>1){ // throw new CoolException("请提取一个商品,或者刷新重新组托!"); // } // 判断是否有相同条码的数据 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { throw new CoolException(param.getBarcode() + "数据正在进行入库"); } if(param.getBarcode().length()!=6){ throw new CoolException("条码长度不是6位===>>" + param.getBarcode()); } // if (param.getCombMats().size()>1){ // throw new CoolException("不允许混料===>>" + param.getBarcode()); // } int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",param.getLocNo())); if (countLoc > 0 || countWrk > 0 || countwait > 0) { throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode()); } Date now = new Date(); boolean allEmpty = true; if (param.getCombMats() != null) { for (CombParam.CombMat mat : param.getCombMats()) { if (!Cools.isEmpty(mat.getOrderNo())) { allEmpty = false; break; } } } // 无单组托 if (allEmpty) { // 生成入库通知档 List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme()); detlDto.setMemo(elem.getMemo()); detlDto.setSupp(elem.getSupp()); detlDto.setManu(elem.getManu()); detlDto.setSuppCode(elem.getSuppCode()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.findDto(detlDtos, detlDto); assert one != null; one.setAnfme(one.getAnfme() + detlDto.getAnfme()); } else { detlDtos.add(detlDto); } }); for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "商品档案不存在"); } WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); waitPakin.setBatch(detlDto.getBatch()); waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAnfme(detlDto.getAnfme()); // 数量 waitPakin.setStatus("Y"); // 状态 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); waitPakin.setModiTime(now); waitPakin.setMemo(detlDto.getMemo()); waitPakin.setSupp(detlDto.getSupp()); waitPakin.setSuppCode(detlDto.getSuppCode()); waitPakin.setManu(detlDto.getManu()); waitPakin.setStandby1(detlDto.getStandby1()); waitPakin.setStandby2(detlDto.getStandby2()); waitPakin.setStandby3(detlDto.getStandby3()); waitPakin.setBoxType1(detlDto.getBoxType1()); waitPakin.setBoxType2(detlDto.getBoxType2()); waitPakin.setBoxType3(detlDto.getBoxType3()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存入库通知档失败"); } } // 关联组托 } else { // Order order = orderService.selectByNo(param.getOrderNo()); Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, param.getCombMats().get(0).getOrderNo()); if (Cools.isEmpty(order) || order.getSettle() > 2) { throw new CoolException("单据编号已过期"); } // 生成入库通知档 List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { // 订单明细数量校验 // OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.TRUE, order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3()); if (elem.getAnfme() > orderDetl.getEnableQty()) { throw new CoolException(orderDetl.getMatnr() + "入库数量不合法"); } OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE,order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme()); DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme()); detlDto.setMemo(elem.getMemo()); detlDto.setSupp(elem.getSupp()); detlDto.setManu(elem.getManu()); detlDto.setSuppCode(elem.getSuppCode()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.findDto(detlDtos, detlDto); assert one != null; one.setAnfme(one.getAnfme() + detlDto.getAnfme()); } else { detlDtos.add(detlDto); } }); for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "商品档案不存在"); } WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); waitPakin.setOrderNo(order.getOrderNo()); // 单据编号 waitPakin.setBatch(detlDto.getBatch()); // 序列码 waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAnfme(detlDto.getAnfme()); // 数量 waitPakin.setStatus("Y"); // 状态 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); waitPakin.setModiTime(now); waitPakin.setMemo(detlDto.getMemo()); waitPakin.setSupp(detlDto.getSupp()); waitPakin.setSuppCode(detlDto.getSuppCode()); waitPakin.setManu(detlDto.getManu()); waitPakin.setStandby1(detlDto.getStandby1()); waitPakin.setStandby2(detlDto.getStandby2()); waitPakin.setStandby3(detlDto.getStandby3()); waitPakin.setBoxType1(detlDto.getBoxType1()); waitPakin.setBoxType2(detlDto.getBoxType2()); waitPakin.setBoxType3(detlDto.getBoxType3()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存入库通知档失败"); } } BasAgvLocNoService basAgvLocNoService = SpringUtils.getBean(BasAgvLocNoService.class); BasAgvLocNo basAgvLocNoSou = basAgvLocNoService.selectOne(new EntityWrapper<BasAgvLocNo>().eq("loc_no", param.getLocNo())); AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(); agvBindCtnrAndBinParam.setCtnrCode(param.getBarcode()); agvBindCtnrAndBinParam.setCtnrTyp("1"); agvBindCtnrAndBinParam.setStgBinCode(basAgvLocNoSou.getAgvLocNo()); agvBindCtnrAndBinParam.setReqCode(String.valueOf(System.currentTimeMillis())); agvBindCtnrAndBinParam.setIndBind("1"); ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定", AgvConstant.AGV_URL+"/"+AgvConstant.AGV_1LBind,AgvConstant.getAGVADAPTOR(1), agvBindCtnrAndBinParam); if(resultBind.getCode() != 200){ throw new CoolException("agv入库绑定失败"); } locMast.setBarcode(param.getBarcode()); locMast.setLocSts("R"); if(!locMastService.updateById(locMast)){ throw new CoolException("新增agv入库任务失败"); } OrderInAndOutUtil.updateOrder(Boolean.TRUE,order.getId(), 2L, userId); } } @Override @Transactional public void combAuto(CombParam param, Long userId) { if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); } // if(param.getCombMats().size()>1){ // throw new CoolException("请提取一个商品,或者刷新重新组托!"); // } // 判断是否有相同条码的数据 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { throw new CoolException(param.getBarcode() + "数据正在进行入库"); } if(param.getBarcode().length()!=6){ throw new CoolException("条码长度不是6位===>>" + param.getBarcode()); } // if (param.getCombMats().size()>1){ // throw new CoolException("不允许混料===>>" + param.getBarcode()); // } int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); if (countLoc > 0 || countWrk > 0 || countwait > 0) { throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode()); } Date now = new Date(); boolean result = false; String orderNo = null; String orderNo1 = null; for (CombParam.CombMat combMat : param.getCombMats()) { if(combMat.getSupplier().equals("1")){ List<OrderDetlPakin> orderDetlPakins2 = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>() .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo()) .eq("box_type2","BU-00001")); if (orderDetlPakins2.size() > 0) { orderNo1 = orderDetlPakins2.get(0).getOrderNo(); } else { throw new CoolException("未查询到相关订单===>>" + param.getBarcode()); } result = true; } //0 List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>() .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo()) .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2()) .eq("standby3", combMat.getStandby3()).eq("box_type2","shyucheng.test")); if (orderDetlPakins.size() > 0) { orderNo = orderDetlPakins.get(0).getOrderNo(); combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1()); combMat.setBoxType2(orderDetlPakins.get(0).getBoxType2()); combMat.setBoxType3(orderDetlPakins.get(0).getBoxType3()); combMat.setMemo(orderDetlPakins.get(0).getMemo()); combMat.setSupp(orderDetlPakins.get(0).getSupp()); combMat.setSuppCode(orderDetlPakins.get(0).getSuppCode()); combMat.setManu(orderDetlPakins.get(0).getManu());//仓库编码 } else { throw new CoolException("未查询到相关订单===>>" + param.getBarcode()); } } // Order order = orderService.selectByNo(param.getOrderNo()); Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, orderNo); if (Cools.isEmpty(order) || order.getSettle() > 2) { throw new CoolException("单据编号已过期"); } Order order1 = orderService.selectByNo(orderNo); if (Cools.isEmpty(order1) || order1.getSettle() > 2) { throw new CoolException("单据编号已过期"); } if(result){ order1.setPayType(1);// y->h order1.setSalesman(orderNo1); orderService.updateById(order1); } // 生成入库通知档 List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { // 订单明细数量校验 // OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.TRUE, order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3()); if (elem.getAnfme() > orderDetl.getEnableQty()) { throw new CoolException(orderDetl.getMatnr() + "入库数量不合法"); } // 修改订单作业数量 // if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { // throw new CoolException("修改单据作业数量失败"); // } OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE,order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme()); DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(), elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme()); detlDto.setMemo(elem.getMemo()); detlDto.setSupp(elem.getSupp()); detlDto.setManu(elem.getManu()); detlDto.setSuppCode(elem.getSuppCode()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.findDto(detlDtos, detlDto); assert one != null; one.setAnfme(one.getAnfme() + detlDto.getAnfme()); } else { detlDtos.add(detlDto); } }); for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "商品档案不存在"); } WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); waitPakin.setOrderNo(orderNo); // 单据编号 waitPakin.setBatch(detlDto.getBatch()); // 序列码 waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAnfme(detlDto.getAnfme()); // 数量 waitPakin.setStatus("Y"); // 状态 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); waitPakin.setModiTime(now); waitPakin.setMemo(detlDto.getMemo()); waitPakin.setSupp(detlDto.getSupp()); waitPakin.setSuppCode(detlDto.getSuppCode()); waitPakin.setManu(detlDto.getManu()); waitPakin.setStandby1(detlDto.getStandby1()); waitPakin.setStandby2(detlDto.getStandby2()); waitPakin.setStandby3(detlDto.getStandby3()); waitPakin.setBoxType1(detlDto.getBoxType1()); waitPakin.setBoxType2(detlDto.getBoxType2()); waitPakin.setBoxType3(detlDto.getBoxType3()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存入库通知档失败"); } } // orderService.updateSettle(order.getId(), 2L, userId); OrderInAndOutUtil.updateOrder(Boolean.TRUE,order.getId(), 2L, userId); } @Override @Transactional @@ -1680,42 +1351,5 @@ } else { throw new CoolException(locDetl.getLocNo() + "库位不是在库状态"); } } @Override public void agvUnlockLoc(AgvUnlockLoc agvUnlockLoc){ Date now = new Date(); if(agvUnlockLoc.getFloorNo().equals(1)){ LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",agvUnlockLoc.getPositionCode())); if(locMast != null){ locMast.setLocSts("O"); locMast.setBarcode(""); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { throw new CoolException(agvUnlockLoc.getPositionCode() + "库位不是在库状态"); } } }else{ LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",agvUnlockLoc.getPositionCode())); AgvBindCtnrAndBinTwoParam agvBindCtnrAndBinTwoParam = new AgvBindCtnrAndBinTwoParam(); agvBindCtnrAndBinTwoParam.setReqCode(String.valueOf(snowflakeIdWorker.nextId())); agvBindCtnrAndBinTwoParam.setPodcode(agvUnlockLoc.getPodcode()); agvBindCtnrAndBinTwoParam.setPositionCode(agvUnlockLoc.getPositionCode()); agvBindCtnrAndBinTwoParam.setIndBind("0");; ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV库位解绑", AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam); if (resultBind.getCode()!=1){ if(locMast != null){ locMast.setLocSts("O"); locMast.setBarcode(""); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { throw new CoolException(agvUnlockLoc.getPositionCode() + "库位不是在库状态"); } } } } } } src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -23,7 +23,6 @@ import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import com.zy.common.utils.NodeUtils; import com.zy.erp.kingdee.utils.PostMesDataUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -838,95 +837,6 @@ @Override @Transactional public boolean TaskArmWorkOrderSign(OrderArmEndParam param) { BasArmMastSign basArmMastSignNew = basArmMastSignService.selectOne( new EntityWrapper<BasArmMastSign>() .eq("order_no", param.getOrderNo()) .eq("create_time", param.getBindingTags()) .eq("status", 0) ); if (Cools.isEmpty(basArmMastSignNew)) { return false; } return true; } @Override @Transactional public boolean TaskAgvReport(TaskAgvReportParam param) { BasAgvMast basAgvMast = basAgvMastService.selectOne(new EntityWrapper<BasAgvMast>().eq("task_no", param.getTaskNo())); if (Cools.isEmpty(basAgvMast)) { return false; } basAgvMast.setStatus(2); basAgvMastService.updateById(basAgvMast); return true; } @Override @Transactional public boolean taskAgvCreate(TaskAgvCreateParam param) { // 参数检查 if (param == null) { throw new CoolException("参数不能为空"); } BasAgvMast basAgvMast = new BasAgvMast(); Long ts = basAgvMast.getTimestamp(); if (ts == null) { throw new CoolException("timestamp 生成失败"); } String barcode = String.valueOf(ts); if (barcode.length() > 16) { barcode = barcode.substring(0, 16); } basAgvMast.setBarcode(barcode); String locNo = null; String staNo = null; basAgvMast.setTaskNo(commonService.getWorkNo(0)); basAgvMast.setSourceStaNo(param.getSourceStaNo()); basAgvMast.setStaNo(param.getStaNo()); basAgvMast.setSourceLocNo(param.getSourceLocNo()); basAgvMast.setLocNo(param.getLocNo()); basAgvMast.setPriority(1L); basAgvMast.setStatus(0); basAgvMast.setAppeTime(new Date()); basAgvMast.setModiTime(new Date()); basAgvMast.setIoType(param.getIoType()); basAgvMast.setFloorNo(param.getFloorNo()); switch (basAgvMast.getIoType()) { // AGV库位==》输送线站点 0 // AGV库位==》AGV库位 1 // 输送线站点==》AGV库位 2 // 输送线站点==》输送线站点 3 case 0: case 1: locNo = param.getSourceLocNo(); break; case 2: case 3: staNo = param.getSourceStaNo().toString(); break; } basAgvMastService.insert(basAgvMast); bindCtnrAndBinParam bindParam = new bindCtnrAndBinParam(); bindParam.setBarcode(basAgvMast.getBarcode()); bindParam.setIndBind("1"); bindParam.setFloorNo(basAgvMast.getFloorNo()); bindParam.setLocNo(locNo); bindParam.setStaNo(staNo); if (bindCtnrAndBin(bindParam)) { return true; } else { throw new CoolException("未能绑定"); } } @Override @Transactional public List<PickWrkDetlListParam> getPickList(PdaPickListParam param) { List<WrkDetl> wrkDetls = wrkDetlService.findByBarcode(param.getBarcode()); List<PickWrkDetlListParam> result = new ArrayList<>(); @@ -1060,95 +970,6 @@ return true; } @Override @Transactional public boolean agvApplicationPassedTheGrating(ArmAgvGratingParam arm) { ReturnT<String> result = new PostMesDataUtils().postMesDataArmGrating("光栅请求下发:", ArmConstant.getArmUrl(arm.getArmNo()), ArmConstant.ARM_ADAPTOR_GRATING_AGVENTER, arm); if (result.getCode() == 200) { return true; } return false; } @Override @Transactional public boolean agvApplicationPassedTheGrating(AgvGoTheArnParam param) { String URL = "http://10.10.10.200:8181/rcms/services/rest/hikRpcService"; // AGV接口地址 String AGVPath = "continueTask"; // 接口路径 AgvGoParam agvGoParam = new AgvGoParam(); agvGoParam.setCode("0"); agvGoParam.setMessage("继续执行"); agvGoParam.setReqCode(param.getReqCode()); agvGoParam.setTaskCode(param.getTaskCode()); ReturnT<String> result = new PostMesDataUtils().postMesDataArmGrating("光栅下发后继续任务:", URL, AGVPath, agvGoParam); if (result.getCode() == 200) { return true; } return false; } @Override @Transactional public boolean agvBindAndBin(String taskNo) { String URL = "http://10.10.10.200:8181"; // AGV接口地址 String AGVPath = "rcms/services/rest/hikRpcService/bindCtnrAndBin"; // 接口路径 BasAgvMast basAgvMast = basAgvMastService.selectOne(new EntityWrapper<BasAgvMast>().eq("task_no", taskNo)); if (Cools.isEmpty(basAgvMast)) { return false; } if (basAgvMast.getFloorNo() == 1) { BasAgvLocNoService basAgvLocNoService = SpringUtils.getBean(BasAgvLocNoService.class); BasAgvLocNo basAgvLocNoEnd = basAgvLocNoService.selectOne( new EntityWrapper<BasAgvLocNo>().eq("sta_no", basAgvMast.getStaNo()) ); BasAgvLocNo locNo = basAgvLocNoService.selectOne( new EntityWrapper<BasAgvLocNo>().eq("loc_no", basAgvMast.getLocNo()) ); String binCode = basAgvLocNoEnd != null ? basAgvLocNoEnd.getAgvLocNo() : (locNo != null ? locNo.getAgvLocNo() : null); if (Cools.isEmpty(basAgvMast)) { return false; } String ctnrCode = basAgvMast.getBarcode().length() > 1 ? basAgvMast.getBarcode() : basAgvMast.getTimestamp().toString(); AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(); agvBindCtnrAndBinParam.setReqCode(basAgvMast.getTaskNo() + "-" + System.currentTimeMillis()); agvBindCtnrAndBinParam.setCtnrCode(ctnrCode); agvBindCtnrAndBinParam.setCtnrTyp("1"); agvBindCtnrAndBinParam.setStgBinCode(binCode); agvBindCtnrAndBinParam.setIndBind("0"); ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器解绑", URL, AGVPath, agvBindCtnrAndBinParam); if (resultBind.getCode() == 200) { basAgvMast.setStatus(4); basAgvMastService.updateById(basAgvMast); return true; } return false; } else { if (basAgvMast != null && basAgvMast.getIoType() != null && (basAgvMast.getIoType() == 0) && (Objects.equals(basAgvMast.getSourceStaNo(), 2033) || Objects.equals(basAgvMast.getStaNo(), 2034) || Objects.equals(basAgvMast.getStaNo(), 4003) || Objects.equals(basAgvMast.getSourceStaNo(), 4006))) { AgvBindCtnrAndBinTwoParam agvBindCtnrAndBinTwoParam = new AgvBindCtnrAndBinTwoParam(); agvBindCtnrAndBinTwoParam.setReqCode(String.valueOf(snowflakeIdWorker.nextId())); agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode()); agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getStaNo().toString()); agvBindCtnrAndBinTwoParam.setIndBind("0"); ; ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器解绑", AgvConstant.AGV_URL + "/" + AgvConstant.AGV_hikRpcService, AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam); if (resultBind.getCode() != 1) { basAgvMast.setStatus(4); basAgvMastService.updateById(basAgvMast); return true; } } } return false; } @Override @Transactional src/main/java/com/zy/asrs/task/AutomaticallyIssueWCSTasksScheduler.java
@@ -24,7 +24,10 @@ @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData(); List<WrkMast> wrkMasts = wrkMastService.selectList( new com.baomidou.mybatisplus.mapper.EntityWrapper<WrkMast>() .eq("wrk_sts", 11) ); if (wrkMasts.isEmpty()) { return; } src/main/java/com/zy/asrs/task/WorkLogScheduler.java
@@ -48,32 +48,4 @@ } } @Scheduled(cron = "0/5 * * * * ? ") private void executeArm(){ List<BasArmMast> basArmMastList = basArmMastService.selectList(new EntityWrapper<BasArmMast>().eq("status", 6)); if (basArmMastList.isEmpty()) { return; } for (BasArmMast basArmMast : basArmMastList) { ReturnT<String> result = workLogHandler.startArm(basArmMast); if (!result.isSuccess()) { log.error("ARM工作档[id={}]历史档处理失败", basArmMast.getId()); } } } @Scheduled(cron = "0/10 * * * * ? ") private void executeAgv(){ List<BasAgvMast> basAgvstList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 4)); if (basAgvstList.isEmpty()) { return; } for (BasAgvMast basAgvMast : basAgvstList) { ReturnT<String> result = workLogHandler.startAgv(basAgvMast); if (!result.isSuccess()) { log.error("AGV工作档[id={}]历史档处理失败", basAgvMast.getId()); } } } } src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -26,6 +26,33 @@ @Autowired private WorkMastHandler workMastHandler; /** * wcs上报任务完成后,将任务上报给erp * 2.入库上报 * 13.出库上报 */ @Scheduled(cron = "0/3 * * * * ? ") private void execute1(){ List<WrkMast> wrkMasts = wrkMastService.selectList( new com.baomidou.mybatisplus.mapper.EntityWrapper<WrkMast>() .in("wrk_sts", 2, 13) ); if (wrkMasts.isEmpty()) { return; } for (WrkMast wrkMast : wrkMasts) { ReturnT<String> returnT = workMastHandler.start1(wrkMast); if (!returnT.isSuccess()) { wrkMast.setUpdMk("X"); wrkMast.setErrorMemo(returnT.getMsg()); wrkMast.setErrorTime(new Date()); if (!wrkMastService.updateById(wrkMast)) { log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo()); } } } } @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData(); src/main/java/com/zy/asrs/task/handler/AutomaticallyIssueWCSTasksHandler.java
@@ -57,48 +57,75 @@ if (toSend.isEmpty()) { return SUCCESS; } List<Map<String, Object>> tasks = new ArrayList<>(); Map<String, List<WrkMast>> groupByUserNo = new HashMap<>(); for (WrkMast m : toSend) { Map<String, Object> t = new HashMap<>(); t.put("taskNo", String.valueOf(m.getWrkNo())); t.put("staNo", String.valueOf(m.getStaNo())); t.put("locNo", m.getSourceLocNo()); if (m.getIoPri() != null) { t.put("taskPri", m.getIoPri().intValue()); String key = m.getUserNo(); if (key == null || key.trim().isEmpty()) { key = "_NO_USER_"; } t.put("seq",m.getPltType()); t.put("orderId",m.getUserNo()); tasks.add(t); List<WrkMast> list = groupByUserNo.get(key); if (list == null) { list = new ArrayList<>(); groupByUserNo.put(key, list); } list.add(m); } Map<String, Object> payload = new HashMap<>(); payload.put("tasks", tasks); String response = new HttpHandler.Builder() .setUri(urlValue) .setPath(createOutTaskValue) .setHttps(urlValue != null && urlValue.startsWith("https://")) .setTimeout(10, TimeUnit.SECONDS) .setJson(JSON.toJSONString(payload)) .build() .doPost(); List<WrkMast> successList = new ArrayList<>(); boolean hasError = false; JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response); Integer code = jsonObject.getInteger("code"); if (code == null || !Objects.equals(code, 200)) { log.error("WCS下发出库任务失败, url:{}, path:{}, request:{}, response:{}", urlValue, createOutTaskValue, JSON.toJSONString(payload), response); for (Map.Entry<String, List<WrkMast>> entry : groupByUserNo.entrySet()) { List<Map<String, Object>> tasks = new ArrayList<>(); for (WrkMast m : entry.getValue()) { Map<String, Object> t = new HashMap<>(); t.put("taskNo", String.valueOf(m.getWrkNo())); t.put("staNo", String.valueOf(m.getStaNo())); t.put("locNo", m.getSourceLocNo()); if (m.getIoPri() != null) { t.put("taskPri", m.getIoPri().intValue()); } t.put("batchSeq", m.getPltType()); if (m.getUserNo() != null) { t.put("batch", m.getUserNo()); } tasks.add(t); } Map<String, Object> payload = new HashMap<>(); payload.put("tasks", tasks); String response = new HttpHandler.Builder() .setUri(urlValue) .setPath(createOutTaskValue) .setHttps(urlValue != null && urlValue.startsWith("https://")) .setTimeout(10, TimeUnit.SECONDS) .setJson(JSON.toJSONString(payload)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response); Integer code = jsonObject.getInteger("code"); if (code == null || !Objects.equals(code, 200)) { hasError = true; log.error("WCS下发出库任务失败, url:{}, path:{}, userNo:{}, request:{}, response:{}", urlValue, createOutTaskValue, entry.getKey(), JSON.toJSONString(payload), response); continue; } successList.addAll(entry.getValue()); } if (successList.isEmpty()) { return FAIL.setMsg("WCS下发出库任务失败"); } Date now = new Date(); for (WrkMast m : toSend) { for (WrkMast m : successList) { m.setUpdMk("WCS_SENT"); m.setModiTime(now); m.setWrkSts(12L); } // 延迟注入,避免循环依赖 WrkMastService wrkMastService = com.core.common.SpringUtils.getBean(WrkMastService.class); for (WrkMast m : toSend) { for (WrkMast m : successList) { try { wrkMastService.updateById(m); } catch (Exception ignore) {} src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -9,6 +9,7 @@ import com.zy.asrs.task.core.ReturnT; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; @@ -24,6 +25,15 @@ @Service @Transactional public class WorkMastHandler extends AbstractHandler<String> { @Value("${erp.address.URL}") private String erpBaseUrl; @Value("${erp.address.Inaddress}") private String erpInAddress; @Value("${erp.address.Outaddress}") private String erpOutAddress; @Autowired private WrkMastService wrkMastService; @@ -570,4 +580,133 @@ return SUCCESS; } /** * wcs上报任务完成后,将任务上报给erp * 2.入库上报 * 13.出库上报 */ public ReturnT<String> start1(WrkMast wrkMast) { // 2.入库上报 if (wrkMast.getWrkSts() == 2) { return ErpdoIn(wrkMast); // 13.出库上报 } else if (wrkMast.getWrkSts() == 13) { return ErpdoOut(wrkMast); } return SUCCESS; } private ReturnT<String> ErpdoOut(WrkMast wrkMast){ try { com.zy.common.utils.HttpHandler.Builder builder = new com.zy.common.utils.HttpHandler.Builder(); if (Cools.isEmpty(erpBaseUrl) || Cools.isEmpty(erpOutAddress)) { return FAIL.setMsg("ERP出库上报地址未配置[erp.address.URL / erp.address.Outaddress]"); } java.util.List<WrkDetl> wrkDetls = wrkDetlService.selectList( new com.baomidou.mybatisplus.mapper.EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()) ); if (wrkDetls == null || wrkDetls.isEmpty()) { return FAIL.setMsg("ERP出库上报失败, 未找到工作明细[workNo=" + wrkMast.getWrkNo() + "]"); } java.util.Map<String, Object> payload = new java.util.HashMap<>(); payload.put("palletId", wrkMast.getBarcode()); payload.put("anfme", wrkDetls.get(0).getAnfme()); payload.put("locId", wrkMast.getSourceLocNo()); payload.put("weight", wrkMast.getScWeight()); payload.put("photos", new java.util.ArrayList<String>()); if (wrkMast.getModiTime() != null) { payload.put("createTime", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(wrkMast.getModiTime())); } else { payload.put("createTime", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date())); } payload.put("BizNo", String.valueOf(wrkDetls.get(0).getThreeCode())); String uri = erpBaseUrl; String response = builder .setUri(uri) .setPath(erpOutAddress) .setHttps(uri != null && uri.startsWith("https://")) .setTimeout(10, java.util.concurrent.TimeUnit.SECONDS) .setJson(com.alibaba.fastjson.JSON.toJSONString(payload)) .build() .doPost(); com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(response == null ? "{}" : response); Integer code = jsonObject.getInteger("code"); if (code == null || code != 0) { String msg = jsonObject.getString("msg"); return FAIL.setMsg(Cools.isEmpty(msg) ? "ERP出库上报失败" : msg); } wrkMast.setWrkSts(wrkMast.getWrkSts() + 1); wrkMast.setModiTime(new java.util.Date()); if (!wrkMastService.updateById(wrkMast)) { return FAIL.setMsg("ERP出库上报成功但更新工作状态失败; [workNo=" + wrkMast.getWrkNo() + "]"); } } catch (Exception e) { return FAIL.setMsg(e.getMessage()); } return SUCCESS; } private ReturnT<String> ErpdoIn(WrkMast wrkMast){ try { com.zy.common.utils.HttpHandler.Builder builder = new com.zy.common.utils.HttpHandler.Builder(); if (Cools.isEmpty(erpBaseUrl) || Cools.isEmpty(erpInAddress)) { return FAIL.setMsg("ERP入库上报地址未配置[erp.address.URL / erp.address.Inaddress]"); } java.util.Map<String, Object> payload = new java.util.HashMap<>(); payload.put("palletId", wrkMast.getBarcode()); java.util.List<WrkDetl> wrkDetls = wrkDetlService.selectList( new com.baomidou.mybatisplus.mapper.EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()) ); if (wrkDetls == null || wrkDetls.isEmpty()) { return FAIL.setMsg("ERP入库上报失败, 未找到工作明细[workNo=" + wrkMast.getWrkNo() + "]"); } double anfme = 0D; for (WrkDetl d : wrkDetls) { if (d != null && d.getAnfme() != null) { anfme += d.getAnfme(); } } payload.put("anfme", anfme); payload.put("locId", wrkMast.getLocNo()); payload.put("weight", wrkMast.getScWeight()); payload.put("photos", new java.util.ArrayList<String>()); if (wrkMast.getModiTime() != null) { payload.put("createTime", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(wrkMast.getModiTime())); } else { payload.put("createTime", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date())); } payload.put("BizNo", String.valueOf(wrkDetls.get(0).getThreeCode())); String uri = erpBaseUrl; String response = builder .setUri(uri) .setPath(erpInAddress) .setHttps(uri != null && uri.startsWith("https://")) .setTimeout(10, java.util.concurrent.TimeUnit.SECONDS) .setJson(com.alibaba.fastjson.JSON.toJSONString(payload)) .build() .doPost(); com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(response == null ? "{}" : response); Integer code = jsonObject.getInteger("code"); if (code == null || code != 0) { String msg = jsonObject.getString("msg"); return FAIL.setMsg(Cools.isEmpty(msg) ? "ERP入库上报失败" : msg); } wrkMast.setWrkSts(wrkMast.getWrkSts() + 1); wrkMast.setModiTime(new java.util.Date()); if (!wrkMastService.updateById(wrkMast)) { return FAIL.setMsg("ERP入库上报成功但更新工作状态失败; [workNo=" + wrkMast.getWrkNo() + "]"); } } catch (Exception e) { return FAIL.setMsg(e.getMessage()); } return SUCCESS; } } src/main/java/com/zy/common/web/WcsController.java
@@ -56,14 +56,11 @@ @ResponseBody public synchronized R getLocNo(@RequestBody SearchLocParam param) { log.info("收到WCS入库接口请求====>>入参:{}", param); if (Cools.isEmpty(param.getIoType())) { return R.error("入出库类型不能为空"); } if (Cools.isEmpty(param.getSourceStaNo())) { return R.error("源站编号不能为空"); } List<WaitPakin> waitPakins = null; if (param.getIoType() == 1) { if (Cools.isEmpty(param.getBarcode())) { return R.error("条码不能为空"); } @@ -80,7 +77,6 @@ if (countLoc > 0 || countWrk > 0) { return R.error(CodeRes.EXIST_500); } } if (Cools.isEmpty(param.getLocType1())){ return R.error("高低检测信号不能为空"); } src/main/java/com/zy/common/web/param/SearchLocParam.java
@@ -2,20 +2,23 @@ import lombok.Data; import java.util.List; /** * Created by vincent on 2020/10/30 */ @Data public class SearchLocParam { private Integer ioType; private Integer sourceStaNo; private String barcode; private Integer outArea; private Integer sourceStaNo; private List<Integer> rowList; // 库位规格( 0:未知, 1:低库位, 2:高库位) private Short locType1; private Integer ioType; private Integer outArea; } src/main/java/com/zy/erp/kingdee/entity/param/LoginParam.java
File was deleted src/main/java/com/zy/erp/kingdee/entity/param/MatLoadParam.java
File was deleted src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java
File was deleted src/main/java/com/zy/erp/kingdee/utils/KingDeeUtil.java
File was deleted src/main/java/com/zy/erp/kingdee/utils/PostMesDataUtils.java
File was deleted src/main/resources/application.yml
@@ -94,10 +94,10 @@ # 地址 address: URL: https://shyucheng.test.kdgalaxy.com #登录地址 loginaddress: /kapi/oauth2/getToken #入库上报 Inaddress: /kapi/oauth2/getToken #商品档案地址 mataddress: /kapi/v2/eap7/basedata/bd_material/batchQuery Outaddress: /kapi/v2/eap7/basedata/bd_material/batchQuery #wcs任务下发 wcs: