From ef43ef193ff9cf35f98cf0aa72825b5f2a8c7119 Mon Sep 17 00:00:00 2001 From: yewj Date: Thu, 27 Mar 2025 18:42:23 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=8D=AF=E5=93=81=E5=87=BA=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E5=8D=95=E6=89=B9=E9=87=8F=E6=89=AB=E7=A0=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inout/IoCodeTempController.java | 11 ++- .../api/req/inout/AddOrderCodeRequest.java | 8 ++ .../api/service/inout/AddCoodeService.java | 99 +++++++++---------- src/main/resources/application-dev.yml | 4 +- 4 files changed, 63 insertions(+), 59 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 8a8b9b08f..6dfc3eaa1 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -419,7 +419,7 @@ public class IoCodeTempController extends BaseController { @RepeatSubmit() @AuthRuleAnnotation("") @PostMapping("warehouse/inout/batchAddCode") - @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderCodeRequest.corpOrderId", "#addOrderCodeRequest.codeList"}, timeOutMsg = "系统正在处理,请勿重复提交") +// @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderCodeRequest.corpOrderId", "#addOrderCodeRequest.codeList"}, timeOutMsg = "系统正在处理,请勿重复提交") @Log(title = "单据管理", businessType = BusinessType.INSERT) public BaseResponse batchAddCode(@RequestBody AddOrderCodeRequest addOrderCodeRequest, BindingResult bindingResult) { @@ -430,9 +430,13 @@ public class IoCodeTempController extends BaseController { AuthAdmin authAdmin = getUser(); AddCodeResult addCodeResult = new AddCodeResult(); List codeList = addOrderCodeRequest.getCodeList(); - if (CollUtil.isEmpty(codeList)) + if (CollUtil.isEmpty(codeList) && StrUtil.isEmpty(addOrderCodeRequest.getCode())) return ResultVOUtils.error(500, "追溯码不能为空"); - + if (StrUtil.isNotEmpty(addOrderCodeRequest.getCode()) && CollUtil.isEmpty(codeList)) { + codeList = new ArrayList<>(); + codeList.add(addOrderCodeRequest.getCode()); + addOrderCodeRequest.setCodeList(codeList); + } // 获取第一个码判断类型,如果是药品类型则使用批量处理方法 if (!codeList.isEmpty()) { String firstCode = codeList.get(0); @@ -511,6 +515,7 @@ public class IoCodeTempController extends BaseController { addCodeResult.setOrderId(temp.getOrderId()); addOrderRequest.setBillNo(temp.getOrderId()); } else { + addCodeResult.setOrderId(addOrderRequest.getBillNo()); vailCodeResultResponse.setCode(code); vailCodeResultResponse.setStatus(2); vailCodeResultResponse.setErrMsg(baseResponse.getMessage()); diff --git a/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java b/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java index 626d1c0b2..d6e5b4201 100644 --- a/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java +++ b/src/main/java/com/glxp/api/req/inout/AddOrderCodeRequest.java @@ -58,4 +58,12 @@ public class AddOrderCodeRequest { private String action; + private String fromCorp; + + private String fromCorpName; + + private String invCode; + + private Integer fromType; + } diff --git a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java index f26d8783b..d709fbd92 100644 --- a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java +++ b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java @@ -210,9 +210,14 @@ public class AddCoodeService { if (bussinessTypeEntity == null) { return ResultVOUtils.error(500, "业务类型不存在"); } - // 获取仓库信息 - String invCode = authAdmin.getLocInvCode(); - + String invCode; + if (StrUtil.isNotEmpty(addOrderCodeRequest.getInvCode())) { + invCode = addOrderCodeRequest.getInvCode(); + } else + // 获取仓库信息 + invCode = authAdmin.getLocInvCode(); + if (StrUtil.isEmpty(addOrderCodeRequest.getFromCorp())) + addOrderCodeRequest.setFromCorp(ConstantType.SPLIT_CORP); // 批量获取UDI相关信息 List udiCodes = new ArrayList<>(); nameCodes.keySet().forEach(code -> udiCodes.add(code)); @@ -287,8 +292,8 @@ public class AddCoodeService { orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag()); orderService.insertOrder(orderEntity); addOrderRequest.setBillNo(orderNo); - } - + } else + orderEntity = isExit; try { // 创建异步任务 List> futures = udiEntityMap.entrySet().stream().map(entry -> { @@ -304,7 +309,7 @@ public class AddCoodeService { } else { addOrderRequest.setAction(ConstantType.SPLIT_OUT); } - addOrderRequest.setFromCorp(ConstantType.SPLIT_CORP); + // 设置批次信息 if (StrUtil.isNotEmpty(addOrderRequest.getBatchNo())) { @@ -352,8 +357,19 @@ public class AddCoodeService { } finally { executor.shutdown(); } - List codeTempEntities = codeTempService.findByOrderId(addOrderRequest.getBillNo()); - genOrderDetailCodeBatch(orderEntity, codeTempEntities); + + List successCodes = new ArrayList<>(); + vailCodeResultResponses.forEach(vailCodeResultResponse -> { + if (vailCodeResultResponse.getStatus() == 1) { + successCodes.add(vailCodeResultResponse.getCode()); + } + }); + + if (CollUtil.isNotEmpty(successCodes)) { + List codeTempEntities = codeTempService.selectByCodes(successCodes, orderEntity.getBillNo()); + genOrderDetailCodeBatch(orderEntity, codeTempEntities); + } + addCodeResult.setOrderId(orderEntity.getBillNo()); addCodeResult.setVailCodeResultResponses(vailCodeResultResponses); log.info("批量处理药品追溯码完成,共{}个,耗时{}ms", codeList.size(), (System.currentTimeMillis() - startTime)); return ResultVOUtils.success(addCodeResult); @@ -412,12 +428,16 @@ public class AddCoodeService { if (checkResponse.getCode() == 505) { return checkResponse; } - // 工位上货相关校验 - BaseResponse handleSplitOutAndSplitReturnResponse = handleSplitOutAndSplitReturn(code, udiEntity, bussinessTypeEntity); - if (handleSplitOutAndSplitReturnResponse.getCode() != 20000) { - return handleSplitOutAndSplitReturnResponse; + + if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT) || bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) { + // 工位上货相关校验 + BaseResponse handleSplitOutAndSplitReturnResponse = handleSplitOutAndSplitReturn(code, udiEntity, bussinessTypeEntity); + if (handleSplitOutAndSplitReturnResponse.getCode() != 20000) { + return handleSplitOutAndSplitReturnResponse; + } } + if (addOrderRequest.getFromCorp() == null || StrUtil.isNotEmpty(addOrderRequest.getSickerAdNum())) { String fromCorp = ioAddInoutService.updateCorp(bussinessTypeEntity, addOrderRequest.getFromCorp(), addOrderRequest.getSickerAdNum()); addOrderRequest.setFromCorp(fromCorp); @@ -787,37 +807,6 @@ public class AddCoodeService { private IoOrderDetailCodeDao orderDetailCodeDao; - public List genOrderDetailCode(IoOrderEntity orderEntity, IoCodeTempEntity codeTempEntity) { - List ioOrderDetailCodeEntities = orderDetailCodeDao.selectList(new QueryWrapper().select("id", "count", "reCount", "bindRlFk", "batchNo", "price").eq("orderIdFk", orderEntity.getBillNo())); - UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectSupGroupById(codeTempEntity.getRelId(), codeTempEntity.getSupId()); - if (codeTempEntity.getPrice() == null && udiRelevanceResponse.getPrice() != null) { - codeTempService.updateById(IoCodeTempEntity.builder().id(codeTempEntity.getId()).price(udiRelevanceResponse.getPrice()).build()); - } - if (CollUtil.isEmpty(ioOrderDetailCodeEntities)) { - orderDetailCodeDao.insert(ioAddInoutService.buildEntity(orderEntity, codeTempEntity, udiRelevanceResponse)); - ioOrderDetailCodeEntities = orderDetailCodeDao.selectList(new QueryWrapper().select("id", "count", "reCount", "bindRlFk", "batchNo", "price").eq("orderIdFk", orderEntity.getBillNo())); - } else { -// && BigDecimalUtil.equalTo(IntUtil.value(orderDetailCodeEntity.getPrice()), IntUtil.value(codeTempEntity.getPrice()) - boolean isUpdate = false; - for (IoOrderDetailCodeEntity orderDetailCodeEntity : ioOrderDetailCodeEntities) { - if (orderDetailCodeEntity.getBindRlFk().longValue() == udiRelevanceResponse.getId().longValue() && StrUtil.trimToEmpty(orderDetailCodeEntity.getBatchNo()).equals(StrUtil.trimToEmpty(codeTempEntity.getBatchNo()))) { - orderDetailCodeEntity.setCount(orderDetailCodeEntity.getCount() + codeTempEntity.getMyCount()); - orderDetailCodeEntity.setReCount(orderDetailCodeEntity.getReCount() + codeTempEntity.getMyReCount()); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("count", orderDetailCodeEntity.getCount()).set("reCount", orderDetailCodeEntity.getReCount()); - orderDetailCodeEntity.setUpdateTime(new Date()); - orderDetailCodeDao.updateCount(orderDetailCodeEntity); - isUpdate = true; - break; - } - } - if (!isUpdate) { - orderDetailCodeDao.insert(ioAddInoutService.buildEntity(orderEntity, codeTempEntity, udiRelevanceResponse)); - } - } - return ioOrderDetailCodeEntities; - } - /** * 批量处理码实体生成订单明细码 * @@ -842,24 +831,15 @@ public class AddCoodeService { if (CollUtil.isEmpty(group)) { continue; } - IoCodeTempEntity representative = group.get(0); UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectSupGroupById(representative.getRelId(), representative.getSupId()); // 计算该组的总数量 int totalCount = group.stream().mapToInt(IoCodeTempEntity::getMyCount).sum(); int totalReCount = group.stream().mapToInt(IoCodeTempEntity::getMyReCount).sum(); - - // 更新价格信息 - for (IoCodeTempEntity entity : group) { - if (entity.getPrice() == null && udiRelevanceResponse != null && udiRelevanceResponse.getPrice() != null) { - codeTempService.updateById(IoCodeTempEntity.builder().id(entity.getId()).price(udiRelevanceResponse.getPrice()).build()); - } - } - // 如果没有现有明细码或未找到匹配的明细码,则创建新的 boolean isUpdate = false; - + IoOrderDetailCodeEntity resultDetailEntity = null; if (CollUtil.isNotEmpty(ioOrderDetailCodeEntities)) { for (IoOrderDetailCodeEntity orderDetailCodeEntity : ioOrderDetailCodeEntities) { if (orderDetailCodeEntity.getBindRlFk().longValue() == representative.getRelId().longValue() && StrUtil.trimToEmpty(orderDetailCodeEntity.getBatchNo()).equals(StrUtil.trimToEmpty(representative.getBatchNo()))) { @@ -869,6 +849,7 @@ public class AddCoodeService { orderDetailCodeEntity.setUpdateTime(new Date()); orderDetailCodeDao.updateCount(orderDetailCodeEntity); isUpdate = true; + resultDetailEntity = orderDetailCodeEntity; break; } } @@ -876,8 +857,18 @@ public class AddCoodeService { // 如果没有更新现有记录,则创建新记录 if (!isUpdate) { - orderDetailCodeDao.insert(buildEntity(orderEntity, representative, udiRelevanceResponse, totalCount, totalReCount)); + resultDetailEntity = buildEntity(orderEntity, representative, udiRelevanceResponse, totalCount, totalReCount); + orderDetailCodeDao.insert(resultDetailEntity); } + // 更新价格信息 + for (IoCodeTempEntity entity : group) { + if (entity.getPrice() == null && udiRelevanceResponse != null && udiRelevanceResponse.getPrice() != null) { + entity.setPrice(udiRelevanceResponse.getPrice()); + } + entity.setBizId(resultDetailEntity.getId()); + codeTempService.updateById(entity); + } + } // 返回最新的明细码列表 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 1cbd17a16..69a664de9 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,9 +4,9 @@ server: spring: datasource: driver-class-name: com.p6spy.engine.spy.P6SpyDriver - jdbc-url: jdbc:p6spy:mysql://192.168.0.206:3306/udiwms81?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + jdbc-url: jdbc:p6spy:mysql://127.0.0.1:3306/udi_wms_yxfy?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root - password: Glxp@6066 + password: 123456 hikari: connection-timeout: 60000 maximum-pool-size: 20 From be27747962e2e3ed956461c08a14e96aa28b2507 Mon Sep 17 00:00:00 2001 From: yewj Date: Fri, 28 Mar 2025 09:10:05 +0800 Subject: [PATCH 2/4] =?UTF-8?q?ID=E9=87=8D=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/glxp/api/service/inout/AddCoodeService.java | 2 +- .../java/com/glxp/api/service/inout/IoSplitCodeService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java index d709fbd92..e28c705e0 100644 --- a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java +++ b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java @@ -222,7 +222,7 @@ public class AddCoodeService { List udiCodes = new ArrayList<>(); nameCodes.keySet().forEach(code -> udiCodes.add(code)); Map udiRelevanceMap = udiRelevanceService.batchSelectByNameCodes(udiCodes); - if (udiRelevanceMap == null) { + if (udiRelevanceMap == null || udiRelevanceMap.size() == 0) { return ResultVOUtils.error(500, "药品字典不存在此产品!"); } diff --git a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java index 551a10eff..be562f655 100644 --- a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java +++ b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java @@ -345,8 +345,8 @@ public class IoSplitCodeService extends ServiceImpl Date: Fri, 28 Mar 2025 09:55:16 +0800 Subject: [PATCH 3/4] =?UTF-8?q?3/28=20=E5=A4=84=E7=90=86=E5=8D=95=E6=8D=AE?= =?UTF-8?q?=E4=BC=98=E5=8C=961.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/collect/CollectOrderBizResponse.java | 2 ++ .../collect/IoCollectOrderBizService.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java b/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java index 656b33f0a..994ff6a1e 100644 --- a/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java +++ b/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java @@ -203,6 +203,8 @@ public class CollectOrderBizResponse { private String trdnFlag; + private Integer shouldCount; + diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java index 3b3bd45b1..1f8042915 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java @@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.glxp.api.dao.collect.IoCollectOrderBizMapper; +import com.glxp.api.entity.basic.UdiProductEntity; import com.glxp.api.entity.collect.IoCollectOrderBiz; import com.glxp.api.req.collect.CollectOrderBizRequest; import com.glxp.api.res.collect.CollectOrderBizResponse; +import com.glxp.api.service.basic.UdiProductService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -21,6 +23,10 @@ public class IoCollectOrderBizService extends ServiceImpl filterList(CollectOrderBizRequest collectOrderRequest) { if (collectOrderRequest == null) { return Collections.emptyList(); @@ -35,6 +41,17 @@ public class IoCollectOrderBizService extends ServiceImpl 0){ + for (CollectOrderBizResponse collectOrderBizResponse : data){ + UdiProductEntity product = udiProductService.selectUdiByName(collectOrderBizResponse.getNameCode()); + Integer myBhxjsl = product.getMyBhxjsl(); + collectOrderBizResponse.setShouldCount(collectOrderBizResponse.getCount() / myBhxjsl); + if (collectOrderBizResponse.getScanCount() == null){ + collectOrderBizResponse.setScanCount(0); + } + } + } return data; } From 49142d518357045c4bbaf4410eb50fe1d7deabcc Mon Sep 17 00:00:00 2001 From: yewj Date: Fri, 28 Mar 2025 11:39:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/glxp/api/controller/inout/IoCodeTempController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6dfc3eaa1..5f6e28106 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -419,7 +419,7 @@ public class IoCodeTempController extends BaseController { @RepeatSubmit() @AuthRuleAnnotation("") @PostMapping("warehouse/inout/batchAddCode") -// @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderCodeRequest.corpOrderId", "#addOrderCodeRequest.codeList"}, timeOutMsg = "系统正在处理,请勿重复提交") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderCodeRequest.corpOrderId", "#addOrderCodeRequest.codeList","#addOrderCodeRequest.code"}, timeOutMsg = "系统正在处理,请勿重复提交") @Log(title = "单据管理", businessType = BusinessType.INSERT) public BaseResponse batchAddCode(@RequestBody AddOrderCodeRequest addOrderCodeRequest, BindingResult bindingResult) {