|
@@ -2,20 +2,32 @@ package com.ruoyi.ams.xuankuang.service;
|
|
|
|
|
|
import com.ruoyi.ams.task.domain.WcsTask;
|
|
|
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;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
+import com.ruoyi.common.core.domain.model.LoginUser;
|
|
|
+import com.ruoyi.common.utils.StringUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
|
|
|
/**
|
|
|
* @author JWK
|
|
|
* @version 1.0
|
|
|
* @date 2023/4/4 10:48
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class WcsTaskSubService {
|
|
|
|
|
|
@Autowired
|
|
|
private IWcsTaskService iWcsTaskService;
|
|
|
+ @Autowired
|
|
|
+ private IBaseLocationInfoService iBaseLocationInfoService;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -23,12 +35,134 @@ public class WcsTaskSubService {
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
- public AjaxResult addWcsTask() {
|
|
|
+ public AjaxResult addWcsTask(String locationFrom, String locationTo
|
|
|
+ , String asnNo
|
|
|
+ , String palletNo
|
|
|
+ , String wcsNo) {
|
|
|
+
|
|
|
+ BaseLocationInfo baseLocationInfoFrom = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, 1l);
|
|
|
+ BaseLocationInfo baseLocationInfoTo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, 1l);
|
|
|
+
|
|
|
+ String taskNo = System.currentTimeMillis() + "";
|
|
|
WcsTask wcsTask = new WcsTask();
|
|
|
+ wcsTask.setTaskNo(taskNo);
|
|
|
+ wcsTask.setState(10L);
|
|
|
+ wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
|
|
|
+ wcsTask.setBusinessType("01");
|
|
|
+ wcsTask.setAreaFrom(baseLocationInfoFrom.getZoneId().toString());
|
|
|
+ wcsTask.setLocationFrom(baseLocationInfoFrom.getId().toString());
|
|
|
+ wcsTask.setAreaTo(baseLocationInfoTo.getZoneId().toString());
|
|
|
+ wcsTask.setLocationTo(baseLocationInfoTo.getId().toString());
|
|
|
+ wcsTask.setCreateTime(new Date());
|
|
|
+ wcsTask.setCreateBy("Wcs");
|
|
|
+ wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
|
|
|
+ wcsTask.setPriority(10L);
|
|
|
+ wcsTask.setExt1(asnNo);
|
|
|
+ wcsTask.setExt2(palletNo);
|
|
|
+ wcsTask.setExt3(wcsNo);
|
|
|
+ wcsTask.setRemark("立体库任务");
|
|
|
int i = iWcsTaskService.insertWcsTask(wcsTask);
|
|
|
if (i > 0) {
|
|
|
- return AjaxResult.success("任务增加成功!");
|
|
|
+ iBaseLocationInfoService.lockLocationStockStatus(Long.valueOf(wcsTask.getLocationFrom())
|
|
|
+ , Long.valueOf(wcsTask.getLocationTo())
|
|
|
+ , Constant.WAREHOUSE_ID, "Wcs");
|
|
|
+ return AjaxResult.success("任务增加成功!", taskNo);
|
|
|
}
|
|
|
return AjaxResult.error("任务增加失败");
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * wcs任务反馈
|
|
|
+ *
|
|
|
+ * @param taskNo
|
|
|
+ * @param state
|
|
|
+ * @param carNo
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public void callBack(String taskNo, Integer state, Integer carNo) {
|
|
|
+ String updateBy = "Wcs";
|
|
|
+ log.info("wcs回传------------->" + taskNo + "," + state);
|
|
|
+ WcsTask wcsTask = iWcsTaskService.selectWcsTaskByTaskNo(taskNo);
|
|
|
+ if (wcsTask == null) {
|
|
|
+ log.info("agv回传没有任务记录------------->");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (state > 1 && state != 7) {
|
|
|
+ wcsTask.setAgvNo(carNo + "");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wcsTask.getState() == 2 || wcsTask.getState() == 7) {
|
|
|
+ log.info("已完成的任务无需反馈");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ switch (state) {
|
|
|
+ case 1:
|
|
|
+ wcsTask.setStartTime(new Date());
|
|
|
+ break;
|
|
|
+ case 2://完成
|
|
|
+ if (wcsTask.getState() == 2) {
|
|
|
+ log.info("不能重复放货," + taskNo);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ wcsTask.setEndTime(new Date());
|
|
|
+ // 解锁库位
|
|
|
+ iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
|
|
|
+ , Long.parseLong(wcsTask.getLocationTo())
|
|
|
+ , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+ // 将起始点库存移动到终点库位
|
|
|
+ iWcsTaskService.moveStartingPointToDestination(wcsTask);
|
|
|
+ // todo 修改入库单收货数量
|
|
|
+ completeTheCallback(wcsTask);
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+// if (wcsTask.getState() == 4) {
|
|
|
+// log.info("不能重复取货," + taskNo);
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// // 解锁起始库位
|
|
|
+// iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
|
|
|
+// , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+// // 将起始点库存移动到中间缓存位
|
|
|
+// iWcsTaskService.moveStartingPointToMiddleCache(wcsTask);
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 7://取消
|
|
|
+ wcsTask.setEndTime(new Date());
|
|
|
+ // 解锁终点和起始库位
|
|
|
+ iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Long.parseLong(wcsTask.getLocationTo())
|
|
|
+ , Constant.WAREHOUSE_ID, updateBy);
|
|
|
+ // 取消任务删除中间缓存库存
|
|
|
+// cancelTaskDelMiddleCache(wcsTask);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常", e);
|
|
|
+ wcsTask.setRemark("回调状态:" + state + "异常");
|
|
|
+ throw new RuntimeException();
|
|
|
+ }
|
|
|
+ wcsTask.setState(state.longValue());
|
|
|
+ wcsTask.setUpdateDate(new Date());
|
|
|
+ iWcsTaskService.updateWcsTask(wcsTask);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 任务完成糊回调
|
|
|
+ *
|
|
|
+ * @param wcsTask
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public AjaxResult completeTheCallback(WcsTask wcsTask) {
|
|
|
+ // 托盘号
|
|
|
+ String ext1 = wcsTask.getExt1();
|
|
|
+ // 入库单号
|
|
|
+ String ext2 = wcsTask.getExt2();
|
|
|
+ return AjaxResult.success("");
|
|
|
+ }
|
|
|
}
|