|
|
|
@ -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<String> 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<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());
|
|
|
|
|
genOrderDetailCodeBatch(orderEntity, codeTempEntities);
|
|
|
|
|
|
|
|
|
|
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,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<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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 返回最新的明细码列表
|
|
|
|
|