| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.mapper.LocDetlMapper; |
| | | import com.zy.asrs.mapper.OrderDetlMapper; |
| | | import com.zy.asrs.mapper.OrderMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/7/4 |
| | |
| | | private WaitPakinService waitPakinService; |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | @Resource |
| | | private OrderDetlMapper orderDetlMapper; |
| | | |
| | | @Resource |
| | | private LocDetlMapper locDetlMapper; |
| | | |
| | | @Resource |
| | | private OrderMapper orderMapper; |
| | | public ReturnT<String> start(WrkMast wrkMast) { |
| | | // 4.入库完成 |
| | | if (wrkMast.getWrkSts() == 4) { |
| | |
| | | locDetl.sync(wrkDetl); |
| | | locDetl.setLocNo(wrkMast.getLocNo()); // 库位号 |
| | | locDetl.setAnfme(wrkDetl.getAnfme()); // 数量 |
| | | locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码 |
| | | locDetl.setZpallet(wrkMast.getBarcode()); // 托盘条码 |
| | | locDetl.setBarcode(wrkMast.getBarcode()); |
| | | locDetl.setModiTime(now); |
| | | locDetl.setAppeTime(now); |
| | | locDetl.setBatch(""); |
| | |
| | | } |
| | | |
| | | // 更新订单完成数量 |
| | | OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | if (orderDetl==null){ |
| | | orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | } |
| | | try { |
| | | if(!Cools.isEmpty(orderDetl)){ |
| | | if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | orderDetl.getBatch(),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){} |
| | | // OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // if (orderDetl==null){ |
| | | // orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // } |
| | | // try { |
| | | // if(!Cools.isEmpty(orderDetl)){ |
| | | // if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | // orderDetl.getBatch(),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){} |
| | | |
| | | } |
| | | |
| | | // 修改捡料入库的库存明细的理货状态为待理货 |
| | | locDetlMapper.updateLhStsByLocNo(wrkMast.getLocNo(),0); |
| | | |
| | | // 修改库位状态 Q ====>> F |
| | | if (locMast.getLocSts().equals("Q")) { |
| | | locMast.setLocSts("F"); |
| | |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("盘点入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); |
| | | } |
| | | for(WrkDetl wrkDetl : wrkDetls57) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | // OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // if (orderDetl==null){ |
| | | // orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // } |
| | | // try { |
| | | // if(!Cools.isEmpty(orderDetl)){ |
| | | // if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | // orderDetl.getBatch(),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(wrkMast.getFullPlt().equals("Y")?"F":"D"); |
| | |
| | | return FAIL.setMsg("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); |
| | | } |
| | | } |
| | | // 备货,更新订单明细及订单状态 |
| | | List<WrkDetl> wrkDetlList = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (!wrkDetlList.isEmpty()) { |
| | | List<String> brands = wrkDetlList.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList()); |
| | | // 查询订单明细 |
| | | List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("brand", brands)); |
| | | if (!orderDetlList.isEmpty()) { |
| | | // 更新明细为已备货 |
| | | orderDetlMapper.updateOrderDetlStatusByPackageNo(brands,2); |
| | | // 获取订单号 |
| | | String orderNo = orderDetlList.get(0).getOrderNo(); |
| | | // 判断该订单明细是否全部已备货 |
| | | Integer selectCount = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().eq("order_no", orderNo).ne("inspect", 2)); |
| | | if (selectCount == 0) { |
| | | // 更新订单为备货完成 |
| | | orderMapper.updateStatusByOrderNo(orderNo,2,29); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 修改源库位状态 ==> O |
| | | LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if (null != sourceLoc) { |
| | |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); |
| | | } |
| | | break; |
| | | // 跨巷道库位移转完成 |
| | | case 12: |
| | | // 默认目标库位是空板 |
| | | String locSts2 = "D"; |
| | | // 库位移转判断是否为空板移转 |
| | | if (wrkMast.getEmptyMk().equals("N")) { |
| | | locSts2 = "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() + "]"); |
| | | } |
| | | } |
| | | // 跨巷道移库,更新订单明细及订单状态 |
| | | List<WrkDetl> wrkDetlList2 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (!wrkDetlList2.isEmpty()) { |
| | | // 判断有无单据编号 |
| | | Optional<WrkDetl> any = wrkDetlList2.stream().filter(wrkDetl -> wrkDetl.getOrderNo() != null).findAny(); |
| | | if (any.isPresent()) { |
| | | String orderNo = any.get().getOrderNo(); |
| | | // 根据单据编号和库位号查询单据明细 |
| | | List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("order_no",orderNo).eq("specs",wrkMast.getSourceLocNo())); |
| | | // 更新单据明细的移库状态 |
| | | for(OrderDetl orderDetl: orderDetlList) { |
| | | orderDetl.setDanger(2); |
| | | orderDetl.setUpdateTime(now); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | // 判断单据明细是不是全部移库完成 |
| | | Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().lt("danger", 2).eq("order_no", orderNo)); |
| | | if (count == 0) { |
| | | // 更新单据为已完成 |
| | | orderMapper.updateSettleByOrderNo(orderNo,4,null); |
| | | } |
| | | } |
| | | } else { // 空板转移没有工作明细,但是要更新单据明细状态 |
| | | |
| | | // 只有一条作业中的移库单据 |
| | | List<Order> orderList = orderMapper.selectList(new EntityWrapper<Order>().eq("doc_type", 24).le("settle", 3)); |
| | | if(orderList.isEmpty()) { |
| | | log.error("没有获取到正在执行中的移库单据"); |
| | | } else { |
| | | Order order = orderList.get(0); |
| | | // 根据单据编号和库位号查询单据明细 |
| | | List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("order_no",order.getOrderNo()).eq("specs",wrkMast.getSourceLocNo())); |
| | | // 更新单据明细的移库状态 |
| | | for(OrderDetl orderDetl: orderDetlList) { |
| | | orderDetl.setDanger(2); |
| | | orderDetl.setUpdateTime(now); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | // 判断单据明细是不是全部移库完成 |
| | | Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().lt("danger", 2).eq("order_no", order.getOrderNo())); |
| | | if (count == 0) { |
| | | // 更新单据为已完成 |
| | | orderMapper.updateSettleByOrderNo(order.getOrderNo(),4,null); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | // 修改源库位状态 ==> O |
| | | LocMast sourceLoc2 = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if (null != sourceLoc2) { |
| | | sourceLoc2.setBarcode(""); |
| | | sourceLoc2.setLocSts("O"); |
| | | sourceLoc2.setSheetNo("0"); |
| | | sourceLoc2.setModiTime(now); |
| | | sourceLoc2.setIoTime(now); |
| | | if (!locMastService.updateById(sourceLoc2)) { |
| | | // exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); |
| | | } |
| | | } |
| | | // 修改目标库位状态 ==> .locSts |
| | | locMast.setLocSts(locSts2); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMast.setSheetNo("0"); |
| | | 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 59: |
| | | |
| | | // 修改库位状态 S ====>> F |
| | | if (locMast.getLocSts().equals("S")) { |
| | | locMast.setLocSts("F"); |
| | | locMast.setModiTime(now); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | |
| | | // 修改空闲理货入库的库存明细的理货状态为待理货 |
| | | locDetlMapper.updateLhStsByLocNo(wrkMast.getLocNo(),0); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls101) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | // 更新订单完成数量 |
| | | // OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // if (orderDetl==null){ |
| | | // orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null); |
| | | // } |
| | | // 箱号+卷号 |
| | | OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("batch",wrkDetl.getBatch()) |
| | | .eq("model",wrkDetl.getModel())); |
| | | |
| | | try { |
| | | if(!Cools.isEmpty(orderDetl)){ |
| | | // 更新订单完成数量 |
| | | // orderDetlService.update(null,new EntityWrapper<OrderDetl>().eq("order_no",orderDetl.getOrderNo()) |
| | | // .eq("batch",orderDetl.getBatch()).eq("model", orderDetl.getModel())); |
| | | if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), orderDetl.getModel(), |
| | | orderDetl.getBatch(),wrkDetl.getAnfme())){ |
| | | // exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", |
| | | // wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | } |
| | | } catch (Exception ignore){} |
| | | // // 箱号+卷号 |
| | | // OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("batch",wrkDetl.getBatch()) |
| | | // .eq("model",wrkDetl.getModel())); |
| | | // |
| | | // try { |
| | | // if(!Cools.isEmpty(orderDetl)){ |
| | | // // 更新订单完成数量 |
| | | //// orderDetlService.update(null,new EntityWrapper<OrderDetl>().eq("order_no",orderDetl.getOrderNo()) |
| | | //// .eq("batch",orderDetl.getBatch()).eq("model", orderDetl.getModel())); |
| | | // if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), orderDetl.getModel(), |
| | | // orderDetl.getBatch(),wrkDetl.getAnfme())){ |
| | | //// exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]", |
| | | //// wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | // } |
| | | // } |
| | | // } catch (Exception ignore){} |
| | | } |
| | | // 删除工作档源库位的库存明细 |
| | | if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) { |
| | |
| | | } |
| | | } |
| | | break; |
| | | // 理货贴标出库 |
| | | case 111: |
| | | List<WrkDetl> wrkDetls111 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (wrkDetls111.isEmpty()) { |
| | | // exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls111) { |
| | | // 更新订单完成数量 |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | // OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // if (orderDetl == null) { |
| | | // orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); |
| | | // } |
| | | // try { |
| | | // if (!Cools.isEmpty(orderDetl)) { |
| | | // if (!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | // orderDetl.getBatch(), 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) { |
| | | // } |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |