From 6ee9d58d62dbbccf95ce809f358ec9f8d088b705 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期五, 17 十一月 2023 09:16:16 +0800
Subject: [PATCH] Changes15  websocket

---
 mes-common/pom.xml                                                                                 |    6 
 /dev/null                                                                                          |  178 -----------------------------
 mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/CustomerOrderServiceImpl.java            |    3 
 mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketMessage.java                      |  128 +++++++++++++++++++++
 mes-plan/src/main/java/com/chinaztt/mes/plan/entity/CustomerOrder.java                             |    3 
 mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/MasterProductionScheduleServiceImpl.java |   19 +-
 6 files changed, 148 insertions(+), 189 deletions(-)

diff --git a/mes-common/pom.xml b/mes-common/pom.xml
index 3c97df9..5ea547e 100644
--- a/mes-common/pom.xml
+++ b/mes-common/pom.xml
@@ -31,7 +31,11 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-websocket</artifactId>
 		</dependency>
-
+		<dependency>
+			<groupId>jakarta.websocket</groupId>
+			<artifactId>jakarta.websocket-api</artifactId>
+			<scope>provided</scope>
+		</dependency>
 		<dependency>
 			<groupId>commons-net</groupId>
 			<artifactId>commons-net</artifactId>
diff --git a/mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketMessage.java b/mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketMessage.java
new file mode 100644
index 0000000..cb0f091
--- /dev/null
+++ b/mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketMessage.java
@@ -0,0 +1,128 @@
+package com.chinaztt.mes.common.server;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/11/16
+ */
+@Component
+@Slf4j
+@ServerEndpoint("/websocket/{userId}")  // 鎺ュ彛璺緞 ws://ip:绔彛/webSocket/userId;
+public class WebSocketMessage {
+
+    //涓庢煇涓鎴风鐨勮繛鎺ヤ細璇濓紝闇�瑕侀�氳繃瀹冩潵缁欏鎴风鍙戦�佹暟鎹�
+    private Session session;
+    /**
+     * 鐢ㄦ埛ID
+     */
+    private String userId;
+
+    //concurrent鍖呯殑绾跨▼瀹夊叏Set锛岀敤鏉ュ瓨鏀炬瘡涓鎴风瀵瑰簲鐨凪yWebSocket瀵硅薄銆�
+    //铏界劧@Component榛樿鏄崟渚嬫ā寮忕殑锛屼絾springboot杩樻槸浼氫负姣忎釜websocket杩炴帴鍒濆鍖栦竴涓猙ean锛屾墍浠ュ彲浠ョ敤涓�涓潤鎬乻et淇濆瓨璧锋潵銆�
+    //  娉細搴曚笅WebSocket鏄綋鍓嶇被鍚�
+    private static CopyOnWriteArraySet<WebSocketMessage> webSockets =new CopyOnWriteArraySet<>();
+    // 鐢ㄦ潵瀛樺湪绾胯繛鎺ョ敤鎴蜂俊鎭�
+    private static ConcurrentHashMap<String,Session> sessionPool = new ConcurrentHashMap<String,Session>();
+
+    /**
+     * 閾炬帴鎴愬姛璋冪敤鐨勬柟娉�
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam(value="userId")String userId) {
+        try {
+            this.session = session;
+            this.userId = userId;
+            webSockets.add(this);
+            sessionPool.put(userId, session);
+            log.info("銆恮ebsocket娑堟伅銆戞湁鏂扮殑杩炴帴锛屾�绘暟涓�:"+webSockets.size());
+        } catch (Exception e) {
+        }
+    }
+
+    /**
+     * 閾炬帴鍏抽棴璋冪敤鐨勬柟娉�
+     */
+    @OnClose
+    public void onClose() {
+        try {
+            webSockets.remove(this);
+            sessionPool.remove(this.userId);
+            log.info("銆恮ebsocket娑堟伅銆戣繛鎺ユ柇寮�锛屾�绘暟涓�:"+webSockets.size());
+        } catch (Exception e) {
+        }
+    }
+    /**
+     * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+     *
+     * @param message
+     */
+    @OnMessage
+    public void onMessage(String message) {
+        log.info("銆恮ebsocket娑堟伅銆戞敹鍒板鎴风娑堟伅:"+message);
+    }
+
+    /** 鍙戦�侀敊璇椂鐨勫鐞�
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+
+        log.error("鐢ㄦ埛閿欒,鍘熷洜:"+error.getMessage());
+        error.printStackTrace();
+    }
+
+
+    // 姝や负骞挎挱娑堟伅
+    public void sendAllMessage(String message) {
+        log.info("銆恮ebsocket娑堟伅銆戝箍鎾秷鎭�:"+message);
+        for(WebSocketMessage webSocket : webSockets) {
+            try {
+                if(webSocket.session.isOpen()) {
+                    webSocket.session.getAsyncRemote().sendText(message);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // 姝や负鍗曠偣娑堟伅
+    public void sendOneMessage(String userId, String message) {
+        Session session = sessionPool.get(userId);
+        if (session != null&&session.isOpen()) {
+            try {
+                log.info("銆恮ebsocket娑堟伅銆� 鍗曠偣娑堟伅:"+message);
+                session.getAsyncRemote().sendText(message);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // 姝や负鍗曠偣娑堟伅(澶氫汉)
+    public void sendMoreMessage(String[] userIds, String message) {
+        for(String userId:userIds) {
+            Session session = sessionPool.get(userId);
+            if (session != null&&session.isOpen()) {
+                try {
+                    log.info("銆恮ebsocket娑堟伅銆� 鍗曠偣娑堟伅:"+message);
+                    session.getAsyncRemote().sendText(message);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
+}
diff --git a/mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketServer.java b/mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketServer.java
deleted file mode 100644
index be5cbf0..0000000
--- a/mes-common/src/main/java/com/chinaztt/mes/common/server/WebSocketServer.java
+++ /dev/null
@@ -1,178 +0,0 @@
-//package com.chinaztt.mes.common.server;
-//import com.alibaba.fastjson.JSON;
-//import com.alibaba.fastjson.JSONObject;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.lang3.StringUtils;
-//import org.springframework.stereotype.Component;
-//
-//import javax.websocket.*;
-//import javax.websocket.server.PathParam;
-//import javax.websocket.server.ServerEndpoint;
-//import java.io.IOException;
-//import java.util.HashMap;
-//import java.util.Iterator;
-//import java.util.concurrent.ConcurrentHashMap;
-///**
-// * @Author 寮犲
-// * @Date 2023/11/13
-// * @Params: WebSocketServer.sendInfo(浣跨敤JSON,鐢ㄦ埛鍚�);
-// * @Return
-// */
-////@ServerEndpoint("/websocket/{userId}")
-//@Component
-//@Slf4j
-//public class WebSocketServer {
-//
-//	/**闈欐�佸彉閲忥紝鐢ㄦ潵璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁般�傚簲璇ユ妸瀹冭璁℃垚绾跨▼瀹夊叏鐨勩��*/
-//	private static int onlineCount = 0;
-//	/**concurrent鍖呯殑绾跨▼瀹夊叏Set锛岀敤鏉ュ瓨鏀炬瘡涓鎴风瀵瑰簲鐨凪yWebSocket瀵硅薄銆�*/
-//	private static ConcurrentHashMap<String, WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
-//	/**涓庢煇涓鎴风鐨勮繛鎺ヤ細璇濓紝闇�瑕侀�氳繃瀹冩潵缁欏鎴风鍙戦�佹暟鎹�*/
-//	private Session session;
-//	/**鎺ユ敹userId*/
-//	private String userId="";
-//
-//	/**
-//	 * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
-//	 * */
-//	@OnOpen
-//	public void onOpen(Session session, @PathParam("userId") String userId) {
-//		this.session = session;
-//		this.userId=userId;
-//		if(webSocketMap.containsKey(userId)){
-//			webSocketMap.remove(userId);
-//			//鍔犲叆set涓�
-//		}else{
-//			webSocketMap.put(userId,this);
-//			//鍔犲叆set涓�
-//			addOnlineCount();
-//			//鍦ㄧ嚎鏁板姞1
-//		}
-//
-//		log.info("鐢ㄦ埛杩炴帴:"+userId+",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineCount());
-//
-//		try {
-//			HashMap<Object, Object> map = new HashMap<>();
-//			map.put("key","杩炴帴鎴愬姛");
-//			sendMessage(JSON.toJSONString(map));
-//		} catch (IOException e) {
-//			log.error("鐢ㄦ埛:"+userId+",缃戠粶寮傚父!!!!!!");
-//		}
-//	}
-//
-//	/**
-//	 * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
-//	 */
-//	@OnClose
-//	public void onClose() {
-//		if(webSocketMap.containsKey(userId)){
-//			webSocketMap.remove(userId);
-//			//浠巗et涓垹闄�
-//			subOnlineCount();
-//		}
-//		log.info("鐢ㄦ埛閫�鍑�:"+userId+",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineCount());
-//	}
-//
-//	/**
-//	 * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
-//	 *
-//	 * @param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅*/
-//	@OnMessage
-//	public void onMessage(String message, Session session) {
-//		log.info("鐢ㄦ埛娑堟伅:"+userId+",鎶ユ枃:"+message);
-//		//鍙互缇ゅ彂娑堟伅
-//		//娑堟伅淇濆瓨鍒版暟鎹簱銆乺edis
-//		if(StringUtils.isNotBlank(message)){
-//			try {
-//				//瑙f瀽鍙戦�佺殑鎶ユ枃
-//				JSONObject jsonObject = JSONObject.parseObject(message);
-//				//杩藉姞鍙戦�佷汉(闃叉涓叉敼)
-//				jsonObject.put("fromUserId",this.userId);
-//				String fromUserId=jsonObject.getString("fromUserId");
-//				//浼犻�佺粰瀵瑰簲toUserId鐢ㄦ埛鐨剋ebsocket
-//				if(StringUtils.isNotBlank(fromUserId) && webSocketMap.containsKey(fromUserId)){
-//					webSocketMap.get(fromUserId).sendMessage(jsonObject.toJSONString());
-//					//鑷畾涔�-涓氬姟澶勭悊
-//
-////                    DeviceLocalThread.paramData.put(jsonObject.getString("group"),jsonObject.toJSONString());
-//				}else{
-//					log.error("璇锋眰鐨剈serId:"+fromUserId+"涓嶅湪璇ユ湇鍔″櫒涓�");
-//					//鍚﹀垯涓嶅湪杩欎釜鏈嶅姟鍣ㄤ笂锛屽彂閫佸埌mysql鎴栬�卹edis
-//				}
-//			}catch (Exception e){
-//				e.printStackTrace();
-//			}
-//		}
-//	}
-//
-//	/**
-//	 *  鍙戠敓閿欒鏃跺��
-//	 * @param session
-//	 * @param error
-//	 */
-//	@OnError
-//	public void onError(Session session, Throwable error) {
-//		log.error("鐢ㄦ埛閿欒:"+this.userId+",鍘熷洜:"+error.getMessage());
-//		error.printStackTrace();
-//	}
-//	/**
-//	 * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫�
-//	 */
-//	public void sendMessage(String message) throws IOException {
-//		//鍔犲叆绾跨▼閿�
-//		synchronized (session){
-//			try {
-//				//鍚屾鍙戦�佷俊鎭�
-//				this.session.getBasicRemote().sendText(message);
-//			} catch (IOException e) {
-//				log.error("鏈嶅姟鍣ㄦ帹閫佸け璐�:"+e.getMessage());
-//			}
-//		}
-//	}
-//
-//
-//	/**
-//	 * 鍙戦�佽嚜瀹氫箟娑堟伅
-//	 * */
-//	/**
-//	 * 鍙戦�佽嚜瀹氫箟娑堟伅
-//	 * @param message 鍙戦�佺殑淇℃伅
-//	 * @param toUserId  濡傛灉涓簄ull榛樿鍙戦�佹墍鏈�
-//	 * @throws IOException
-//	 */
-//	public static void sendInfo(String message,String toUserId) throws IOException {
-//		//濡傛灉userId涓虹┖锛屽悜鎵�鏈夌兢浣撳彂閫�
-//		if(StringUtils.isEmpty(toUserId)) {
-//			//鍚戞墍鏈夌敤鎴峰彂閫佷俊鎭�
-//			Iterator<String> itera = webSocketMap.keySet().iterator();
-//			while (itera.hasNext()) {
-//				String keys = itera.next();
-//				WebSocketServer item = webSocketMap.get(keys);
-//				item.sendMessage(message);
-//			}
-//		}
-//		//濡傛灉涓嶄负绌猴紝鍒欏彂閫佹寚瀹氱敤鎴蜂俊鎭�
-//		else if(webSocketMap.containsKey(toUserId)){
-//			WebSocketServer item = webSocketMap.get(toUserId);
-//			item.sendMessage(message);
-//		}else{
-//			log.error("璇锋眰鐨剈serId:"+toUserId+"涓嶅湪璇ユ湇鍔″櫒涓�");
-//		}
-//	}
-//
-//	public static synchronized int getOnlineCount() {
-//		return onlineCount;
-//	}
-//
-//	public static synchronized void addOnlineCount() {
-//		WebSocketServer.onlineCount++;
-//	}
-//
-//	public static synchronized void subOnlineCount() {
-//		WebSocketServer.onlineCount--;
-//	}
-//
-//	public static synchronized ConcurrentHashMap<String, WebSocketServer> getWebSocketMap(){
-//		return WebSocketServer.webSocketMap;
-//	}
-//}
\ No newline at end of file
diff --git a/mes-plan/src/main/java/com/chinaztt/mes/plan/entity/CustomerOrder.java b/mes-plan/src/main/java/com/chinaztt/mes/plan/entity/CustomerOrder.java
index 7e50cb5..bb82473 100644
--- a/mes-plan/src/main/java/com/chinaztt/mes/plan/entity/CustomerOrder.java
+++ b/mes-plan/src/main/java/com/chinaztt/mes/plan/entity/CustomerOrder.java
@@ -108,6 +108,9 @@
 	 */
 	@ApiModelProperty(value = "闆朵欢鍙凤細鐢ㄤ簬鐢熶骇鐨勯浂浠跺彿")
 	private String partNo;
+
+	@ApiModelProperty(value = "闆朵欢缂栧彿锛氱敤浜庣敓浜х殑闆朵欢鍙�")
+	private String partId;
 	/**
 	 * 鏁伴噺
 	 */
diff --git a/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/CustomerOrderServiceImpl.java b/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/CustomerOrderServiceImpl.java
index 348755a..01b4adc 100644
--- a/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/CustomerOrderServiceImpl.java
+++ b/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/CustomerOrderServiceImpl.java
@@ -257,8 +257,9 @@
 	private void changeAudit(CustomerOrder customerOrder, String isAudit) {
 		//瀹℃牳鐘舵�� 閫氳繃 璁㈠崟鐘舵�佸緟璁″垝
 		if (isAudit.equals(AuditStateStringValues.ACCEPTED)) {
+			//TODO: 瑕佸姞闆朵欢id鍙傛暟
 			Document document = documentMapper.selectById(customerOrder.getTechnologyDocumentId());
-			Part part = partMapper.selectOne(Wrappers.<Part>lambdaQuery().eq(Part::getEngChgLevel, "1").eq(Part::getPartNo, customerOrder.getPartNo()));
+			Part part = partMapper.selectOne(Wrappers.<Part>lambdaQuery().eq(Part::getEngChgLevel, "1").eq(Part::getId,customerOrder.getPartId() ));
 			if (null == part) {
 				throw new RuntimeException("鏍规嵁闆朵欢缂栧彿 = 銆�" + customerOrder.getPartNo() + "銆慚ES鏈湴鏌ユ棤鍖归厤闆朵欢瀵硅薄");
 			}
diff --git a/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/MasterProductionScheduleServiceImpl.java b/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/MasterProductionScheduleServiceImpl.java
index 426e82c..510d7b7 100644
--- a/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/MasterProductionScheduleServiceImpl.java
+++ b/mes-plan/src/main/java/com/chinaztt/mes/plan/service/impl/MasterProductionScheduleServiceImpl.java
@@ -20,10 +20,7 @@
 import com.chinaztt.mes.common.oa.OAResult;
 import com.chinaztt.mes.common.util.StateResult;
 import com.chinaztt.mes.plan.dto.*;
-import com.chinaztt.mes.plan.entity.MasterProductionSchedule;
-import com.chinaztt.mes.plan.entity.MasterProductionScheduleTheoryQuantity;
-import com.chinaztt.mes.plan.entity.MpsStructureComponent;
-import com.chinaztt.mes.plan.entity.OperationTaskProduce;
+import com.chinaztt.mes.plan.entity.*;
 import com.chinaztt.mes.plan.mapper.*;
 import com.chinaztt.mes.plan.service.CustomerOrderService;
 import com.chinaztt.mes.plan.service.MasterProductionScheduleService;
@@ -90,7 +87,7 @@
 	private StructureMapper structureMapper;
 	private StateMachineFactory<MasterProductionScheduleStates, MasterProductionScheduleEvents> masterproductionscheduleStateMachineFactory;
 	private StateMachinePersister<MasterProductionScheduleStates, MasterProductionScheduleEvents, MasterProductionSchedule> persister;
-
+	private MoStructureComponentMapper moStructureComponentMapper;
 
 	@Override
 	public IPage<List<MasterProductionScheduleDTO>> getMasterProductionSchedulePage(Page page, QueryWrapper<MasterProductionScheduleDTO> masterProductionScheduleDTO) {
@@ -474,10 +471,14 @@
 			Long technologyDocumentId = p.getTechnologyDocumentId();
 			Document document = documentMapper.selectById(technologyDocumentId);
 			Long firstPart = document.getPartId();
-			String url="http://192.168.20.47:8008/PurchService.ashx?contract=ZTKJ&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_INVENTORY_INFO_STD&userId=7632&inAttr={\"LOCATION_NO\": \"1019\",\"PART_NO\":"+p+"}";
-			String body = HttpRequest.get(url).execute().body();
-			JSONObject partInfo = JSONObject.parseObject(body);
-			log.info("搴撳瓨闆朵欢======>"+partInfo);
+			List<MoStructureComponent> moStructureComponents = moStructureComponentMapper.selectList(new QueryWrapper<MoStructureComponent>().lambda().eq(MoStructureComponent::getPlanManufacturingOrderId, p.getId()));
+			moStructureComponents.forEach(m->{
+				Part part = partMapper.selectById(m.getPartId());
+				String url="http://192.168.20.47:8008/PurchService.ashx?contract=ZTKJ&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_INVENTORY_INFO_STD&userId=7632&inAttr={\"LOCATION_NO\": \"1019\",\"PART_NO\":"+part.getPartNo()+"}";
+				String body = HttpRequest.get(url).execute().body();
+				JSONObject partInfo = JSONObject.parseObject(body);
+				log.info("搴撳瓨闆朵欢==================================>"+partInfo);
+			});
 		});
 		return false;
 	}

--
Gitblit v1.9.3