pom.xml
@@ -28,6 +28,11 @@ <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.17.Final</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> src/main/java/com/zy/asrs/controller/OpenController.java
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -311,27 +312,14 @@ * 添加出库单、正常退库至二楼包装 */ @PostMapping("/order/normalTransferToTheSecond-floorPackagingArea/v1") @AppAuth(memo = "正常退库至二楼包装") @AppAuth(memo = "拆包装检出库") public synchronized R packagingAreaOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody QualityInspectionParam param, @RequestBody @Valid OrderCargoBookingNoteParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } //判断param参数 if (Cools.isEmpty(param.getBoxNo())){ throw new CoolException("参数:箱号 boxNo为空"); } //判断param参数 if (Cools.isEmpty(param.getModel())){ throw new CoolException("参数:卷号 Model为空"); } //判断param参数 if (Cools.isEmpty(param.getMemo())){ throw new CoolException("参数:备注 Memo为空"); } return openService.packagingAreaOrderCreate(param); } @@ -343,23 +331,17 @@ @PostMapping("/order/cargo/booking/note/v1") @AppAuth(memo = "计划组货单") public synchronized R cargoBookingNote(@RequestHeader(required = false) String appkey, @RequestBody OrderCargoBookingNoteParam param, @RequestBody @Valid OrderCargoBookingNoteParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } //判断param参数 if (Cools.isEmpty(param.getGroupGoodsNo())){ throw new CoolException("参数:组货单号 groupGoodsNo为空"); return new R(401,"组货单号为空!"); } //判断param参数 if (Cools.isEmpty(param.getModelList()) || param.getBoxNoList().isEmpty()){ throw new CoolException("参数:卷号 modelList为空"); } //判断param参数 if (Cools.isEmpty(param.getBoxNoList()) || param.getModelList().isEmpty()){ throw new CoolException("参数:箱号集合 boxNoList为空"); if (Cools.isEmpty(param.getCstmrName())){ return new R(401,"客户名称为空!"); } return openService.cargoBookingNote(param); src/main/java/com/zy/asrs/controller/OutController.java
@@ -140,8 +140,21 @@ public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException { StockOutParam param = new StockOutParam(); ArrayList<StockOutParam.LocDetl> locDetls = new ArrayList<>(); int staNoOrder = 0; for (LocDto locDto:locDtos){ Order order = orderService.selectByNo(locDto.getOrderNo()); DocType docType = docTypeService.selectById(order.getDocType()); if (docType.getDocName().equals("不合格品出库")){ staNoOrder = 212; } if (docType.getDocName().equals("拆包装检出库")){ staNoOrder = 212; } if (docType.getDocName().equals("退货至二楼")){ staNoOrder = 212; } OrderDetl orderDetl = orderDetlService.selectById(locDto.getOrderDetlId()); StockOutParam.LocDetl locDetl = new StockOutParam.LocDetl(); @@ -168,7 +181,7 @@ } param.setLocDetls(locDetls); List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param); List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassificationOrder(param,staNoOrder); Date now = new Date(); for (StockOutParam stockOutParam : stockOutParams){ stockOutParam.setNowTime(now); src/main/java/com/zy/asrs/entity/param/OrderCargoBookingNoteParam.java
@@ -1,16 +1,55 @@ package com.zy.asrs.entity.param; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; /* * Created by Monkey D. Luffy on 2025.10.28 * Created by Monkey D. Luffy on 2025.11.08 * */ @Data public class OrderCargoBookingNoteParam { private String groupGoodsNo; // 是 字符串 组货单号 === 》实际组货单订单号 private String cstmrName = "未知"; // 是 字符串 组货单号 === 》实际组货单订单号 private List<String> boxNoList; // 是 字符串 箱号(集合) private List<String> modelList; //待判 卷号(集合) private String cstmrName = "未知"; // 是 字符串 客户名称 @NotNull(message = "箱列表不能为null") @NotEmpty(message = "箱列表不能为空") @Valid // 启用对Box对象的级联校验 private List<Box> boxList;// 是 字符串 箱集合 @Data @NoArgsConstructor // 无参构造方法 @AllArgsConstructor // 全参构造方法 public static class Box { @NotBlank(message = "箱号不能为空") private String boxNo; // 是 字符串 箱号 @NotNull(message = "卷列表不能为null") @NotEmpty(message = "卷列表不能为空") @Valid // 启用对Roll对象的级联校验 private List<Roll> rollList;// 是 字符串 卷集合 @Data @NoArgsConstructor // 无参构造方法 @AllArgsConstructor // 全参构造方法 public static class Roll { @NotBlank(message = "卷号不能为空") private String rollNo; // 是 字符串 卷号 @NotNull(message = "备注不能为null") private String memo; // 是 字符串 备注 } } } src/main/java/com/zy/asrs/entity/param/OrderOutLocBoxCsUtilParam.java
New file @@ -0,0 +1,37 @@ package com.zy.asrs.entity.param; import lombok.Data; /* * Created by Monkey D. Luffy on 2025.11.08 * */ @Data public class OrderOutLocBoxCsUtilParam { private String boxNo; //箱号 private String orderOneNo; //订单号 private String cstmrName; //客户名称 private String memo; //备注 private String danger; //待判 private String roll; //卷号 public OrderOutLocBoxCsUtilParam() { } public OrderOutLocBoxCsUtilParam(String batch, String orderOneNo, String cstmrName, String memo, String danger, String roll) { this.boxNo = batch; this.orderOneNo = orderOneNo; this.cstmrName = cstmrName; this.memo = memo; this.danger = danger; this.roll = roll; } public OrderOutLocBoxCsUtilParam(String batch,String roll, OrderOutLocBoxCsUtilParam orderOutLocBoxCsUtilParam) { this.boxNo = batch; this.orderOneNo = orderOutLocBoxCsUtilParam.getOrderOneNo(); this.cstmrName = orderOutLocBoxCsUtilParam.getCstmrName(); this.memo = orderOutLocBoxCsUtilParam.getMemo(); this.danger = orderOutLocBoxCsUtilParam.getDanger(); this.roll = roll; } } src/main/java/com/zy/asrs/service/OpenService.java
@@ -60,7 +60,7 @@ void cs2(); void qualityInspection(QualityInspectionParam param); R packagingAreaOrderCreate(QualityInspectionParam param); R packagingAreaOrderCreate(OrderCargoBookingNoteParam param); R cargoBookingNote(OrderCargoBookingNoteParam param); } src/main/java/com/zy/asrs/service/WorkService.java
@@ -31,13 +31,15 @@ * 出库作业 */ void startupFullTakeStoreOrder(StockOutParam param, Long userId); void startupFullTakeStoreOrderPakout(StockOutParam param, Long userId); void startupFullTakeStoreOrderGift(StockOutParam param, Long userId); /** * 出库作业 * @param staNo 目标站点 * @param locDetls 待出库物料 * @param ioType 入出库类型 * @param ioWorkType 入出库类型 * @param userId 用户ID */ void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId); src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1163,32 +1163,39 @@ // } /* * 正常退库至二楼包装 * 正常退库至二楼包装 拆包装检出库 * */ @Override @Transactional public R packagingAreaOrderCreate(QualityInspectionParam param) { public R packagingAreaOrderCreate(OrderCargoBookingNoteParam param) { try{ // String[] split = param.getModel().split(","); // if (Cools.isEmpty(split)){ // throw new CoolException("参数:卷号 Model为空,解析失败!!!"); // } List<String[]> OutLocBoxCs = new ArrayList<>(); List<OrderOutLocBoxCsUtilParam> OutLocBoxCs = new ArrayList<>(); String orderNo = "TK" + snowflakeIdWorker.nextId(); String cstmrName = "未知"; // for (String model:split){ String[] outLocBox = new String[]{param.getBoxNo(),orderNo,cstmrName,param.getMemo(),"随意"}; OutLocBoxCs.add(outLocBox); // } for (OrderCargoBookingNoteParam.Box box : param.getBoxList()){ for (OrderCargoBookingNoteParam.Box.Roll roll : box.getRollList()){ if (Cools.isEmpty(roll.getMemo())){ return new R(401,"卷号"+roll.getRollNo()+"的备注为空!"); } OrderOutLocBoxCsUtilParam outLocBox = new OrderOutLocBoxCsUtilParam(); outLocBox.setBoxNo(box.getBoxNo()); outLocBox.setRoll(roll.getRollNo()); outLocBox.setMemo(roll.getMemo()); outLocBox.setOrderOneNo(orderNo); outLocBox.setCstmrName(param.getCstmrName()); outLocBox.setDanger("随意"); OutLocBoxCs.add(outLocBox); } } if (!OutLocBoxCs.isEmpty()){ OrderOutBatchUtil orderOutBatchUtil = new OrderOutBatchUtil(orderNo,cstmrName,"","MES下发退货至二楼","退货至二楼",false); OrderOutBatchUtil orderOutBatchUtil = new OrderOutBatchUtil(orderNo,param.getCstmrName(),"","MES下发拆包装检出库","拆包装检出库",false); return orderOutBatchUtil.setOrderOutBatch(OutLocBoxCs); } } catch (Exception e) { throw new CoolException("对应箱号:"+param.getBoxNo()+"的物料退库至2楼失败"+e.getMessage()); throw new CoolException("拆包装检出库退库至2楼失败"+e.getMessage()); } return R.error("对应箱号:"+param.getBoxNo()+"的物料退库至2楼失败"); return R.error("拆包装检出库退库至2楼失败"); } /* @@ -1200,15 +1207,17 @@ try{ List<String[]> OutLocBoxCs = new ArrayList<>(); String orderNo = "ZH" + snowflakeIdWorker.nextId(); for (String batch:param.getBoxNoList()){ String[] outLocBox = new String[]{batch,orderNo,param.getCstmrName(),"","合格"}; OutLocBoxCs.add(outLocBox); for (OrderCargoBookingNoteParam.Box box : param.getBoxList()){ for (OrderCargoBookingNoteParam.Box.Roll roll : box.getRollList()){ String[] outLocBox = new String[]{box.getBoxNo(),orderNo,param.getCstmrName(),roll.getMemo(),"合格"}; OutLocBoxCs.add(outLocBox); } } if (!OutLocBoxCs.isEmpty()){ OrderOutBatchUtil orderOutBatchUtil = new OrderOutBatchUtil(orderNo,param.getCstmrName(),"","MES下发计划组货单","计划组货单",true,param.getGroupGoodsNo()); // return orderOutBatchUtil.setOrderOutBatch(OutLocBoxCs); return R.ok(); return orderOutBatchUtil.setOrderOutBatchCargoBookingNote(OutLocBoxCs); // return R.ok(); } } catch (Exception e) { throw new CoolException("组货单号:"+param.getGroupGoodsNo()+"计划组货单接收失败!!!"+e.getMessage()); src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -85,6 +85,10 @@ private OrderGiftService orderGiftService; @Autowired private OrderDetlGiftService orderDetlGiftService; @Autowired private OrderPakoutService orderPakoutService; @Autowired private OrderDetlPakoutService orderDetlPakoutService; @Override @Transactional @@ -298,6 +302,108 @@ @Override @Transactional public void startupFullTakeStoreOrderPakout(StockOutParam param, Long userId) { if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls())){ throw new CoolException("参数为空"); } if (Cools.isEmpty(param.getOrderNo())){ throw new CoolException("订单号参数为空"); } DocType docType = docTypeService.selectOrAdd(param.getOrderName(), Boolean.FALSE); OrderPakout order = orderPakoutService.selectByNo(param.getOrderNo()); if (Cools.isEmpty(order)){ Date now = new Date(); order = new OrderPakout( String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] param.getOrderNo(), // 订单编号 DateUtils.convert(now), // 单据日期 docType.getDocId(), // 单据类型 null, // 项目编号 null, // null, // 调拨项目编号 null, // 初始票据号 null, // 票据号 null, // 客户编号 param.getCstmrName(), // 客户 null, // 联系方式 null, // 操作人员 null, // 合计金额 null, // 优惠率 null, // 优惠金额 null, // 销售或采购费用合计 null, // 实付金额 null, // 付款类型 null, // 业务员 null, // 结算天数 null, // 邮费支付类型 null, // 邮费 null, // 付款时间 null, // 发货时间 null, // 物流名称 null, // 物流单号 1L, // 订单状态 1, // 状态 userId, // 添加人员 now, // 添加时间 userId, // 修改人员 now, // 修改时间 null // 备注 ); if (!orderPakoutService.insert(order)) { throw new CoolException("保存订单主档失败"); } // 单据明细档 List<DetlDto> list = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls = param.getLocDetls(); int i=0; for (StockOutParam.LocDetl locDetl : locDetls) { i++; Mat mat = matService.selectByMatnr(locDetl.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(locDetl.getMatnr() + "物料编码检索失败,请先添加商品"); } OrderDetlPakout orderDetl = new OrderDetlPakout(); orderDetl.sync(mat); orderDetl.setSuppCode(String.valueOf(i)); // 行号 orderDetl.setManu(locDetl.getLocNo()); //库位号 orderDetl.setBatch(locDetl.getBatch()); //木箱编码 orderDetl.setAnfme(locDetl.getAnfme());//出库数量 orderDetl.setModel(locDetl.getModel());//批次 orderDetl.setSpecs(locDetl.getSpecs());//规格 orderDetl.setBrand(locDetl.getBrand());//木箱类型 orderDetl.setBarcode(locDetl.getZpallet());//木箱类型 orderDetl.setDanger(locDetl.getDanger());//木箱类型 orderDetl.setWeight(locDetl.getWeight()); // orderDetl.setWorkQty(locDetl.getAnfme()); orderDetl.setWorkQty(0.0); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setOrigin(locDetl.getOrigin()); orderDetl.setCreateBy(userId); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(userId); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); orderDetl.setMemo(locDetl.getMemo()); if (!orderDetlPakoutService.insert(orderDetl)) { throw new CoolException("生成单据明细失败,请联系管理员"); } } // List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param); // for (StockOutParam stockOutParam : stockOutParams){ // startupFullTakeStore(stockOutParam,userId); // } } else { throw new CoolException("订单号重复,订单"+param.getOrderNo()+"已存在!!!"); } } @Override @Transactional public void startupFullTakeStoreOrderGift(StockOutParam param, Long userId) { if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls())){ throw new CoolException("参数为空"); src/main/java/com/zy/asrs/utils/OrderOutBatchUtil.java
@@ -7,6 +7,7 @@ import com.core.common.SpringUtils; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.param.OrderOutLocBoxCsUtilParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.service.LocDetlService; import com.zy.asrs.service.LocMastService; @@ -15,6 +16,7 @@ import com.zy.common.properties.SlaveProperties; import com.zy.system.entity.OperateLog; import com.zy.system.service.OperateLogService; import reactor.core.publisher.Mono; import java.util.ArrayList; import java.util.Date; @@ -78,7 +80,166 @@ } public R setOrderOutBatch(List<String[]> OutLocBoxCs) { public R setOrderOutBatch(List<OrderOutLocBoxCsUtilParam> OutLocBoxCs) { int total = OutLocBoxCs.size(); if (!Cools.isEmpty(OutLocBoxCs) && !OutLocBoxCs.isEmpty()) { LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class); LocMastService locMastService = SpringUtils.getBean(LocMastService.class); SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class); WorkService workService = SpringUtils.getBean(WorkService.class); List<LocDto> locDtos = new ArrayList<>(); List<OrderOutLocBoxCsUtilParam> outLocBoxCList = new ArrayList<>(); List<String> outLocBoxCNew = new ArrayList<>(); List<String> outLocRollListOld = new ArrayList<>(); List<String> outLocRollListNew = new ArrayList<>(); for (OrderOutLocBoxCsUtilParam outLocBoxC : OutLocBoxCs) { if (!outLocRollListOld.contains(outLocBoxC.getRoll())) { outLocRollListOld.add(outLocBoxC.getRoll()); } } for (OrderOutLocBoxCsUtilParam outLocBoxC : OutLocBoxCs) { total--; LocDetl locDetlSou = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC.getBoxNo()).eq("model",outLocBoxC.getRoll())); if (Cools.isEmpty(locDetlSou)) { sign = false; errorMsgOrderLoc = errorMsgOrderLoc + "[===》" + "箱号:" + outLocBoxC.getBoxNo() + "卷号:" + outLocBoxC.getRoll() + " 未查询到数据!!!《===]"; continue; } if (signDanger){ if (!locDetlSou.getDanger$().equals(outLocBoxC.getDanger())) { sign = false; errorMsgOrderLoc = errorMsgOrderLoc + "[===》" + "箱号:" + outLocBoxC.getBoxNo() + "卷号:" + outLocBoxC.getRoll() + " ==》出库输入待判状态:" + outLocBoxC.getDanger() + "、库存状态:" + locDetlSou.getDanger$() + "。状态不匹配《===]"; continue; } } if (!outLocBoxCNew.contains(outLocBoxC.getBoxNo())) { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlSou.getLocNo())); if (Cools.isEmpty(locMast)) { sign = false; errorMsgOrderLoc = errorMsgOrderLoc + "[===》" + "箱号:" + outLocBoxC.getBoxNo() + "卷号:" + outLocBoxC.getRoll() + " 所在库位不满足出库条件!!!未查询到此箱号所在库位" + "《===]"; continue; } if (!locMast.getLocSts().equals("F")) { sign = false; errorMsgOrderLoc = errorMsgOrderLoc + "[===》" + "箱号:" + outLocBoxC.getBoxNo() + "卷号:" + outLocBoxC.getRoll() + " 所在库位不满足出库条件!!!库位状态不为F!!!库位状态:" + locMast.getLocSts$() + "《===]"; continue; } // 目标库位 ===>> 浅库位 if (Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) { String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast.getLocNo()); LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc)); if (!Cools.isEmpty(locMast2)) { if (locMast2.getLocSts().equals("P") || locMast2.getLocSts().equals("R")) { errorMsgOrderLoc = errorMsgOrderLoc + "[===》" + "箱号:" + outLocBoxC.getBoxNo() + "卷号:" + outLocBoxC.getRoll() + " 所在库位满足出库条件!!!但是相邻库位在出库中!!!因此会夹杂在前边订单执行!!!" + "《===]"; } } } } if (sign && !outLocRollListNew.contains(outLocBoxC.getRoll())) { List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin())); for (LocDetl locDetl : locDetls) { if (!outLocRollListNew.contains(locDetl.getModel())){ if (!outLocRollListOld.contains(locDetl.getModel())){ total++; OrderOutLocBoxCsUtilParam orderOutLocBoxCsUtilParam = new OrderOutLocBoxCsUtilParam(locDetl.getBatch(),locDetl.getModel(), outLocBoxC); orderOutLocBoxCsUtilParam.setMemo("附带出库"); orderOutLocBoxCsUtilParam.setDanger(locDetl.getDanger$()); outLocBoxCList.add(orderOutLocBoxCsUtilParam); outLocBoxCNew.add(outLocBoxC.getBoxNo()); outLocRollListNew.add(outLocBoxC.getRoll()); } else { if (locDetlSou.getBatch().equals(locDetl.getBatch()) && locDetlSou.getModel().equals(locDetl.getModel())) { total++; outLocBoxCList.add(outLocBoxC); outLocBoxCNew.add(outLocBoxC.getBoxNo()); outLocRollListNew.add(outLocBoxC.getRoll()); } } } } } } for (OrderOutLocBoxCsUtilParam outLocBoxC : outLocBoxCList) { LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC.getBoxNo()).eq("model", outLocBoxC.getRoll())); if (Cools.isEmpty(locDetl)) { total--; continue; } if (!Cools.isEmpty(Mono.just(outLocBoxC.getMemo()))) { String memo = Cools.isEmpty(locDetl.getMemo()) ? "" : locDetl.getMemo() + ","; locDetl.setMemo(memo + DateUtils.convert(new Date(), DateUtils.yyyyMMdd_C) + "备注:" + outLocBoxC.getMemo()); } else if (Cools.isEmpty(locDetl.getMemo())) { locDetl.setMemo(outLocBoxC.getMemo()); } LocDto locDto = new LocDto(locDetl); locDtos.add(locDto); } StockOutParam param = new StockOutParam(); ArrayList<StockOutParam.LocDetl> locDetls = new ArrayList<>(); List<LocDto> locDtosList = new ArrayList<>(); List<String> batchList = new ArrayList<>(); for (LocDto locDto : locDtos) { if (!batchList.contains(locDto.getBatch())) { batchList.add(locDto.getBatch()); locDtosList.add(locDto); } } for (LocDto locDto : locDtosList) { StockOutParam.LocDetl locDetl = new StockOutParam.LocDetl(); locDetl.setBrand(locDto.getBrand()); locDetl.setLocNo(locDto.getLocNo()); locDetl.setAnfme(locDto.getAnfme()); locDetl.setMatnr(locDto.getMatnr()); locDetl.setBatch(locDto.getBatch()); locDetl.setModel(locDto.getModel()); locDetl.setSpecs(locDto.getSpecs()); locDetl.setZpallet(locDto.getZpallet()); locDetl.setOrigin(locDto.getOrigin()); locDetl.setWeight(locDto.getWeight()); locDetl.setMemo(locDto.getMemo()); locDetl.setDanger(locDto.getDanger()); locDetls.add(locDetl); } param.setLocDetls(locDetls); param.setOrderNo(orderOneNo); param.setCstmrName(cstmrName); param.setOrderName(orderName); param.setGroupGoodsNo(groupGoodsNo); if (sign && total > 0) { workService.startupFullTakeStoreOrder(param, 9999L); } try { OperateLogService operateLogService = SpringUtils.getBean(OperateLogService.class); // 记录操作日志 OperateLog operateLog = new OperateLog(); operateLog.setAction(action); operateLog.setIp(ip); operateLog.setUserId(9999L); operateLog.setRequest("单号:" + orderOneNo + "、客户名:" + cstmrName); operateLog.setResponse(errorMsgOrderLoc.equals("") ? "正常" : (sign && total > 0) ? "成功:" + errorMsgOrderLoc : "失败:" + errorMsgOrderLoc); operateLogService.insert(operateLog); } catch (Exception e) { log.error("记录操作日志失败!" + e.getMessage()); } } log.info("出库{}条箱号!", total); String requert = errorMsgOrderLoc.equals("") ? "正常" : (sign && total > 0) ? "成功:" + errorMsgOrderLoc : "失败:" + errorMsgOrderLoc; if (sign && total > 0) { return R.ok(requert.equals("正常")? "成功":requert); } return R.error(requert); } public R setOrderOutBatchCargoBookingNote(List<String[]> OutLocBoxCs) { int total = OutLocBoxCs.size(); if (!Cools.isEmpty(OutLocBoxCs) && !OutLocBoxCs.isEmpty()) { LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class); @@ -196,7 +357,7 @@ param.setGroupGoodsNo(groupGoodsNo); if (sign && total > 0) { workService.startupFullTakeStoreOrder(param, 9999L); workService.startupFullTakeStoreOrderPakout(param, 9999L); } try { src/main/java/com/zy/asrs/utils/OutboundAllocationUtil.java
@@ -300,6 +300,112 @@ return stockOutParams; } public static List<StockOutParam> OutboundClassificationOrder(StockOutParam param,int staNoOrder){ List<StockOutParam> stockOutParams = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls = param.getLocDetls(); List<String> brands = new ArrayList<>(); for (StockOutParam.LocDetl locDetl:locDetls){ if (Cools.isEmpty(locDetl.getBrand())){ locDetl.setBrand(""); } if (!brands.contains(locDetl.getBrand())){ brands.add(locDetl.getBrand()); } } for (String brand : brands){ List<StockOutParam.LocDetl> locDetls1 = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls2 = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls3 = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls4 = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls5 = new ArrayList<>(); List<StockOutParam.LocDetl> locDetls6 = new ArrayList<>(); for (StockOutParam.LocDetl locDetl:locDetls){ if (Cools.isEmpty(locDetl.getBrand())){ locDetl.setBrand(""); } if (locDetl.getBrand().equals(brand)){ switch (Utils.getRow(locDetl.getLocNo())){ case 1: case 2: case 3: case 4: locDetls1.add(locDetl); break; case 5: case 6: case 7: case 8: locDetls2.add(locDetl); break; case 9: case 10: case 11: case 12: locDetls3.add(locDetl); break; case 13: case 14: case 15: case 16: locDetls4.add(locDetl); break; case 17: case 18: case 19: case 20: locDetls5.add(locDetl); break; case 21: case 22: case 23: case 24: locDetls6.add(locDetl); break; default: } } } ArrayList<List<StockOutParam.LocDetl>> lists = new ArrayList<>(); lists.add(locDetls1); lists.add(locDetls2); lists.add(locDetls3); lists.add(locDetls4); lists.add(locDetls5); lists.add(locDetls6); int sign = 0; int staA=118; int staB=118; for (List<StockOutParam.LocDetl> locDetlList:lists){ sign++; if (locDetlList.size()==0){ continue; } if (sign>lists.size()/2) { //120、121 staA=120; staB=121; } List<StockOutParam.LocDetl> locDetlsA = new ArrayList<>(); List<StockOutParam.LocDetl> locDetlsB = new ArrayList<>(); List<String> locNos = new ArrayList<>(); for (StockOutParam.LocDetl locDetl:locDetlList){ if (locDetlsA.size()<locDetlList.size()/2){ locDetlsA.add(locDetl); if (!locNos.contains(locDetl.getLocNo())){ locNos.add(locDetl.getLocNo()); } }else { if (locNos.contains(locDetl.getLocNo())){ locDetlsA.add(locDetl); }else { locDetlsB.add(locDetl); } } } if (locDetlsA.size()!=0){ StockOutParam stockOutParamA = new StockOutParam(); stockOutParamA.setOutSite((Cools.isEmpty(staNoOrder) || staNoOrder==0)? staA : staNoOrder); stockOutParamA.setOrderNo(param.getOrderNo()); stockOutParamA.setLocDetls(locDetlsA); stockOutParams.add(stockOutParamA); } if (locDetlsB.size()!=0){ StockOutParam stockOutParamB = new StockOutParam(); stockOutParamB.setOutSite((Cools.isEmpty(staNoOrder) || staNoOrder==0)? staB : staNoOrder); stockOutParamB.setOrderNo(param.getOrderNo()); stockOutParamB.setLocDetls(locDetlsB); stockOutParams.add(stockOutParamB); } } } return stockOutParams; } public static List<StockOutParam> OutboundClassificationNew(StockOutParam param){ List<StockOutParam> stockOutParams = new ArrayList<>(); src/main/java/com/zy/common/config/CoolExceptionHandler.java
@@ -2,10 +2,18 @@ import com.core.common.R; import com.core.exception.CoolException; import lombok.Data; import org.springframework.http.HttpStatus; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.HandlerMethod; import java.util.concurrent.atomic.AtomicReference; /** * Created by vincent on 2019-06-09 @@ -35,4 +43,20 @@ return R.error(e.getMessage()); } @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) public R handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { // 返回错误列表 BindingResult bindingResult = ex.getBindingResult(); final String[] field = {""}; bindingResult.getFieldErrors().forEach(fieldError -> { String message = fieldError.getDefaultMessage(); field[0] = field[0] + message+";"; }); // 参数为空 return new R(401, field[0]); } }