package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.enums.LocStsType; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.BasStationServiceImpl; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.model.enums.WorkNoType; import com.zy.common.properties.AgvProperties; import com.zy.common.service.CommonService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; /** * Created by vincent on 2020/7/4 */ @Slf4j @Service @Transactional public class WorkMastHandler extends AbstractHandler { @Autowired private WrkMastService wrkMastService; @Autowired private WrkDetlService wrkDetlService; @Autowired private LocMastService locMastService; @Autowired private LocDetlService locDetlService; @Autowired private WaitPakinService waitPakinService; @Autowired private OrderDetlService orderDetlService; @Autowired private OrderDetlPakinService orderDetlPakinService; @Autowired private OrderDetlPakoutService orderDetlPakoutService; @Autowired private LocCacheService locCacheService; @Autowired private OrderPakinService orderPakinService; @Autowired private TaskService taskService; @Autowired private TaskDetlService taskDetlService; @Autowired private BasStationServiceImpl basStationService; @Autowired private LocCacheDetlService locCacheDetlService; @Autowired private CommonService commonService; @Autowired private AgvProperties agvProperties; @Autowired private WrkMastLogService wrkMastLogService; public ReturnT start(WrkMast wrkMast) { // 4.入库完成 if (wrkMast.getWrkSts() == 4) { return doIn(wrkMast); // 14.出库完成 } else if (wrkMast.getWrkSts() == 14) { return doOut(wrkMast); } return SUCCESS; } public ReturnT doIn(WrkMast wrkMast) { Date now = new Date(); LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); try { if (null == locMast) { // exceptionHandle("工作档[workNo={0}]库位号错误[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("工作档[workNo=" + wrkMast.getWrkNo() + "]库位号错误[locNo=" + wrkMast.getLocNo() + "]"); } assert locMast != null; switch (wrkMast.getIoType()) { // 空板入库 case 10: // 修改库位状态=D if (locMast.getLocSts().equals("S") || locMast.getLocSts().equals("Q")) { if (!Cools.isEmpty(wrkMast.getBarcode())) { locMast.setBarcode(wrkMast.getBarcode()); } locMast.setLocSts("D"); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("空板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("空板入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } break; // 全板入库 case 1: // 清除所属库位之前的库存明细 List locDetls = locDetlService.selectList(new EntityWrapper().eq("loc_no", wrkMast.getLocNo())); if (!locDetls.isEmpty()) { locDetlService.delete(new EntityWrapper().eq("loc_no", wrkMast.getLocNo())); } // 根据工作号,查询工作明细档 List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls.isEmpty()) { // exceptionHandle("全板入库 ===>> 工作明细档不存在;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板入库 ===>> 工作明细档不存在; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } // 遍历工作明细,更新库存明细和入库通知档 for (WrkDetl wrkDetl : wrkDetls) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand() , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (null != locDetl) { if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3() , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) { // exceptionHandle("全板入库 ===>> 更新库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板入库 ===>> 更新库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } else { locDetl = new LocDetl(); BeanUtils.copyProperties(wrkDetl, locDetl); // locDetl.sync(wrkDetl); locDetl.setLocNo(wrkMast.getLocNo()); // 库位号 locDetl.setAnfme(wrkDetl.getAnfme()); // 数量 locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码 locDetl.setModiTime(now); locDetl.setAppeTime(now); if (!locDetlService.insert(locDetl)) { // exceptionHandle("全板入库 ===>> 添加库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板入库 ===>> 添加库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 更新订单完成数量 OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (orderDetlPakin == null) { orderDetlPakin = orderDetlPakinService.selectItem (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); } try { if (!Cools.isEmpty(orderDetlPakin)) { if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { // exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", // wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } } catch (Exception ignore) { } } // 修改库位状态 S ====>> F if (locMast.getLocSts().equals("S")) { locMast.setLocSts("F"); locMast.setBarcode(wrkMast.getBarcode()); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("全板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } break; // 拣料途中并板 case 8: // 根据工作号,查询工作明细档 List wrkDetls8 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls8.isEmpty()) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料途中并板 ===>> 工作明细档不存在; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } // 遍历工作明细,更新库存明细和入库通知档 for (WrkDetl wrkDetl : wrkDetls8) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand() , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (null != locDetl) { if (!locDetlService.updateAnfme(wrkDetl.getAnfme() + locDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3() , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料途中并板 ===>> 更新库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } else { locDetl = new LocDetl(); BeanUtils.copyProperties(wrkDetl, locDetl); // locDetl.sync(wrkDetl); locDetl.setLocNo(wrkMast.getLocNo()); // 库位号 locDetl.setAnfme(wrkDetl.getAnfme()); // 数量 locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码 locDetl.setModiTime(now); locDetl.setAppeTime(now); if (!locDetlService.insert(locDetl)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料途中并板 ===>> 添加库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } if (!Cools.isEmpty(wrkDetl.getOrderNo())) { // 更新订单完成数量 if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料途中并板 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } } break; // 拣料入库 case 53: // 根据工作号,查询工作明细档 List wrkDetls53 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls53.isEmpty()) { // exceptionHandle("拣料入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } for (WrkDetl wrkDetl : wrkDetls53) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand() , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (null != locDetl) { if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3() , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) { // exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 更新订单完成数量 OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (orderDetlPakin == null) { orderDetlPakin = orderDetlPakinService.selectItem (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); } try { if (!Cools.isEmpty(orderDetlPakin)) { if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { // exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", // wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } } catch (Exception ignore) { } } // 修改库位状态 Q ====>> F if (locMast.getLocSts().equals("Q")) { locMast.setLocSts("F"); locMast.setBarcode(wrkMast.getBarcode()); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("拣料入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("拣料入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } break; // 并板入库 case 54: // 根据工作号,查询工作明细档 List wrkDetls54 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls54.isEmpty()) { // exceptionHandle("并板入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } // 修改库存明细数量,如无库存,曾新增 for (WrkDetl wrkDetl : wrkDetls54) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand() , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (null != locDetl) { if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3() , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) { // exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } else { locDetl = new LocDetl(); BeanUtils.copyProperties(wrkDetl, locDetl); // locDetl.sync(wrkDetl); locDetl.setLocNo(wrkMast.getLocNo()); // 库位号 locDetl.setAnfme(wrkDetl.getAnfme()); // 数量 locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码 locDetl.setModiTime(now); locDetl.setAppeTime(now); if (!locDetlService.insert(locDetl)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 新增库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 更新订单完成数量 OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); try { if (!Cools.isEmpty(orderDetlPakin)) { if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } } catch (Exception ignore) { } } // 修改库位状态 Q ====>> F if (locMast.getLocSts().equals("Q")) { locMast.setLocSts("F"); locMast.setBarcode(wrkMast.getBarcode()); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("并板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } break; // 盘点入库 case 57: // 根据工作号,查询工作明细档 List wrkDetls57 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls57.isEmpty()) { // exceptionHandle("盘点入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("盘点入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } for (WrkDetl wrkDetl : wrkDetls57) { if (!Cools.isEmpty(wrkDetl.getOrderNo())) { // 更新订单完成数量 OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (!Cools.isEmpty(orderDetlPakout)) { if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("盘点入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } } } // 修改库位状态 Q ====>> F if (locMast.getLocSts().equals("Q")) { locMast.setLocSts(wrkMast.getFullPlt().equals("Y") ? "F" : "D"); locMast.setBarcode(wrkMast.getBarcode()); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("盘点入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("盘点入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } break; // 库位移转 case 11: // 默认目标库位是空板 String locSts = "D"; // 库位移转判断是否为空板移转 if (wrkMast.getEmptyMk().equals("N")) { locSts = "F"; // 转移库存明细数据: 库存号 由工作档源库位变为目标库位 if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) { // exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 修改源库位状态 ==> O LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); if (null != sourceLoc) { sourceLoc.setBarcode(""); sourceLoc.setLocSts("O"); sourceLoc.setModiTime(now); sourceLoc.setIoTime(now); if (!locMastService.updateById(sourceLoc)) { // exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 修改目标库位状态 ==> .locSts locMast.setLocSts(locSts); locMast.setBarcode(wrkMast.getBarcode()); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } break; default: break; } // 修改工作主档状态 wrkMast.setWrkSts(5L); wrkMast.setModiTime(now); if (!wrkMastService.updateById(wrkMast)) { // exceptionHandle("更新入库完成状态失败;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("更新入库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } catch (Exception e) { log.error("fail", e); e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } private ReturnT doOut(WrkMast wrkMast) { Date now = new Date(); LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); try { if (null == locMast) { // exceptionHandle("工作档[workNo={0}]库位号错误[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("工作档库位号错误; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } assert locMast != null; switch (wrkMast.getIoType()) { // 全板出库 case 101: // // 出库确认信号位 // if (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) { // return SUCCESS; // } // 根据工作号,查询工作明细档 List wrkDetls101 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls101.isEmpty()) { // exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } for (WrkDetl wrkDetl : wrkDetls101) { // 更新订单完成数量 OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (orderDetlPakout == null) { orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); } try { if (!Cools.isEmpty(orderDetlPakout)) { if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } } catch (Exception ignore) { } } // 删除工作档源库位的库存明细 if (!locDetlService.delete(new EntityWrapper().eq("loc_no", wrkMast.getSourceLocNo()))) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 删除库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } // 修改源库位状态 R ===>> O if (locMast.getLocSts().equals("R")) { locMast.setLocSts("O"); locMast.setBarcode(""); locMast.setModiTime(now); locMast.setIoTime(now); if (!locMastService.updateById(locMast)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } break; // 并板途中捡料 case 108: // 根据工作号,查询工作明细档 List wrkDetls108 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls108.isEmpty()) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板途中捡料 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } for (WrkDetl wrkDetl : wrkDetls108) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand() , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (null != locDetl) { if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3() , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板途中捡料 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 更新订单完成数量 OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); try { if (!Cools.isEmpty(orderDetlPakout)) { if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板途中捡料 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } } catch (Exception ignore) { } } break; // 空板出库 case 110: // 修改库位状态 R ===>> O if (locMast.getLocSts().equals("R")) { locMast.setLocSts("O"); locMast.setBarcode(""); locMast.setModiTime(now); locMast.setIoTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("空板出库 ===>> 修改源库位状态失败;[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("空板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } break; default: break; } // 修改工作主档状态 wrkMast.setWrkSts(15L); wrkMast.setModiTime(now); if (!wrkMastService.updateById(wrkMast)) { // exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("更新出库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); } } catch (Exception e) { log.error("fail", e); e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } /** * @author Ryan * @date 2025/9/23 * @description: AGV任务完成加入历史档 * @version 1.0 */ @Transactional(rollbackFor = Exception.class) public ReturnT AgvStart(Task task) { // 4.入库完成 if (task.getWrkSts() == 4) { return agvDoIn(task); // 14.出库完成 } else if (task.getWrkSts() == 14) { return agvDoOut(task); // 15.出库更新完成 - 生成空托/满托出库任务 } else if (task.getWrkSts() == 15) { return generateEmptyOrFullPalletOutTaskForCompleted(task); } return SUCCESS; } /** * @author Ryan * @date 2025/9/25 * @description: AGV出库任务 * @version 1.0 */ @Transactional(rollbackFor = Exception.class) public ReturnT agvDoOut(Task task) { if (task.getIoType().equals(101)) { Date now = new Date(); LocCache locMast = locCacheService.selectOne(new EntityWrapper().eq("loc_no", task.getSourceLocNo())); if (Objects.isNull(locMast)) { throw new RuntimeException("数据错误:库位信息不能为空!!"); } List wrkDetls101 = taskDetlService.selectList(new EntityWrapper().eq("wrk_no", task.getWrkNo())); if (wrkDetls101.isEmpty()) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); } // 删除工作档源库位的库存明细 if (!locDetlService.delete(new EntityWrapper().eq("loc_no", task.getSourceLocNo()))) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 删除库存明细失败; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); } // 修改源库位状态 R ===>> O if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) { locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type); locMast.setBarcode(""); locMast.setModiTime(now); locMast.setIoTime(now); if (!locCacheService.updateById(locMast)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]"); } } else { throw new CoolException("当前库位状态" + locMast.getLocSts() + ", 无法执行出库操作!!"); } task.setWrkSts(15L); if (!taskService.updateById(task)) { throw new CoolException("任务状态修改失败!!"); } // 注意:生成空托/满托出库任务的逻辑已移至状态15的处理方法中 } else if(task.getIoType().equals(53) || task.getIoType().equals(54) || task.getIoType().equals(57)){ LocCache locCache = locCacheService.selectOne(new EntityWrapper().eq("loc_no", task.getSourceLocNo())); if (Objects.isNull(locCache)) { throw new CoolException("数据错误,库位不存在!!"); } if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) { throw new CoolException("当前库位状态为:" + LocStsType.LOC_STS_TYPE_R.type + "." + LocStsType.LOC_STS_TYPE_R.desc + ",不是出库预约状态"); } locCache.setLocSts(LocStsType.LOC_STS_TYPE_O.type); locCache.setModiTime(new Date()); locCache.setBarcode(null); locCache.setModiTime(new Date()); locCache.setIoTime(new Date()); if (!locCacheService.updateById(locCache)) { throw new CoolException("库位状态修改失败!"); } boolean deleted = locCacheDetlService.delete(new EntityWrapper().eq("loc_id", locCache.getId())); if (!deleted){ throw new CoolException("库位明细删除失败!"); } task.setWrkSts(15L); task.setModiTime(new Date()); if (!taskService.updateById(task)) { throw new CoolException("任务状态修改失败!!"); } } return SUCCESS; } /** * 状态15(出库更新完成)时,生成空托出库或满托出库任务,将托盘放入缓存库位 * @param completedTask 已完成出库更新的任务(状态15) * @return 处理结果 */ @Transactional(rollbackFor = Exception.class) public ReturnT generateEmptyOrFullPalletOutTaskForCompleted(Task completedTask) { // 只处理ioType=101的全板出库任务 if (!completedTask.getIoType().equals(101)) { return SUCCESS; } // 检查是否已经生成过空托/满托出库任务(避免重复生成) List existingTasks = taskService.selectList(new EntityWrapper() .eq("barcode", completedTask.getBarcode()) .in("io_type", 110, 101) // 空板出库或全板出库 .eq("wrk_sts", 7) // 待呼叫AGV状态 ); if (!existingTasks.isEmpty()) { log.info("任务ID:{}的托盘码:{}已存在空托/满托出库任务,跳过生成", completedTask.getId(), completedTask.getBarcode()); return SUCCESS; } try { generateEmptyOrFullPalletOutTask(completedTask, null); return SUCCESS; } catch (Exception e) { log.error("状态15时生成空托/满托出库任务失败,任务ID:{},错误:{}", completedTask.getId(), e.getMessage(), e); return FAIL.setMsg("生成空托/满托出库任务失败:" + e.getMessage()); } } /** * 出库完成后,生成空托出库或满托出库任务,将托盘放入缓存库位 * @param outTask 出库任务 * @param sourceLocCache 源库位(可为null) */ private void generateEmptyOrFullPalletOutTask(Task outTask, LocCache sourceLocCache) { // 判断托盘类型:空托或满托 boolean isEmptyPallet = "Y".equals(outTask.getEmptyMk()); Integer ioType = isEmptyPallet ? 110 : 101; // 110=空板出库,101=全板出库(满托出库) log.info("出库任务完成,生成{}任务,任务ID:{},托盘码:{}", isEmptyPallet ? "空托出库" : "满托出库", outTask.getId(), outTask.getBarcode()); // 分配缓存库位(whs_type=2) LocCache cacheLoc = locCacheService.selectOne(new EntityWrapper() .eq("whs_type", agvProperties.getWhsTypeMapping().getCacheArea()) // whs_type=2 缓存区 .eq("frozen", 0) .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) // O.闲置 .ne("full_plt", isEmptyPallet ? "Y" : "N") // 空托不选满板库位,满托不选空板库位 .orderAsc(Arrays.asList("row1", "bay1", "lev1")) .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")); if (cacheLoc == null) { log.warn("没有可用的缓存库位,无法生成{}任务,任务ID:{}", isEmptyPallet ? "空托出库" : "满托出库", outTask.getId()); return; } // 获取出库站点(出库任务的staNo是出库站点,将作为空托/满托出库任务的源站点) String outboundStaNo = outTask.getStaNo(); if (outboundStaNo == null || outboundStaNo.isEmpty()) { log.warn("出库任务没有出库站点,无法生成{}任务,任务ID:{}", isEmptyPallet ? "空托出库" : "满托出库", outTask.getId()); return; } // 根据缓存区配置选择站点和机器人组(西侧) List cacheStations = agvProperties.getWestStations(); String robotGroup = agvProperties.getRobotGroupWest(); if (cacheStations.isEmpty()) { log.warn("缓存区没有配置站点,无法生成{}任务,任务ID:{}", isEmptyPallet ? "空托出库" : "满托出库", outTask.getId()); return; } // 检查工作档是否已完成或已转历史档 boolean workCompleted = false; if (outTask.getWrkNo() != null) { // 检查工作档是否存在且已完成 WrkMast wrkMast = wrkMastService.selectOne( new EntityWrapper().eq("wrk_no", outTask.getWrkNo()) ); if (wrkMast != null) { Long wrkSts = wrkMast.getWrkSts(); // 出库任务完成状态:14(已出库未确认)或15(出库更新完成) if (wrkSts != null && (wrkSts == 14L || wrkSts == 15L)) { workCompleted = true; log.debug("工作档{}已完成,状态:{}", outTask.getWrkNo(), wrkSts); } } else { // 如果工作档不存在,检查历史档 WrkMastLog wrkMastLog = wrkMastLogService.selectOne( new EntityWrapper().eq("wrk_no", outTask.getWrkNo()) ); if (wrkMastLog != null) { long logWrkSts = wrkMastLog.getWrkSts(); // 出库任务历史档完成状态:15(出库更新完成) if (logWrkSts == 15L) { workCompleted = true; log.debug("工作档{}已转历史档并完结,历史档状态:{}", outTask.getWrkNo(), logWrkSts); } } } } // 检查是否有从该出库站点到缓存区的正在搬运任务(状态8:已呼叫AGV,正在搬运) // 出库到缓存区的任务类型:101(全板出库)或110(空板出库) List transportingTasks = taskService.selectList( new EntityWrapper() .eq("source_sta_no", outboundStaNo) // 源站点是出库站点 .in("sta_no", cacheStations) // 目标站点是缓存区站点 .eq("task_type", "agv") .eq("wrk_sts", 8L) // 只检查正在搬运状态的任务 .in("io_type", 101, 110) // 出库到缓存区的任务类型 ); // 如果有正在搬运的任务,且工作档未完成,则不分配缓存库位 if (!transportingTasks.isEmpty() && !workCompleted) { log.info("出库站点{}到缓存区有{}个正在搬运的AGV任务,且工作档未完成,暂不分配缓存库位,等待搬运完成。出库任务ID:{}", outboundStaNo, transportingTasks.size(), outTask.getId()); return; // 有正在搬运的任务且工作档未完成,不分配缓存库位,等待下次检查 } if (!transportingTasks.isEmpty() && workCompleted) { log.info("出库站点{}到缓存区有{}个正在搬运的AGV任务,但工作档已完成或已转历史档,允许分配缓存库位。出库任务ID:{}", outboundStaNo, transportingTasks.size(), outTask.getId()); } // 选择缓存区目标站点(使用第一个可用站点,或可以优化为选择任务最少的站点) String cacheStaNo = cacheStations.get(0); // 生成工作号 int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type); // 创建空托出库/满托出库任务 Task cacheTask = new Task(); Date now = new Date(); cacheTask.setWrkNo(workNo) .setIoTime(now) .setWrkSts(7L) // 工作状态:7.待呼叫AGV .setIoType(ioType) // 110=空板出库,101=全板出库 .setTaskType("agv") .setIoPri(10D) .setStaNo(cacheStaNo) // 目标站点(缓存区站点) .setSourceStaNo(outboundStaNo) // 源站点(出库站点) .setInvWh(robotGroup) // 机器人组(西侧) .setFullPlt(isEmptyPallet ? "N" : "Y") // 满板:空托=N,满托=Y .setPicking("N") .setExitMk("N") .setSourceLocNo(null) // 出库任务不需要源库位 .setLocNo(cacheLoc.getLocNo()) // 目标库位(缓存库位) .setEmptyMk(isEmptyPallet ? "Y" : "N") // 空板标记 .setBarcode(outTask.getBarcode()) // 托盘码 .setLinkMis("N") .setAppeTime(now) .setModiTime(now); if (!taskService.insert(cacheTask)) { log.error("生成{}任务失败,任务ID:{}", isEmptyPallet ? "空托出库" : "满托出库", outTask.getId()); return; } // 更新缓存库位状态:O.闲置 → S.入库预约 cacheLoc.setLocSts(LocStsType.LOC_STS_TYPE_S.type); cacheLoc.setBarcode(outTask.getBarcode()); cacheLoc.setModiTime(now); if (!locCacheService.updateById(cacheLoc)) { log.error("更新缓存库位状态失败,库位:{}", cacheLoc.getLocNo()); // 回滚任务 taskService.deleteById(cacheTask.getId()); return; } log.info("成功生成{}任务,任务ID:{},工作号:{},源站点:{},目标站点:{},缓存库位:{}", isEmptyPallet ? "空托出库" : "满托出库", cacheTask.getId(), workNo, outboundStaNo, cacheStaNo, cacheLoc.getLocNo()); } @Transactional(rollbackFor = Exception.class) public ReturnT agvDoIn(Task wrkMast) { if (wrkMast.getIoType().equals(1)) { LocCache locCache = locCacheService.selectOne(new EntityWrapper().eq("loc_no", wrkMast.getLocNo())); if (Objects.isNull(locCache)) { throw new CoolException("数据错误,库位不存在!!"); } if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_S.type)) { throw new CoolException("当前库位状态为:" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + ",不是出库预约状态"); } List taskDetls = taskDetlService.selectList(new EntityWrapper().eq("task_id", wrkMast.getId())); if (Objects.isNull(taskDetls)) { throw new CoolException("数据错误:组托数据不存在!!"); } taskDetls.forEach(pakin -> { LocCacheDetl detl = new LocCacheDetl(); BeanUtils.copyProperties(pakin, detl); detl.setBarcode(pakin.getBarcode()) .setLocId(locCache.getId()) .setAnfme(pakin.getAnfme()) .setBrand(pakin.getBrand()) .setAppeTime(new Date()) .setSpecs(pakin.getSpecs()) .setColor(pakin.getColor()) .setLocNo(locCache.getLocNo()) .setAreaId(locCache.getAreaId()) .setAreaName(locCache.getAreaName()) .setUnit(pakin.getUnit()) .setBatch(pakin.getBatch()); if (!locCacheDetlService.insert(detl)) { throw new CoolException("库位明细保存失败!!"); } }); locCache.setLocSts(LocStsType.LOC_STS_TYPE_F.type); locCache.setModiTime(new Date()); locCache.setBarcode(wrkMast.getBarcode()); locCache.setModiTime(new Date()); locCache.setIoTime(new Date()); if (!locCacheService.updateById(locCache)) { throw new CoolException("库位状态修改失败!"); } wrkMast.setWrkSts(5L); wrkMast.setModiTime(new Date()); if (!taskService.updateById(wrkMast)) { throw new CoolException("任务状态修改失败!!"); } }else { throw new CoolException("数据错误:ioType不存在!!"); } return SUCCESS; } }