diff --git a/pom.xml b/pom.xml
index 68d1f6f..f7e5feb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -132,11 +132,6 @@
springfox-swagger-ui
2.9.2
-
- org.apache.tomcat.embed
- tomcat-embed-core
- 9.0.68
-
org.apache.tomcat.embed
tomcat-embed-core
diff --git a/src/main/java/com/wms/bussiness/JobComponent.java b/src/main/java/com/wms/bussiness/JobComponent.java
index 3b8606a..818ee37 100644
--- a/src/main/java/com/wms/bussiness/JobComponent.java
+++ b/src/main/java/com/wms/bussiness/JobComponent.java
@@ -1,16 +1,19 @@
package com.wms.bussiness;
import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
import com.wms.constants.enums.*;
import com.wms.controller.BaseController;
import com.wms.entity.app.ResponseEntity;
import com.wms.entity.app.container.ContainerApiLocalResponse;
+import com.wms.entity.app.container.CreateInstoreTaskRequest;
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.mapper.VehicleMapper;
import com.wms.service.*;
import com.wms.utils.HttpUtils;
import com.wms.utils.StringUtils;
@@ -71,6 +74,7 @@ public class JobComponent extends BaseController {
private final StockService stockService;
private final TaskRecordService taskRecordService;
private final StockMapper stockMapper;
+ private final VehicleMapper vehicleMapper;
@Scheduled(fixedDelay = 1000)
@@ -85,11 +89,11 @@ public class JobComponent extends BaseController {
return;
}
for(Task task : tasks){
- if(task.getTaskType().equals(TaskType.IN.getCode())|| task.getTaskType().equals(TaskType.INVENTORY.getCode())){
+ if(task.getTaskType().equals(TaskType.IN.getCode())) {
sendTasksInToWcs(task);
return;
}
- if(task.getTaskType().equals(TaskType.OUT.getCode())){
+ if(task.getTaskType().equals(TaskType.OUT.getCode()) || task.getTaskType().equals(TaskType.INVENTORY.getCode())){
sendTasksOutToWcs(task);
return;
}
@@ -99,7 +103,7 @@ public class JobComponent extends BaseController {
}
}
}catch (Exception exception){
- logger.error("定时器下发任务发生异常:{}", exception.getMessage());
+ logger.error("定时器下发任务发生异常:{}", exception.toString());
}
}
@@ -108,28 +112,78 @@ public class JobComponent extends BaseController {
* @param task 任务
*/
private void sendTasksInToWcs(Task task) {
- List request = new ArrayList<>();
- // 创建发送的任务
- WcsTask tempTask = new WcsTask();
- tempTask.setTaskId(task.getTaskGroup());
- tempTask.setTaskType(TaskType.IN.getCode());
- tempTask.setOrigin(task.getOrigin());
- tempTask.setDestination(task.getDestination());
- tempTask.setVehicleNo(task.getVehicleNo());
- tempTask.setVehicleSize(1);
- tempTask.setWeight(task.getWeight() == null ? 0 : task.getWeight());
- tempTask.setPriority(task.getTaskPriority());
- request.add(tempTask);
- // 发送任务
- ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_SEND_TASK.getValue(), JSON.toJSONString(request)), ResponseEntity.class);
- if (result != null && Objects.equals(ResponseCode.OK.getCode(), result.getCode())) {
- logger.info("下发入库任务成功,任务ID:{}", tempTask.getTaskId());
- Task taskForUpdate = new Task();
- taskForUpdate.setTaskId(task.getTaskId());
- taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
- taskService.executeTask(taskForUpdate);
+ try {
+ List thisLocations = locationService.selLocations(new Location(task.getDestination()));
+ if(thisLocations == null) {
+ logger.warn("下发入库任务查询库位详细信息失败,数据库网络连接异常,任务号:{}", task.getTaskId());
+ return;
+ }
+ if(thisLocations.isEmpty()) {
+ logger.warn("下发入库任务查询库位详细信息异常,不存在详细信息,该库位可能不存在,任务号:{}", task.getTaskId());
+ Task taskForUpdate = new Task();
+ taskForUpdate.setTaskId(task.getTaskId());
+ taskForUpdate.setTaskStatus(WmsTaskStatus.EXCEPTION.getCode());
+ taskForUpdate.setRemark1("该库位不存在");
+ taskService.executeTask(taskForUpdate);
+ return;
+ }
+ Location thisLocation = thisLocations.get(0);
+ if(thisLocation.getAreaId() == 1){
+ List request = new ArrayList<>();
+ // 创建发送的任务
+ WcsTask tempTask = new WcsTask();
+ tempTask.setTaskId(task.getTaskId());
+ tempTask.setTaskType(TaskType.IN.getCode());
+ tempTask.setOrigin(task.getOrigin());
+ tempTask.setDestination(task.getDestination());
+ tempTask.setVehicleNo(task.getVehicleNo());
+ tempTask.setVehicleSize(1);
+ tempTask.setWeight(task.getWeight() == null ? 0 : task.getWeight());
+ tempTask.setPriority(task.getTaskPriority());
+ request.add(tempTask);
+ // 发送任务
+ ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_SEND_TASK.getValue(), JSON.toJSONString(request)), ResponseEntity.class);
+ if (result != null && Objects.equals(ResponseCode.OK.getCode(), result.getCode())) {
+ logger.info("下发立库入库任务成功,任务ID:{},任务信息:{}", tempTask.getTaskId(), JSON.toJSONString(request));
+ Task taskForUpdate = new Task();
+ taskForUpdate.setTaskId(task.getTaskId());
+ taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
+ taskService.executeTask(taskForUpdate);
+ return;
+ }
+ logger.info("下发立库入库任务失败,任务ID:{},信息:{}", tempTask.getTaskId(), JSON.toJSONString(result));
+ }
+// else { //四向车库
+// //List request = new ArrayList<>();
+// // 创建发送的任务
+// String uuid = UUID.randomUUID().toString();
+// CreateInstoreTaskRequest request = new CreateInstoreTaskRequest();
+// request.setRequestId(uuid);
+// request.setKey(StringUtils.containerMd5(uuid).toUpperCase());
+// request.setPalletNo(task.getVehicleNo());
+// request.setHeight("0");
+// request.setWeight("0");
+// request.setFromCellNo(task.getOrigin());
+// // 发送任务
+// String requestString = JSON.toJSONString(request);
+// String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CONTAINERIN_TASK.getValue(), requestString);
+// if (responseString == null || responseString.isEmpty()) {
+// logger.error("Response string is null or empty");
+// }
+// ContainerApiLocalResponse result = JSON.parseObject(responseString, ContainerApiLocalResponse.class);
+// if (result != null && result.getCode().equals("200")) {
+// logger.info("下发托盘库入库任务成功,任务ID:{}", task.getTaskId());
+// Task taskForUpdate = new Task();
+// taskForUpdate.setTaskId(task.getTaskId());
+// taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
+// taskService.executeTask(taskForUpdate);
+// return;
+// }
+// logger.info("下发托盘库入库任务失败,任务ID:{},信息:{}", task.getTaskId(), JSON.toJSONString(result));
+// }
+ }catch (Exception exception){
+ logger.error("下发入库任务发生异常:{}", exception.toString());
}
- logger.info("下发入库任务失败,任务ID:{},信息:{}", tempTask.getTaskId(), JSON.toJSONString(result));
}
/**
@@ -141,10 +195,12 @@ public class JobComponent extends BaseController {
List thisLocations = locationService.selLocations(new Location(task.getOrigin()));
if(thisLocations == null) {
logger.warn("下发出库任务查询库位详细信息失败,数据库网络连接异常,任务号:{}", task.getTaskId());
+ logger.info("下发出库任务查询库位详细信息失败,数据库网络连接异常");
return;
}
if(thisLocations.isEmpty()) {
logger.warn("下发出库任务查询库位详细信息异常,不存在详细信息,该库位可能不存在,任务号:{}", task.getTaskId());
+ logger.info("下发出库任务查询库位详细信息异常,不存在详细信息,该库位可能不存在");
Task taskForUpdate = new Task();
taskForUpdate.setTaskId(task.getTaskId());
taskForUpdate.setTaskStatus(WmsTaskStatus.EXCEPTION.getCode());
@@ -158,35 +214,43 @@ public class JobComponent extends BaseController {
depth--;
/* 检查该库位有没有任务,若有则退出函数,若没有则检查有没有库存,若没有库存则继续,若有库存则生成一个移库任务,生成之后退出函数 */
Location beforLocationsQuery = new Location();
+ // logger.info("{},{},{},{},{}",thisLocation.getAreaId(),thisLocation.getQueue(),thisLocation.getLine(),thisLocation.getLayer(),depth);
beforLocationsQuery.setAreaId(thisLocation.getAreaId());
- beforLocationsQuery.setQueue(thisLocation.getQueue());
+ //beforLocationsQuery.setQueue(thisLocation.getQueue());
beforLocationsQuery.setLine(thisLocation.getLine());
beforLocationsQuery.setLayer(thisLocation.getLayer());
+ beforLocationsQuery.setLocationType(1);
beforLocationsQuery.setDepth(depth);
List beforLocations = locationService.selLocations(beforLocationsQuery);
if(beforLocations == null) {
logger.warn("下发出库任务查询库位详细信息失败,数据库网络连接异常,任务号:{}", task.getTaskId());
+ logger.info("下发出库任务查询库位详细信息失败,数据库网络连接异常");
return;
}
if(beforLocations.isEmpty()) {
+ logger.info("beforLocations.isEmpty()");
return;
}
Location beforLocation = beforLocations.get(0); // 前一个库位
List notCompleteTasks = taskMapper.haveNotCompleteTask(beforLocation.getLocationId());
if(notCompleteTasks == null) {
+ logger.info("notCompleteTasks为null");
return;
}
if(!notCompleteTasks.isEmpty()) {
+ logger.info("存在未完成的任务,退出函数");
return; // 存在未完成的任务,退出函数
}
- // 检查是否有库存、
- Stock stockQuery = new Stock();
- stockQuery.setLocationId(beforLocation.getLocationId());
- List stocks = stockService.selStocks(stockQuery);
- if(stocks == null) {
+ // 检查是否有库存,因为存在空框所以不在库存表中检验
+ Vehicle nextVehicle = new Vehicle();
+ nextVehicle.setCurrentLocation(beforLocation.getLocationId());
+ List beforVehicleCheckIfEmpty = vehicleMapper.selVehicles(nextVehicle);
+ if(beforVehicleCheckIfEmpty == null) {
+ logger.info("beforLocationsCheckIfEmpty == null");
return;
}
- if(stocks.isEmpty()) {
+ if(beforVehicleCheckIfEmpty.isEmpty()) {
+ logger.info("位置{}没有框",beforLocation.getLocationId());
continue; // 没有库存,继续
}
/* 生成一个移库任务 */
@@ -196,13 +260,17 @@ public class JobComponent extends BaseController {
emptyLocation.setAreaId(beforLocation.getAreaId());
List emptyLocations = locationMapper.selLocations(emptyLocation);
if(emptyLocations == null) {
+ logger.info("emptyLocations == null");
return;
}
if(emptyLocations.isEmpty()){
+ logger.warn("移库没有可用库位,任务号:{}", task.getTaskId());
+ logger.info("移库没有可用库位");
return; // 移库没有可用库位
}
Location emptyLocationItem = locationUtils.checkCanUse(emptyLocations); // 取得新库位
if(emptyLocationItem == null) {
+ logger.info("emptyLocationItem == null");
return; // 没有可用库位或者m库位存在干涉
}
// 锁定旧库位库存
@@ -212,26 +280,46 @@ public class JobComponent extends BaseController {
locationForUpdate.setLocationId(emptyLocationItem.getLocationId());
locationForUpdate.setLocationStatus(LocationStatus.OCCUPY.getCode());
locationMapper.modifyLocation(locationForUpdate);
- // 构造移库任务
+
+ //创建移库任务
Task moveTask = new Task();
- moveTask.setTaskId(UUID.randomUUID().toString());
- moveTask.setTaskGroup(task.getTaskGroup());
+ moveTask.setTaskId(String.valueOf(Calendar.getInstance().getTimeInMillis()));
moveTask.setTaskType(TaskType.MOVE.getCode());
+ moveTask.setTaskGroup(task.getTaskGroup());
+ moveTask.setTaskStatus(OrderOutStatusEnum.CREATED.getCode());
moveTask.setOrigin(beforLocation.getLocationId());
moveTask.setDestination(emptyLocationItem.getLocationId());
- moveTask.setVehicleNo(stocks.get(0).getVehicleId());
- moveTask.setVehicleSize(0);
+ moveTask.setPickStand(null);
moveTask.setWeight(0.0);
- moveTask.setTaskPriority(9);
- moveTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
- taskService.addTask(moveTask);
+ moveTask.setVehicleNo(beforVehicleCheckIfEmpty.get(0).getVehicleId());
+ moveTask.setCreateTime(new Date());
+ moveTask.setUserName("WMS");
+ if(depth == 2){
+ moveTask.setTaskPriority(8);
+ } else if (depth == 1) {
+ moveTask.setTaskPriority(9);
+ }
+ if (beforVehicleCheckIfEmpty.get(0).getIsEmpty() == 1){
+ moveTask.setRemark1("空框");
+ }else {
+ moveTask.setRemark1("带料");
+ }
+ int a = taskService.addTask(moveTask);
+ if (a == 1 && depth == 2){
+ logger.info("生成移库任务成功,任务号:{}", moveTask.getTaskId());
+ continue;
+ } else if (a == 1 && depth == 1) {
+ return;
+ } else {
+ logger.info("生成移库任务失败,任务号:{}", moveTask.getTaskId());
+ }
return;
}
if(thisLocation.getAreaId() == 1) { // 宝开立库
List request = new ArrayList<>();
// 创建发送的任务
WcsTask tempTask = new WcsTask();
- tempTask.setTaskId(task.getTaskGroup());
+ tempTask.setTaskId(task.getTaskId());
tempTask.setTaskType(TaskType.OUT.getCode());
tempTask.setOrigin(task.getOrigin());
tempTask.setDestination(task.getDestination());
@@ -248,8 +336,9 @@ public class JobComponent extends BaseController {
taskForUpdate.setTaskId(task.getTaskId());
taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
taskService.executeTask(taskForUpdate);
+ return;
}
- logger.info("下发立库出库任务失败,任务ID:{},信息:{}", tempTask.getTaskId(), JSON.toJSONString(result));
+ logger.info("下发立库出库任务失败,任务ID:{},信息:{},result结果:{}", tempTask.getTaskId(), JSON.toJSONString(result),result.getCode());
} else { // 四向车库
String uuid = UUID.randomUUID().toString();
SendContainerTaskRequest request = new SendContainerTaskRequest();
@@ -259,9 +348,10 @@ public class JobComponent extends BaseController {
request.setPalletno(task.getVehicleNo());
request.setTasktype("2"); // 出库
request.setFromcellno(task.getOrigin());
- request.setTocellno("A13-34-01"); // A13-34-01;A13-16-01;
+ request.setTocellno("111"); // ???????
String requestString = JSON.toJSONString(request);
String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CONTAINER_TASK.getValue(), requestString);
+ //JSONObject jsonResponse = JSON.parseObject(responseString);
ContainerApiLocalResponse result = JSON.parseObject(responseString, ContainerApiLocalResponse.class);
if(result != null && result.getCode().equals("200")) {
logger.info("下发四向车出库任务成功,任务ID:{}", task.getTaskId());
@@ -269,6 +359,7 @@ public class JobComponent extends BaseController {
taskForUpdate.setTaskId(task.getTaskId());
taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
taskService.executeTask(taskForUpdate);
+ return;
}
logger.info("下发四向车出库任务失败,任务ID:{},信息:{}", task.getTaskId(), JSON.toJSONString(result));
}
@@ -278,7 +369,79 @@ public class JobComponent extends BaseController {
* 发送移库任务给WCS
* @param task 任务
*/
- private void sendTasksMoveToWcs(Task task) {
+ private void sendTasksMoveToWcs(Task task){
+ /* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */
+ List thisLocations = locationService.selLocations(new Location(task.getOrigin()));
+ if(thisLocations == null) {
+ logger.info("下发移库任务查询库位详细信息失败,数据库网络连接异常");
+ return;
+ }
+ if(thisLocations.isEmpty()) {
+ logger.info("下发移库任务查询库位详细信息异常,不存在详细信息,该库位可能不存在");
+ Task taskForUpdate = new Task();
+ taskForUpdate.setTaskId(task.getTaskId());
+ taskForUpdate.setTaskStatus(WmsTaskStatus.EXCEPTION.getCode());
+ taskForUpdate.setRemark1("该库位不存在");
+ taskService.executeTask(taskForUpdate);
+ return;
+ }
+ Location thisLocation = thisLocations.get(0); // 找出当前库位详细信息
+ int depth = thisLocation.getDepth();
+ while (depth > 1) {
+ depth--;
+ /* 检查该库位有没有任务,若有则退出函数,若没有则检查有没有库存,若没有库存则继续,若有库存则生成一个移库任务,生成之后退出函数 */
+ Location beforLocationsQuery = new Location();
+ // logger.info("{},{},{},{},{}",thisLocation.getAreaId(),thisLocation.getQueue(),thisLocation.getLine(),thisLocation.getLayer(),depth);
+ beforLocationsQuery.setAreaId(thisLocation.getAreaId());
+ //beforLocationsQuery.setQueue(thisLocation.getQueue());
+ beforLocationsQuery.setLine(thisLocation.getLine());
+ beforLocationsQuery.setLayer(thisLocation.getLayer());
+ beforLocationsQuery.setLocationType(1);
+ beforLocationsQuery.setDepth(depth);
+ List beforLocations = locationService.selLocations(beforLocationsQuery);
+ if (beforLocations == null) {
+ logger.info("下发移库任务查询库位详细信息失败,数据库网络连接异常");
+ return;
+ }
+ if (beforLocations.isEmpty()) {
+ logger.info(".isEmpty()");
+ return;
+ }
+ Location beforLocation = beforLocations.get(0); // 前一个库位
+ List notCompleteTasks = taskMapper.haveNotCompleteTask(beforLocation.getLocationId());
+ if (notCompleteTasks == null) {
+ logger.info("eteTasks为null");
+ return;
+ }
+ if (!notCompleteTasks.isEmpty()) {
+ return; // 存在未完成的任务,退出函数
+ }
+ }
+ logger.info("开始发送移库任务给WCS,任务号:{}", task.getTaskId());
+ String uuid = UUID.randomUUID().toString();
+ SendContainerTaskRequest request = new SendContainerTaskRequest();
+ request.setRequestid(uuid);
+ request.setKey(StringUtils.containerMd5(uuid).toUpperCase());
+ request.setWmstaskid(task.getTaskId());
+ request.setPalletno(task.getVehicleNo());
+ request.setTasktype("3"); // 移库
+ request.setFromcellno(task.getOrigin());
+ request.setTocellno(task.getDestination());
+ String requestString = JSON.toJSONString(request);
+ String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CONTAINER_TASK.getValue(), requestString);
+ ContainerApiLocalResponse result = JSON.parseObject(responseString, ContainerApiLocalResponse.class);
+ if(result != null && result.getCode().equals("200")) {
+ logger.info("下发四向车移库任务成功,任务ID:{}", task.getTaskId());
+ Task taskForUpdate = new Task();
+ taskForUpdate.setTaskId(task.getTaskId());
+ taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
+ taskService.executeTask(taskForUpdate);
+ return;
+ }
+ logger.info("下发四向车移库任务失败,任务ID:{},信息:{}", task.getTaskId(), JSON.toJSONString(result));
+ }
+
+ private void sendTasksMoveToWcs1(Task task) {
/* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */
List thisLocations = locationService.selLocations(new Location(task.getOrigin()));
if(thisLocations == null) {
@@ -318,8 +481,11 @@ public class JobComponent extends BaseController {
if(notCompleteTasks == null) {
return;
}
- if(!notCompleteTasks.isEmpty()) {
- return; // 存在未完成的任务,退出函数
+ for(Task notCompleteTask : notCompleteTasks) {
+ String taskId = notCompleteTask.getTaskId();
+ if(!taskId.equals(task.getTaskId())) {
+ return;
+ }
}
// 检查是否有库存、
Stock stockQuery = new Stock();
@@ -373,7 +539,7 @@ public class JobComponent extends BaseController {
List request = new ArrayList<>();
// 创建发送的任务
WcsTask tempTask = new WcsTask();
- tempTask.setTaskId(task.getTaskGroup());
+ tempTask.setTaskId(task.getTaskId());
tempTask.setTaskType(TaskType.MOVE.getCode());
tempTask.setOrigin(task.getOrigin());
tempTask.setDestination(task.getDestination());
@@ -390,6 +556,7 @@ public class JobComponent extends BaseController {
taskForUpdate.setTaskId(task.getTaskId());
taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
taskService.executeTask(taskForUpdate);
+ return;
}
logger.info("下发立库移库任务失败,任务ID:{},信息:{}", tempTask.getTaskId(), JSON.toJSONString(result));
} else {
@@ -406,13 +573,14 @@ public class JobComponent extends BaseController {
String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CONTAINER_TASK.getValue(), requestString);
ContainerApiLocalResponse result = JSON.parseObject(responseString, ContainerApiLocalResponse.class);
if(result != null && result.getCode().equals("200")) {
- logger.info("下发四向车移库任务成功,任务ID:{}", task.getTaskId());
+ // logger.info("下发四向车移库任务成功,任务ID:{}", task.getTaskId());
Task taskForUpdate = new Task();
taskForUpdate.setTaskId(task.getTaskId());
taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
taskService.executeTask(taskForUpdate);
+ return;
}
- logger.info("下发四向车移库任务失败,任务ID:{},信息:{}", task.getTaskId(), JSON.toJSONString(result));
+ // logger.info("下发四向车移库任务失败,任务ID:{},信息:{}", task.getTaskId(), JSON.toJSONString(result));
}
}
@@ -532,7 +700,7 @@ public class JobComponent extends BaseController {
* 每天查询一次是否有过期记录
* 每天晚上10点执行一次
*/
- @Scheduled(cron = "0 0 22 * * ?")
+ //@Scheduled(cron = "0 0 22 * * ?")
public void deleteOutOfDateData() {
logger.info("执行定时任务:删除过期数据");
taskRecordService.deleteTaskRecordRegularly();
diff --git a/src/main/java/com/wms/bussiness/OrderTimer.java b/src/main/java/com/wms/bussiness/OrderTimer.java
deleted file mode 100644
index d3b0454..0000000
--- a/src/main/java/com/wms/bussiness/OrderTimer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.wms.bussiness;
-
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-/**
- * 订单定时器
- */
-@Component
-@RequiredArgsConstructor(onConstructor = @__(@Autowired))
-public class OrderTimer {
-
- @Scheduled(fixedDelay = 1000)
- public void parseOutOrder() {
- //解析出库订单 ---- 出库订单已经由api插入数据库
-
-
-
-
-
- }
-
-
-
-
-}
diff --git a/src/main/java/com/wms/bussiness/TaskOperation.java b/src/main/java/com/wms/bussiness/TaskOperation.java
index b49577c..c618c10 100644
--- a/src/main/java/com/wms/bussiness/TaskOperation.java
+++ b/src/main/java/com/wms/bussiness/TaskOperation.java
@@ -1,23 +1,29 @@
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 com.alibaba.fastjson2.JSON;
+import com.wms.constants.enums.*;
+import com.wms.entity.app.ResponseEntity;
+import com.wms.entity.app.mes.*;
+import com.wms.entity.app.wcs.WmsReceiveTaskResultEntity;
+import com.wms.entity.common.WmsApiResponse;
+import com.wms.entity.table.*;
+import com.wms.mapper.*;
+import com.wms.service.PartInfoService;
+import com.wms.utils.HttpUtils;
+import com.wms.utils.WmsUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.Now;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
import javax.swing.plaf.synth.Region;
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
/**
@@ -43,13 +49,24 @@ public class TaskOperation {
*/
private final LocationMapper locationMapper;
+ private final VehicleMapper vehicleMapper;
+ private final OrderOutMapper orderOutMapper;
+ /**
+ * 零件
+ */
+ private final PartInfoService partInfoService;
+
+ /**
+ * 订单入库
+ */
+ private final com.wms.mapper.AppOrderInMapper appOrderInMapper;
//region 完成任务
/**
* 完成任务
- * @param task 要完成的任务
+ * @param task 要完成的任务A21-15-2
* @return 操作结果
*/
public boolean completeTask(Task task) {
@@ -75,114 +92,577 @@ public class TaskOperation {
* @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()));
+ /* 找出任务,完成该任务;找出该任务终点,更新库存为OK */
+ // 完成任务
+ Task completeTask = new Task();
+ completeTask.setTaskId(task.getTaskId());
+ completeTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
+ completeTask.setFinishTime(new Date());
+ taskMapper.executeTask(completeTask); // 完成任务
+ // 占掉新库位,生成的时候会占,这里重复操作保护
+ Location occupyLocation = new Location();
+ occupyLocation.setLocationId(task.getDestination());
+ occupyLocation.setLocationStatus(LocationStatus.OCCUPY.getCode());
+ occupyLocation.setVehicleId(task.getVehicleNo());
+ locationMapper.modifyLocation(occupyLocation); // 更新库位
+ //根据task表的载具号前16位去入库表里面找对应的批次号的入库单数据 数量相等 入库单载具号为空
+ // 根据载具号获取入库单入库数据行
+ List appOrderIns = appOrderInMapper.selectWithVehicle(task.getVehicleNo());
+ if (appOrderIns == null || appOrderIns.isEmpty()) {
+ log.error("四向车入库完成更新库存失败,任务:{},原因:没有找到入库单入库数据行", task.toLoggerString());
return false;
}
- // 更新库存状态
- Stock stockQuery = new Stock();
- stockQuery.setLocationId(task.getDestination());
- List 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()));
+ AppOrderIn appOrderInForCheck = appOrderIns.get(0);
+ if (appOrderInForCheck.getGoodsId() == null || appOrderInForCheck.getGoodsId().isEmpty()){
+ //表示这个为空托盘入库,没有零件号,不记录到库存表中,更新到料箱监控表中。
+ Vehicle a = new Vehicle();
+ a.setVehicleId(appOrderInForCheck.getVehicleNo());
+ a.setCurrentLocation(task.getDestination());
+ a.setIsEmpty(1);
+ a.setVehicleStatus(2);
+ int b = vehicleMapper.addVehicle(a);
+ if (b == 0){
+ log.error("四向车空托盘入库完成更新料箱监控失败,任务:{},原因:更新载具为空状态失败", task.toLoggerString());
+ return false;
+ }else{
+ log.info("四向车空托盘入库完成更新料箱监控成功,任务:{}", task.toLoggerString());
+ }
+ //删除入库单
+ int dele = appOrderInMapper.delete(appOrderInForCheck.getRowId());
+ if (dele == 0){
+ log.info("四向车空托入库删除订单入库单数据行失败,任务:{},原因:删除失败", task.toLoggerString());
+ }else if (dele == 1){
+ log.info("四向车空托入库删除订单入库单数据行成功,任务:{}", task.toLoggerString());
+ }
+ }else{
+ // 将入库数据行数据插入库存表
+ for (AppOrderIn appOrderIn : appOrderIns){
+ //将批次号一部分裁下来做生产日期
+ Stock addStock = new Stock();
+ addStock.setStockId(WmsUtils.generateUUIDString());
+ addStock.setWarehouseName("四向车立体库");
+ addStock.setLocationId(task.getDestination());
+ //addStock.setLocationId(appOrderIn.getVehicleNo());
+ addStock.setVehicleId(appOrderIn.getVehicleNo());
+ addStock.setGoodsId(appOrderIn.getGoodsId());
+ addStock.setGoodsName("");
+ addStock.setBatchNo("");
+ addStock.setAvailableNum(appOrderIn.getGoodsNum().intValue());
+ addStock.setRealNum(appOrderIn.getGoodsNum().intValue());
+ addStock.setProviderId("");
+ addStock.setProviderName("");
+ //addStock.setProductionDate(null);
+ addStock.setExpirationDate(null);
+ addStock.setStockStatus(0);
+ addStock.setGoodsStatus(null);
+ addStock.setCreateTime(new Date());
+ addStock.setLastUpdateTime(null);
+ addStock.setLastUpdateUser(null);
+ addStock.setRemark(appOrderIn.getRemark());
+ addStock.setProductionDate(null);
+ //添加到库存里
+ if (Objects.equals(addStock.getVehicleId(), task.getVehicleNo())){
+ int a = stockMapper.addStock(addStock);//??????
+ if (a == 0){//表示添加库存失败
+ log.info("四向车入库完成更新库存失败,任务:{},原因:添加库存失败", task.toLoggerString());
+ for (int i = 0; i < 5; i++) {
+ int b =stockMapper.addStock(addStock);
+ if (b != 0){
+ log.info("四向车入库更新库存重试成功,任务:{}", task.toLoggerString());
+ break;
+ }
+ }
+ }else {
+ log.info("四向车入库完成更新库存成功,任务:{}", task.toLoggerString());
+ }
+ int b = appOrderInMapper.delete(appOrderIn.getRowId());
+ if (b == 0){
+ log.info("四向车入库删除订单入库数据行失败,任务:{},原因:删除失败", task.toLoggerString());
+ }else if (b == 1){
+ log.info("四向车入库删除订单入库数据行成功,任务:{}", task.toLoggerString());
+ }
+
+ }else{
+ log.error("四向车入库完成更新库存失败,任务:{},原因:载具号前16位与入库单载具号前16位不一致", task.toLoggerString());
+ }
+ }
+ Vehicle ab = new Vehicle();
+ ab.setVehicleId(appOrderIns.get(0).getVehicleNo());
+ ab.setCurrentLocation(task.getDestination());
+ ab.setIsEmpty(0);
+ ab.setVehicleStatus(2);
+ int bd = vehicleMapper.addVehicle(ab);
+ if (bd == 0){
+ log.error("四向车入库完成更新料箱监控失败,任务:{},原因:更新载具为空状态失败", task.toLoggerString());
+ return false;
+ }else{
+ log.info("四向车入库完成更新料箱监控成功,任务:{}", task.toLoggerString());
}
}
return true;
}
+// /**
+// * 发送 mes 上架入库信息
+// * @param stock 库存记录
+// * @param locationId 库位
+// */
+// private void sendMesPutInGoods(Stock stock, String locationId) {
+// try {
+// 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.warn("发送MES入库上架失败,信息:{},返回信息:{}", requestString, responseString);
+// }catch (Exception e){
+// log.error("发送MES入库上架失败异常,信息:{}", e.getMessage());
+// }
+// }
+
+// private void sendMesLocation(Stock stock, String locationId) {
+// try {
+// SendMesStockRequest request = new SendMesStockRequest();
+// request.setGuid(stock.getStockId());
+// request.setWarehouse(stock.getWarehouseName());
+// request.setItemCode(stock.getGoodsId());
+// request.setLosnr(stock.getBatchNo());
+// request.setLotQty(Integer.toString(stock.getAvailableNum()));
+// request.setUnit(null);
+// request.setBinCode(locationId);
+// request.setVehicleNo(stock.getVehicleId());
+// String requestString = JSON.toJSONString(request);
+// String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_MES_STOCK.getValue(), requestString);
+// MesApiLocalResponse result = JSON.parseObject(responseString, MesApiLocalResponse.class);
+// if (result != null && result.getTransFlag().equals(1)){
+// log.info("发送MES库存成功,信息:{}", requestString);
+// }else {
+// log.warn("发送MES库存失败,信息:{},返回信息:{}", requestString, responseString);
+// }
+// }catch (Exception e){
+// log.error("发送MES库存失败异常,信息:{}", e.getMessage());
+// }
+// }
+
+
/**
* 完成出库任务
* @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 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()));
+ /* 找出任务,完成该任务;找出该任务终点,删除库存;释放库位 */
+ // 完成任务
+ 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); // 更新库位为空
+ if (Objects.equals(task.getRemark1(), "手动出库")){
+ // 根据起点拉取库位库存,剩下数量不为零的数据搬运到入库单 生成回库任务,删除该库位所有库存
+ List stocks = stockMapper.selStocksByLocationId(task.getOrigin());
+ if (stocks == null || stocks.isEmpty()){
+ log.error("拉取库存失败,任务:{},原因:没有找到库存数据", task.toLoggerString());
+ return false;
+ }
+ int totalNum = stocks.size();
+ if (totalNum > 1){
+ for (Stock stock : stocks){
+ if (stock.getAvailableNum() > 0){
+ AppOrderIn appOrderIn = new AppOrderIn();
+ appOrderIn.setRowId(WmsUtils.generateUUIDString());
+ appOrderIn.setGuid(stock.getStockId());
+ appOrderIn.setInType(1);
+ appOrderIn.setBatchNo(stock.getBatchNo());
+ appOrderIn.setVehicleNo(task.getVehicleNo());
+ appOrderIn.setGoodsId(stock.getGoodsId());
+ appOrderIn.setGoodsNum(BigDecimal.valueOf(stock.getAvailableNum()));
+ appOrderIn.setWareHouse("A");
+ if (stock.getVehicleId() != null && !stock.getVehicleId().isEmpty()){
+ appOrderIn.setOrderStatus(2);
+ }else {
+ appOrderIn.setOrderStatus(0);
+ }
+ //appOrderIn.setOrderStatus(2);
+ appOrderIn.setCreateTime(LocalDateTime.now());
+ appOrderIn.setUpdateTime(LocalDateTime.now());
+ appOrderIn.setCreatePerson("BACK");
+ appOrderIn.setRemark("回库");
+ int isSuessInsert = appOrderInMapper.insert(appOrderIn);
+ if(isSuessInsert > 0){
+ log.info("多物料回库任务生成成功,任务:{}", task.toLoggerString());
+ }else{
+ log.error("多物料回库任务生成失败,任务:{}", task.toLoggerString());
+ }
+ }
+ }
+ } else{
+ for (Stock stock : stocks){
+ if (stock.getAvailableNum() > 0){
+ AppOrderIn appOrderIn = new AppOrderIn();
+ appOrderIn.setRowId(WmsUtils.generateUUIDString());
+ appOrderIn.setGuid(stock.getStockId());
+ appOrderIn.setInType(1);
+ appOrderIn.setBatchNo(stock.getBatchNo());
+ appOrderIn.setVehicleNo(task.getVehicleNo());
+ appOrderIn.setGoodsId(stock.getGoodsId());
+ appOrderIn.setGoodsNum(BigDecimal.valueOf(stock.getAvailableNum()));
+ appOrderIn.setWareHouse("A");
+ if (stock.getVehicleId() != null && !stock.getVehicleId().isEmpty()){
+ appOrderIn.setOrderStatus(2);
+ }else {
+ appOrderIn.setOrderStatus(0);
+ }
+ //appOrderIn.setOrderStatus(2);
+ appOrderIn.setCreateTime(LocalDateTime.now());
+ appOrderIn.setUpdateTime(LocalDateTime.now());
+ appOrderIn.setCreatePerson("BACK");
+ appOrderIn.setRemark("回库");
+ int isSuessInsert = appOrderInMapper.insert(appOrderIn);
+ if(isSuessInsert > 0){
+ log.info("回库任务生成成功,任务:{}", task.toLoggerString());
+ }else{
+ log.error("回库任务生成失败,任务:{}", task.toLoggerString());
+ }
+ }else{
+ log.error("库存数量为零,即将生成空托盘回库任务");
+ AppOrderIn appOrderIn = new AppOrderIn();
+ appOrderIn.setRowId(UUID.randomUUID().toString());
+ appOrderIn.setGuid(UUID.randomUUID().toString());
+ appOrderIn.setInType(1);
+ appOrderIn.setBatchNo(null);
+ appOrderIn.setVehicleNo(task.getVehicleNo());
+ appOrderIn.setGoodsId(null);
+ appOrderIn.setGoodsNum(null);
+ appOrderIn.setWareHouse("A");
+ appOrderIn.setOrderStatus(0);
+ appOrderIn.setCreateTime(LocalDateTime.now());
+ appOrderIn.setCreatePerson("WMS");
+ appOrderIn.setUpdateTime(LocalDateTime.now());
+ appOrderIn.setRemark("空托盘入库");
+ //appOrderIn.setProductionDate(request.abcSelect);
+ int a = appOrderInMapper.insert(appOrderIn);
+ if (a > 0){
+ log.info("空托盘回库任务生成成功,任务:{}", task.toLoggerString());
+ }else{
+ log.error("空托盘回库任务生成失败,任务:{}", task.toLoggerString());
+ }
+ }
+ }
+ }
+ //出库完成删除出库单
+ int deleteOrderOut = orderOutMapper.deleteOrderOut(task.getPickStand());
+ if (deleteOrderOut > 0){
+ log.info("出库单删除成功,任务:{}", task.toLoggerString());
+ }else{
+ log.error("出库单删除失败,任务:{}", task.toLoggerString());
+ }
+ //出库完成发送mes
+ Stock checkIsExist = new Stock();
+ checkIsExist.setLocationId(task.getOrigin());
+ List checkIsExistListResult = stockMapper.selStocks(checkIsExist);
+ //List stockUseSend = new ArrayList<>();
+ if (checkIsExistListResult == null || checkIsExistListResult.isEmpty()){
+ log.info("没有找到对应的数据,表中数据为空,信息:{}", task.toLoggerString());
+ return false;
+ }
+ Vehicle ab = new Vehicle();
+ ab.setVehicleId(checkIsExistListResult.get(0).getVehicleId());
+ ab.setCurrentLocation(task.getOrigin());
+ ab.setIsEmpty(0);
+ ab.setVehicleStatus(2);
+ int bd = vehicleMapper.deleteVehicle(ab);
+ if (bd == 0){
+ log.error("四向车出库完成更新料箱监控失败,任务:{},原因:更新载具为空状态失败", task.toLoggerString());
+ //return false;
+ }else{
+ log.info("四向车出库完成更新料箱监控成功,任务:{}", task.toLoggerString());
+ }
+ // 删除库存
+ int updateStock = stockMapper.deleteStockWithLocationId(task.getOrigin());
+ if(updateStock > 0){
+ log.info("出库完成删除库存成功,任务:{}", task.toLoggerString());
+ return true;
+ }else{
+ log.error("出库完成删除库存失败,任务:{}", task.toLoggerString());
+ return false;
+ }
+ } else if (Objects.equals(task.getRemark1(), "空托盘出库")) {
+ //出库完成删除出库单
+ int deleteOrderOut = orderOutMapper.deleteOrderOut(task.getPickStand());
+ if (deleteOrderOut > 0){
+ log.info("空托盘出库单删除成功,任务:{}", task.toLoggerString());
+ }else{
+ log.error("空托盘出库单删除失败,任务:{}", task.toLoggerString());
+ }
+ Vehicle ab = new Vehicle();
+ ab.setVehicleId(task.getVehicleNo());
+ ab.setCurrentLocation(task.getOrigin());
+ ab.setIsEmpty(1);
+ ab.setVehicleStatus(2);
+ int bd = vehicleMapper.deleteVehicle(ab);
+ if (bd == 0){
+ log.error("四向车空托出库完成更新料箱监控失败,任务:{},原因:更新载具为空状态失败", task.toLoggerString());
+ return false;
+ }else{
+ log.info("四向车空托出库完成更新料箱监控成功,任务:{}", task.toLoggerString());
+ return true;
}
}
- // 释放库位
- Location location = new Location();
- location.setLocationId(task.getDestination());
- location.setLocationStatus(LocationStatus.EMPTY.getCode());
- locationMapper.modifyLocation(location);
- return true;
+ log.error("不处理的出库任务,表中数据为空,信息:{}", task.toLoggerString());
+ return false;
}
+
+ /**
+ * 发送 mes 出库下架信息
+ * @param stocks 库存记录
+ * @param task 任务
+ */
+// private void sendMesPutOutGoods(List stocks, Task task) {
+// try {
+// SendMesPutOutGoodsRequest request = new SendMesPutOutGoodsRequest();
+// request.setGuid(task.getTaskId());
+// request.setTransferNo(task.getTaskGroup());
+// if (Objects.equals(task.getRemark1(), "手动出库")){
+// request.setType(4);
+// }else{
+// request.setType(task.getTaskType());
+// }
+// List rows = new ArrayList<>();
+// int lint = 1;
+// if (stocks == null || stocks.isEmpty()){
+// log.error("发送MES出库下架失败,没有收到ROW所需要的数据,信息:{}", task.toLoggerString());
+// return;
+// }
+// for(Stock stock : stocks) {
+// SendMesPutOutGoodsRow row = new SendMesPutOutGoodsRow();
+// row.setTransferLine(String.valueOf(lint));
+// row.setLosnr(stock.getBatchNo());
+// row.setVehicleNo(stock.getVehicleId());
+// row.setWarehouse(stock.getWarehouseName());
+// row.setLotQty(String.valueOf(stock.getRealNum() - stock.getAvailableNum()));
+// rows.add(row);
+// lint++;
+// }
+// request.setRow(rows);
+// String requestString = JSON.toJSONString(request);
+// String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_MES_OUT.getValue(), requestString);
+// MesApiLocalResponse result = JSON.parseObject(responseString, MesApiLocalResponse.class);
+// if(result != null && result.getTransFlag().equals(1)) {
+// log.info("发送MES出库下架成功,信息:{}", requestString);
+// }else{
+// log.warn("发送MES出库下架失败,信息:{},返回信息:{}", requestString, responseString);
+// }
+// }catch (Exception e){
+// log.error("发送MES出库下架失败异常,信息:{}", e.getMessage());
+// }
+// }
+
+
+
+ /**
+ * 完成盘点任务
+ * @param task 任务
+ * @return 完成结果
+ */
private boolean completeInventoryTask(Task task) {
- return true;
+ /* 找出任务,完成该任务;找出该任务终点,删除库存;释放库位 */
+ // 完成任务
+ 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); // 更新库位为空
+ // 根据起点拉取库位库存,剩下数量不为零的数据搬运到入库单 生成回库任务,删除该库位所有库存
+ List stocks = stockMapper.selStocksByLocationId(task.getOrigin());
+ if (stocks == null || stocks.isEmpty()){
+ log.error("完成盘点出库拉取库存失败,任务:{},原因:没有找到库存数据", task.toLoggerString());
+ return false;
+ }
+ for (Stock stock : stocks){
+ if (stock.getAvailableNum() > 0){
+ AppOrderIn appOrderIn = new AppOrderIn();
+ appOrderIn.setRowId(WmsUtils.generateUUIDString());
+ appOrderIn.setGuid(stock.getStockId());
+ appOrderIn.setInType(1);
+ appOrderIn.setBatchNo(stock.getBatchNo());
+ appOrderIn.setVehicleNo(task.getVehicleNo());
+ appOrderIn.setGoodsId(stock.getGoodsId());
+ appOrderIn.setGoodsNum(BigDecimal.valueOf(stock.getAvailableNum()));
+ appOrderIn.setWareHouse(stock.getWarehouseName());
+ if (stock.getVehicleId() != null && !stock.getVehicleId().isEmpty()){
+ appOrderIn.setOrderStatus(2);
+ }else {
+ appOrderIn.setOrderStatus(0);
+ }
+ //appOrderIn.setOrderStatus(2);
+ appOrderIn.setCreateTime(LocalDateTime.now());
+ appOrderIn.setUpdateTime(LocalDateTime.now());
+ appOrderIn.setCreatePerson("BACK");
+ appOrderIn.setRemark("盘点回库");
+ int isSuessInsert = appOrderInMapper.insert(appOrderIn);
+ if(isSuessInsert > 0){
+ log.info("盘点回库任务生成成功,任务:{}", task.toLoggerString());
+ }else{
+ log.error("盘点回库任务生成失败,任务:{}", task.toLoggerString());
+ }
+ }
+ }
+ // 盘点出库完成发送mes
+// Stock checkIsExist = new Stock();
+// checkIsExist.setLocationId(task.getOrigin());
+// List checkIsExistListResult = stockMapper.selStocks(checkIsExist);
+// sendMesInventoryGoods(checkIsExistListResult, task);
+// Stock addStock = stocks.get(0);
+// addStock.setAvailableNum(0);
+ // 发送库存接口给mes
+ //sendMesLocation(addStock, task.getOrigin());
+ // 删除库存????
+ int updateStock = stockMapper.deleteStockWithLocationId(task.getOrigin());
+ if(updateStock > 0){
+ log.info("盘点出库完成删除库存成功,任务:{}", task.toLoggerString());
+ return true;
+ }
+ return false;
}
+
+// /**
+// * 完成盘点任务
+// * @param task 任务
+// */
+// private void sendMesInventoryGoods(List stocks, Task task) {
+// try {
+// SendMesGoodsInventoryRequest request = new SendMesGoodsInventoryRequest();
+// request.setGuid(task.getTaskId());
+// request.setInventoryNo(task.getTaskGroup());
+//
+// List rows = new ArrayList<>();
+// for(Stock stock : stocks) {
+// SendMesGoodsInventoryRow row = new SendMesGoodsInventoryRow();
+// row.setLosnr(stock.getBatchNo());
+// row.setWarehouse(stock.getWarehouseName());
+// row.setLotQty(String.valueOf(stock.getRealNum()));
+// rows.add(row);
+// }
+// request.setRow(rows);
+// String requestString = JSON.toJSONString(request);
+// String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_MES_INVENTORY.getValue(), requestString);
+// MesApiLocalResponse result = JSON.parseObject(responseString, MesApiLocalResponse.class);
+// if(result != null && result.getTransFlag().equals(1)) {
+// log.info("发送MES盘点执行成功,信息:{}", requestString);
+// }else{
+// log.warn("发送MES盘点执行失败,信息:{},返回信息:{}", requestString, responseString);
+// }
+// }catch (Exception e){
+// log.error("发送MES盘点执行失败异常,信息:{}", e.getMessage());
+// }
+// }
+
+ /**
+ * 完成移库任务
+ * @param task 任务
+ * @return 完成结果
+ */
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;
- }
+ /* 找出任务,更新任务为完成;释放原库位;更新库存到新库位 */
+ // 完成任务
+ Task completeTask = new Task();
+ completeTask.setTaskId(task.getTaskId());
+ completeTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
+ completeTask.setFinishTime(new Date());
+ taskMapper.executeTask(completeTask); // 完成任务
// 释放原库位
- Location location = new Location();
- location.setLocationId(task.getOrigin());
- location.setLocationStatus(LocationStatus.EMPTY.getCode());
- locationMapper.modifyLocation(location);
- return true;
+ // 释放库位
+ Location updateLocation = new Location();
+ updateLocation.setLocationId(task.getOrigin());
+ updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
+ updateLocation.setVehicleId("");
+ locationMapper.modifyLocation(updateLocation); // 更新库位为空
+ // 占掉新库位,生成的时候会占,这里重复操作保护
+ Location occupyLocation = new Location();
+ occupyLocation.setLocationId(task.getDestination());
+ occupyLocation.setLocationStatus(LocationStatus.OCCUPY.getCode());
+ occupyLocation.setVehicleId(task.getVehicleNo());
+ locationMapper.modifyLocation(occupyLocation); // 更新库位
+ String checkUse = task.getRemark1();
+// if (Objects.equals(checkUse, "空框")){
+ //只需要更新料箱监控
+ Vehicle vehicle = new Vehicle();
+ vehicle.setCurrentLocation(task.getDestination());
+ vehicle.setVehicleId(task.getVehicleNo());
+ int a = vehicleMapper.modifyVehicle(vehicle);
+ if (a > 0){
+ log.info("更新料箱监控成功");
+ }else{
+ log.info("更新料箱监控失败");
+ }
+// }
+ if (Objects.equals(checkUse, "带料")) {
+ //需要额外更新库存
+ int updatedLocation = stockMapper.updateLocationAndStatus(task.getOrigin(), task.getDestination(), StockStatus.OK.getCode());
+ if(updatedLocation > 0){
+ log.info("移库库位更新成功,任务:{}", task.toLoggerString());
+ return true;
+ }else {
+ log.info("移库库位更新失败,任务:{}", task.toLoggerString());
+ }
+ } else if (Objects.equals(checkUse, "空框")) {
+ log.info("空框移库库位更新成功");
+ return true;
+ }
+ // 更新库位
+ return false;
}
+
+// /**
+// * 完成移库任务
+// * @param task 任务
+// * @return 完成结果
+// */
+// private void sendMesPutMoveGoods(Stock stock, Task task) {
+// try {
+// SendMesGoodsMoveRequest request = new SendMesGoodsMoveRequest();
+// request.setGuid(stock.getStockId());
+// request.setLosnr(stock.getBatchNo());
+// request.setFBinCode(task.getOrigin());
+// request.setLotQty(String.valueOf(stock.getRealNum()));
+// request.setTBinCode(task.getDestination());
+// String requestString = JSON.toJSONString(request);
+// String responseString = HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_MES_MOVE.getValue(), requestString);
+// MesApiLocalResponse result = JSON.parseObject(responseString, MesApiLocalResponse.class);
+// if(result != null && result.getTransFlag().equals(1)) {
+// log.info("发送MES批次调整(移库)成功,信息:{}", requestString);
+// }
+// log.warn("发送MES批次调整(移库)失败,信息:{},返回信息:{}", requestString, responseString);
+// }catch (Exception e){
+// log.error("发送MES批次调整(移库)失败异常,信息:{}", e.getMessage());
+// }
+// }
+
+
+
+
//endregion
@@ -217,28 +697,26 @@ public class TaskOperation {
* @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()));
- }
+ /* 找出任务,取消该任务;找出该任务终点,更新库存为OK */
+ // 取消任务
+ Task completeTask = new Task();
+ completeTask.setTaskId(task.getTaskId());
+ completeTask.setTaskStatus(WmsTaskStatus.CANCEL.getCode());
+ completeTask.setFinishTime(new Date());
+ taskMapper.executeTask(completeTask); // 取消任务
// 释放库位
- Location location = new Location();
- location.setLocationId(task.getDestination());
- location.setLocationStatus(LocationStatus.EMPTY.getCode());
- locationMapper.modifyLocation(location);
- return true;
+ Location updateLocation = new Location();
+ updateLocation.setLocationId(task.getDestination());
+ updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
+ updateLocation.setVehicleId("");
+ locationMapper.modifyLocation(updateLocation); // 更新库位为空
+ // 更新库存为 ok ???????
+ int updateStock = stockMapper.updateStockStatusWithLocationId(task.getDestination(), StockStatus.OK.getCode());
+ if(updateStock > 0){
+ log.info("入库取消更新库存成功,任务:{}", task.toLoggerString());
+ return true;
+ }
+ return false;
}
/**
@@ -247,51 +725,70 @@ public class TaskOperation {
* @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;
+ /* 找出任务,取消该任务;找出该任务终点,删除库存;释放库位 */
+ // 取消任务
+ 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 true;
}
- // 更新库存信息为库存中
- 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;
+ return false;
}
+ /**
+ * 取消盘点任务
+ * @param task 任务
+ * @return 取消结果
+ */
private boolean cancelInventoryTask(Task task) {
- return true;
+ /* 找出任务,取消该任务;找出该任务终点,删除库存;释放库位 */
+ // 取消任务
+ 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 true;
+ }
+ return false;
}
+ /**
+ * 取消移库任务
+ * @param task 任务
+ * @return 取消结果
+ */
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;
+ /* 找出任务,更新任务为取消;释放新库位;更新库存为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 true;
}
- // 更新库存信息为库存中
- 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;
+ return false;
}
diff --git a/src/main/java/com/wms/constants/enums/OrderInStatusEnum.java b/src/main/java/com/wms/constants/enums/OrderInStatusEnum.java
new file mode 100644
index 0000000..2889e62
--- /dev/null
+++ b/src/main/java/com/wms/constants/enums/OrderInStatusEnum.java
@@ -0,0 +1,26 @@
+package com.wms.constants.enums;
+
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * 订单入库状态枚举
+ *
+ * @author 菻蔃
+ */
+@Getter
+public enum OrderInStatusEnum {
+ CREATE(0, "创建"),
+ IN(1, "入库中"),
+ BINDING(2, "已绑定"),
+ ;
+
+ private final int code;
+ private final String desc;
+
+ OrderInStatusEnum(int code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+}
diff --git a/src/main/java/com/wms/constants/enums/OrderOutStatusEnum.java b/src/main/java/com/wms/constants/enums/OrderOutStatusEnum.java
index 7cd7fe9..44bd213 100644
--- a/src/main/java/com/wms/constants/enums/OrderOutStatusEnum.java
+++ b/src/main/java/com/wms/constants/enums/OrderOutStatusEnum.java
@@ -8,7 +8,8 @@ import lombok.Getter;
@Getter
public enum OrderOutStatusEnum {
- CREATED(0, "已创建");
+ CREATED(0, "已创建"),
+ RUNNING(1, "执行中");
private final int code;
diff --git a/src/main/java/com/wms/constants/enums/StockStatus.java b/src/main/java/com/wms/constants/enums/StockStatus.java
index a61cfce..1916518 100644
--- a/src/main/java/com/wms/constants/enums/StockStatus.java
+++ b/src/main/java/com/wms/constants/enums/StockStatus.java
@@ -5,9 +5,7 @@ package com.wms.constants.enums;
*/
public enum StockStatus {
WAIT_IN(-2, "待入库"),
-
IN_ING(-1, "正在入库"),
-
OK(0, "库存正常"),
OUT(1, "准备出库"),
MOVING(2, "正在出库"),
diff --git a/src/main/java/com/wms/constants/enums/UrlEnums.java b/src/main/java/com/wms/constants/enums/UrlEnums.java
index df26a97..c9f01e3 100644
--- a/src/main/java/com/wms/constants/enums/UrlEnums.java
+++ b/src/main/java/com/wms/constants/enums/UrlEnums.java
@@ -1,10 +1,17 @@
package com.wms.constants.enums;
-
+//172.21.80.151
public enum UrlEnums {
- 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("扫码上架", "");
+ URL_WMS_TO_WCS_SEND_TASK("WMS向WCS发送任务", "http://172.168.1.99:18990/api/wms/wmsTask/setStackerTask"),
+ URL_WMS_TO_WCS_CHANGE_TASK("WMS请求变更任务状态", "http://172.168.1.99:18990/api/Wms/WmsTask/ChangeTaskStatus"),
+ URL_WMS_TO_WCS_CONTAINER_TASK("WMS向四向车发送任务","http://172.168.1.99:9991/api/Wcs/PushTask"),
+ URL_WMS_TO_WCS_CONTAINERIN_TASK("WMS向四向车发送入库任务","http://172.168.1.99:19990/api/container/createInstoreTask");
+ //URL_WMS_TO_MES_IN("扫码上架", "http://172.21.73.210:9000/Asimco/vmesserver/wms_interface/LotGround"),
+ //URL_WMS_TO_MES_OUT("批次出库", "http://172.21.73.210:9000/Asimco/vmesserver/wms_interface/ReceiptOut"),
+ //URL_WMS_TO_MES_INVENTORY("盘点执行", "http://172.21.73.210:9000/Asimco/vmesserver/wms_interface/InventoryResult"),
+ //URL_WMS_TO_MES_STOCK("库存", "http://172.21.73.210:9000/Asimco/vmesserver/wms_interface/WMSStorage");
+ //URL_WMS_TO_MES_MOVE("批次调整", "http://172.21.73.210:9000/Asimco/vmesserver/wms_interface/LotAD");
+
+
private final String description;
private final String value;
diff --git a/src/main/java/com/wms/controller/LocationController.java b/src/main/java/com/wms/controller/LocationController.java
index ae9269a..967b60c 100644
--- a/src/main/java/com/wms/controller/LocationController.java
+++ b/src/main/java/com/wms/controller/LocationController.java
@@ -69,8 +69,12 @@ public class LocationController extends BaseController {
ResponseEntity rsp = new ResponseEntity();
try {
// 查询出所有符合条件的库位
- List locations = locationService.selLocations(location);
- if (locations.size() < 1) {
+ Location location1 = new Location();
+ //location1.setLocationId("A11-15-2");
+ //location1.setWareArea("A");
+ location1.setAreaId(2);
+ List locations = locationService.selLocations(location1);
+ if (locations.isEmpty()) {
logger.error("查询库位发生错误:库位不存在");
// 返回错误
rsp.setCode(ResponseCode.ERROR.getCode());
diff --git a/src/main/java/com/wms/controller/OrderCheckController.java b/src/main/java/com/wms/controller/OrderCheckController.java
new file mode 100644
index 0000000..2747349
--- /dev/null
+++ b/src/main/java/com/wms/controller/OrderCheckController.java
@@ -0,0 +1,60 @@
+package com.wms.controller;
+
+import com.wms.entity.common.WmsApiResponse;
+import com.wms.entity.dto.orderCheck.queryOrderCheckRequest;
+import com.wms.entity.table.OrderCheck;
+import com.wms.service.IOrderCheckService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@CrossOrigin
+@RequestMapping(value = "/wms/api/orderCheck")
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class OrderCheckController {
+
+
+ private final IOrderCheckService orderCheckService;
+
+ /**
+ * 查询订单
+ */
+ @PostMapping(value = "/queryOrderCheck")
+ public WmsApiResponse> getOrderCheck(@RequestBody queryOrderCheckRequest request) {
+ return orderCheckService.queryOrderCheck(request);
+ }
+
+ /**
+ * 执行订单
+ */
+ @PutMapping(value = "/executeOrderCheck/{recordId}") //更新
+ public WmsApiResponse