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