From d9cea3d7757a8d580bb0574d419ba6dd9c2478e7 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 13 十二月 2024 15:11:50 +0800
Subject: [PATCH] #search shuttle
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 946 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 866 insertions(+), 80 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
index 74784be..2b00511 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -4,15 +4,26 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.dto.StartupDto;
+import com.zy.asrs.common.domain.param.SearchLocParam;
+import com.zy.asrs.common.utils.HttpHandler;
import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.action.LiftAction;
+import com.zy.asrs.wcs.core.domain.dto.MatDto;
+import com.zy.asrs.wcs.core.domain.dto.RedisMapDto;
+import com.zy.asrs.wcs.core.domain.dto.StaDto;
+import com.zy.asrs.wcs.core.domain.param.CreateInTaskParam;
import com.zy.asrs.wcs.core.entity.*;
import com.zy.asrs.wcs.core.kernel.AnalyzeService;
import com.zy.asrs.wcs.core.model.MapNode;
-import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
-import com.zy.asrs.wcs.core.model.enums.MotionStsType;
-import com.zy.asrs.wcs.core.model.enums.TaskStsType;
+import com.zy.asrs.wcs.core.model.command.LiftAssignCommand;
+import com.zy.asrs.wcs.core.model.command.LiftCommand;
+import com.zy.asrs.wcs.core.model.enums.*;
import com.zy.asrs.wcs.core.service.*;
+import com.zy.asrs.wcs.core.utils.OpenUtils;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.core.utils.ShuttleDispatcher;
import com.zy.asrs.wcs.core.utils.Utils;
@@ -20,20 +31,21 @@
import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.command.LedCommand;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
import com.zy.asrs.wcs.rcs.service.DeviceService;
-import com.zy.asrs.wcs.rcs.thread.DevpThread;
-import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import com.zy.asrs.wcs.rcs.thread.*;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.*;
/**
@@ -67,13 +79,351 @@
private ShuttleDispatcher shuttleDispatcher;
@Autowired
private RedisUtil redisUtil;
+ @Autowired
+ private BasConveyorService basConveyorService;
+ @Autowired
+ private BasConveyorStaService basConveyorStaService;
+ @Autowired
+ private BasConveyorPathService basConveyorPathService;
+ @Autowired
+ private BasLedService basLedService;
+ @Autowired
+ private DeviceBarcodeService deviceBarcodeService;
+ @Autowired
+ private ShuttleChargeStaService shuttleChargeStaService;
+ @Autowired
+ private OpenUtils openUtils;
+ @Autowired
+ private LiftAction liftAction;
/**
* 缁勬墭
* 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
*/
public synchronized void generateInboundWrk() {
+ try {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val())
+ .eq(Device::getStatus, 1));
+ for (Device devp : list) {
+ BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId()));
+ // 閬嶅巻鍏ュ簱鍙�
+ for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
+ BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
+ if(basConveyorSta == null) {
+ continue;
+ }
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue());
+ StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ Short workNo = staProtocol.getWorkNo();
+ // 灏哄妫�娴嬪紓甯�
+ boolean back = false;
+ String errMsg = "寮傚父锛�";
+ if (staProtocol.isFrontErr()) {
+ errMsg = errMsg + "鍓嶈秴闄愶紱";
+ back = true;
+ }
+ if (staProtocol.isBackErr()) {
+ errMsg = errMsg + "鍚庤秴闄�";
+ back = true;
+ }
+ if (staProtocol.isHighErr()) {
+ errMsg = errMsg + "楂樿秴闄�";
+ back = true;
+ }
+ if (staProtocol.isLeftErr()) {
+ errMsg = errMsg + "宸﹁秴闄�";
+ back = true;
+ }
+ if (staProtocol.isRightErr()) {
+ errMsg = errMsg + "鍙宠秴闄�";
+ back = true;
+ }
+ if (staProtocol.isWeightErr()) {
+ errMsg = errMsg + "瓒呴噸";
+ back = true;
+ }
+ if (staProtocol.isBarcodeErr()) {
+ errMsg = errMsg + "鎵爜澶辫触";
+ back = true;
+ }
+ // 閫�鍥�
+ if (back) {
+ // led 寮傚父鏄剧ず
+ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+ if (ledThread != null) {
+ ledThread.error(errMsg);
+ }
+ continue;
+ }
+
+ // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+ if (staProtocol.isAutoing() && staProtocol.isLoading()
+ && staProtocol.isInEnable()
+ && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
+ && staProtocol.isPakMk()
+ ) {
+
+ // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+ DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
+ if(deviceBarcode == null) {
+ continue;
+ }
+ BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
+ if (barcodeThread == null) {
+ continue;
+ }
+ String barcode = barcodeThread.getBarcode();
+ if (!Cools.isEmpty(barcode)) {
+ News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", deviceBarcode.getId(), barcode);
+
+ if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
+ staProtocol.setWorkNo((short) 32002);
+ staProtocol.setStaNo(inSta.getBackSta().shortValue());
+ devpThread.setPakMk(staProtocol.getSiteId(), false);
+ devpThread.writeWorkSta(staProtocol.getSiteId(), (short) 32002, inSta.getBackSta().shortValue());
+
+ // led 寮傚父鏄剧ず
+ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+ if (ledThread != null) {
+ String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+ ledThread.error(errorMsg);
+ }
+ continue;
+ }
+ }
+
+ // 鍒ゆ柇閲嶅宸ヤ綔妗�
+ Task task1 = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getOriginSite, inSta.getStaNo())
+ .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts, TaskStsType.ANALYZE_INBOUND.sts, TaskStsType.EXECUTE_INBOUND.sts)
+ .eq(Task::getZpallet, barcode));
+ if (task1 != null) {
+ News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", task1.getTaskNo());
+ if (staProtocol.getWorkNo().intValue() != Integer.parseInt(task1.getTaskNo())) {
+ devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getDestSite()));
+ devpThread.setPakMk(staProtocol.getSiteId(), false);
+ News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(task1));
+ }
+ continue;
+ }
+
+ try {
+ //鑾峰彇WMS鍦板潃
+ Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "WMS_URL").eq(Dict::getStatus, 1));
+ if (dict == null) {
+ News.error("WMS鍦板潃鏈厤缃�");
+ continue;
+ }
+ String wmsUrl = dict.getValue();
+
+ SearchLocParam param = new SearchLocParam();
+ param.setBarcode(barcode);
+ param.setIoType(1);
+ param.setSourceStaNo(inSta.getStaNo());
+ param.setLocType1(staProtocol.getLocType1().shortValue());
+ String response = new HttpHandler.Builder()
+ .setUri(wmsUrl)
+ .setPath("/rpc/pakin/loc/v1")
+ .setJson(JSON.toJSONString(param))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+ Integer code = jsonObject.getInteger("code");
+ if (code.equals(200)) {
+ StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+ String wmsLocNo = dto.getLocNo();
+ int row = Integer.parseInt(wmsLocNo.substring(0, 2));
+ int bay = Integer.parseInt(wmsLocNo.substring(2, 5));
+ int lev = Integer.parseInt(wmsLocNo.substring(5, 7));
+ row -= 16;
+ String wcsLocNo = Utils.getLocNo(row, bay, lev);
+
+ CreateInTaskParam createInTaskParam = new CreateInTaskParam();
+ createInTaskParam.setTaskNo(String.valueOf(dto.getWorkNo()));
+ createInTaskParam.setDestLoc(wcsLocNo);
+ createInTaskParam.setOriginSite("31002");
+ createInTaskParam.setDestSite("31004");
+ createInTaskParam.setPriority(11);
+ createInTaskParam.setBarcode(barcode);
+
+ R result = openUtils.createInTask(createInTaskParam);
+ News.info("鍒涘缓鍏ュ簱浠诲姟锛屼换鍔℃暟鎹�={}锛學MS鍝嶅簲={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject), JSON.toJSON(result));
+ try{
+ String msg = "";
+ HashMap<String, String> hashMap = new HashMap<>();
+ hashMap.put("msg", msg);
+ hashMap.put("sta", "31001");
+ new HttpHandler.Builder()
+ .setUri(wmsUrl)
+ .setPath("/rpc/led/getError")
+ .setJson(JSON.toJSONString(hashMap))
+ .build()
+ .doPost();
+ }catch (Exception e){
+
+ }
+
+ }else {
+ String msg = jsonObject.getString("msg");
+ HashMap<String, String> hashMap = new HashMap<>();
+ hashMap.put("msg", msg);
+ hashMap.put("sta", "31001");
+ new HttpHandler.Builder()
+ .setUri(wmsUrl)
+ .setPath("/rpc/led/getError")
+ .setJson(JSON.toJSONString(hashMap))
+ .build()
+ .doPost();
+ News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 鍏ュ簱-鎵樼洏杩涘簱
+ */
+ public synchronized void palletInbound() {
+ try {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val())
+ .eq(Device::getStatus, 1));
+ for (Device devp : list) {
+ BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId()));
+ // 閬嶅巻鍏ュ簱鍙�
+ for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
+ BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getDeviceStaNo().toString());
+ if(basConveyorSta == null) {
+ continue;
+ }
+
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue());
+ StaProtocol staProtocol = devpThread.getStation().get(inSta.getDeviceStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ int workNo = staProtocol.getWorkNo().intValue();
+
+ // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+ if (staProtocol.isAutoing()
+ && staProtocol.isLoading()
+ && staProtocol.isInEnable()
+ && (workNo >= 0)
+ && staProtocol.isPakMk()
+ ) {
+ Object object = redisUtil.get(DeviceRedisConstant.LIFT_PALLET_INBOUND + workNo);
+ if (object != null) {
+ continue;
+ }
+
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getDestSite, inSta.getDeviceStaNo())
+ .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
+ .eq(Task::getTaskNo, workNo));
+ if (task != null) {
+ int lev = Utils.getLev(task.getDestLoc());
+ Integer targetSite = null;
+ if (lev == 1) {
+ targetSite = 31006;
+ }else if (lev == 2) {
+ targetSite = 31007;
+ }else if (lev == 3) {
+ targetSite = 31008;
+ }
+ if(targetSite == null) {
+ throw new CoolException(lev + "灞傜珯鐐逛俊鎭笉瀛樺湪");
+ }
+
+ StaProtocol staProtocol1 = devpThread.getStation().get(targetSite);
+ if (staProtocol1 == null) {
+ break;
+ }
+ if (!staProtocol1.isAutoing()) {
+ break;
+ }
+ if (staProtocol1.isLoading()) {
+ break;
+ }
+ if (staProtocol1.getWorkNo().intValue() != 0) {
+ break;
+ }
+
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, inSta.getLiftNo());
+ if (liftThread == null) {
+ break;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ break;
+ }
+
+ if (!liftThread.isIdle()) {
+ break;
+ }
+
+ if (motionService.count(new LambdaQueryWrapper<Motion>()
+ .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
+ .eq(Motion::getDevice, inSta.getLiftNo())
+ .eq(Motion::getMotionSts, MotionStsType.EXECUTING.val())) > 0) {
+ break;
+ }
+
+ //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
+ boolean liftResult = Utils.checkLiftHasBinding(liftProtocol.getLiftNo(), String.valueOf(workNo));
+ if (liftResult) {
+ //瀛樺湪浠诲姟锛岀姝㈡墽琛�
+ break;
+ }
+
+ //姣忔鎵ц鎻愬崌鏈烘寚浠ら兘缁戝畾鎻愬崌鏈�
+ task.setLiftNo(liftProtocol.getLiftNo());
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ break;
+ }
+
+ List<LiftCommand> command = liftThread.getPalletInOutCommand(workNo, 1, lev, inSta.getDeviceStaNo(), targetSite, LiftCommandModeType.PALLET_INOUT);
+
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setLiftNo(liftProtocol.getLiftNo());
+ assignCommand.setTaskNo(workNo);
+ assignCommand.setDeviceTaskNo(liftThread.generateDeviceTaskNo(workNo, MotionCtgType.LIFT_WITH_GOODS));
+ assignCommand.setCommands(command);
+ liftAction.assignWork(liftThread.getDevice(), assignCommand);
+
+ redisUtil.set(DeviceRedisConstant.LIFT_PALLET_INBOUND + workNo, "send", 60 * 60 * 6);
+ break;
+ }
+
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
/**
@@ -82,13 +432,18 @@
public synchronized void initRealtimeBasMap() {
try {
List<Dict> dicts = dictService.list(new LambdaQueryWrapper<Dict>()
- .like(Dict::getFlag, "map")
+ .like(Dict::getFlag, "map-")
.eq(Dict::getStatus, 1));
TreeMap<Integer, ArrayList<ArrayList<MapNode>>> levData = new TreeMap<>();
for (Dict dict : dicts) {
String[] split = dict.getFlag().split("-");
int lev = Integer.parseInt(split[1]);
+
+ Object data = redisUtil.get(DeviceRedisConstant.MAP + lev);
+ if (data != null) {
+ continue;
+ }
TreeMap<Integer, List<JSONObject>> rows = new TreeMap<>();
//鎺掑簭Row
@@ -121,6 +476,19 @@
mapNode.setRow(object.getInteger("row"));
mapNode.setBay(object.getInteger("bay"));
mapNode.setNo(object.getString("row") + "-" + object.getString("bay"));
+ mapNode.setXBase(object.getInteger("refx"));
+ mapNode.setYBase(object.getInteger("refy"));
+
+ if(mapNode.getValue() == MapNodeType.CONVEYOR.id) {
+ //杈撻�佺嚎,鍒ゆ柇灏忚溅鏄惁鍙蛋
+ if (object.containsKey("conveyorHasGo")) {
+ if(object.getBoolean("conveyorHasGo")) {
+ //灏忚溅鍙蛋
+ mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id);
+ }
+ }
+ }
+
nodes.add(mapNode);
}
@@ -131,7 +499,36 @@
}
});
- list.add(nodes);
+ ArrayList<MapNode> sortNodes = new ArrayList<>();
+ int defaultBay = 1;//榛樿浠�1鍒楀紑濮�
+ for (MapNode node : nodes) {
+ if (node.getBay() == defaultBay) {
+ defaultBay++;
+ sortNodes.add(node);
+ continue;
+ }
+
+ //瀛樺湪绌虹己鑺傜偣锛岃嚜鍔ㄨˉ瓒�
+ for (int i = defaultBay; i < node.getBay(); i++) {
+ MapNode mapNode = new MapNode();
+ mapNode.setValue(MapNodeType.DISABLE.id);
+ mapNode.setTop(1000);
+ mapNode.setBottom(1000);
+ mapNode.setLeft(1000);
+ mapNode.setRight(1000);
+ mapNode.setRow(node.getRow());
+ mapNode.setBay(i);
+ mapNode.setNo(node.getRow() + "-" + i);
+ mapNode.setXBase(0);
+ mapNode.setYBase(0);
+ sortNodes.add(mapNode);
+ }
+
+ defaultBay = node.getBay() + 1;
+ sortNodes.add(node);
+ }
+
+ list.add(sortNodes);
}
levData.put(lev, list);
@@ -141,7 +538,7 @@
ArrayList<ArrayList<MapNode>> lists = entry.getValue();//鑾峰彇鍦板浘
MapNode mapNode = new MapNode();
- mapNode.setValue(-1);
+ mapNode.setValue(MapNodeType.DISABLE.id);
mapNode.setTop(1000);
mapNode.setBottom(1000);
mapNode.setLeft(1000);
@@ -149,6 +546,8 @@
mapNode.setRow(0);
mapNode.setBay(0);
mapNode.setNo("0-0");
+ mapNode.setXBase(0);
+ mapNode.setYBase(0);
//鑾峰彇鏈�闀縭ow
int row = 0;
@@ -162,6 +561,19 @@
list.add(mapNode.clone());
}
+ //鏈�鍚庝竴娆℃娴嬪湴鍥捐妭鐐规槸鍚﹀畬鏁达紝鍦板浘鐭╅樀row鍧囪杈惧埌鏈�闀縭ow
+ for (ArrayList<MapNode> list : lists) {
+ int len = (row + 2);//row+2鏄洜涓哄ご鑺傜偣鍜屽熬鑺傜偣瀛樺湪浜轰负娣诲姞鐨�-1鑺傜偣
+ if (list.size() == len) {
+ continue;
+ }
+ //鑺傜偣闀垮害涓嶆弧瓒筹紝杩涜琛ヨ冻
+ for (int i = list.size(); i < len; i++) {
+ list.add(mapNode.clone());
+ }
+ }
+
+
ArrayList<MapNode> headNodes = new ArrayList<>();
ArrayList<MapNode> footerNodes = new ArrayList<>();
for (int i = 0; i < row+2; i++) {
@@ -174,14 +586,15 @@
Integer lev = entry.getKey();
Date now = new Date();
- HashMap<String, Object> map = new HashMap<>();
- map.put("data", JSON.toJSONString(lists));
- map.put("create_time", now);
- map.put("update_time", now);
- map.put("lev", lev);
+ RedisMapDto map = new RedisMapDto();
+ map.setData(JSON.toJSONString(lists));
+ map.setCreateTime(now);
+ map.setUpdateTime(now);
+ map.setLev(lev);
//灏嗗湴鍥炬暟鎹瓨鍏edis
redisUtil.set(DeviceRedisConstant.MAP + lev, JSON.toJSONString(map));
+ redisUtil.set(DeviceRedisConstant.BASE_MAP + lev, JSON.toJSONString(map));
}
} catch (Exception e) {
e.printStackTrace();
@@ -190,55 +603,208 @@
// 瑙f瀽鍏ュ簱宸ヤ綔妗�
public synchronized void analyzeInBoundTask() {
- for (Task task : taskService.selectWaitAnalyzeInBoundTask()) {
- // generate motion list
- List<Motion> motionList = analyzeService.generateMotion(task);
- if (motionList.isEmpty()) {
- continue;
- }
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ try {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val())
+ .eq(Device::getStatus, 1));
+ for (Device devp : list) {
+ BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId()));
+ // 閬嶅巻鍏ュ簱鍙�
+ for (StaDto inSta : JSON.parseArray(basConveyor.getDeviceInSta(), StaDto.class)) {
+ BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
+ if(basConveyorSta == null) {
+ continue;
+ }
- // 鏇存柊宸ヤ綔涓绘。
- task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
- task.setUpdateTime(new Date());
- if (!taskService.updateById(task)) {
- News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue());
+ StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ int workNo = staProtocol.getWorkNo().intValue();
+
+ // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+ if (staProtocol.isAutoing()
+ && staProtocol.isInEnable()
+ && (workNo >= 0)
+ && staProtocol.isPakMk()
+ ) {
+
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
+ .eq(Task::getTaskNo, workNo));
+ if (task != null) {
+ if (!Cools.isEmpty(task.getLiftNo())) {
+ if (task.getLiftNo() > 0) {
+ task.setLiftNo(0);
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.info("{}浠诲姟鏇存柊閲婃斁鎻愬崌鏈哄け璐�", task.getTaskNo());
+ }
+ }
+ }
+
+ if (Cools.isEmpty(task.getShuttleNo())) {
+ //鍒嗛厤灏忚溅
+ //鎼滅储绌洪棽杞�
+ ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+ if (shuttleThread == null) {
+ News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+ continue;
+ }
+
+ task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+ }
+ continue;
+ }
+
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateMotion(task);
+ if (motionList.isEmpty()) {
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
+
+ // 鏇存柊宸ヤ綔涓绘。
+ task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+ }
+ break;
+ }
+
+ }
+ }
}
+ } catch (Exception e) {
+ e.printStackTrace();
}
+
+// for (Task task : taskService.selectWaitAnalyzeInBoundTask()) {
+// BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, task.getDestSite()));
+// if (basConveyorSta == null) {
+// continue;
+// }
+// BasConveyor basConveyor = basConveyorService.getById(basConveyorSta.getConveyorId());
+// if (basConveyor == null) {
+// continue;
+// }
+//// DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
+//// if (deviceBarcode == null) {
+//// continue;
+//// }
+//// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
+//// if (barcodeThread == null) {
+//// continue;
+//// }
+//// if (!barcodeThread.getBarcode().equals(task.getZpallet())) {
+//// continue;
+//// }
+// if (Cools.isEmpty(basConveyorSta.getTaskNo())){
+// continue;
+// }
+// if (!basConveyorSta.getTaskNo().toString().equals(task.getTaskNo())){
+// continue;
+// }
+// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+// if (devpThread == null) {
+// continue;
+// }
+// StaProtocol staProtocol = devpThread.getStation().get(basConveyorSta.getSiteNo());
+// if (staProtocol == null) {
+// continue;
+// }
+// if (!(staProtocol.isAutoing()
+// && staProtocol.isLoading()
+// && staProtocol.isInEnable())) {
+// continue;
+// }
+//
+// //瑙f瀽鍓嶅垽鏂唴閮ㄧ洰鏍囧�兼槸鍚︽湁鐗� 鏈夊伐浣滃彿
+// StaProtocol staProtocolInside = devpThread.getStation().get(Utils.getStaByLev(Utils.getLev(task.getDestLoc())));
+// if (staProtocolInside == null) {
+// continue;
+// }
+// if (staProtocolInside.isLoading() || staProtocolInside.getWorkNo() !=0) {
+// continue;
+// }
+//
+// if (Cools.isEmpty(task.getShuttleNo())) {
+// //鍒嗛厤灏忚溅
+// //鎼滅储绌洪棽杞�
+// ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+// if (shuttleThread == null) {
+// News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+// continue;
+// }
+//
+// task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+// task.setUpdateTime(new Date());
+// if (!taskService.updateById(task)) {
+// News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+// }
+// continue;
+// }
+//
+// // generate motion list
+// List<Motion> motionList = analyzeService.generateMotion(task);
+// if (motionList.isEmpty()) {
+// continue;
+// }
+// motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
+//
+// // 鏇存柊宸ヤ綔涓绘。
+// task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
+// task.setUpdateTime(new Date());
+// if (!taskService.updateById(task)) {
+// News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+// }
+// }
}
/**
* 鍑哄簱 ====>> 鍚屼竴鏃堕棿涓�鍙扮┛姊溅鍙兘鏈変竴涓嚭搴撲换鍔�
*/
- public synchronized void generateOutboundWrkMast() {
+ public synchronized void analyzeOutBoundTask() {
List<Task> tasks = taskService.selectPakOut();
if (tasks.isEmpty()) {
return;
}
for (Task task : tasks) {
- DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ BasConveyorSta originStaObj = basConveyorStaService.selectBySiteNo(task.getOriginSite());//鑾峰彇婧愮珯
+ if (originStaObj == null) {
+ continue;
+ }
+
+ BasConveyor basConveyor = basConveyorService.getById(originStaObj.getConveyorId());
+ if(basConveyor == null) {
+ continue;
+ }
+
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(task.getOriginSite()));//婧愮珯
- StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
- if (staProtocol == null || staProtocol1 == null) {
+// StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
+ if (staProtocol == null) {
continue;
} else {
staProtocol = staProtocol.clone();
- staProtocol1 = staProtocol1.clone();
+// staProtocol1 = staProtocol1.clone();
}
-// // 鏌ヨ绔欑偣璇︾粏淇℃伅
-// BasDevp staDetl = basDevpService.selectById(outSta.getStaNo());
-// if (staDetl == null) {
-// log.error("鍑哄簱 ===>> 绔欑偣鍦ㄦ暟鎹簱涓嶅瓨鍦�, 绔欑偣缂栧彿={}", outSta.getStaNo());
-// continue;
-// }
- // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+ // 鍒ゆ柇鍑哄簱绔欑姸鎬�
if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
-
- if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) {
- continue;
- }
+// if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) {
+// continue;
+// }
// //鍚屽簱浣嶇粍鏍¢獙
// List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
@@ -248,13 +814,30 @@
// continue;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
// }
+ if (Cools.isEmpty(task.getShuttleNo())) {
+ //鍒嗛厤灏忚溅
+ //鎼滅储绌洪棽杞�
+ ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+ if (shuttleThread == null) {
+ News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+ continue;
+ }
+
+ task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+ }
+ continue;
+ }
+
// generate motion list
List<Motion> motionList = analyzeService.generateMotion(task);
if (Cools.isEmpty(motionList)) {
log.error("鍑哄簱 ===>> 鏆傛椂娌℃湁绌洪棽灏忚溅, 浠诲姟鍙�={}", task.getTaskNo());
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
// 鏇存柊宸ヤ綔涓绘。
task.setTaskSts(TaskStsType.ANALYZE_OUTBOUND.sts); // 宸ヤ綔鐘舵��
@@ -267,21 +850,49 @@
}
}
+ // 瑙f瀽灏忚溅绉诲姩宸ヤ綔妗�
+ public synchronized void analyzeMoveTask() {
+ for (Task task : taskService.selectWaitAnalyzeMoveTask()) {
+ if (Cools.isEmpty(task.getShuttleNo())) {
+ //鍒嗛厤灏忚溅
+ //鎼滅储绌洪棽杞�
+ ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+ if (shuttleThread == null) {
+ News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+ continue;
+ }
+
+ task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+ }
+ continue;
+ }
+
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateShuttleMoveMotion(task);
+ if (motionList.isEmpty()) {
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
+
+ // 鏇存柊宸ヤ綔涓绘。
+ task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts); // 宸ヤ綔鐘舵��
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+ }
+ }
+ }
+
/**
* 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
*/
public synchronized void loopShuttleCharge() {
- // 鑾峰彇鍏呯數妗╁簱浣嶇被鍨�
- LocCtg locCtg = locCtgService.getOne(new LambdaQueryWrapper<LocCtg>()
- .eq(LocCtg::getFlag, "CHARGE")
- .eq(LocCtg::getStatus, 1));
- if (locCtg == null) {
- return;
- }
-
//鑾峰彇鍏呯數浠诲姟绫诲瀷
TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
- .eq(TaskCtg::getFlag, "CHARGE")
+ .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.CHARGE))
.eq(TaskCtg::getStatus, 1));
if (taskCtg == null) {
return;
@@ -313,20 +924,19 @@
String currentLocNo = shuttleProtocol.getCurrentLocNo();
int lev = Utils.getLev(currentLocNo);//鑾峰彇灏忚溅妤煎眰
//鎼滅储灏忚溅褰撳墠妤煎眰鍏呯數妗�
- ArrayList<Loc> allChargeLoc = new ArrayList<>();
- List<Loc> list1 = locService.list(new LambdaQueryWrapper<Loc>()
- .eq(Loc::getLocCtg, locCtg.getId())
- .eq(Loc::getStatus, 1)
- .eq(Loc::getLev, lev));
+ ArrayList<ShuttleChargeSta> allChargeLoc = new ArrayList<>();
+
+ List<ShuttleChargeSta> list1 = shuttleChargeStaService.list(new LambdaQueryWrapper<ShuttleChargeSta>()
+ .eq(ShuttleChargeSta::getDeviceLev, lev)
+ .eq(ShuttleChargeSta::getStatus, 1));
if (!list1.isEmpty()) {
allChargeLoc.addAll(list1);
}
//鎼滅储鍏朵粬妤煎眰鍏呯數妗�
- List<Loc> list2 = locService.list(new LambdaQueryWrapper<Loc>()
- .eq(Loc::getLocCtg, locCtg.getId())
- .eq(Loc::getStatus, 1)
- .notIn(Loc::getLev, lev));
+ List<ShuttleChargeSta> list2 = shuttleChargeStaService.list(new LambdaQueryWrapper<ShuttleChargeSta>()
+ .notIn(ShuttleChargeSta::getDeviceLev, lev)
+ .eq(ShuttleChargeSta::getStatus, 1));
if (!list2.isEmpty()) {
allChargeLoc.addAll(list2);
}
@@ -337,24 +947,34 @@
}
//閫夋嫨绌洪棽鍏呯數妗�
- Loc chargeLoc = null;
- for (Loc loc : allChargeLoc) {
+ ShuttleChargeSta chargeSta = null;
+ for (ShuttleChargeSta shuttleChargeSta : allChargeLoc) {
// 鍒ゆ柇鍏呯數浣嶆槸鍚﹁鍗犵敤(杞﹁締浣嶇疆)
- if (Utils.hasShuttleInLoc(loc.getLocNo(), device.getId())) {
+ if (Utils.hasShuttleInLoc(shuttleChargeSta.getDeviceLoc(), device.getId())) {
continue;
}
// 鐩樼偣鍏呯數浣嶆槸鍚﹀瓨鍦ㄤ换鍔℃。
- List<Task> tasks = taskService.hasChargeInLoc(loc.getLocNo());
+ List<Task> tasks = taskService.hasChargeInLoc(shuttleChargeSta.getDeviceLoc());
if (!tasks.isEmpty()) {
continue;
}
- chargeLoc = loc;
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getLocNo, shuttleChargeSta.getDeviceLoc()));
+ if (loc == null) {
+ continue;
+ }
+
+ if (!loc.getLocSts().equals(LocStsType.C.val())) {
+ continue;//搴撲綅涓嶆槸鍏呯數妗�
+ }
+
+ chargeSta = shuttleChargeSta;
break;
}
- if (chargeLoc == null) {
+ if (chargeSta == null) {
continue;//鏈壘鍒板厖鐢垫々
}
@@ -375,7 +995,7 @@
continue;
}
- String chargeLocNo = chargeLoc.getLocNo();
+ String chargeLocNo = chargeSta.getDeviceLoc();
Task task = new Task();
task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
task.setTaskNo(String.valueOf(Utils.getTaskNo("CHARGE")));
@@ -399,7 +1019,7 @@
News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
task.setTaskSts(TaskStsType.ANALYZE_CHARGE.sts);
if (!taskService.save(task)) {
@@ -415,17 +1035,9 @@
* 鍥涘悜绌挎杞︾數閲忔娴� ===>> 婊$數鍚庡洖鍒板緟鏈轰綅
*/
public synchronized void loopShuttleToStandbyCauseCharge() {
- Integer enoughPower = 90;
- Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>()
- .eq(Dict::getFlag, "chargeMaxValue")
- .eq(Dict::getStatus, 1));
- if (dict != null) {
- enoughPower = Integer.parseInt(dict.getValue());
- }
-
//鑾峰彇杩佺Щ浠诲姟绫诲瀷
TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
- .eq(TaskCtg::getFlag, "MOVE")
+ .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE))
.eq(TaskCtg::getStatus, 1));
if (taskCtg == null) {
return;
@@ -438,6 +1050,11 @@
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
if (shuttleThread == null) {
+ continue;
+ }
+
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
continue;
}
@@ -463,8 +1080,21 @@
continue;
}
+ ShuttleChargeSta chargeSta = shuttleChargeStaService.getOne(new LambdaQueryWrapper<ShuttleChargeSta>()
+ .eq(ShuttleChargeSta::getDeviceLoc, chargeTask.getDestLoc())
+ .eq(ShuttleChargeSta::getStatus, 1));
+ if (chargeSta == null) {
+ continue;//鍏呯數妗╀笉瀛樺湪锛屽紓甯�
+ }
+
+ String standbyLoc = chargeSta.getStandbyLoc();
+ if (standbyLoc == null) {
+ continue;//閬胯浣嶇疆鏁版嵁涓嶅瓨鍦�
+ }
+ List<String> availableLoc = JSON.parseArray(standbyLoc, String.class);
+
//鑾峰彇閬胯浣嶇疆
- String standByLocNo = shuttleDispatcher.searchStandByLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo());
+ String standByLocNo = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), availableLoc);
Task task = new Task();
task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
@@ -489,7 +1119,7 @@
News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts);
@@ -504,4 +1134,160 @@
}
}
+ /**
+ * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
+ */
+ public void ledExecute() {
+ // 閬嶅巻LED
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.LED.val())
+ .eq(Device::getStatus, 1));
+ for (Device ledDevice : list) {
+ //鑾峰彇led鏁版嵁
+ BasLed led = basLedService.getOne(new LambdaQueryWrapper<BasLed>()
+ .eq(BasLed::getDeviceId, ledDevice.getId()));
+ List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
+
+ BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>()
+ .eq(BasConveyor::getDeviceId, led.getConveyorId().intValue()));
+ if (basConveyor == null) {
+ continue;
+ }
+
+ // 鑾峰彇杈撻�佺嚎plc绾跨▼
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+ // 鍛戒护闆嗗悎
+ List<LedCommand> commands = new ArrayList<>();
+ // 宸ヤ綔妗i泦鍚�
+ List<Task> tasks = new ArrayList<>();
+ for (Integer staNo : staArr) {
+ // 鑾峰彇鍙夎溅绔欑偣
+ StaProtocol staProtocol = devpThread.getStation().get(staNo);
+ if (null == staProtocol || null == staProtocol.getWorkNo()) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ String taskNo = "0";
+ if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001 ){
+ if (0 != staProtocol.getWorkNo()){
+ Motion motion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getMotionCtg, 9).eq(Motion::getTemp, staProtocol.getWorkNo()));
+ // 鑾峰彇宸ヤ綔妗f暟鎹�
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
+ if (null == task) {
+ continue;
+ }
+ taskNo = task.getWmsTaskNo();
+ }
+
+ } else if (staProtocol.isInEnable() && staProtocol.getSiteId() == 31002) {
+ taskNo = staProtocol.getStaNo().toString();
+ }
+
+ try {
+ //鑾峰彇WMS鍦板潃
+ Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "WMS_URL").eq(Dict::getStatus, 1));
+ if (dict != null) {
+ String wmsUrl = dict.getValue();
+
+ HashMap<String, Object> param = new HashMap<>();
+ param.put("taskNo", taskNo);
+ param.put("sta",staNo);
+ String response = new HttpHandler.Builder()
+ .setUri(wmsUrl)
+ .setPath("/rpc/led/getTask")
+ .setJson(JSON.toJSONString(param))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ Integer code = jsonObject.getInteger("code");
+ if (code.equals(200)) {
+
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+
+ /**
+ * 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
+ */
+ public void ledReset() {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.LED.val())
+ .eq(Device::getStatus, 1));
+ for (Device ledDevice : list) {
+ //鑾峰彇led鏁版嵁
+ BasLed led = basLedService.getOne(new LambdaQueryWrapper<BasLed>()
+ .eq(BasLed::getDeviceId, ledDevice.getId()));
+ List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
+
+ BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId().intValue());
+ if (basConveyor == null) {
+ continue;
+ }
+
+ // 鑾峰彇杈撻�佺嚎plc绾跨▼
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+ // 鍛戒护闆嗗悎
+ boolean reset = true;
+ for (Integer staNo : staArr) {
+ // 鑾峰彇鍙夎溅绔欑偣
+ StaProtocol staProtocol = devpThread.getStation().get(staNo);
+ if (staProtocol == null) {
+ continue;
+ }
+ if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
+ reset = false;
+ break;
+ }
+ }
+ // 鑾峰彇led绾跨▼
+ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledDevice.getId().intValue());
+ // led鏄剧ず榛樿鍐呭
+ if (reset && !ledThread.isLedMk()) {
+ ledThread.errorReset();
+ ledThread.setLedMk(true);
+ }
+ }
+
+ for (Device ledDevice : list) {
+ //鑾峰彇led鏁版嵁
+ BasLed led = basLedService.getOne(new LambdaQueryWrapper<BasLed>()
+ .eq(BasLed::getDeviceId, ledDevice.getId()));
+ List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
+
+ BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId());
+ if (basConveyor == null) {
+ continue;
+ }
+
+ // 鑾峰彇杈撻�佺嚎plc绾跨▼
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+ // 鍛戒护闆嗗悎
+ boolean reset = true;
+ for (Integer staNo : staArr) {
+ // 鑾峰彇鍙夎溅绔欑偣
+ StaProtocol staProtocol = devpThread.getStation().get(staNo);
+ if (staProtocol == null) { continue; }
+ if (staProtocol.getWorkNo() != 0) {
+ reset = false;
+ break;
+ }
+ }
+ // 鑾峰彇led绾跨▼
+ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledDevice.getId().intValue());
+ // led鏄剧ず榛樿鍐呭
+ if (reset && !ledThread.isLedMk()) {
+ ledThread.reset();
+ ledThread.setLedMk(true);
+ }
+ }
+ }
+
}
--
Gitblit v1.9.1