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..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) { @@ -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/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; } 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..e28c705e0 100644 --- a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java +++ b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java @@ -210,14 +210,19 @@ 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)); Map udiRelevanceMap = udiRelevanceService.batchSelectByNameCodes(udiCodes); - if (udiRelevanceMap == null) { + if (udiRelevanceMap == null || udiRelevanceMap.size() == 0) { return ResultVOUtils.error(500, "药品字典不存在此产品!"); } @@ -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/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