修复bug:

1. 出库任务执行完成后出库单未删除
2. 给出库单类添加orderId字段
3. 修复根据locationId获取错误的equipmentId
4. 修复移库后载具的位置未更新
5. 修复入库任务载具号重复, 修改为saveOrUpdate
6. 删除TAppTask表记录的创建与更新相关代码
This commit is contained in:
李宇奇 2025-04-01 13:35:51 +08:00
parent 2b51c599ef
commit 86d1172952
6 changed files with 111 additions and 31 deletions

View File

@ -12,4 +12,7 @@ public interface ITAppWcsTaskService extends IService<TAppWcsTask> {
public Boolean existsTaskWithLocation(String Location); public Boolean existsTaskWithLocation(String Location);
public Integer getEquipmentByLocation(String Location);
public Integer getDepthByLocation(String Location);
} }

View File

@ -34,4 +34,19 @@ public class TAppWcsTaskServiceImpl extends ServiceImpl<AppWcsTaskMapper, TAppWc
return null; return null;
} }
} }
@Override
public Integer getEquipmentByLocation(String locationId) {
String[] str_lst = locationId.split("-");
int depth = Integer.parseInt(str_lst[str_lst.length - 1]);
int row = Integer.parseInt(str_lst[0].replace("A", ""));
return (int) Math.floor((double) (row + 1) / 2);
}
@Override
public Integer getDepthByLocation(String locationId) {
String[] str_lst = locationId.split("-");
int depth = Integer.parseInt(str_lst[str_lst.length - 1]);
return depth;
}
} }

View File

@ -42,6 +42,11 @@ public class TAppWcsTask {
*/ */
@TableField(value = "vehicle_id") @TableField(value = "vehicle_id")
private String vehicleId; private String vehicleId;
/**
* 订单号
*/
@TableField(value = "order_id")
private String orderId;
/** /**
* 起点 * 起点
*/ */

View File

@ -67,6 +67,8 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
private final ITAppEquipmentService appEquipmentService; private final ITAppEquipmentService appEquipmentService;
private final ITAppOrderInService appOrderInService; private final ITAppOrderInService appOrderInService;
private final ITAppOrderOutService appOrderOutService;
/** /**
* 业务通用 * 业务通用
*/ */
@ -423,7 +425,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
vehicle.setVehicleType("1"); vehicle.setVehicleType("1");
vehicle.setLocationId(location); vehicle.setLocationId(location);
vehicle.setLastInTime(LocalDateTime.now()); vehicle.setLastInTime(LocalDateTime.now());
appVehicleService.save(vehicle); appVehicleService.saveOrUpdate(vehicle);
// 保存库存信息 // 保存库存信息
newStockList = new ArrayList<TAppStock>(stockMap.values()); newStockList = new ArrayList<TAppStock>(stockMap.values());
if (!stockMap.isEmpty()) { if (!stockMap.isEmpty()) {
@ -679,6 +681,45 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
.eq(TAppTask::getVehicleId, vehicleId)); .eq(TAppTask::getVehicleId, vehicleId));
continue; continue;
} }
// 当前载具的任务列表
List<TAppWcsTask> thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId);
for (TAppWcsTask outTask : thisVehicleOutTasks) {
String orderId = outTask.getOrderId();
if (StringUtils.isEmpty(orderId)) {
continue;
}
// 查询订单信息
TAppOrderOut order = appOrderOutService.getOne(
new LambdaQueryWrapper<TAppOrderOut>()
.eq(TAppOrderOut::getOrderId, orderId)
);
if (order == null) {
log.warn("订单{}不存在,无法更新数量", orderId);
continue;
}
// 获取订单的商品属性
String goodsId = order.getGoodsId();
String batch = order.getBatch();
int specification = order.getSpecification();
// 筛选匹配的库存并计算总数量
int totalQty = appStockService.list(new LambdaQueryWrapper<TAppStock>().eq(TAppStock::getVehicleId, vehicleId)).stream()
.filter(stock ->
goodsId.equals(stock.getGoodsId()) && batch.equals(stock.getBatch()) && specification == stock.getSled())
.mapToInt(TAppStock::getTotalNum)
.sum();
if (totalQty > 0) {
int newQuantity = order.getQuantity() - totalQty;
// 更新订单数量
appOrderOutService.update(
new LambdaUpdateWrapper<TAppOrderOut>()
.eq(TAppOrderOut::getOrderId, orderId)
.set(TAppOrderOut::getQuantity, newQuantity)
);
}
}
// 释放当前库位 // 释放当前库位
appLocationService.update(new LambdaUpdateWrapper<TAppLocation>() appLocationService.update(new LambdaUpdateWrapper<TAppLocation>()
.set(TAppLocation::getIsOccupy, WmsLocationOccupyStatusEnums.EMPTY.getCode()) .set(TAppLocation::getIsOccupy, WmsLocationOccupyStatusEnums.EMPTY.getCode())
@ -693,8 +734,18 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
// 更新当前载具对应的所有库存的状态为已出库 // 更新当前载具对应的所有库存的状态为已出库
appStockService.remove(new LambdaUpdateWrapper<TAppStock>() appStockService.remove(new LambdaUpdateWrapper<TAppStock>()
.eq(TAppStock::getVehicleId, vehicleId)); .eq(TAppStock::getVehicleId, vehicleId));
// 当前载具的任务列表 // List<String> orderIds = thisVehicleOutTasks.stream()
List<TAppWcsTask> thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId); // .map(TAppWcsTask::getOrderId)
// .filter(Objects::nonNull)
// .distinct()
// .collect(Collectors.toList());
//
// List<TAppOrderOut> thisVehicleOutOrders = orderIds.isEmpty() ?
// Collections.emptyList() :
// appOrderOutService.list(
// new LambdaQueryWrapper<TAppOrderOut>()
// .in(TAppOrderOut::getOrderId, orderIds)
// );
if (!thisVehicleOutTasks.isEmpty()) { if (!thisVehicleOutTasks.isEmpty()) {
// 存储出库记录 // 存储出库记录
List<TAppWcsTaskBak> stockOutRecordList = thisVehicleOutTasks.stream() List<TAppWcsTaskBak> stockOutRecordList = thisVehicleOutTasks.stream()
@ -719,5 +770,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
.in(TAppWcsTask::getWcsTaskId, thisVehicleOutTasks.stream().map(TAppWcsTask::getWcsTaskId).toList())); .in(TAppWcsTask::getWcsTaskId, thisVehicleOutTasks.stream().map(TAppWcsTask::getWcsTaskId).toList()));
} }
} }
appOrderOutService.remove(new LambdaUpdateWrapper<TAppOrderOut>().le(TAppOrderOut::getQuantity, 0));
} }
} }

View File

@ -101,26 +101,26 @@ public class OutsExecutor implements Job {
} }
} }
List<TAppTask> appTaskList = new ArrayList<>(); // List<TAppTask> appTaskList = new ArrayList<>();
for (TAppStock stockItem : outStockList) { // for (TAppStock stockItem : outStockList) {
TAppTask appTask = new TAppTask(); // TAppTask appTask = new TAppTask();
appTask.setTaskId(UUIDUtils.getNewUUID()); // appTask.setTaskId(UUIDUtils.getNewUUID());
appTask.setTaskType(WmsTaskTypeEnums.OUT.getCode()); // appTask.setTaskType(WmsTaskTypeEnums.OUT.getCode());
appTask.setTaskStatus(WmsStackerTaskStatusEnums.WAIT.getCode()); // appTask.setTaskStatus(WmsStackerTaskStatusEnums.WAIT.getCode());
appTask.setTaskPriority(1); // appTask.setTaskPriority(1);
appTask.setVehicleId(stockItem.getVehicleId()); // appTask.setVehicleId(stockItem.getVehicleId());
appTask.setOrigin(stockItem.getLocationId()); // appTask.setOrigin(stockItem.getLocationId());
appTask.setDestination(stockItem.getBarCode()); // appTask.setDestination(stockItem.getBarCode());
appTask.setGoodsId(stockItem.getGoodsId()); // appTask.setGoodsId(stockItem.getGoodsId());
appTask.setBatch(stockItem.getBatch()); // appTask.setBatch(stockItem.getBatch());
appTask.setCreateTime(LocalDateTime.now()); // appTask.setCreateTime(LocalDateTime.now());
appTask.setOpNum(stockItem.getRealNum()); // appTask.setOpNum(stockItem.getRealNum());
appTask.setStockNum(0); // appTask.setStockNum(0);
appTask.setOpUser("wms_order_out"); // appTask.setOpUser("wms_order_out");
appTask.setBatch(orderOut.getBatch()); // appTask.setBatch(orderOut.getBatch());
appTask.setCallStand(stockItem.getBarCode()); // appTask.setCallStand(stockItem.getBarCode());
appTaskList.add(appTask); // appTaskList.add(appTask);
} // }
List<TAppWcsTask> wcsTasks = new ArrayList<>(); List<TAppWcsTask> wcsTasks = new ArrayList<>();
for (TAppStock stockItem : outStockList) { for (TAppStock stockItem : outStockList) {
TAppWcsTask wcsTask = new TAppWcsTask(); TAppWcsTask wcsTask = new TAppWcsTask();
@ -129,6 +129,7 @@ public class OutsExecutor implements Job {
wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode()); wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode());
wcsTask.setTaskPriority(1); wcsTask.setTaskPriority(1);
wcsTask.setVehicleId(stockItem.getVehicleId()); wcsTask.setVehicleId(stockItem.getVehicleId());
wcsTask.setOrderId(orderOut.getOrderId());
wcsTask.setCreateTime(LocalDateTime.now()); wcsTask.setCreateTime(LocalDateTime.now());
wcsTask.setOrigin(stockItem.getLocationId()); wcsTask.setOrigin(stockItem.getLocationId());
wcsTask.setDestination(stockItem.getBarCode()); wcsTask.setDestination(stockItem.getBarCode());
@ -137,7 +138,7 @@ public class OutsExecutor implements Job {
orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode()); orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode());
orderOutService.updateById(orderOut); orderOutService.updateById(orderOut);
taskService.saveBatch(appTaskList); // taskService.saveBatch(appTaskList);
wcsTaskService.saveBatch(wcsTasks); wcsTaskService.saveBatch(wcsTasks);
stockService.updateBatchById(outStockList); stockService.updateBatchById(outStockList);
} }

View File

@ -8,10 +8,8 @@ import com.wms_main.constant.enums.wcs.WcsStackerTaskTypeEnums;
import com.wms_main.constant.enums.wms.OrderStatusEnum; import com.wms_main.constant.enums.wms.OrderStatusEnum;
import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums; import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums;
import com.wms_main.constant.enums.wms.WmsStockStatusEnums; import com.wms_main.constant.enums.wms.WmsStockStatusEnums;
import com.wms_main.dao.ITAppOrderOutService; import com.wms_main.constant.enums.wms.WmsVehicleStatusEnums;
import com.wms_main.dao.ITAppStockService; import com.wms_main.dao.*;
import com.wms_main.dao.ITAppTaskService;
import com.wms_main.dao.ITAppWcsTaskService;
import com.wms_main.model.bo.wcs.WcsStackerTask; import com.wms_main.model.bo.wcs.WcsStackerTask;
import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest; import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest;
import com.wms_main.model.dto.response.wcs.WcsApiResponse; import com.wms_main.model.dto.response.wcs.WcsApiResponse;
@ -54,6 +52,8 @@ public class WcsStackerTaskSender implements Job {
*/ */
private final IStackerTaskService stackerTaskService; private final IStackerTaskService stackerTaskService;
private final ITAppVehicleService appVehicleService;
/** /**
* 运行定时任务 * 运行定时任务
* 向Wcs发送堆垛机任务 * 向Wcs发送堆垛机任务
@ -69,9 +69,8 @@ public class WcsStackerTaskSender implements Job {
for (TAppWcsTask wcsTask : appWcsTasks) { for (TAppWcsTask wcsTask : appWcsTasks) {
String locationId = wcsTask.getOrigin(); String locationId = wcsTask.getOrigin();
String[] str_lst = locationId.split("-"); String[] str_lst = locationId.split("-");
int depth = Integer.parseInt(str_lst[str_lst.length - 1]); Integer equipmentId = appWcsTaskService.getEquipmentByLocation(locationId);
int row = Integer.parseInt(str_lst[0].replace("A", "")); Integer depth = appWcsTaskService.getDepthByLocation(locationId);
int equipmentId = Math.round((float) (row + 1) / 2);
// 深度1, 直接出库 // 深度1, 直接出库
if (depth == 1) { if (depth == 1) {
WcsStackerTaskRequest request = new WcsStackerTaskRequest(); WcsStackerTaskRequest request = new WcsStackerTaskRequest();
@ -148,6 +147,11 @@ public class WcsStackerTaskSender implements Job {
.eq(TAppStock::getLocationId, locationId) .eq(TAppStock::getLocationId, locationId)
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode()) .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())
.set(TAppStock::getLocationId, preLocation.getLocationId())); .set(TAppStock::getLocationId, preLocation.getLocationId()));
appVehicleService.update(
new LambdaUpdateWrapper<TAppVehicle>()
.eq(TAppVehicle::getLocationId, locationId)
.eq(TAppVehicle::getVehicleStatus, WmsVehicleStatusEnums.ON.getCode())
.set(TAppVehicle::getLocationId, preLocation.getLocationId()));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination()); log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination());