<fix>[important]完善wcs回告
This commit is contained in:
parent
6f740607da
commit
0c5613e6dc
|
|
@ -9,6 +9,7 @@ import com.wms.entity.app.container.SendContainerTaskRequest;
|
|||
import com.wms.entity.app.wcs.WcsTask;
|
||||
import com.wms.entity.table.*;
|
||||
import com.wms.mapper.LocationMapper;
|
||||
import com.wms.mapper.StockMapper;
|
||||
import com.wms.mapper.TaskMapper;
|
||||
import com.wms.service.*;
|
||||
import com.wms.utils.HttpUtils;
|
||||
|
|
@ -69,7 +70,7 @@ public class JobComponent extends BaseController {
|
|||
*/
|
||||
private final StockService stockService;
|
||||
private final TaskRecordService taskRecordService;
|
||||
|
||||
private final StockMapper stockMapper;
|
||||
|
||||
|
||||
@Scheduled(fixedDelay = 1000)
|
||||
|
|
@ -204,6 +205,13 @@ public class JobComponent extends BaseController {
|
|||
if(emptyLocationItem == null) {
|
||||
return; // 没有可用库位或者m库位存在干涉
|
||||
}
|
||||
// 锁定旧库位库存
|
||||
stockMapper.updateStockStatusWithLocationId(beforLocation.getLocationId(), StockStatus.LOCK.getCode());
|
||||
// 锁定新库位
|
||||
Location locationForUpdate = new Location();
|
||||
locationForUpdate.setLocationId(emptyLocationItem.getLocationId());
|
||||
locationForUpdate.setLocationStatus(LocationStatus.OCCUPY.getCode());
|
||||
locationMapper.modifyLocation(locationForUpdate);
|
||||
// 构造移库任务
|
||||
Task moveTask = new Task();
|
||||
moveTask.setTaskId(UUID.randomUUID().toString());
|
||||
|
|
@ -339,6 +347,13 @@ public class JobComponent extends BaseController {
|
|||
if(emptyLocationItem == null) {
|
||||
return; // 没有可用库位或者m库位存在干涉
|
||||
}
|
||||
// 锁定旧库位库存
|
||||
stockMapper.updateStockStatusWithLocationId(beforLocation.getLocationId(), StockStatus.LOCK.getCode());
|
||||
// 锁定新库位
|
||||
Location locationForUpdate = new Location();
|
||||
locationForUpdate.setLocationId(emptyLocationItem.getLocationId());
|
||||
locationForUpdate.setLocationStatus(LocationStatus.OCCUPY.getCode());
|
||||
locationMapper.modifyLocation(locationForUpdate);
|
||||
// 构造移库任务
|
||||
Task moveTask = new Task();
|
||||
moveTask.setTaskId(UUID.randomUUID().toString());
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
package com.wms.constants.enums;
|
||||
|
||||
public enum UrlEnums {
|
||||
URL_WMS_TO_WCS_SEND_TASK("WMS向WCS发送任务", "http://192.168.103.202:18990/api/Wms/WmsTask/SetStackerTask"),
|
||||
URL_WMS_TO_WCS_CHANGE_TASK("WMS请求变更任务状态", "http://192.168.103.202:18990/api/Wms/WmsTask/ChangeTaskStatus"),
|
||||
URL_WMS_TO_WCS_CONTAINER_TASK("WMS向四向车发送任务","");
|
||||
URL_WMS_TO_WCS_SEND_TASK("WMS向WCS发送任务", "http://172.21.80.151:18990/api/Wms/WmsTask/SetStackerTask"),
|
||||
URL_WMS_TO_WCS_CHANGE_TASK("WMS请求变更任务状态", "http://172.21.80.151:18990/api/Wms/WmsTask/ChangeTaskStatus"),
|
||||
URL_WMS_TO_WCS_CONTAINER_TASK("WMS向四向车发送任务","http://172.21.80.150:9991/api/Wcs/PushTask"),
|
||||
URL_WMS_TO_MES_IN("扫码上架", "");
|
||||
|
||||
private final String description;
|
||||
private final String value;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public class ContainerController extends BaseController {
|
|||
* @param request 请求信息
|
||||
* @return 返回信息
|
||||
*/
|
||||
@PostMapping("/CreateInstoreTask")
|
||||
@PostMapping("/createInstoreTask")
|
||||
public CreateInstoreTaskResponse createInstoreTask(@RequestBody @Validated CreateInstoreTaskRequest request) {
|
||||
return containerService.createInstoreTask(request);
|
||||
}
|
||||
|
|
@ -40,7 +40,7 @@ public class ContainerController extends BaseController {
|
|||
* @param request 请求信息
|
||||
* @return 响应信息
|
||||
*/
|
||||
@PostMapping("/TaskStateNotice")
|
||||
@PostMapping("/taskStateNotice")
|
||||
public ContainerApiLocalResponse taskStateNotice(@RequestBody @Validated TaskStateNoticeRequest request){
|
||||
return containerService.taskStateNotice(request);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,29 @@
|
|||
package com.wms.controller.others;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.wms.constants.enums.*;
|
||||
import com.wms.entity.app.ResponseEntity;
|
||||
import com.wms.entity.app.container.ContainerApiLocalResponse;
|
||||
import com.wms.entity.app.mes.MesApiLocalResponse;
|
||||
import com.wms.entity.app.mes.SendMesPutInGoodsRequest;
|
||||
import com.wms.entity.app.wcs.RequireInRequest;
|
||||
import com.wms.entity.app.wcs.WmsReceiveTaskResultEntity;
|
||||
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 com.wms.service.TaskService;
|
||||
import com.wms.utils.HttpUtils;
|
||||
import com.wms.utils.storage.LocationUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Isolation;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
|
|
@ -49,6 +59,16 @@ public class WcsController {
|
|||
*/
|
||||
private final LocationUtils locationUtils;
|
||||
|
||||
/**
|
||||
* 请求头部信息
|
||||
*/
|
||||
private final HttpServletRequest servletRequest;
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
private final TaskService taskService;
|
||||
|
||||
|
||||
/**
|
||||
* 立库申请入库
|
||||
|
|
@ -62,7 +82,7 @@ public class WcsController {
|
|||
checkIsExist.setBatchNo(request.getVehicleNo());
|
||||
checkIsExist.setStockStatus(StockStatus.WAIT_IN.getCode());
|
||||
List<Stock> checkIsExistListResult = stockMapper.selStocks(checkIsExist);
|
||||
if(checkIsExistListResult.isEmpty()) {
|
||||
if(checkIsExistListResult == null || checkIsExistListResult.isEmpty()) {
|
||||
// 记录不存在
|
||||
return new ResponseEntity(0, String.format("该条码不存在待入库记录,条码号:%s", request.getVehicleNo()));
|
||||
}
|
||||
|
|
@ -111,10 +131,210 @@ public class WcsController {
|
|||
task.setTaskPriority(1);
|
||||
int addTask = taskMapper.addTask(task);
|
||||
if(addTask > 0) {
|
||||
sendMesPutInGoods(checkIsExistListResult.get(0), emptyLocationItem.getLocationId()); // 发送 mes 入库上架
|
||||
return new ResponseEntity(1, "存在入库任务,申请成功");
|
||||
}
|
||||
return new ResponseEntity(0, "添加入库任务失败,网络连接异常,请稍后再试");
|
||||
}
|
||||
|
||||
private void sendMesPutInGoods(Stock stock, String locationId) {
|
||||
SendMesPutInGoodsRequest request = new SendMesPutInGoodsRequest();
|
||||
request.setGuid(stock.getStockId());
|
||||
request.setLosnr(stock.getBatchNo());
|
||||
request.setItemCode(stock.getGoodsId());
|
||||
request.setLotQty(String.valueOf(stock.getRealNum()));
|
||||
request.setBinCode(locationId);
|
||||
String requestString = JSON.toJSONString(request);
|
||||
String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_MES_IN.getValue(), requestString);
|
||||
MesApiLocalResponse result = JSON.parseObject(responseString, MesApiLocalResponse.class);
|
||||
if(result != null && result.getTransFlag().equals(1)) {
|
||||
log.info("发送MES入库上架成功,信息:{}", requestString);
|
||||
}
|
||||
log.info("发送MES入库上架失败,信息:{},返回信息:{}", requestString, responseString);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 收到 wcs 返回的任务状态
|
||||
* @param wmsReceiveTaskResultEntity wcs请求值
|
||||
* @return 返回的信息
|
||||
*/
|
||||
@PostMapping("/sendTaskResult")
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
public ResponseEntity receiveTaskResult(@RequestBody @Validated WmsReceiveTaskResultEntity wmsReceiveTaskResultEntity) {
|
||||
log.info("接收到任务反馈:{},ip地址:{}", wmsReceiveTaskResultEntity.toLoggerString(), HttpUtils.getIpAddr(servletRequest));
|
||||
// 获取任务号
|
||||
String taskId = wmsReceiveTaskResultEntity.getTaskId();
|
||||
Integer taskStatus = wmsReceiveTaskResultEntity.getTaskStatus();
|
||||
String vehicleNo = wmsReceiveTaskResultEntity.getVehicleNo();
|
||||
// 查找对应任务
|
||||
Task taskForQuery = new Task();
|
||||
taskForQuery.setTaskGroup(taskId);
|
||||
List<Task> tasks = taskService.selTasks(taskForQuery);
|
||||
if(tasks == null || tasks.isEmpty()) {
|
||||
return new ResponseEntity(-1, "没有找到对应的任务");
|
||||
}
|
||||
Task task = tasks.get(0);
|
||||
if(taskStatus.equals(WmsTaskStatus.FINISH.getCode())) { // 任务完成
|
||||
if(task.getTaskType().equals(TaskType.IN.getCode())) { // 入库
|
||||
/* 找出任务,完成该任务;找出该任务终点,更新库存为OK */
|
||||
// 完成任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 完成任务
|
||||
// 更新库存为 ok
|
||||
int updateStock = stockMapper.updateStockStatusWithLocationId(task.getDestination(), StockStatus.OK.getCode());
|
||||
if(updateStock > 0){
|
||||
log.info("入库完成更新库存成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "入库完成");
|
||||
}
|
||||
return new ResponseEntity(0, "入库完成,更新库存失败");
|
||||
}
|
||||
if(task.getTaskType().equals(TaskType.OUT.getCode())) { // 出库
|
||||
/* 找出任务,完成该任务;找出该任务终点,删除库存;释放库位 */
|
||||
// 完成任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 完成任务
|
||||
// 释放库位
|
||||
Location updateLocation = new Location();
|
||||
updateLocation.setLocationId(task.getOrigin());
|
||||
updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
|
||||
updateLocation.setVehicleId("");
|
||||
locationMapper.modifyLocation(updateLocation); // 更新库位为空
|
||||
// 删除库存
|
||||
int updateStock = stockMapper.deleteStockWithLocationId(task.getOrigin());
|
||||
if(updateStock > 0){
|
||||
log.info("出库完成删除库存成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "出库完成");
|
||||
}
|
||||
return new ResponseEntity(0, "出库完成,删除库存失败");
|
||||
}
|
||||
if(task.getTaskType().equals(TaskType.INVENTORY.getCode())) { // 盘点
|
||||
/* 找出任务,完成该任务;找出该任务终点,删除库存;释放库位 */
|
||||
// 完成任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 完成任务
|
||||
// 释放库位
|
||||
Location updateLocation = new Location();
|
||||
updateLocation.setLocationId(task.getOrigin());
|
||||
updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
|
||||
updateLocation.setVehicleId("");
|
||||
locationMapper.modifyLocation(updateLocation); // 更新库位为空
|
||||
// 删除库存
|
||||
int updateStock = stockMapper.deleteStockWithLocationId(task.getOrigin());
|
||||
if(updateStock > 0){
|
||||
log.info("盘点出库完成删除库存成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "盘点出库完成");
|
||||
}
|
||||
return new ResponseEntity(0, "盘点出库完成,删除库存失败");
|
||||
}
|
||||
if(task.getTaskType().equals(TaskType.MOVE.getCode())) { // 移库
|
||||
/* 找出任务,更新任务为完成;释放原库位;更新库存到新库位 */
|
||||
// 完成任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 完成任务
|
||||
// 释放原库位
|
||||
// 释放库位
|
||||
Location updateLocation = new Location();
|
||||
updateLocation.setLocationId(task.getOrigin());
|
||||
updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
|
||||
updateLocation.setVehicleId("");
|
||||
locationMapper.modifyLocation(updateLocation); // 更新库位为空
|
||||
// 更新库位
|
||||
int updatedLocation = stockMapper.updateLocationAndStatus(task.getOrigin(), task.getDestination(), StockStatus.OK.getCode());
|
||||
if(updatedLocation > 0){
|
||||
log.info("移库库位更新成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "移库库位更新成功");
|
||||
}
|
||||
return new ResponseEntity(0, "移库库位更新失败");
|
||||
}
|
||||
}
|
||||
if(taskStatus.equals(WmsTaskStatus.CANCEL.getCode())) { // 任务取消
|
||||
if(task.getTaskType().equals(TaskType.IN.getCode())) { // 入库
|
||||
/* 找出任务,取消该任务;找出该任务终点,更新库存为OK */
|
||||
// 取消任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 取消任务
|
||||
// 更新库存为 ok
|
||||
int updateStock = stockMapper.updateStockStatusWithLocationId(task.getDestination(), StockStatus.OK.getCode());
|
||||
if(updateStock > 0){
|
||||
log.info("入库取消更新库存成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "入库取消");
|
||||
}
|
||||
return new ResponseEntity(0, "入库取消,更新库存失败");
|
||||
}
|
||||
if(task.getTaskType().equals(TaskType.OUT.getCode())) { // 出库
|
||||
/* 找出任务,取消该任务;找出该任务终点,删除库存;释放库位 */
|
||||
// 取消任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 取消任务
|
||||
// 更新库存为 ok
|
||||
int updateStock = stockMapper.updateStockStatusWithLocationId(task.getDestination(), StockStatus.OK.getCode());
|
||||
if(updateStock > 0){
|
||||
log.info("出库取消更新库存成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "出库取消");
|
||||
}
|
||||
return new ResponseEntity(0, "出库取消,更新库存失败");
|
||||
}
|
||||
if(task.getTaskType().equals(TaskType.INVENTORY.getCode())) { // 盘点
|
||||
/* 找出任务,取消该任务;找出该任务终点,删除库存;释放库位 */
|
||||
// 取消任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 取消任务
|
||||
// 更新库存为 ok
|
||||
int updateStock = stockMapper.updateStockStatusWithLocationId(task.getDestination(), StockStatus.OK.getCode());
|
||||
if(updateStock > 0){
|
||||
log.info("盘点出库取消更新库存成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "盘点出库取消");
|
||||
}
|
||||
return new ResponseEntity(0, "盘点出库取消,更新库存失败");
|
||||
}
|
||||
if(task.getTaskType().equals(TaskType.MOVE.getCode())) { // 移库
|
||||
/* 找出任务,更新任务为取消;释放新库位;更新库存为OK */
|
||||
// 取消任务
|
||||
Task completeTask = new Task();
|
||||
completeTask.setTaskId(task.getTaskId());
|
||||
completeTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
|
||||
completeTask.setFinishTime(new Date());
|
||||
taskMapper.executeTask(completeTask); // 取消任务
|
||||
// 释放库位
|
||||
Location updateLocation = new Location();
|
||||
updateLocation.setLocationId(task.getDestination());
|
||||
updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
|
||||
updateLocation.setVehicleId("");
|
||||
locationMapper.modifyLocation(updateLocation); // 更新库位为空
|
||||
// 更新库位
|
||||
int updatedLocation = stockMapper.updateStockStatusWithLocationId(task.getOrigin(), StockStatus.OK.getCode());
|
||||
if(updatedLocation > 0){
|
||||
log.info("移库取消库位状态更新成功,任务:{}", task.toLoggerString());
|
||||
return new ResponseEntity(0, "移库取消库位状态更新成功");
|
||||
}
|
||||
return new ResponseEntity(0, "移库取消库位状态更新失败");
|
||||
}
|
||||
}
|
||||
return new ResponseEntity(0, "不处理的状态");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
package com.wms.entity.app.mes;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 入库发送 mes
|
||||
*/
|
||||
@Data
|
||||
public class SendMesPutInGoodsRequest {
|
||||
|
||||
/**
|
||||
* 唯一号
|
||||
*/
|
||||
@JsonProperty("guid")
|
||||
private String guid;
|
||||
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
@JsonProperty("Losnr")
|
||||
private String losnr;
|
||||
|
||||
/**
|
||||
* 料号
|
||||
*/
|
||||
@JsonProperty("ItemCode")
|
||||
private String itemCode;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
@JsonProperty("LotQty")
|
||||
private String lotQty;
|
||||
|
||||
/**
|
||||
* 库位
|
||||
*/
|
||||
@JsonProperty("BinCode")
|
||||
private String binCode;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
package com.wms.entity.app.wcs;
|
||||
|
||||
import com.wms.entity.BaseEntity;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* WCS向WMS发送任务结果请求实体类
|
||||
|
|
@ -10,10 +12,12 @@ public class WmsReceiveTaskResultEntity extends BaseEntity {
|
|||
/**
|
||||
* WMS任务编号
|
||||
*/
|
||||
@NotBlank(message = "任务ID不允许为空")
|
||||
private String taskId;
|
||||
/**
|
||||
* 任务状态
|
||||
*/
|
||||
@NotNull(message = "任务状态不允许为空")
|
||||
private Integer taskStatus;
|
||||
/**
|
||||
* 任务终点
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ spring:
|
|||
active: online
|
||||
server:
|
||||
# 服务端配置
|
||||
port: 12315
|
||||
port: 19990
|
||||
servlet:
|
||||
# 接口地址
|
||||
context-path: /
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user