亚驰出版提交
This commit is contained in:
parent
144d22cb6f
commit
2b51c599ef
|
|
@ -23,7 +23,4 @@ public class WcsController {
|
|||
public WcsApiResponse<InTaskResp> requireInTask(@RequestBody WcsVehicleInRequest request) {
|
||||
return wcsControllerService.requireInTask(request);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,9 +44,4 @@ public class YcwmsController {
|
|||
public YcwmsResponse<List<StockResp>> stock(@RequestBody StockReq request) {
|
||||
return ycwmsControllerService.stock(request);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package com.wms_main.model.dto.query;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class OrderInQuery {
|
||||
@JsonProperty("vehicleNo")
|
||||
private String vehicleNo;
|
||||
|
||||
@JsonProperty("vehicleSize")
|
||||
private String vehicleSize;
|
||||
|
||||
@JsonProperty("inStand")
|
||||
private String inStand;
|
||||
|
||||
@JsonProperty("orderStatus")
|
||||
private Integer orderStatus;
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package com.wms_main.model.dto.request.wms;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class OrderInGoodsDetail {
|
||||
@JsonProperty("goodsId")
|
||||
String goodsId;
|
||||
|
||||
@JsonProperty("goodsName")
|
||||
private String goodsName;
|
||||
|
||||
@JsonProperty("batch")
|
||||
private String batch;
|
||||
|
||||
@JsonProperty("goodsType")
|
||||
private String goodsType;
|
||||
|
||||
@JsonProperty("specification")
|
||||
private Integer specification;
|
||||
|
||||
@JsonProperty("quantity")
|
||||
private Integer quantity;
|
||||
|
||||
@JsonProperty("goodsDesc")
|
||||
private String goodsDesc;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.wms_main.model.dto.request.wms;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class OrderInRequest {
|
||||
@JsonProperty("vehicleNo")
|
||||
private String vehicleNo;
|
||||
|
||||
@JsonProperty("vehicleSize")
|
||||
private String vehicleSize;
|
||||
|
||||
@JsonProperty("inStand")
|
||||
private String inStand;
|
||||
|
||||
@JsonProperty("goodsDetail")
|
||||
private List<OrderInGoodsDetail> goodsDetail;
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.wms_main.model.dto.request.wms;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class OrderOutRequest {
|
||||
@JsonProperty("goodsId")
|
||||
private String goodsId;
|
||||
|
||||
@JsonProperty("batch")
|
||||
private String batch;
|
||||
|
||||
@JsonProperty("specification")
|
||||
private Integer specification;
|
||||
|
||||
@JsonProperty("quantity")
|
||||
private Integer quantity;
|
||||
}
|
||||
|
|
@ -44,5 +44,5 @@ public interface IStackerTaskService {
|
|||
* 完成堆垛机出库任务
|
||||
* @param stackerOutTasks 已完成的出库任务
|
||||
*/
|
||||
void finishStackerOutTasks(List<TAppTask> stackerOutTasks);
|
||||
void finishStackerOutTasks(List<TAppWcsTask> stackerOutTasks);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.wms_main.app.AppCommon;
|
||||
import com.wms_main.constant.AppConstant;
|
||||
import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums;
|
||||
import com.wms_main.constant.enums.wcs.WcsStackerTaskTypeEnums;
|
||||
import com.wms_main.constant.enums.wms.*;
|
||||
import com.wms_main.dao.*;
|
||||
import com.wms_main.model.po.*;
|
||||
|
|
@ -53,6 +55,8 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
* 任务记录服务
|
||||
*/
|
||||
private final ITAppTaskBakService appTaskBakService;
|
||||
|
||||
private final ITAppWcsTaskBakService appWcsTaskBakService;
|
||||
/**
|
||||
* 拣选任务服务
|
||||
*/
|
||||
|
|
@ -361,34 +365,44 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
}
|
||||
String location = thisOrderInList.getFirst().getDestination();
|
||||
// 新的库存信息
|
||||
List<TAppStock> newStockList = new ArrayList<>();
|
||||
List<TAppStock> newStockList = null;
|
||||
// 需要删除的任务id
|
||||
List<String> needDeleteOrderIns = new ArrayList<>();
|
||||
Map<String, TAppStock> stockMap = new HashMap<>();
|
||||
for (TAppOrderIn thisOrderIn : thisOrderInList) {
|
||||
// 删除任务
|
||||
needDeleteOrderIns.add(thisOrderIn.getRecordId());
|
||||
// 添加库存
|
||||
TAppStock newStock = new TAppStock();
|
||||
newStock.setStockId(UUIDUtils.getNewUUID());
|
||||
newStock.setVehicleId(vehicleId);
|
||||
newStock.setLocationId(thisOrderIn.getInStand());
|
||||
newStock.setStockStatus(WmsStockStatusEnums.OK.getCode());
|
||||
newStock.setGoodsId(thisOrderIn.getGoodsId());
|
||||
newStock.setGoodsStatus(WmsGoodsStatusEnums.OK.getCode());
|
||||
newStock.setFirstInTime(thisOrderIn.getCreateTime());
|
||||
newStock.setFirstInUser("WMS");
|
||||
newStock.setLastUpdateTime(LocalDateTime.now());
|
||||
newStock.setLastUpdateUser("WMS");
|
||||
newStock.setTotalNum(thisOrderIn.getQuantity());
|
||||
newStock.setRemainNum(thisOrderIn.getQuantity());
|
||||
newStock.setRealNum(thisOrderIn.getQuantity());
|
||||
newStock.setGoodsDesc(thisOrderIn.getGoodsDesc());
|
||||
newStock.setExpireDate(LocalDateTime.MAX.toLocalDate());
|
||||
newStock.setSled(thisOrderIn.getSpecification());
|
||||
newStock.setMesId(thisOrderIn.getOrderId());
|
||||
newStock.setBatch(thisOrderIn.getBatch());
|
||||
newStock.setGoodsType(thisOrderIn.getGoodsType());
|
||||
newStockList.add(newStock);
|
||||
String validateStr = thisOrderIn.getGoodsId() + thisOrderIn.getBatch() + thisOrderIn.getGoodsType() + thisOrderIn.getSpecification();
|
||||
if (!stockMap.containsKey(validateStr)) {
|
||||
TAppStock newStock = new TAppStock();
|
||||
newStock.setStockId(UUIDUtils.getNewUUID());
|
||||
newStock.setVehicleId(vehicleId);
|
||||
newStock.setLocationId(thisOrderIn.getDestination());
|
||||
newStock.setStockStatus(WmsStockStatusEnums.OK.getCode());
|
||||
newStock.setGoodsId(thisOrderIn.getGoodsId());
|
||||
newStock.setGoodsStatus(WmsGoodsStatusEnums.OK.getCode());
|
||||
newStock.setFirstInTime(thisOrderIn.getCreateTime());
|
||||
newStock.setFirstInUser("WMS");
|
||||
newStock.setLastUpdateTime(LocalDateTime.now());
|
||||
newStock.setLastUpdateUser("WMS");
|
||||
newStock.setTotalNum(thisOrderIn.getQuantity());
|
||||
newStock.setRemainNum(thisOrderIn.getQuantity());
|
||||
newStock.setRealNum(thisOrderIn.getQuantity());
|
||||
newStock.setGoodsDesc(thisOrderIn.getGoodsDesc());
|
||||
newStock.setSled(thisOrderIn.getSpecification());
|
||||
newStock.setMesId(thisOrderIn.getOrderId());
|
||||
newStock.setBatch(thisOrderIn.getBatch());
|
||||
newStock.setGoodsType(thisOrderIn.getGoodsType());
|
||||
newStock.setBarCode(thisOrderIn.getInStand());
|
||||
// newStockList.add(newStock);
|
||||
stockMap.put(validateStr, newStock);
|
||||
} else {
|
||||
TAppStock newStock = stockMap.get(validateStr);
|
||||
newStock.setTotalNum(newStock.getTotalNum() + thisOrderIn.getQuantity());
|
||||
newStock.setRemainNum(newStock.getRemainNum() + thisOrderIn.getQuantity());
|
||||
newStock.setRealNum(newStock.getRealNum() + thisOrderIn.getQuantity());
|
||||
}
|
||||
}
|
||||
// 将目标库位的工作状态设置为未工作
|
||||
appLocationService.update(new LambdaUpdateWrapper<TAppLocation>()
|
||||
|
|
@ -400,8 +414,19 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
.set(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())
|
||||
.set(TAppStock::getLocationId, location)
|
||||
.eq(TAppStock::getVehicleId, vehicleId));
|
||||
// 保存载具表
|
||||
TAppVehicle vehicle = new TAppVehicle();
|
||||
vehicle.setVehicleId(vehicleId);
|
||||
vehicle.setIsEmpty(0);
|
||||
vehicle.setVehicleStatus(WmsVehicleStatusEnums.ON.getCode());
|
||||
vehicle.setIsLock(0);
|
||||
vehicle.setVehicleType("1");
|
||||
vehicle.setLocationId(location);
|
||||
vehicle.setLastInTime(LocalDateTime.now());
|
||||
appVehicleService.save(vehicle);
|
||||
// 保存库存信息
|
||||
if (!newStockList.isEmpty()) {
|
||||
newStockList = new ArrayList<TAppStock>(stockMap.values());
|
||||
if (!stockMap.isEmpty()) {
|
||||
appStockService.saveOrUpdateBatch(newStockList);
|
||||
}
|
||||
// 删除已经完成的入库单
|
||||
|
|
@ -628,7 +653,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishStackerOutTasks(List<TAppTask> stackerOutTasks) {
|
||||
public void finishStackerOutTasks(List<TAppWcsTask> stackerOutTasks) {
|
||||
// 出库完成需要完成以下事情:
|
||||
// 1. 更新库存状态
|
||||
// 2. 更新载具状态
|
||||
|
|
@ -636,9 +661,9 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
// 4. 释放当前载具的拣选任务列表
|
||||
// 5. 添加出库记录
|
||||
// 根据载具号map一下
|
||||
Map<String, List<TAppTask>> vehicleIdToTaskMap = stackerOutTasks.stream()
|
||||
.filter(outTask -> Objects.equals(outTask.getTaskType(), WmsTaskTypeEnums.OUT.getCode()) && Objects.equals(outTask.getTaskStatus(), WmsStackerTaskStatusEnums.FINISH.getCode()))
|
||||
.collect(Collectors.groupingBy(TAppTask::getVehicleId));
|
||||
Map<String, List<TAppWcsTask>> vehicleIdToTaskMap = stackerOutTasks.stream()
|
||||
.filter(outTask -> Objects.equals(outTask.getWcsTaskType(), WcsStackerTaskTypeEnums.OUT.getCode()) && Objects.equals(outTask.getWcsTaskStatus(), WcsStackerTaskStatusEnums.FINISH.getCode()))
|
||||
.collect(Collectors.groupingBy(TAppWcsTask::getVehicleId));
|
||||
for (String vehicleId : vehicleIdToTaskMap.keySet()) {
|
||||
// 查询当前载具的数据
|
||||
TAppVehicle thisVehicle = appVehicleService.getOne(new LambdaQueryWrapper<TAppVehicle>()
|
||||
|
|
@ -666,47 +691,32 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
thisVehicle.setLocationId("");
|
||||
appVehicleService.updateById(thisVehicle);
|
||||
// 更新当前载具对应的所有库存的状态为已出库
|
||||
appStockService.update(new LambdaUpdateWrapper<TAppStock>()
|
||||
.set(TAppStock::getStockStatus, WmsStockStatusEnums.OUTED.getCode())
|
||||
.set(TAppStock::getLocationId, "")
|
||||
appStockService.remove(new LambdaUpdateWrapper<TAppStock>()
|
||||
.eq(TAppStock::getVehicleId, vehicleId));
|
||||
// 释放当前载具对应的拣选任务
|
||||
appPickTaskService.update(new LambdaUpdateWrapper<TAppPickTask>()
|
||||
.set(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.WAIT.getCode())
|
||||
.eq(TAppPickTask::getVehicleId, vehicleId)
|
||||
.eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.TEMP.getCode()));
|
||||
// 当前载具的任务列表
|
||||
List<TAppTask> thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId);
|
||||
List<TAppWcsTask> thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId);
|
||||
if (!thisVehicleOutTasks.isEmpty()) {
|
||||
// 存储出库记录
|
||||
List<TAppTaskBak> stockOutRecordList = thisVehicleOutTasks.stream()
|
||||
.map(outTask -> new TAppTaskBak(
|
||||
outTask.getTaskId(),
|
||||
outTask.getTaskType(),
|
||||
outTask.getTaskStatus(),
|
||||
List<TAppWcsTaskBak> stockOutRecordList = thisVehicleOutTasks.stream()
|
||||
.map(outTask -> new TAppWcsTaskBak(
|
||||
outTask.getWcsTaskId(),
|
||||
outTask.getWcsTaskStatus(),
|
||||
outTask.getWcsTaskType(),
|
||||
outTask.getTaskPriority(),
|
||||
outTask.getVehicleId(),
|
||||
outTask.getOrigin(),
|
||||
outTask.getDestination(),
|
||||
outTask.getWcsTaskId(),
|
||||
outTask.getCreateTime(),
|
||||
outTask.getSendTime(),
|
||||
outTask.getFinishTime(),
|
||||
outTask.getGoodsId(),
|
||||
outTask.getOpNum(),
|
||||
outTask.getStockNum(),
|
||||
outTask.getOpUser(),
|
||||
outTask.getRemark(),
|
||||
outTask.getCallStand(),
|
||||
"",
|
||||
outTask.getBarCode(),
|
||||
outTask.getMesId()
|
||||
outTask.getRemark()
|
||||
)).toList();
|
||||
appTaskBakService.saveBatch(stockOutRecordList);
|
||||
appWcsTaskBakService.saveBatch(stockOutRecordList);
|
||||
// 删除当前载具所对应的出库任务
|
||||
appTaskService.remove(new LambdaQueryWrapper<TAppTask>()
|
||||
.eq(TAppTask::getVehicleId, vehicleId)
|
||||
.eq(TAppTask::getTaskType, WmsTaskTypeEnums.OUT.getCode())
|
||||
.in(TAppTask::getTaskId, thisVehicleOutTasks.stream().map(TAppTask::getTaskId).toList()));
|
||||
appWcsTaskService.remove(new LambdaQueryWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getVehicleId, vehicleId)
|
||||
.eq(TAppWcsTask::getWcsTaskType, WcsStackerTaskTypeEnums.OUT.getCode())
|
||||
.in(TAppWcsTask::getWcsTaskId, thisVehicleOutTasks.stream().map(TAppWcsTask::getWcsTaskId).toList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -341,7 +341,7 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
|||
return BaseWcsApiResponse.error("反馈的任务状态值无效。");
|
||||
}
|
||||
// 判断反馈的任务状态是否是「已完成」
|
||||
if (Objects.equals(wcsTaskResultRequest.getTaskStatus(), WcsStackerTaskStatusEnums.FINISH.getCode())) {
|
||||
if (Objects.equals(wcsTaskResultRequest.getTaskStatus(), WcsStackerTaskStatusEnums.FINISH.getCode()) && Objects.equals(wcsTask.getWcsTaskType(), WcsStackerTaskTypeEnums.IN.getCode())) {
|
||||
// 更新wms任务状态
|
||||
appWmsTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppTask>()
|
||||
|
|
@ -366,7 +366,7 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
|||
);
|
||||
appWcsTaskService.removeById(wcsTask.getWcsTaskId());
|
||||
appWcsTaskBakService.save(wcsTaskBak);
|
||||
} else {
|
||||
} else if (Objects.equals(wcsTaskResultRequest.getTaskStatus(), WcsStackerTaskStatusEnums.FINISH.getCode()) && Objects.equals(wcsTask.getWcsTaskType(), WcsStackerTaskTypeEnums.OUT.getCode())){
|
||||
// 更新wms任务状态
|
||||
appWmsTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppTask>()
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
|
|||
|
||||
@Override
|
||||
public YcwmsResponse<Object> orderIn(OrderInReq request) {
|
||||
log.info("亚驰入库单请求参数{}", JSON.toJSON(request));
|
||||
log.info("入库单请求参数{}", JSON.toJSON(request));
|
||||
if(request == null) return YcwmsResponse.error("参数错误", null);
|
||||
if(StringUtils.isEmpty(request.getOrderId()) || StringUtils.isEmpty(request.getClientId())
|
||||
|| StringUtils.isEmpty(request.getVehicleNo()) || StringUtils.isEmpty(request.getVehicleSize())
|
||||
|
|
@ -112,6 +112,7 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
|
|||
public YcwmsResponse<List<StockResp>> stock(StockReq request) {
|
||||
log.info("亚驰库存请求参数{}", JSON.toJSON(request));
|
||||
if(request == null) return YcwmsResponse.error("参数错误", null);
|
||||
// stocks: 请求库存的当前库存
|
||||
List<TAppStock> stocks = null;
|
||||
if(request.empty()) {
|
||||
stocks = appStockService.list();
|
||||
|
|
@ -127,9 +128,13 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService {
|
|||
return YcwmsResponse.error("数据服务异常,请稍后重试", null);
|
||||
}
|
||||
List<StockResp> respList = new ArrayList<>();
|
||||
// locations: 当前库存的对应库位
|
||||
List<String> locations = stocks.stream().map(TAppStock::getLocationId).distinct().toList();
|
||||
// 检查每个库存的库位location
|
||||
for (var location : locations) {
|
||||
// 库存反馈
|
||||
StockResp stockResp = new StockResp();
|
||||
// 查询location库位上当前有多少库存locationStocks
|
||||
List<TAppStock> locationStocks = stocks.stream().filter(stock -> stock.getLocationId().equals(location)).toList();
|
||||
if(locationStocks.isEmpty()) {
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -11,13 +11,12 @@ import org.quartz.*;
|
|||
@PersistJobDataAfterExecution
|
||||
@DisallowConcurrentExecution
|
||||
@RequiredArgsConstructor
|
||||
public class DataSolver implements Job {
|
||||
public class DataSolver {
|
||||
/**
|
||||
* 运行定时任务
|
||||
*
|
||||
* @param jobExecutionContext 定时任务执行的环境(上下文)
|
||||
*/
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
// 获取定时配置信息
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,19 @@
|
|||
package com.wms_main.service.quartz_job.job_executor;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums;
|
||||
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.constant.enums.wms.WmsTaskTypeEnums;
|
||||
import com.wms_main.dao.ITAppOrderOutService;
|
||||
import com.wms_main.dao.ITAppStockService;
|
||||
import com.wms_main.model.po.TAppOrderOut;
|
||||
import com.wms_main.model.po.TAppStock;
|
||||
import com.wms_main.dao.ITAppTaskService;
|
||||
import com.wms_main.dao.ITAppWcsTaskService;
|
||||
import com.wms_main.model.po.*;
|
||||
import com.wms_main.repository.utils.StringUtils;
|
||||
import com.wms_main.repository.utils.UUIDUtils;
|
||||
import com.wms_main.service.quartz_job.IOutsExecutorService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
|
@ -14,7 +22,12 @@ import org.quartz.Job;
|
|||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.PersistJobDataAfterExecution;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 定时任务定义类---出库单解析类
|
||||
|
|
@ -28,6 +41,8 @@ public class OutsExecutor implements Job {
|
|||
|
||||
private final ITAppOrderOutService orderOutService;
|
||||
private final ITAppStockService stockService;
|
||||
private final ITAppTaskService taskService;
|
||||
private final ITAppWcsTaskService wcsTaskService;
|
||||
|
||||
/**
|
||||
* 运行定时任务
|
||||
|
|
@ -62,21 +77,69 @@ public class OutsExecutor implements Job {
|
|||
stock.setBatch(orderOut.getBatch());
|
||||
stock.setSled(orderOut.getSpecification());
|
||||
List<TAppStock> stockList = stockService.getWithEntity(stock);
|
||||
if(stockList == null || stockList.isEmpty()) {
|
||||
// 提取所有相关库存的载具号
|
||||
List<String> vehicleIds = stockList.stream().map(TAppStock::getVehicleId).toList();
|
||||
List<TAppStock> outStockList = new ArrayList<TAppStock>();
|
||||
if(vehicleIds.isEmpty()) {
|
||||
log.warn("缺少库存, goodsId is {}, batch is {}, specification is {}", orderOut.getGoodsId(), orderOut.getBatch(), orderOut.getSpecification());
|
||||
continue;
|
||||
}
|
||||
for(TAppStock stockItem : stockList) {
|
||||
|
||||
|
||||
|
||||
|
||||
for (String vehicleId : vehicleIds) {
|
||||
List<TAppStock> stockListToOut = stockService.list(new LambdaQueryWrapper<TAppStock>().eq(TAppStock::getVehicleId, vehicleId));
|
||||
for (TAppStock stockItem : stockListToOut) {
|
||||
if (needQuantity <= 0) break;
|
||||
if (stockItem == null) {
|
||||
continue;
|
||||
}
|
||||
if (stockItem.getGoodsId().equals(orderOut.getGoodsId()) && stockItem.getStockStatus().equals(WmsStockStatusEnums.OK.getCode())) {
|
||||
needQuantity -= stockItem.getRemainNum();
|
||||
}
|
||||
stockItem.setStockStatus(WmsStockStatusEnums.OUTING.getCode());
|
||||
stockItem.setRemainNum(0);
|
||||
stockItem.setRealNum(0);
|
||||
outStockList.add(stockItem);
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
wcsTask.setWcsTaskId(UUIDUtils.getNewUUID());
|
||||
wcsTask.setWcsTaskType(WmsTaskTypeEnums.OUT.getCode());
|
||||
wcsTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.INIT.getCode());
|
||||
wcsTask.setTaskPriority(1);
|
||||
wcsTask.setVehicleId(stockItem.getVehicleId());
|
||||
wcsTask.setCreateTime(LocalDateTime.now());
|
||||
wcsTask.setOrigin(stockItem.getLocationId());
|
||||
wcsTask.setDestination(stockItem.getBarCode());
|
||||
wcsTasks.add(wcsTask);
|
||||
}
|
||||
|
||||
|
||||
|
||||
orderOut.setOrderStatus(OrderStatusEnum.RUNNING.getCode());
|
||||
orderOutService.updateById(orderOut);
|
||||
taskService.saveBatch(appTaskList);
|
||||
wcsTaskService.saveBatch(wcsTasks);
|
||||
stockService.updateBatchById(outStockList);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,21 +4,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.wms_main.constant.enums.wcs.WcsApiResponseCodeEnums;
|
||||
import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums;
|
||||
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.model.bo.wcs.WcsStackerTask;
|
||||
import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest;
|
||||
import com.wms_main.model.dto.response.wcs.WcsApiResponse;
|
||||
import com.wms_main.model.po.TAppTask;
|
||||
import com.wms_main.model.po.TAppWcsTask;
|
||||
import com.wms_main.model.po.*;
|
||||
import com.wms_main.repository.utils.StringUtils;
|
||||
import com.wms_main.repository.utils.UUIDUtils;
|
||||
import com.wms_main.service.api.IWcsApiService;
|
||||
import com.wms_main.service.business.IStackerTaskService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.quartz.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -34,14 +41,18 @@ public class WcsStackerTaskSender implements Job {
|
|||
* Wcs任务服务
|
||||
*/
|
||||
private final ITAppWcsTaskService appWcsTaskService;
|
||||
/**
|
||||
* Wms任务服务
|
||||
*/
|
||||
private final ITAppTaskService appTaskService;
|
||||
/**
|
||||
* Wcs接口服务
|
||||
*/
|
||||
private final IWcsApiService wcsApiService;
|
||||
/**
|
||||
* 库存服务
|
||||
*/
|
||||
private final ITAppStockService stockService;
|
||||
/**
|
||||
* 堆垛机服务
|
||||
*/
|
||||
private final IStackerTaskService stackerTaskService;
|
||||
|
||||
/**
|
||||
* 运行定时任务
|
||||
|
|
@ -51,56 +62,118 @@ public class WcsStackerTaskSender implements Job {
|
|||
*/
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
// 查询到所有的待下发的wcsTask
|
||||
List<TAppWcsTask> waitSendWcsTaskList = appWcsTaskService.list(
|
||||
List<TAppWcsTask> appWcsTasks = appWcsTaskService.list(
|
||||
new LambdaQueryWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getWcsTaskStatus, WcsStackerTaskStatusEnums.INIT.getCode())
|
||||
);
|
||||
// 发送任务
|
||||
for (TAppWcsTask wcsTask : waitSendWcsTaskList) {
|
||||
// 生成请求
|
||||
WcsStackerTaskRequest request = new WcsStackerTaskRequest(
|
||||
wcsTask.getWcsTaskId(),
|
||||
wcsTask.getWcsTaskType(),
|
||||
wcsTask.getTaskPriority(),
|
||||
wcsTask.getOrigin(),
|
||||
wcsTask.getDestination(),
|
||||
wcsTask.getVehicleId()
|
||||
);
|
||||
try {
|
||||
WcsApiResponse<WcsStackerTask> wcsResponse = wcsApiService.sendWcsStackerTask(request);
|
||||
if (wcsResponse != null && WcsApiResponseCodeEnums.SUCCESS.getCode() == wcsResponse.getCode()) {
|
||||
// 更新当前的wcs任务状态为已发送
|
||||
appWcsTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppWcsTask>()
|
||||
.set(TAppWcsTask::getWcsTaskStatus, WcsStackerTaskStatusEnums.WAIT.getCode())
|
||||
.set(TAppWcsTask::getSendTime, LocalDateTime.now())
|
||||
.eq(TAppWcsTask::getWcsTaskId, wcsTask.getWcsTaskId())
|
||||
);
|
||||
// 更新当前wcs任务对应的wms任务为已发送
|
||||
appTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppTask>()
|
||||
.set(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.SEND.getCode())
|
||||
.eq(TAppTask::getWcsTaskId, wcsTask.getWcsTaskId())
|
||||
);
|
||||
} else {
|
||||
log.error("堆垛机任务发送失败,请求{},响应信息{}。", StringUtils.objectToString(request), StringUtils.objectToString(wcsResponse));
|
||||
// 更新当前的wcs任务状态为异常
|
||||
appWcsTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppWcsTask>()
|
||||
.set(TAppWcsTask::getWcsTaskStatus, WcsStackerTaskStatusEnums.EXCEPTION.getCode())
|
||||
.set(TAppWcsTask::getSendTime, LocalDateTime.now())
|
||||
.eq(TAppWcsTask::getWcsTaskId, wcsTask.getWcsTaskId())
|
||||
);
|
||||
// 更新当前wcs任务对应的wms任务为异常
|
||||
appTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppTask>()
|
||||
.set(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.EXCEPTION.getCode())
|
||||
.eq(TAppTask::getWcsTaskId, wcsTask.getWcsTaskId())
|
||||
);
|
||||
.eq(TAppWcsTask::getWcsTaskType, WcsStackerTaskTypeEnums.OUT.getCode()));
|
||||
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);
|
||||
// 深度1, 直接出库
|
||||
if (depth == 1) {
|
||||
WcsStackerTaskRequest request = new WcsStackerTaskRequest();
|
||||
request.setTaskId(wcsTask.getWcsTaskId());
|
||||
request.setTaskType(WcsStackerTaskTypeEnums.OUT.getCode());
|
||||
request.setPriority(1);
|
||||
request.setOrigin(wcsTask.getOrigin());
|
||||
request.setDestination(wcsTask.getDestination());
|
||||
request.setVehicleNo(wcsTask.getVehicleId());
|
||||
try {
|
||||
WcsApiResponse<WcsStackerTask> wcsResponse = wcsApiService.sendWcsStackerTask(request);
|
||||
if (wcsResponse != null && WcsApiResponseCodeEnums.SUCCESS.getCode() == wcsResponse.getCode()) {
|
||||
appWcsTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getWcsTaskId, wcsTask.getWcsTaskId())
|
||||
.set(TAppWcsTask::getWcsTaskStatus, WcsStackerTaskStatusEnums.WAIT.getCode()));
|
||||
// TODO appOrderOutService?
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination());
|
||||
}
|
||||
}
|
||||
// 深度2, 考虑移库
|
||||
else {
|
||||
str_lst[str_lst.length - 1] = String.format("%02d", depth - 1);
|
||||
locationId = String.join("-", str_lst);
|
||||
// 判断浅深度有无出库任务
|
||||
List<TAppWcsTask> outTasks = appWcsTaskService.list(
|
||||
new LambdaQueryWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getOrigin, locationId)
|
||||
.eq(TAppWcsTask::getWcsTaskType, WcsStackerTaskTypeEnums.OUT.getCode()));
|
||||
if (outTasks != null && !outTasks.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
// 判断浅深度有无入库任务
|
||||
List<TAppWcsTask> inTasks = appWcsTaskService.list(
|
||||
new LambdaQueryWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getDestination, locationId)
|
||||
.eq(TAppWcsTask::getWcsTaskType, WcsStackerTaskTypeEnums.IN.getCode()));
|
||||
if (inTasks != null && !inTasks.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
// 判断浅深度有没有库存
|
||||
List<TAppStock> preStocks = stockService.list(
|
||||
new LambdaQueryWrapper<TAppStock>()
|
||||
.eq(TAppStock::getLocationId, locationId)
|
||||
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode()));
|
||||
// 若有库存
|
||||
if (preStocks != null && !preStocks.isEmpty()) {
|
||||
TAppLocation preLocation = stackerTaskService.getEmptyLocation(equipmentId, null);
|
||||
// TAppWcsTask preTask = new TAppWcsTask();
|
||||
// preTask.setWcsTaskId(UUIDUtils.getNewUUID());
|
||||
// preTask.setWcsTaskType(WcsStackerTaskTypeEnums.IN.getCode());
|
||||
// preTask.setWcsTaskStatus(WcsStackerTaskStatusEnums.WAIT.getCode());
|
||||
// preTask.setOrigin(locationId);
|
||||
// preTask.setDestination(preLocation.getLocationId());
|
||||
// preTask.setVehicleId(preLocation.getVehicleId());
|
||||
// preTask.setTaskPriority(2);
|
||||
// preTask.setCreateTime(LocalDateTime.now());
|
||||
|
||||
WcsStackerTaskRequest request = new WcsStackerTaskRequest();
|
||||
request.setTaskId(UUIDUtils.getNewUUID());
|
||||
request.setTaskType(WcsStackerTaskTypeEnums.IN.getCode());
|
||||
request.setPriority(2);
|
||||
request.setOrigin(locationId);
|
||||
request.setDestination(preLocation.getLocationId());
|
||||
request.setVehicleNo(preStocks.getFirst().getVehicleId());
|
||||
|
||||
try {
|
||||
WcsApiResponse<WcsStackerTask> wcsResponse = wcsApiService.sendWcsStackerTask(request);
|
||||
if (wcsResponse != null && WcsApiResponseCodeEnums.SUCCESS.getCode() == wcsResponse.getCode()) {
|
||||
stockService.update(
|
||||
new LambdaUpdateWrapper<TAppStock>()
|
||||
.eq(TAppStock::getLocationId, locationId)
|
||||
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())
|
||||
.set(TAppStock::getLocationId, preLocation.getLocationId()));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination());
|
||||
}
|
||||
}
|
||||
|
||||
// 若浅深度无任务, 无库存
|
||||
WcsStackerTaskRequest request = new WcsStackerTaskRequest();
|
||||
request.setTaskId(wcsTask.getWcsTaskId());
|
||||
request.setTaskType(WcsStackerTaskTypeEnums.OUT.getCode());
|
||||
request.setPriority(1);
|
||||
request.setOrigin(wcsTask.getOrigin());
|
||||
request.setDestination(wcsTask.getDestination());
|
||||
request.setVehicleNo(wcsTask.getVehicleId());
|
||||
try {
|
||||
WcsApiResponse<WcsStackerTask> wcsResponse = wcsApiService.sendWcsStackerTask(request);
|
||||
if (wcsResponse != null && WcsApiResponseCodeEnums.SUCCESS.getCode() == wcsResponse.getCode()) {
|
||||
appWcsTaskService.update(
|
||||
new LambdaUpdateWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getWcsTaskId, wcsTask.getWcsTaskId())
|
||||
.set(TAppWcsTask::getWcsTaskStatus, WcsStackerTaskStatusEnums.WAIT.getCode()));
|
||||
// TODO appOrderOutService?
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("堆垛机任务发送失败,任务号:{},载具号:{},起点:{},终点:{}。", request.getTaskId(), request.getVehicleNo(), request.getOrigin(), request.getDestination());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import java.util.stream.Collectors;
|
|||
// 以下注解用于实现fixed_delay
|
||||
@DisallowConcurrentExecution
|
||||
@RequiredArgsConstructor
|
||||
public class WmsTaskExecutor implements Job {
|
||||
public class WmsTaskExecutor {
|
||||
/**
|
||||
* Wms任务服务
|
||||
*/
|
||||
|
|
@ -48,7 +48,6 @@ public class WmsTaskExecutor implements Job {
|
|||
*
|
||||
* @param jobExecutionContext 定时任务执行的环境(上下文)
|
||||
*/
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
// 获取到所有待下发的任务
|
||||
List<TAppTask> waitSendWmsTaskList = appTaskService.list(
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
package com.wms_main.service.quartz_job.job_executor;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums;
|
||||
import com.wms_main.constant.enums.wcs.WcsStackerTaskTypeEnums;
|
||||
import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums;
|
||||
import com.wms_main.constant.enums.wms.WmsTaskTypeEnums;
|
||||
import com.wms_main.dao.ITAppOrderInService;
|
||||
import com.wms_main.dao.ITAppTaskService;
|
||||
import com.wms_main.dao.ITAppWcsTaskService;
|
||||
import com.wms_main.model.po.TAppOrderIn;
|
||||
import com.wms_main.model.po.TAppTask;
|
||||
import com.wms_main.model.po.TAppWcsTask;
|
||||
import com.wms_main.repository.utils.StringUtils;
|
||||
import com.wms_main.service.business.IStackerTaskService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
|
@ -35,6 +39,8 @@ public class WmsTaskFinisher implements Job {
|
|||
|
||||
private final ITAppOrderInService appOrderInService;
|
||||
|
||||
private final ITAppWcsTaskService appWcsTaskService;
|
||||
|
||||
/**
|
||||
* 运行定时任务
|
||||
* 完成堆垛机任务
|
||||
|
|
@ -55,12 +61,12 @@ public class WmsTaskFinisher implements Job {
|
|||
log.error("堆垛机任务完成类-入库执行异常:{}", StringUtils.objectToString(e));
|
||||
}
|
||||
// 出库
|
||||
List<TAppTask> waitFinishWmsTaskList = appTaskService.list(
|
||||
new LambdaQueryWrapper<TAppTask>()
|
||||
.eq(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.FINISH.getCode())
|
||||
List<TAppWcsTask> waitFinishWcsTaskList = appWcsTaskService.list(
|
||||
new LambdaQueryWrapper<TAppWcsTask>()
|
||||
.eq(TAppWcsTask::getWcsTaskStatus, WcsStackerTaskStatusEnums.FINISH.getCode())
|
||||
);
|
||||
List<TAppTask> stackerOutTasks = waitFinishWmsTaskList.stream()
|
||||
.filter(task -> Objects.equals(WmsTaskTypeEnums.OUT.getCode(), task.getTaskType()))
|
||||
List<TAppWcsTask> stackerOutTasks = waitFinishWcsTaskList.stream()
|
||||
.filter(task -> Objects.equals(WcsStackerTaskTypeEnums.OUT.getCode(), task.getWcsTaskType()))
|
||||
.toList();
|
||||
if (!stackerOutTasks.isEmpty()) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import axios from 'axios'
|
||||
|
||||
const request = axios.create({
|
||||
// baseURL: 'http://10.18.58.20:12315/wms',
|
||||
baseURL: 'http://localhost:12315/wms',
|
||||
timeout: 5000
|
||||
})
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const { defineConfig } = require('@vue/cli-service')
|
|||
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
|
||||
|
||||
module.exports = defineConfig({
|
||||
publicPath: '/wms',
|
||||
publicPath: '/',
|
||||
transpileDependencies: true,
|
||||
configureWebpack: {
|
||||
plugins: [new NodePolyfillPlugin()]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user