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