no message
parent
ee6370447c
commit
25c53502b5
|
|
@ -8,19 +8,11 @@ import jakarta.servlet.http.HttpServletRequest;
|
|||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.cpte.modules.base.entity.Stock;
|
||||
import org.cpte.modules.constant.GeneralConstant;
|
||||
import org.cpte.modules.receive.entity.Asn;
|
||||
import org.cpte.modules.receive.entity.AsnDetail;
|
||||
import org.cpte.modules.receive.service.processor.ReceiveBackProcessor;
|
||||
import org.cpte.modules.serialNumber.PickSerialNumberRule;
|
||||
import org.cpte.modules.shipping.entity.Task;
|
||||
import org.cpte.modules.shipping.mapper.TaskMapper;
|
||||
import org.cpte.modules.shipping.service.ITaskService;
|
||||
import org.cpte.modules.shipping.service.processor.PickBackProcessor;
|
||||
import org.cpte.modules.shipping.service.processor.PickProcessor;
|
||||
import org.cpte.modules.shipping.vo.PickData;
|
||||
import org.jeecg.common.system.query.QueryRuleEnum;
|
||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
||||
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
||||
|
|
|
|||
|
|
@ -842,34 +842,43 @@ public class AllocateProcessor {
|
|||
* @param createToTask 创建的拣货任务集合
|
||||
* @param data 数据
|
||||
*/
|
||||
private final Object taskCreationLock = new Object();
|
||||
private void createPickTask(PickDetail pickDetail, Pick pick, Item item,
|
||||
Inventory inventory, InventoryScore inventoryScore, BigDecimal allocateQty,
|
||||
List<Task> createToTask, AllocationData data) {
|
||||
synchronized (taskCreationLock) {
|
||||
String lockKey = "lock:createTask" + pickDetail.getId() + "_" + inventory.getId();
|
||||
String lockValue = null;
|
||||
try {
|
||||
lockValue = redissonLock.tryLock(lockKey, 10);
|
||||
if (StringUtils.isEmpty(lockValue)) {
|
||||
return; // 直接返回,不重复创建
|
||||
}
|
||||
Stock stock = data.getStockMap().get(inventory.getStockId());
|
||||
|
||||
Point fromPoint = data.getPointMap().get(inventory.getPointId());
|
||||
|
||||
// 判断是否整托分配
|
||||
BigDecimal availableQty = BigDecimalUtil.subtract(inventory.getQuantity(), inventory.getQueuedQty(), 0);
|
||||
Integer izAll = availableQty.compareTo(BigDecimal.ZERO) <= 0 ? 0 : 1;
|
||||
|
||||
// 目标库位
|
||||
//Point toPoint = inventoryScore.getOutPoint();
|
||||
|
||||
// 构建拣货任务
|
||||
String taskNo = String.format("%s_%d", pick.getNo(), pickDetail.getLineNo());
|
||||
Task task = taskService.bulidTask(
|
||||
taskNo, TaskTypeEnum.PICK.getValue(), item, fromPoint, null,
|
||||
stock, pick.getId(), pickDetail.getId(), inventory.getItemKeyId(), inventory.getId(),
|
||||
allocateQty, izAll, null);
|
||||
|
||||
if (task != null) {
|
||||
createToTask.add(task);
|
||||
log.info("生成拣货任务: {}- 容器:{} - 库位:{} - 类型:{}- 分配数量:{}",
|
||||
task.getTaskNo(), stock.getStockCode(),
|
||||
fromPoint.getPointCode(), izAll, allocateQty);
|
||||
boolean isDuplicate = createToTask.stream()
|
||||
.anyMatch(t -> t.getPickDetailId().equals(pickDetail.getId())
|
||||
&& t.getInventoryId().equals(inventory.getId()));
|
||||
if (!isDuplicate) {
|
||||
createToTask.add(task);
|
||||
log.info("生成拣货任务: {}- 容器:{} - 库位:{} - 分配数量:{}",
|
||||
task.getTaskNo(), stock.getStockCode(), fromPoint.getPointCode(), allocateQty);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("生成拣货任务失败", e);
|
||||
throw e;
|
||||
} finally {
|
||||
if (StringUtils.isNotEmpty(lockValue)) {
|
||||
redissonLock.unlock(lockKey, lockValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -928,8 +937,8 @@ public class AllocateProcessor {
|
|||
if (CollectionUtils.isNotEmpty(movePoints)) {
|
||||
Set<Long> toPointIds = createToTask.stream().map(Task::getFromPointId).collect(Collectors.toSet());
|
||||
movePoints = movePoints.stream().filter(point -> !toPointIds.contains(point.getId())).toList();
|
||||
if(CollectionUtils.isNotEmpty(movePoints)){
|
||||
List<Task> moveToTask = buildMoveTask(currOutPointCode, movePoints,processedStock);
|
||||
if (CollectionUtils.isNotEmpty(movePoints)) {
|
||||
List<Task> moveToTask = buildMoveTask(currOutPointCode, movePoints, processedStock);
|
||||
if (CollectionUtils.isNotEmpty(moveToTask)) {
|
||||
createToTask.addAll(moveToTask);
|
||||
}
|
||||
|
|
@ -946,8 +955,8 @@ public class AllocateProcessor {
|
|||
* @param movePoints 移位库位
|
||||
* @return 移位任务
|
||||
*/
|
||||
public List<Task> buildMoveTask(String currOutPointCode, List<Point> movePoints,Set<Long> processedStock) {
|
||||
if(CollectionUtils.isEmpty(movePoints)){
|
||||
public List<Task> buildMoveTask(String currOutPointCode, List<Point> movePoints, Set<Long> processedStock) {
|
||||
if (CollectionUtils.isEmpty(movePoints)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<Task> moveList = new ArrayList<>();
|
||||
|
|
|
|||
Loading…
Reference in New Issue