From 37a54d3ef9552743c5bde2ae9a4affdb9f941c40 Mon Sep 17 00:00:00 2001 From: anthonywj Date: Fri, 10 Feb 2023 17:50:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E4=BE=9B=E5=BA=94=E5=95=86?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=EF=BC=8C=E5=A4=9A=E4=B8=AA=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=BB=91=E5=AE=9A=EF=BC=8C=E9=A2=84=E9=AA=8C?= =?UTF-8?q?=E6=94=B6=E5=BA=93=E5=AD=98=E6=A0=A1=E9=AA=8C=EF=BC=8C=E6=99=AE?= =?UTF-8?q?=E9=80=9A=E5=BA=93=E5=AD=98=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inout/IoCodeTempController.java | 142 ++++++++++-------- .../controller/inout/IoOrderController.java | 30 +++- .../inout/IoOrderReviewController.java | 12 ++ .../api/service/inout/IoAddInoutService.java | 15 +- .../service/inv/InvPreinDetailService.java | 4 +- .../service/inv/InvProductDetailService.java | 5 + .../inv/impl/InvPreinDetailServiceImpl.java | 10 ++ .../inv/impl/InvProductDetailServiceImpl.java | 24 +++ 8 files changed, 161 insertions(+), 81 deletions(-) diff --git a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java index 9024d69d5..44609e0f4 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -16,6 +16,8 @@ import com.glxp.api.entity.basic.BasicCorpEntity; import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.basic.UdiProductEntity; import com.glxp.api.entity.inout.*; +import com.glxp.api.entity.inv.InvPreinDetailEntity; +import com.glxp.api.entity.inv.InvProductDetailEntity; import com.glxp.api.entity.system.SystemParamConfigEntity; import com.glxp.api.http.SpsDirectClient; import com.glxp.api.req.basic.CompanyProductRelevanceRequest; @@ -30,6 +32,8 @@ import com.glxp.api.res.inout.AddCodeResult; import com.glxp.api.service.auth.InvWarehouseService; import com.glxp.api.service.basic.*; import com.glxp.api.service.inout.*; +import com.glxp.api.service.inv.InvPreinDetailService; +import com.glxp.api.service.inv.InvProductDetailService; import com.glxp.api.service.system.SystemParamConfigService; import com.glxp.api.util.CustomUtil; import com.glxp.api.util.DateUtil; @@ -80,6 +84,10 @@ public class IoCodeTempController extends BaseController { InvWarehouseService invWarehouseService; @Resource IoCheckInoutService ioCheckInoutService; + @Resource + InvPreinDetailService invPreinDetailService; + @Resource + InvProductDetailService invProductDetailService; //手持端扫码单据上传调用接口 @AuthRuleAnnotation("") @@ -414,70 +422,46 @@ public class IoCodeTempController extends BaseController { } } - //校验预验收是否已存在 todo + //校验预验收是否已存在 if (bussinessTypeEntity.isPreIn()) { if (StrUtil.isNotEmpty(udiEntity.getSerialNo())) { -// List invProductDetailEntities = invPreInProductDetailService.findByOriginCode(code); -// if (CollUtil.isNotEmpty(invProductDetailEntities)) { -// return ResultVOUtils.error(500, "条码已存在!"); -// } + List invProductDetailEntities = invPreinDetailService.findByCode(code); + if (CollUtil.isNotEmpty(invProductDetailEntities)) { + return ResultVOUtils.error(500, "预验收库存已存在此UDI码,请检查后重试!"); + } } } //校验预验收库存是否已存在 if (addOrderRequest.isPreCheck()) { -// InvProductDetailEntity invProductDetailEntity = invPreInProductDetailService.statInvPreInDetail(code); -// if (invProductDetailEntity == null) { -// return ResultVOUtils.error(500, "预验收库存未存在此产品!"); -// } else { -// -// -// if (StrUtil.isNotEmpty(invProductDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo()) -// && !invProductDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) { -// return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!"); -// -// } -// -// -// if (StrUtil.isNotEmpty(orderId)) {//非首次添加 -// if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品 -// WarehouseQueryRequest warehouseQueryRequest = new WarehouseQueryRequest(); -// warehouseQueryRequest.setOrderId(orderId); -// warehouseQueryRequest.setCode(code); -// List codeEnttitys = codesTempService.findByOrderIdAndCode(warehouseQueryRequest); -// if (CollUtil.isNotEmpty(codeEnttitys)) { -// WarehouseEntity codeEnttity = codeEnttitys.get(0); -// if (invProductDetailEntity.getCount() < (codeEnttity.getCount() + 1)) { -// return ResultVOUtils.error(500, "超出预验收库存数量"); -// } -// } -// } else { -// if (invProductDetailEntity.getCount() < 1) { -// return ResultVOUtils.error(500, "超出预验收库存数量"); -// } -// } -// } -// } - } else //校验库存是否存在 - if (addOrderRequest.isVailInv()) { -// if (bussinessTypeEntity.isAdvanceType()) { -// int count = invPreProductDetailService.vailStockCount(code); -// if (count < 0) { -// return ResultVOUtils.error(500, "当前库存不足,不允许0库存出库"); -// } -// } else { -// int count = invProductDetailService.vailStockCount(code, addOrderRequest.getLocStorageCode(), addOrderRequest.getInvWarehouseCode(), null); -// if (count <= 0) { -// return ResultVOUtils.error(500, "当前库存不足,不允许0库存出库"); -// } else if (StrUtil.isNotBlank(addOrderRequest.getOrderId())) { -// //查询此单据已扫描的条码数量 -// WarehouseEntity warehouse = codesTempService.findByUnique(addOrderRequest.getOrderId(), addOrderRequest.getCode()); -// if (null != warehouse && warehouse.getCount() >= count) { -// return ResultVOUtils.error(500, "当前库存不足,不允许0库存出库"); -// } -// } -// } + InvPreinDetailEntity invProductDetailEntity = invPreinDetailService.findOneByCode(code); + if (invProductDetailEntity == null) { + return ResultVOUtils.error(500, "预验收库存未存在此产品!"); + } else { + if (StrUtil.isNotEmpty(invProductDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo()) + && !invProductDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) { + return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!"); + + } + if (StrUtil.isNotEmpty(orderId)) {//非首次添加 + if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品 + IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code); + if (codeTempEntity != null) { + if (invProductDetailEntity.getCount() < (codeTempEntity.getCount() + 1)) { + return ResultVOUtils.error(500, "超出预验收库存数量"); + } + } + } else { + if (invProductDetailEntity.getCount() < 1) { + return ResultVOUtils.error(500, "超出预验收库存数量"); + } + } + } } + } + + + //校验库存是否存在 if (addOrderRequest.getFromCorp() == null) { @@ -515,6 +499,12 @@ public class IoCodeTempController extends BaseController { exitLocalEntity.setCount(exitLocalEntity.getCount() + 1); exitLocalEntity.setReCount(exitLocalEntity.getCount() * udiCalCountUtil.getActCount(udiRelevanceResponses.get(0))); + + BaseResponse invRes = checkInv(bussinessTypeEntity, exitLocalEntity); + if (invRes != null) { + return invRes; + } + if (StringUtils.isBlank(exitLocalEntity.getSerialNo())) { if (bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.isCheckWebNew()) { String errMsg = ioCheckInoutService.checkCode(exitLocalEntity); @@ -602,6 +592,12 @@ public class IoCodeTempController extends BaseController { BaseResponse baseResponse = checkRelId(codeEnttity, unitFk); + + BaseResponse invRes = checkInv(bussinessTypeEntity, exitLocalEntity); + if (invRes != null) { + return invRes; + } + if (bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.isCheckWebNew()) { String errMsg = ioCheckInoutService.checkCode(codeEnttity); if (errMsg != null) { @@ -659,15 +655,20 @@ public class IoCodeTempController extends BaseController { //校验供应商是否配送此产品 public BaseResponse checkCorp(IoCodeTempEntity codeEnttity, BasicBussinessTypeEntity bussinessTypeEntity, String unitFk) { + CompanyProductRelevanceRequest companyProductRelevanceRequest = new CompanyProductRelevanceRequest(); + UdiEntity udiEntity = FilterUdiUtils.getUdi(codeEnttity.getCode()); + companyProductRelevanceRequest.setNameCode(udiEntity.getUdi()); if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) { - CompanyProductRelevanceRequest companyProductRelevanceRequest = new CompanyProductRelevanceRequest(); companyProductRelevanceRequest.setUnitFk(unitFk); - UdiEntity udiEntity = FilterUdiUtils.getUdi(codeEnttity.getCode()); - companyProductRelevanceRequest.setNameCode(udiEntity.getUdi()); List datas = udiRlSupService.filterUdiGp(companyProductRelevanceRequest); if (datas.size() <= 0) { return ResultVOUtils.error(500, "当前供应商不存在此配送产品!"); } + } else { + List datas = udiRlSupService.filterUdiGp(companyProductRelevanceRequest); + if (datas.size() <= 0) { + return ResultVOUtils.error(500, "此产品无指定供应商,请检查后添加!"); + } } return null; } @@ -762,6 +763,29 @@ public class IoCodeTempController extends BaseController { return null; } + public BaseResponse checkInv(BasicBussinessTypeEntity bussinessTypeEntity, IoCodeTempEntity codeTempEntity) { + if (bussinessTypeEntity.isVailInv()) { + if (bussinessTypeEntity.isAdvanceType()) { +// int count = invPreProductDetailService.vailStockCount(code); //todo 寄售 +// if (count < 0) { +// return ResultVOUtils.error(500, "当前库存不足,不允许0库存出库"); +// } + } else { + int count = invProductDetailService.vailStockCount(codeTempEntity.getRelId(), codeTempEntity.getDeptCode(), codeTempEntity.getInvCode(), null); + if (count <= 0) { + return ResultVOUtils.error(500, "当前库存不足,不允许0库存出库"); + } else { + //查询此单据已扫描的条码数量 + if (codeTempEntity.getReCount() >= count) { + return ResultVOUtils.error(500, "当前库存不足,不允许0库存出库"); + } + } + } + } + + return null; + } + @AuthRuleAnnotation("") @GetMapping("admin/warehouse/inout/findErrorByOrderId") diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java index 67dfc3b67..9968376ab 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -1,5 +1,6 @@ package com.glxp.api.controller.inout; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.annotation.AuthRuleAnnotation; @@ -98,20 +99,35 @@ public class IoOrderController { } + @Resource + IoAddInoutService ioAddInoutService; + //单据提交 @AuthRuleAnnotation("") - @GetMapping("warehouse/inout/submitOrderWeb") - public BaseResponse submitOrderWeb(AddOrderRequest addOrderRequest) { + @PostMapping("warehouse/inout/submitOrderWeb") + public BaseResponse submitOrderWeb(@RequestBody AddOrderRequest addOrderRequest) { //校验单据是否已完成 List orderDetailBizEntities = orderDetailBizService.findByOrderId(addOrderRequest.getBillNo()); List orderDetailCodeEntities = orderDetailCodeService.findByOrderId(addOrderRequest.getBillNo()); - String errMsg = checkInoutService.bizOrderCheck(orderDetailBizEntities, orderDetailCodeEntities); - if (StrUtil.isNotEmpty(errMsg)) { - return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交!"); + + if (CollUtil.isEmpty(orderDetailCodeEntities)) { + return ResultVOUtils.error(500, "单据还未扫码!"); } - saveOrderWeb(addOrderRequest); - checkInoutService.check(addOrderRequest.getBillNo()); + + if (CollUtil.isNotEmpty(orderDetailBizEntities)) { + String errMsg = checkInoutService.bizOrderCheck(orderDetailBizEntities, orderDetailCodeEntities); + if (StrUtil.isNotEmpty(errMsg)) { + return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交!"); + } + saveOrderWeb(addOrderRequest); + checkInoutService.check(addOrderRequest.getBillNo()); + } else { + IoOrderEntity orderEntity = orderService.findByBillNo(addOrderRequest.getBillNo()); + ioAddInoutService.dealProcess(orderEntity); + } + + return ResultVOUtils.success("提交成功!"); } diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java index d0507771e..b7b702478 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java @@ -84,6 +84,18 @@ public class IoOrderReviewController extends BaseController { } + @AuthRuleAnnotation("") + @PostMapping("/udiwms/stock/order/acceptClear") + public BaseResponse acceptClear(@RequestBody AcceptOrderResponse acceptOrderEntity) { + String billNo = acceptOrderEntity.getBillNo(); + redisUtil.del(ConstantStatus.REDIS_BILLNO + billNo); + redisUtil.del(ConstantStatus.REDIS_BILLNO_CODES + billNo); + List stockOrderDetailEntities = orderDetailBizService.findByOrderId(billNo); + acceptOrderEntity.setOrderDetailEntities(stockOrderDetailEntities); + return ResultVOUtils.success(acceptOrderEntity); + } + + public BaseResponse updateReview(IoOrderEntity orderEntity) { AuthAdmin authAdmin = getUser(); orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED); diff --git a/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java b/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java index 118fcf6ef..aa4941db7 100644 --- a/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java @@ -18,18 +18,15 @@ import com.glxp.api.entity.inout.IoOrderDetailCodeEntity; import com.glxp.api.entity.inout.IoOrderEntity; import com.glxp.api.entity.inv.InvProductDetailEntity; import com.glxp.api.entity.system.SystemParamConfigEntity; -import com.glxp.api.req.basic.CompanyProductRelevanceRequest; import com.glxp.api.req.basic.FilterCompanyProductRelevanceRequest; -import com.glxp.api.req.inout.FilterOrderRequest; import com.glxp.api.req.inout.PdaCodeEntity; import com.glxp.api.req.inout.PostOrderRequest; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.service.basic.BasicCorpService; +import com.glxp.api.service.basic.IBasicBussinessTypeService; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.basic.UdiRlSupService; -import com.glxp.api.service.basic.IBasicBussinessTypeService; import com.glxp.api.service.inv.InvProductDetailService; -import com.glxp.api.service.inv.InvProductService; import com.glxp.api.service.system.SystemParamConfigService; import com.glxp.api.util.CustomUtil; import com.glxp.api.util.DateUtil; @@ -210,15 +207,6 @@ public class IoAddInoutService { } if (CollUtil.isNotEmpty(insertList)) { - //临时表转正式表 - List ioCodeEntities = new ArrayList<>(); - for (IoCodeTempEntity codeTempEntity : insertList) { - IoCodeEntity codeEntity = new IoCodeEntity(); - BeanUtils.copyProperties(codeTempEntity, codeEntity); - ioCodeEntities.add(codeEntity); - } - codeService.insertBatch(ioCodeEntities); - //生成扫码单据详情 if (!orderDetailCodeService.isExit(orderEntity.getBillNo())) { for (IoCodeTempEntity codeTempEntity : insertList) { @@ -226,7 +214,6 @@ public class IoAddInoutService { } } codeTempService.deleteByBillNo(orderEntity.getBillNo()); - //进行单据校验 ioCheckInoutService.check(orderEntity.getBillNo()); } diff --git a/src/main/java/com/glxp/api/service/inv/InvPreinDetailService.java b/src/main/java/com/glxp/api/service/inv/InvPreinDetailService.java index e25acc084..a91adfeb9 100644 --- a/src/main/java/com/glxp/api/service/inv/InvPreinDetailService.java +++ b/src/main/java/com/glxp/api/service/inv/InvPreinDetailService.java @@ -6,9 +6,11 @@ import java.util.List; public interface InvPreinDetailService { - public void insertList(List invPreinDetailEntities); + void insertList(List invPreinDetailEntities); List findByCode(String code); + InvPreinDetailEntity findOneByCode(String code); + int deleteByOrderId(String orderId); } diff --git a/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java b/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java index 6d68e19d2..0d47f54e8 100644 --- a/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java +++ b/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java @@ -32,4 +32,9 @@ public interface InvProductDetailService { * @param response */ void setOrderInfo(InvProductDetailResponse response); + + + int vailStockCount(Long relId, String invStorageCode, String invWarehouseCode, String invSpaceCode); + + } diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvPreinDetailServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvPreinDetailServiceImpl.java index 25afaa9bc..e93074ffa 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/InvPreinDetailServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/InvPreinDetailServiceImpl.java @@ -1,5 +1,6 @@ package com.glxp.api.service.inv.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.glxp.api.dao.inv.InvPreinDetailDao; import com.glxp.api.dao.inv.InvPreinOrderDao; @@ -28,6 +29,15 @@ public class InvPreinDetailServiceImpl implements InvPreinDetailService { return invPreinDetailDao.selectList(new QueryWrapper().eq("code", code)); } + @Override + public InvPreinDetailEntity findOneByCode(String code) { + List invPreinDetailEntities = invPreinDetailDao.selectList(new QueryWrapper().eq("code", code).last("limit 1")); + if (CollUtil.isNotEmpty(invPreinDetailEntities)) { + return invPreinDetailEntities.get(0); + } + return null; + } + @Override public int deleteByOrderId(String orderId) { return invPreinDetailDao.delete(new QueryWrapper().eq("orderIdFk", orderId)); diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java index daaafcc45..4ba9006b7 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java @@ -1,6 +1,7 @@ package com.glxp.api.service.inv.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.glxp.api.constant.ConstantType; @@ -8,12 +9,14 @@ import com.glxp.api.dao.basic.BasicBussinessTypeDao; import com.glxp.api.dao.inout.IoOrderDao; import com.glxp.api.dao.inv.InvProductDetailDao; import com.glxp.api.entity.basic.BasicBussinessTypeEntity; +import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.inout.IoOrderEntity; import com.glxp.api.entity.inv.InvProductDetailEntity; import com.glxp.api.req.inv.FilterInvProductDetailRequest; import com.glxp.api.res.inv.InvProductDetailResponse; import com.glxp.api.service.inv.InvProductDetailService; import com.glxp.api.util.DateUtil; +import com.glxp.api.util.udi.FilterUdiUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -91,4 +94,25 @@ public class InvProductDetailServiceImpl implements InvProductDetailService { IoOrderEntity order = orderDao.selectOne(new QueryWrapper().select("createTime").eq("billNo", response.getOrderId())); response.setOrderTime(DateUtil.toDateStr(order.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); } + + + @Override + public int vailStockCount(Long relId, String deptCode, String invCode, String invSpaceCode) { + if (relId == null) { + return 0; + } + List datas = + invProductDetailDao.selectList(new QueryWrapper().eq("relIdFk", relId).eq("deptCode", deptCode).eq("invCode", invCode).eq("invSpaceCode", invSpaceCode)); + int count = 0; + if (CollUtil.isNotEmpty(datas)) { + for (InvProductDetailEntity invProductDetailEntity : datas) { + if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) + count = count + invProductDetailEntity.getCount(); + else { + count = count - invProductDetailEntity.getCount(); + } + } + } + return count; + } }