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