@ -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 ( ) {