|
@@ -1,21 +1,20 @@
|
|
|
package com.ruoyi.ams.task.service.impl;
|
|
|
|
|
|
-import java.lang.reflect.Method;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
import com.ruoyi.ams.agv.ndc.domain.AmsTask;
|
|
|
-import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
|
|
|
import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
|
|
|
import com.ruoyi.ams.box.service.IWmsBoxInfoService;
|
|
|
import com.ruoyi.ams.config.domain.FlowConfigEvent;
|
|
|
import com.ruoyi.ams.config.service.IFlowConfigEventService;
|
|
|
-import com.ruoyi.ams.inv.domain.InvLotAtt;
|
|
|
import com.ruoyi.ams.inv.domain.InvLotLocId;
|
|
|
import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
|
|
|
import com.ruoyi.ams.inv.service.IInvLotAttService;
|
|
|
import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
|
+import com.ruoyi.ams.task.domain.WcsTask;
|
|
|
import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
|
|
|
+import com.ruoyi.ams.task.mapper.WcsTaskMapper;
|
|
|
+import com.ruoyi.ams.task.service.IWcsTaskService;
|
|
|
import com.ruoyi.base.constant.Constant;
|
|
|
import com.ruoyi.base.domain.BaseLocationInfo;
|
|
|
import com.ruoyi.base.service.IBaseLocationInfoService;
|
|
@@ -28,11 +27,13 @@ import com.ruoyi.hard.modbus.tcp.AutoDoorClient;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.ruoyi.ams.task.mapper.WcsTaskMapper;
|
|
|
-import com.ruoyi.ams.task.domain.WcsTask;
|
|
|
-import com.ruoyi.ams.task.service.IWcsTaskService;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.lang.reflect.Method;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
/**
|
|
|
* AGV任务Service业务层处理
|
|
|
*
|
|
@@ -66,6 +67,8 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
|
|
|
@Autowired
|
|
|
private AutoDoorClient autoDoorClient;
|
|
|
|
|
|
+ private final List<Integer> statusList = Arrays.asList(1, 2, 4, 7);;
|
|
|
+
|
|
|
//任务状态翻译
|
|
|
private String codeConvert(int code) {
|
|
|
switch (code) {
|
|
@@ -264,23 +267,12 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public AjaxResult cancelTask(WcsTask wcsTask) {
|
|
|
-
|
|
|
- String taskNo = wcsTask.getTaskNo();
|
|
|
- // 任务状态: 队列等待 直接删除即可 其他状态 需要请求AMS删除
|
|
|
- if (wcsTask.getState() == Constant.TASK_STS.TASK9.getValue().longValue()
|
|
|
- || wcsTask.getState() == Constant.TASK_STS.TASK10.getValue().longValue()) {
|
|
|
- return callBack(wcsTask.getTaskNo(), 7, null);
|
|
|
- } else {
|
|
|
- //请求ams 取消任务
|
|
|
- AmsTask amsTaskQuery = new AmsTask();
|
|
|
- amsTaskQuery.setTaskNo(taskNo);
|
|
|
- AmsTask amsTask = iAmsTaskService.selectAmsTaskByModel(amsTaskQuery);
|
|
|
- if (amsTask == null) {
|
|
|
- return AjaxResult.error("amsTask没有对应任务!");
|
|
|
- }
|
|
|
- if (null != amsTask.getEvent() && amsTask.getEvent() == 85) {
|
|
|
- return AjaxResult.error("任务已取消!");
|
|
|
- }
|
|
|
+ callBack(wcsTask.getTaskNo(), 7, null);
|
|
|
+ //请求ams 取消任务
|
|
|
+ AmsTask amsTaskQuery = new AmsTask();
|
|
|
+ amsTaskQuery.setTaskNo(wcsTask.getTaskNo());
|
|
|
+ AmsTask amsTask = iAmsTaskService.selectAmsTaskByModel(amsTaskQuery);
|
|
|
+ if (ObjectUtil.isNotNull(amsTask)) {
|
|
|
AmsTask amsTaskUpdate = new AmsTask();
|
|
|
amsTaskUpdate.setId(amsTask.getId());
|
|
|
amsTaskUpdate.setIsDelete(1);
|
|
@@ -368,127 +360,131 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
|
|
|
log.info("已取消的任务无需重复取消");
|
|
|
return AjaxResult.error("已取消的任务无需重复取消");
|
|
|
}
|
|
|
- //转发类型任务才回调
|
|
|
- if (wcsTask.getTaskType().equals(Constant.TASK_TYPE.FORWARD.getValue())) {
|
|
|
- try {
|
|
|
- switch (state) {
|
|
|
- case 1:
|
|
|
- wcsTask.setStartTime(new Date());
|
|
|
- break;
|
|
|
- case 2://完成
|
|
|
- if (wcsTask.getState() != 4
|
|
|
- && (StringUtils.isEmpty(wcsTask.getBeforeTask()) || !wcsTask.getBeforeTask().equals("1"))) {
|
|
|
- log.info("任务未取货,不能直接完成!" + taskNo);
|
|
|
- return AjaxResult.error("任务未取货,不能直接完成!" + taskNo);
|
|
|
- }
|
|
|
- if (wcsTask.getState() == 2) {
|
|
|
- log.info("不能重复放货," + taskNo);
|
|
|
- return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
- }
|
|
|
- if (wcsTask.getState() == 6) {
|
|
|
- return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
- }
|
|
|
- wcsTask.setEndTime(new Date());
|
|
|
- // 解锁终点库位
|
|
|
- baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
|
|
|
- , Constant.WAREHOUSE_ID, updateBy);
|
|
|
- // 将中间缓存位库存移动到终点
|
|
|
- moveMiddleCacheToDestination(wcsTask);
|
|
|
- //释放redis锁
|
|
|
- if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
- redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
- }
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- if (wcsTask.getState() == 4) {
|
|
|
- log.info("不能重复取货," + taskNo);
|
|
|
- return AjaxResult.error("不能重复取货," + taskNo);
|
|
|
- }
|
|
|
- if (wcsTask.getBeforeTask() != null && wcsTask.getBeforeTask().equals("1")) {
|
|
|
- log.info("不能重复取货," + taskNo);
|
|
|
- return AjaxResult.error("不能重复取货," + taskNo);
|
|
|
- }
|
|
|
- // 标记已经取货完成
|
|
|
- wcsTask.setBeforeTask("1");
|
|
|
- // 解锁起始库位
|
|
|
- baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
|
|
|
- , Constant.WAREHOUSE_ID, updateBy);
|
|
|
- // 将起始点库存移动到中间缓存位
|
|
|
- moveStartingPointToMiddleCache(wcsTask);
|
|
|
-
|
|
|
- //释放redis锁
|
|
|
- if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
- redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()), wcsTask.getLocationFrom());
|
|
|
- }
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- break;
|
|
|
- case 6://卸货
|
|
|
- if (wcsTask.getState() != 4
|
|
|
- && (StringUtils.isEmpty(wcsTask.getBeforeTask())|| !wcsTask.getBeforeTask().equals("1"))) {
|
|
|
- log.info("任务未取货,不能直接完成!" + taskNo);
|
|
|
- return AjaxResult.error("任务未取货,不能直接完成!" + taskNo);
|
|
|
- }
|
|
|
- if (wcsTask.getState() == 2) {
|
|
|
- log.info("不能重复放货," + taskNo);
|
|
|
- return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
- }
|
|
|
- if (wcsTask.getState() == 6) {
|
|
|
- return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
- }
|
|
|
- wcsTask.setEndTime(new Date());
|
|
|
- // 解锁终点库位
|
|
|
- baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
|
|
|
- , Constant.WAREHOUSE_ID, updateBy);
|
|
|
- // 将中间缓存位库存移动到终点
|
|
|
- moveMiddleCacheToDestination(wcsTask);
|
|
|
- //释放redis锁
|
|
|
- if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
- redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
- }
|
|
|
- break;
|
|
|
- case 7://取消
|
|
|
- wcsTask.setEndTime(new Date());
|
|
|
- //如果取到货就只解锁终点库位
|
|
|
- if (wcsTask.getState() == 4 || wcsTask.getState() == 5) {
|
|
|
- // 解锁终点库位
|
|
|
- baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
|
|
|
- , Constant.WAREHOUSE_ID, updateBy);
|
|
|
- } else {
|
|
|
- // 解锁终点和起始库位
|
|
|
- baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Long.parseLong(wcsTask.getLocationTo())
|
|
|
- , Constant.WAREHOUSE_ID, updateBy);
|
|
|
- }
|
|
|
- //释放redis锁
|
|
|
- if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
- redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
- }
|
|
|
- // 取消任务删除中间缓存库存
|
|
|
-// cancelTaskDelMiddleCache(wcsTask);
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- log.error("任务异常状态------------" + wcsTask.getTaskNo());
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- log.info(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常", e);
|
|
|
- wcsTask.setRemark("回调状态:" + state + "异常");
|
|
|
- //释放redis锁
|
|
|
- if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
- redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
- }
|
|
|
- throw new RuntimeException();
|
|
|
- }
|
|
|
- } else {
|
|
|
-
|
|
|
- }
|
|
|
+// //转发类型任务才回调
|
|
|
+// if (wcsTask.getTaskType().equals(Constant.TASK_TYPE.FORWARD.getValue())) {
|
|
|
+// try {
|
|
|
+// switch (state) {
|
|
|
+// case 1:
|
|
|
+// wcsTask.setStartTime(new Date());
|
|
|
+// break;
|
|
|
+// case 2://完成
|
|
|
+// if (wcsTask.getState() != 4
|
|
|
+// && (StringUtils.isEmpty(wcsTask.getBeforeTask()) || !wcsTask.getBeforeTask().equals("1"))) {
|
|
|
+// log.info("任务未取货,不能直接完成!" + taskNo);
|
|
|
+// return AjaxResult.error("任务未取货,不能直接完成!" + taskNo);
|
|
|
+// }
|
|
|
+// if (wcsTask.getState() == 2) {
|
|
|
+// log.info("不能重复放货," + taskNo);
|
|
|
+// return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
+// }
|
|
|
+// if (wcsTask.getState() == 6) {
|
|
|
+// return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
+// }
|
|
|
+// wcsTask.setEndTime(new Date());
|
|
|
+// // 解锁终点库位
|
|
|
+// baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
|
|
|
+// , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+// // 将中间缓存位库存移动到终点
|
|
|
+// moveMiddleCacheToDestination(wcsTask);
|
|
|
+// //释放redis锁
|
|
|
+// if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
+// redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
+// }
|
|
|
+// break;
|
|
|
+// case 3:
|
|
|
+// break;
|
|
|
+// case 4:
|
|
|
+// if (wcsTask.getState() == 4) {
|
|
|
+// log.info("不能重复取货," + taskNo);
|
|
|
+// return AjaxResult.error("不能重复取货," + taskNo);
|
|
|
+// }
|
|
|
+// if (wcsTask.getBeforeTask() != null && wcsTask.getBeforeTask().equals("1")) {
|
|
|
+// log.info("不能重复取货," + taskNo);
|
|
|
+// return AjaxResult.error("不能重复取货," + taskNo);
|
|
|
+// }
|
|
|
+// // 标记已经取货完成
|
|
|
+// wcsTask.setBeforeTask("1");
|
|
|
+// // 解锁起始库位
|
|
|
+// baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
|
|
|
+// , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+// // 将起始点库存移动到中间缓存位
|
|
|
+// moveStartingPointToMiddleCache(wcsTask);
|
|
|
+//
|
|
|
+// //释放redis锁
|
|
|
+// if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
+// redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()), wcsTask.getLocationFrom());
|
|
|
+// }
|
|
|
+// break;
|
|
|
+// case 5:
|
|
|
+// break;
|
|
|
+// case 6://卸货
|
|
|
+// if (wcsTask.getState() != 4
|
|
|
+// && (StringUtils.isEmpty(wcsTask.getBeforeTask())|| !wcsTask.getBeforeTask().equals("1"))) {
|
|
|
+// log.info("任务未取货,不能直接完成!" + taskNo);
|
|
|
+// return AjaxResult.error("任务未取货,不能直接完成!" + taskNo);
|
|
|
+// }
|
|
|
+// if (wcsTask.getState() == 2) {
|
|
|
+// log.info("不能重复放货," + taskNo);
|
|
|
+// return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
+// }
|
|
|
+// if (wcsTask.getState() == 6) {
|
|
|
+// return AjaxResult.error("不能重复放货," + taskNo);
|
|
|
+// }
|
|
|
+// wcsTask.setEndTime(new Date());
|
|
|
+// // 解锁终点库位
|
|
|
+// baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
|
|
|
+// , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+// // 将中间缓存位库存移动到终点
|
|
|
+// moveMiddleCacheToDestination(wcsTask);
|
|
|
+// //释放redis锁
|
|
|
+// if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
+// redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
+// }
|
|
|
+// break;
|
|
|
+// case 7://取消
|
|
|
+// wcsTask.setEndTime(new Date());
|
|
|
+// //如果取到货就只解锁终点库位
|
|
|
+// if (wcsTask.getState() == 4 || wcsTask.getState() == 5) {
|
|
|
+// // 解锁终点库位
|
|
|
+// baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
|
|
|
+// , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+// } else {
|
|
|
+// // 解锁终点和起始库位
|
|
|
+// baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Long.parseLong(wcsTask.getLocationTo())
|
|
|
+// , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+// }
|
|
|
+// //释放redis锁
|
|
|
+// if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
+// redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
+// }
|
|
|
+// // 取消任务删除中间缓存库存
|
|
|
+//// cancelTaskDelMiddleCache(wcsTask);
|
|
|
+// break;
|
|
|
+// case 8:
|
|
|
+// log.error("任务异常状态------------" + wcsTask.getTaskNo());
|
|
|
+// break;
|
|
|
+// default:
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// } catch (Exception e) {
|
|
|
+// log.info(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常", e);
|
|
|
+// wcsTask.setRemark("回调状态:" + state + "异常");
|
|
|
+// //释放redis锁
|
|
|
+// if (!StringUtils.isEmpty(wcsTask.getExt8())) {
|
|
|
+// redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
|
|
|
+// }
|
|
|
+// throw new RuntimeException();
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+//
|
|
|
+// }
|
|
|
+ wcsTask.setUpdateBy(updateBy);
|
|
|
wcsTask.setState(state.longValue());
|
|
|
wcsTask.setUpdateDate(new Date());
|
|
|
wcsTaskService.updateWcsTask(wcsTask);
|
|
|
+ if (statusList.contains(state)) {
|
|
|
+ SpringUtil.getApplicationContext().publishEvent(wcsTask);
|
|
|
+ }
|
|
|
return AjaxResult.success("操作成功!");
|
|
|
}
|
|
|
|