|  |  |  | @ -210,14 +210,19 @@ public class AddCoodeService { | 
			
		
	
		
			
				
					|  |  |  |  |         if (bussinessTypeEntity == null) { | 
			
		
	
		
			
				
					|  |  |  |  |             return ResultVOUtils.error(500, "业务类型不存在"); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         String invCode; | 
			
		
	
		
			
				
					|  |  |  |  |         if (StrUtil.isNotEmpty(addOrderCodeRequest.getInvCode())) { | 
			
		
	
		
			
				
					|  |  |  |  |             invCode = addOrderCodeRequest.getInvCode(); | 
			
		
	
		
			
				
					|  |  |  |  |         } else | 
			
		
	
		
			
				
					|  |  |  |  |             // 获取仓库信息
 | 
			
		
	
		
			
				
					|  |  |  |  |         String invCode = authAdmin.getLocInvCode(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             invCode = authAdmin.getLocInvCode(); | 
			
		
	
		
			
				
					|  |  |  |  |         if (StrUtil.isEmpty(addOrderCodeRequest.getFromCorp())) | 
			
		
	
		
			
				
					|  |  |  |  |             addOrderCodeRequest.setFromCorp(ConstantType.SPLIT_CORP); | 
			
		
	
		
			
				
					|  |  |  |  |         // 批量获取UDI相关信息
 | 
			
		
	
		
			
				
					|  |  |  |  |         List<String> udiCodes = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         nameCodes.keySet().forEach(code -> udiCodes.add(code)); | 
			
		
	
		
			
				
					|  |  |  |  |         Map<String, UdiRelevanceResponse> 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<CompletableFuture<VailCodeResultResponse>> 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<IoCodeTempEntity> codeTempEntities = codeTempService.findByOrderId(addOrderRequest.getBillNo()); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         List<String> successCodes = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         vailCodeResultResponses.forEach(vailCodeResultResponse -> { | 
			
		
	
		
			
				
					|  |  |  |  |             if (vailCodeResultResponse.getStatus() == 1) { | 
			
		
	
		
			
				
					|  |  |  |  |                 successCodes.add(vailCodeResultResponse.getCode()); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (CollUtil.isNotEmpty(successCodes)) { | 
			
		
	
		
			
				
					|  |  |  |  |             List<IoCodeTempEntity> 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,11 +428,15 @@ public class AddCoodeService { | 
			
		
	
		
			
				
					|  |  |  |  |         if (checkResponse.getCode() == 505) { | 
			
		
	
		
			
				
					|  |  |  |  |             return checkResponse; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         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()); | 
			
		
	
	
		
			
				
					|  |  |  | @ -787,37 +807,6 @@ public class AddCoodeService { | 
			
		
	
		
			
				
					|  |  |  |  |     private IoOrderDetailCodeDao orderDetailCodeDao; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public List<IoOrderDetailCodeEntity> genOrderDetailCode(IoOrderEntity orderEntity, IoCodeTempEntity codeTempEntity) { | 
			
		
	
		
			
				
					|  |  |  |  |         List<IoOrderDetailCodeEntity> ioOrderDetailCodeEntities = orderDetailCodeDao.selectList(new QueryWrapper<IoOrderDetailCodeEntity>().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<IoOrderDetailCodeEntity>().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<IoOrderDetailCodeEntity> 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); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 返回最新的明细码列表
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |