57 Commits 8d97d9448f ... 9192ee55e7

Autor SHA1 Mensagem Data
  zhaojinyu 9192ee55e7 修改登录ip获取方式,处理出现空指针问题 3 semanas atrás
  gez c8592ecc0d Merge branch 'fu-dev' of uskycloud/usky-cloud into master 3 semanas atrás
  fuyuchuan a07e84e5d4 消息中心新增OA模板以;通知公告和工作报告模板更换 3 semanas atrás
  gez 9bf5704b4c Merge branch 'system-zjy' of uskycloud/usky-cloud into master 3 semanas atrás
  fuyuchuan d3593c4442 Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 3 semanas atrás
  fuyuchuan 23d4f354a7 修复发布人为空问题&优化开放无token调用消息中心接口代码 3 semanas atrás
  hanzhengyi c910b854c6 Merge branch 'fu-dev' of uskycloud/usky-cloud into master 3 semanas atrás
  fuyuchuan 16b4388cd9 Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 3 semanas atrás
  hanzhengyi 30f2802d72 Merge branch 'system-zyj' of uskycloud/usky-cloud into master 3 semanas atrás
  fuyuchuan 640f2f0b56 消息中心新增无token接口给OA服务定时同步消息调用 4 semanas atrás
  james 3a4762ad9e 优化新增保存平台账户信息接口,当为租户管理员时,增加顶级部门的默认代入 4 semanas atrás
  fuyuchuan f8b1c812ce 消息类型大类代码删除 4 semanas atrás
  gez ff28eebcec Merge branch 'han' of uskycloud/usky-cloud into master 1 mês atrás
  gez 2a16aa5f93 Merge branch 'system-zyj' of uskycloud/usky-cloud into master 1 mês atrás
  gez 5df87e3a94 Merge branch 'fu-dev' of uskycloud/usky-cloud into master 1 mês atrás
  james 738e61cc1b 优化租户管理-租户单位配置-克隆接口,增加循环处理克隆当前租户当前用户对应的多个用户角色和租户用户角色的逻辑 1 mês atrás
  james 1166b34f0f 1、优化租户管理-租户单位配置-克隆接口,增加循环处理多个用户角色和租户用户角色的逻辑; 1 mês atrás
  fuyuchuan affc62119d 消息中心代码回退,修复消息中心租户未隔离问题 1 mês atrás
  james 36c0f53f77 优化租户管理-新增接口,将PC租户管理-应用编辑接口新增租户与默认应用添加到租户和应用关联表逻辑迁移过来1 1 mês atrás
  james 2cc09cb8d6 优化租户管理-新增接口,将PC租户管理-应用编辑接口新增租户与默认应用添加到租户和应用关联表逻辑迁移过来 1 mês atrás
  hanzhengyi cfff83b7fc Merge branch 'han' 1 mês atrás
  gez 926edd7563 Merge branch 'fu-dev' of uskycloud/usky-cloud into master 1 mês atrás
  gez 6646e463d9 Merge branch 'system-zyj' of uskycloud/usky-cloud into master 1 mês atrás
  fuyuchuan 3874765a81 修复切换租户后分配角色后菜单接口数据异常问题 1 mês atrás
  fuyuchuan 0132a9aa0f Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 1 mês atrás
  hanzhengyi bd53c4f363 解决冲突 1 mês atrás
  hanzhengyi 868377a9de 应用管理增加排序字段,应用菜单增加排序返回值 1 mês atrás
  james 536d39b517 Merge branch 'system-zyj' into system-165 1 mês atrás
  james 5a959c53c0 与界面对接,修改系统角色表createtime字段 1 mês atrás
  james 390b0ad0a0 Merge branch 'system-zyj' into system-165 1 mês atrás
  james e4cea614cc 优化租户管理-租户单位配置-克隆和租户管理-租户单位配置-删除两个接口,增加和删除角色表中该租户的角色信息和用户角色租户表中对应当前用户Id租户Id对应信息 1 mês atrás
  james 5e3413d250 Merge branch 'system-zyj' into system-165 1 mês atrás
  james e92505e639 优化优化帮助中心-栏目管理列表接口,增加系统管理员查询逻辑返回数据 1 mês atrás
  james 8452a2e849 Merge branch 'system-zyj' into system-165 1 mês atrás
  james deb2080944 优化帮助中心-栏目管理列表和帮助中心-栏目管理列表白名单两个接口,修改栏目名称字段模糊查询的逻辑解决查询值为空的情况 1 mês atrás
  james 18a609f7e0 Merge branch 'system-zyj' into system-165 1 mês atrás
  james ddf158589d 优化帮助中心-栏目管理列表和帮助中心-栏目管理列表白名单接口,增加栏目名称字段模糊查询; 1 mês atrás
  james ee06abc80a Merge branch 'system-zyj' into system-165 1 mês atrás
  james b3b213814c 1、优化帮助中心-栏目管理新增和修改、帮助中心-栏目管理列表、帮助中心-栏目管理列表白名单接口,增加栏目名称、栏目排序和关联菜单的三个字段展示,修改接口文档,测试接口; 1 mês atrás
  fuyuchuan 3582cd3ba3 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan cf4b57af69 巡检人员下拉选择异常修复 2 meses atrás
  fuyuchuan e315bfbecf Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan 6af1464d0d 我的消息分页接口-消息类型整合 2 meses atrás
  fuyuchuan ce7d77921e Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan 8309e431ec 消息分页接口添加倒叙 2 meses atrás
  fuyuchuan 4c26b9b8c7 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan 1b8ebb0164 新增小铃铛消息分页接口 2 meses atrás
  hanzhengyi 9e3a646c72 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan 3ae3342bc5 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan acb997c31a Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  hanzhengyi 12322bd205 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 2 meses atrás
  fuyuchuan 0e4cc6773b Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 3 meses atrás
  fuyuchuan 6c45e90edc Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 3 meses atrás
  fuyuchuan e6e682ef17 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 3 meses atrás
  fuyuchuan 3a6fcc6e1e Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 3 meses atrás
  fuyuchuan acdd4458ef Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 3 meses atrás
  fuyuchuan 7fc81271b0 Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165 3 meses atrás
33 arquivos alterados com 712 adições e 158 exclusões
  1. 24 1
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/MceRequestVO.java
  2. 7 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/constant/constant.java
  3. 23 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/MceReceiveController.java
  4. 5 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/HceArticle.java
  5. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPlatform.java
  6. 4 5
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/HceCategoryMapper.java
  7. 3 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysMenuMapper.java
  8. 7 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysTenantMapper.java
  9. 1 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysMenuService.java
  10. 9 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/MceReceiveService.java
  11. 39 18
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysLoginService.java
  12. 2 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/HceArticleServiceImpl.java
  13. 80 30
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/HceCategoryServiceImpl.java
  14. 15 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceContentServiceImpl.java
  15. 96 29
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceMbuserServiceImpl.java
  16. 88 5
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceReceiveServiceImpl.java
  17. 14 3
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysMenuServiceImpl.java
  18. 1 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPlatformServiceImpl.java
  19. 51 7
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysTenantServiceImpl.java
  20. 10 14
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java
  21. 46 5
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/AsyncFactory.java
  22. 10 17
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/AsyncManager.java
  23. 10 2
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/HceCategoryListVO.java
  24. 56 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/MceReceiveResponseVO.java
  25. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformMenuVo.java
  26. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformRouterVo.java
  27. 7 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/RouterVo.java
  28. 26 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SendWeChatMessageRequestVO.java
  29. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPlatformVo.java
  30. 25 9
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/HceCategoryMapper.xml
  31. 2 1
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysMenuMapper.xml
  32. 1 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPlatformMapper.xml
  33. 30 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysTenantMapper.xml

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

@@ -37,7 +37,9 @@ public class MceRequestVO  extends BaseEntity {
     @NotBlank(message = "消息内容 infoContent 不能为空!")
     private String infoContent;
 
-    /** 消息发布人  */
+    /** 消息发布人
+     * 登录账号 loginAccount
+     * */
     @NotBlank(message = "消息发布人 userName 不能为空!")
     private String userName;
 
@@ -49,6 +51,27 @@ public class MceRequestVO  extends BaseEntity {
     @NotNull(message = "消息接收人 userIds 不能为空!")
     private List<Long> userIds;
 
+    /**
+     * ip地址
+     */
+    String ipAddress;
+
+    /**
+     * 登录地址
+     */
+    String loginAddress;
+
+    /**
+     * 登录方式
+     */
+    String loginType;
+
+    /**
+     * 审批结果
+     */
+    String approvalResult;
+
+
     @Override
     public String toString() {
         ObjectMapper objectMapper = new ObjectMapper();

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

@@ -17,8 +17,14 @@ public class constant {
     public static final String WE_CHAT_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
     // 微信公众号消息推送地址
     public static final String WE_CHAT_REQUEST_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";
-    // 微信公众号推送消息模板id
+    // 微信公众号推送-告警-消息模板id
     public static final String WE_CHAT_TEMPLATE_ID = "FmrNuMzgh0E8bWg1j8a2R3zTmRarHYtZ72TSzPrF9Iw";
+    // 微信公众号推送-OA-消息模板id
+    public static final String WE_CHAT_OA_TEMPLATE_ID = "RDahJYyDGpQKEn6vzdifS9u9F-vxA6FOIIDe1cUw8WU";
+    // 微信公众号推送-报告提醒(工单)-消息模板id
+    public static final String WE_CHAT_WORK_TEMPLATE_ID = "0J7pBGkXq5nCEVsc9L6HBmfmUrO4BEOk-3d5WCndWZk";
+    // 微信公众号推送-登录-消息模板id
+    public static final String WE_CHAT_LOGIN_TEMPLATE_ID = "7o6J1_0gi89RsW3sR7Q853KTaWYT7Yu-jXjLnHbcB8M";
     // 微信公众号的消息回调地址(这儿可根据业务需求自定义动作,可选)
     public static final String WE_CHAT_CUSTOMER_CALL_URL = "https://manager.usky.cn/mobile/#/pages/common/appMessage/index?type=%s&typeName=%s&id=%s";
     public static final String WE_CHAT_CUSTOMER_CALL_URL1 = "https://manager.usky.cn/mobile/#/pages/common/appMessage/index?type=%s&id=%s";

+ 23 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/MceReceiveController.java

@@ -7,6 +7,7 @@ import com.usky.common.log.annotation.Log;
 import com.usky.common.log.enums.BusinessType;
 import com.usky.system.domain.MceReceive;
 import com.usky.system.service.MceReceiveService;
+import com.usky.system.service.vo.MceReceiveResponseVO;
 import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,7 +35,7 @@ public class MceReceiveController {
     /**
      * 消息列表分页
      * @param infoTitle  消息标题
-     * @param infoType  消息标题
+     * @param infoType  消息类型
      * @param startTime  开始时间
      * @param endTime  开始时间
      * @param current      当前页
@@ -95,6 +96,16 @@ public class MceReceiveController {
         return ApiResult.success(mceReceiveService.mceReceiveStatic());
     }
 
+    /**
+     * 消息中心分页接口
+     * @return
+     */
+    @GetMapping("/getMceReceiveList")
+    public ApiResult<CommonPage<MceReceiveResponseVO>> getMceReceiveList(@RequestParam(value = "pageNumber", required = false, defaultValue = "1") Integer pageNumber,
+                                                                         @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize) {
+        return ApiResult.success(mceReceiveService.getMceReceiveResponseVOList(pageNumber, pageSize));
+    }
+
     /**
      * 已读
      * @return
@@ -116,6 +127,17 @@ public class MceReceiveController {
         return ApiResult.success();
     }
 
+    /**
+     * 消息发布-无需token
+     * @return
+     */
+    @PostMapping("/addMceNew")
+    ApiResult<Void> addNoToken(@RequestBody String mceNoToken) {
+        mceReceiveService.addNoToken(mceNoToken);
+        return ApiResult.success();
+    }
+
+
     /**
      * 删除消息及内容,并清空所有的消息接收表数据
      */

+ 5 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/HceArticle.java

@@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
-import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 帮助中心_内容管理
@@ -93,8 +94,8 @@ public class HceArticle implements Serializable {
     private Integer sortindex;
 
     /**
-     * 菜单名称
+     * 栏目名称
      */
     @TableField(exist = false)
-    private String menuName;
+    private String categoryName;
 }

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPlatform.java

@@ -51,6 +51,11 @@ public class SysPlatform implements Serializable {
      */
     private String icon;
 
+    /**
+     * 显示顺序
+     */
+    private Integer orderNum;
+
     /**
      * 创建者
      */

+ 4 - 5
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/HceCategoryMapper.java

@@ -1,9 +1,8 @@
 package com.usky.system.mapper;
 
-import com.usky.system.domain.HceCategory;
 import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.system.domain.HceCategory;
 import com.usky.system.service.vo.HceCategoryListVO;
-import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,11 +16,11 @@ import java.util.List;
  * @since 2023-08-29
  */
 public interface HceCategoryMapper extends CrudMapper<HceCategory> {
-    List<HceCategoryListVO> selectMenuTreeAll(@Param("categoryName") String categoryName, @Param("startTime") String startTime, @Param("endTime") String endTime);
+    List<HceCategoryListVO> selectMenuTreeAll(@Param("categoryIdList") List<Integer> categoryIdList, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
-    List<HceCategoryListVO> selectMenuTreeByUserId(@Param("categoryName") String categoryName, @Param("startTime") String startTime, @Param("endTime") String endTime,@Param("userId") Long userId);
+    List<HceCategoryListVO> selectMenuTreeByUserId(@Param("categoryIdList") List<Integer> categoryIdList, @Param("startTime") String startTime, @Param("endTime") String endTime,@Param("userId") Long userId);
 
-    List<HceCategoryListVO> selectMenuTreeByUserIdOne(@Param("categoryName") String categoryName, @Param("startTime") String startTime, @Param("endTime") String endTime,@Param("tenantId") Integer tenantId);
+    List<HceCategoryListVO> selectMenuTreeByUserIdOne(@Param("categoryIdList") List<Integer> categoryIdList, @Param("startTime") String startTime, @Param("endTime") String endTime,@Param("tenantId") Integer tenantId);
 
     List<HceCategory> getMenuNameList(@Param("categoryIdList") List<Integer> categoryIdList);
 

+ 3 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysMenuMapper.java

@@ -86,7 +86,9 @@ public interface SysMenuMapper extends CrudMapper<SysMenu> {
      * @param platformId 应用ID
      * @return 应用级菜单列表
      */
-    public List<SysMenu> selectMenuTreeByUserId1(@Param("userId") Long userId,@Param("platformId") Long platformId);
+    public List<SysMenu> selectMenuTreeByUserId1(@Param("userId") Long userId,
+                                                 @Param("platformId") Long platformId,
+                                                 @Param("tenantId") Integer tenantId);
 
     public List<SysMenu> selectMenuTreeByUserIdOne(@Param("tenantId") Integer tenantId);
 

+ 7 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysTenantMapper.java

@@ -2,6 +2,7 @@ package com.usky.system.mapper;
 
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.system.domain.SysTenant;
+import com.usky.system.domain.SysUserRole;
 import com.usky.system.service.vo.SysTenantTwoVo;
 import com.usky.system.service.vo.SysTenantVo;
 import org.apache.ibatis.annotations.Param;
@@ -46,6 +47,9 @@ public interface SysTenantMapper extends CrudMapper<SysTenant> {
     void cloneSysMobileBanner(@Param("originalTenantId") Integer originalTenantId,@Param("tenantId") Integer tenantId,@Param("createBy") String createBy);
     void cloneSysTenantPlatform(@Param("originalTenantId") Integer originalTenantId,@Param("tenantId") Integer tenantId);
     void cloneSysMobileTenantMenu(@Param("originalTenantId") Integer originalTenantId,@Param("tenantId") Integer tenantId);
+    List<SysUserRole> selectSysUserRoleList(@Param("originalTenantId") Integer originalTenantId, @Param("UserId") long UserId);
+    void cloneSysRoleMenu(@Param("originalRoleId") long originalRoleId,@Param("roleId") long roleId);
+    void insertSysUserRole(@Param("UserId") long UserId,@Param("roleId") long roleId,@Param("tenantId") long tenantId);
 
     void delSysTenant(@Param("tenantId") Integer tenantId);
     void delSysDept(@Param("tenantId") Integer tenantId);
@@ -57,4 +61,7 @@ public interface SysTenantMapper extends CrudMapper<SysTenant> {
     void delSysMobileBanner(@Param("tenantId") Integer tenantId);
     void delSysMobileTenantConfig(@Param("tenantId") Integer tenantId);
     void delSysMobileTenantMenu(@Param("tenantId") Integer tenantId);
+    void delSysRoleMenu(@Param("roleId") long roleId);
+    void delSysRole(@Param("tenantId") Integer tenantId);
+    void delSysUserRole(@Param("tenantId") Integer tenantId);
 }

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

@@ -71,7 +71,7 @@ public interface ISysMenuService extends CrudService<SysMenu>
      * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<SysMenu> selectMenuTreeByUserId1(Long userId,Long platformId);
+    public List<SysMenu> selectMenuTreeByUserId1(Long userId,Long platformId, Integer tenantId);
 
     List<SysMenu> selectMenuTreeByUserIdOne(Integer tenantId);
 

+ 9 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/MceReceiveService.java

@@ -4,7 +4,9 @@ import com.usky.common.core.bean.CommonPage;
 import com.usky.system.domain.MceReceive;
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.system.domain.MceRequestVO;
+import com.usky.system.service.vo.MceReceiveResponseVO;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -35,4 +37,11 @@ public interface MceReceiveService extends CrudService<MceReceive> {
 
     boolean deleteById(Integer id);
 
+    CommonPage<MceReceiveResponseVO> getMceReceiveResponseVOList(Integer pageNumber, Integer pageSize);
+
+    /**
+     * 添加消息不带token
+     * @param mceReceive
+     */
+    void addNoToken(String mceReceive);
 }

+ 39 - 18
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysLoginService.java

@@ -18,7 +18,10 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Objects;
 import java.util.Random;
@@ -62,19 +65,22 @@ public class SysLoginService {
 
         // 用户名或密码为空 错误
         if (StringUtils.isAnyBlank(username, password)) {
-            asyncManager.insertLog(tenantId,username,Constants.LOGIN_FAIL, "用户/密码必须填写", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,username,Constants.LOGIN_FAIL, "用户/密码必须填写", null);
             throw new BusinessException("用户/密码必须填写");
         }
         // 密码如果不在指定范围内 错误
         if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
                 || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
-            asyncManager.insertLog(tenantId,username, Constants.LOGIN_FAIL, "用户密码不在指定范围", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_FAIL, "用户密码不在指定范围", null);
             throw new BusinessException("用户密码不在指定范围");
         }
         // 用户名不在指定范围内 错误
         if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                 || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
-            asyncManager.insertLog(tenantId,username, Constants.LOGIN_FAIL, "用户名不在指定范围", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_FAIL, "用户名不在指定范围", null);
             throw new BusinessException("用户名不在指定范围");
         }
 
@@ -88,15 +94,18 @@ public class SysLoginService {
 
         SysUserVO user = loginUser.getSysUser();
         if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
-            asyncManager.insertLog(tenantId,username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除", null);
             throw new BusinessException("对不起,您的账号:" + username + " 已被删除");
         }
         if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
-            asyncManager.insertLog(tenantId,username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员", null);
             throw new BusinessException("对不起,您的账号:" + username + " 已停用");
         }
         if (!SecurityUtils.matchesPassword(password, user.getPassword())) {
-            asyncManager.insertLog(tenantId,username, Constants.LOGIN_FAIL, "用户密码错误", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_FAIL, "用户密码错误", null);
             throw new BusinessException("用户不存在/密码错误");
         }
 
@@ -109,7 +118,8 @@ public class SysLoginService {
             String status = list.get(0).getStatus();
             String domain = list.get(0).getDomain();
             if(status.equals("1")){
-                asyncManager.insertLog(tenantId,username, Constants.LOGIN_FAIL, "系统已停用,请联系管理员", null);
+                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+                asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_FAIL, "系统已停用,请联系管理员", null);
                 throw new BusinessException("对不起,系统已停用,请联系管理员");
             }
         }
@@ -128,7 +138,8 @@ public class SysLoginService {
 
         SysPerson sysPerson = sysPersonService.getsysPerson(user.getUserId());
         loginUser.setSysPerson(sysPerson);
-        asyncManager.insertLog(tenantId,username, Constants.LOGIN_SUCCESS, "登录成功", deptId);
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        asyncManager.insertLog(request, tenantId,username, Constants.LOGIN_SUCCESS, "登录成功", deptId);
         return loginUser;
     }
 
@@ -139,31 +150,36 @@ public class SysLoginService {
         if (!StringUtils.isBlank(username) && !StringUtils.isBlank(password)) {
             // 用户名或密码为空 错误
             if (StringUtils.isAnyBlank(username, password)) {
-                asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户/密码必须填写", null);
+                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+                asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户/密码必须填写", null);
                 throw new BusinessException("用户/密码必须填写");
             }
 
             // 密码如果不在指定范围内 错误
             if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
                     || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
-                asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户密码不在指定范围", null);
+                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+                asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户密码不在指定范围", null);
                 throw new BusinessException("用户密码不在指定范围");
             }
 
             // 用户名不在指定范围内 错误
             if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                     || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
-                asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户名不在指定范围", null);
+                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+                asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户名不在指定范围", null);
                 throw new BusinessException("用户名不在指定范围");
             }
             loginUser = sysUserService.getAppUserInfo(username, tenantId, null, method);
             if (Objects.isNull(loginUser)) {
-                asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户不存在", null);
+                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+                asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户不存在", null);
                 throw new BusinessException("用户不存在");
             }
 
             if (!SecurityUtils.matchesPassword(password, loginUser.getPassword())) {
-                asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户密码错误", null);
+                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+                asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户密码错误", null);
                 throw new BusinessException("用户不存在/密码错误");
             }
         } else if(!StringUtils.isBlank(phone) && !StringUtils.isBlank(verify)) {
@@ -212,11 +228,13 @@ public class SysLoginService {
             deptId = sysUser.getDeptId().intValue(); // 将Long转换为Integer
         }
         if (UserStatus.DELETED.getCode().equals(loginUser.getDelFlag())) {
-            asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除", null);
             throw new BusinessException("对不起,您的账号:" + username + " 已被删除");
         }
         if (UserStatus.DISABLE.getCode().equals(loginUser.getStatus())) {
-            asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员", null);
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员", null);
             throw new BusinessException("对不起,您的账号:" + loginUser.getUserName() + " 已停用");
         }
 
@@ -225,13 +243,15 @@ public class SysLoginService {
         if (loginUser != null && loginUser.getDeptId() != null) {
             deptId = loginUser.getDeptId().intValue();
         }
-        asyncManager.insertLog(tenantId,loginUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功", deptId);
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        asyncManager.insertLog(request, tenantId,loginUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功", deptId);
         return loginUser;
     }
 
 
     public void logout(Integer tenantId,String loginName) {
-        asyncManager.insertLog(tenantId,loginName, Constants.LOGOUT, "退出成功", null);
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        asyncManager.insertLog(request, tenantId,loginName, Constants.LOGOUT, "退出成功", null);
     }
 
     /**
@@ -257,7 +277,8 @@ public class SysLoginService {
         sysUser.setNickName(username);
         sysUser.setPassword(SecurityUtils.encryptPassword(password));
         sysUserService.register(BeanMapperUtils.map(sysUser, SysUser.class));
-        asyncManager.insertLog(SecurityUtils.getTenantId(),username, Constants.REGISTER, "注册成功", null);
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        asyncManager.insertLog(request, SecurityUtils.getTenantId(),username, Constants.REGISTER, "注册成功", null);
     }
 
 

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

@@ -6,18 +6,16 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
+import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.system.domain.HceArticle;
 import com.usky.system.domain.HceCategory;
 import com.usky.system.mapper.HceArticleMapper;
 import com.usky.system.mapper.HceCategoryMapper;
 import com.usky.system.service.HceArticleService;
-import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.system.service.vo.HceArticleVO;
 import org.springframework.stereotype.Service;
-import org.springframework.web.util.HtmlUtils;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
@@ -70,7 +68,7 @@ public class HceArticleServiceImpl extends AbstractCrudService<HceArticleMapper,
                         Integer categoryId1 = page.getRecords().get(i).getCategoryid();
                         Integer categoryId2 = list.get(j).getId();
                         if(categoryId1.equals(categoryId2)){
-                            page.getRecords().get(i).setMenuName(list.get(j).getMenuName());
+                            page.getRecords().get(i).setCategoryName(list.get(j).getCategoryName());
                         }
                     }
                 }

+ 80 - 30
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/HceCategoryServiceImpl.java

@@ -1,23 +1,20 @@
 package com.usky.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.core.exception.BusinessException;
+import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.system.domain.HceArticle;
 import com.usky.system.domain.HceCategory;
 import com.usky.system.domain.SysUser;
 import com.usky.system.mapper.HceArticleMapper;
 import com.usky.system.mapper.HceCategoryMapper;
-import com.usky.system.service.HceArticleService;
 import com.usky.system.service.HceCategoryService;
-import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.system.service.ISysUserService;
 import com.usky.system.service.vo.HceCategoryListVO;
 import com.usky.system.service.vo.HceCategoryVO;
-import org.apache.tomcat.jni.Local;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -47,17 +44,56 @@ public class HceCategoryServiceImpl extends AbstractCrudService<HceCategoryMappe
         long userId = SecurityUtils.getUserId();
         SysUser sysUser = userService.selectUserByIdOne(userId);
         List<HceCategoryListVO> list = new ArrayList<>();
-        if(("00").equals(sysUser.getUserType())){
-            if (1L == userId)
-            {
-                list = baseMapper.selectMenuTreeAll(hceCategoryVO.getCategoryName(),hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
-            }
-            else
-            {
-                list = baseMapper.selectMenuTreeByUserId(hceCategoryVO.getCategoryName(),hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime(),userId);
+        List<Integer> categoryIdList = new ArrayList<>();
+        if(StringUtils.isNotBlank(hceCategoryVO.getCategoryName())){
+            LambdaQueryWrapper<HceCategory> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.like(HceCategory::getCategoryName, hceCategoryVO.getCategoryName());
+            List<HceCategory> list1 = this.list(queryWrapper);
+            if(list1.size() > 0){
+                for (int i = 0; i < list1.size(); i++) {
+                    categoryIdList.add(list1.get(i).getId());
+                }
+                if(("00").equals(sysUser.getUserType())){
+                    if (1L == userId)
+                    {
+                        list = baseMapper.selectMenuTreeAll(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+                    }
+                    else
+                    {
+                        list = baseMapper.selectMenuTreeByUserId(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime(),userId);
+                    }
+                }else{
+                    if (1L == userId)
+                    {
+                        list = baseMapper.selectMenuTreeAll(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+                    }
+                    else
+                    {
+                        list = baseMapper.selectMenuTreeByUserIdOne(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime(),SecurityUtils.getTenantId());
+                    }
+
+                }
             }
         }else{
-            list = baseMapper.selectMenuTreeByUserIdOne(hceCategoryVO.getCategoryName(),hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime(),SecurityUtils.getTenantId());
+            if(("00").equals(sysUser.getUserType())){
+                if (1L == userId)
+                {
+                    list = baseMapper.selectMenuTreeAll(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+                }
+                else
+                {
+                    list = baseMapper.selectMenuTreeByUserId(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime(),userId);
+                }
+            }else{
+                if (1L == userId)
+                {
+                    list = baseMapper.selectMenuTreeAll(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+                }
+                else
+                {
+                    list = baseMapper.selectMenuTreeByUserIdOne(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime(),SecurityUtils.getTenantId());
+                }
+            }
         }
 
         List<HceCategoryListVO> finalList = list;
@@ -72,7 +108,21 @@ public class HceCategoryServiceImpl extends AbstractCrudService<HceCategoryMappe
 
     @Override
     public List<HceCategoryListVO> pageWhite(HceCategoryVO hceCategoryVO){
-        List<HceCategoryListVO> list = baseMapper.selectMenuTreeAll(hceCategoryVO.getCategoryName(),hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+        List<HceCategoryListVO> list = new ArrayList<>();
+        List<Integer> categoryIdList = new ArrayList<>();
+        if(StringUtils.isNotBlank(hceCategoryVO.getCategoryName())){
+            LambdaQueryWrapper<HceCategory> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.like(HceCategory::getCategoryName, hceCategoryVO.getCategoryName());
+            List<HceCategory> list2 = this.list(queryWrapper);
+            if(list2.size() > 0){
+                for (int i = 0; i < list2.size(); i++) {
+                    categoryIdList.add(list2.get(i).getId());
+                }
+                list = baseMapper.selectMenuTreeAll(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+            }
+        }else{
+            list = baseMapper.selectMenuTreeAll(categoryIdList,hceCategoryVO.getStartTime(),hceCategoryVO.getEndTime());
+        }
 
         List<HceCategoryListVO> finalList = list;
         List<HceCategoryListVO> list1 = list.stream().filter(s ->s.getParentId() == 0).map(
@@ -109,15 +159,15 @@ public class HceCategoryServiceImpl extends AbstractCrudService<HceCategoryMappe
         }
 
         //新增栏目时校验对应上级栏目是否存在,不存在要先新增上级栏目后再新增本栏目
-        Integer pid = baseMapper.selectPidByMenuid(hceCategory.getMenuId());
-        if(pid != null && pid != 0){
-            LambdaQueryWrapper<HceCategory> queryWrapper2 = Wrappers.lambdaQuery();
-            queryWrapper2.eq(HceCategory::getMenuId,pid);
-            List<HceCategory> list2 = this.list(queryWrapper2);
-            if(list2.size() <= 0){
-                throw new BusinessException("上级栏目不存在,请先添加上级栏目");
-            }
-        }
+//        Integer pid = baseMapper.selectPidByMenuid(hceCategory.getMenuId());
+//        if(pid != null && pid != 0){
+//            LambdaQueryWrapper<HceCategory> queryWrapper2 = Wrappers.lambdaQuery();
+//            queryWrapper2.eq(HceCategory::getMenuId,pid);
+//            List<HceCategory> list2 = this.list(queryWrapper2);
+//            if(list2.size() <= 0){
+//                throw new BusinessException("上级栏目不存在,请先添加上级栏目");
+//            }
+//        }
 
         hceCategory.setCreatedate(LocalDateTime.now());
         this.save(hceCategory);
@@ -152,13 +202,13 @@ public class HceCategoryServiceImpl extends AbstractCrudService<HceCategoryMappe
         if(list.size() > 0){
             throw new BusinessException("该栏目存在栏目内容不可删除");
         }
-        LambdaQueryWrapper<HceCategory> queryWrapper1 = Wrappers.lambdaQuery();
-        queryWrapper1.eq(HceCategory::getPid,id)
-                .eq(HceCategory::getStatus,1);
-        List<HceCategory> list1 = this.list(queryWrapper1);
-        if(list1.size()>0){
-            throw new BusinessException("该栏目存在子栏目不可删除");
-        }
+//        LambdaQueryWrapper<HceCategory> queryWrapper1 = Wrappers.lambdaQuery();
+//        queryWrapper1.eq(HceCategory::getPid,id)
+//                .eq(HceCategory::getStatus,1);
+//        List<HceCategory> list1 = this.list(queryWrapper1);
+//        if(list1.size()>0){
+//            throw new BusinessException("该栏目存在子栏目不可删除");
+//        }
         this.removeById(id);
 
     }

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

@@ -84,6 +84,21 @@ public class MceContentServiceImpl extends AbstractCrudService<MceContentMapper,
             if (StringUtils.isNotEmpty(mceReceiveVO.getInfoTypeName())) {
                 sendWeChatMessageRequestVO.setInfoTypeName(mceReceiveVO.getInfoTypeName());
             }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getIpAddress())) {
+                sendWeChatMessageRequestVO.setIpAddress(mceReceiveVO.getIpAddress());
+            }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getUserName())) {
+                sendWeChatMessageRequestVO.setUserName(mceReceiveVO.getUserName());
+            }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getLoginAddress())) {
+                sendWeChatMessageRequestVO.setLoginAddress(mceReceiveVO.getLoginAddress());
+            }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getLoginType())) {
+                sendWeChatMessageRequestVO.setLoginType(mceReceiveVO.getLoginType());
+            }
+            if (StringUtils.isNotEmpty(mceReceiveVO.getApprovalResult())) {
+                sendWeChatMessageRequestVO.setApprovalResult(mceReceiveVO.getApprovalResult());
+            }
             mceMbuserService.sendWeChatMessage(sendWeChatMessageRequestVO);
         }
     }

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

@@ -7,14 +7,12 @@ import com.usky.common.core.exception.BusinessException;
 import com.usky.common.redis.core.RedisHelper;
 import com.usky.system.domain.MceMbuser;
 import com.usky.system.mapper.MceMbuserMapper;
-import com.usky.system.service.ISysDictDataService;
 import com.usky.system.service.MceMbuserService;
 import com.usky.system.constant.constant;
 import com.usky.common.mybatis.core.AbstractCrudService;
-import com.usky.system.service.vo.SendWeChatMessageRequestVO;
-import com.usky.system.service.vo.TemplateData;
-import com.usky.system.service.vo.TemplateMsgEntityVO;
+import com.usky.system.service.vo.*;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
@@ -85,10 +83,11 @@ public class MceMbuserServiceImpl extends AbstractCrudService<MceMbuserMapper, M
             redisHelper.set("access_key", this.getWeChatAccessToken());
         } else {
             try {
-                String access_time = redisHelper.get("access_time").toString();
-                String now_time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-                long i = getTimeDifference(access_time, now_time);
-                if (i > 115) { // 大于115分钟
+                String accessTime = redisHelper.get("access_time").toString();
+                String nowTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                long i = getTimeDifference(accessTime, nowTime);
+                // 大于115分钟
+                if (i > 115) {
                     redisHelper.set("access_time", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                     redisHelper.set("access_key", this.getWeChatAccessToken());
                 }
@@ -104,35 +103,103 @@ public class MceMbuserServiceImpl extends AbstractCrudService<MceMbuserMapper, M
             return null;
         }
 
-        String token = obj.toString();
+        String tUrl;
+        String templateId = "";
 
-        TemplateMsgEntityVO messageVo = new TemplateMsgEntityVO();
-        messageVo.setTTitle(infoTitle);
-        messageVo.setTKeyword1(infoContent);
-        messageVo.setTKeyword3(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-        messageVo.setTRemark(infoContent);
+        Map<String, TemplateData> data = new HashMap<>();
+        String nowTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+        switch (requestVO.getInfoType()) {
+            // 登录成功通知
+            case "0":
+                // 登录时间
+                data.put("time3", new TemplateData(nowTime, "#173177"));
+                // 登录账号 userName
+                data.put("thing6", new TemplateData(requestVO.getUserName(), "#173177"));
+                // 登录IP
+                data.put("character_string8", new TemplateData(requestVO.getLoginAddress(), "#173177"));
+                // 登录地点
+                data.put("thing9", new TemplateData(requestVO.getLoginAddress(), "#173177"));
+                // 登录方式
+                data.put("thing10", new TemplateData(requestVO.getLoginType(), "#173177"));
+                // 设置公众号模板消息ID
+                templateId = constant.WE_CHAT_LOGIN_TEMPLATE_ID;
+                break;
+
+            case "1":
+            case "5":
+                /* 通知公告&工作报告通知(工单已完成通知)
+                 * 工单标题{{thing9.DATA}}
+                 * 发起人{{thing8.DATA}}
+                 * 完成时间{{time12.DATA}}
+                 **/
+                data.put("thing9", new TemplateData(requestVO.getInfoContent(), "#173177"));
+                data.put("thing8", new TemplateData(requestVO.getUserName(), "#173177"));
+                data.put("time12", new TemplateData(nowTime, "#173177"));
+                // 设置公众号模板消息ID
+                templateId = constant.WE_CHAT_WORK_TEMPLATE_ID;
+                break;
+
+            case "3":
+                /* OA系统流程审批通知
+                 * 流程名称{{thing7.DATA}}
+                 * 审批节点{{thing8.DATA}}
+                 * 发起人{{thing13.DATA}}
+                 * 发起时间{{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("time10", new TemplateData(nowTime, "#173177"));
+                data.put("const21", new TemplateData(requestVO.getApprovalResult(), "#173177"));
+
+                // 设置公众号模板消息ID
+                templateId = constant.WE_CHAT_OA_TEMPLATE_ID;
+                break;
+
+            case "2":
+            case "4":
+                TemplateMsgEntityVO messageVo = new TemplateMsgEntityVO();
+                messageVo.setTTitle(infoTitle);
+                messageVo.setTKeyword1(infoContent);
+                messageVo.setTKeyword3(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                messageVo.setTRemark(infoContent);
+                /* 设备预警信息提醒
+                 * {{first.DATA}}
+                 * 设备号:{{keyword1.DATA}}
+                 * 报警类型:{{keyword2.DATA}}
+                 * 时间:{{keyword3.DATA}}
+                 * {{remark.DATA}}
+                 **/
+                messageVo.setTemplateId(constant.WE_CHAT_TEMPLATE_ID);
+                data.put("first", new TemplateData(messageVo.getTTitle(), "#44b549"));
+                data.put("keyword1", new TemplateData(messageVo.getTKeyword1(), "#173177"));
+                data.put("keyword2", new TemplateData(messageVo.getTKeyword2(), "#173177"));
+                data.put("keyword3", new TemplateData(messageVo.getTKeyword3(), "#173177"));
+                data.put("remark", new TemplateData(messageVo.getTRemark(), "#173177"));
+
+                templateId = messageVo.getTemplateId();
+                break;
+        }
+
+        // 回调地址
         if (Objects.nonNull(requestVO.getInfoTypeName())) {
-            messageVo.setTUrl(String.format(constant.WE_CHAT_CUSTOMER_CALL_URL, requestVO.getInfoType(), requestVO.getInfoTypeName(), infoId));
-            messageVo.setTKeyword2(requestVO.getInfoTypeName());
+            tUrl = String.format(constant.WE_CHAT_CUSTOMER_CALL_URL, requestVO.getInfoType(), requestVO.getInfoTypeName(), infoId);
         } else {
-            messageVo.setTUrl(String.format(constant.WE_CHAT_CUSTOMER_CALL_URL1, requestVO.getInfoType(), infoId));
-            messageVo.setTKeyword2("");
+            tUrl = String.format(constant.WE_CHAT_CUSTOMER_CALL_URL1, requestVO.getInfoType(), infoId);
         }
 
-        messageVo.setTemplateId(constant.WE_CHAT_TEMPLATE_ID);
-
+        String token = obj.toString();
         String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
         Map<String, Object> content = new HashMap<>();
-        Map<String, TemplateData> data = new HashMap<>();
-        data.put("first", new TemplateData(messageVo.getTTitle(), "#44b549"));
-        data.put("keyword1", new TemplateData(messageVo.getTKeyword1(), "#173177"));
-        data.put("keyword2", new TemplateData(messageVo.getTKeyword2(), "#173177"));
-        data.put("keyword3", new TemplateData(messageVo.getTKeyword3(), "#173177"));
-        data.put("remark", new TemplateData(messageVo.getTRemark(), "#173177"));
-
         content.put("touser", openId);
-        content.put("url", messageVo.getTUrl());
-        content.put("template_id", messageVo.getTemplateId());
+        if (StringUtils.isNotBlank(tUrl)) {
+            content.put("url", tUrl);
+        }
+        if (StringUtils.isNotBlank(templateId)) {
+            content.put("template_id", templateId);
+        }
         content.put("data", data);
         String resp = HttpUtil.post(requestUrl, JSONUtil.parseObj(content).toString());
         System.out.println(content.toString());

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

@@ -19,6 +19,7 @@ import com.usky.system.mapper.MceSettingMapper;
 import com.usky.system.mapper.SysUserMapper;
 import com.usky.system.service.*;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.system.service.vo.MceReceiveResponseVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -68,7 +69,8 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
         LambdaQueryWrapper<MceContent> lambdaQuery1 = Wrappers.lambdaQuery();
         lambdaQuery1.select(MceContent::getId, MceContent::getInfoTitle, MceContent::getInfoContent)
                 .like(StringUtils.isNotBlank(infoTitle), MceContent::getInfoTitle, infoTitle)
-                .eq(id != null, MceContent::getId, id);
+                .eq(id != null, MceContent::getId, id)
+                .eq(MceContent::getTenantId, SecurityUtils.getTenantId());
         List<MceContent> list1 = mceContentService.list(lambdaQuery1);
         IPage<MceReceive> page = new Page<>(current, size);
         List<Integer> contentIds = new ArrayList<>();
@@ -87,18 +89,21 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
                     .eq(MceReceive::getReceiverId, SecurityUtils.getUserId())
                     .in(CollectionUtils.isNotEmpty(contentIds), MceReceive::getContentId, contentIds)
                     .orderByDesc(MceReceive::getId);
+
 //                .inSql(StringUtils.isNotBlank(infoTitle),MceReceive::getContentId,"SELECT id FROM mce_content WHERE " +
 //                        "info_title like '%" + infoTitle + "%' AND tenant_id = "+SecurityUtils.getTenantId()+"");
             page = this.page(page, lambdaQuery);
             if (CollectionUtils.isNotEmpty(page.getRecords())) {
                 for (int i = 0; i < page.getRecords().size(); i++) {
+                    String infoType1 = page.getRecords().get(i).getInfoType();
                     Map<String, Object> map = new HashMap<>();
                     map.put("id", page.getRecords().get(i).getId());
-                    map.put("infoType", page.getRecords().get(i).getInfoType());
+                    map.put("infoType", infoType1);
                     map.put("readFlag", page.getRecords().get(i).getReadFlag());
                     map.put("moduleId", page.getRecords().get(i).getModuleId());
                     map.put("createTime", page.getRecords().get(i).getCreateTime());
                     map.put("createBy", page.getRecords().get(i).getCreateBy());
+                    map.put("issuerName", page.getRecords().get(i).getIssuerName());
                     if (CollectionUtils.isNotEmpty(list1)) {
                         for (int j = 0; j < list1.size(); j++) {
                             if (page.getRecords().get(i).getContentId().equals(list1.get(j).getId())) {
@@ -247,13 +252,26 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
     @Async
     @Override
     public void addMceReceive(MceRequestVO mceRequestVO) {
+
+        // 登录成功 infoType 为 0,只给登录用户发送公众号消息
+        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);
+        }
+
         // 如果 infoTypeName 为空,则从字典数据中获取
         if (mceRequestVO.getInfoTypeName() == null) {
             String infoTypeName = sysDictDataService.selectDictLabel("message_type", mceRequestVO.getInfoType());
             mceRequestVO.setInfoTypeName(infoTypeName);
         }
 
-        Integer tenantId = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, mceRequestVO.getUserName()).select(SysUser::getTenantId)).getTenantId();
+        Integer tenantId = null;
+        try {
+            tenantId = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, mceRequestVO.getUserName()).select(SysUser::getTenantId)).getTenantId();
+        } catch (Exception e) {
+            log.error("获取用户租户ID失败,报错信息:{}, 未找到用户-{}-的租户", e.getMessage(), mceRequestVO.getUserName());
+        }
 
         // 获取当前租户的所有用户
         List<SysUser> userList = userMapper.tenantIdUserList(tenantId);
@@ -303,7 +321,6 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
                     .filter(mbUser -> mbUser.getUserId().equals(userId))
                     .findFirst();
 
-
             for (SysUser user : userList) {
                 if (user.getUserId().equals(userId)) {
                     // 创建消息接收记录
@@ -490,7 +507,12 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
             mceReceiveVO.put("infoTypeName", infoTypeName);
         }
 
-        Integer tenantId = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, mceReceiveVO.get("userName")).select(SysUser::getTenantId)).getTenantId();
+        Integer tenantId = null;
+        try {
+            tenantId = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, mceReceiveVO.get("userName")).select(SysUser::getTenantId)).getTenantId();
+        } catch (Exception e) {
+            log.error("获取用户租户ID失败,报错信息:{}, 未找到用户-{}-的租户", e.getMessage(), mceReceiveVO.get("userName"));
+        }
         List<SysUser> list = userMapper.tenantIdUserList(tenantId);
         // 获取用户昵称与真实姓名Map
         Map<String, String> userNameNickNameMap = list.stream().collect(Collectors.toMap(SysUser::getUserName, SysUser::getNickName));
@@ -607,4 +629,65 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
         }
         return f;
     }
+
+    @Override
+    public CommonPage<MceReceiveResponseVO> getMceReceiveResponseVOList(Integer pageNumber, Integer pageSize) {
+        IPage<MceReceive> page = new Page<>(pageNumber, pageSize);
+        Long userId = SecurityUtils.getUserId();
+        List<MceReceiveResponseVO> returnList = new ArrayList<>();
+
+        LambdaQueryWrapper<MceReceive> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(MceReceive::getReceiverId, userId).orderByDesc(MceReceive::getId);
+        page = this.page(page, lambdaQuery);
+        List<MceReceive> mceReceiveList = page.getRecords();
+        List<Integer> contentIdList = mceReceiveList.stream().map(MceReceive::getContentId).distinct().collect(Collectors.toList());
+
+        List<MceContent> mceContentList = mceContentService.list(new LambdaQueryWrapper<MceContent>().in(MceContent::getId, contentIdList));
+
+        for (MceContent mceContent : mceContentList) {
+            MceReceive mceReceive = mceReceiveList.stream().filter(mceReceive1 -> mceReceive1.getContentId().equals(mceContent.getId())).findFirst().get();
+            MceReceiveResponseVO mceReceiveResponseVO = new MceReceiveResponseVO();
+            mceReceiveResponseVO.setMceId(mceReceive.getId());
+            mceReceiveResponseVO.setInfoType(mceContent.getInfoType());
+            mceReceiveResponseVO.setInfoTitle(mceContent.getInfoTitle());
+            mceReceiveResponseVO.setContentId(mceContent.getId());
+            mceReceiveResponseVO.setInfoContent(mceContent.getInfoContent());
+            mceReceiveResponseVO.setCreateTime(mceContent.getCreateTime());
+            mceReceiveResponseVO.setCreateBy(mceContent.getCreateBy());
+            mceReceiveResponseVO.setModuleId(mceReceive.getModuleId());
+            returnList.add(mceReceiveResponseVO);
+        }
+
+        return new CommonPage<>(returnList, page.getTotal(), page.getSize(), page.getCurrent());
+    }
+
+    /**
+     * 新增消息-无需token
+     * @param mceNoToken
+     */
+    @Override
+    public void addNoToken(String mceNoToken) {
+        JSONObject json = JSONObject.parseObject(mceNoToken);
+        String infoTypeName = sysDictDataService.selectDictLabel("message_type", json.get("infoType").toString());
+        if (!json.containsKey("infoTypeName")) {
+            json.put("infoTypeName", infoTypeName);
+        }
+        List<String> userNames = JSONObject.parseArray(json.get("userNames").toString(), String.class);
+
+        LambdaQueryWrapper<SysUser> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.select(SysUser::getUserId)
+                .in(SysUser::getUserName, userNames);
+        List<Long> userIdList = userMapper.selectList(lambdaQuery).stream().map(SysUser::getUserId).collect(Collectors.toList());
+
+        MceRequestVO mceRequestVO = new MceRequestVO();
+        mceRequestVO.setUserIds(userIdList);
+        mceRequestVO.setInfoTitle(json.get("infoTitle").toString());
+        mceRequestVO.setInfoContent(json.get("infoContent").toString());
+        mceRequestVO.setInfoType(json.get("infoType").toString());
+        mceRequestVO.setInfoTypeName(json.get("infoTypeName").toString());
+        mceRequestVO.setId((Integer) json.get("id"));
+        mceRequestVO.setUserName(json.get("userName").toString());
+        mceRequestVO.setApprovalResult(json.get("approvalResult").toString());
+        addMceReceive(mceRequestVO);
+    }
 }

+ 14 - 3
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysMenuServiceImpl.java

@@ -172,12 +172,12 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
      * @return 菜单列表
      */
     @Override
-    public List<SysMenu> selectMenuTreeByUserId1(Long userId, Long platformId) {
+    public List<SysMenu> selectMenuTreeByUserId1(Long userId, Long platformId, Integer tenantId) {
         List<SysMenu> menus = null;
         if (1L == userId) {
             menus = menuMapper.selectMenuTreeAll();
         } else {
-            menus = menuMapper.selectMenuTreeByUserId1(userId, platformId);
+            menus = menuMapper.selectMenuTreeByUserId1(userId, platformId, tenantId);
         }
         return getChildPerms(menus, 0);
     }
@@ -226,6 +226,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
             router.setName(getRouteName(menu));
             router.setPath(getRouterPath(menu));
             router.setComponent(getComponent(menu));
+            router.setOrderNum(menu.getOrderNum());
             router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
             List<SysMenu> cMenus = menu.getChildren();
             if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
@@ -239,6 +240,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                 children.setPath(menu.getPath());
                 children.setComponent(menu.getComponent());
                 children.setName(StringUtils.capitalize(menu.getPath()));
+                children.setOrderNum(menu.getOrderNum());
                 children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                 childrenList.add(children);
                 router.setChildren(childrenList);
@@ -251,6 +253,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                 children.setPath(routerPath);
                 children.setComponent(UserConstants.INNER_LINK);
                 children.setName(StringUtils.capitalize(routerPath));
+                children.setOrderNum(menu.getOrderNum());
                 children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                 childrenList.add(children);
                 router.setChildren(childrenList);
@@ -278,6 +281,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                     platformRouterVo.setPlatformId(platformVo.getId());
                     platformRouterVo.setPlatformName(platformVo.getPlatformName());
                     platformRouterVo.setIcon(platformVo.getIcon());
+                    platformRouterVo.setOrderNum(platformVo.getOrderNum());
                     List<SysMenu> menus1 = this.selectMenuTreeByUserIdOne1(tenantId,
                             platformVo.getId());
                     List<RouterVo> routers = new LinkedList<RouterVo>();
@@ -287,6 +291,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                         router.setName(getRouteName(menu));
                         router.setPath(getRouterPath(menu));
                         router.setComponent(getComponent(menu));
+                        router.setOrderNum(menu.getOrderNum());
                         router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                         List<SysMenu> cMenus = menu.getChildren();
                         if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
@@ -300,6 +305,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                             children.setPath(menu.getPath());
                             children.setComponent(menu.getComponent());
                             children.setName(StringUtils.capitalize(menu.getPath()));
+                            children.setOrderNum(menu.getOrderNum());
                             children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                             childrenList.add(children);
                             router.setChildren(childrenList);
@@ -312,6 +318,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                             children.setPath(routerPath);
                             children.setComponent(UserConstants.INNER_LINK);
                             children.setName(StringUtils.capitalize(routerPath));
+                            children.setOrderNum(menu.getOrderNum());
                             children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                             childrenList.add(children);
                             router.setChildren(childrenList);
@@ -339,8 +346,9 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                         platformRouterVo.setPlatformId(platformVo.getId());
                         platformRouterVo.setPlatformName(platformVo.getPlatformName());
                         platformRouterVo.setIcon(platformVo.getIcon());
+                        platformRouterVo.setOrderNum(platformVo.getOrderNum());
                         List<SysMenu> menus1 = this.selectMenuTreeByUserId1(userId,
-                                platformVo.getId().longValue());
+                                platformVo.getId().longValue(), tenantId);
                         List<RouterVo> routers = new LinkedList<RouterVo>();
                         for (SysMenu menu : menus1) {
                             RouterVo router = new RouterVo();
@@ -348,6 +356,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                             router.setName(getRouteName(menu));
                             router.setPath(getRouterPath(menu));
                             router.setComponent(getComponent(menu));
+                            router.setOrderNum(menu.getOrderNum());
                             router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                             List<SysMenu> cMenus = menu.getChildren();
                             if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
@@ -361,6 +370,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                                 children.setPath(menu.getPath());
                                 children.setComponent(menu.getComponent());
                                 children.setName(StringUtils.capitalize(menu.getPath()));
+                                children.setOrderNum(menu.getOrderNum());
                                 children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                                 childrenList.add(children);
                                 router.setChildren(childrenList);
@@ -373,6 +383,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                                 children.setPath(routerPath);
                                 children.setComponent(UserConstants.INNER_LINK);
                                 children.setName(StringUtils.capitalize(routerPath));
+                                children.setOrderNum(menu.getOrderNum());
                                 children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
                                 childrenList.add(children);
                                 router.setChildren(childrenList);

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

@@ -98,6 +98,7 @@ public class SysPlatformServiceImpl extends AbstractCrudService<SysPlatformMappe
         SysPlatform sysPlatform = new SysPlatform();
         sysPlatform.setPlatformName(platformMenuVo.getPlatformName());
         sysPlatform.setIcon(platformMenuVo.getIcon());
+        sysPlatform.setOrderNum(platformMenuVo.getOrderNum());
         if (platformMenuVo.getPlatformId().intValue() == 0) {
             sysPlatform.setCreateBy(SecurityUtils.getUsername());
             sysPlatform.setCreateTime(LocalDateTime.now());

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

@@ -1,29 +1,27 @@
 package com.usky.system.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
-import com.usky.system.domain.SysDept;
-import com.usky.system.domain.SysTenant;
-import com.usky.system.domain.SysUser;
-import com.usky.system.domain.SysUserTenant;
+import com.usky.system.domain.*;
 import com.usky.system.mapper.SysTenantMapper;
 import com.usky.system.mapper.SysUserTenantMapper;
 import com.usky.system.service.ISysDeptService;
+import com.usky.system.service.ISysRoleService;
 import com.usky.system.service.SysTenantPlatformService;
 import com.usky.system.service.SysTenantService;
 import com.usky.system.service.vo.SysTenantOneVo;
 import com.usky.system.service.vo.SysTenantTwoVo;
 import com.usky.system.service.vo.SysTenantVo;
 import com.usky.system.service.vo.TenantPlatformVo;
-import io.swagger.models.auth.In;
-import org.apache.ibatis.annotations.Select;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
-import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 
@@ -46,6 +44,8 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
     private SysTenantMapper sysTenantMapper;
     @Autowired
     private SysTenantPlatformService sysTenantPlatformService;
+    @Autowired
+    private ISysRoleService roleService;
 
     @Override
     public List<SysTenantVo> getUserData() {
@@ -123,6 +123,12 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
         sysDept.setPhone(sysTenant.getPhoneNumber());
         sysDept.setCreateBy(SecurityUtils.getUsername());
         iSysDeptService.insertDept(sysDept);
+
+        TenantPlatformVo tenantPlatformVo = new TenantPlatformVo();
+        tenantPlatformVo.setPlatformIds(new Integer[]{Integer.parseInt(sysTenant.getSystemName())});
+        tenantPlatformVo.setRequestId(0);
+        tenantPlatformVo.setTenantId(tenantId);
+        sysTenantPlatformService.updateTenantPlatform(tenantPlatformVo);
     }
 
     @Override
@@ -165,6 +171,32 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
         //克隆应用授权和权限配置
         sysTenantMapper.cloneSysTenantPlatform(originalTenantId,tenantId);
         sysTenantMapper.cloneSysMobileTenantMenu(originalTenantId,tenantId);
+        //克隆用户角色和租户用户角色
+        //sys_role
+        List<SysUserRole> sysUserRoleList = sysTenantMapper.selectSysUserRoleList(originalTenantId,SecurityUtils.getUserId());
+        if(sysUserRoleList.size()>0){
+            for (int i = 0; i < sysUserRoleList.size(); i++) {
+                SysRole role = new SysRole();
+                long originalRoleId = sysUserRoleList.get(i).getRoleId();
+                LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.select(SysRole::getRoleName,SysRole::getRoleKey,SysRole::getRoleSort,SysRole::getDataScope,SysRole::getStatus).eq(SysRole::getRoleId, originalRoleId);
+                SysRole one = roleService.getOne(queryWrapper);
+                role.setRoleName(one.getRoleName());
+                role.setRoleKey(one.getRoleKey());
+                role.setRoleSort(one.getRoleSort());
+                role.setDataScope(one.getDataScope());
+                role.setStatus(one.getStatus());
+                role.setCreateBy(SecurityUtils.getUsername());
+                role.setCreateTime(DateTime.now());
+                role.setTenantId(tenantId);
+                roleService.insertRole(role);
+                long roleId = role.getRoleId();
+                //sys_role_menu
+                sysTenantMapper.cloneSysRoleMenu(originalRoleId,roleId);
+                //sys_user_role
+                sysTenantMapper.insertSysUserRole(SecurityUtils.getUserId(),roleId,tenantId);
+            }
+        }
 
         //更新默认应用
         TenantPlatformVo tenantPlatformVo = new TenantPlatformVo();
@@ -186,6 +218,18 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
         sysTenantMapper.delSysMobileBanner(tenantId);
         sysTenantMapper.delSysMobileTenantConfig(tenantId);
         sysTenantMapper.delSysMobileTenantMenu(tenantId);
+
+        LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(SysRole::getRoleId).eq(SysRole::getTenantId, tenantId);
+        List<SysRole> list = roleService.list(queryWrapper);
+        if(CollectionUtils.isNotEmpty(list)){
+            for (int i = 0; i < list.size(); i++) {
+                long roleId = list.get(i).getRoleId();
+                sysTenantMapper.delSysRoleMenu(roleId);
+            }
+        }
+        sysTenantMapper.delSysRole(tenantId);
+        sysTenantMapper.delSysUserRole(tenantId);
     }
 
     @Override

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

@@ -3,14 +3,12 @@ package com.usky.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.usky.common.core.bean.ApiResult;
-import com.usky.common.core.exception.BusinessErrorCode;
-import com.usky.common.security.utils.SecurityUtils;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.core.util.BeanMapperUtils;
 import com.usky.common.core.util.StringUtils;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.system.domain.*;
 import com.usky.system.domain.constants.UserConstants;
 import com.usky.system.mapper.*;
@@ -112,9 +110,7 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
         }
 //        user.setUserType("00");
 //        user.setTenantId(SecurityUtils.getTenantId());
-        if(user.getUserType().equals("00")){
-            user.setDeptId(deptService.deptListByTenant(user.getTenantId()).get(0).getDeptId());
-        }
+        user.setDeptId(deptService.deptListByTenant(user.getTenantId()).get(0).getDeptId());
 
         user.setCreateBy(SecurityUtils.getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
@@ -749,15 +745,15 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
 
 
     public List<SysUser> userList() {
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        String userType = null;
-        if (loginUser != null && !"".equals(loginUser)) {
-            userType = loginUser.getSysUser().getUserType();
-        }
+        // LoginUser loginUser = SecurityUtils.getLoginUser();
+        // String userType = null;
+        // if (loginUser != null && !"".equals(loginUser)) {
+        //     userType = loginUser.getSysUser().getUserType();
+        // }
         String userName = null;
-        if ("00".equals(userType)) {
-            userName = SecurityUtils.getUsername();
-        }
+        // if ("00".equals(userType)) {
+        //     userName = SecurityUtils.getUsername();
+        // }
         List<SysUser> list = userMapper.userList(SecurityUtils.getTenantId(), userName);
         return list;
     }

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

@@ -2,17 +2,27 @@ package com.usky.system.service.util;
 
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.constant.Constants;
 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.system.domain.MceRequestVO;
 import com.usky.system.domain.SysLogininfor;
+import com.usky.system.domain.SysUser;
+import com.usky.system.mapper.SysUserMapper;
 import com.usky.system.service.ISysLogininforService;
+import com.usky.system.service.ISysUserService;
+import com.usky.system.service.MceReceiveService;
 import eu.bitwalker.useragentutils.UserAgent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.Collections;
+
+import static com.usky.common.core.utils.ip.IpUtils.getIpAddr;
 
 /**
  * @description: 异步工厂(产生任务用)
@@ -23,6 +33,10 @@ public class AsyncFactory
 {
     private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
 
+    private static final MceReceiveService mceReceiveService = SpringContextUtils.getBean(MceReceiveService.class);
+
+    public static final SysUserMapper SYS_USER_MAPPER = SpringContextUtils.getBean(SysUserMapper.class);
+
     /**
      * 记录登录信息
      *
@@ -32,11 +46,13 @@ public class AsyncFactory
      * @param args 列表
      * @return 任务task
      */
-    public static void recordLoginInfo(final Integer tenantId,final String username,final String status, final String message, final Integer deptId,
-                                       final Object... args) {
-        final eu.bitwalker.useragentutils.UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
-        final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
-        String address = AddressUtils.getRealAddressByIP(ip);
+    public static void recordLoginInfo(HttpServletRequest request, final Integer tenantId, final String username, final String status, final String message, final Integer deptId, final Object... args) {
+        final UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
+        final String ip = request != null ? getIpAddr(request) : "未知";
+        String address = "未知"; // 默认地址为未知
+        if (request != null) {
+            address = AddressUtils.getRealAddressByIP(ip);
+        }
         StringBuilder s = new StringBuilder();
         s.append(getBlock(ip));
         s.append(address);
@@ -63,6 +79,9 @@ 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进行转换
         }
@@ -79,4 +98,26 @@ public class AsyncFactory
         }
         return "[" + msg.toString() + "]";
     }
+
+    private static void sendWeChatMessage(SysLogininfor logininfor) {
+        MceRequestVO mceRequestVO = new MceRequestVO();
+        mceRequestVO.setInfoTitle("登录成功通知");
+        mceRequestVO.setInfoContent("用户 "+logininfor.getUserName() +" 登录成功!");
+        mceRequestVO.setInfoType("0");
+        mceRequestVO.setInfoTypeName("登录通知");
+        mceRequestVO.setUserName(logininfor.getUserName());
+
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(SysUser::getUserId)
+                .eq(SysUser::getUserName, logininfor.getUserName());
+        SysUser sysUser = SYS_USER_MAPPER.selectOne(queryWrapper);
+
+        mceRequestVO.setUserIds(Collections.singletonList(sysUser.getUserId()));
+
+        mceRequestVO.setUserName(logininfor.getUserName());
+        mceRequestVO.setLoginAddress(logininfor.getLoginLocation());
+        mceRequestVO.setLoginType(logininfor.getOs() + "-" + logininfor.getBrowser());
+        mceRequestVO.setIpAddress(logininfor.getIpaddr());
+        mceReceiveService.addMceReceive(mceRequestVO);
+    }
 }

+ 10 - 17
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/AsyncManager.java

@@ -7,6 +7,7 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.annotation.PreDestroy;
+import javax.servlet.http.HttpServletRequest;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -40,23 +41,15 @@ public class AsyncManager {
         }
     }
 
-    public void insertLog(Integer tenantId, final String username, final String status, final String message, final Integer deptId) {
-        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        if (sra != null) {
-            executorEvent.execute(() -> {
-                try {
-                    RequestContextHolder.setRequestAttributes(sra, true);
-                    logger.info("new Log is {} , {}", username, message);
-                    AsyncFactory.recordLoginInfo(tenantId, username, status, message, deptId);
-                } catch (Exception e) {
-                    logger.error("记录登录信息异常", e);
-                } finally {
-                    RequestContextHolder.resetRequestAttributes();
-                }
-            });
-        } else {
-            logger.warn("当前线程没有RequestContext,无法记录登录信息");
-        }
+    public void insertLog(HttpServletRequest request, Integer tenantId, final String username, final String status, final String message, final Integer deptId) {
+        executorEvent.execute(() -> {
+            try {
+                // 直接使用传入的request参数
+                AsyncFactory.recordLoginInfo(request, tenantId, username, status, message, deptId);
+            } catch (Exception e) {
+                logger.error("记录登录信息异常", e);
+            }
+        });
     }
 }
 

+ 10 - 2
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/HceCategoryListVO.java

@@ -1,7 +1,5 @@
 package com.usky.system.service.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.usky.system.domain.HceCategory;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -51,6 +49,16 @@ public class HceCategoryListVO {
      */
     private Integer categoryId;
 
+    /**
+     * 栏目名称
+     */
+    private String categoryName;
+
+    /**
+     * 栏目排序
+     */
+    private Integer sortindex;
+
     /**
      * 栏目图片;
      */

+ 56 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/MceReceiveResponseVO.java

@@ -0,0 +1,56 @@
+package com.usky.system.service.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/4/8
+ */
+@Data
+public class MceReceiveResponseVO {
+    /**
+     * 消息类型
+     */
+    private String infoType;
+
+    /**
+     * 消息id
+     */
+    private Integer mceId;
+
+    /**
+     * 消息标题
+     */
+    private String infoTitle;
+
+    /**
+     * 消息内容id
+     */
+    private Integer contentId;
+
+    /**
+     * 消息内容
+     */
+    private String infoContent;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 跳转id
+     */
+    private Integer moduleId;
+}

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformMenuVo.java

@@ -36,6 +36,11 @@ public class PlatformMenuVo implements Serializable {
      */
     private String icon;
 
+    /**
+     * 显示顺序
+     */
+    private Integer orderNum;
+
     /**
      * 菜单ID
      */

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformRouterVo.java

@@ -34,6 +34,11 @@ public class PlatformRouterVo {
      */
     private String icon;
 
+    /**
+     * 显示顺序
+     */
+    private Integer orderNum;
+
     /**
      * 路由集合
      */

+ 7 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/RouterVo.java

@@ -42,6 +42,9 @@ public class RouterVo
      */
     private Boolean alwaysShow;
 
+    /** 显示顺序 */
+    private String orderNum;
+
     /**
      * 其他元素
      */
@@ -112,6 +115,10 @@ public class RouterVo
         this.alwaysShow = alwaysShow;
     }
 
+    public String getOrderNum() { return orderNum; }
+
+    public void setOrderNum(String orderNum) { this.orderNum = orderNum; }
+
     public MetaVo getMeta()
     {
         return meta;

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

@@ -33,4 +33,30 @@ public class SendWeChatMessageRequestVO {
      * openId
      */
     String openId;
+
+    /**
+     * ip地址
+     */
+    String ipAddress;
+
+    /**
+     * 登录地址
+     */
+    String loginAddress;
+
+    /**
+     * 登录方式
+     */
+    String loginType;
+
+    /**
+     * 发送人
+     * 登录账号
+     */
+    String userName;
+
+    /**
+     * 审批结果
+     */
+    String approvalResult;
 }

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPlatformVo.java

@@ -51,6 +51,11 @@ public class SysPlatformVo implements Serializable {
      */
     private String icon;
 
+    /**
+     * 显示顺序
+     */
+    private Integer orderNum;
+
     /**
      * 创建者
      */

+ 25 - 9
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/HceCategoryMapper.xml

@@ -28,6 +28,8 @@
                         m.is_frame as isFrame,
                         m.is_cache as isCache,
                         h.id as categoryId,
+                        h.category_name as categoryName,
+                        h.sortindex as sortindex,
                         h.imagePath as imagePath,
                         h.createdate as createdate,
                         h.modifydate as modifydate,
@@ -39,13 +41,16 @@
         where m.menu_type in ('M', 'C')
           and m.visible = 0
           and m.status = 0
-          <if test="categoryName != null">
-              and m.menu_name = #{categoryName}
+          <if test="categoryIdList != null and categoryIdList.size() > 0 ">
+              and h.id in
+              <foreach collection="categoryIdList" item="categoryId" index="index" open="(" close=")" separator=",">
+                  #{categoryId}
+              </foreach>
           </if>
           <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
               and h.createdate between #{startTime} and #{endTime}
           </if>
-        order by m.parent_id, m.order_num
+        order by m.parent_id, h.sortindex
     </select>
     <select id="selectMenuTreeByUserId" resultType="com.usky.system.service.vo.HceCategoryListVO">
         select distinct m.menu_id as menuId,
@@ -56,6 +61,8 @@
                         m.is_frame as isFrame,
                         m.is_cache as isCache,
                         h.id as categoryId,
+                        h.category_name as categoryName,
+                        h.sortindex as sortindex,
                         h.imagePath as imagePath,
                         h.createdate as createdate,
                         h.modifydate as modifydate,
@@ -72,13 +79,16 @@
           and m.visible = 0
           and m.status = 0
           AND ro.status = 0
-        <if test="categoryName != null">
-            and m.menu_name = #{categoryName}
+        <if test="categoryIdList != null and categoryIdList.size() > 0 ">
+            and h.id in
+            <foreach collection="categoryIdList" item="categoryId" index="index" open="(" close=")" separator=",">
+                #{categoryId}
+            </foreach>
         </if>
         <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
             and h.createdate between #{startTime} and #{endTime}
         </if>
-        order by m.parent_id, m.order_num
+        order by m.parent_id, h.sortindex
     </select>
     <select id="selectMenuTreeByUserIdOne" resultType="com.usky.system.service.vo.HceCategoryListVO">
         SELECT
@@ -90,6 +100,8 @@
                     m.is_frame as isFrame,
                     m.is_cache as isCache,
                     h.id as categoryId,
+                    h.category_name as categoryName,
+                    h.sortindex as sortindex,
                     h.imagePath as imagePath,
                     h.createdate as createdate,
                     h.modifydate as modifydate,
@@ -103,13 +115,16 @@
           and m.visible = 0
           and m.status = 0
           AND t.tenant_id=#{tenantId}
-        <if test="categoryName != null">
-            and m.menu_name = #{categoryName}
+        <if test="categoryIdList != null and categoryIdList.size() > 0 ">
+            and h.id in
+            <foreach collection="categoryIdList" item="categoryId" index="index" open="(" close=")" separator=",">
+                #{categoryId}
+            </foreach>
         </if>
         <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
             and h.createdate between #{startTime} and #{endTime}
         </if>
-        ORDER BY m.parent_id, m.order_num
+        ORDER BY m.parent_id, h.sortindex
     </select>
     <select id="getMenuNameList" resultType="com.usky.system.domain.HceCategory">
         SELECT
@@ -120,6 +135,7 @@
                     m.is_frame as isFrame,
                     m.is_cache as isCache,
                     h.id as id,
+                    h.category_name as categoryName,
                     h.imagePath as imagePath,
                     h.createdate as createdate,
                     h.modifydate as modifydate,

+ 2 - 1
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -204,7 +204,7 @@
         order by m.parent_id, m.order_num
     </select>
 
-    <select id="selectMenuTreeByUserId1" parameterType="Long" resultMap="SysMenuResult">
+    <select id="selectMenuTreeByUserId1" parameterType="map" resultMap="SysMenuResult">
         select distinct m.menu_id,
                         m.parent_id,
                         m.menu_name,
@@ -230,6 +230,7 @@
                  left join sys_user u on u.user_id = ur.user_id
                  left join sys_tenant_menu t on u.tenant_id = t.tenant_id
         where u.user_id = #{userId}
+          and ur.tenant_id = #{tenantId}
           and m.menu_type in ('M', 'C')
           and m.status = 0
           AND ro.status = 0

+ 1 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPlatformMapper.xml

@@ -9,6 +9,7 @@
         <result column="status" property="status" />
         <result column="remark" property="remark" />
         <result column="icon" property="icon" />
+        <result column="order_num" property="orderNum" />
         <result column="create_by" property="createBy" />
         <result column="create_time" property="createTime" />
         <result column="update_by" property="updateBy" />

+ 30 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysTenantMapper.xml

@@ -147,6 +147,27 @@
             tenant_id = #{originalTenantId}
         </where>
     </insert>
+    <select id="selectSysUserRoleList" resultType="com.usky.system.domain.SysUserRole">
+        SELECT
+        a.*
+        FROM
+        sys_user_role AS a
+        <where>
+            a.tenant_id = #{originalTenantId} and a.user_id = #{UserId}
+        </where>
+    </select>
+    <insert id="cloneSysRoleMenu">
+        insert into sys_role_menu (role_id,menu_id,menu_alias_name)
+        select  #{roleId},menu_id,menu_alias_name
+        from sys_role_menu
+        <where>
+            role_id = #{originalRoleId}
+        </where>
+    </insert>
+    <insert id="insertSysUserRole">
+        insert into sys_user_role (user_id,role_id,tenant_id)
+        values(#{UserId},#{roleId},#{tenantId})
+    </insert>
 
     <delete id="delSysTenant">
         delete from sys_tenant WHERE id = #{tenantId}
@@ -178,5 +199,14 @@
     <delete id="delSysMobileTenantMenu">
         delete from sys_mobile_tenant_menu where tenant_id = #{tenantId}
     </delete>
+    <delete id="delSysRoleMenu">
+        delete from sys_role_menu where role_id = #{roleId}
+    </delete>
+    <delete id="delSysRole">
+        delete from sys_role where tenant_id = #{tenantId}
+    </delete>
+    <delete id="delSysUserRole">
+        delete from sys_user_role where tenant_id = #{tenantId}
+    </delete>
 
 </mapper>