9 Commits 9192ee55e7 ... 7918e6d9b8

Autore SHA1 Messaggio Data
  zhaojinyu 7918e6d9b8 操作日志优化获取操作地址,token令牌添加操作系统、浏览器类型字段并优化在线用户接口 6 mesi fa
  gez 33c3b1ee79 Merge branch 'fu-dev' of uskycloud/usky-cloud into master 6 mesi fa
  fuyuchuan 0bbd7d22b4 问题代码修复 6 mesi fa
  fuyuchuan fd47a57ea1 Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 6 mesi fa
  fuyuchuan 7efb63ebcf OA消息模版添加字段 6 mesi fa
  fuyuchuan ae96a7683a 微信消息模板代码优化调整 6 mesi fa
  gez 7dcda75bb0 Merge branch 'system-zjy' of uskycloud/usky-cloud into master 7 mesi fa
  fuyuchuan 9876bcc5c8 修复登录消息发送失败问题 7 mesi fa
  fuyuchuan e2c56a4952 Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 7 mesi fa
17 ha cambiato i file con 120 aggiunte e 33 eliminazioni
  1. 19 5
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/MceRequestVO.java
  2. 7 0
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysOperLogVO.java
  3. 0 6
      base-modules/service-system/service-system-biz/pom.xml
  4. 11 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceContentServiceImpl.java
  5. 15 10
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceMbuserServiceImpl.java
  6. 7 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceReceiveServiceImpl.java
  7. 1 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysNoticeServiceImpl.java
  8. 2 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserOnlineServiceImpl.java
  9. 5 3
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/AsyncFactory.java
  10. 16 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SendWeChatMessageRequestVO.java
  11. 4 0
      usky-common/usky-common-core/src/main/java/com/usky/common/core/constants/SecurityConstants.java
  12. 9 0
      usky-common/usky-common-log/pom.xml
  13. 3 5
      usky-common/usky-common-log/src/main/java/com/usky/common/log/aspect/AddressUtils.java
  14. 3 0
      usky-common/usky-common-log/src/main/java/com/usky/common/log/aspect/LogAspect.java
  15. 1 1
      usky-common/usky-common-log/src/main/java/com/usky/common/log/service/WjConfig.java
  16. 6 0
      usky-common/usky-common-security/pom.xml
  17. 11 0
      usky-common/usky-common-security/src/main/java/com/usky/common/security/service/TokenService.java

+ 19 - 5
base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/MceRequestVO.java

@@ -37,7 +37,7 @@ public class MceRequestVO  extends BaseEntity {
     @NotBlank(message = "消息内容 infoContent 不能为空!")
     private String infoContent;
 
-    /** 消息发布人
+    /** 用户名称
      * 登录账号 loginAccount
      * */
     @NotBlank(message = "消息发布人 userName 不能为空!")
@@ -54,23 +54,37 @@ public class MceRequestVO  extends BaseEntity {
     /**
      * ip地址
      */
-    String ipAddress;
+    private String ipAddress;
 
     /**
      * 登录地址
      */
-    String loginAddress;
+    private String loginAddress;
 
     /**
      * 登录方式
      */
-    String loginType;
+    private String loginType;
 
     /**
      * 审批结果
      */
-    String approvalResult;
+    private String approvalResult;
 
+    /**
+     * 流程名称
+     */
+    private String processName;
+
+    /**
+     * 审批节点
+     */
+    private String approvalNode;
+
+    /**
+     * 真实姓名
+     */
+    private String realName;
 
     @Override
     public String toString() {

+ 7 - 0
base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysOperLogVO.java

@@ -47,6 +47,9 @@ public class SysOperLogVO extends BaseEntity
     /** 操作地址 */
     private String operIp;
 
+    /** 操作地点 */
+    private String operLocation;
+
     /** 请求参数 */
     private String operParam;
 
@@ -195,6 +198,10 @@ public class SysOperLogVO extends BaseEntity
         this.operIp = operIp;
     }
 
+    public String getOperLocation() { return operLocation; }
+
+    public void setOperLocation(String operLocation) { this.operLocation = operLocation; }
+
     public String getOperParam()
     {
         return operParam;

+ 0 - 6
base-modules/service-system/service-system-biz/pom.xml

@@ -59,12 +59,6 @@
             <artifactId>hutool-all</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20210307</version>
-        </dependency>
-
         <!-- 监控服务器资源状态 -->
         <dependency>
             <groupId>com.github.oshi</groupId>

+ 11 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceContentServiceImpl.java

@@ -36,6 +36,7 @@ public class MceContentServiceImpl extends AbstractCrudService<MceContentMapper,
     private String appUrl;
 
     // 异步多线程调用
+    @Override
     @Async
     public void sendApp(JSONObject mceReceiveVO, String cids, Integer mceReceiveId, Integer sendType) {
         if (sendType.equals(0)) {
@@ -62,6 +63,7 @@ public class MceContentServiceImpl extends AbstractCrudService<MceContentMapper,
         }
     }
 
+    @Override
     @Async
     public void sendAppNew(MceRequestVO mceReceiveVO, String cids, Integer mceReceiveId, Integer sendType) {
         if (sendType.equals(0)) {
@@ -99,6 +101,15 @@ public class MceContentServiceImpl extends AbstractCrudService<MceContentMapper,
             if (StringUtils.isNotEmpty(mceReceiveVO.getApprovalResult())) {
                 sendWeChatMessageRequestVO.setApprovalResult(mceReceiveVO.getApprovalResult());
             }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getProcessName())) {
+                sendWeChatMessageRequestVO.setProcessName(mceReceiveVO.getProcessName());
+            }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getApprovalNode())) {
+                sendWeChatMessageRequestVO.setApprovalNode(mceReceiveVO.getApprovalNode());
+            }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getRealName())) {
+                sendWeChatMessageRequestVO.setRealName(mceReceiveVO.getRealName());
+            }
             mceMbuserService.sendWeChatMessage(sendWeChatMessageRequestVO);
         }
     }

+ 15 - 10
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceMbuserServiceImpl.java

@@ -117,7 +117,7 @@ public class MceMbuserServiceImpl extends AbstractCrudService<MceMbuserMapper, M
                 // 登录账号 userName
                 data.put("thing6", new TemplateData(requestVO.getUserName(), "#173177"));
                 // 登录IP
-                data.put("character_string8", new TemplateData(requestVO.getLoginAddress(), "#173177"));
+                data.put("character_string8", new TemplateData(requestVO.getIpAddress(), "#173177"));
                 // 登录地点
                 data.put("thing9", new TemplateData(requestVO.getLoginAddress(), "#173177"));
                 // 登录方式
@@ -126,14 +126,19 @@ public class MceMbuserServiceImpl extends AbstractCrudService<MceMbuserMapper, M
                 templateId = constant.WE_CHAT_LOGIN_TEMPLATE_ID;
                 break;
 
+            /* 通知公告&工作报告通知(工单已完成通知)
+             * 工单标题{{thing9.DATA}}
+             * 发起人{{thing8.DATA}}
+             * 完成时间{{time12.DATA}}
+             **/
             case "1":
+                data.put("thing9", new TemplateData("通知公告-" + requestVO.getInfoContent(), "#173177"));
+                data.put("thing8", new TemplateData(requestVO.getUserName(), "#173177"));
+                data.put("time12", new TemplateData(nowTime, "#173177"));
+                templateId = constant.WE_CHAT_WORK_TEMPLATE_ID;
+                break;
             case "5":
-                /* 通知公告&工作报告通知(工单已完成通知)
-                 * 工单标题{{thing9.DATA}}
-                 * 发起人{{thing8.DATA}}
-                 * 完成时间{{time12.DATA}}
-                 **/
-                data.put("thing9", new TemplateData(requestVO.getInfoContent(), "#173177"));
+                data.put("thing9", new TemplateData("报告提醒-" + requestVO.getInfoContent(), "#173177"));
                 data.put("thing8", new TemplateData(requestVO.getUserName(), "#173177"));
                 data.put("time12", new TemplateData(nowTime, "#173177"));
                 // 设置公众号模板消息ID
@@ -148,9 +153,9 @@ public class MceMbuserServiceImpl extends AbstractCrudService<MceMbuserMapper, M
                  * 发起时间{{time10.DATA}}
                  * 审批结果{{const21.DATA}}
                  **/
-                data.put("thing7", new TemplateData(requestVO.getInfoTitle(), "#173177"));
-                data.put("thing8", new TemplateData(requestVO.getInfoContent(), "#173177"));
-                data.put("thing13", new TemplateData(requestVO.getUserName(), "#173177"));
+                data.put("thing7", new TemplateData(requestVO.getProcessName(), "#173177"));
+                data.put("thing8", new TemplateData(requestVO.getApprovalNode(), "#173177"));
+                data.put("thing13", new TemplateData(requestVO.getRealName(), "#173177"));
                 data.put("time10", new TemplateData(nowTime, "#173177"));
                 data.put("const21", new TemplateData(requestVO.getApprovalResult(), "#173177"));
 

+ 7 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceReceiveServiceImpl.java

@@ -253,11 +253,14 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
     @Override
     public void addMceReceive(MceRequestVO mceRequestVO) {
 
+        System.out.println(mceRequestVO.toString());
+
         // 登录成功 infoType 为 0,只给登录用户发送公众号消息
-        if ("0".equals(mceRequestVO.getInfoType())){
+        if ("0".equals(mceRequestVO.getInfoType())) {
             List<MceMbuser> mbuserList = mceMbuserService.list(Wrappers.lambdaQuery(MceMbuser.class).in(MceMbuser::getUserId, mceRequestVO.getUserIds()));
             String openid = mbuserList.get(0).getOpenid();
             mceContentService.sendAppNew(mceRequestVO, openid, 0, 1);
+            return;
         }
 
         // 如果 infoTypeName 为空,则从字典数据中获取
@@ -688,6 +691,9 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
         mceRequestVO.setId((Integer) json.get("id"));
         mceRequestVO.setUserName(json.get("userName").toString());
         mceRequestVO.setApprovalResult(json.get("approvalResult").toString());
+        mceRequestVO.setProcessName(json.get("processName").toString());
+        mceRequestVO.setApprovalNode(json.get("approvalNode").toString());
+        mceRequestVO.setRealName(json.get("realName").toString());
         addMceReceive(mceRequestVO);
     }
 }

+ 1 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysNoticeServiceImpl.java

@@ -108,7 +108,7 @@ public class SysNoticeServiceImpl extends AbstractCrudService<SysNoticeMapper, S
         mceRequestVO.setUserName(userName);
         mceRequestVO.setUserIds(userIds);
         try {
-            //mceReceiveService.add(jsonObject.toString());
+            // mceReceiveService.add(jsonObject.toString());
             mceReceiveService.addMceReceive(mceRequestVO);
         } catch (Exception e) {
             log.error(String.format("公告:%d,消息发送失败:%s", id, e.getMessage()));

+ 2 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserOnlineServiceImpl.java

@@ -90,6 +90,8 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService
         sysUserOnline.setIpaddr(user.getIpaddr());
         sysUserOnline.setLoginTime(user.getLoginTime());
         sysUserOnline.setExpireTime(user.getExpireTime());
+        sysUserOnline.setOs(user.getOs());
+        sysUserOnline.setBrowser(user.getBrowser());
         return sysUserOnline;
     }
 }

+ 5 - 3
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/AsyncFactory.java

@@ -8,6 +8,7 @@ import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.ip.IpUtils;
 import com.usky.common.core.util.SpringContextUtils;
+import com.usky.common.log.aspect.AddressUtils;
 import com.usky.system.domain.MceRequestVO;
 import com.usky.system.domain.SysLogininfor;
 import com.usky.system.domain.SysUser;
@@ -79,15 +80,16 @@ public class AsyncFactory
         // 日志状态
         if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
             logininfor.setStatus(String.valueOf(Constants.LOGIN_SUCCESS_STATUS)); // 使用String.valueOf进行转换
-
-            // 微信公众号推送登录消息
-            sendWeChatMessage(logininfor);
         } else if (Constants.LOGIN_FAIL.equals(status)) {
             logininfor.setStatus(String.valueOf(Constants.LOGIN_FAIL_STATUS)); // 使用String.valueOf进行转换
         }
         sys_user_logger.info("log is {}", JSON.toJSONString(logininfor));
         // 插入数据
         SpringContextUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor);
+        if (Constants.LOGIN_SUCCESS.equals(logininfor.getStatus())){
+            // 微信公众号推送登录消息
+            sendWeChatMessage(logininfor);
+        }
     }
 
     public static String getBlock(Object msg)

+ 16 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SendWeChatMessageRequestVO.java

@@ -50,7 +50,7 @@ public class SendWeChatMessageRequestVO {
     String loginType;
 
     /**
-     * 发送人
+     * 用户名
      * 登录账号
      */
     String userName;
@@ -59,4 +59,19 @@ public class SendWeChatMessageRequestVO {
      * 审批结果
      */
     String approvalResult;
+
+    /**
+     * 流程名称
+     */
+    String processName;
+
+    /**
+     * 审批节点
+     */
+    String approvalNode;
+
+    /**
+     * 登录人真实姓名
+     */
+    String realName;
 }

+ 4 - 0
usky-common/usky-common-core/src/main/java/com/usky/common/core/constants/SecurityConstants.java

@@ -43,4 +43,8 @@ public class SecurityConstants
     public static final String LOGIN_USER = "login_user";
 
     public static final String DETAILS_TENANT_ID = "";
+
+    public static final String DETAILS_OS =  "osInfo";
+
+    public static final String DETAILS_BROWSER = "browserInfo";
 }

+ 9 - 0
usky-common/usky-common-log/pom.xml

@@ -24,6 +24,15 @@
             <groupId>com.usky</groupId>
             <artifactId>usky-common-security</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20210307</version>
+        </dependency>
 
     </dependencies>
 </project>

+ 3 - 5
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/AddressUtils.java → usky-common/usky-common-log/src/main/java/com/usky/common/log/aspect/AddressUtils.java

@@ -1,14 +1,12 @@
-package com.usky.system.service.util;
+package com.usky.common.log.aspect;
 
 import cn.hutool.http.HttpUtil;
-import com.alibaba.nacos.shaded.com.google.common.base.Strings;
 import com.ruoyi.common.core.utils.ip.IpUtils;
-import com.usky.system.domain.WjConfig;
+import com.usky.common.log.service.WjConfig;
 import org.json.JSONException;
+import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
-import org.json.JSONObject;
 
 
 /*

+ 3 - 0
usky-common/usky-common-log/src/main/java/com/usky/common/log/aspect/LogAspect.java

@@ -103,6 +103,9 @@ public class LogAspect {
             operLog.setConsumingTime(consumingTime); // 存储耗时
             operLog.setConsumingTimeWithUnit(consumingTimeWithUnit); // 存储带有单位的字符串
 
+            String operLocation = AddressUtils.getRealAddressByIP(ip);
+            operLog.setOperLocation(operLocation);
+
             // 保存数据库
             asyncLogService.saveSysLog(operLog);
         } catch (Exception exp) {

+ 1 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/WjConfig.java → usky-common/usky-common-log/src/main/java/com/usky/common/log/service/WjConfig.java

@@ -1,4 +1,4 @@
-package com.usky.system.domain;
+package com.usky.common.log.service;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;

+ 6 - 0
usky-common/usky-common-security/pom.xml

@@ -36,6 +36,12 @@
             <groupId>com.usky</groupId>
             <artifactId>usky-common-redis</artifactId>
         </dependency>
+        <dependency>
+            <groupId>eu.bitwalker</groupId>
+            <artifactId>UserAgentUtils</artifactId>
+            <version>1.21</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 11 - 0
usky-common/usky-common-security/src/main/java/com/usky/common/security/service/TokenService.java

@@ -6,6 +6,7 @@ import com.usky.common.core.util.*;
 import com.usky.common.redis.core.RedisHelper;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.system.model.LoginUser;
+import eu.bitwalker.useragentutils.UserAgent;
 import org.springframework.cloud.commons.util.IdUtils;
 import org.springframework.stereotype.Component;
 
@@ -50,6 +51,14 @@ public class TokenService {
         loginUser.setUserid(userId);
         loginUser.setUsername(userName);
         loginUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
+        // 获取操作系统信息
+        String userAgentString = ServletUtils.getRequest().getHeader("User-Agent");
+        UserAgent userAgent = UserAgent.parseUserAgentString(userAgentString);
+        String osInfo = userAgent.getOperatingSystem().getName();
+        String browserInfo = userAgent.getBrowser().getName();
+        loginUser.setOs(osInfo);
+        loginUser.setBrowser(browserInfo);
+
         refreshToken(loginUser);
 
         // Jwt存储信息
@@ -58,6 +67,8 @@ public class TokenService {
         claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
         claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
         claimsMap.put(SecurityConstants.DETAILS_TENANT_ID, tenantId);
+        claimsMap.put(SecurityConstants.DETAILS_OS, osInfo);
+        claimsMap.put(SecurityConstants.DETAILS_BROWSER, browserInfo);
 
         // 接口返回信息
         Map<String, Object> rspMap = new HashMap<String, Object>();