无码类型上货控制

dev_2.5_mutiscan
yewj 3 months ago
parent aa18a6658a
commit 6402d2391a

@ -454,7 +454,7 @@ public class LoginController extends BaseController {
public void getImage(HttpServletResponse response,
@RequestParam String type,
@RequestParam String name) throws IOException {
File file = new File(filePath + "/register/" + type + "/" + name);
File file = new File(filePath + "/register/" + type + "/" + name);
// 检查文件是否存在
if (!file.exists()) {
@ -488,5 +488,4 @@ public class LoginController extends BaseController {
}
}

@ -1295,7 +1295,8 @@ public class IoCodeTempController extends BaseController {
return ResultVOUtils.error(500, "药品字典不存在此产品!");
}
if (IntUtil.value(udiRelevanceResponse.getNotCodeType()) != 0) {
IoCollectSet collectSet = collectSetService.getSet();
if (IntUtil.value(collectSet.getNoCodeScan()) && IntUtil.value(udiRelevanceResponse.getNotCodeType()) != 0) {
return ResultVOUtils.error(500, "当前为无码类型产品,无需扫码!");
}
@ -1324,13 +1325,9 @@ public class IoCodeTempController extends BaseController {
// 层级标识校验
boolean packLevelValid;
if (bussinessTypeEntity.isUse()) {
packLevelValid = isPackLevelValid(udiRelevanceResponse.getUseMaxLevel(),
IntUtil.value(udiRelevanceResponse.getPackLevel()),
udiRelevanceResponse.getUseLevel());
packLevelValid = isPackLevelValid(udiRelevanceResponse.getUseMaxLevel(), IntUtil.value(udiRelevanceResponse.getPackLevel()), udiRelevanceResponse.getUseLevel());
} else {
packLevelValid = isPackLevelValid(udiRelevanceResponse.getDistributeMaxLevel(),
IntUtil.value(udiRelevanceResponse.getPackLevel()),
udiRelevanceResponse.getDistributeLevel());
packLevelValid = isPackLevelValid(udiRelevanceResponse.getDistributeMaxLevel(), IntUtil.value(udiRelevanceResponse.getPackLevel()), udiRelevanceResponse.getDistributeLevel());
}
if (!packLevelValid) {
@ -1531,10 +1528,8 @@ public class IoCodeTempController extends BaseController {
codeEnttity.setReCount(codeEnttity.getMyReCount() + udiCalCountUtil.getCirActCount(udiRelevanceResponse));
}
} else {
if (unitFk == null)
return ResultVOUtils.error(500, "耗材字典不存在此产品!");
else
return ResultVOUtils.error(500, "当前供应商不存在此配送产品!");
if (unitFk == null) return ResultVOUtils.error(500, "耗材字典不存在此产品!");
else return ResultVOUtils.error(500, "当前供应商不存在此配送产品!");
}
if (!(bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN) || bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT))) {
@ -1585,13 +1580,11 @@ public class IoCodeTempController extends BaseController {
if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT)) {
//工位上货 只允许上货一个产品 开关以及控制
IoCollectSet collectSet = collectSetService.getSet();
// 判断货位里面是否有相同产品
if (orderEntity != null && StrUtil.isNotEmpty(orderEntity.getWorkPlaceQueueCode())) {
SysWorkplace sysWorkplace = sysWorkplaceService.getOne(new LambdaQueryWrapper<SysWorkplace>().eq(SysWorkplace::getWorkplaceId, addOrderRequest.getWorkPlaceCode()));
if (sysWorkplace.getQueueStatus() == 1) {
SysWorkplaceQueue workplaceQueue = sysWorkplaceQueueService.getOne(new LambdaQueryWrapper<SysWorkplaceQueue>()
.eq(SysWorkplaceQueue::getCode, orderEntity.getWorkPlaceQueueCode()));
SysWorkplaceQueue workplaceQueue = sysWorkplaceQueueService.getOne(new LambdaQueryWrapper<SysWorkplaceQueue>().eq(SysWorkplaceQueue::getCode, orderEntity.getWorkPlaceQueueCode()));
if (workplaceQueue != null) {
//判断槽位产品是否一样
if (StrUtil.isNotBlank(workplaceQueue.getRelId())) {
@ -1621,8 +1614,7 @@ public class IoCodeTempController extends BaseController {
//校验完成 获取当前槽位 绑定产品
SysWorkplaceQueue sysWorkplaceQueue = sysWorkplaceQueueService.getOne(new LambdaQueryWrapper<SysWorkplaceQueue>()
.eq(SysWorkplaceQueue::getCode, orderEntity.getWorkPlaceQueueCode()).last("limit 1"));
SysWorkplaceQueue sysWorkplaceQueue = sysWorkplaceQueueService.getOne(new LambdaQueryWrapper<SysWorkplaceQueue>().eq(SysWorkplaceQueue::getCode, orderEntity.getWorkPlaceQueueCode()).last("limit 1"));
if (sysWorkplaceQueue.getRelId() == null) {
//虚拟槽位这个时候就要设置
if (sysWorkplace.getQueueStatus() == 0) {
@ -1638,8 +1630,7 @@ public class IoCodeTempController extends BaseController {
isSame = true;
}
}
if (!isSame)
return ResultVOUtils.error(507, "当前单据下只允许上货单一产品!");
if (!isSame) return ResultVOUtils.error(507, "当前单据下只允许上货单一产品!");
}
} else if (orderEntity != null && CollUtil.isNotEmpty(codeEnttitys) && IntUtil.value(collectSet.getSplitOutOnlyProductSwitch())) {
for (IoCodeTempEntity ioOrderDetailCodeEntity : codeEnttitys) {
@ -1669,8 +1660,7 @@ public class IoCodeTempController extends BaseController {
genDetaiEntity = codeEnttity;
if (baseResponse == null) {
baseResponse = checkSupId(bussinessTypeEntity, codeEnttity, unitFk);
if (baseResponse != null)
return baseResponse;
if (baseResponse != null) return baseResponse;
} else {
if (baseResponse.getCode() == 501) {
return baseResponse;
@ -1732,8 +1722,7 @@ public class IoCodeTempController extends BaseController {
String errMsg = ioCheckInoutService.checkCode(codeEnttity);
if (errMsg != null) {
return ResultVOUtils.error(500, errMsg);
} else
codeTempService.insert(codeEnttity);
} else codeTempService.insert(codeEnttity);
// 查询是否存在药品关联信息 后将结果更新至 temp表
updateRelCode(bussinessTypeEntity, code);
// relCodeBatchService.threadUpdateIoCodeTempEntity(code);
@ -1742,8 +1731,7 @@ public class IoCodeTempController extends BaseController {
String errMsg = ioCheckInoutService.checkDrugNoPiCode(codeEnttity);
if (errMsg != null) {
return ResultVOUtils.error(500, errMsg);
} else
codeTempService.insert(codeEnttity);
} else codeTempService.insert(codeEnttity);
// 异步调用 查询是否存在药品关联信息 后将结果更新至 temp表
updateRelCode(bussinessTypeEntity, code);
// relCodeBatchService.threadUpdateIoCodeTempEntity(code);

@ -138,6 +138,11 @@ public class IoCollectSet implements Serializable {
@ApiModelProperty(value = "是否启用退货扫码冲突替换10否")
private Boolean conflictReturn;
@TableField(value = "noCodeScan")
@ApiModelProperty(value = "无码类型是否允许上货10否")
private Boolean noCodeScan;
private static final long serialVersionUID = 1L;

@ -157,6 +157,8 @@ public class AddCoodeService {
*
*/
public BaseResponse batchProcessDrugCodes(AddOrderCodeRequest addOrderCodeRequest, AuthAdmin authAdmin) {
IoCollectSet collectSet = collectSetService.getSet();
long startTime = System.currentTimeMillis();
AddCodeResult addCodeResult = new AddCodeResult();
List<String> codeList = addOrderCodeRequest.getCodeList();
@ -293,8 +295,7 @@ public class AddCoodeService {
orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag());
orderService.insertOrder(orderEntity);
addOrderRequest.setBillNo(orderNo);
} else
orderEntity = isExit;
} else orderEntity = isExit;
try {
// 创建异步任务
List<CompletableFuture<VailCodeResultResponse>> futures = udiEntityMap.entrySet().stream().map(entry -> {
@ -324,7 +325,7 @@ public class AddCoodeService {
udiEntity.setSerialNo(addOrderRequest.getSerialNo());
}
// 处理药品追溯码
BaseResponse baseResponse = addDrugOrder(addOrderRequest, udiEntity, code, groupNumber, bussinessTypeEntity, udiRelevanceMap.get(udiEntity.getUdi()), authAdmin, invWarehouseEntity);
BaseResponse baseResponse = addDrugOrder(addOrderRequest, udiEntity, code, groupNumber, bussinessTypeEntity, udiRelevanceMap.get(udiEntity.getUdi()), authAdmin, invWarehouseEntity, collectSet);
// 处理结果
if (baseResponse.getCode() == 20000) {
resultResponse.setStatus(1);
@ -378,7 +379,7 @@ public class AddCoodeService {
/**
*
*/
public BaseResponse addDrugOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code, Integer groupNumber, BasicBussinessTypeEntity bussinessTypeEntity, UdiRelevanceResponse udiRelevanceResponse, AuthAdmin authAdmin, InvWarehouseEntity invWarehouseEntity) {
public BaseResponse addDrugOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code, Integer groupNumber, BasicBussinessTypeEntity bussinessTypeEntity, UdiRelevanceResponse udiRelevanceResponse, AuthAdmin authAdmin, InvWarehouseEntity invWarehouseEntity, IoCollectSet collectSet) {
AddCodeResult addCodeResult = new AddCodeResult();
// 检查码是否空
@ -386,7 +387,7 @@ public class AddCoodeService {
return ResultVOUtils.error(500, "无效条码");
}
if (IntUtil.value(udiRelevanceResponse.getNotCodeType()) != 0 && (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT) || bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN))) {
if (IntUtil.value(collectSet.getNoCodeScan()) && IntUtil.value(udiRelevanceResponse.getNotCodeType()) != 0 && (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT) || bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN))) {
return ResultVOUtils.error(500, "当前为无码类型产品,无需扫码!");
}
@ -630,7 +631,7 @@ public class AddCoodeService {
}
if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_OUT)) {
//工位上货 只允许上货一个产品 开关以及控制
IoCollectSet collectSet = collectSetService.getSet();
// IoCollectSet collectSet = collectSetService.getSet();
// 判断货位里面是否有相同产品
if (orderEntity != null && StrUtil.isNotEmpty(orderEntity.getWorkPlaceQueueCode())) {
SysWorkplace sysWorkplace = sysWorkplaceService.getOne(new LambdaQueryWrapper<SysWorkplace>().eq(SysWorkplace::getWorkplaceId, addOrderRequest.getWorkPlaceCode()));
@ -775,8 +776,7 @@ public class AddCoodeService {
}
// 按照关联ID和批次号分组码实体
Map<String, List<IoCodeTempEntity>> groupedTempEntities = codeTempEntities.stream()
.collect(Collectors.groupingBy(entity -> entity.getRelId() + ":" + StrUtil.trimToEmpty(entity.getBatchNo())));
Map<String, List<IoCodeTempEntity>> groupedTempEntities = codeTempEntities.stream().collect(Collectors.groupingBy(entity -> entity.getRelId() + ":" + StrUtil.trimToEmpty(entity.getBatchNo())));
// 使用synchronized块来保护关键部分
// 获取当前订单的所有明细码
@ -788,21 +788,14 @@ public class AddCoodeService {
}
IoCodeTempEntity representative = group.get(0);
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectSupGroupById(
representative.getRelId(),
representative.getSupId());
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectSupGroupById(representative.getRelId(), representative.getSupId());
// 计算该组的总数量
int totalCount = group.stream().mapToInt(IoCodeTempEntity::getMyCount).sum();
int totalReCount = group.stream().mapToInt(IoCodeTempEntity::getMyReCount).sum();
// 在数据库层面使用悲观锁或乐观锁查询现有记录
IoOrderDetailCodeEntity existingEntity = orderDetailCodeDao.selectOne(
new QueryWrapper<IoOrderDetailCodeEntity>()
.eq("orderIdFk", orderEntity.getBillNo())
.eq("bindRlFk", representative.getRelId())
.eq(StrUtil.isNotEmpty(representative.getBatchNo()), "batchNo", representative.getBatchNo())
.last("limit 1 FOR UPDATE")); // 添加行级锁
IoOrderDetailCodeEntity existingEntity = orderDetailCodeDao.selectOne(new QueryWrapper<IoOrderDetailCodeEntity>().eq("orderIdFk", orderEntity.getBillNo()).eq("bindRlFk", representative.getRelId()).eq(StrUtil.isNotEmpty(representative.getBatchNo()), "batchNo", representative.getBatchNo()).last("limit 1 FOR UPDATE")); // 添加行级锁
IoOrderDetailCodeEntity resultDetailEntity;
if (existingEntity != null) {
@ -834,10 +827,7 @@ public class AddCoodeService {
}
// 返回最新的明细码列表
return orderDetailCodeDao.selectList(
new QueryWrapper<IoOrderDetailCodeEntity>()
.select("id", "count", "reCount", "bindRlFk", "batchNo", "price")
.eq("orderIdFk", orderEntity.getBillNo()));
return orderDetailCodeDao.selectList(new QueryWrapper<IoOrderDetailCodeEntity>().select("id", "count", "reCount", "bindRlFk", "batchNo", "price").eq("orderIdFk", orderEntity.getBillNo()));
}
public Integer getMaxGroupNumber() {

@ -5598,6 +5598,10 @@ CALL Pro_Temp_ColumnWork('io_collect_set', 'conflictReturn',
'tinyint NULL DEFAULT NULL COMMENT ''是否启用退货扫码冲突替换10''',
1);
CALL Pro_Temp_ColumnWork('io_collect_set', 'noCodeScan',
'tinyint NULL DEFAULT NULL COMMENT ''无码类型是否允许上货10''',
1);
CREATE TABLE IF NOT EXISTS `yb_uploading_log` (
`id` int NOT NULL AUTO_INCREMENT,

Loading…
Cancel
Save