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