From ef43ef193ff9cf35f98cf0aa72825b5f2a8c7119 Mon Sep 17 00:00:00 2001 From: yewj Date: Thu, 27 Mar 2025 18:42:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8D=AF=E5=93=81=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E6=89=B9=E9=87=8F=E6=89=AB=E7=A0=81=E9=97=AE=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