From 3688a0c6f14ab36966fa36866eeab7b812f37b70 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期六, 16 八月 2025 14:05:28 +0800
Subject: [PATCH] 1
---
src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java | 403 ++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 339 insertions(+), 64 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
index db82921..bf00720 100644
--- a/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -1,11 +1,15 @@
package com.zy.asrs.service.impl;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.zy.asrs.entity.LocMast;
-import com.zy.asrs.entity.WrkMast;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.DateUtils;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.param.OpenBusSubmitParam;
+import com.zy.asrs.domain.param.TaskDto;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
+import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
@@ -15,12 +19,15 @@
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.SiemensDevpThread;
+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.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
/**
* 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -29,10 +36,22 @@
@Slf4j
@Service("ctuMainService")
@Transactional
+@Data
public class CtuMainServiceImpl {
public static final long COMMAND_TIMEOUT = 5 * 1000;
+ @Value("${ctu.url}")
+ private String ctuUrl;
+
+ @Value("${ctu.sendTask}")
+ private String sendTask;
+
+ @Value("${ctu.getLoc}")
+ private String getLoc;
+
+ @Value("${ctu.update}")
+ private String updateSta;
@Autowired
private SlaveProperties slaveProperties;
@@ -46,64 +65,93 @@
@Autowired
private WrkMastService wrkMastService;
+ private boolean flag1001 = false;
- public Integer wrkNo = 10000;
+ private boolean flag1007 = false;
+
/**
* 鍏ュ簱锛屼粠鎷f枡绔欏埌鍏ュ簱绔欙紙CTU鍙栬揣绔欙級
*/
public synchronized void generateStoreWrkFile(Integer mark) {
// 鏍规嵁杈撻�佺嚎plc閬嶅巻
- for (DevpSlave devp : slaveProperties.getDevp()) {
- // 閬嶅巻鍏ュ簱鍙�
- for (DevpSlave.Sta inSta : devp.getInSta()) {
- // 鑾峰彇鍏ュ簱绔欎俊鎭�
- SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
- StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
- if (staProtocol == null) {
- continue;
- } else {
- staProtocol = staProtocol.clone();
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(1004);
+ if (staProtocol == null) {
+ return;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+// if (!staProtocol.isLoading()) {
+// return;
+// }
+ // && staProtocol.isInEnable()
+ if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
+ if (staProtocol.getStaNo() == 1004) {
+ try {
+ Thread.sleep(8000L);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
}
- // 鍒ゆ柇鏄惁婊¤冻鏉′欢
-// if (!staProtocol.isLoading()) {
-// continue;
-// }
- // && staProtocol.isInEnable()
- if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
- WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
- if (wrkMast != null) {
- //涓嬪彂绉诲姩浠诲姟锛屽苟鐢熸垚鍏ュ簱宸ヤ綔妗�
- WrkMast in = new WrkMast();
- wrkMast.setWrkSts(223L);
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
- in.setSourceLocNo("1007");
- in.setLocNo(wrkMast.getSourceLocNo());
- in.setIoType(10);
- in.setIoTime(new Date());
- in.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
- in.setIoPri(13D); // 浼樺厛绾э細13
- in.setFullPlt("Y"); // 婊℃澘锛歒
- in.setPicking("N"); // 鎷f枡
- in.setExitMk("N"); // 閫�鍑�
- in.setEmptyMk("Y"); // 绌烘澘
- in.setLinkMis("N");
- in.setAppeTime(new Date());
- in.setModiTime(new Date());
- in.setBarcode(wrkMast.getBarcode());
- in.setPlcWrkNo(wrkMast.getPlcWrkNo());
- wrkMastService.insert(in);
- LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
- locMast.setLocSts("S");
- locMast.setModiTime(new Date());
- locMastService.selectById(locMast);
- }
- }
+ staProtocol.setStaNo((short) 1007);
+ boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+ log.info("鍏ュ簱杈撻�佺嚎涓嬪彂锛歿},{}", staProtocol.getWorkNo(), 1007);
+
}
+// WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
+// if (wrkMast != null) {
+// //涓嬪彂绉诲姩浠诲姟锛屽苟鐢熸垚鍏ュ簱宸ヤ綔妗�
+// WrkMast in = new WrkMast();
+// wrkMast.setWrkSts(223L);
+// wrkMast.setModiTime(new Date());
+// wrkMastService.updateById(wrkMast);
+// in.setSourceLocNo("1007");
+// in.setLocNo(wrkMast.getSourceLocNo());
+// in.setIoType(10);
+// in.setIoTime(new Date());
+// in.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+// in.setIoPri(13D); // 浼樺厛绾э細13
+// in.setFullPlt("Y"); // 婊℃澘锛歒
+// in.setPicking("N"); // 鎷f枡
+// in.setExitMk("N"); // 閫�鍑�
+// in.setEmptyMk("Y"); // 绌烘澘
+// in.setLinkMis("N");
+// in.setAppeTime(new Date());
+// in.setModiTime(new Date());
+// in.setBarcode(wrkMast.getBarcode());
+// in.setPlcWrkNo(wrkMast.getPlcWrkNo());
+// wrkMastService.insert(in);
+// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+// locMast.setLocSts("S");
+// locMast.setModiTime(new Date());
+// locMastService.updateById(locMast);
+// }
+
}
}
+
+ public synchronized void outToPlc(Integer mark) {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(1007);
+ if (staProtocol == null) {
+ return;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+ if (!staProtocol.isLoading()) {
+ return;
+ }
+ if (flag1007 && staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
+ staProtocol.setWorkNo(0);
+ staProtocol.setStaNo((short) 0);
+ boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
+ log.info("鍙栬蛋鍐欏叆纭浣嶏細{},{}", staProtocol.getWorkNo(), 1007);
+ }
+ }
/**
* 鍑哄簱
@@ -126,34 +174,28 @@
continue;
}
//&& staProtocol.isOutEnable()
- if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
+ if (flag1001 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
// 鍒ゆ柇閲嶅宸ヤ綔妗�
// 106涔熺畻涓婏紝浠ュ悗106-銆�107鐢ㄤ簬鏇存柊搴撳瓨
- WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106,107));
- if (wrkMast == null) {
- continue;
- }
+// WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106, 107));
+// if (wrkMast == null) {
+// continue;
+// }
// 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
// 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
- staProtocol.setWorkNo(wrkMast.getPlcWrkNo());
+ staProtocol.setWorkNo((int) (Math.random() * 10000));
staProtocol.setStaNo((short) 1004);
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
- log.info("杈撻�佺嚎涓嬪彂3锛歿},{}", wrkMast.getWrkNo(), 1004);
+ log.info("杈撻�佺嚎涓嬪彂3锛歿},{}", staProtocol.getWorkNo(), 1004);
if (result) {
- // 鏇存柊宸ヤ綔涓绘。
- wrkMast.setWrkSts(108L);
- wrkMast.setModiTime(new Date());
- if (wrkMastMapper.updateById(wrkMast) == 0) {
- News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
- }
+ setFlag1001(false);
} else {
News.error("" + mark + " - 2" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
}
-
} else {
News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable() + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo() + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk() + "銆佸叆搴撳嵃璁帮細" + staProtocol.getStamp());
}
@@ -161,4 +203,237 @@
}
}
+ public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
+ add(1001);
+ add(1002);
+ add(1003);
+ add(1004);
+ add(1005);
+ add(1006);
+ add(1007);
+
+ }};
+
+ public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+
+ add(101);
+ add(102);
+ add(103);
+ add(104);
+ add(105);
+ add(106);
+ add(107);
+ add(108);
+ }};
+
+ public synchronized void in(Integer mark) {
+ // 閬嶅巻鍏ュ簱鍙�
+ for (Integer inSta : staNos2) {
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(inSta);
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+ if (!staProtocol.isAutoing() && !staProtocol.isLoading()) {
+ continue;
+ }
+ // && staProtocol.isInEnable()
+ if (staProtocol.isInEnable()) {
+ OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+ openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+ List<TaskDto> taskList = new ArrayList<>();
+ TaskDto taskDto = new TaskDto();
+ Random rand = new Random();
+ taskDto.setSeqNum(rand.nextInt(10000) + "");
+ taskDto.setDestLoc(getFLoc(staProtocol.getSiteId() + "-2", "15"));
+ taskDto.setOriSta(staProtocol.getSiteId() + "-2");
+ taskDto.setPriority(123);
+ taskList.add(taskDto);
+ openBusSubmitParam.setTaskList(taskList);
+ sendTask(openBusSubmitParam, staProtocol);
+ }
+ if (staProtocol.isOutEnable()) {
+ OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+ openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+ List<TaskDto> taskList = new ArrayList<>();
+ TaskDto taskDto = new TaskDto();
+ Random rand = new Random();
+ taskDto.setSeqNum(rand.nextInt(10000) + "");
+ taskDto.setDestLoc(getFLoc(staProtocol.getSiteId() + "-3", "15"));
+ taskDto.setOriSta(staProtocol.getSiteId() + "-3");
+ taskDto.setPriority(123);
+ taskList.add(taskDto);
+ openBusSubmitParam.setTaskList(taskList);
+ sendTask(openBusSubmitParam, staProtocol);
+ }
+ }
+ }
+
+ public synchronized void autoOut(Integer mark) {
+ int i = 0;
+ for (Integer staNo : staNos1) {
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(staNo);
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+ if (!staProtocol.isAutoing()) {
+ continue;
+ }
+ if (staProtocol.isLoading()) {
+ continue;
+ }
+ if (staProtocol.getStaNo() != 0) {
+ continue;
+ }
+ i++;
+ }
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(1001);
+ if (i >= 7) {
+ OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+ openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+ List<TaskDto> taskList = new ArrayList<>();
+ TaskDto taskDto = new TaskDto();
+ taskDto.setSeqNum(Math.random() * 1000 + "");
+ taskDto.setOriLoc(getFLoc("1001", "16"));
+ taskDto.setDestSta("1001");
+ taskDto.setPriority(123);
+ taskList.add(taskDto);
+ openBusSubmitParam.setTaskList(taskList);
+ sendTask(openBusSubmitParam, staProtocol);
+ }
+ }
+
+
+ public synchronized void autoIn(Integer mark) {
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(1007);
+ if (staProtocol == null) {
+ return;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+ if (!staProtocol.isAutoing()) {
+ return;
+ }
+ if (!staProtocol.isLoading()) {
+ return;
+ }
+ if (staProtocol.getStaNo() > 0) {
+ return;
+ }
+ OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+ openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+ List<TaskDto> taskList = new ArrayList<>();
+ TaskDto taskDto = new TaskDto();
+ taskDto.setSeqNum(Math.random() * 1000 + "");
+ taskDto.setDestLoc(getFLoc("1007", "15"));
+ taskDto.setOriLoc("1007");
+ taskDto.setPriority(123);
+ taskList.add(taskDto);
+ openBusSubmitParam.setTaskList(taskList);
+ sendTask(openBusSubmitParam, staProtocol);
+ }
+
+
+ public void updateSta(Integer mark) {
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol1 = devpThread.getStation().get(1001);
+ StaProtocol staProtocol7 = devpThread.getStation().get(1007);
+ if (staProtocol1 == null) {
+ return;
+ }
+ if (staProtocol7 == null) {
+ return;
+ }
+ updateSta("1001", staProtocol1.isLoading() ? "16" : "15");
+ updateSta("1007", staProtocol7.isLoading() ? "16" : "15");
+ }
+
+ @Transactional
+ public void sendTask(OpenBusSubmitParam openBusSubmitParam, StaProtocol staProtocol) {
+ String response = "";
+ try {
+ response = new HttpHandler.Builder()
+ .setUri(ctuUrl)
+ .setPath(sendTask)
+ .setTimeout(1200, TimeUnit.SECONDS)
+ .setJson(JSON.toJSONString(openBusSubmitParam))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ if (jsonObject.getInteger("code").equals(200)) {
+ log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+ } else {
+ log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
+ throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+ }
+ } catch (Exception e) {
+ log.error("fail", e);
+ }
+ }
+
+ @Transactional
+ public void updateSta(String staNo, String sts) {
+ Map<String, String> data = new HashMap<String, String>();
+ data.put("staNo", staNo);
+ data.put("sts", sts);
+ String response = "";
+ try {
+ response = new HttpHandler.Builder()
+ .setUri(ctuUrl)
+ .setPath(updateSta)
+ .setTimeout(1200, TimeUnit.SECONDS)
+ .setJson(JSON.toJSONString(data))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ if (jsonObject.getInteger("code").equals(200)) {
+ //log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+ } else {
+ //log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(data), response);
+ //throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+ }
+ } catch (Exception e) {
+ log.error("fail", e);
+ }
+ }
+
+ @Transactional
+ public String getFLoc(String staNo, String sts) {
+ Map<String, String> data = new HashMap<String, String>();
+ data.put("staNo", staNo);
+ data.put("sts", sts);
+ String response = "";
+ try {
+ response = new HttpHandler.Builder()
+ .setUri(ctuUrl)
+ .setPath(getLoc)
+ .setTimeout(1200, TimeUnit.SECONDS)
+ .setJson(JSON.toJSONString(data))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ if (jsonObject.getInteger("code").equals(200)) {
+ //log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+ JSONObject loc = JSON.parseObject(jsonObject.getString("data"));
+ return loc.getString("locNo");
+ } else {
+ log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(data), response);
+ throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+ }
+ } catch (Exception e) {
+ log.error("fail", e);
+ }
+ return null;
+ }
}
--
Gitblit v1.9.1