wms-serve-mule/src/main/java/com/wms/bussiness/TaskOperation.java

304 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.wms.bussiness;
import com.wms.constants.enums.LocationStatus;
import com.wms.constants.enums.StockStatus;
import com.wms.constants.enums.TaskType;
import com.wms.constants.enums.WmsTaskStatus;
import com.wms.entity.table.Location;
import com.wms.entity.table.Stock;
import com.wms.entity.table.Task;
import com.wms.mapper.LocationMapper;
import com.wms.mapper.StockMapper;
import com.wms.mapper.TaskMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.swing.plaf.synth.Region;
import java.util.Date;
import java.util.List;
/**
* 对任务的操作
*/
@Slf4j
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TaskOperation {
/**
* 库存 Mapper
*/
private final StockMapper stockMapper;
/**
* 任务表操作类
*/
private final TaskMapper taskMapper;
/**
* 库位表操作类
*/
private final LocationMapper locationMapper;
//region 完成任务
/**
* 完成任务
* @param task 要完成的任务
* @return 操作结果
*/
public boolean completeTask(Task task) {
if(task == null) {
return false;
}
TaskType taskType = TaskType.getTaskType(task.getTaskType());
if(taskType == null) {
return false;
}
/* 根据任务类型判断 */
return switch (taskType) {
case IN -> completeInTask(task);
case OUT -> completeOutTask(task);
case INVENTORY -> completeInventoryTask(task);
case MOVE -> completeMoveTask(task);
};
}
/**
* 完成入库任务
* @param task 要完成的入库任务
* @return 结果
*/
private boolean completeInTask(Task task) {
/* 将任务更新为完成,将库存更新为正常库存,将库位更新为占用 */
// 更新任务状态
Task updateTask = new Task();
updateTask.setTaskId(task.getTaskId());
updateTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
updateTask.setFinishTime(new Date());
int updateRow = taskMapper.executeTask(updateTask);
if(updateRow != 1) {
log.warn(String.format("完成入库任务更新任务状态失败,任务号:%s", task.getTaskId()));
return false;
}
// 更新库存状态
Stock stockQuery = new Stock();
stockQuery.setLocationId(task.getDestination());
List<Stock> stocks = stockMapper.selStocks(stockQuery);
if(stocks == null) {
log.warn(String.format("完成入库任务查询库存 查询数据库失败,任务号:%s", task.getTaskId()));
return false;
}
if(stocks.isEmpty()) {
log.warn(String.format("完成入库任务查询库存没有库存数据,任务号:%s", task.getTaskId()));
return false;
}
for(Stock stock : stocks) {
Stock updateStock = new Stock();
updateStock.setStockId(stock.getStockId());
updateStock.setStockStatus(StockStatus.OK.getCode());
updateStock.setLastUpdateTime(new Date());
updateStock.setCreateTime(new Date());
int updateStockResult = stockMapper.modifyStock(updateStock);
if(updateStockResult != 1) {
log.warn(String.format("完成入库任务更新库存状态失败,任务号:%s , 库存号:%s", task.getTaskId(), stock.getStockId()));
}
}
return true;
}
/**
* 完成出库任务
* @param task 要完成的出库任务
* @return 执行结果
*/
private boolean completeOutTask(Task task) {
/* 将任务更新为完成,删除库存,将库位释放 */
// 更新任务状态
Task updateTask = new Task();
updateTask.setTaskId(task.getTaskId());
updateTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
updateTask.setFinishTime(new Date());
int updateRow = taskMapper.executeTask(updateTask);
if(updateRow != 1) {
log.warn(String.format("完成出库任务更新任务状态失败,任务号:%s", task.getTaskId()));
return false;
}
// 删除库存
Stock stockQuery = new Stock();
stockQuery.setLocationId(task.getDestination());
List<Stock> stocks = stockMapper.selStocks(stockQuery);
if(stocks == null) {
log.warn(String.format("完成出库任务查询库存 查询数据库失败,任务号:%s", task.getTaskId()));
return false;
}
if(stocks.isEmpty()) {
log.warn(String.format("完成出库任务查询库存没有库存数据,任务号:%s", task.getTaskId()));
return false;
}
for(Stock stock : stocks) {
int deleteStockResult = stockMapper.deleteStock(stock.getStockId());
if(deleteStockResult != 1) {
log.warn(String.format("完成出库任务删除库存状态失败,任务号:%s , 库存号:%s", task.getTaskId(), stock.getStockId()));
}
}
// 释放库位
Location location = new Location();
location.setLocationId(task.getDestination());
location.setLocationStatus(LocationStatus.EMPTY.getCode());
locationMapper.modifyLocation(location);
return true;
}
private boolean completeInventoryTask(Task task) {
return true;
}
private boolean completeMoveTask(Task task) {
/* 将任务更新为完成;更新库存状态;更新库位状态 */
Task updateTask = new Task();
updateTask.setTaskId(task.getTaskId());
updateTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
updateTask.setFinishTime(new Date());
int updateRow = taskMapper.executeTask(updateTask);
if(updateRow != 1) {
log.warn(String.format("完成移库任务更新任务状态失败,任务号:%s", task.getTaskId()));
return false;
}
// 更新库存
int updateLocationResult = stockMapper.updateLocationAndStatus(task.getOrigin(), task.getDestination(), StockStatus.OK.getCode());
if(updateLocationResult < 1) {
log.warn(String.format("完成移库任务更新库存状态失败,任务号:%s ,原库位:%s新库位%s", task.getTaskId(), task.getOrigin(), task.getDestination()));
return false;
}
// 释放原库位
Location location = new Location();
location.setLocationId(task.getOrigin());
location.setLocationStatus(LocationStatus.EMPTY.getCode());
locationMapper.modifyLocation(location);
return true;
}
//endregion
//region 取消任务
/**
* 取消任务
* @param task 要完成的任务
* @return 操作结果
*/
public boolean cancelTask(Task task) {
if(task == null) {
return false;
}
TaskType taskType = TaskType.getTaskType(task.getTaskType());
if(taskType == null) {
return false;
}
/* 根据任务类型判断 */
return switch (taskType) {
case IN -> cancelInTask(task);
case OUT -> cancelOutTask(task);
case INVENTORY -> cancelInventoryTask(task);
case MOVE -> cancelMoveTask(task);
};
}
/**
* 取消入库任务
* @param task 要取消的入库任务
* @return 结果
*/
private boolean cancelInTask(Task task) {
/* 将任务更新为取消,将库存删除,将库位更新为空闲 */
// 更新任务状态
Task updateTask = new Task();
updateTask.setTaskId(task.getTaskId());
updateTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
updateTask.setFinishTime(new Date());
int updateRow = taskMapper.executeTask(updateTask);
if(updateRow != 1) {
log.warn(String.format("取消入库任务更新任务状态失败,任务号:%s", task.getTaskId()));
return false;
}
// 删除库存
int deleteResult = stockMapper.deleteStockWithLocationId(task.getDestination());
if(deleteResult < 1) {
log.warn(String.format("取消入库删除库存失败,任务号:%s入库点位%s -> %s", task.getTaskId(), task.getOrigin(), task.getDestination()));
}
// 释放库位
Location location = new Location();
location.setLocationId(task.getDestination());
location.setLocationStatus(LocationStatus.EMPTY.getCode());
locationMapper.modifyLocation(location);
return true;
}
/**
* 取消出库任务
* @param task 要取消的出库任务
* @return 执行结果
*/
private boolean cancelOutTask(Task task) {
/* 将任务更新为取消,将库存更新为库存中 */
// 更新任务状态
Task updateTask = new Task();
updateTask.setTaskId(task.getTaskId());
updateTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
updateTask.setFinishTime(new Date());
int updateRow = taskMapper.executeTask(updateTask);
if(updateRow != 1) {
log.warn(String.format("取消出库任务更新任务状态失败,任务号:%s", task.getTaskId()));
return false;
}
// 更新库存信息为库存中
int updateResult = stockMapper.updateStockStatusWithLocationId(task.getOrigin(), StockStatus.OK.getCode());
if(updateResult < 1) {
log.warn(String.format("取消出库任务更新库存状态失败,任务号:%s出库点位%s -> %s", task.getTaskId(), task.getOrigin(), task.getDestination()));
}
return true;
}
private boolean cancelInventoryTask(Task task) {
return true;
}
private boolean cancelMoveTask(Task task) {
/* 将任务更新为取消;更新库存状态为正常;释放终点库位 */
Task updateTask = new Task();
updateTask.setTaskId(task.getTaskId());
updateTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
updateTask.setFinishTime(new Date());
int updateRow = taskMapper.executeTask(updateTask);
if(updateRow != 1) {
log.warn(String.format("完成移库任务更新任务状态失败,任务号:%s", task.getTaskId()));
return false;
}
// 更新库存信息为库存中
int updateResult = stockMapper.updateStockStatusWithLocationId(task.getOrigin(), StockStatus.OK.getCode());
if(updateResult < 1) {
log.warn(String.format("取消出库任务更新库存状态失败,任务号:%s出库点位%s -> %s", task.getTaskId(), task.getOrigin(), task.getDestination()));
}
// 释放新库位
Location location = new Location();
location.setLocationId(task.getDestination());
location.setLocationStatus(LocationStatus.EMPTY.getCode());
locationMapper.modifyLocation(location);
return true;
}
//endregion
}