药品出入库单批量扫码问题

dev_2.5_inv
yewj 3 months ago
parent c5cfb3740a
commit ef43ef193f

@ -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<String> 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());

@ -58,4 +58,12 @@ public class AddOrderCodeRequest {
private String action;
private String fromCorp;
private String fromCorpName;
private String invCode;
private Integer fromType;
}

@ -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);
}
}
// 返回最新的明细码列表

@ -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

Loading…
Cancel
Save