From 3e6ea6acc9205d7d0ba3e925b703994e8bc868ea Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 03 九月 2020 12:50:26 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/model/MatDto.java | 11 +++
src/main/java/com/zy/core/thread/LedThread.java | 37 +++++++++++-
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 49 ++++++++++++++-
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java | 6 ++
src/main/java/com/zy/core/cache/MessageQueue.java | 5 +
src/main/java/com/zy/common/utils/CollectionUtils.java | 20 ++++++
src/main/java/com/zy/core/model/command/LedCommand.java | 28 +++++++++
src/main/java/com/zy/asrs/service/WrkDetlService.java | 3
8 files changed, 147 insertions(+), 12 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/WrkDetlService.java b/src/main/java/com/zy/asrs/service/WrkDetlService.java
index 92b410d..7e93d07 100644
--- a/src/main/java/com/zy/asrs/service/WrkDetlService.java
+++ b/src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -8,7 +8,8 @@
public interface WrkDetlService extends IService<WrkDetl> {
-
void createWorkDetail(Integer workNo, List<WaitPakin> waitPakins, String barcode);
+ List<WrkDetl> findByWorkNo(Integer workNo);
+
}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 41cf5bf..0e21aec 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -9,8 +9,10 @@
import com.zy.asrs.mapper.WaitPakinMapper;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
+import com.zy.common.model.MatDto;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
+import com.zy.common.utils.CollectionUtils;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.*;
@@ -19,12 +21,14 @@
import com.zy.core.model.LedSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.command.LedCommand;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.CrnThread;
import com.zy.core.thread.DevpThread;
+import com.zy.core.thread.LedThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -32,8 +36,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -738,17 +741,53 @@
for (LedSlave led : slaveProperties.getLed()) {
// 鑾峰彇杈撻�佺嚎plc绾跨▼
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+ // 鍛戒护闆嗗悎
+ List<LedCommand> commands = new ArrayList<>();
+ // 宸ヤ綔妗i泦鍚�
+ List<WrkMast> wrkMasts = new ArrayList<>();
for (Integer staNo : led.getStaArr()) {
// 鑾峰彇鍙夎溅绔欑偣
StaProtocol staProtocol = devpThread.getStation().get(staNo);
if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo()) { continue; }
// 鑾峰彇宸ヤ綔妗f暟鎹�
WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-
-
-
+ if (wrkMast.getWrkSts() == 14L || wrkMast.getWrkSts() == 15L) {
+ wrkMasts.add(wrkMast);
+ // 娣诲姞鍛戒护
+ List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+ LedCommand ledCommand = new LedCommand();
+ ledCommand.setWorkNo(wrkMast.getWrkNo());
+ ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+ ledCommand.setStaNo(wrkMast.getStaNo());
+ wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMatnr(), wrkDetl.getAnfme())));
+ commands.add(ledCommand);
+ }
+ }
+ Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+ // 鑾峰彇LED绾跨▼
+ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+ // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
+ if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+ continue;
+ }
+ // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+ if (!commands.isEmpty()) {
+ if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+ continue;
+ }
}
+ // 淇敼涓绘。led鏍囪
+ for (WrkMast wrkMast : wrkMasts) {
+ wrkMast.setOveMk("Y");
+ wrkMast.setModiTime(new Date());
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+ }
+ }
+
+ // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+ ledThread.setWorkNos(workNos);
}
}
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
index 18af108..e9282ab 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -1,5 +1,6 @@
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;
@@ -49,4 +50,9 @@
}
}
+ @Override
+ public List<WrkDetl> findByWorkNo(Integer workNo) {
+ return this.baseMapper.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+ }
+
}
diff --git a/src/main/java/com/zy/common/model/MatDto.java b/src/main/java/com/zy/common/model/MatDto.java
index e8e488b..e5b625b 100644
--- a/src/main/java/com/zy/common/model/MatDto.java
+++ b/src/main/java/com/zy/common/model/MatDto.java
@@ -11,7 +11,18 @@
// 鐗╂枡缂栧彿
private String matNo;
+ // 鐗╂枡鍚嶇О
+ private String maknx;
+
// 鐗╂枡鏁伴噺
private Double count;
+ public MatDto() {
+ }
+
+ public MatDto(String matNo, String maknx, Double count) {
+ this.matNo = matNo;
+ this.maknx = maknx;
+ this.count = count;
+ }
}
diff --git a/src/main/java/com/zy/common/utils/CollectionUtils.java b/src/main/java/com/zy/common/utils/CollectionUtils.java
new file mode 100644
index 0000000..4f0fe4c
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/CollectionUtils.java
@@ -0,0 +1,20 @@
+package com.zy.common.utils;
+
+import java.util.Set;
+
+/**
+ * Created by vincent on 2020/9/3
+ */
+public class CollectionUtils {
+
+ public static boolean equals(Set<?> set1, Set<?> set2) {
+ if(set1 == null || set2 ==null){
+ return false;
+ }
+ if(set1.size()!=set2.size()){
+ return false;
+ }
+ return set1.containsAll(set2);
+ }
+
+}
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index 11d207d..5f27eba 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -7,6 +7,7 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
/**
* 娑堟伅闃熷垪
@@ -21,7 +22,7 @@
// 鏉$爜鎵弿浠猰q浜ゆ崲鏈�
private static final Map<Integer, ConcurrentLinkedQueue<Task>> BARCODE_EXCHANGE = new ConcurrentHashMap<>();
// Led鐏� mq浜ゆ崲鏈�
- private static final Map<Integer, ConcurrentLinkedQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>();
+ private static final Map<Integer, LinkedBlockingQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>();
// 纾呯Оmq浜ゆ崲鏈�
private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>();
@@ -40,7 +41,7 @@
BARCODE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
break;
case Led:
- LED_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+ LED_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
break;
case Scale:
SCALE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
diff --git a/src/main/java/com/zy/core/model/command/LedCommand.java b/src/main/java/com/zy/core/model/command/LedCommand.java
new file mode 100644
index 0000000..58f4c88
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/LedCommand.java
@@ -0,0 +1,28 @@
+package com.zy.core.model.command;
+
+import com.zy.common.model.MatDto;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * led鍛戒护鎶ユ枃
+ * Created by vincent on 2020/8/11
+ */
+@Data
+public class LedCommand extends Object {
+
+ private Integer workNo;
+
+ private Integer staNo;
+
+ private Integer sourceStaNo;
+
+ private String locNo;
+
+ private String sourceLocNo;
+
+ private List<MatDto> matDtos = new ArrayList<>();
+
+}
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
index a8c02ad..511816f 100644
--- a/src/main/java/com/zy/core/thread/LedThread.java
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -2,6 +2,10 @@
import com.zy.core.Slave;
import com.zy.core.ThreadHandler;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.LedCommand;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import onbon.bx05.Bx5GEnv;
@@ -14,6 +18,9 @@
import onbon.bx05.utils.DisplayStyleFactory;
import java.awt.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
/**
* Created by vincent on 2020/9/1
@@ -24,6 +31,7 @@
private Slave slave;
private Bx5GScreenClient screen;
+ private Set<Integer> workNos = new HashSet<>();
public LedThread(Slave slave) {
this.slave = slave;
@@ -37,15 +45,24 @@
}
@Override
- @SuppressWarnings("InfiniteLoopStatement")
+ @SuppressWarnings({"InfiniteLoopStatement", "unchecked"})
public void run() {
connect();
while (true) {
try {
+ Task task = MessageQueue.poll(SlaveType.Led, slave.getId());
+ if (task != null) {
+ switch (task.getStep()) {
+ // 鍐欐暟鎹�
+ case 1:
+ write((List<LedCommand>)task.getData());
+ break;
+ default:
+ break;
+ }
+ }
-
-
- Thread.sleep(500);
+ Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
@@ -74,6 +91,18 @@
}
+ private void write(List<LedCommand> list) {
+
+ for (LedCommand command : list) {
+
+ }
+
+
+
+
+ }
+
+
public static void main(String[] args) throws Exception {
--
Gitblit v1.9.1