无码类型上货控制

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

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

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

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

Loading…
Cancel
Save