From 33bdd9772bf8bc4a4dbd02b690b57921f7606e18 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期六, 27 九月 2025 13:33:25 +0800
Subject: [PATCH] #websocket
---
src/main/java/com/zy/asrs/webSocketConfig/WebSocketServer.java | 116 +++++++++++
src/main/resources/mapper/WrkDetlMapper.xml | 3
src/main/java/com/zy/asrs/webSocketConfig/LedCommand.java | 53 +++++
src/main/java/com/zy/asrs/webSocketConfig/WebSocketConfig.java | 17 +
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java | 2
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java | 6
pom.xml | 11 +
src/main/java/com/zy/asrs/entity/param/MatDto.java | 80 ++++++++
src/main/java/com/zy/asrs/service/WrkDetlService.java | 1
src/main/java/com/zy/asrs/webSocketConfig/LedWebsocket.java | 272 +++++++++++++++++++++++++++
10 files changed, 561 insertions(+), 0 deletions(-)
diff --git a/pom.xml b/pom.xml
index 150fa3a..0e7942a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,6 +116,17 @@
<artifactId>truelicense-core</artifactId>
<version>1.33</version>
</dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-websocket</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>cn.hutool</groupId>
+ <artifactId>hutool-all</artifactId>
+ <version>5.8.26</version>
+ </dependency>
+
+
</dependencies>
<build>
diff --git a/src/main/java/com/zy/asrs/entity/param/MatDto.java b/src/main/java/com/zy/asrs/entity/param/MatDto.java
new file mode 100644
index 0000000..2dbe915
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/MatDto.java
@@ -0,0 +1,80 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020/8/6
+ */
+@Data
+public class MatDto {
+
+ // 鐗╂枡缂栧彿
+ private String matnr;
+
+ // 鐗╂枡鍚嶇О
+ private String maknx;
+
+ private String batch;
+
+ private String specs;
+
+ // 瀹㈡埛淇℃伅
+ private String manu;
+
+ // 澶囨敞
+ private String memo;
+
+ // 鐗╂枡鏁伴噺
+ private Double count;
+
+ private Double total;
+
+ private String orderNo;
+
+ private String customer;
+
+ public MatDto() {
+ }
+ public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total) {
+ this.matnr = matnr;
+ this.maknx = maknx;
+ this.batch = batch;
+ this.specs = specs;
+ this.manu = manu;
+ this.memo = memo;
+ this.count = count;
+ this.total = total;
+ }
+
+ public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total, String orderNo, String customer) {
+ this.matnr = matnr;
+ this.maknx = maknx;
+ this.batch = batch;
+ this.specs = specs;
+ this.manu = manu;
+ this.memo = memo;
+ this.count = count;
+ this.total = total;
+ this.orderNo = orderNo;
+ this.customer = customer;
+ }
+
+ public MatDto(String matNo, String maknx, Double count) {
+ this.matnr = matNo;
+ this.maknx = maknx;
+ this.count = count;
+ }
+ public MatDto(String matNo, String maknx, Double count, String specs) {
+ this.specs = specs;
+ this.matnr = matNo;
+ this.maknx = maknx;
+ this.count = count;
+ }
+ public MatDto(String matNo, String maknx, Double count, Double total, String specs) {
+ this.specs = specs;
+ this.matnr = matNo;
+ this.maknx = maknx;
+ this.count = count;
+ this.total = total;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java b/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
index 97d48d8..24cac60 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -23,4 +23,6 @@
int updateInspect( @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr);
+
+ List<WrkDetl> findByWorkNo(Integer workNo);
}
diff --git a/src/main/java/com/zy/asrs/service/WrkDetlService.java b/src/main/java/com/zy/asrs/service/WrkDetlService.java
index ede2552..18f86c6 100644
--- a/src/main/java/com/zy/asrs/service/WrkDetlService.java
+++ b/src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -21,4 +21,5 @@
List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr);
+ List<WrkDetl> findByWorkNo(Integer wrkNo);
}
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 196874a..5c56e86 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -13,6 +13,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -79,4 +80,9 @@
public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) {
return this.baseMapper.selectPakoutQuery(staNo, matnr);
}
+
+ @Override
+ public List<WrkDetl> findByWorkNo(Integer workNo) {
+ return this.baseMapper.findByWorkNo(workNo);
+ }
}
diff --git a/src/main/java/com/zy/asrs/webSocketConfig/LedCommand.java b/src/main/java/com/zy/asrs/webSocketConfig/LedCommand.java
new file mode 100644
index 0000000..1460d39
--- /dev/null
+++ b/src/main/java/com/zy/asrs/webSocketConfig/LedCommand.java
@@ -0,0 +1,53 @@
+package com.zy.asrs.webSocketConfig;
+
+import com.core.common.Cools;
+import com.zy.asrs.entity.param.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 String title;
+
+ private Integer workNo;
+
+ private Integer staNo;
+
+ private Integer sourceStaNo;
+
+ private String locNo;
+
+ private String sourceLocNo;
+
+ private List<MatDto> matDtos = new ArrayList<>();
+
+ private boolean emptyMk = false;
+
+ private Integer ioType;
+ private String barcode;
+
+ @Override
+ public String toString() {
+ StringBuffer s = new StringBuffer();
+ s.append("宸ヤ綔鍙穂" + this.workNo + "]\n");
+ s.append("宸ヤ綔绫诲瀷[" + this.title + "]\n");
+ if (!Cools.isEmpty(this.barcode)) {
+ s.append("鎵樼洏鐮乕" + this.barcode + "]\n");
+ }
+ if (!this.emptyMk){
+
+ for (MatDto matDto : matDtos) {
+ s.append("[鍟嗗搧缂栫爜:" + matDto.getMatnr() + ", 鏁伴噺:" + matDto.getCount() + "]\n");
+ }
+ }
+
+ return s.toString();
+ }
+}
diff --git a/src/main/java/com/zy/asrs/webSocketConfig/LedWebsocket.java b/src/main/java/com/zy/asrs/webSocketConfig/LedWebsocket.java
new file mode 100644
index 0000000..cb5f612
--- /dev/null
+++ b/src/main/java/com/zy/asrs/webSocketConfig/LedWebsocket.java
@@ -0,0 +1,272 @@
+package com.zy.asrs.webSocketConfig;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Arith;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.vo.LocChartPie;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.domain.dto.WorkChartAxis;
+import com.zy.asrs.entity.param.MatDto;
+import com.zy.asrs.mapper.ReportQueryMapper;
+import com.zy.asrs.service.*;
+
+import com.zy.common.service.CommonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+public class LedWebsocket {
+
+ private static final String[] WEEK = {"鏄熸湡鏃�","鏄熸湡涓�","鏄熸湡浜�","鏄熸湡涓�","鏄熸湡鍥�","鏄熸湡浜�","鏄熸湡鍏�"};
+
+ @Autowired
+ private ReportQueryMapper reportQueryMapper;
+ @Autowired
+ private WebSocketServer webSocketServer;
+ @Autowired
+ private LocDetlService locDetlService;
+ @Autowired
+ private BasDevpService basDevpService;
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private WrkDetlService wrkDetlService;
+ @Autowired
+ private OrderDetlService orderDetlService;
+
+ @Scheduled(cron = "0/2 * * * * ? ")
+ private void send() {
+
+ //楗煎浘
+ List<Map<String, Object>> pie = new ArrayList<>();
+ LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
+ if(locUseRate!=null) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("name", "鍦ㄥ簱");
+ map.put("value", locUseRate.getFqty());
+ pie.add(map);
+
+ Map<String, Object> map1 = new HashMap<>();
+ map1.put("name", "绌�");
+ map1.put("value", locUseRate.getOqty());
+ pie.add(map1);
+
+ Map<String, Object> map2 = new HashMap<>();
+ map2.put("name", "浣跨敤");
+ map2.put("value", locUseRate.getUqty());
+ pie.add(map2);
+
+ Map<String, Object> map3 = new HashMap<>();
+ map3.put("name", "绂佺敤");
+ map3.put("value", locUseRate.getXqty());
+ pie.add(map3);
+ }
+ // 鎬诲簱浣嶆暟
+ Integer total = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty());
+ // 浣跨敤涓�
+ Integer used = locUseRate.getFqty() + locUseRate.getUqty();
+ // 搴撲綅浣跨敤鐜�
+ double usedDivides = Arith.divides(3, used, total);
+ double usedPr = Arith.multiplys(1, usedDivides, 100);
+
+ //鎶樼嚎鍥�
+ Map<String,Object> map=new HashMap<String, Object>();
+ List<AxisBean> list = new ArrayList<AxisBean>();
+ List<WorkChartAxis> listChart = reportQueryMapper.getChartAxis();
+
+ if(listChart!=null) {
+ ArrayList<Integer> data1 = new ArrayList<Integer>();
+ ArrayList<Integer> data2 = new ArrayList<Integer>();
+
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.DATE, -12);
+ for(int i=0;i<12;i++) {
+ boolean flag = true;
+ calendar.add(Calendar.DATE, 1);
+ String str = sf.format(calendar.getTime());
+ for(WorkChartAxis workChart : listChart) {
+ if(str.equals(workChart.getYmd())) {
+ data1.add(workChart.getInqty());
+ data2.add(workChart.getOutqty());
+ flag = false;
+ break;
+ }
+ }
+ if(flag) {
+ data1.add(0);
+ data2.add(0);
+ }
+ }
+ AxisBean inqty = new AxisBean();
+ inqty.setName("鍏ュ簱鏁伴噺");
+ Integer[] array1 = new Integer[data1.size()];
+ inqty.setData(data1.toArray(array1));
+ list.add(inqty);
+ AxisBean outqty = new AxisBean();
+ outqty.setName("鍑哄簱鏁伴噺");
+ Integer[] array2 = new Integer[data2.size()];
+ outqty.setData(data2.toArray(array2));
+ list.add(outqty);
+ }
+ //浠撳簱鏁版嵁
+ EntityWrapper<LocDetl> locDetlEntityWrapper = new EntityWrapper<>();
+ locDetlEntityWrapper.setSqlSelect("TOP 5 matnr,SUM(anfme) as matnrCount").groupBy("matnr").orderBy("matnrCount",false);
+ List<Map<String, Object>> selectMap = locDetlService.selectMaps(locDetlEntityWrapper);
+
+ Date now = new Date();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(now);
+// Map<String, Object> map = new HashMap<>();
+ map.put("to","all");
+ map.put("message", Cools.add("type", "default").add("pie", pie)
+ .add("stockCunt", locUseRate.getFqty())
+ .add("emptyCount", locUseRate.getOqty())
+ .add("noneCount", locUseRate.getXqty())
+ .add("total", total)
+ .add("used", used)
+ .add("usedPr", usedPr)
+ .add("rows",list)
+ .add("year", calendar.get(Calendar.YEAR))
+ .add("month", CommonService.zerofill(String.valueOf(calendar.get(Calendar.MONTH)+1), 2))
+ .add("day", CommonService.zerofill(String.valueOf(calendar.get(Calendar.DATE)), 2))
+ .add("hour", CommonService.zerofill(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)), 2))
+ .add("minute", CommonService.zerofill(String.valueOf(calendar.get(Calendar.MINUTE)), 2))
+ .add("second", CommonService.zerofill(String.valueOf(calendar.get(Calendar.SECOND)) , 2))
+ .add("week", WEEK[calendar.get(Calendar.DAY_OF_WEEK)-1])
+ .add("inventoryData",selectMap));
+ webSocketServer.onMessage(JSONObject.toJSONString(map),null,"all");
+
+ }
+
+
+ @Scheduled(cron = "0/2 * * * * ? ")
+ private void TaskOrErrorSend(){
+ Map<String,Object> map=new HashMap<>();
+
+ BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 1002));
+ if (basDevp == null || Cools.isEmpty(basDevp.getDecDesc()) || basDevp.getWrkNo() == 0){
+ return;
+ }
+ if (!Cools.isEmpty(basDevp.getDecDesc())){
+ map.put("to","1002");
+ map.put("message",Cools.add("type", "error").add("errMsg",basDevp.getDecDesc()));
+ webSocketServer.onMessage(JSONObject.toJSONString(map),null,"1002");
+ }else if (basDevp.getWrkNo() != 0){
+ WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
+ if (null == wrkMast){
+ return;
+ }
+
+ List<LedCommand> commandList = getCommandList(basDevp.getWrkNo().toString());
+ map.put("to","1002");
+ map.put("message",Cools.add("type", "task").add("taskList",commandList));
+ webSocketServer.onMessage(JSONObject.toJSONString(map),null,"1002");
+ }
+ }
+
+ public List<LedCommand> getCommandList(String taskNo){
+ List<LedCommand> commands = new ArrayList<>();
+ // 宸ヤ綔妗i泦鍚�
+ List<WrkMast> wrkMasts = new ArrayList<>();
+ // 鑾峰彇宸ヤ綔妗f暟鎹�
+ WrkMast wrkMast = wrkMastService.selectById(taskNo);
+ if (null == wrkMast) { return null; }
+ wrkMasts.add(wrkMast);
+ // 缁勮鍛戒护
+ LedCommand ledCommand = new LedCommand();
+ ledCommand.setWorkNo(wrkMast.getWrkNo());
+ ledCommand.setIoType(wrkMast.getIoType());
+ wrkMasts.add(wrkMast);
+ // 鍑哄簱妯″紡
+ switch (wrkMast.getIoType()) {
+ case 1:
+ ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
+ break;
+ case 10:
+ ledCommand.setTitle("绌烘澘鍏ュ簱");
+ break;
+ case 101:
+ ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
+ break;
+ case 103:
+ ledCommand.setTitle("鎷f枡鍑哄簱");
+ break;
+ case 104:
+ ledCommand.setTitle("骞舵澘鍑哄簱");
+ break;
+ case 107:
+ ledCommand.setTitle("鐩樼偣鍑哄簱");
+ break;
+ case 110:
+ ledCommand.setTitle("绌烘澘鍑哄簱");
+ ledCommand.setEmptyMk(true);
+ break;
+ default:
+ break;
+ }
+ ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+ ledCommand.setStaNo(wrkMast.getStaNo());
+ ledCommand.setBarcode(wrkMast.getBarcode());
+ if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
+ List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+
+ wrkDetls.forEach(wrkDetl -> {
+ Double total = 0.0;
+ EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+ LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+ if (Cools.isEmpty(locDetl)) {
+ total = wrkDetl.getAnfme();
+ } else {
+ total = locDetl.getAnfme();
+ }
+ if (!Cools.isEmpty(wrkDetl.getOrderNo())){
+ OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", wrkDetl.getOrderNo())
+ .eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
+ if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+ ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getSuppCode(),orderDetl.getSku()));
+ }
+ if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+ ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getSuppCode(),orderDetl.getSku()));
+ }
+ if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
+ ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getSuppCode(),orderDetl.getSku()));
+ }
+ }else {
+ if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+ ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+ }
+ if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+ ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+ }
+ if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
+ ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+ }
+ }
+ });
+ }
+ commands.add(ledCommand);
+
+ Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+ // 淇敼涓绘。led鏍囪
+ for (WrkMast wrkMast1 : wrkMasts) {
+ wrkMast1.setOveMk("Y");
+ wrkMast1.setModiTime(new Date());
+ if (!wrkMastService.update(wrkMast1,new EntityWrapper<WrkMast>().eq("wrk_No",wrkMast1.getWrkNo()))) {
+ throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+ }
+ }
+
+ return commands;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/webSocketConfig/WebSocketConfig.java b/src/main/java/com/zy/asrs/webSocketConfig/WebSocketConfig.java
new file mode 100644
index 0000000..12bc36d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/webSocketConfig/WebSocketConfig.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.webSocketConfig;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+ /**
+ * 娉ㄥ叆涓�涓猄erverEndpointExporter,璇ean浼氳嚜鍔ㄦ敞鍐屼娇鐢ˊServerEndpoint娉ㄨВ鐢虫槑鐨剋ebsocket endpoint
+ */
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
+
diff --git a/src/main/java/com/zy/asrs/webSocketConfig/WebSocketServer.java b/src/main/java/com/zy/asrs/webSocketConfig/WebSocketServer.java
new file mode 100644
index 0000000..ee8f75e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/webSocketConfig/WebSocketServer.java
@@ -0,0 +1,116 @@
+package com.zy.asrs.webSocketConfig;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint(value = "/led/{username}")
+@Component
+@Service
+public class WebSocketServer {
+ private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
+ /**
+ * 璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁�
+ */
+ public static final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
+ /**
+ * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
+ */
+ @OnOpen
+ public void onOpen(Session session, @PathParam("username") String username) {
+ sessionMap.put(username, session);
+ log.info("鏈夋柊鐢ㄦ埛鍔犲叆锛寀sername={}, 褰撳墠鍦ㄧ嚎浜烘暟涓猴細{}", username, sessionMap.size());
+ JSONObject result = new JSONObject();
+ JSONArray array = new JSONArray();
+ result.set("users", array);
+ for (Object key : sessionMap.keySet()) {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.set("username", key);
+ // {"username", "zhang", "username": "admin"}
+ array.add(jsonObject);
+ }
+// {"users": [{"username": "zhang"},{ "username": "admin"}]}
+ sendAllMessage(JSONUtil.toJsonStr(result)); // 鍚庡彴鍙戦�佹秷鎭粰鎵�鏈夌殑瀹㈡埛绔�
+ }
+ /**
+ * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
+ */
+ @OnClose
+ public void onClose(Session session, @PathParam("username") String username) {
+ sessionMap.remove(username);
+ log.info("鏈変竴杩炴帴鍏抽棴锛岀Щ闄sername={}鐨勭敤鎴穝ession, 褰撳墠鍦ㄧ嚎浜烘暟涓猴細{}", username, sessionMap.size());
+ }
+ /**
+ * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+ * 鍚庡彴鏀跺埌瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+ * onMessage 鏄竴涓秷鎭殑涓浆绔�
+ * 鎺ュ彈 娴忚鍣ㄧ socket.send 鍙戦�佽繃鏉ョ殑 json鏁版嵁
+ * @param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+ */
+ @OnMessage
+ public void onMessage(String message, Session session, @PathParam("username") String username) {
+// log.info("鏈嶅姟绔敹鍒扮敤鎴穟sername={}鐨勬秷鎭�:{}", username, message);
+ JSONObject obj = JSONUtil.parseObj(message);
+ String toUsername = obj.getStr("to"); // to琛ㄧず鍙戦�佺粰鍝釜鐢ㄦ埛锛屾瘮濡� admin
+ String text = obj.getStr("message"); // 鍙戦�佺殑娑堟伅鏂囨湰 hello
+ // {"to": "admin", "text": "鑱婂ぉ鏂囨湰"}
+ if ("heartBeat".equals(toUsername)) {
+ log.info("蹇冭烦");
+ }else if ("all".equals(toUsername)) {
+ sendAllMessage(text);
+ }else {
+ Session toSession = sessionMap.get(toUsername); // 鏍规嵁 to鐢ㄦ埛鍚嶆潵鑾峰彇 session锛屽啀閫氳繃session鍙戦�佹秷鎭枃鏈�
+ if (toSession != null) {
+ // 鏈嶅姟鍣ㄧ 鍐嶆妸娑堟伅缁勮涓�涓嬶紝缁勮鍚庣殑娑堟伅鍖呭惈鍙戦�佷汉鍜屽彂閫佺殑鏂囨湰鍐呭
+ // {"from": "zhang", "text": "hello"}
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.set("from", username); // from 鏄� zhang
+ jsonObject.set("text", text); // text 鍚屼笂闈㈢殑text
+ this.sendMessage(text, toSession);
+// log.info("鍙戦�佺粰鐢ㄦ埛username={}锛屾秷鎭細{}", toUsername, jsonObject.toString());
+ } else {
+// log.info("鍙戦�佸け璐ワ紝鏈壘鍒扮敤鎴穟sername={}鐨剆ession", toUsername);
+ }
+ }
+
+ }
+ @OnError
+ public void onError(Session session, Throwable error) {
+ log.error("鍙戠敓閿欒");
+ error.printStackTrace();
+ }
+ /**
+ * 鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔�
+ */
+ private void sendMessage(String message, Session toSession) {
+ try {
+// log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", toSession.getId(), message);
+ toSession.getBasicRemote().sendText(message);
+ } catch (Exception e) {
+ log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+ }
+ }
+ /**
+ * 鏈嶅姟绔彂閫佹秷鎭粰鎵�鏈夊鎴风
+ */
+ private void sendAllMessage(String message) {
+ try {
+ for (Session session : sessionMap.values()) {
+// log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", session.getId(), message);
+ session.getBasicRemote().sendText(message);
+ }
+ } catch (Exception e) {
+ log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+ }
+ }
+}
diff --git a/src/main/resources/mapper/WrkDetlMapper.xml b/src/main/resources/mapper/WrkDetlMapper.xml
index 225f31e..3195c97 100644
--- a/src/main/resources/mapper/WrkDetlMapper.xml
+++ b/src/main/resources/mapper/WrkDetlMapper.xml
@@ -107,5 +107,8 @@
and awm.sta_no = #{staNo}
and awd.matnr + '-' + awd.batch = #{matnr}
</select>
+ <select id="findByWorkNo" resultMap="BaseResultMap">
+ select wrk_no, matnr, maktx, anfme ,specs,batch from asr_wrk_detl where 1=1 and wrk_no = #{workNo}
+ </select>
</mapper>
--
Gitblit v1.9.1