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.JSONObject;
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.service.IschBaseTaskService;
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.StIvtIostorinvdis;
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.OutBussManageService;
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.instor.service.HandMoveStorService;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,6 +41,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -99,6 +104,9 @@ public class OutBussManageServiceImpl implements OutBussManageService {
@Autowired
private TwoInBussManageService twoInBussManageService;
@Autowired
private RedissonClient redissonClient;
@Override
@Transactional
public void lockStruct(List<String> param, JSONObject json) {
@@ -256,6 +264,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
/**
* 准备插入分配明细的参数
*
* @param likeBoxList 相同木箱的库存
* @param dtlDao 明细对象
* @return List<StIvtIostorinvdis> 分配明细对象集合
@@ -503,7 +512,12 @@ public class OutBussManageServiceImpl implements OutBussManageService {
}
@Override
@SneakyThrows
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");
//物料表
@@ -526,10 +540,19 @@ public class OutBussManageServiceImpl implements OutBussManageService {
JSONObject json = list.get(i);
myService.createForMove(json, subList, materList);
}
} else {
throw new BadRequestException("有单据正在分配中,请稍后在试");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
/**
* 移库事务处理
*
* @param json 移库仓位个体
* @param subList 子卷包装关系集合
* @param materList 物料集合
@@ -832,6 +855,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
/**
* 异常出库转库任务
*
* @param jsonObject {task_code : 任务编码}
* @return JSONObject 仓位对象
*/
@@ -927,6 +951,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
/**
* 正常出库转库任务
*
* @param jsonObject {task_code : 任务编码}
* @return JSONObject 仓位对象
*/