304 lines
11 KiB
Java
304 lines
11 KiB
Java
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
|
||
|
||
|
||
|
||
|
||
}
|