From 1ba343ab3a7cd5cbabfef6a27a5344051f526793 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 25 十一月 2025 16:49:50 +0800
Subject: [PATCH] #
---
src/main/webapp/components/WatchRgvCard.js | 2
src/main/java/com/zy/core/plugin/MainProcessPluginApi.java | 7
src/main/java/com/zy/asrs/controller/LocMastController.java | 7
src/main/java/com/zy/asrs/entity/BasDevp.java | 56 +
src/main/resources/mapper/LocMastMapper.xml | 1
src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java | 2
src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java | 316 +++++++++
src/main/java/com/zy/asrs/entity/BasCrnp.java | 54 +
src/main/java/com/zy/asrs/task/WrkMastScheduler.java | 2
src/main/resources/mapper/BasCrnpMapper.xml | 3
src/main/java/com/zy/common/model/StartupDto.java | 11
src/main/java/com/zy/core/thread/StationThread.java | 3
src/main/java/com/zy/core/thread/impl/ZyStationThread.java | 12
src/main/java/com/zy/core/MainProcess.java | 25
src/main/java/com/zy/asrs/entity/LocMast.java | 4
src/main/java/com/zy/common/service/CommonService.java | 119 ++
src/main/java/com/zy/core/plugin/FakeProcess.java | 573 ++++++++++++++++
src/main/webapp/views/basCrnp/basCrnp.html | 30
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 195 +++++
src/main/webapp/views/wrkMast/wrkMast.html | 6
src/main/java/com/zy/asrs/controller/BasDevpController.java | 11
src/main/java/com/zy/asrs/entity/WrkMast.java | 16
src/main/resources/mapper/WrkMastMapper.xml | 136 ---
src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java | 6
src/main/java/com/zy/asrs/entity/WrkMastLog.java | 17
src/main/java/com/zy/core/model/command/CrnCommand.java | 12
src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java | 102 ++
/dev/null | 16
src/main/webapp/static/js/basCrnp/basCrnp.js | 13
src/main/java/com/zy/asrs/controller/StationController.java | 11
src/main/java/com/zy/core/plugin/NormalProcess.java | 28
src/main/java/com/zy/core/enums/WrkStsType.java | 13
src/main/java/com/zy/asrs/service/WrkMastService.java | 25
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java | 138 ---
src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java | 3
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 39 -
src/main/java/com/zy/core/enums/RedisKeyType.java | 6
src/main/webapp/static/js/locMast/locMast.js | 2
src/main/resources/application.yml | 4
src/main/java/com/zy/core/model/StationObjModel.java | 18
40 files changed, 1,549 insertions(+), 495 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/BasDevpController.java b/src/main/java/com/zy/asrs/controller/BasDevpController.java
index 086dabb..b936913 100644
--- a/src/main/java/com/zy/asrs/controller/BasDevpController.java
+++ b/src/main/java/com/zy/asrs/controller/BasDevpController.java
@@ -15,6 +15,7 @@
import com.core.common.Cools;
import com.core.common.R;
import com.zy.common.web.BaseController;
+import com.zy.core.model.StationObjModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -144,12 +145,12 @@
return R.error("璇疯緭鍏ュ垵濮嬪寲闀垮害");
}
- List<HashMap<String, Object>> list = new ArrayList<>();
+ List<StationObjModel> list = new ArrayList<>();
for (int i = param.getStationNo(); i < param.getStationNo() + param.getInitLength(); i++) {
- HashMap<String, Object> map = new HashMap<>();
- map.put("devpNo", param.getDevpNo());
- map.put("stationId", i);
- list.add(map);
+ StationObjModel stationObjModel = new StationObjModel();
+ stationObjModel.setDeviceNo(param.getDevpNo());
+ stationObjModel.setStationId(i);
+ list.add(stationObjModel);
}
basDevp.setStationList(JSON.toJSONString(list));
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index d3beb2f..737d0ad 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -18,9 +18,12 @@
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.RedisUtil;
import com.zy.common.web.BaseController;
+import com.zy.core.enums.LocStsType;
import com.zy.core.enums.MapNodeType;
+import com.zy.core.enums.RedisKeyType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -36,6 +39,8 @@
private LocMastService locMastService;
@Autowired
private BasMapService basMapService;
+ @Autowired
+ private RedisUtil redisUtil;
@RequestMapping(value = "/locMast/{id}/auth")
@ManagerAuth
@@ -191,6 +196,7 @@
int mapX = (int) map.get("mapX");
int mapY = (int) map.get("mapY");
locMast.setLocNo(Utils.getLocNo(row, bay, finalLev));
+ locMast.setLocSts(String.valueOf(LocStsType.O));
locMast.setRow1(row);
locMast.setBay1(bay);
locMast.setLev1(finalLev);
@@ -201,6 +207,7 @@
});
}
+ redisUtil.del(RedisKeyType.LOC_MAP_BASE.key);
return R.ok();
}
diff --git a/src/main/java/com/zy/asrs/controller/StationController.java b/src/main/java/com/zy/asrs/controller/StationController.java
index 2542008..0a25edb 100644
--- a/src/main/java/com/zy/asrs/controller/StationController.java
+++ b/src/main/java/com/zy/asrs/controller/StationController.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
+import com.zy.core.model.StationObjModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -40,12 +41,12 @@
Integer taskNo = param.getTaskNo();
Integer targetStationId = param.getTargetStationId();
- JSONObject finalStation = null;
+ StationObjModel finalStation = null;
List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>());
for (BasDevp basDevp : basDevps) {
- List<JSONObject> list = JSON.parseArray(basDevp.getStationList(), JSONObject.class);
- for (JSONObject entity : list) {
- if(entity.getInteger("stationId").equals(stationId)){
+ List<StationObjModel> list = basDevp.getStationList$();
+ for (StationObjModel entity : list) {
+ if(entity.getStationId().equals(stationId)){
finalStation = entity;
break;
}
@@ -60,7 +61,7 @@
return R.error("绔欑偣涓嶅瓨鍦�");
}
- Integer devpNo = finalStation.getInteger("devpNo");
+ Integer devpNo = finalStation.getDeviceNo();
StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, devpNo);
if (stationThread == null) {
diff --git a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
index 8ff1677..db454c1 100644
--- a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
@@ -17,6 +17,9 @@
//鐩爣搴撲綅
private String locNo;
+ //鏉$爜
+ private String barcode;
+
//浠诲姟浼樺厛绾�
private Integer taskPri;
diff --git a/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
index 9288763..80c8ff1 100644
--- a/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
@@ -8,12 +8,18 @@
//wms浠诲姟鍙�
private String taskNo;
+ //婧愮珯
+ private Integer sourceStaNo;
+
//鐩爣绔�
private Integer staNo;
//婧愬簱浣�
private String sourceLocNo;
+ //鏉$爜
+ private String barcode;
+
//浠诲姟浼樺厛绾�
private Integer taskPri;
diff --git a/src/main/java/com/zy/asrs/entity/BasCrnp.java b/src/main/java/com/zy/asrs/entity/BasCrnp.java
index b9a2efe..475a448 100644
--- a/src/main/java/com/zy/asrs/entity/BasCrnp.java
+++ b/src/main/java/com/zy/asrs/entity/BasCrnp.java
@@ -1,13 +1,18 @@
package com.zy.asrs.entity;
-import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.core.common.Cools;
+import com.zy.core.model.StationObjModel;
+import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
+
import org.springframework.format.annotation.DateTimeFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -70,6 +75,24 @@
@ApiModelProperty(value= "")
private String memo;
+ @ApiModelProperty(value= "")
+ @TableField("control_rows")
+ private String controlRows;
+
+ /**
+ * 鍏ョ珯鍒楄〃
+ */
+ @ApiModelProperty(value= "鍏ョ珯鍒楄〃")
+ @TableField("in_station_list")
+ private String inStationList;
+
+ /**
+ * 鍑虹珯鍒楄〃
+ */
+ @ApiModelProperty(value= "鍑虹珯鍒楄〃")
+ @TableField("out_station_list")
+ private String outStationList;
+
public BasCrnp() {}
public BasCrnp(Integer status,Integer wrkNo,String inEnable,String outEnable,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
@@ -117,5 +140,30 @@
return this.status == 1 ? "姝e父" : "绂佺敤";
}
+ public List<StationObjModel> getInStationList$(){
+ List<StationObjModel> list = new ArrayList<>();
+ if (Cools.isEmpty(this.inStationList)){
+ return list;
+ }
+
+ List<StationObjModel> jsonList = JSON.parseArray(this.inStationList,StationObjModel.class);
+ for (StationObjModel json : jsonList){
+ list.add(json);
+ }
+ return list;
+ }
+
+ public List<StationObjModel> getOutStationList$(){
+ List<StationObjModel> list = new ArrayList<>();
+ if (Cools.isEmpty(this.outStationList)){
+ return list;
+ }
+
+ List<StationObjModel> jsonList = JSON.parseArray(this.outStationList,StationObjModel.class);
+ for (StationObjModel json : jsonList){
+ list.add(json);
+ }
+ return list;
+ }
}
diff --git a/src/main/java/com/zy/asrs/entity/BasDevp.java b/src/main/java/com/zy/asrs/entity/BasDevp.java
index e56c777..3e5a10d 100644
--- a/src/main/java/com/zy/asrs/entity/BasDevp.java
+++ b/src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -1,15 +1,20 @@
package com.zy.asrs.entity;
+import com.alibaba.fastjson.JSON;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
+
+import com.zy.core.model.StationObjModel;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
+import java.util.List;
@Data
@TableName("asr_bas_devp")
@@ -152,5 +157,56 @@
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
}
+ public List<StationObjModel> getStationList$(){
+ List<StationObjModel> list = new ArrayList<>();
+ if (Cools.isEmpty(this.stationList)){
+ return list;
+ }
+
+ List<StationObjModel> jsonList = JSON.parseArray(this.stationList, StationObjModel.class);
+ for (StationObjModel json : jsonList){
+ list.add(json);
+ }
+ return list;
+ }
+
+ public List<StationObjModel> getBarcodeStationList$(){
+ List<StationObjModel> list = new ArrayList<>();
+ if (Cools.isEmpty(this.barcodeStationList)){
+ return list;
+ }
+
+ List<StationObjModel> jsonList = JSON.parseArray(this.barcodeStationList, StationObjModel.class);
+ for (StationObjModel json : jsonList){
+ list.add(json);
+ }
+ return list;
+ }
+
+ public List<StationObjModel> getInStationList$(){
+ List<StationObjModel> list = new ArrayList<>();
+ if (Cools.isEmpty(this.inStationList)){
+ return list;
+ }
+
+ List<StationObjModel> jsonList = JSON.parseArray(this.inStationList, StationObjModel.class);
+ for (StationObjModel json : jsonList){
+ list.add(json);
+ }
+ return list;
+ }
+
+ public List<StationObjModel> getOutStationList$(){
+ List<StationObjModel> list = new ArrayList<>();
+ if (Cools.isEmpty(this.outStationList)){
+ return list;
+ }
+
+ List<StationObjModel> jsonList = JSON.parseArray(this.outStationList, StationObjModel.class);
+ for (StationObjModel json : jsonList){
+ list.add(json);
+ }
+ return list;
+ }
}
diff --git a/src/main/java/com/zy/asrs/entity/LocMast.java b/src/main/java/com/zy/asrs/entity/LocMast.java
index 21d3677..491cc28 100644
--- a/src/main/java/com/zy/asrs/entity/LocMast.java
+++ b/src/main/java/com/zy/asrs/entity/LocMast.java
@@ -116,6 +116,10 @@
@TableField("status")
private Integer status;
+ @ApiModelProperty(value= "")
+ @TableField("barcode")
+ private String barcode;
+
public String getLocSts$(){
BasLocStsService service = SpringUtils.getBean(BasLocStsService.class);
BasLocSts basLocSts = service.selectById(this.locSts);
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 3dae97c..b4d78ed 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -141,18 +141,18 @@
private String barcode;
/**
- * 鍥涘悜绌挎杞﹀彿
+ * 鍫嗗灈鏈哄彿
*/
- @ApiModelProperty(value= "鍥涘悜绌挎杞﹀彿")
- @TableField(value = "shuttle_no",strategy = FieldStrategy.IGNORED)
- private Integer shuttleNo;
+ @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+ @TableField(value = "crn_no",strategy = FieldStrategy.IGNORED)
+ private Integer crnNo;
/**
- * 鎻愬崌鏈哄彿
+ * RGV鍙�
*/
- @ApiModelProperty(value= "鎻愬崌鏈哄彿")
- @TableField(value = "lift_no",strategy = FieldStrategy.IGNORED)
- private Integer liftNo;
+ @ApiModelProperty(value= "RGV鍙�")
+ @TableField(value = "rgv_no",strategy = FieldStrategy.IGNORED)
+ private Integer rgvNo;
/**
* WMS浠诲姟鍙�
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index 0202441..2d87a39 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.FieldStrategy;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
@@ -146,18 +147,18 @@
private String barcode;
/**
- * 鍥涘悜绌挎杞﹀彿
+ * 鍫嗗灈鏈哄彿
*/
- @ApiModelProperty(value= "鍥涘悜绌挎杞﹀彿")
- @TableField(value = "shuttle_no")
- private Integer shuttleNo;
+ @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+ @TableField(value = "crn_no")
+ private Integer crnNo;
/**
- * 鎻愬崌鏈哄彿
+ * RGV鍙�
*/
- @ApiModelProperty(value= "鎻愬崌鏈哄彿")
- @TableField(value = "lift_no")
- private Integer liftNo;
+ @ApiModelProperty(value= "RGV鍙�")
+ @TableField(value = "rgv_no")
+ private Integer rgvNo;
/**
* WMS浠诲姟鍙�
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index fb466b9..2bbdcec 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -11,45 +11,6 @@
@Repository
public interface WrkMastMapper extends BaseMapper<WrkMast> {
- // wcs ---------------------------------------------
- // 鍏ュ簱绗竴姝ワ紝鎵爜浠幏鍙栨潯鐮佷俊鎭椂鏌ヨ
-// @Select("select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC")
- WrkMast selectPakInStep1(@Param("sourceStaNo")Integer sourceStaNo, @Param("barcode")String barcode);
-
- WrkMast selectPakInStep11(@Param("sourceStaNo")Integer sourceStaNo);
-
- List<WrkMast> selectInStep4();
-
WrkMast selectByWorkNo(Integer workNo);
-
- List<WrkMast> selectLiftStep223103();
-
- WrkMast selectByWorkNo324104(Integer workNo);
-
- List<WrkMast> selectBy2125();
-
- List<WrkMast> selectShuttleWrkByLev(String lev);
-
- List<WrkMast> selectShuttleOutWrkByLev(String lev);
-
- List<WrkMast> selectLiftWrkMast(Integer liftNo);
-
- List<WrkMast> selectLocToLocWrkMast();//鏌ヨ搴撲綅绉昏浆宸ヤ綔妗�
-
- WrkMast selectPickStepByBarcode(String barcode);
-
- WrkMast selectShuttleHasMoveWorking(@Param("shuttleNo") Integer shuttleNo);
-
- List<WrkMast> selectShuttleMoveWrk();
-
- WrkMast selectShuttleWorking(@Param("shuttleNo") Integer shuttleNo);//鏄惁鏈夌┛姊溅浠诲姟(绉诲簱浠诲姟闄ゅ)
-
- WrkMast selectByBarcode(String barcode);
-
- List<WrkMast> selectInWrkMastByLiftNo(Integer liftNo);//鎼滅储鎸囧畾鎻愬崌鏈虹殑鍏ュ簱浠诲姟
-
- WrkMast selectChargeWorking(Integer shuttleNo);
-
- WrkMast selectChargeWorkingByChargeSta(Integer chargeSta);
}
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 9f0081a..7148656 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -9,29 +9,4 @@
WrkMast selectByWorkNo(Integer workNo);
- Boolean judgeInbound(WrkMast wrkMast);
-
- //鏌ヨ鎸囧畾妤煎眰浠诲姟
- List<WrkMast> selectWrkByLev(Integer lev);
-
- //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑浠诲姟
- List<WrkMast> selectShuttleWrkByLev(Integer lev);
-
- //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟
- List<WrkMast> selectShuttleOutWrkByLev(Integer lev);
-
- WrkMast selectChargeWorking(Integer shuttleNo);
-
- WrkMast selectChargeWorkingByChargeSta(Integer chargeSta);
-
- Boolean hasBusyByShuttle(Integer shuttleNo);
-
- WrkMast selectShuttleHasMoveWorking(Integer shuttleNo);
-
- WrkMast selectShuttleWorking(Integer shuttleNo);//鏄惁鏈夌┛姊溅浠诲姟(绉诲簱浠诲姟闄ゅ)
-
- List<WrkMast> selectShuttleMoveWrk();
-
- List<WrkMast> selectLiftWrkMast(Integer liftNo);
-
}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
deleted file mode 100644
index 3a4b101..0000000
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.zy.asrs.service.impl;
-
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
- */
-@Slf4j
-@Service("mainService")
-public class MainServiceImpl {
-
-
-
-}
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index a6a0ff2..8776a4e 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -1,19 +1,10 @@
package com.zy.asrs.service.impl;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
-import com.core.common.Cools;
-import com.core.exception.CoolException;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.WrkMastService;
-import com.zy.asrs.utils.Utils;
-import com.zy.core.enums.WrkIoType;
-import com.zy.core.enums.WrkStsType;
import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
@Service("wrkMastService")
public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
@@ -23,133 +14,4 @@
return this.baseMapper.selectByWorkNo(workNo);
}
- @Override
- public Boolean judgeInbound(WrkMast wrkMast) {
- switch (WrkStsType.query(wrkMast.getWrkSts())) {
- case NEW_INBOUND:
- case INBOUND_DEVICE_RUN:
- case INBOUND_LIFT_RUN:
- case INBOUND_LIFT_RUN_COMPLETE:
- case INBOUND_SHUTTLE_RUN:
- case INBOUND_SHUTTLE_RUN_COMPLETE:
- case COMPLETE_INBOUND:
- case SETTLE_INBOUND:
- return Boolean.TRUE;
- case NEW_OUTBOUND:
- case OUTBOUND_SHUTTLE_RUN:
- case OUTBOUND_SHUTTLE_RUN_COMPLETE:
- case OUTBOUND_LIFT_RUN:
- case OUTBOUND_LIFT_RUN_COMPLETE:
- case COMPLETE_OUTBOUND:
- case SETTLE_OUTBOUND:
- return Boolean.FALSE;
- }
- return Boolean.TRUE;
- }
-
- @Override
- public List<WrkMast> selectWrkByLev(Integer lev) {
- ArrayList<WrkMast> currentLevList = new ArrayList<>();
- List<WrkMast> wrkMasts = this.baseMapper.selectList(new EntityWrapper<WrkMast>());
- for (WrkMast wrkMast : wrkMasts) {
- int wrkLev;
- if (wrkMast.getIoType() == WrkIoType.IN.id) {
- wrkLev = Utils.getLev(wrkMast.getLocNo());
- } else if (wrkMast.getIoType() == WrkIoType.OUT.id) {
- wrkLev = Utils.getLev(wrkMast.getSourceLocNo());
- } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_MOVE.id) {
- wrkLev = Utils.getLev(wrkMast.getLocNo());
- } else if (wrkMast.getIoType() == WrkIoType.LOC_MOVE.id) {
- wrkLev = Utils.getLev(wrkMast.getLocNo());
- } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_CHARGE.id) {
- continue;
- } else {
- throw new CoolException("鏈煡浠诲姟绫诲瀷");
- }
-
- if (wrkLev == lev) {
- currentLevList.add(wrkMast);
- }
- }
- return currentLevList;
- }
-
- @Override
- public List<WrkMast> selectShuttleWrkByLev(Integer lev) {
- return this.baseMapper.selectShuttleWrkByLev("%" + lev);
- }
-
- @Override
- public List<WrkMast> selectShuttleOutWrkByLev(Integer lev) {
- return this.baseMapper.selectShuttleOutWrkByLev("%" + lev);
- }
-
- @Override
- public WrkMast selectChargeWorking(Integer shuttleNo) {
- return this.baseMapper.selectChargeWorking(shuttleNo);
- }
-
- @Override
- public WrkMast selectChargeWorkingByChargeSta(Integer chargeSta) {
- return this.baseMapper.selectChargeWorkingByChargeSta(chargeSta);
- }
-
- @Override
- public Boolean hasBusyByShuttle(Integer shuttleNo) {
- List<WrkMast> wrkMasts = this.selectList(new EntityWrapper<WrkMast>().in("wrk_sts"
- , WrkStsType.NEW_INBOUND.sts
- , WrkStsType.INBOUND_DEVICE_RUN.sts
- , WrkStsType.INBOUND_LIFT_RUN.sts
- , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
- , WrkStsType.INBOUND_SHUTTLE_RUN.sts
- , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
-
- , WrkStsType.NEW_OUTBOUND.sts
- , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
- , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
- , WrkStsType.OUTBOUND_LIFT_RUN.sts
- , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
-
- , WrkStsType.NEW_MOVE.sts
- , WrkStsType.MOVE_NEARBY.sts
- , WrkStsType.MOVE_NEARBY_COMPLETE.sts
- , WrkStsType.MOVE_IN_LIFT.sts
- , WrkStsType.MOVE_IN_LIFT_COMPLETE.sts
- , WrkStsType.MOVE_LIFT_RUN.sts
- , WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts
- , WrkStsType.MOVE_OUT_LIFT.sts
- , WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts
- , WrkStsType.MOVE_SHUTTLE.sts
-
- , WrkStsType.NEW_CHARGE.sts
- , WrkStsType.CHARGE_SHUTTLE_RUN.sts
- , WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts
- , WrkStsType.CHARGE_SHUTTLE_CHARGING.sts
- , WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts
- ).eq("shuttle_no", shuttleNo));
- if (Cools.isEmpty(wrkMasts)) {
- return false;
- }
- return true;
- }
-
- @Override
- public WrkMast selectShuttleHasMoveWorking(Integer shuttleNo) {
- return this.baseMapper.selectShuttleHasMoveWorking(shuttleNo);
- }
-
- @Override
- public WrkMast selectShuttleWorking(Integer shuttleNo) {
- return this.baseMapper.selectShuttleWorking(shuttleNo);
- }
-
- @Override
- public List<WrkMast> selectShuttleMoveWrk() {
- return this.baseMapper.selectShuttleMoveWrk();
- }
-
- @Override
- public List<WrkMast> selectLiftWrkMast(Integer liftNo) {
- return this.baseMapper.selectLiftWrkMast(liftNo);
- }
}
diff --git a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
index 61ae077..b4df723 100644
--- a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
@@ -62,6 +62,7 @@
}
locMast.setLocSts("F");
+ locMast.setBarcode(wrkMast.getBarcode());
locMast.setModiTime(new Date());
boolean result = locMastService.updateById(locMast);
if (!result) {
@@ -105,6 +106,7 @@
}
locMast.setLocSts("O");
+ locMast.setBarcode("");
locMast.setModiTime(new Date());
boolean result = locMastService.updateById(locMast);
if (!result) {
diff --git a/src/main/java/com/zy/common/model/StartupDto.java b/src/main/java/com/zy/common/model/StartupDto.java
index b0ecc3e..9a47096 100644
--- a/src/main/java/com/zy/common/model/StartupDto.java
+++ b/src/main/java/com/zy/common/model/StartupDto.java
@@ -2,20 +2,13 @@
import lombok.Data;
-/**
- * Created by vincent on 2020/6/11
- */
@Data
public class StartupDto {
-
- private Integer sourceStaNo;
-
- private Integer staNo;
-
- private Integer crnNo;
private String locNo;
private Integer workNo;
+ private Integer taskPri;
+
}
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index fd01bf3..dc6ca52 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,18 +1,25 @@
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;
import com.zy.asrs.domain.param.*;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.NavigateUtils;
import com.zy.core.News;
import com.zy.core.enums.WrkIoType;
import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
+import java.util.List;
@Slf4j
@Service
@@ -24,6 +31,12 @@
private WrkLastnoService wrkLastnoService;
@Autowired
private LocMastService locMastService;
+ @Autowired
+ private BasCrnpService basCrnpService;
+ @Autowired
+ private NavigateUtils navigateUtils;
+ @Autowired
+ private CommonService commonService;
/**
* 鐢熸垚宸ヤ綔鍙�
@@ -61,35 +74,6 @@
}
}
return workNo;
- }
-
- //妫�娴嬪伐浣滃彿鏄惁鍦ㄦ寚瀹氱被鍨嬪伐浣滆寖鍥村唴
- public synchronized boolean checkWorkNoContainMk(Integer workNo, Integer wrkMk) {
- WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk);
- if (Cools.isEmpty(wrkLastno)) {
- throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
- }
-
- int sNo = wrkLastno.getSNo();
- int eNo = wrkLastno.getENo();
- if (workNo >= sNo && workNo <= eNo) {
- return true;
- }
- return false;
- }
-
- public static String zerofill(String msg, Integer count) {
- if (msg.length() == count) {
- return msg;
- } else if (msg.length() > count) {
- return msg.substring(0, 16);
- } else {
- StringBuilder msgBuilder = new StringBuilder(msg);
- for(int i = 0; i < count - msg.length(); ++i) {
- msgBuilder.insert(0, "0");
- }
- return msgBuilder.toString();
- }
}
public boolean completeTask(CompleteTaskParam param) {
@@ -203,6 +187,11 @@
ioPri = param.getTaskPri().doubleValue();
}
+ Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+ if (crnNo == null) {
+ throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+ }
+
// 鑾峰彇宸ヤ綔鍙�
int workNo = getWorkNo(WrkIoType.IN.id);
// 淇濆瓨宸ヤ綔妗�
@@ -216,6 +205,8 @@
wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
wrkMast.setWmsWrkNo(param.getTaskNo());
+ wrkMast.setBarcode(param.getBarcode());
+ wrkMast.setCrnNo(crnNo);
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
boolean res = wrkMastService.insert(wrkMast);
@@ -248,6 +239,11 @@
ioPri = param.getTaskPri().doubleValue();
}
+ Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+ if (crnNo == null) {
+ throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+ }
+
// 鑾峰彇宸ヤ綔鍙�
int workNo = getWorkNo(WrkIoType.OUT.id);
// 淇濆瓨宸ヤ綔妗�
@@ -258,8 +254,11 @@
wrkMast.setIoType(WrkIoType.OUT.id); // 鍏ュ嚭搴撶姸鎬侊細 101.鍑哄簱
wrkMast.setIoPri(ioPri);
wrkMast.setSourceLocNo(param.getSourceLocNo()); // 婧愬簱浣�
+ wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
wrkMast.setWmsWrkNo(param.getTaskNo());
+ wrkMast.setBarcode(param.getBarcode());
+ wrkMast.setCrnNo(crnNo);
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
boolean res = wrkMastService.insert(wrkMast);
@@ -275,4 +274,66 @@
return true;
}
+ public Integer findCrnNoByLocNo(String locNo) {
+ List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+ for (BasCrnp basCrnp : basCrnps) {
+ String controlRows = basCrnp.getControlRows();
+ if (Cools.isEmpty(controlRows)) {
+ continue;
+ }
+
+ List<Integer> rowList = JSON.parseArray(controlRows, Integer.class);
+ if(rowList.contains(Utils.getRow(locNo))) {
+ return basCrnp.getCrnNo();
+ }
+ }
+ 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;
+ }
+
+ 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());
+ if(navigateNodes != null) {
+ targetStationId = stationObjModel.getStationId();
+ break;
+ }
+ } catch (Exception e) {
+ 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;
+ }
+
+ 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);
+ if(navigateNodes != null) {
+ finalSourceStationId = stationObjModel.getStationId();
+ break;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return finalSourceStationId;
+ }
+
}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 3376856..cd49feb 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -1,29 +1,25 @@
package com.zy.core;
-import com.zy.asrs.service.impl.MainServiceImpl;
+import com.core.common.SpringUtils;
+import com.zy.core.plugin.MainProcessPluginApi;
import com.zy.core.properties.SystemProperties;
-import lombok.Data;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
-
import javax.annotation.PreDestroy;
/**
* WCS涓绘祦绋�
- * Created by vincent on 2020/8/6
*/
-@Data
@Slf4j
@Component
public class MainProcess {
- @Autowired
- private MainServiceImpl mainService;
+ @Value("${mainProcessPlugin}")
+ private String mainProcessPlugin;
+ private MainProcessPluginApi mainProcessPluginApi;
// 鎵�灞炵嚎绋�
private Thread thread;
- // 棰戠巼
- private int i = 0;
/**
* =====>> 寮�濮嬪伐浣�
@@ -32,15 +28,18 @@
thread = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
try {
-
- // 闂撮殧
- Thread.sleep(300);
+ if (mainProcessPluginApi == null) {
+ String className = mainProcessPlugin.contains(".") ? mainProcessPlugin : "com.zy.core.plugin." + mainProcessPlugin;
+ Class<? extends MainProcessPluginApi> clazz = Class.forName(className).asSubclass(MainProcessPluginApi.class);
+ mainProcessPluginApi = SpringUtils.getBean(clazz);
+ }
// 绯荤粺杩愯鐘舵�佸垽鏂�
if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
continue;
}
+ mainProcessPluginApi.run();
// 闂撮殧
Thread.sleep(200);
} catch (Exception e) {
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index 1418e84..9bbda3a 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -20,6 +20,12 @@
LOC_MAP_BASE("loc_map_base"),
DEVICE_LOG_KEY("device_log_key_"),
+
+ GENERATE_FAKE_IN_TASK_LIMIT("generate_fake_in_task_limit_"),
+ GENERATE_FAKE_OUT_TASK_LIMIT("generate_fake_out_task_limit_"),
+ GENERATE_FAKE_IN_STATION_DATA_LIMIT("generate_fake_in_station_data_limit_"),
+ CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT("check_out_station_stay_time_out_limit_"),
+ CHECK_IN_STATION_STAY_TIME_OUT_LIMIT("check_in_station_stay_time_out_limit_"),
;
public String key;
diff --git a/src/main/java/com/zy/core/enums/WrkStsType.java b/src/main/java/com/zy/core/enums/WrkStsType.java
index d72f4b4..0d1e544 100644
--- a/src/main/java/com/zy/core/enums/WrkStsType.java
+++ b/src/main/java/com/zy/core/enums/WrkStsType.java
@@ -6,18 +6,15 @@
NEW_INBOUND(1, "鐢熸垚鍏ュ簱浠诲姟"),
INBOUND_DEVICE_RUN(2, "璁惧涓婅蛋"),
- INBOUND_LIFT_RUN(3, "鎻愬崌鏈烘惉杩愪腑"),
- INBOUND_LIFT_RUN_COMPLETE(4, "鎻愬崌鏈烘惉杩愬畬鎴�"),
- INBOUND_SHUTTLE_RUN(5, "灏忚溅鎼繍涓�"),
- INBOUND_SHUTTLE_RUN_COMPLETE(6, "灏忚溅鎼繍瀹屾垚"),
+ INBOUND_RUN(3, "璁惧鎼繍涓�"),
+ INBOUND_RUN_COMPLETE(4, "璁惧鎼繍瀹屾垚"),
COMPLETE_INBOUND(9, "鍏ュ簱瀹屾垚"),
SETTLE_INBOUND(10, "鍏ュ簱搴撳瓨鏇存柊"),
NEW_OUTBOUND(101, "鐢熸垚鍑哄簱浠诲姟"),
- OUTBOUND_SHUTTLE_RUN(102, "灏忚溅鎼繍涓�"),
- OUTBOUND_SHUTTLE_RUN_COMPLETE(103, "灏忚溅鎼繍瀹屾垚"),
- OUTBOUND_LIFT_RUN(104, "鎻愬崌鏈烘惉杩愪腑"),
- OUTBOUND_LIFT_RUN_COMPLETE(105, "鎻愬崌鏈烘惉杩愬畬鎴�"),
+ OUTBOUND_RUN(102, "璁惧鎼繍涓�"),
+ OUTBOUND_RUN_COMPLETE(103, "璁惧鎼繍瀹屾垚"),
+ STATION_RUN(104, "绔欑偣杩愯涓�"),
COMPLETE_OUTBOUND(109, "鍑哄簱瀹屾垚"),
SETTLE_OUTBOUND(110, "鍑哄簱搴撳瓨鏇存柊"),
diff --git a/src/main/java/com/zy/core/model/StationObjModel.java b/src/main/java/com/zy/core/model/StationObjModel.java
new file mode 100644
index 0000000..cb29f2f
--- /dev/null
+++ b/src/main/java/com/zy/core/model/StationObjModel.java
@@ -0,0 +1,18 @@
+package com.zy.core.model;
+
+import lombok.Data;
+
+@Data
+public class StationObjModel {
+
+ private Integer deviceNo;
+
+ private Integer stationId;
+
+ private Integer deviceRow;
+
+ private Integer deviceBay;
+
+ private Integer deviceLev;
+
+}
diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java
index c31a1e9..7bf7df9 100644
--- a/src/main/java/com/zy/core/model/command/CrnCommand.java
+++ b/src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -41,12 +41,6 @@
// 婧愪綅缃眰鍙�
private Short sourcePosZ = 0;
- // 婧愮珯
- private Short sourceStaNo = 0;
-
- // 婧愬贩閬�
- private Short sourceLane = 0;
-
// 鐩爣浣嶇疆鎺掑彿
private Short destinationPosX = 0;
@@ -55,12 +49,6 @@
// 鐩爣浣嶇疆灞傚彿
private Short destinationPosZ = 0;
-
- // 鐩爣绔�
- private Short destinationStaNo = 0;
-
- // 鐩爣宸烽亾
- private Short destinationLane = 0;
// 浠诲姟纭 0锛氭湭纭 1锛氬凡纭
private Short command = 0;
diff --git a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
index b1281e2..1ec6b2d 100644
--- a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
@@ -6,6 +6,7 @@
import com.zy.asrs.entity.DeviceConfig;
import com.zy.common.model.NavigateNode;
import com.zy.common.utils.NavigateUtils;
+import com.zy.core.News;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.command.StationCommand;
import com.zy.core.network.api.ZyStationConnectApi;
@@ -26,7 +27,7 @@
private final DeviceConfig deviceConfig;
// 鍏佽骞惰鎵ц澶氫釜鍛戒护浠诲姟锛堝浐瀹氱嚎绋嬫睜锛夈�傚闇�鏇撮珮骞跺彂鍙皟鏁村ぇ灏忋��
private final ExecutorService executor = Executors
- .newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()));
+ .newFixedThreadPool(9999);
public ZyStationFakeConnect(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
@@ -77,8 +78,28 @@
}
private void handleCommand(StationCommand command) {
+ News.info("[WCS Debug] 绔欑偣浠跨湡妯℃嫙宸插惎鍔紝鍛戒护鏁版嵁={}", JSON.toJSONString(command));
+ Integer taskNo = command.getTaskNo();
Integer stationId = command.getStationId();
Integer targetStationId = command.getTargetStaNo();
+
+ if(taskNo == 0 && targetStationId == 0){
+ //娓呯┖绔欑偣
+ resetStation(stationId);
+ return;
+ }
+
+ if (taskNo == 9999 && targetStationId == 0) {
+ //鐢熸垚浠跨湡鏁版嵁
+ generateFakeData(stationId, taskNo);
+ return;
+ }
+
+ if (taskNo == 9998 && targetStationId == 0) {
+ //鐢熸垚鍑哄簱绔欑偣浠跨湡鏁版嵁
+ generateFakeOutStationData(stationId);
+ return;
+ }
String startLev = String.valueOf(stationId).substring(0, 1);
String endLev = String.valueOf(targetStationId).substring(0, 1);
@@ -88,6 +109,40 @@
}else {
diffLevCommand(command);
}
+ }
+
+ private void generateFakeData(Integer stationId, Integer taskNo) {
+ ZyStationStatusEntity status = statusList.stream()
+ .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
+ if (status == null) {
+ return;
+ }
+
+ status.setTaskNo(taskNo);
+ status.setLoading(true);
+ status.setBarcode(String.valueOf(System.currentTimeMillis()));
+ }
+
+ private void generateFakeOutStationData(Integer stationId) {
+ ZyStationStatusEntity status = statusList.stream()
+ .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
+ if (status == null) {
+ return;
+ }
+
+ status.setLoading(true);
+ }
+
+ private void resetStation(Integer stationId) {
+ ZyStationStatusEntity status = statusList.stream()
+ .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
+ if (status == null) {
+ return;
+ }
+
+ status.setTaskNo(0);
+ status.setLoading(false);
+ status.setBarcode("");
}
private void currentLevCommand(StationCommand command) {
@@ -114,7 +169,7 @@
return;
}
- stationMove(navigateNodes, taskNo, targetStationId);
+ stationMove(navigateNodes, taskNo, targetStationId, false);
}
private void diffLevCommand(StationCommand command) {
@@ -189,11 +244,11 @@
return;
}
- stationMove(navigateNodes, taskNo, stationId);
- stationMove(targetNavigateNodes, taskNo, targetStationId);
+ stationMove(navigateNodes, taskNo, stationId, true);
+ stationMove(targetNavigateNodes, taskNo, targetStationId, false);
}
- private void stationMove(List<NavigateNode> navigateNodes, Integer taskNo, Integer targetStationId) {
+ private void stationMove(List<NavigateNode> navigateNodes, Integer taskNo, Integer targetStationId, boolean clearData) {
Integer lastStationId = null;
for (int i = 0; i < navigateNodes.size(); i++) {
NavigateNode navigateNode = navigateNodes.get(i);
@@ -213,7 +268,7 @@
continue;
}
- if (nextStatus.getTaskNo() == 0) {
+ if (nextStatus.getTaskNo() == 0 || nextStatus.getTaskNo() == 9999) {
break;
}
@@ -221,12 +276,6 @@
}
} catch (Exception e) {
continue;
- }
-
- synchronized (status) {
- status.setTaskNo(taskNo);
- status.setTargetStaNo(targetStationId);
- status.setLoading(true);
}
if (lastStationId != null) {
@@ -241,20 +290,29 @@
}
}
}
+
+ synchronized (status) {
+ status.setTaskNo(taskNo);
+ status.setTargetStaNo(targetStationId);
+ status.setLoading(true);
+ }
+
lastStationId = currentStationId;
sleep(1000);
}
- sleep(10000);
- if (lastStationId != null) {
- Integer finalLastStationId = lastStationId;
- ZyStationStatusEntity lastStatus = statusList.stream()
- .filter(item -> item.getStationId().equals(finalLastStationId)).findFirst().orElse(null);
- if (lastStatus != null) {
- synchronized (lastStatus) {
- lastStatus.setTaskNo(0);
- lastStatus.setTargetStaNo(0);
- lastStatus.setLoading(false);
+ if (clearData) {
+ sleep(10000);
+ if (lastStationId != null) {
+ Integer finalLastStationId = lastStationId;
+ ZyStationStatusEntity lastStatus = statusList.stream()
+ .filter(item -> item.getStationId().equals(finalLastStationId)).findFirst().orElse(null);
+ if (lastStatus != null) {
+ synchronized (lastStatus) {
+ lastStatus.setTaskNo(0);
+ lastStatus.setTargetStaNo(0);
+ lastStatus.setLoading(false);
+ }
}
}
}
diff --git a/src/main/java/com/zy/core/plugin/FakeProcess.java b/src/main/java/com/zy/core/plugin/FakeProcess.java
new file mode 100644
index 0000000..c6c7532
--- /dev/null
+++ b/src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -0,0 +1,573 @@
+package com.zy.core.plugin;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.domain.param.CreateInTaskParam;
+import com.zy.asrs.domain.param.CreateOutTaskParam;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.common.model.StartupDto;
+import com.zy.common.service.CommonService;
+import com.zy.common.utils.HttpHandler;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+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.CrnCommand;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.CrnThread;
+import com.zy.core.thread.StationThread;
+import com.zy.core.utils.CrnOperateProcessUtils;
+import com.zy.core.utils.StationOperateProcessUtils;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Slf4j
+@Component
+public class FakeProcess implements MainProcessPluginApi {
+
+ private static Map<Integer,Long> stationStayTimeMap = new HashMap<>();
+ private static String enableFake = "N";
+
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private BasDevpService basDevpService;
+ @Autowired
+ private ConfigService configService;
+ @Autowired
+ private LocMastService locMastService;
+ @Autowired
+ private CommonService commonService;
+ @Autowired
+ private BasCrnpService basCrnpService;
+ @Autowired
+ private RedisUtil redisUtil;
+ @Autowired
+ private CrnOperateProcessUtils crnOperateUtils;
+ @Autowired
+ private StationOperateProcessUtils stationOperateProcessUtils;
+
+ @Override
+ public void run() {
+ Config enableFakeConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "enableFake"));
+ if (enableFakeConfig != null) {
+ enableFake = enableFakeConfig.getValue();
+ }
+
+ //妫�娴嬪叆搴撶珯鏄惁鏈変换鍔$敓鎴愶紝骞朵豢鐪熺敓鎴愭ā鎷熷叆搴撶珯鐐规暟鎹�
+ checkInStationHasTask();
+ //鐢熸垚浠跨湡妯℃嫙鍏ュ簱浠诲姟
+ generateFakeInTask();
+ //鐢熸垚浠跨湡妯℃嫙鍑哄簱浠诲姟
+ generateFakeOutTask();
+ //璁$畻鎵�鏈夌珯鐐瑰仠鐣欐椂闂�
+ calcAllStationStayTime();
+ //妫�娴嬪嚭搴撶珯鐐瑰仠鐣欐槸鍚﹁秴鏃�
+ checkOutStationStayTimeOut();
+ //妫�娴嬪叆搴撶珯鐐瑰爢鍨涙満鏄惁鍙栬蛋璐х墿
+ checkInStationCrnTake();
+
+ //璇锋眰鐢熸垚鍏ュ簱浠诲姟
+ generateStoreWrkFile();
+ //鎵ц鍫嗗灈鏈轰换鍔�
+ crnOperateUtils.crnIoExecute();
+ //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�-鍏峰浠跨湡鑳藉姏
+ crnIoExecuteFinish();
+ //鎵ц杈撻�佺珯鐐瑰叆搴撲换鍔�
+ stationOperateProcessUtils.stationInExecute();
+ //鎵ц杈撻�佺珯鐐瑰嚭搴撲换鍔�
+ stationOperateProcessUtils.stationOutExecute();
+ //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
+ stationOperateProcessUtils.stationOutExecuteFinish();
+ }
+
+ //妫�娴嬪叆搴撶珯鏄惁鏈変换鍔$敓鎴愶紝骞朵豢鐪熺敓鎴愭ā鎷熷叆搴撶珯鐐规暟鎹�
+ private synchronized void checkInStationHasTask() {
+ if (!enableFake.equals("Y")) {
+ return;
+ }
+
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+ List<StationObjModel> list = basDevp.getInStationList$();
+ for (StationObjModel entity : list) {
+ Integer stationId = entity.getStationId();
+ if(!stationMap.containsKey(stationId)){
+ continue;
+ }
+
+ StationProtocol stationProtocol = stationMap.get(stationId);
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.GENERATE_FAKE_IN_STATION_DATA_LIMIT.key + stationId);
+ if (object != null) {
+ continue;
+ }
+
+ //婊¤冻鑷姩銆佹棤鐗┿�佸伐浣滃彿0锛岀敓鎴愬叆搴撴暟鎹�
+ if (stationProtocol.isAutoing()
+ && !stationProtocol.isLoading()
+ && stationProtocol.getTaskNo() == 0
+ ) {
+ StationCommand command = stationThread.getMoveCommand(9999, stationId, 0, 0);
+ MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
+ redisUtil.set(RedisKeyType.GENERATE_FAKE_IN_STATION_DATA_LIMIT.key + stationId, "lock", 10);
+ }
+ }
+ }
+ }
+
+ //鐢熸垚浠跨湡妯℃嫙鍏ュ簱浠诲姟
+ private synchronized void generateFakeInTask() {
+ if (!enableFake.equals("Y")) {
+ return;
+ }
+
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+ List<StationObjModel> list = basDevp.getInStationList$();
+ for (StationObjModel model : list) {
+ Integer stationId = model.getStationId();
+ if(!stationMap.containsKey(stationId)){
+ continue;
+ }
+
+ StationProtocol stationProtocol = stationMap.get(stationId);
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.GENERATE_FAKE_IN_TASK_LIMIT.key + stationId);
+ if (object != null) {
+ return;
+ }
+
+ //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿9999锛岀敓鎴愬叆搴撴暟鎹�
+ if (stationProtocol.isAutoing()
+ && stationProtocol.isLoading()
+ && stationProtocol.getTaskNo() == 9999
+ ) {
+ //妫�娴嬩换鍔℃槸鍚︾敓鎴�
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("barcode", stationProtocol.getBarcode()));
+ if (!wrkMasts.isEmpty()) {
+ continue;
+ }
+
+ List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", String.valueOf(LocStsType.O)));
+ if (locMastList.isEmpty()) {
+ continue;
+ }
+
+ int nextInt = new Random().nextInt(locMastList.size());
+ LocMast locMast = locMastList.get(nextInt);
+
+ Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+ if (crnNo == null) {
+ continue;
+ }
+
+ Integer targetStationId = commonService.findInStationId(crnNo, stationId);
+ if (targetStationId == null) {
+ continue;
+ }
+
+ CreateInTaskParam taskParam = new CreateInTaskParam();
+ taskParam.setTaskNo(String.valueOf(commonService.getWorkNo(WrkIoType.IN.id)));
+ taskParam.setSourceStaNo(stationId);
+ taskParam.setStaNo(targetStationId);
+ taskParam.setLocNo(locMast.getLocNo());
+ taskParam.setBarcode(stationProtocol.getBarcode());
+ boolean result = commonService.createInTask(taskParam);
+
+ redisUtil.set(RedisKeyType.GENERATE_FAKE_IN_TASK_LIMIT.key + stationId, "lock", 5);
+ }
+ }
+ }
+ }
+
+ //鐢熸垚浠跨湡妯℃嫙鍑哄簱浠诲姟
+ private synchronized void generateFakeOutTask() {
+ if (!enableFake.equals("Y")) {
+ return;
+ }
+
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+ List<StationObjModel> list = basDevp.getOutStationList$();
+ for (StationObjModel entity : list) {
+ Integer stationId = entity.getStationId();
+ if(!stationMap.containsKey(stationId)){
+ continue;
+ }
+
+ StationProtocol stationProtocol = stationMap.get(stationId);
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.GENERATE_FAKE_OUT_TASK_LIMIT.key + stationId);
+ if(object != null){
+ return;
+ }
+
+ //婊¤冻鑷姩銆佹棤鐗┿�佸伐浣滃彿0锛岀敓鎴愬嚭搴撴暟鎹�
+ if (stationProtocol.isAutoing()
+ && !stationProtocol.isLoading()
+ && stationProtocol.getTaskNo() == 0
+ ) {
+ List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", String.valueOf(LocStsType.F)));
+ if (locMastList.isEmpty()) {
+ continue;
+ }
+
+ LocMast locMast = locMastList.get(0);
+
+ Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+ if (crnNo == null) {
+ continue;
+ }
+
+ Integer sourceStationId = commonService.findOutStationId(crnNo, stationId);
+ if (sourceStationId == null) {
+ continue;
+ }
+
+ CreateOutTaskParam taskParam = new CreateOutTaskParam();
+ taskParam.setTaskNo(String.valueOf(commonService.getWorkNo(WrkIoType.OUT.id)));
+ taskParam.setSourceStaNo(sourceStationId);
+ taskParam.setStaNo(stationId);
+ taskParam.setSourceLocNo(locMast.getLocNo());
+ taskParam.setBarcode(locMast.getBarcode());
+ boolean result = commonService.createOutTask(taskParam);
+ redisUtil.set(RedisKeyType.GENERATE_FAKE_OUT_TASK_LIMIT.key + stationId, "lock", 15);
+ }
+ }
+ }
+ }
+
+ /**
+ * 璇锋眰鐢熸垚鍏ュ簱浠诲姟
+ * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗�
+ */
+ public synchronized void generateStoreWrkFile() {
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+ List<StationObjModel> list = basDevp.getInStationList$();
+ for (StationObjModel entity : list) {
+ Integer stationId = entity.getStationId();
+ if(!stationMap.containsKey(stationId)){
+ continue;
+ }
+
+ StationProtocol stationProtocol = stationMap.get(stationId);
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿9999锛岀敓鎴愬叆搴撴暟鎹�
+ if (stationProtocol.isAutoing()
+ && stationProtocol.isLoading()
+ && stationProtocol.getTaskNo() == 9999
+ ) {
+ //妫�娴嬩换鍔℃槸鍚︾敓鎴�
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("barcode", stationProtocol.getBarcode()));
+ if (!wrkMasts.isEmpty()) {
+ continue;
+ }
+
+ String wmsUrl = null;
+ Config wmsSystemUriConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "wmsSystemUri"));
+ if (wmsSystemUriConfig != null) {
+ wmsUrl = wmsSystemUriConfig.getValue();
+ }
+
+ if(wmsUrl == null){
+ News.error("鏈厤缃甒MS绯荤粺URI锛岄厤缃枃浠禖ode缂栫爜锛歸msSystemUri");
+ return;
+ }
+
+ String wmsSystemInUrl = null;
+ Config wmsSystemInUrlConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "wmsSystemInUrl"));
+ if (wmsSystemInUrlConfig != null) {
+ wmsSystemInUrl = wmsSystemInUrlConfig.getValue();
+ }
+
+ if(wmsSystemInUrlConfig == null){
+ News.error("鏈厤缃甒MS鍏ュ簱鎺ュ彛鍦板潃锛岄厤缃枃浠禖ode缂栫爜锛歸msSystemInUrl");
+ return;
+ }
+
+ try {
+ HashMap<String, Object> param = new HashMap<>();
+ param.put("barcode", stationProtocol.getBarcode());
+ param.put("ioType", 1);
+ param.put("sourceStaNo", stationProtocol.getStationId());
+ param.put("locType1", stationProtocol.getPalletHeight());
+
+ String response = new HttpHandler.Builder()
+ .setUri(wmsUrl)
+ .setPath(wmsSystemInUrl)
+ .setJson(JSON.toJSONString(param))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ if (jsonObject.getInteger("code").equals(200)) {
+ StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+ CreateInTaskParam taskParam = new CreateInTaskParam();
+ taskParam.setTaskNo(String.valueOf(dto.getWorkNo()));
+ taskParam.setLocNo(dto.getLocNo());
+ taskParam.setTaskPri(dto.getTaskPri());
+ boolean result = commonService.createInTask(taskParam);
+ } else {
+ News.error("璇锋眰WMS鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ //璁$畻鎵�鏈夌珯鐐瑰仠鐣欐椂闂�
+ public synchronized void calcAllStationStayTime() {
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if (stationThread == null) {
+ continue;
+ }
+
+ List<StationProtocol> list = stationThread.getStatus();
+ for (StationProtocol stationProtocol : list) {
+ if (stationProtocol.getTaskNo() > 0 && !stationStayTimeMap.containsKey(stationProtocol.getStationId())) {
+ stationStayTimeMap.put(stationProtocol.getStationId(), System.currentTimeMillis());
+ }
+
+ if(stationProtocol.getTaskNo() <= 0 && stationStayTimeMap.containsKey(stationProtocol.getStationId())) {
+ stationStayTimeMap.remove(stationProtocol.getStationId());
+ }
+ }
+ }
+ }
+
+ //妫�娴嬪嚭搴撶珯鐐瑰仠鐣欐槸鍚﹁秴鏃�
+ public synchronized void checkOutStationStayTimeOut() {
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ List<StationObjModel> outStationList = basDevp.getOutStationList$();
+ if(outStationList.isEmpty()){
+ News.info("杈撻�佺嚎:{} 鍑哄簱绔欑偣鏈缃�", basDevp.getDevpNo());
+ continue;
+ }
+
+ for (StationObjModel stationObjModel : outStationList) {
+ Object lock = redisUtil.get(RedisKeyType.CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId());
+ if(lock != null){
+ continue;
+ }
+
+ Long stayTime = stationStayTimeMap.get(stationObjModel.getStationId());
+ if (stayTime == null) {
+ continue;
+ }
+
+ if(System.currentTimeMillis() - stayTime > 1000 * 15) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ StationCommand command = stationThread.getMoveCommand(0, stationObjModel.getStationId(), 0, 0);
+ if(command == null){
+ continue;
+ }
+
+ MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+ redisUtil.set(RedisKeyType.CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId(), "lock",10);
+ News.info("杈撻�佺珯鐐归噸缃懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽懡浠ゆ暟鎹�={}", stationObjModel.getStationId(), JSON.toJSONString(command));
+ }
+ }
+ }
+ }
+
+ //妫�娴嬪叆搴撶珯鐐瑰爢鍨涙満鏄惁鍙栬蛋璐х墿
+ public synchronized void checkInStationCrnTake() {
+ List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+ for (BasCrnp basCrnp : basCrnps) {
+ List<StationObjModel> inStationList = basCrnp.getInStationList$();
+ if(inStationList.isEmpty()){
+ News.info("鍫嗗灈鏈�:{} 鍏ュ簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+ continue;
+ }
+
+ for (StationObjModel stationObjModel : inStationList) {
+ Object lock = redisUtil.get(RedisKeyType.CHECK_IN_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId());
+ if(lock != null){
+ continue;
+ }
+
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ StationCommand command = stationThread.getMoveCommand(0, stationObjModel.getStationId(), 0, 0);
+ if(command == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+ StationProtocol stationProtocol = statusMap.get(stationObjModel.getStationId());
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ if(stationProtocol.getTaskNo() > 0) {
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
+ if (wrkMast == null) {
+ MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+ redisUtil.set(RedisKeyType.CHECK_IN_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId(), "lock",10);
+ News.info("杈撻�佺珯鐐归噸缃懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽懡浠ゆ暟鎹�={}", stationObjModel.getStationId(), JSON.toJSONString(command));
+ }else {
+ if (wrkMast.getWrkSts() != WrkStsType.NEW_INBOUND.sts && wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts) {
+ Integer crnNo = wrkMast.getCrnNo();
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo);
+ if (crnThread == null) {
+ continue;
+ }
+ CrnProtocol crnProtocol = crnThread.getStatus();
+ if (crnProtocol.getStatusType().equals(CrnStatusType.FETCH_MOVING) || crnProtocol.getStatusType().equals(CrnStatusType.FETCHING)) {
+ continue;
+ }
+
+ MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+ redisUtil.set(RedisKeyType.CHECK_IN_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId(), "lock",10);
+ News.info("杈撻�佺珯鐐归噸缃懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽懡浠ゆ暟鎹�={}", stationObjModel.getStationId(), JSON.toJSONString(command));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
+ public synchronized void crnIoExecuteFinish() {
+ List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+ for (BasCrnp basCrnp : basCrnps) {
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+ if(crnThread == null){
+ continue;
+ }
+
+ CrnProtocol crnProtocol = crnThread.getStatus();
+ if(crnProtocol == null){
+ continue;
+ }
+
+ if (crnProtocol.getMode() == CrnModeType.AUTO.id
+ && crnProtocol.getTaskNo() > 0
+ && crnProtocol.getStatus() == CrnStatusType.WAITING.id
+ ) {
+
+ // 鑾峰彇寰呯‘璁ゅ伐浣滄。
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(crnProtocol.getTaskNo());
+ if (wrkMast == null) {
+ News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+ continue;
+ }
+
+ Long updateWrkSts = null;
+ if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
+ updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
+ }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
+ updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+
+ //鐢熸垚浠跨湡绔欑偣鏁版嵁
+ List<StationObjModel> outStationList = basCrnp.getOutStationList$();
+ if(outStationList.isEmpty()){
+ News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+ continue;
+ }
+
+ for (StationObjModel stationObjModel : outStationList) {
+ if (!stationObjModel.getStationId().equals(wrkMast.getSourceStaNo())) {
+ continue;
+ }
+
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if (stationThread == null) {
+ continue;
+ }
+ //鐢熸垚浠跨湡绔欑偣鏁版嵁
+ StationCommand command = stationThread.getMoveCommand(9998, wrkMast.getSourceStaNo(), 0, 0);
+ MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+ }
+ }else{
+ News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+ continue;
+ }
+
+ wrkMast.setWrkSts(updateWrkSts);
+ wrkMast.setSystemMsg("");
+ wrkMast.setIoTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getCrnNo());
+ MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
+ News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/zy/core/plugin/MainProcessPluginApi.java b/src/main/java/com/zy/core/plugin/MainProcessPluginApi.java
new file mode 100644
index 0000000..4eb6cc3
--- /dev/null
+++ b/src/main/java/com/zy/core/plugin/MainProcessPluginApi.java
@@ -0,0 +1,7 @@
+package com.zy.core.plugin;
+
+public interface MainProcessPluginApi {
+
+ void run();
+
+}
diff --git a/src/main/java/com/zy/core/plugin/NormalProcess.java b/src/main/java/com/zy/core/plugin/NormalProcess.java
new file mode 100644
index 0000000..28979e7
--- /dev/null
+++ b/src/main/java/com/zy/core/plugin/NormalProcess.java
@@ -0,0 +1,28 @@
+package com.zy.core.plugin;
+
+import com.alibaba.fastjson.JSON;
+import com.zy.asrs.service.BasMapService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component
+public class NormalProcess implements MainProcessPluginApi{
+
+ @Autowired
+ private BasMapService basMapService;
+
+ @Override
+ public void run() {
+ getLevList();
+ }
+
+ private void getLevList() {
+ List<Integer> list = basMapService.getLevList();
+ System.out.println(JSON.toJSONString(list));
+ }
+
+}
diff --git a/src/main/java/com/zy/core/thread/StationThread.java b/src/main/java/com/zy/core/thread/StationThread.java
index fd98cc7..3fe7659 100644
--- a/src/main/java/com/zy/core/thread/StationThread.java
+++ b/src/main/java/com/zy/core/thread/StationThread.java
@@ -5,11 +5,14 @@
import com.zy.core.model.command.StationCommand;
import com.zy.core.model.protocol.StationProtocol;
import java.util.List;
+import java.util.Map;
public interface StationThread extends ThreadHandler {
List<StationProtocol> getStatus();
+ Map<Integer, StationProtocol> getStatusMap();
+
StationCommand getMoveCommand(Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize);
CommandResponse sendCommand(StationCommand command);
diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
index ee135e2..d805c8b 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
@@ -191,6 +191,8 @@
basCrnp = new BasCrnp();
basCrnp.setCrnNo(deviceConfig.getDeviceNo());
basCrnp.setStatus(1);
+ basCrnp.setInEnable("N");
+ basCrnp.setOutEnable("N");
basCrnp.setCreateTime(new Date());
basCrnpService.insert(basCrnp);
}
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index 68cbd91..5cfe421 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -24,9 +24,7 @@
import com.zy.core.network.entity.ZyStationStatusEntity;
import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -172,4 +170,12 @@
return commandResponse;
}
+ @Override
+ public Map<Integer, StationProtocol> getStatusMap() {
+ Map<Integer, StationProtocol> map = new HashMap<>();
+ for (StationProtocol stationProtocol : statusList) {
+ map.put(stationProtocol.getStationId(), stationProtocol);
+ }
+ return map;
+ }
}
diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
new file mode 100644
index 0000000..c8b5024
--- /dev/null
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -0,0 +1,316 @@
+package com.zy.core.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.utils.Utils;
+import com.zy.core.News;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.CrnModeType;
+import com.zy.core.enums.CrnStatusType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.CrnThread;
+import com.zy.core.thread.StationThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CrnOperateProcessUtils {
+
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private BasCrnpService basCrnpService;
+ @Autowired
+ private LocMastService locMastService;
+
+ //鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
+ public synchronized void crnIoExecute() {
+ List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+ for (BasCrnp basCrnp : basCrnps) {
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+ if(crnThread == null){
+ continue;
+ }
+
+ CrnProtocol crnProtocol = crnThread.getStatus();
+ if(crnProtocol == null){
+ continue;
+ }
+
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("crn_no", basCrnp.getCrnNo())
+ .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts)
+ );
+ if(!wrkMasts.isEmpty()){
+ continue;
+ }
+
+ // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
+ if (crnProtocol.getMode() == CrnModeType.AUTO.id
+ && crnProtocol.getTaskNo() == 0
+ && crnProtocol.getStatus() == CrnStatusType.IDLE.id
+ && crnProtocol.getLoaded() == 0
+ && crnProtocol.getForkPos() == 0
+ && crnProtocol.getAlarm() == 0
+ ) {
+ // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+ if (crnProtocol.getLastIo().equals("I")) {
+ if (basCrnp.getInEnable().equals("Y")) {
+ this.crnExecuteIn(basCrnp, crnThread); // 鍏ュ簱
+ crnProtocol.setLastIo("O");
+ } else if (basCrnp.getOutEnable().equals("Y")) {
+ this.crnExecuteOut(basCrnp, crnThread); // 鍑哄簱
+ crnProtocol.setLastIo("I");
+ }
+ }
+ // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+ else if (crnProtocol.getLastIo().equals("O")) {
+ if (basCrnp.getOutEnable().equals("Y")) {
+ this.crnExecuteOut(basCrnp, crnThread); // 鍑哄簱
+ crnProtocol.setLastIo("I");
+ } else if (basCrnp.getInEnable().equals("Y")) {
+ this.crnExecuteIn(basCrnp, crnThread); // 鍏ュ簱
+ crnProtocol.setLastIo("O");
+ }
+ }
+ }
+ }
+ }
+
+ private synchronized void crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
+ CrnProtocol crnProtocol = crnThread.getStatus();
+ if(crnProtocol == null){
+ return;
+ }
+
+ if(!basCrnp.getInEnable().equals("Y")){
+ News.info("鍫嗗灈鏈�:{} 鍙叆淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
+ return;
+ }
+
+ List<StationObjModel> inStationList = basCrnp.getInStationList$();
+ if(inStationList.isEmpty()){
+ News.info("鍫嗗灈鏈�:{} 鍏ュ簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+ return;
+ }
+
+ Integer crnNo = basCrnp.getCrnNo();
+
+ for (StationObjModel stationObjModel : inStationList) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if (stationThread == null) {
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationProtocolMap = stationThread.getStatusMap();
+ StationProtocol stationProtocol = stationProtocolMap.get(stationObjModel.getStationId());
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ if (!stationProtocol.isAutoing()) {
+ continue;
+ }
+
+ if (!stationProtocol.isLoading()) {
+ continue;
+ }
+
+ if (stationProtocol.getTaskNo() <= 0) {
+ continue;
+ }
+
+ if (!stationProtocol.isInEnable()) {
+ News.taskInfo(stationProtocol.getTaskNo(), "鍙栬揣绔欑偣:{} 娌℃湁鍙叆淇″彿", stationObjModel.getStationId());
+ continue;
+ }
+
+ // 鑾峰彇浠诲姟
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
+ if (null == wrkMast) {
+ News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟淇℃伅涓嶅瓨鍦�", stationProtocol.getTaskNo());
+ continue;
+ }
+
+ if(wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts){
+ News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟鐘舵�佸紓甯�", stationProtocol.getTaskNo());
+ continue;
+ }
+
+ // 鑾峰彇搴撲綅淇℃伅
+ LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+ if (locMast == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getLocNo());
+ continue;
+ }
+
+ if (!locMast.getLocSts().equals("S")) {
+ News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 鐘舵�佸紓甯�", wrkMast.getLocNo());
+ continue;
+ }
+
+ String sourceLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
+
+ CrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
+ wrkMast.setCrnNo(crnNo);
+ wrkMast.setSystemMsg("");
+ wrkMast.setIoTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
+ News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
+ }
+ }
+ }
+
+ private synchronized void crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
+ CrnProtocol crnProtocol = crnThread.getStatus();
+ if(crnProtocol == null){
+ return;
+ }
+
+ if(!basCrnp.getOutEnable().equals("Y")){
+ News.info("鍫嗗灈鏈�:{} 鍙嚭淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
+ return;
+ }
+
+ List<StationObjModel> outStationList = basCrnp.getOutStationList$();
+ if(outStationList.isEmpty()){
+ News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+ return;
+ }
+
+ Integer crnNo = basCrnp.getCrnNo();
+
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("crn_no", crnNo)
+ .eq("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)
+ );
+
+ for (WrkMast wrkMast : wrkMasts) {
+ for (StationObjModel stationObjModel : outStationList) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if (stationThread == null) {
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationProtocolMap = stationThread.getStatusMap();
+ StationProtocol stationProtocol = stationProtocolMap.get(stationObjModel.getStationId());
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ if (!stationProtocol.isAutoing()) {
+ continue;
+ }
+
+ if (stationProtocol.isLoading()) {
+ continue;
+ }
+
+ if (stationProtocol.getTaskNo() != 0) {
+ continue;
+ }
+
+ if (!stationProtocol.isOutEnable()) {
+ News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
+ continue;
+ }
+
+ // 鑾峰彇搴撲綅淇℃伅
+ LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+ if (locMast == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
+ continue;
+ }
+
+ if (!locMast.getLocSts().equals("R")) {
+ News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 鐘舵�佸紓甯�", wrkMast.getSourceLocNo());
+ continue;
+ }
+
+ String targetLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
+
+ CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
+
+ wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
+ wrkMast.setCrnNo(crnNo);
+ wrkMast.setSystemMsg("");
+ wrkMast.setIoTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
+ News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
+ return;
+ }
+ }
+ }
+ }
+
+ //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
+ public synchronized void crnIoExecuteFinish() {
+ List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+ for (BasCrnp basCrnp : basCrnps) {
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+ if(crnThread == null){
+ continue;
+ }
+
+ CrnProtocol crnProtocol = crnThread.getStatus();
+ if(crnProtocol == null){
+ continue;
+ }
+
+ if (crnProtocol.getMode() == CrnModeType.AUTO.id
+ && crnProtocol.getTaskNo() > 0
+ && crnProtocol.getStatus() == CrnStatusType.WAITING.id
+ ) {
+
+ // 鑾峰彇寰呯‘璁ゅ伐浣滄。
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(crnProtocol.getTaskNo());
+ if (wrkMast == null) {
+ News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+ continue;
+ }
+
+ Long updateWrkSts = null;
+ if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
+ updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
+ }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
+ updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+ }else{
+ News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+ continue;
+ }
+
+ wrkMast.setWrkSts(updateWrkSts);
+ wrkMast.setSystemMsg("");
+ wrkMast.setIoTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getCrnNo());
+ MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
+ News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
new file mode 100644
index 0000000..a00dd68
--- /dev/null
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -0,0 +1,195 @@
+package com.zy.core.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.common.service.CommonService;
+import com.zy.core.News;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.StationThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class StationOperateProcessUtils {
+
+ @Autowired
+ private BasDevpService basDevpService;
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private CommonService commonService;
+ @Autowired
+ private BasCrnpService basCrnpService;
+
+ //鎵ц杈撻�佺珯鐐瑰叆搴撲换鍔�
+ public synchronized void stationInExecute() {
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+ List<StationObjModel> list = basDevp.getInStationList$();
+ for (StationObjModel entity : list) {
+ Integer stationId = entity.getStationId();
+ if(!stationMap.containsKey(stationId)){
+ continue;
+ }
+
+ StationProtocol stationProtocol = stationMap.get(stationId);
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿9999
+ if (stationProtocol.isAutoing()
+ && stationProtocol.isLoading()
+ && stationProtocol.getTaskNo() == 9999
+ ) {
+ //妫�娴嬩换鍔℃槸鍚︾敓鎴�
+ WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", stationProtocol.getBarcode()));
+ if (wrkMast == null) {
+ continue;
+ }
+
+ if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) {
+ continue;
+ }
+
+ String locNo = wrkMast.getLocNo();
+ Integer crnNo = commonService.findCrnNoByLocNo(locNo);
+ if (crnNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "鏈尮閰嶅埌鍫嗗灈鏈�");
+ continue;
+ }
+
+ Integer targetStationId = commonService.findInStationId(crnNo, stationId);
+ if (targetStationId == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "鎼滅储鍏ュ簱绔欑偣澶辫触");
+ continue;
+ }
+
+ StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationId, targetStationId, 0);
+ if(command == null){
+ News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
+ continue;
+ }
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
+ wrkMast.setSourceStaNo(stationProtocol.getStationId());
+ wrkMast.setStaNo(targetStationId);
+ wrkMast.setSystemMsg("");
+ wrkMast.setIoTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
+ News.info("杈撻�佺珯鐐瑰叆搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationId, wrkMast.getWrkNo(), JSON.toJSONString(command));
+ }
+ }
+ }
+ }
+ }
+
+ //鎵ц杈撻�佺珯鐐瑰嚭搴撲换鍔�
+ public synchronized void stationOutExecute() {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.OUTBOUND_RUN_COMPLETE.sts));
+ for (WrkMast wrkMast : wrkMasts) {
+ BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", wrkMast.getCrnNo()));
+ if (basCrnp == null) {
+ continue;
+ }
+
+ List<StationObjModel> outStationList = basCrnp.getOutStationList$();
+ if(outStationList.isEmpty()){
+ News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+ continue;
+ }
+
+ for (StationObjModel stationObjModel : outStationList) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if(stationThread == null){
+ continue;
+ }
+
+ Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+ StationProtocol stationProtocol = stationMap.get(stationObjModel.getStationId());
+ if (stationProtocol == null) {
+ continue;
+ }
+
+ //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿0
+ if (stationProtocol.isAutoing()
+ && stationProtocol.isLoading()
+ && stationProtocol.getTaskNo() == 0
+ ) {
+ StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationProtocol.getStationId(), wrkMast.getStaNo(), 0);
+ if(command == null){
+ News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
+ continue;
+ }
+
+ wrkMast.setWrkSts(WrkStsType.STATION_RUN.sts);
+ wrkMast.setSystemMsg("");
+ wrkMast.setIoTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+ News.info("杈撻�佺珯鐐瑰嚭搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationProtocol.getStationId(), wrkMast.getWrkNo(), JSON.toJSONString(command));
+ }
+ }
+ }
+ }
+ }
+
+ //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
+ public synchronized void stationOutExecuteFinish() {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.STATION_RUN.sts));
+ for (WrkMast wrkMast : wrkMasts) {
+ Integer wrkNo = wrkMast.getWrkNo();
+
+ boolean complete = true;
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+ if (stationThread == null) {
+ continue;
+ }
+
+ List<StationProtocol> list = stationThread.getStatus();
+ for (StationProtocol stationProtocol : list) {
+ if (stationProtocol.getTaskNo().equals(wrkNo)) {
+ complete = false;
+ }
+ }
+ }
+
+ if (complete) {
+ wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
+ wrkMast.setIoTime(new Date());
+ wrkMastService.updateById(wrkMast);
+ }
+ }
+ }
+
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 46ac0a8..3850384 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -46,4 +46,6 @@
deviceExecuteConfig:
# 姣忎釜绾跨▼绠℃帶璁惧鎵ц鏁伴噺
threadControlCount: 10
- liftType: lift
\ No newline at end of file
+ liftType: lift
+
+mainProcessPlugin: FakeProcess
\ No newline at end of file
diff --git a/src/main/resources/mapper/BasCrnpMapper.xml b/src/main/resources/mapper/BasCrnpMapper.xml
index fbba1f7..c584ec2 100644
--- a/src/main/resources/mapper/BasCrnpMapper.xml
+++ b/src/main/resources/mapper/BasCrnpMapper.xml
@@ -14,6 +14,9 @@
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="memo" property="memo" />
+ <result column="control_rows" property="controlRows" />
+ <result column="in_station_list" property="inStationList" />
+ <result column="out_station_list" property="outStationList" />
</resultMap>
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 153d314..c0da5d5 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -22,6 +22,7 @@
<result column="error_memo" property="errorMemo" />
<result column="qr_code_value" property="qrCodeValue" />
<result column="status" property="status" />
+ <result column="barcode" property="barcode" />
</resultMap>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 0187fbe..dbe06de 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -22,149 +22,17 @@
<result column="error_memo" property="errorMemo" />
<result column="memo" property="memo" />
<result column="barcode" property="barcode" />
- <result column="shuttle_no" property="shuttleNo" />
- <result column="lift_no" property="liftNo" />
+ <result column="crn_no" property="crnNo" />
+ <result column="rgv_no" property="rgvNo" />
<result column="wms_wrk_no" property="wmsWrkNo" />
<result column="system_msg" property="systemMsg" />
</resultMap>
- <select id="selectPakInStep1" resultMap="BaseResultMap">
- select * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC limit 0,1
- </select>
-
- <select id="selectPakInStep11" resultMap="BaseResultMap">
- select * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=1 and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC limit 0,1
- </select>
-
- <select id="selectInStep4" resultMap="BaseResultMap">
- select *
- from asr_wrk_mast
- where 1=1
- and wrk_sts = 4
- and io_type in (1,10,53,57)
- order by io_pri desc,wrk_sts desc
- </select>
-
<select id="selectByWorkNo" resultMap="BaseResultMap">
select * from asr_wrk_mast
where wrk_no=#{workNo}
limit 0,1
- </select>
-
- <select id="selectLiftStep223103" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where 1=1
- and wrk_sts in (2,103,303)
- order by io_pri desc,wrk_sts desc
- </select>
-
- <select id="selectByWorkNo324104" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where wrk_no=#{workNo}
- and wrk_sts in (3,104,303,306)
- limit 0,1
- </select>
-
- <select id="selectBy2125" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where wrk_sts in (101,105)
- and io_type in (101,103,107,110)
- order by io_pri desc,wrk_sts desc
- </select>
-
- <select id="selectShuttleWrkByLev" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where shuttle_no is not null
- and ((wrk_sts not in (9,10) and loc_no like #{lev}) or (wrk_sts not in (29,30) and source_loc_no like #{lev}))
- order by io_pri desc,wrk_sts desc
- </select>
-
- <select id="selectShuttleOutWrkByLev" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where shuttle_no is not null
- and (wrk_sts not in (109,110) and source_loc_no like #{lev})
- order by io_pri desc,wrk_sts desc
- </select>
-
- <select id="selectLiftWrkMast" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where lift_no = #{liftNo}
- </select>
-
- <select id="selectLocToLocWrkMast" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where io_type in (11)
- and wrk_sts not in (9,10,109,110)
- order by io_pri desc,wrk_sts desc
- </select>
-
- <select id="selectPickStepByBarcode" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where io_type in (53,103,107)
- and wrk_sts in (2,3,104,109)
- and barcode = #{barcode}
- order by io_pri desc,wrk_sts desc
- limit 0,1
- </select>
-
- <select id="selectShuttleHasMoveWorking" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where 1=1
- and shuttle_no = #{shuttleNo}
- and wrk_sts not in (311)
- and io_type = 200
- order by io_pri desc,io_time,wrk_no asc
- limit 0,1
- </select>
-
- <select id="selectShuttleMoveWrk" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where 1=1
- and wrk_sts in (301,302,303,304,305,306,307,308,309,310,311)
- and io_type = 200
- order by io_pri desc,io_time,wrk_no asc
- </select>
-
- <select id="selectShuttleWorking" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where 1=1
- and shuttle_no = #{shuttleNo}
- and wrk_sts not in (9,10,109,110,210)
- and io_type not in (200,300)
- order by io_pri desc,io_time,wrk_no asc
- limit 0,1
- </select>
-
- <select id="selectByBarcode" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where 1=1
- and barcode = #{barcode}
- order by io_pri desc,io_time,wrk_no asc
- limit 0,1
- </select>
-
- <select id="selectInWrkMastByLiftNo" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where 1=1
- and lift_no = #{liftNo}
- and io_type <= 100
- and wrk_sts in (1,2,3,4,5)
- order by io_pri desc,io_time,wrk_no asc
- </select>
-
- <select id="selectChargeWorking" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where io_type in (300)
- and shuttle_no = #{shuttleNo}
- order by io_pri desc,io_time,wrk_no asc
- </select>
-
- <select id="selectChargeWorkingByChargeSta" resultMap="BaseResultMap">
- select * from asr_wrk_mast
- where wrk_sts in (201,202,203,204,205,210)
- and mk = #{chargeSta}
- order by io_pri desc,io_time,wrk_no asc
</select>
</mapper>
diff --git a/src/main/webapp/components/WatchRgvCard.js b/src/main/webapp/components/WatchRgvCard.js
index 18e6ba5..fed44ee 100644
--- a/src/main/webapp/components/WatchRgvCard.js
+++ b/src/main/webapp/components/WatchRgvCard.js
@@ -55,7 +55,7 @@
rgvList: [],
activeNames: "",
searchRgvNo: "",
- showControl: true,
+ showControl: false,
controlParam: {
rgvNo: "",
sourcePos: "",
diff --git a/src/main/webapp/static/js/basCrnp/basCrnp.js b/src/main/webapp/static/js/basCrnp/basCrnp.js
index 6834467..68888c0 100644
--- a/src/main/webapp/static/js/basCrnp/basCrnp.js
+++ b/src/main/webapp/static/js/basCrnp/basCrnp.js
@@ -24,13 +24,16 @@
{type: 'checkbox'}
,{field: 'crnNo', align: 'center',title: '缂栧彿'}
,{field: 'status$', align: 'center',title: '鐘舵��'}
- ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+ // ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
,{field: 'inEnable', align: 'center',title: '鍙叆(checkBox)'}
,{field: 'outEnable', align: 'center',title: '鍙嚭(checkBox)'}
- ,{field: 'createBy', align: 'center',title: '鍒涘缓浜哄憳'}
- ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
- ,{field: 'updateBy', align: 'center',title: '淇敼浜哄憳'}
- ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+ ,{field: 'controlRows', align: 'center',title: '鎺у埗搴撲綅鎺掑彿'}
+ ,{field: 'inStationList', align: 'center',title: '鍏ュ簱绔欏垪琛�'}
+ ,{field: 'outStationList', align: 'center',title: '鍑哄簱绔欏垪琛�'}
+ // ,{field: 'createBy', align: 'center',title: '鍒涘缓浜哄憳'}
+ // ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
+ // ,{field: 'updateBy', align: 'center',title: '淇敼浜哄憳'}
+ // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
,{field: 'memo', align: 'center',title: '澶囨敞'}
,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
diff --git a/src/main/webapp/static/js/locMast/locMast.js b/src/main/webapp/static/js/locMast/locMast.js
index 726e411..3900990 100644
--- a/src/main/webapp/static/js/locMast/locMast.js
+++ b/src/main/webapp/static/js/locMast/locMast.js
@@ -21,7 +21,7 @@
{type: 'checkbox', fixed: 'left'}
,{field: 'locNo', align: 'center',title: '搴撲綅鍙�',sort:true}
,{field: 'locSts$', align: 'center',title: '搴撲綅鐘舵��',width:200}
- ,{field: 'qrCodeValue', align: 'center',title: '浜岀淮鐮佸��', sort:true}
+ ,{field: 'barcode', align: 'center',title: '鎵樼洏鐮�'}
,{field: 'row1', align: 'center',title: '鎺�', sort:true}
,{field: 'bay1', align: 'center',title: '鍒�', sort:true}
,{field: 'lev1', align: 'center',title: '灞�', sort:true}
diff --git a/src/main/webapp/views/basCrnp/basCrnp.html b/src/main/webapp/views/basCrnp/basCrnp.html
index f6e9865..d3054fe 100644
--- a/src/main/webapp/views/basCrnp/basCrnp.html
+++ b/src/main/webapp/views/basCrnp/basCrnp.html
@@ -82,12 +82,12 @@
</select>
</div>
</div>
- <div class="layui-form-item">
- <label class="layui-form-label">宸ヤ綔鍙�: </label>
- <div class="layui-input-block">
- <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ュ伐浣滃彿">
- </div>
- </div>
+<!-- <div class="layui-form-item">-->
+<!-- <label class="layui-form-label">宸ヤ綔鍙�: </label>-->
+<!-- <div class="layui-input-block">-->
+<!-- <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ュ伐浣滃彿">-->
+<!-- </div>-->
+<!-- </div>-->
<div class="layui-form-item">
<label class="layui-form-label">鍙叆(checkBox): </label>
<div class="layui-input-block">
@@ -101,6 +101,24 @@
</div>
</div>
<div class="layui-form-item">
+ <label class="layui-form-label">鎺у埗搴撲綅鎺掑彿: </label>
+ <div class="layui-input-block">
+ <input class="layui-input" name="controlRows" placeholder="璇疯緭鍏ユ帶鍒跺簱浣嶆帓鍙�">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">鍏ュ簱绔欏垪琛�: </label>
+ <div class="layui-input-block">
+ <input class="layui-input" name="inStationList" placeholder="璇疯緭鍏ュ叆搴撶珯鍒楄〃">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">鍑哄簱绔欏垪琛�: </label>
+ <div class="layui-input-block">
+ <input class="layui-input" name="outStationList" placeholder="璇疯緭鍏ュ嚭搴撶珯鍒楄〃">
+ </div>
+ </div>
+ <div class="layui-form-item">
<label class="layui-form-label">澶囨敞: </label>
<div class="layui-input-block">
<input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
diff --git a/src/main/webapp/views/wrkMast/wrkMast.html b/src/main/webapp/views/wrkMast/wrkMast.html
index 36c36e9..9b25697 100644
--- a/src/main/webapp/views/wrkMast/wrkMast.html
+++ b/src/main/webapp/views/wrkMast/wrkMast.html
@@ -53,9 +53,7 @@
</el-table-column>
<el-table-column property="barcode" label="鎵樼洏鐮�">
</el-table-column>
- <el-table-column property="liftNo" label="鎻愬崌鏈�">
- </el-table-column>
- <el-table-column property="shuttleNo" label="绌挎杞�">
+ <el-table-column property="crnNo" label="鍫嗗灈鏈�">
</el-table-column>
<el-table-column property="systemMsg" label="绯荤粺娑堟伅">
</el-table-column>
@@ -67,7 +65,7 @@
<!-- <el-dropdown-item command="change">淇敼</el-dropdown-item>-->
<el-dropdown-item command="complete">瀹屾垚</el-dropdown-item>
<el-dropdown-item command="cancel">鍙栨秷</el-dropdown-item>
- <el-dropdown-item command="shuttleCommand">绌挎杞︽寚浠�</el-dropdown-item>
+<!-- <el-dropdown-item command="shuttleCommand">绌挎杞︽寚浠�</el-dropdown-item>-->
</el-dropdown-menu>
</el-dropdown>
</template>
--
Gitblit v1.9.1