src/main/java/com/zy/asrs/service/WrkDetlService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/MatDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/utils/CollectionUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/cache/MessageQueue.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/command/LedCommand.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/LedThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } 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<>(); // 工作档集合 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; } // 获取工作档数据 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("更新工作档失败"); } } // 更新线程当前工作号集合 ledThread.setWorkNos(workNos); } } 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)); } } 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; } } src/main/java/com/zy/common/utils/CollectionUtils.java
New file @@ -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); } } 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 @@ // 条码扫描仪mq交换机 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<>()); src/main/java/com/zy/core/model/command/LedCommand.java
New file @@ -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<>(); } 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 {