rev:改切、报废出库自动分配变更为手动分配

This commit is contained in:
2025-02-20 18:25:01 +08:00
parent 02f390f91a
commit adcbee19c1
4 changed files with 542 additions and 467 deletions

View File

@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.SneakyThrows;
import org.nl.b_lms.pdm_manage.enums.SUBEnum;
import org.nl.b_lms.sch.tasks.TwoExcepionalMoveTask;
import org.nl.b_lms.sch.tasks.TwoOutExceptionalTask;
import org.nl.b_lms.sch.tasks.TwoOutTask;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
@@ -42,12 +44,15 @@ import org.nl.wms.basedata.st.service.dto.StorattrDto;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.util.TranUtil;
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;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collector;
@@ -130,6 +135,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Autowired
private TwoInBussManageService twoInBussManageService;
@Autowired
private RedissonClient redissonClient;
@Override
@Transactional
public String insertMst(JSONObject whereJson) {
@@ -211,6 +219,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Override
@Transactional
@SneakyThrows
public void allDiv(JSONObject whereJson) {
/*
* 分配规则:
@@ -267,6 +276,10 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
throw new BadRequestException("库存不足!");
}
RLock lock = redissonClient.getLock("all_divTwo");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
// 用于插入分配明细的集合
List<StIvtIostorinvdis> disDaoList = new ArrayList<>();
@@ -299,7 +312,14 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 更新主表状态
updateMstStatus(mstDao.getIostorinv_id());
} else {
throw new BadRequestException("其他出库单当前正在分配货位,请等待几秒再进行操作!");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
@Override
@@ -402,6 +422,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public void cancelDiv(JSONObject whereJson) {
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
@@ -415,6 +436,11 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* 删除分配明细:查询此明细下的相同木箱的分配明细
*/
// 判断是什么类型 全部取消-0,自动取消-1,删除分配明细-3
RLock lock = redissonClient.getLock("all_cancelDivTwo");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
List<JSONObject> disList;
JSONObject jsonDisParam = new JSONObject();
@@ -565,6 +591,16 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonLockParam.put("operate", IOSEnum.IO_TYPE.code("出库"));
outBussManageService.lockStruct(paramLockList,jsonLockParam);
} else {
throw new BadRequestException("其他出库单当前正在取消分配,请等待几秒再进行操作!");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
@Override

View File

@@ -197,6 +197,7 @@ public class ProductScrapServiceImpl implements ProductScrapService {
jo_mst.put("update_optid", currentUserId + "");
jo_mst.put("update_optname", nickName);
jo_mst.put("update_time", now);
//更新主表
wo_mst.update(jo_mst);
}
@@ -271,7 +272,8 @@ public class ProductScrapServiceImpl implements ProductScrapService {
String iostorinv_id = checkOutBillService.insertDtl(jsonOutMst);
JSONObject jsonObject = new JSONObject();
jsonObject.put("iostorinv_id", iostorinv_id);
checkOutBillService.allDiv(jsonObject);
// 变更为手动分配
// checkOutBillService.allDiv(jsonObject);
// 更新主表为完成
JSONObject param = new JSONObject();

View File

@@ -287,7 +287,8 @@ public class RecutPlanServiceImpl implements RecutPlanService {
JSONObject out_jo = new JSONObject();
out_jo.put("iostorinv_id", iostorinv_id);
out_jo.put("div_type", "1");
iStIvtIostorinvOutService.allDiv(out_jo);
// 改为手动分配
// iStIvtIostorinvOutService.allDiv(out_jo);
} else {
jsonMst.put("tableData", dtls);
String iostorinv_id = checkOutBillService.insertDtl(jsonMst);
@@ -295,7 +296,8 @@ public class RecutPlanServiceImpl implements RecutPlanService {
//调用自动分配
JSONObject out_jo = new JSONObject();
out_jo.put("iostorinv_id", iostorinv_id);
checkOutBillService.allDiv(out_jo);
// 改为手动分配
// checkOutBillService.allDiv(out_jo);
}
} else {

View File

@@ -15,6 +15,7 @@ import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
@@ -39,6 +40,8 @@ import org.nl.wms.st.outbill.util.ThreadManage;
import org.nl.wms.st.returns.service.InAndOutReturnService;
import org.nl.wms.st.returns.service.impl.InAndOutRetrunServiceImpl;
import org.nl.wms.util.TranUtil;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +53,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -67,6 +71,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
private final OutTask outTask;
private final HandMoveStorAcsTask moveStorAcsTask;
private final InAndOutReturnService inAndOutReturnService;
private final RedissonClient redissonClient;
@Override
public Map<String, Object> pageQuery(Map whereJson, Pageable page, String[] stor_id, String[] bill_status, String[] bill_type) {
@@ -1521,6 +1526,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public void allDiv(JSONObject whereJson) {
//出库分配表
WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis");
@@ -1531,8 +1537,6 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
//库区表
WQLObject wo_sect = WQLObject.getWQLObject("st_ivt_sectattr");
//定义需要更新的仓位集合
HashMap<String, JSONObject> Struct_map = new HashMap<String, JSONObject>();
String iostorinv_id = whereJson.getString("iostorinv_id");
//查询主表信息
JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0);
@@ -1568,6 +1572,13 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
throw new BadRequestException("当前订单无可分配出库明细");
}
RLock lock = redissonClient.getLock("all_divOne");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
//定义需要更新的仓位集合
HashMap<String, JSONObject> Struct_map = new HashMap<String, JSONObject>();
for (int i = 0; i < dtls.size(); i++) {
JSONObject dtl = dtls.getJSONObject(i);
double unassign_qty = dtl.getDoubleValue("unassign_qty");
@@ -1783,6 +1794,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
storPublicService.updateStructAndPoint(from_start);
}
}
} else {
throw new BadRequestException("其他出库单当前正在分配货位,请等待几秒再进行操作!");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
@Override
@@ -2384,6 +2403,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public void allCancel(JSONObject whereJson) {
//出库分配表
WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis");
@@ -2415,6 +2435,12 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
if (ObjectUtil.isEmpty(diss)) {
throw new BadRequestException("不存在可以取消的出库分配明细");
}
RLock lock = redissonClient.getLock("all_cancelDivOne");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
for (int i = 0; i < diss.size(); i++) {
JSONObject dis = diss.getJSONObject(i);
HashMap<String, String> map = new HashMap<>();
@@ -2523,6 +2549,15 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
}*/
}
}
} else {
throw new BadRequestException("其他出库单当前正在取消分配,请等待几秒再进行操作!");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}