51 changed files with 611 additions and 92 deletions
			
			
		- 
					15client/pom.xml
- 
					16client/src/main/java/com/canvas/web/modules/front/rest/FrontController.java
- 
					172client/src/main/java/com/canvas/web/modules/front/rest/WebSocket.java
- 
					10common/src/main/java/com/canvas/web/base/BaseEntity.java
- 
					2system/src/main/java/com/canvas/web/modules/device/domain/Device.java
- 
					2system/src/main/java/com/canvas/web/modules/device/dto/DeviceDTO.java
- 
					6system/src/main/java/com/canvas/web/modules/device/repository/DeviceRepository.java
- 
					11system/src/main/java/com/canvas/web/modules/device/rest/DeviceController.java
- 
					2system/src/main/java/com/canvas/web/modules/device/service/DeviceService.java
- 
					4system/src/main/java/com/canvas/web/modules/device/service/impl/DeviceServiceImpl.java
- 
					7system/src/main/java/com/canvas/web/modules/material/criteria/MaterialQueryCriteria.java
- 
					4system/src/main/java/com/canvas/web/modules/material/criteria/ThemeQueryCriteria.java
- 
					24system/src/main/java/com/canvas/web/modules/material/domain/Material.java
- 
					2system/src/main/java/com/canvas/web/modules/material/domain/MaterialFolder.java
- 
					2system/src/main/java/com/canvas/web/modules/material/domain/OrgaClass.java
- 
					2system/src/main/java/com/canvas/web/modules/material/domain/ThemeFolder.java
- 
					8system/src/main/java/com/canvas/web/modules/material/dto/ChangeStateDTO.java
- 
					2system/src/main/java/com/canvas/web/modules/material/dto/DoFolderDTO.java
- 
					2system/src/main/java/com/canvas/web/modules/material/dto/FolderDTO.java
- 
					2system/src/main/java/com/canvas/web/modules/material/dto/MaterialDTO.java
- 
					2system/src/main/java/com/canvas/web/modules/material/dto/ThemeClassDTO.java
- 
					4system/src/main/java/com/canvas/web/modules/material/repository/MaterialFolderRepository.java
- 
					24system/src/main/java/com/canvas/web/modules/material/repository/MaterialRepository.java
- 
					4system/src/main/java/com/canvas/web/modules/material/repository/OrgaClassRepository.java
- 
					2system/src/main/java/com/canvas/web/modules/material/repository/ThemeClassRepository.java
- 
					4system/src/main/java/com/canvas/web/modules/material/repository/ThemeFolderRepository.java
- 
					39system/src/main/java/com/canvas/web/modules/material/rest/MaterialController.java
- 
					12system/src/main/java/com/canvas/web/modules/material/rest/ThemeClassController.java
- 
					21system/src/main/java/com/canvas/web/modules/material/service/MaterialService.java
- 
					5system/src/main/java/com/canvas/web/modules/material/service/ThemeClassService.java
- 
					47system/src/main/java/com/canvas/web/modules/material/service/impl/MaterialServiceImpl.java
- 
					25system/src/main/java/com/canvas/web/modules/material/service/impl/ThemeClassServiceImpl.java
- 
					31system/src/main/java/com/canvas/web/modules/material/vo/ThemeClassVO.java
- 
					8system/src/main/java/com/canvas/web/modules/material/vo/ThemeVO.java
- 
					2system/src/main/java/com/canvas/web/modules/release/criteria/NoticeQueryCriteria.java
- 
					2system/src/main/java/com/canvas/web/modules/release/criteria/ReleaseListQueryCriteria.java
- 
					2system/src/main/java/com/canvas/web/modules/release/domain/Notice.java
- 
					30system/src/main/java/com/canvas/web/modules/release/domain/ReleaseList.java
- 
					18system/src/main/java/com/canvas/web/modules/release/domain/ReleaseMaterial.java
- 
					2system/src/main/java/com/canvas/web/modules/release/dto/NoticeDTO.java
- 
					6system/src/main/java/com/canvas/web/modules/release/dto/ReleaseDTO.java
- 
					4system/src/main/java/com/canvas/web/modules/release/dto/ReleaseMaterialDTO.java
- 
					2system/src/main/java/com/canvas/web/modules/release/repository/NoticeRepository.java
- 
					7system/src/main/java/com/canvas/web/modules/release/repository/ReleaseDeviceRepository.java
- 
					12system/src/main/java/com/canvas/web/modules/release/repository/ReleaseListRepository.java
- 
					2system/src/main/java/com/canvas/web/modules/release/repository/ReleaseMaterialRepository.java
- 
					30system/src/main/java/com/canvas/web/modules/release/rest/ReleaseListController.java
- 
					12system/src/main/java/com/canvas/web/modules/release/service/ReleaseListService.java
- 
					42system/src/main/java/com/canvas/web/modules/release/service/impl/ReleaseListServiceImpl.java
- 
					3system/src/main/java/com/canvas/web/modules/release/vo/ReleaseDetailVO.java
- 
					4system/src/main/java/com/canvas/web/modules/release/vo/ReleaseListVO.java
| @ -0,0 +1,16 @@ | |||||
|  | package com.canvas.web.modules.front.rest; | ||||
|  | 
 | ||||
|  | import io.swagger.annotations.Api; | ||||
|  | import lombok.RequiredArgsConstructor; | ||||
|  | import org.springframework.web.bind.annotation.RequestMapping; | ||||
|  | import org.springframework.web.bind.annotation.RestController; | ||||
|  | 
 | ||||
|  | @RestController | ||||
|  | @RequiredArgsConstructor | ||||
|  | @Api(tags = "画屏客户端") | ||||
|  | @RequestMapping("/api/front") | ||||
|  | public class FrontController { | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | } | ||||
| @ -0,0 +1,172 @@ | |||||
|  | package com.canvas.web.modules.front.rest; | ||||
|  | 
 | ||||
|  | import com.canvas.web.modules.device.service.DeviceService; | ||||
|  | import org.springframework.stereotype.Component; | ||||
|  | 
 | ||||
|  | import javax.websocket.*; | ||||
|  | import javax.websocket.server.PathParam; | ||||
|  | import javax.websocket.server.ServerEndpoint; | ||||
|  | import java.io.IOException; | ||||
|  | import java.text.DateFormat; | ||||
|  | import java.text.SimpleDateFormat; | ||||
|  | import java.util.Date; | ||||
|  | import java.util.concurrent.ConcurrentHashMap; | ||||
|  | 
 | ||||
|  | @ServerEndpoint("/websocket/{deviceId}") | ||||
|  | @Component | ||||
|  | public class WebSocket { | ||||
|  | 
 | ||||
|  |     private DeviceService deviceService; | ||||
|  | 
 | ||||
|  |     //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 | ||||
|  |     private static int onlineCount = 0; | ||||
|  |     //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识 | ||||
|  |     private static ConcurrentHashMap<String, WebSocket> webSocketSet = new ConcurrentHashMap<String, WebSocket>(); | ||||
|  |     //与某个客户端的连接会话,需要通过它来给客户端发送数据 | ||||
|  |     private Session session; | ||||
|  | 
 | ||||
|  |     //当前发消息的设备编号 | ||||
|  |     private String deviceId = ""; | ||||
|  | 
 | ||||
|  |     public static WebSocket getWebSocket(String id) { | ||||
|  |         return webSocketSet.get(id); | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 连接建立成功调用的方法 | ||||
|  |      * | ||||
|  |      * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据 | ||||
|  |      */ | ||||
|  |     @OnOpen | ||||
|  |     public void onOpen(@PathParam(value = "deviceId") String param, Session session, EndpointConfig config) { | ||||
|  |         System.out.println(param); | ||||
|  |         deviceId = param;//接收到发送消息的设备编号 | ||||
|  |         this.session = session; | ||||
|  |         webSocketSet.put(param, this);//加入map中 | ||||
|  |         addOnlineCount();           //在线数加1 | ||||
|  |         deviceService.updateState(deviceId,1); | ||||
|  |         System.out.println("有新连接加入!当前在线人数为" + getOnlineCount()); | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 连接关闭调用的方法 | ||||
|  |      */ | ||||
|  |     @OnClose | ||||
|  |     public void onClose() { | ||||
|  |         if (!deviceId.equals("")) { | ||||
|  |             webSocketSet.remove(deviceId);  //从set中删除 | ||||
|  |             subOnlineCount();           //在线数减1 | ||||
|  |             deviceService.updateState(deviceId,2); | ||||
|  |             System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount()); | ||||
|  |         } | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 收到客户端消息后调用的方法 | ||||
|  |      * | ||||
|  |      * @param message 客户端发送过来的消息 | ||||
|  |      */ | ||||
|  |     @OnMessage | ||||
|  |     public void onMessage(String message) { | ||||
|  |         System.out.println("来自客户端的消息:" + message); | ||||
|  | //        session.get | ||||
|  |         //群发消息 | ||||
|  |         if (1 != 1) { | ||||
|  |             sendAll(message); | ||||
|  |         } else { | ||||
|  |             //给指定的人发消息 | ||||
|  |             sendToUser(message); | ||||
|  |         } | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 给指定的人发送消息 | ||||
|  |      * | ||||
|  |      * @param message | ||||
|  |      */ | ||||
|  |     private void sendToUser(String message) { | ||||
|  |         String sendUserno = message.split("[|]")[1]; | ||||
|  |         String sendMessage = message.split("[|]")[0]; | ||||
|  |         String now = getNowTime(); | ||||
|  |         try { | ||||
|  |             if (webSocketSet.get(sendUserno) != null) { | ||||
|  |                 webSocketSet.get(sendUserno).sendMessage(now + "用户" + deviceId + "发来消息:" + " <br/> " + sendMessage); | ||||
|  |             } else { | ||||
|  |                 System.out.println("当前用户不在线"); | ||||
|  |             } | ||||
|  |         } catch (IOException e) { | ||||
|  |             e.printStackTrace(); | ||||
|  |         } | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 给所有人发消息 | ||||
|  |      * | ||||
|  |      * @param message | ||||
|  |      */ | ||||
|  |     private void sendAll(String message) { | ||||
|  |         String now = getNowTime(); | ||||
|  |         String sendMessage = message.split("[|]")[0]; | ||||
|  |         //遍历HashMap | ||||
|  |         for (String key : webSocketSet.keySet()) { | ||||
|  |             try { | ||||
|  |                 //判断接收用户是否是当前发消息的用户 | ||||
|  |                 if (!deviceId.equals(key)) { | ||||
|  |                     webSocketSet.get(key).sendMessage(now + "用户" + deviceId + "发来消息:" + " <br/> " + sendMessage); | ||||
|  |                     System.out.println("key = " + key); | ||||
|  |                 } | ||||
|  |             } catch (IOException e) { | ||||
|  |                 e.printStackTrace(); | ||||
|  |             } | ||||
|  |         } | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 获取当前时间 | ||||
|  |      * | ||||
|  |      * @return | ||||
|  |      */ | ||||
|  |     private String getNowTime() { | ||||
|  |         Date date = new Date(); | ||||
|  |         DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||||
|  |         String time = format.format(date); | ||||
|  |         return time; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 发生错误时调用 | ||||
|  |      * | ||||
|  |      * @param session | ||||
|  |      * @param error | ||||
|  |      */ | ||||
|  |     @OnError | ||||
|  |     public void onError(Session session, Throwable error) { | ||||
|  |         System.out.println("发生错误"); | ||||
|  |         error.printStackTrace(); | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。 | ||||
|  |      * | ||||
|  |      * @param message | ||||
|  |      * @throws IOException | ||||
|  |      */ | ||||
|  |     public void sendMessage(String message) throws IOException { | ||||
|  |         this.session.getBasicRemote().sendText(message); | ||||
|  |         //this.session.getAsyncRemote().sendText(message); | ||||
|  |     } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |     public static synchronized int getOnlineCount() { | ||||
|  |         return onlineCount; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     public static synchronized void addOnlineCount() { | ||||
|  |         WebSocket.onlineCount++; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     public static synchronized void subOnlineCount() { | ||||
|  |         WebSocket.onlineCount--; | ||||
|  |     } | ||||
|  | 
 | ||||
|  | } | ||||
| @ -0,0 +1,31 @@ | |||||
|  | package com.canvas.web.modules.material.vo; | ||||
|  | 
 | ||||
|  | import com.alibaba.fastjson.annotation.JSONField; | ||||
|  | import com.canvas.web.modules.system.domain.Org; | ||||
|  | import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | import lombok.Getter; | ||||
|  | import lombok.Setter; | ||||
|  | 
 | ||||
|  | import java.util.List; | ||||
|  | 
 | ||||
|  | @Getter | ||||
|  | @Setter | ||||
|  | public class ThemeClassVO { | ||||
|  | 
 | ||||
|  |     @JSONField(name="id") | ||||
|  |     @JsonProperty("id") | ||||
|  |     private String id; | ||||
|  | 
 | ||||
|  |     @JSONField(name="className") | ||||
|  |     @JsonProperty("class_name") | ||||
|  |     private String className; | ||||
|  | 
 | ||||
|  |     @JSONField(name="isAll") | ||||
|  |     @JsonProperty("is_all") | ||||
|  |     private Boolean isAll; | ||||
|  | 
 | ||||
|  |     @JSONField(name="orgs") | ||||
|  |     @JsonProperty("orgs") | ||||
|  |     private List<Org> orgs; | ||||
|  | 
 | ||||
|  | } | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue