LG88888888 %!s(int64=3) %!d(string=hai) anos
pai
achega
70e21b63e8
Modificáronse 56 ficheiros con 714 adicións e 40 borrados
  1. BIN=BIN
      jeecg-boot-base/jeecg-boot-base-api/jeecg-system-cloud-api/target/jeecg-system-cloud-api-2.4.2.jar
  2. BIN=BIN
      jeecg-boot-base/jeecg-boot-base-api/jeecg-system-local-api/target/jeecg-system-local-api-2.4.2.jar
  3. 3 0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  4. BIN=BIN
      jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/config/shiro/ShiroConfig.class
  5. BIN=BIN
      jeecg-boot-base/jeecg-boot-base-core/target/jeecg-boot-base-core-2.4.2.jar
  6. BIN=BIN
      jeecg-boot-base/jeecg-boot-base-tools/target/jeecg-boot-base-tools-2.4.2.jar
  7. BIN=BIN
      jeecg-boot-module-demo/target/jeecg-boot-module-demo-2.4.2.jar
  8. 10 1
      jeecg-boot-module-system/pom.xml
  9. 58 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/Center.java
  10. 42 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/Chat.java
  11. 123 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/ChatController.java
  12. 35 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/DeptUser.java
  13. 58 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/UserChat.java
  14. 145 18
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
  15. 87 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/AES.java
  16. 78 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/RestTemplateUtil.java
  17. 49 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/WeixinXCX.java
  18. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/Center.class
  19. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/Chat.class
  20. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/ChatController.class
  21. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/DeptUser.class
  22. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/UserChat.class
  23. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/WebSocket.class
  24. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/controller/LoginController$1.class
  25. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/controller/LoginController.class
  26. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/controller/SysUserController.class
  27. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/SysUserMapper.class
  28. 22 16
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
  29. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/ISysPositionService.class
  30. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/ISysUserService.class
  31. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.class
  32. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.class
  33. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.class
  34. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysUserServiceImpl.class
  35. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$1.class
  36. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$2.class
  37. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$3.class
  38. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$4.class
  39. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$5.class
  40. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$6.class
  41. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$7.class
  42. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$8.class
  43. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$9.class
  44. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl.class
  45. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/AES.class
  46. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/RestTemplateUtil.class
  47. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData$1.class
  48. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData$2.class
  49. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData$3.class
  50. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData.class
  51. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/vo/WeixinDepart.class
  52. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/vo/WeixinUser.class
  53. BIN=BIN
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/vo/WeixinXCX.class
  54. BIN=BIN
      jeecg-boot-module-system/target/jeecg-boot-module-system-2.4.2.jar
  55. BIN=BIN
      jeecg-boot-module-system/target/jeecg-boot-module-system-2.4.2.jar.original
  56. 4 0
      jeecg-boot-module-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

BIN=BIN
jeecg-boot-base/jeecg-boot-base-api/jeecg-system-cloud-api/target/jeecg-system-cloud-api-2.4.2.jar


BIN=BIN
jeecg-boot-base/jeecg-boot-base-api/jeecg-system-local-api/target/jeecg-system-local-api-2.4.2.jar


+ 3 - 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -77,6 +77,8 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/sys/login", "anon"); //登录接口排除
         filterChainDefinitionMap.put("/sys/mLogin", "anon"); //登录接口排除
         filterChainDefinitionMap.put("/sys/logout", "anon"); //登出接口排除
+        filterChainDefinitionMap.put("/sys/xcxLogin", "anon"); //小程序账号登录接口排除
+        filterChainDefinitionMap.put("/sys/kjLogin", "anon"); //小程序快捷登录接口排除
         filterChainDefinitionMap.put("/sys/thirdLogin/**", "anon"); //第三方登录
         filterChainDefinitionMap.put("/sys/getEncryptedString", "anon"); //获取加密串
         filterChainDefinitionMap.put("/sys/sms", "anon");//短信验证码
@@ -98,6 +100,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/**/*.svg", "anon");
         filterChainDefinitionMap.put("/**/*.pdf", "anon");
         filterChainDefinitionMap.put("/**/*.jpg", "anon");
+        filterChainDefinitionMap.put("/**/*.jpeg", "anon");
         filterChainDefinitionMap.put("/**/*.png", "anon");
         filterChainDefinitionMap.put("/**/*.ico", "anon");
 

BIN=BIN
jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/config/shiro/ShiroConfig.class


BIN=BIN
jeecg-boot-base/jeecg-boot-base-core/target/jeecg-boot-base-core-2.4.2.jar


BIN=BIN
jeecg-boot-base/jeecg-boot-base-tools/target/jeecg-boot-base-tools-2.4.2.jar


BIN=BIN
jeecg-boot-module-demo/target/jeecg-boot-module-demo-2.4.2.jar


+ 10 - 1
jeecg-boot-module-system/pom.xml

@@ -76,7 +76,16 @@
 			<artifactId>alipay-sdk-java</artifactId>
 			<version>3.7.4.ALL</version>
 		</dependency>-->
-
+		<dependency>
+			<groupId>org.bouncycastle</groupId>
+			<artifactId>bcprov-jdk15on</artifactId>
+			<version>1.59</version>
+		</dependency>
+<!--		<dependency>-->
+<!--			<groupId>cn.hutool</groupId>-->
+<!--			<artifactId>hutool-all</artifactId>-->
+<!--			<version>4.4.5</version>-->
+<!--		</dependency>-->
 		<dependency>
 			<groupId>org.jeecgframework.boot</groupId>
 			<artifactId>jeecg-system-local-api</artifactId>

+ 58 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/Center.java

@@ -0,0 +1,58 @@
+package org.jeecg.modules.message.websocket;
+
+public class Center {
+   private String center;
+   private  String  date;
+   private  String type;
+   private  String userid;
+   private  String name;
+   private  String avatar;
+
+    public String getUserid() {
+        return userid;
+    }
+
+    public void setUserid(String userid) {
+        this.userid = userid;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getCenter() {
+        return center;
+    }
+
+    public void setCenter(String center) {
+        this.center = center;
+    }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}

+ 42 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/Chat.java

@@ -3,14 +3,51 @@ package org.jeecg.modules.message.websocket;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 public class Chat {
    private String userid;
    private  String center;
-    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private java.util.Date date;
+   private  String date;
+   private  String avatUrl;
+   private  String name;
+
+   private List<Center>list;
+   private  List<Center>listwd=new ArrayList<>();
+
+    public String getAvatUrl() {
+        return avatUrl;
+    }
+
+    public void setAvatUrl(String avatUrl) {
+        this.avatUrl = avatUrl;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<Center> getListwd() {
+        return listwd;
+    }
+
+    public void setListwd(List<Center> listwd) {
+        this.listwd = listwd;
+    }
+
+    public List<Center> getList() {
+        return list;
+    }
+
+    public void setList(List<Center> list) {
+        this.list = list;
+    }
 
     public String getUserid() {
         return userid;
@@ -28,11 +65,11 @@ public class Chat {
         this.center = center;
     }
 
-    public Date getDate() {
+    public String getDate() {
         return date;
     }
 
-    public void setDate(Date date) {
+    public void setDate(String date) {
         this.date = date;
     }
 }

+ 123 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/ChatController.java

@@ -0,0 +1,123 @@
+package org.jeecg.modules.message.websocket;
+
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.modules.system.entity.SysDepart;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysUserMapper;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/chat")
+public class ChatController {
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Autowired
+    private SysUserMapper userMapper;
+
+
+
+@RequestMapping("/queryMsg")
+    public Map<String,Object>queryMsg(String userid){
+                Map<String,Object>map=new HashMap<>();
+                List<UserChat>list=new ArrayList<>();
+                if (redisUtil.hasKey(userid+"a")){
+                    List<Chat>taskList=(ArrayList<Chat>)redisUtil.get(userid+"a");
+                    for (Chat ct:taskList){
+                        UserChat userChat=new UserChat();
+                        if (ct.getListwd().size()>0){
+                            if (ct.getListwd().size()>=99){
+                                userChat.setCount("99+");
+                            }else{
+                                userChat.setCount(String.valueOf(ct.getListwd().size()));
+                            }
+
+
+                            if (ct.getListwd().get(ct.getListwd().size()-1).getCenter().length()>10){
+                                userChat.setMsg(ct.getListwd().get(ct.getListwd().size()-1).getCenter().substring(0,9)+"...");
+                            }else{
+                                userChat.setMsg(ct.getListwd().get(ct.getListwd().size()-1).getCenter());
+                            }
+
+                            userChat.setDate(ct.getListwd().get(ct.getListwd().size()-1).getDate());
+
+                        }else{
+                            if (ct.getList().get(ct.getList().size()-1).getCenter().length()>10){
+
+                                userChat.setMsg(ct.getList().get(ct.getList().size()-1).getCenter().substring(0,9)+"...");
+                            }else{
+                                userChat.setMsg(ct.getList().get(ct.getList().size()-1).getCenter());
+                            }
+
+                            userChat.setDate(ct.getList().get(ct.getList().size()-1).getDate());
+                            userChat.setCount("0");
+                        }
+                        userChat.setName(ct.getName());
+                        userChat.setAvatUrl(ct.getAvatUrl());
+                        userChat.setId(ct.getUserid());
+
+                        list.add(userChat);
+                    }
+                }
+
+
+            map.put("list",list);
+                return map;
+
+    }
+
+
+
+
+    @RequestMapping("/deptlist")
+    public Map<String,Object>querydept(String departName){
+        Map<String,Object>map=new HashMap<>();
+        SysDepart s = userMapper.departN();
+
+        List<DeptUser>list=new ArrayList<>();
+        List<SysUser> sysUsers = userMapper.departCount(departName, s.getId());
+        for (SysUser sy:sysUsers){
+            DeptUser deptUser=new DeptUser();
+            List<SysUser> sysUsert = userMapper.departUser(sy.getDepartId(), null);
+            deptUser.setDeptName(sy.getOrgCodeTxt());
+            deptUser.setCount(sy.getCount());
+            deptUser.setLs(sysUsert);
+            list.add(deptUser);
+        }
+
+        map.put("orgName",s);
+        map.put("departName",list);
+       return map;
+    }
+
+    @RequestMapping("/userMsg")
+    public Map<String,Object>userMsg(String userid,String msgid){
+             Map<String,Object>map=new HashMap<>();
+             if (redisUtil.hasKey(userid+"a")){
+                 List<Chat>taskList=(ArrayList<Chat>)redisUtil.get(userid+"a");
+                 for (Chat ct:taskList){
+                     if (ct.getUserid().equals(msgid)){
+                         ct.getListwd().clear();
+                         List<Center> list = ct.getList();
+                         map.put("list",list);
+                     }
+                 }
+                 redisUtil.set(userid+"a",taskList);
+             }
+             return map;
+
+    }
+
+}

+ 35 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/DeptUser.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.message.websocket;
+
+import org.jeecg.modules.system.entity.SysUser;
+
+import java.util.List;
+
+public class DeptUser {
+    private  String deptName;
+    private  String count;
+    private List<SysUser>ls;
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+
+    public List<SysUser> getLs() {
+        return ls;
+    }
+
+    public void setLs(List<SysUser> ls) {
+        this.ls = ls;
+    }
+}

+ 58 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/UserChat.java

@@ -0,0 +1,58 @@
+package org.jeecg.modules.message.websocket;
+
+public class UserChat {
+    private  String name;
+    private  String avatUrl;
+    private  String   count;
+    private  String msg;
+    private  String date;
+    private  String id;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAvatUrl() {
+        return avatUrl;
+    }
+
+    public void setAvatUrl(String avatUrl) {
+        this.avatUrl = avatUrl;
+    }
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+}

+ 145 - 18
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java

@@ -1,10 +1,7 @@
 package org.jeecg.modules.message.websocket;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 import javax.annotation.Resource;
@@ -40,14 +37,14 @@ import lombok.extern.slf4j.Slf4j;
  */
 @Component
 @Slf4j
-@ServerEndpoint("/websocket/{userId}/{sessionId}") //此注解相当于设置访问URL
+@ServerEndpoint("/websocket/{userId}/{token}") //此注解相当于设置访问URL
 public class WebSocket {
 
     private Session session;
 
     private String userId;
 
-    private String sessionId;
+    private String token;
 
 
     private static final String REDIS_TOPIC_NAME = "socketHandler";
@@ -68,12 +65,13 @@ public class WebSocket {
 
 
     @OnOpen
-    public void onOpen(Session session, @PathParam(value = "userId") String userId, @PathParam(value = "sessionId") String sessionId) {
+    public void onOpen(Session session, @PathParam(value = "userId") String userId, @PathParam(value = "token") String token) {
         try {
             this.session = session;
             this.userId = userId;
-            this.sessionId=sessionId;
+            this.token=token;
             webSockets.add(this);
+            System.out.println(userId);
             sessionPool.put(userId, session);
             log.info("【websocket消息】有新的连接,总数为:" + webSockets.size());
         } catch (Exception e) {
@@ -85,7 +83,7 @@ public class WebSocket {
         try {
 
             webSockets.remove(this);
-            sessionPool.remove(this.userId);
+            sessionPool.remove(userId);
             log.info("【websocket消息】连接断开,总数为:" + webSockets.size());
         } catch (Exception e) {
         }
@@ -121,22 +119,141 @@ public class WebSocket {
         }
     }
 
+    public void sendUser(String message){
+
+        Center c=new Center();
+
+        String sendUserno = message.split("[|]")[1];
+        String sendMessage = message.split("[|]")[0];
+        String userid=message.split("[|]")[2];
+        String date=message.split("[|]")[3];
+        String username=message.split("[|]")[4];
+        String useravatUrl=message.split("[|]")[5];
+        String sendname=message.split("[|]")[6];
+        String sendavatUrl=message.split("[|]")[7];
+        c.setCenter(sendMessage);
+        c.setDate(date);
+        c.setUserid(userid);
+        c.setName(username);
+        c.setAvatar(useravatUrl);
+       if (!redisUtil.hasKey(userid+"a")){
+           Chat chat=new Chat();
+           List<Center>list=new ArrayList<>();
+           List<Chat>userTo=new ArrayList<>();
+           chat.setUserid(sendUserno);
+           chat.setName(sendname);
+           chat.setAvatUrl(sendavatUrl);
+           list.add(c);
+           chat.setList(list);
+           userTo.add(chat);
+          redisUtil.set(userid+"a",userTo);
+
+
+       } else  if (redisUtil.hasKey(userid+"a")==true){
+          List<Chat>taskList=(ArrayList<Chat>)redisUtil.get(userid+"a");
+           List<Center>list=new ArrayList<>();
+           Chat chat=new Chat();
+           if (!useLoop(taskList,sendUserno)){
+               chat.setUserid(sendUserno);
+               chat.setName(sendname);
+               chat.setAvatUrl(sendavatUrl);
+              list.add(c);
+              chat.setList(list);
+              taskList.add(chat);
+           }else{
+               for (Chat ct:taskList){
+                   if (ct.getUserid().equals(sendUserno)){
+                       ct.getList().add(c);
+                   }
+               }
+           }
+           List<Chat> taskList1 = taskList;
+           redisUtil.set(userid+"a",taskList);
+        }if (!redisUtil.hasKey(sendUserno+"a")){
+            Chat chat=new Chat();
+            List<Center>list=new ArrayList<>();
+            List<Center>listwd=new ArrayList<>();
+            List<Chat>userTo=new ArrayList<>();
+           chat.setUserid(userid);
+           chat.setName(username);
+           chat.setAvatUrl(useravatUrl);
+           list.add(c);
+           listwd.add(c);
+            chat.setList(list);
+            chat.setListwd(listwd);
+           userTo.add(chat);
+           redisUtil.set(sendUserno+"a",userTo);
+        } else  if (redisUtil.hasKey(sendUserno+"a")==true){
+            List<Chat>taskList=(ArrayList<Chat>)redisUtil.get(sendUserno+"a");
+            Chat chat=new Chat();
+            List<Center>list=new ArrayList<>();
+            List<Center>listwd=new ArrayList<>();
+            if (!useLoop(taskList,userid)){
+                chat.setUserid(userid);
+                chat.setName(username);
+                chat.setAvatUrl(useravatUrl);
+                list.add(c);
+                listwd.add(c);
+                chat.setList(list);
+                chat.setListwd(listwd);
+                taskList.add(chat);
+            }else {
+                for (Chat ct : taskList) {
+                    if (ct.getUserid().equals(userid)) {
+                        ct.getList().add(c);
+                            if (ct.getListwd()!=null){
+                                ct.getListwd().add(c);
+                            }else{
+                                listwd.add(c);
+                                ct.setListwd(listwd);
+                            }
+                    }
+                }
+
+            }
+            List<Chat> taskList1 = taskList;
+            redisUtil.set(sendUserno + "a", taskList);
+        }if (sessionPool.get(sendUserno) != null) {
+            String msg=sendMessage;
+            sessionPool.get(sendUserno).getAsyncRemote().sendText(msg);
+        }
+    }
+
     public void sendToUser(String message) {
         String sendUserno = message.split("[|]")[1];
         String sendMessage = message.split("[|]")[0];
         String userid=message.split("[|]")[2];
+        String date=message.split("[|]")[3];
         List<Chat>list=new ArrayList<>();
         Chat chat=new Chat();
-        if (redisUtil.hasKey(sendUserno+userid)){
+        String key="";
+        if (!redisUtil.hasKey(sendUserno+userid)&&!redisUtil.hasKey(userid+sendUserno)){
             chat.setUserid(userid);
             chat.setCenter(sendMessage);
+            chat.setDate(date);
             list.add(chat);
+
             redisUtil.set(sendUserno+userid,list);
+        }else{
+            List<Chat> taskList =null;
+            if (redisUtil.hasKey(sendUserno+userid)){
+                taskList=(ArrayList<Chat>)redisUtil.get(sendUserno+userid);
+                key=sendUserno+userid;
+            }else {
+                taskList=(ArrayList<Chat>)redisUtil.get(userid+sendUserno);
+                key=userid+sendUserno;
+            }
+            chat.setUserid(userid);
+            chat.setDate(date);
+            chat.setCenter(sendMessage);
+            taskList.add(chat);
+            redisUtil.set(key,taskList);
         }
 
         try {
             if (sessionPool.get(sendUserno) != null) {
-                sessionPool.get(sendUserno).getAsyncRemote().sendText(sendMessage);
+                String msg=sendMessage+"|"+date;
+                sessionPool.get(sendUserno).getAsyncRemote().sendText(msg);
             } else {
                 System.out.println("当前用户不在线");
             }
@@ -156,13 +273,9 @@ public class WebSocket {
         for (WebSocket webSocket : webSockets) {
             webSocket.pushMessage(message);
         }*/
-        if (webSockets.size()>=2){
-            sendToUser(message);
-        }else {
-            for (WebSocket webSocket : webSockets) {
-                webSocket.pushMessage(message);
-            }
-        }
+
+        sendUser(message);
+
     }
 
     /**
@@ -204,5 +317,19 @@ public class WebSocket {
     }
 
 
+    public Session session(String token){
+        return  sessionPool.get(token);
+    }
+
+
+    public static boolean useLoop(List<Chat> arr, String targetValue) {
+        for(Chat s: arr){
+            if(s.getUserid().equals(targetValue)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 
 }

+ 87 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/AES.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.system.util;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.AlgorithmParameters;
+import java.security.Key;
+import java.security.Security;
+
+/**
+ * @author xiaoqiang
+ * @Description 参考博客找不到了--------------
+ * @date 2019/5/7 15:44
+ */
+public class AES {
+
+    // 算法名
+    public static final String KEY_NAME = "AES";
+    // 加解密算法/模式/填充方式
+    // ECB模式只用密钥即可对数据进行加密解密,CBC模式需要添加一个iv
+    public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";
+
+    /**
+     * 微信 数据解密<br/>
+     * 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充<br/>
+     * 对称解密的目标密文:encrypted=Base64_Decode(encryptData)<br/>
+     * 对称解密秘钥:key = Base64_Decode(session_key),aeskey是16字节<br/>
+     * 对称解密算法初始向量:iv = Base64_Decode(iv),同样是16字节<br/>
+     *
+     * @param encrypted 目标密文
+     * @param session_key 会话ID
+     * @param iv 加密算法的初始向量
+     */
+    public static JSONObject wxDecrypt(String encrypted, String session_key, String iv) {
+        String json = null;
+        byte[] encrypted64 = Base64.decodeBase64(encrypted);
+        byte[] key64 = Base64.decodeBase64(session_key);
+        byte[] iv64 = Base64.decodeBase64(iv);
+        byte[] data;
+        try {
+            init();
+            json = new String(decrypt(encrypted64, key64, generateIV(iv64)));
+        } catch (Exception e) {
+            System.out.println("解密微信手机号失败:" + e.getMessage());
+        }
+        return JSONUtil.parseObj(json);
+    }
+
+    /**
+     * 初始化密钥
+     */
+    public static void init() throws Exception {
+        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
+        KeyGenerator.getInstance(KEY_NAME).init(128);
+    }
+
+    /**
+     * 生成iv
+     */
+    public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
+        // iv 为一个 16 字节的数组,这里采用和 iOS 端一样的构造方法,数据全为0
+        // Arrays.fill(iv, (byte) 0x00);
+        AlgorithmParameters params = AlgorithmParameters.getInstance(KEY_NAME);
+        params.init(new IvParameterSpec(iv));
+        return params;
+    }
+
+    /**
+     * 生成解密
+     */
+    public static byte[] decrypt(byte[] encryptedData, byte[] keyBytes, AlgorithmParameters iv)
+            throws Exception {
+        Key key = new SecretKeySpec(keyBytes, KEY_NAME);
+        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
+        // 设置为解密模式
+        cipher.init(Cipher.DECRYPT_MODE, key, iv);
+        return cipher.doFinal(encryptedData);
+    }
+
+
+
+}

+ 78 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/RestTemplateUtil.java

@@ -0,0 +1,78 @@
+package org.jeecg.modules.system.util;
+
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+
+/**
+ * @author xiaoqiang
+ * @Description RestTemplate 工具类
+ * @date 2019/4/22 11:10
+ */
+@Component
+public class RestTemplateUtil {
+    @Autowired
+    private RestTemplate restTemplate;
+
+
+    /**
+     * DoGet方法
+     * @param url 请求地址
+     * @return 请求结果
+     */
+    public ResponseEntity<String> doGet(String url) {
+        return restTemplate.getForEntity(url, String.class);
+    }
+
+    /**
+     * DoGet方法
+     * @param url 请求地址
+     * @param responseType 返回类型
+     * @return 请求结果
+     */
+    public ResponseEntity<T> doGet(String url, Class<T> responseType) {
+        return restTemplate.getForEntity(url, responseType);
+    }
+
+    /**
+     * DoPost方法
+     * @param url 请求地址
+     * @param httpHeaders 请求头
+     * @param uriVariables 请求参数
+     * @param responseType 返回类型
+     * @return
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public ResponseEntity<T> doPost(String url, HttpHeaders httpHeaders, Map<String, ?> uriVariables, Class<T> responseType) {
+        /* 请求头 */
+        MultiValueMap headers = null;
+        if(httpHeaders == null) {
+            headers = new HttpHeaders();
+        }else {
+            headers = httpHeaders;
+        }
+        /* 请求内容封装成HttpEntity */
+        HttpEntity httpEntity= new HttpEntity(uriVariables, headers);
+        return restTemplate.postForEntity(url, httpEntity, responseType);
+    }
+
+    /**
+     * DoPost方法
+     * @param url 请求地址
+     * @param params 请求参数
+     * @param responseType 返回类型
+     * @return
+     */
+    public ResponseEntity<T> doPost(String url, String params, Class<T> responseType) {
+        /* 请求内容封装成HttpEntity */
+        HttpEntity<String> httpEntity= new HttpEntity<String>(params);
+        return restTemplate.postForEntity(url, httpEntity, responseType);
+    }
+}

+ 49 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/WeixinXCX.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.system.vo;
+
+public class WeixinXCX {
+    private  String code;
+    private  String encryptedData;
+    private  String iv;
+    private  String session_key;
+    private  String openid;
+
+    public String getSession_key() {
+        return session_key;
+    }
+
+    public void setSession_key(String session_key) {
+        this.session_key = session_key;
+    }
+
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getEncryptedData() {
+        return encryptedData;
+    }
+
+    public void setEncryptedData(String encryptedData) {
+        this.encryptedData = encryptedData;
+    }
+
+    public String getIv() {
+        return iv;
+    }
+
+    public void setIv(String iv) {
+        this.iv = iv;
+    }
+}

BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/Center.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/Chat.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/ChatController.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/DeptUser.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/UserChat.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/websocket/WebSocket.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/controller/LoginController$1.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/controller/LoginController.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/controller/SysUserController.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/SysUserMapper.class


+ 22 - 16
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml

@@ -150,8 +150,14 @@
 	<delete id="deleteLogicDeleted">
 		DELETE FROM sys_user WHERE del_flag = 1 AND id IN (${userIds})
 	</delete>
+	<delete id="delUserByUserID">
+		delete from sys_user_depart where 1=1
+	<if test="userid!=null and ''!=userid">
+		and user_id=#{userid}
+	</if>
+	</delete>
 
-    <!-- 更新空字符串为null -->
+	<!-- 更新空字符串为null -->
     <update id="updateNullByEmptyString">
         UPDATE sys_user SET ${fieldName} = NULL WHERE ${fieldName} = ''
     </update>
@@ -191,11 +197,11 @@
 	<select id="departCount" resultType="org.jeecg.modules.system.entity.SysUser">
 			select a.id as 'departId',b.orgCodeTxt as 'orgCodeTxt',b.count as 'count' from sys_depart a
 		right join (
-		select d.depart_name as 'orgCodeTxt' ,count(ud.user_id) as 'count' from sys_depart d
+		select d.depart_name as 'orgCodeTxt' ,count(s.id) as 'count' from sys_depart d
 		left join sys_user_depart ud
 		on d.id=ud.dep_id
 		left join sys_user s
-		on ud.user_id=s.id where 1=1
+		on ud.user_id=s.id and s.del_flag=0 where d.del_flag=0
 		<if test="departName!=null and ''!=departName">
 			and d.depart_name like concat(concat('%',#{departName}),'%')
 		</if>
@@ -210,22 +216,14 @@ on a.depart_name=b.orgCodeTxt
 		select id as 'id',depart_name as 'departName' from sys_depart where parent_id=''
 	</select>
 	<select id="departUser" resultType="org.jeecg.modules.system.entity.SysUser">
-		select d.depart_name as'orgCodeTxt',
-		s.id as'id',s.username as'username',s.realname as'realname',
-		p.name as'post',s.avatar as 'avatar'
-		from sys_user_depart ud
-		left join sys_depart d
-		on d.id = ud.dep_id
-		left join sys_user s
-		on ud.user_id=s.id
-		left join sys_position p
-		on s.post=p.code
-		where 1=1
+		select c.depart_name as'orgCodeTxt', a.id as'id',a.username as'username',a.realname as'realname', d.name as'post',a.avatar as 'avatar'
+		from sys_user a left join  sys_user_depart  b on a.id=b.user_id left join sys_depart c on b.dep_id=c.id  left
+		join sys_position d on a.post=d.code where a.del_flag='0' and   c.del_flag='0'
 		<if test="departId!=null and ''!=departId">
-		 and 	d.id=#{departId}
+			and 	c.id=#{departId}
 		</if>
 		<if test="name!=null and ''!=name">
-		 and	s.realname like concat(concat('%',#{name}),'%')
+			and	a.realname like concat(concat('%',#{name}),'%')
 		</if>
 	</select>
 	<select id="queryTeamUser" resultType="org.jeecg.modules.system.entity.SysUser">
@@ -267,4 +265,12 @@ on a.depart_name=b.orgCodeTxt
 			 and  user_id=#{userid}
 		 </if>
 	</select>
+	<select id="getOnes" resultType="org.jeecg.modules.system.entity.SysUser">
+		SELECT id,username,realname,password,salt,avatar,birthday,sex,email,phone,org_code,status,del_flag,work_no,post,telephone,create_by,create_time,update_by,update_time,activiti_sync,user_identity,depart_ids,rel_tenant_ids,client_id,eg_name,birth_date,entry_date,urgent_name,urgent_phone
+		FROM sys_user
+		WHERE 1=1
+		<if test="id!=null and ''!=id">
+		 and 	id=#{id}
+		</if>
+	</select>
 </mapper>

BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/ISysPositionService.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/ISysUserService.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/SysUserServiceImpl.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$1.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$2.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$3.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$4.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$5.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$6.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$7.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$8.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl$9.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/service/impl/WeixinUserImpl.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/AES.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/RestTemplateUtil.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData$1.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData$2.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData$3.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/util/UrlData.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/vo/WeixinDepart.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/vo/WeixinUser.class


BIN=BIN
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/vo/WeixinXCX.class


BIN=BIN
jeecg-boot-module-system/target/jeecg-boot-module-system-2.4.2.jar


BIN=BIN
jeecg-boot-module-system/target/jeecg-boot-module-system-2.4.2.jar.original


+ 4 - 0
jeecg-boot-module-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -65,6 +65,7 @@ D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\SysGatewayRouteServiceImpl.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\SysAnnouncementServiceImpl.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\SysUserRoleServiceImpl.java
+D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\message\websocket\Chat.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\controller\SysRoleController.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\rule\CategoryCodeRule.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\quartz\controller\QuartzJobController.java
@@ -167,6 +168,7 @@ D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\model\DepartIdModel.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\ISysRolePermissionService.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\ISysDataSourceService.java
+D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\util\AES.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\WeixinUserImpl.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\controller\SysFillRuleController.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\entity\SysPosition.java
@@ -175,6 +177,7 @@ D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\model\DuplicateCheckVo.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\vo\WeixinApproval.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\cas\controller\CasClientController.java
+D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\vo\WeixinXCX.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\SysDepartRolePermissionServiceImpl.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\ImportFileServiceImpl.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\oss\controller\OSSFileController.java
@@ -182,6 +185,7 @@ D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\quartz\job\SampleJob.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\message\entity\MsgParams.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\impl\SysCategoryServiceImpl.java
+D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\util\RestTemplateUtil.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\service\ISysDepartRoleUserService.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\mapper\SysTenantMapper.java
 D:\porject\GEKE_SERVICE\jeecg-boot-module-system\src\main\java\org\jeecg\modules\system\entity\SysRole.java