修复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 Integer getEquipmentByLocation(String Location);
public Integer getDepthByLocation(String Location);
}

View File

@ -34,4 +34,19 @@ public class TAppWcsTaskServiceImpl extends ServiceImpl<AppWcsTaskMapper, TAppWc
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")
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 ITAppOrderInService appOrderInService;
private final ITAppOrderOutService appOrderOutService;
/**
* 业务通用
*/
@ -423,7 +425,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
vehicle.setVehicleType("1");
vehicle.setLocationId(location);
vehicle.setLastInTime(LocalDateTime.now());
appVehicleService.save(vehicle);
appVehicleService.saveOrUpdate(vehicle);
// 保存库存信息
newStockList = new ArrayList<TAppStock>(stockMap.values());
if (!stockMap.isEmpty()) {
@ -679,6 +681,45 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
.eq(TAppTask::getVehicleId, vehicleId));
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>()
.set(TAppLocation::getIsOccupy, WmsLocationOccupyStatusEnums.EMPTY.getCode())
@ -693,8 +734,18 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
// 更新当前载具对应的所有库存的状态为已出库
appStockService.remove(new LambdaUpdateWrapper<TAppStock>()
.eq(TAppStock::getVehicleId, vehicleId));
// 当前载具的任务列表
List<TAppWcsTask> thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId);
// List<String> orderIds = thisVehicleOutTasks.stream()
// .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()) {
// 存储出库记录
List<TAppWcsTaskBak> stockOutRecordList = thisVehicleOutTasks.stream()
@ -719,5 +770,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
.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<>();
for (TAppStock stockItem : outStockList) {
TAppTask appTask = new TAppTask();
appTask.setTaskId(UUIDUtils.getNewUUID());
appTask.setTaskType(WmsTaskTypeEnums.OUT.getCode());
appTask.setTaskStatus(WmsStackerTaskStatusEnums.WAIT.getCode());
appTask.setTaskPriority(1);
appTask.setVehicleId(stockItem.getVehicleId());
appTask.setOrigin(stockItem.getLocationId());
appTask.setDestination(stockItem.getBarCode());
appTask.setGoodsId(stockItem.getGoodsId());
appTask.setBatch(stockItem.getBatch());
appTask.setCreateTime(LocalDateTime.now());
appTask.setOpNum(stockItem.getRealNum());
appTask.setStockNum(0);
appTask.setOpUser("wms_order_out");
appTask.setBatch(orderOut.getBatch());
appTask.setCallStand(stockItem.getBarCode());
appTaskList.add(appTask);
}
// List<TAppTask> appTaskList = new ArrayList<>();
// for (TAppStock stockItem : outStockList) {
// TAppTask appTask = new TAppTask();
// appTask.setTaskId(UUIDUtils.getNewUUID());
// appTask.setTaskType(WmsTaskTypeEnums.OUT.getCode());
// appTask.setTaskStatus(WmsStackerTaskStatusEnums.WAIT.getCode());
// appTask.setTaskPriority(1);
// appTask.setVehicleId(stockItem.getVehicleId());
// appTask.setOrigin(stockItem.getLocationId());
// appTask.setDestination(stockItem.getBarCode());
// appTask.setGoodsId(stockItem.getGoodsId());
// appTask.setBatch(stockItem.getBatch());
// appTask.setCreateTime(LocalDateTime.now());
// appTask.setOpNum(stockItem.getRealNum());
// appTask.setStockNum(0);
// appTask.setOpUser("wms_order_out");
// appTask.setBatch(orderOut.getBatch());
// appTask.setCallStand(stockItem.getBarCode());
// appTaskList.add(appTask);
// }
List<TAppWcsTask> wcsTasks = new ArrayList<>();
for (TAppStock stockItem : outStockList) {
TAppWcsTask wcsTask = new TAppWcsTask();
@ -129,6 +129,7 @@ public class OutsExecutor implements Job {
wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode());
wcsTask.setTaskPriority(1);
wcsTask.setVehicleId(stockItem.getVehicleId());
wcsTask.setOrderId(orderOut.getOrderId());
wcsTask.setCreateTime(LocalDateTime.now());
wcsTask.setOrigin(stockItem.getLocationId());
wcsTask.setDestination(stockItem.getBarCode());
@ -137,7 +138,7 @@ public class OutsExecutor implements Job {
orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode());
orderOutService.updateById(orderOut);
taskService.saveBatch(appTaskList);
// taskService.saveBatch(appTaskList);
wcsTaskService.saveBatch(wcsTasks);
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.WmsStackerTaskStatusEnums;
import com.wms_main.constant.enums.wms.WmsStockStatusEnums;
import com.wms_main.dao.ITAppOrderOutService;
import com.wms_main.dao.ITAppStockService;
import com.wms_main.dao.ITAppTaskService;
import com.wms_main.dao.ITAppWcsTaskService;
import com.wms_main.constant.enums.wms.WmsVehicleStatusEnums;
import com.wms_main.dao.*;
import com.wms_main.model.bo.wcs.WcsStackerTask;
import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest;
import com.wms_main.model.dto.response.wcs.WcsApiResponse;
@ -54,6 +52,8 @@ public class WcsStackerTaskSender implements Job {
*/
private final IStackerTaskService stackerTaskService;
private final ITAppVehicleService appVehicleService;
/**
* 运行定时任务
* 向Wcs发送堆垛机任务
@ -69,9 +69,8 @@ public class WcsStackerTaskSender implements Job {
for (TAppWcsTask wcsTask : appWcsTasks) {
String locationId = wcsTask.getOrigin();
String[] str_lst = locationId.split("-");
int depth = Integer.parseInt(str_lst[str_lst.length - 1]);
int row = Integer.parseInt(str_lst[0].replace("A", ""));
int equipmentId = Math.round((float) (row + 1) / 2);
Integer equipmentId = appWcsTaskService.getEquipmentByLocation(locationId);
Integer depth = appWcsTaskService.getDepthByLocation(locationId);
// 深度1, 直接出库
if (depth == 1) {
WcsStackerTaskRequest request = new WcsStackerTaskRequest();
@ -148,6 +147,11 @@ public class WcsStackerTaskSender implements Job {
.eq(TAppStock::getLocationId, locationId)
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())
.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) {
log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination());