fix:获取移库单对应的移入货位时,加上并发锁

This commit is contained in:
zhouz
2025-08-19 17:52:36 +08:00
parent 8e7eb4fd05
commit ad4ff02d40

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.SneakyThrows;
import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
@@ -16,6 +17,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlServi
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvServiceImpl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.TwoInBussManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.TwoInBussManageService;
@@ -29,6 +31,8 @@ import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.inbill.service.StorPublicService;
import org.nl.wms.st.instor.service.HandMoveStorService; import org.nl.wms.st.instor.service.HandMoveStorService;
import org.nl.wms.st.instor.task.HandMoveStorAcsTask; import org.nl.wms.st.instor.task.HandMoveStorAcsTask;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -37,6 +41,7 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -99,6 +104,9 @@ public class OutBussManageServiceImpl implements OutBussManageService {
@Autowired @Autowired
private TwoInBussManageService twoInBussManageService; private TwoInBussManageService twoInBussManageService;
@Autowired
private RedissonClient redissonClient;
@Override @Override
@Transactional @Transactional
public void lockStruct(List<String> param, JSONObject json) { public void lockStruct(List<String> param, JSONObject json) {
@@ -256,6 +264,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
/** /**
* 准备插入分配明细的参数 * 准备插入分配明细的参数
*
* @param likeBoxList 相同木箱的库存 * @param likeBoxList 相同木箱的库存
* @param dtlDao 明细对象 * @param dtlDao 明细对象
* @return List<StIvtIostorinvdis> 分配明细对象集合 * @return List<StIvtIostorinvdis> 分配明细对象集合
@@ -503,7 +512,12 @@ public class OutBussManageServiceImpl implements OutBussManageService {
} }
@Override @Override
@SneakyThrows
public void createMove2(List<JSONObject> list) { public void createMove2(List<JSONObject> list) {
RLock lock = redissonClient.getLock(StIvtIostorinvServiceImpl.class.getName());
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
//子卷包装关系表 //子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
//物料表 //物料表
@@ -526,10 +540,19 @@ public class OutBussManageServiceImpl implements OutBussManageService {
JSONObject json = list.get(i); JSONObject json = list.get(i);
myService.createForMove(json, subList, materList); myService.createForMove(json, subList, materList);
} }
} else {
throw new BadRequestException("有单据正在分配中,请稍后在试");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
} }
/** /**
* 移库事务处理 * 移库事务处理
*
* @param json 移库仓位个体 * @param json 移库仓位个体
* @param subList 子卷包装关系集合 * @param subList 子卷包装关系集合
* @param materList 物料集合 * @param materList 物料集合
@@ -832,6 +855,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
/** /**
* 异常出库转库任务 * 异常出库转库任务
*
* @param jsonObject {task_code : 任务编码} * @param jsonObject {task_code : 任务编码}
* @return JSONObject 仓位对象 * @return JSONObject 仓位对象
*/ */
@@ -927,6 +951,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
/** /**
* 正常出库转库任务 * 正常出库转库任务
*
* @param jsonObject {task_code : 任务编码} * @param jsonObject {task_code : 任务编码}
* @return JSONObject 仓位对象 * @return JSONObject 仓位对象
*/ */