From 78f87227f1225f6061c85a5530c75191e543b449 Mon Sep 17 00:00:00 2001 From: yewj Date: Wed, 4 Sep 2024 17:21:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E6=8D=AE=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../collect/IoCollectOrderService.java | 30 +-- .../api/service/inout/IoSplitCodeService.java | 176 +++++++++++++++++- 2 files changed, 180 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java index 00522d696..906ff794c 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java @@ -124,6 +124,8 @@ public class IoCollectOrderService extends ServiceImpl().eq(IoCollectOrder::getBillNo, billNo).last("limit 1")); @@ -541,28 +543,13 @@ public class IoCollectOrderService extends ServiceImpl { //插入到码表 collectCodeService.insertCodesByBill(collectOrderRequest.getBillNo()); - //更新数据至第三方系统 - }); } @@ -632,10 +619,10 @@ public class IoCollectOrderService extends ServiceImpl baseResponse = erpBasicClient.postOrder(orderRequest); log.debug("单据返回=========" + baseResponse); - if(baseResponse.getCode() == 20000){ + if (baseResponse.getCode() == 20000) { // - }else { - throw new JsonException("连接第三方系统接口服务出错,"+baseResponse.getMessage()); + } else { + throw new JsonException("连接第三方系统接口服务出错," + baseResponse.getMessage()); } } @@ -665,16 +652,17 @@ public class IoCollectOrderService extends ServiceImpl ioSplitCodeEntities = findSplitCodes(collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo(), collectOrder.getWorkPlaceCode()); + + //2.如果拆零表为空,则自动从预出库队列中获拉取数据 + if (CollUtil.isEmpty(ioSplitCodeEntities)) { + addFifoCode(collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo(), IntUtil.value(collectOrderBiz.getCount())); + ioSplitCodeEntities = findSplitCodes(collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo(), collectOrder.getWorkPlaceCode()); + } + //3.如果拆零表不为空,则开始扣除数量 + int count = 0; + int unCount = 0; //剩余未扣减数量 + unCount = IntUtil.value(collectOrderBiz.getUnTagCount()); + for (IoSplitCodeEntity ioSplitCodeEntity : ioSplitCodeEntities) { + count = IntUtil.value(ioSplitCodeEntity.getRemainCount()) - unCount; + collectOrderCodeAutoService.save(IoCollectOrderCodeAuto.builder() + .codeIdFk(ioSplitCodeEntity.getId()) + .udiCode(ioSplitCodeEntity.getCode()) + .orderIdFk(collectOrder.getBillNo()) + .batchNo(ioSplitCodeEntity.getBatchNo()) + .productDate(ioSplitCodeEntity.getProduceDate()) + .expireDate(ioSplitCodeEntity.getExpireDate()) + .serialNo(ioSplitCodeEntity.getSerialNo()) + .relId(collectOrderBiz.getRelId()) + .bizIdFk(collectOrderBiz.getId()) + .fifoSplit(ioSplitCodeEntity.getFifoSplit()) + .createTime(new Date()) + .updateTime(new Date()) + .build()); + if (count > 0) { + ioSplitCodeEntity.setRemainCount(count); + unCount = 0; + splitCodeMapper.updateById(ioSplitCodeEntity); + break; + } else if (count == 0) { + ioSplitCodeEntity.setRemainCount(0); + unCount = 0; + } else { + ioSplitCodeEntity.setRemainCount(0); + unCount = -count; + } + splitCodeMapper.updateById(ioSplitCodeEntity); + } + + if (unCount > 0) { + //4.拆零表数量不足,则从预出库队列中获取数据 + Integer fifoCount = addFifoCode(collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo(), unCount); + if (fifoCount == 0) { + //预出库队列数量不足 + collectOrderBiz.setTagStatus(2); + collectOrderBiz.setTagMsg("预出库队列码数量不足,赋码失败!"); + throw new JsonException(500, "提交失败,工位库存数量不足!"); + } else { + //再次执行赋码 + ioSplitCodeEntities = findSplitCodes(collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo(), collectOrder.getWorkPlaceCode()); + for (IoSplitCodeEntity ioSplitCodeEntity : ioSplitCodeEntities) { + count = IntUtil.value(ioSplitCodeEntity.getRemainCount()) - unCount; + collectOrderCodeAutoService.save(IoCollectOrderCodeAuto.builder() + .codeIdFk(ioSplitCodeEntity.getId()) + .udiCode(ioSplitCodeEntity.getCode()) + .orderIdFk(collectOrder.getBillNo()) + .batchNo(ioSplitCodeEntity.getBatchNo()) + .productDate(ioSplitCodeEntity.getProduceDate()) + .expireDate(ioSplitCodeEntity.getExpireDate()) + .serialNo(ioSplitCodeEntity.getSerialNo()) + .relId(collectOrderBiz.getRelId()) + .bizIdFk(collectOrderBiz.getId()) + .fifoSplit(ioSplitCodeEntity.getFifoSplit()) + .createTime(new Date()) + .updateTime(new Date()) + .build()); + if (count > 0) { + ioSplitCodeEntity.setRemainCount(count); + break; + } else if (count == 0) { + ioSplitCodeEntity.setRemainCount(0); + } else { + ioSplitCodeEntity.setRemainCount(0); + unCount = -count; + } + } + if (unCount > 0) { + collectOrderBiz.setTagStatus(2); + collectOrderBiz.setTagMsg("预出库队列码数量不足,赋码失败!"); + throw new JsonException(500, "提交失败,工位库存数量不足!"); + } else { + collectOrderBiz.setTagStatus(3); + collectOrderBiz.setTagMsg("赋码完成!"); + } + } + } else { + collectOrderBiz.setTagStatus(3); + collectOrderBiz.setTagMsg("赋码完成!"); + } + collectOrderBiz.setUnTagCount(unCount); + collectOrderBizService.updateById(collectOrderBiz); + } + @Resource UdiRelevanceService udiRelevanceService; + @Resource + IoCollectOrderCodeManService collectOrderCodeManService; + @Transactional(rollbackFor = Exception.class) public void finishAutoTagCode(IoCollectOrder collectOrder) { List collectOrderBizs = collectOrderBizService.listByBillNo(collectOrder.getBillNo()); - List needAutotagBizs = new ArrayList<>(); + + + //如果手动扫码判断该码是否在队列里,如果已在队列,则队列里剔除 + List collectOrderCodeMEN = collectOrderCodeManService.listByBillNo(collectOrder.getBillNo()); + if (CollUtil.isNotEmpty(collectOrderCodeMEN)) { + for (IoCollectOrderCodeMan collectOrderCodeMan : collectOrderCodeMEN) { + IoSplitFifoCodeEntity splitFifoCodeEntity = splitFifoCodeService.findByCode(collectOrderCodeMan.getUdiCode(), collectOrder.getWorkPlaceCode()); + if (IntUtil.value(splitFifoCodeEntity.getScanCount()) - IntUtil.value(collectOrderCodeMan.getScanCount()) <= 0) { + splitFifoCodeService.removeById(splitFifoCodeEntity.getId()); + + IoSplitFifoInv splitFifoInv = splitFifoInvService.findByFifoCode(splitFifoCodeEntity); + if (splitFifoInv != null) { + splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(splitFifoCodeEntity.getTotalCount())); + splitFifoInv.setLockCount(IntUtil.value(splitFifoInv.getLockCount()) - IntUtil.value(splitFifoCodeEntity.getTotalCount())); + splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount() - IntUtil.value(splitFifoInv.getOutCount()))); + splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount() - IntUtil.value(splitFifoInv.getLockCount()) - IntUtil.value(splitFifoInv.getOutCount()))); + } + + } else { + UdiRelevanceEntity udiRelevanceEntity = udiRelevanceService.selectById(collectOrderCodeMan.getRelId()); + int removeCount = IntUtil.value(collectOrderCodeMan.getScanCount()) * udiRelevanceEntity.getUseLeverCount(); + splitFifoCodeService.updateById(IoSplitFifoCodeEntity.builder() + .id(splitFifoCodeEntity.getId()) + .scanCount(IntUtil.value(splitFifoCodeEntity.getScanCount()) - IntUtil.value(collectOrderCodeMan.getScanCount())) + .totalCount(IntUtil.value(splitFifoCodeEntity.getTotalCount()) - removeCount) + .build()); + + IoSplitFifoInv splitFifoInv = splitFifoInvService.findByFifoCode(splitFifoCodeEntity); + if (splitFifoInv != null) { + splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + removeCount); + splitFifoInv.setLockCount(IntUtil.value(splitFifoInv.getLockCount()) - removeCount); + splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount() - IntUtil.value(splitFifoInv.getOutCount()))); + splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount() - IntUtil.value(splitFifoInv.getLockCount()) - IntUtil.value(splitFifoInv.getOutCount()))); + } + } + } + } + List removeIds = new ArrayList<>(); for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { int unTagCount = collectOrderBiz.getCount() - IntUtil.value(collectOrderBiz.getScanActCount()); if (unTagCount > 0) { @@ -282,12 +425,35 @@ public class IoSplitCodeService extends ServiceImpl 0) { - - for(int i = 0;i ioSplitFifoCodeEntities = splitFifoCodeService.findByRelId(collectOrder.getWorkPlaceCode(), collectOrder.getBusType(), collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo()); + if (ioSplitFifoCodeEntities.size() < quotient) { + throw new JsonException(500, "提交失败,工位库存数量不足!"); } - + for (int i = 0; i < quotient; i++) { + IoSplitFifoCodeEntity splitFifoCodeEntity = ioSplitFifoCodeEntities.get(i); + removeIds.add(splitFifoCodeEntity.getId()); + collectOrderBiz.setUnTagCount(IntUtil.value(collectOrderBiz.getUnTagCount()) - IntUtil.value(udiRelevanceEntity.getUseLeverCount())); + collectOrderCodeAutoService.save(IoCollectOrderCodeAuto.builder() + .codeIdFk(splitFifoCodeEntity.getId()) + .udiCode(splitFifoCodeEntity.getCode()) + .orderIdFk(collectOrder.getBillNo()) + .batchNo(splitFifoCodeEntity.getBatchNo()) + .productDate(splitFifoCodeEntity.getProduceDate()) + .expireDate(splitFifoCodeEntity.getExpireDate()) + .serialNo(splitFifoCodeEntity.getSerialNo()) + .relId(collectOrderBiz.getRelId()) + .bizIdFk(collectOrderBiz.getId()) + .fifoSplit(splitFifoCodeEntity.getFifoSplit()) + .createTime(new Date()) + .updateTime(new Date()) + .build()); + } + } + //.如果拆零,拆零表扣除 + if (remainder > 0) { + splitRemove(collectOrderBiz, collectOrder); } }