From e3508915adca349eb4adfc2c50ce808696e730f4 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 03 三月 2026 13:59:43 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/service/CommonService.java | 280 ++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 214 insertions(+), 66 deletions(-)
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 8112db3..73e20a9 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,6 +1,5 @@
package com.zy.common.service;
-import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
@@ -8,20 +7,26 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
+import com.zy.common.entity.FindCrnNoResult;
import com.zy.common.model.NavigateNode;
import com.zy.common.utils.NavigateUtils;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
-import com.zy.core.enums.RedisKeyType;
-import com.zy.core.enums.WrkIoType;
-import com.zy.core.enums.WrkStsType;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.*;
import com.zy.core.model.StationObjModel;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.thread.StationThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Random;
@Slf4j
@Service
@@ -36,9 +41,13 @@
@Autowired
private BasCrnpService basCrnpService;
@Autowired
+ private BasDualCrnpService basDualCrnpService;
+ @Autowired
private NavigateUtils navigateUtils;
@Autowired
private RedisUtil redisUtil;
+ @Autowired
+ private BasOutStationAreaService basOutStationAreaService;
/**
* 鐢熸垚宸ヤ綔鍙�
@@ -79,8 +88,18 @@
}
public boolean completeTask(CompleteTaskParam param) {
+ WrkMast wrkMast = null;
Integer wrkNo = param.getWrkNo();
- WrkMast wrkMast = wrkMastService.selectByWorkNo(wrkNo);
+ String taskNo = param.getTaskNo();//wms浠诲姟鍙�
+
+ if(wrkNo == null) {
+ if (!Cools.isEmpty(taskNo)) {
+ wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wms_wrk_no", taskNo));
+ }
+ }else {
+ wrkMast = wrkMastService.selectByWorkNo(wrkNo);
+ }
+
if (null == wrkMast) {
throw new CoolException("浠诲姟涓嶅瓨鍦�");
}
@@ -99,8 +118,18 @@
}
public boolean cancelTask(CancelTaskParam param) {
+ WrkMast wrkMast = null;
Integer wrkNo = param.getWrkNo();
- WrkMast wrkMast = wrkMastService.selectByWorkNo(wrkNo);
+ String taskNo = param.getTaskNo();//wms浠诲姟鍙�
+
+ if(wrkNo == null) {
+ if (!Cools.isEmpty(taskNo)) {
+ wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wms_wrk_no", taskNo));
+ }
+ }else {
+ wrkMast = wrkMastService.selectByWorkNo(wrkNo);
+ }
+
if (null == wrkMast) {
throw new CoolException("浠诲姟涓嶅瓨鍦�");
}
@@ -137,20 +166,23 @@
ioPri = param.getTaskPri().doubleValue();
}
- Integer sourceCrnNo = this.findCrnNoByLocNo(sourceLocMast.getLocNo());
- if (sourceCrnNo == null) {
+ FindCrnNoResult sourceCrnResult = this.findCrnNoByLocNo(sourceLocMast.getLocNo());
+ if (sourceCrnResult == null) {
throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
}
- Integer crnNo = this.findCrnNoByLocNo(locMast.getLocNo());
- if (crnNo == null) {
+ FindCrnNoResult targetCrnResult = this.findCrnNoByLocNo(locMast.getLocNo());
+ if (targetCrnResult == null) {
throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
}
- if (!sourceCrnNo.equals(crnNo)) {
+ if (!sourceCrnResult.getCrnNo().equals(targetCrnResult.getCrnNo())) {
throw new CoolException("婧愬簱浣嶅拰鐩爣搴撲綅涓嶅湪鍚屼竴宸烽亾");
}
-
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wms_wrk_no", param.getTaskNo()));
+ if (!wrkMasts.isEmpty()) {
+ throw new CoolException("宸茬粡鐢熸垚鏀逛换鍔″彿浠诲姟="+param.getTaskNo());
+ }
// 鑾峰彇宸ヤ綔鍙�
int workNo = getWorkNo(WrkIoType.LOC_MOVE.id);
// 淇濆瓨宸ヤ綔妗�
@@ -162,10 +194,19 @@
wrkMast.setIoPri(ioPri);
wrkMast.setSourceLocNo(param.getSourceLocNo());
wrkMast.setLocNo(param.getLocNo()); // 鐩爣搴撲綅
- wrkMast.setCrnNo(crnNo);
wrkMast.setWmsWrkNo(param.getTaskNo());
+ wrkMast.setBarcode(sourceLocMast.getBarcode());
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
+
+ if (targetCrnResult.getCrnType().equals(SlaveType.Crn)) {
+ wrkMast.setCrnNo(targetCrnResult.getCrnNo());
+ } else if (targetCrnResult.getCrnType().equals(SlaveType.DualCrn)) {
+ wrkMast.setDualCrnNo(targetCrnResult.getCrnNo());
+ }else {
+ throw new CoolException("鏈煡璁惧绫诲瀷");
+ }
+
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
News.error("绉诲簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
@@ -186,6 +227,7 @@
//鍏ュ簱浠诲姟
public WrkMast createInTask(CreateInTaskParam param) {
Date now = new Date();
+// String s = Utils.WMSLocToWCSLoc(param.getLocNo());
LocMast locMast = locMastService.queryByLoc(param.getLocNo());
if (null == locMast) {
throw new CoolException(param.getLocNo() + "鐩爣搴撲綅涓嶅瓨鍦�");
@@ -200,10 +242,11 @@
ioPri = param.getTaskPri().doubleValue();
}
- Integer crnNo = this.findCrnNoByLocNo(locMast.getLocNo());
- if (crnNo == null) {
+ FindCrnNoResult findCrnResult = this.findCrnNoByLocNo(locMast.getLocNo());
+ if (findCrnResult == null) {
throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
}
+ Integer crnNo = findCrnResult.getCrnNo();
// 鑾峰彇宸ヤ綔鍙�
int workNo = getWorkNo(WrkIoType.IN.id);
@@ -211,17 +254,34 @@
WrkMast wrkMast = new WrkMast();
wrkMast.setWrkNo(workNo);
wrkMast.setIoTime(now);
- wrkMast.setWrkSts(WrkStsType.NEW_INBOUND.sts); // 宸ヤ綔鐘舵�侊細1.鐢熸垚鍏ュ簱浠诲姟
+ wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts); // 宸ヤ綔鐘舵�侊細3.璁惧鎼繍涓�
wrkMast.setIoType(WrkIoType.IN.id); // 鍏ュ嚭搴撶姸鎬侊細 1.鍏ュ簱
wrkMast.setIoPri(ioPri);
wrkMast.setLocNo(param.getLocNo()); // 鐩爣搴撲綅
- wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
- wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
- wrkMast.setWmsWrkNo(param.getTaskNo());
+ wrkMast.setSourceStaNo(Integer.valueOf(param.getSourceStaNo()));//婧愮珯
+ wrkMast.setStaNo(Integer.valueOf(param.getStaNo()));//鐩爣绔�
+ wrkMast.setWmsWrkNo(String.valueOf(param.getTaskNo()));
wrkMast.setBarcode(param.getBarcode());
- wrkMast.setCrnNo(crnNo);
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, 1);
+
+ StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO,
+ wrkMast.getWrkNo(), Integer.valueOf(param.getSourceStaNo()), Integer.valueOf(param.getSourceStaNo()), 0);
+
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(2, command));
+
+ if (findCrnResult.getCrnType().equals(SlaveType.Crn)) {
+ wrkMast.setCrnNo(findCrnResult.getCrnNo());
+
+ //缂撳瓨璁板綍褰撳墠鍛戒护鍫嗗灈鏈虹紪鍙�
+ redisUtil.set(RedisKeyType.CURRENT_CIRCLE_TASK_CRN_NO.key, crnNo, 60 * 60 * 24);
+ } else if (findCrnResult.getCrnType().equals(SlaveType.DualCrn)) {
+ wrkMast.setDualCrnNo(findCrnResult.getCrnNo());
+ }else {
+ throw new CoolException("鏈煡璁惧绫诲瀷");
+ }
+
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
News.error("鍏ュ簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
@@ -231,16 +291,13 @@
locMast.setLocSts("S");
locMast.setModiTime(new Date());
locMastService.updateById(locMast);
-
- //缂撳瓨璁板綍褰撳墠鍛戒护鍫嗗灈鏈虹紪鍙�
- redisUtil.set(RedisKeyType.CURRENT_CIRCLE_TASK_CRN_NO.key, crnNo, 60 * 60 * 24);
return wrkMast;
}
//鍑哄簱浠诲姟
public boolean createOutTask(CreateOutTaskParam param) {
Date now = new Date();
- LocMast locMast = locMastService.queryByLoc(param.getLocNo());
+ LocMast locMast = locMastService.queryByLoc(param.getSourceLocNo());
if (null == locMast) {
throw new CoolException("婧愬簱浣嶄笉瀛樺湪");
}
@@ -254,28 +311,31 @@
ioPri = param.getTaskPri().doubleValue();
}
- Integer crnNo = this.findCrnNoByLocNo(locMast.getLocNo());
- if (crnNo == null) {
+ FindCrnNoResult findCrnResult = this.findCrnNoByLocNo(locMast.getLocNo());
+ if (findCrnResult == null) {
throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
}
+ Integer crnNo = findCrnResult.getCrnNo();
- Integer sourceStationId = this.findOutStationId(crnNo, param.getStaNo());
+ Integer staNo = param.getStaNo();
+ String outArea = param.getOutArea();
+ if(Cools.isEmpty(staNo) && Cools.isEmpty(outArea)) {
+ throw new CoolException("璇蜂紶鍏ュ嚭搴撶珯鐐规垨鍑哄簱鍖哄煙");
+ }
+
+ if(Cools.isEmpty(staNo)) {
+ List<BasOutStationArea> areaList = basOutStationAreaService.selectList(new EntityWrapper<BasOutStationArea>().eq("area_code", outArea));
+ if (areaList.isEmpty()) {
+ throw new CoolException("鍑哄簱鍖哄煙涓嶅瓨鍦�");
+ }
+ int nextInt = new Random().nextInt(areaList.size());
+ BasOutStationArea basOutStationArea = areaList.get(nextInt);
+ staNo = basOutStationArea.getStationId();
+ }
+
+ Integer sourceStationId = this.findOutStationId(findCrnResult, staNo);
if (sourceStationId == null) {
throw new CoolException("鏈壘鍒拌緭閫佺洰鏍囩珯鐐瑰彲璧拌璺緞");
- }
-
- BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
- if(basCrnp == null) {
- throw new CoolException("鏈壘鍒板搴斿爢鍨涙満鏁版嵁");
- }
- List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .eq("crn_no", crnNo)
- .eq("io_type", WrkIoType.OUT.id)
- );
- // 妫�鏌ユ槸鍚﹁秴杩囨渶澶у嚭搴撲换鍔℃暟
- if(outWrkMasts.size() >= basCrnp.getMaxOutTask()){
- News.info("鍫嗗灈鏈�:{} 宸茶揪鏈�澶у嚭搴撲换鍔℃暟锛屽綋鍓嶄换鍔℃暟:{}", basCrnp.getCrnNo(), outWrkMasts.size());
- throw new CoolException("鍫嗗灈鏈�:" + basCrnp.getCrnNo() + "宸茶揪鏈�澶у嚭搴撲换鍔℃暟锛屽綋鍓嶄换鍔℃暟:" + outWrkMasts.size());
}
// 鑾峰彇宸ヤ綔鍙�
@@ -288,13 +348,70 @@
wrkMast.setIoType(WrkIoType.OUT.id); // 鍏ュ嚭搴撶姸鎬侊細 101.鍑哄簱
wrkMast.setIoPri(ioPri);
wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
+
+ if(!Cools.isEmpty(param.getLocNo())) {
+ //鐩爣绔欑偣
+ LocMast locMast1 = locMastService.queryByLoc(param.getLocNo());
+ if (null == locMast1) {
+ throw new CoolException("婧愬簱浣嶄笉瀛樺湪");
+ }
+
+ if (!locMast1.getLocSts().equals("O")) {
+ throw new CoolException("鐩爣搴撲綅涓嶅浜庡湪搴撶姸鎬�");
+ }
+ wrkMast.setLocNo(locMast1.getLocNo()); //鐩爣搴撲綅
+ }
wrkMast.setSourceStaNo(sourceStationId);//婧愮珯
- wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
+ wrkMast.setStaNo(staNo);//鐩爣绔�
wrkMast.setWmsWrkNo(param.getTaskNo());
wrkMast.setBarcode(locMast.getBarcode());
- wrkMast.setCrnNo(crnNo);
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
+
+ if (!Cools.isEmpty(param.getBatch())) {
+ wrkMast.setBatch(param.getBatch());
+ }
+
+ if (!Cools.isEmpty(param.getBatchSeq())) {
+ wrkMast.setBatchSeq(param.getBatchSeq());
+ }
+
+ if (findCrnResult.getCrnType().equals(SlaveType.Crn)) {
+ BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+ if(basCrnp == null) {
+ throw new CoolException("鏈壘鍒板搴斿爢鍨涙満鏁版嵁");
+ }
+ List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("crn_no", crnNo)
+ .eq("io_type", WrkIoType.OUT.id)
+ );
+ // 妫�鏌ユ槸鍚﹁秴杩囨渶澶у嚭搴撲换鍔℃暟
+ if(outWrkMasts.size() >= basCrnp.getMaxOutTask()){
+ News.info("鍫嗗灈鏈�:{} 宸茶揪鏈�澶у嚭搴撲换鍔℃暟锛屽綋鍓嶄换鍔℃暟:{}", basCrnp.getCrnNo(), outWrkMasts.size());
+ throw new CoolException("鍫嗗灈鏈�:" + basCrnp.getCrnNo() + "宸茶揪鏈�澶у嚭搴撲换鍔℃暟锛屽綋鍓嶄换鍔℃暟:" + outWrkMasts.size());
+ }
+
+ wrkMast.setCrnNo(findCrnResult.getCrnNo());
+ } else if (findCrnResult.getCrnType().equals(SlaveType.DualCrn)) {
+ BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", crnNo));
+ if(basDualCrnp == null) {
+ throw new CoolException("鏈壘鍒板搴斿弻宸ヤ綅鍫嗗灈鏈烘暟鎹�");
+ }
+ List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("dual_crn_no", crnNo)
+ .eq("io_type", WrkIoType.OUT.id)
+ );
+ // 妫�鏌ユ槸鍚﹁秴杩囨渶澶у嚭搴撲换鍔℃暟
+ if(outWrkMasts.size() >= basDualCrnp.getMaxOutTask()){
+ News.info("鍙屽伐浣嶅爢鍨涙満:{} 宸茶揪鏈�澶у嚭搴撲换鍔℃暟锛屽綋鍓嶄换鍔℃暟:{}", basDualCrnp.getCrnNo(), outWrkMasts.size());
+ throw new CoolException("鍙屽伐浣嶅爢鍨涙満:" + basDualCrnp.getCrnNo() + "宸茶揪鏈�澶у嚭搴撲换鍔℃暟锛屽綋鍓嶄换鍔℃暟:" + outWrkMasts.size());
+ }
+
+ wrkMast.setDualCrnNo(findCrnResult.getCrnNo());
+ }else {
+ throw new CoolException("鏈煡璁惧绫诲瀷");
+ }
+
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
News.error("鍑哄簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
@@ -307,63 +424,94 @@
return true;
}
- public Integer findCrnNoByLocNo(String locNo) {
+ public FindCrnNoResult findCrnNoByLocNo(String locNo) {
List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
for (BasCrnp basCrnp : basCrnps) {
- String controlRows = basCrnp.getControlRows();
- if (Cools.isEmpty(controlRows)) {
- continue;
+ List<List<Integer>> rowList = basCrnp.getControlRows$();
+ for (List<Integer> rows : rowList) {
+ if(rows.contains(Utils.getRow(locNo))) {
+ FindCrnNoResult result = new FindCrnNoResult();
+ result.setCrnNo(basCrnp.getCrnNo());
+ result.setCrnType(SlaveType.Crn);
+ return result;
+ }
}
+ }
- List<Integer> rowList = JSON.parseArray(controlRows, Integer.class);
- if(rowList.contains(Utils.getRow(locNo))) {
- return basCrnp.getCrnNo();
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
+ for (BasDualCrnp basDualCrnp : basDualCrnps) {
+ List<List<Integer>> rowList = basDualCrnp.getControlRows$();
+ for (List<Integer> rows : rowList) {
+ if(rows.contains(Utils.getRow(locNo))) {
+ FindCrnNoResult result = new FindCrnNoResult();
+ result.setCrnNo(basDualCrnp.getCrnNo());
+ result.setCrnType(SlaveType.DualCrn);
+ return result;
+ }
}
}
return null;
}
- public Integer findInStationId(Integer crnNo, Integer sourceStationId) {
- BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
- if(basCrnp == null) {
- return null;
+ public Integer findInStationId(FindCrnNoResult findCrnNoResult, Integer sourceStationId) {
+ List<StationObjModel> stationList = new ArrayList<>();
+ Integer crnNo = findCrnNoResult.getCrnNo();
+ if (findCrnNoResult.getCrnType().equals(SlaveType.Crn)) {
+ BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+ if(basCrnp == null) {
+ return null;
+ }
+ stationList = basCrnp.getInStationList$();
+ } else if (findCrnNoResult.getCrnType().equals(SlaveType.DualCrn)) {
+ BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", crnNo));
+ if(basDualCrnp == null) {
+ return null;
+ }
+ stationList = basDualCrnp.getInStationList$();
}
Integer targetStationId = null;
- List<StationObjModel> stationList = basCrnp.getInStationList$();
for (StationObjModel stationObjModel : stationList) {
try {
- String startLev = String.valueOf(sourceStationId).substring(0, 1);
- List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), sourceStationId, stationObjModel.getStationId());
+ List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(sourceStationId, stationObjModel.getStationId());
if(navigateNodes != null) {
targetStationId = stationObjModel.getStationId();
break;
}
} catch (Exception e) {
- e.printStackTrace();
+// e.printStackTrace();
}
}
return targetStationId;
}
- public Integer findOutStationId(Integer crnNo, Integer targetStationId) {
- BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
- if(basCrnp == null) {
- return null;
+ public Integer findOutStationId(FindCrnNoResult findCrnNoResult, Integer targetStationId) {
+ List<StationObjModel> stationList = new ArrayList<>();
+ Integer crnNo = findCrnNoResult.getCrnNo();
+ if (findCrnNoResult.getCrnType().equals(SlaveType.Crn)) {
+ BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+ if(basCrnp == null) {
+ return null;
+ }
+ stationList = basCrnp.getOutStationList$();
+ } else if (findCrnNoResult.getCrnType().equals(SlaveType.DualCrn)) {
+ BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", crnNo));
+ if(basDualCrnp == null) {
+ return null;
+ }
+ stationList = basDualCrnp.getOutStationList$();
}
Integer finalSourceStationId = null;
- List<StationObjModel> stationList = basCrnp.getOutStationList$();
for (StationObjModel stationObjModel : stationList) {
try {
- String startLev = String.valueOf(targetStationId).substring(0, 1);
- List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), stationObjModel.getStationId(), targetStationId);
+ List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(stationObjModel.getStationId(), targetStationId);
if(navigateNodes != null) {
finalSourceStationId = stationObjModel.getStationId();
break;
}
} catch (Exception e) {
- e.printStackTrace();
+// e.printStackTrace();
}
}
return finalSourceStationId;
--
Gitblit v1.9.1