Browse Source

Merge remote-tracking branch 'origin/dev2' into prod-test

# Conflicts:
#	PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java
lrj 8 tháng trước cách đây
mục cha
commit
45819d10a9
100 tập tin đã thay đổi với 2846 bổ sung401 xóa
  1. 4 4
      PCS/src/main/java/cn/cslg/permission/common/config/WebSocketConfig.java
  2. 13 0
      PCS/src/main/java/cn/cslg/permission/common/core/business/LoginCacheKeyUtil.java
  3. 8 0
      PCS/src/main/java/cn/cslg/permission/common/model/common/SystemDictDTO.java
  4. 36 0
      PCS/src/main/java/cn/cslg/permission/common/model/common/SystemFile.java
  5. 6 23
      PCS/src/main/java/cn/cslg/permission/common/model/dto/AppVipTypeDTO.java
  6. 14 5
      PCS/src/main/java/cn/cslg/permission/common/model/dto/AssoFunctionCodeDTO.java
  7. 4 5
      PCS/src/main/java/cn/cslg/permission/common/model/dto/QueryVersionListDTO.java
  8. 7 7
      PCS/src/main/java/cn/cslg/permission/common/model/dto/QueryVipDTO.java
  9. 1 0
      PCS/src/main/java/cn/cslg/permission/common/model/dto/SendCodeDTO.java
  10. 1 0
      PCS/src/main/java/cn/cslg/permission/common/model/dto/TenantVipTypeFunctionAddNewDTO.java
  11. 2 2
      PCS/src/main/java/cn/cslg/permission/common/model/dto/VersionDTO.java
  12. 10 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/GetQiaoBiPersonDTO.java
  13. 8 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiGetDepartmentDTO.java
  14. 2 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVIPTypeVO.java
  15. 5 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVipTypeDTO.java
  16. 11 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/businessTask/AuditTaskDTO.java
  17. 11 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/businessTask/QueryAuditTaskDTO.java
  18. 27 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/businessTask/QueryAuditTaskVO.java
  19. 18 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/AddTenantByPaidCodeDTO.java
  20. 9 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/CheckPaidCodePhoneCodeDTO.java
  21. 20 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeAddDTO.java
  22. 14 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeQueryDTO.java
  23. 26 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeQueryVO.java
  24. 20 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeReInfoVO.java
  25. 9 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeStatusDTO.java
  26. 10 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/VipTypeNumDTO.java
  27. 11 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/VipTypeNumVO.java
  28. 18 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/CompanyPersonSignUpDTO.java
  29. 20 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/QiaoBiTenantVO.java
  30. 13 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/QueryQiaoBiTenantDTO.java
  31. 18 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/UpdateQiaoBiTenantDTO.java
  32. 13 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/AddFunctionDTO.java
  33. 41 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/QiaoBiVersionVO.java
  34. 8 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/QueryFunctionCodeTreeVO.java
  35. 9 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/VersionStatusDTO.java
  36. 11 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/vipType/QueryVipFunctionDTO.java
  37. 5 13
      PCS/src/main/java/cn/cslg/permission/common/model/vo/AppVipTypeVO.java
  38. 44 0
      PCS/src/main/java/cn/cslg/permission/common/model/vo/DepartmentInfoVO.java
  39. 50 0
      PCS/src/main/java/cn/cslg/permission/common/model/vo/FunctionCodeTreeVO.java
  40. 16 0
      PCS/src/main/java/cn/cslg/permission/common/model/vo/PersonnelUpdateVO.java
  41. 7 0
      PCS/src/main/java/cn/cslg/permission/common/model/vo/PersonnelVO.java
  42. 31 0
      PCS/src/main/java/cn/cslg/permission/common/model/vo/PositionInfoVO.java
  43. 0 3
      PCS/src/main/java/cn/cslg/permission/common/utils/BackupUtils.java
  44. 4 0
      PCS/src/main/java/cn/cslg/permission/common/utils/RandomUtil.java
  45. 32 0
      PCS/src/main/java/cn/cslg/permission/common/utils/web/RequestUtils.java
  46. 13 0
      PCS/src/main/java/cn/cslg/permission/controller/DepartmentController.java
  47. 41 1
      PCS/src/main/java/cn/cslg/permission/controller/PersonnelController.java
  48. 14 0
      PCS/src/main/java/cn/cslg/permission/controller/PositionController.java
  49. 8 1
      PCS/src/main/java/cn/cslg/permission/controller/SystemController.java
  50. 25 4
      PCS/src/main/java/cn/cslg/permission/controller/TenantController.java
  51. 1 4
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/AssoFunctionModuleController.java
  52. 48 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/BusinessTaskController.java
  53. 82 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/PaidCodeController.java
  54. 14 1
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoApplitionController.java
  55. 8 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoBiPersonController.java
  56. 58 24
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VersionController.java
  57. 31 9
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VipTypeController.java
  58. 5 0
      PCS/src/main/java/cn/cslg/permission/domain/Role.java
  59. 11 3
      PCS/src/main/java/cn/cslg/permission/domain/TenantVipType.java
  60. 12 1
      PCS/src/main/java/cn/cslg/permission/domain/Version.java
  61. 6 2
      PCS/src/main/java/cn/cslg/permission/domain/associate/AssoFunctionModule.java
  62. 24 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPaidCodeRegistInfo.java
  63. 25 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPaidCodeVipType.java
  64. 22 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoTenantVipType.java
  65. 26 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoVersionFunction.java
  66. 35 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/BusinessTask.java
  67. 24 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/EnterpriseCode.java
  68. 28 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/PaidCode.java
  69. 41 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/RegistInformation.java
  70. 3 1
      PCS/src/main/java/cn/cslg/permission/mapper/AssoTenantVipTypeFunctionMapper.java
  71. 3 0
      PCS/src/main/java/cn/cslg/permission/mapper/PersonnelMapper.java
  72. 4 0
      PCS/src/main/java/cn/cslg/permission/mapper/TenantMapper.java
  73. 0 1
      PCS/src/main/java/cn/cslg/permission/mapper/TenantVipTypeMapper.java
  74. 4 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AppVipTypeMapper.java
  75. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoPaidCodeRegistInfoMapper.java
  76. 22 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoPaidCodeVipTypeMapper.java
  77. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoTenantVipTypeMapper.java
  78. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoVersionFunctionMapper.java
  79. 23 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/BusinessTaskMapper.java
  80. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/EnterpriseCodeMapper.java
  81. 25 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/PaidCodeMapper.java
  82. 20 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/RegistInformationMapper.java
  83. 7 0
      PCS/src/main/java/cn/cslg/permission/service/ApplicationService.java
  84. 99 0
      PCS/src/main/java/cn/cslg/permission/service/AssoTenantVipTypeFunctionService.java
  85. 2 2
      PCS/src/main/java/cn/cslg/permission/service/ClientService.java
  86. 39 0
      PCS/src/main/java/cn/cslg/permission/service/DepartmentService.java
  87. 156 4
      PCS/src/main/java/cn/cslg/permission/service/FunctionService.java
  88. 32 0
      PCS/src/main/java/cn/cslg/permission/service/LoginService.java
  89. 183 5
      PCS/src/main/java/cn/cslg/permission/service/PersonnelService.java
  90. 47 1
      PCS/src/main/java/cn/cslg/permission/service/PositionService.java
  91. 73 2
      PCS/src/main/java/cn/cslg/permission/service/RoleService.java
  92. 30 7
      PCS/src/main/java/cn/cslg/permission/service/SystemService.java
  93. 1 0
      PCS/src/main/java/cn/cslg/permission/service/TenantService.java
  94. 251 104
      PCS/src/main/java/cn/cslg/permission/service/VersionService.java
  95. 0 74
      PCS/src/main/java/cn/cslg/permission/service/associate/AssoFunctionModuleService.java
  96. 45 27
      PCS/src/main/java/cn/cslg/permission/service/impl/TenantVipTypeService.java
  97. 51 0
      PCS/src/main/java/cn/cslg/permission/service/outSideApi/FileManagerService.java
  98. 126 61
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AppVipTypeService.java
  99. 279 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoFunctionModuleService.java
  100. 0 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPaidCodeRegistInfoService.java

+ 4 - 4
PCS/src/main/java/cn/cslg/permission/common/config/WebSocketConfig.java

@@ -6,8 +6,8 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
-    @Bean
-    public ServerEndpointExporter serverEndpointExporter() {
-        return new ServerEndpointExporter();
-    }
+//    @Bean
+//    public ServerEndpointExporter serverEndpointExporter() {
+//        return new ServerEndpointExporter();
+//    }
 }

+ 13 - 0
PCS/src/main/java/cn/cslg/permission/common/core/business/LoginCacheKeyUtil.java

@@ -19,6 +19,8 @@ public class LoginCacheKeyUtil {
     public final static String PHONE_LOGIN = "PHONELOGIN";
 
     public final static String LOGIN_CAPTCHA  = "LOGIN_CAPTCHA";
+     public  final static  String PAID_CODE= "PAID_CODE";
+    private final  static String PHONE_CODE_TOKEN="PAID_CODE_TOKEN";
 
     /*
      * 获取用户手机号缓存key
@@ -32,4 +34,15 @@ public class LoginCacheKeyUtil {
         return builder.toString();
     }
 
+    public static String getPaidCodeCaptcha(String phoneNo) {
+        StringBuilder builder = new StringBuilder(prefix + SEPARATOR + PAID_CODE + SEPARATOR)
+                .append(phoneNo);
+        return builder.toString();
+    }
+
+    public static  String getPhoneCodeTokenPrefix(String paidCode){
+        StringBuilder builder = new StringBuilder(prefix + SEPARATOR + PHONE_CODE_TOKEN + SEPARATOR)
+                .append(paidCode);
+        return builder.toString();
+    }
 }

+ 8 - 0
PCS/src/main/java/cn/cslg/permission/common/model/common/SystemDictDTO.java

@@ -0,0 +1,8 @@
+package cn.cslg.permission.common.model.common;
+
+import lombok.Data;
+
+@Data
+public class SystemDictDTO {
+    private String type;
+}

+ 36 - 0
PCS/src/main/java/cn/cslg/permission/common/model/common/SystemFile.java

@@ -0,0 +1,36 @@
+package cn.cslg.permission.common.model.common;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 系统文件实体类
+ *
+ * @Author xiexiang
+ * @Date 2023/6/1
+ */
+@Data
+
+public class SystemFile  {
+    /**
+     * 文件guid
+     */
+    private String guid;
+
+    /**
+     * 文件名称
+     */
+    private String fileName;
+
+    /**
+     * 原始名称
+     */
+    private String originalName;
+
+    /**
+     * 文件类型
+     */
+    private String type;
+}

+ 6 - 23
PCS/src/main/java/cn/cslg/permission/common/model/dto/AppVipTypeDTO.java

@@ -3,6 +3,7 @@ package cn.cslg.permission.common.model.dto;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author xiexiang
@@ -18,19 +19,14 @@ public class AppVipTypeDTO {
     private String applicationCode;
 
     /**
-     * 会员类型id
-     */
-    private Integer tenantVipTypeId;
-
-    /**
      * 持续时长 月
      */
     private Integer lastTime;
 
     /**
-     * 租户会员类型名称
+     * 会员类型名称
      */
-    private String tenantVipName;
+    private String vipTypeName;
     /**
      * 备注
      */
@@ -39,20 +35,7 @@ public class AppVipTypeDTO {
      * 是否启用
      */
     private Integer enable;
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-    /**
-     * 创建人ID
-     */
-    private Integer createPersonId;
-    /**
-     * 创建人姓名
-     */
-    private String createPersonName;
-    /**
-     * 应用会员设置为1
-     */
-    private Integer useType;
+
+    private List<Integer> functionIds;
+
 }

+ 14 - 5
PCS/src/main/java/cn/cslg/permission/common/model/dto/AssoFunctionCodeDTO.java

@@ -2,6 +2,8 @@ package cn.cslg.permission.common.model.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @Author xiexiang
  * @Date 2024/11/27
@@ -9,9 +11,16 @@ import lombok.Data;
 @Data
 public class AssoFunctionCodeDTO {
     private Integer functionId;
-    private String code;
-    /**
-     * 是否授权(1未授权 2授权)
-     */
-    private Integer authType;
+    private List<FunctionCode> functionCodes;
+    private  Integer operateType;
+    @Data
+    public static class FunctionCode {
+
+        private String code;
+        /**
+         * 是否授权(1未授权 2授权)
+         */
+        private Integer authType;
+
+    }
 }

+ 4 - 5
PCS/src/main/java/cn/cslg/permission/common/model/dto/QueryVersionListDTO.java

@@ -2,6 +2,8 @@ package cn.cslg.permission.common.model.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @Author xiexiang
  * @Date 2024/11/20
@@ -11,13 +13,14 @@ public class QueryVersionListDTO {
     /**
      * 版本号
      */
+    private List<Integer> ids;
     private String versionNum;
 
     /**
      * 版本名称
      */
     private String versionName;
-
+    private Integer status;
     /**
      * 每页条数
      */
@@ -28,8 +31,4 @@ public class QueryVersionListDTO {
      */
     private Long size;
 
-    /**
-     * 数据总数
-     */
-    private Integer total;
 }

+ 7 - 7
PCS/src/main/java/cn/cslg/permission/common/model/dto/QueryVipDTO.java

@@ -2,6 +2,8 @@ package cn.cslg.permission.common.model.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @Author xiexiang
  * @Date 2024/11/20
@@ -11,19 +13,17 @@ public class QueryVipDTO {
     /**
      * 模糊查询检索条件
      */
-    private String vipName;
+    private List<Integer> ids;
+    private String vipTypeName;
+    private Integer enable;
     /**
      * 每页条数
      */
-    private Long pageSize;
+    private Long current;
 
     /**
      * 当前页数
      */
-    private Long pageNum;
+    private Long size;
 
-    /**
-     * 数据总数
-     */
-    private Integer total;
 }

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/common/model/dto/SendCodeDTO.java

@@ -9,4 +9,5 @@ public class SendCodeDTO {
     //手机号
     @NotBlank
     private String phoneNum;
+    private String paidCode;
 }

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/common/model/dto/TenantVipTypeFunctionAddNewDTO.java

@@ -15,6 +15,7 @@ import java.util.List;
 @Accessors(chain = true)
 @Data
 public class TenantVipTypeFunctionAddNewDTO implements Serializable {
+    private Integer id;
     /**
      * 会员名称
      */

+ 2 - 2
PCS/src/main/java/cn/cslg/permission/common/model/dto/VersionDTO.java

@@ -44,7 +44,7 @@ public class VersionDTO {
     private List<AssoFunctionCodeDTO> assoFunctionCodeDTOS;
 
     /**
-     * 创建人id
+     * 版本状态,1已保存,2调试,3已发布
      */
-    private Integer createUser;
+    private Integer status;
 }

+ 10 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/GetQiaoBiPersonDTO.java

@@ -0,0 +1,10 @@
+package cn.cslg.permission.common.model.qiaobi;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class GetQiaoBiPersonDTO {
+    private Date expitrTime;
+}

+ 8 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiGetDepartmentDTO.java

@@ -0,0 +1,8 @@
+package cn.cslg.permission.common.model.qiaobi;
+
+import lombok.Data;
+
+@Data
+public class QiaoBiGetDepartmentDTO {
+    private String enterpriseCode;
+}

+ 2 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVIPTypeVO.java

@@ -6,4 +6,6 @@ import lombok.Data;
 public class QiaoBiVIPTypeVO {
     private Integer vipTypeId;
     private String vipTypeName;
+    private Integer vipTypeNum;
+    private Integer tenantId;
 }

+ 5 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVipTypeDTO.java

@@ -5,9 +5,14 @@ import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.util.List;
+
 
 @Data
 public class QiaoBiVipTypeDTO {
 private String vipTypeName;
 private String appCode;
+private Integer tenantId;
+private String enterpriseCode;
+private List<Integer> tenantIds;
 }

+ 11 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/businessTask/AuditTaskDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.permission.common.model.qiaobi.businessTask;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AuditTaskDTO {
+    private List<Integer> taskIds;
+    private Integer result;
+}

+ 11 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/businessTask/QueryAuditTaskDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.permission.common.model.qiaobi.businessTask;
+
+import lombok.Data;
+
+@Data
+public class QueryAuditTaskDTO {
+   private Integer status;
+   private  Integer type;
+   private Integer auditResult;
+   private Integer tenantId;
+}

+ 27 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/businessTask/QueryAuditTaskVO.java

@@ -0,0 +1,27 @@
+package cn.cslg.permission.common.model.qiaobi.businessTask;
+
+import cn.hutool.core.date.DateTime;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryAuditTaskVO {
+   private Integer departMentId;
+   private String  departMentName;
+   private Integer positionId;
+   private String  positionName;
+   private String personnelName;
+   private String personnelPhone;
+   private String personnelEmail;
+   private String personnelUserName;
+   private String  personnelPassword;
+   private Integer status;
+   private String auditResult;
+   private Integer handleId;
+   private String handleName;
+   private Date createTime;
+   private Integer createId;
+   private String createName;
+   private Integer type;
+}

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/AddTenantByPaidCodeDTO.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+@Data
+public class AddTenantByPaidCodeDTO {
+    private String tenantName;
+    private Integer tenantType;
+    private String tenantAddress;
+    private String personnelName;
+    private String personnelPhone;
+    private String personnelEmail;
+    private String personnelUserName;
+    private String personnelPassword;
+    private Integer id;
+    private String remark;
+    private String token;
+}

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/CheckPaidCodePhoneCodeDTO.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+@Data
+public class CheckPaidCodePhoneCodeDTO {
+    private String paidCode;
+    private String phoneCode;
+}

+ 20 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeAddDTO.java

@@ -0,0 +1,20 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PaidCodeAddDTO {
+    private List<VipTypeNumDTO> vipTypes;
+    private String tenantName;
+    private Integer tenantType;
+    private String tenantAddress;
+    private String personnelName;
+    private String personnelPhone;
+    private String personnelEmail;
+    private String personnelUserName;
+    private String personnelPassword;
+    private Integer id;
+    private String remark;
+}

+ 14 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeQueryDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PaidCodeQueryDTO {
+private List<Integer> ids;
+private Long current;
+private Long size;
+private String personnelPhone;
+private Integer status;
+}

+ 26 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeQueryVO.java

@@ -0,0 +1,26 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PaidCodeQueryVO {
+    private List<VipTypeNumVO> vipTypes;
+    private String tenantName;
+    private Integer tenantType;
+    private String tenantAddress;
+    private String personnelName;
+    private String personnelPhone;
+    private String personnelEmail;
+    private String personnelUserName;
+    private String personnelPassword;
+    private String createName;
+    private Integer createId;
+    private Date createTime;
+    private Integer id;
+    private String code;
+    private Integer status;
+    private String remark;
+}

+ 20 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeReInfoVO.java

@@ -0,0 +1,20 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PaidCodeReInfoVO {
+    private String tenantName;
+    private Integer tenantType;
+    private String tenantAddress;
+    private String personnelName;
+    private String personnelPhone;
+    private String personnelEmail;
+    private String personnelUserName;
+    private String personnelPassword;
+    private Integer id;
+    private String remark;
+    private String token;
+}

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/PaidCodeStatusDTO.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+@Data
+public class PaidCodeStatusDTO {
+    private Integer id;
+    private Integer status;
+}

+ 10 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/VipTypeNumDTO.java

@@ -0,0 +1,10 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+@Data
+public class VipTypeNumDTO {
+    private Integer vipTypeId;
+    private Integer vipTypeNum;
+
+}

+ 11 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/paidCode/VipTypeNumVO.java

@@ -0,0 +1,11 @@
+package cn.cslg.permission.common.model.qiaobi.paidCode;
+
+import lombok.Data;
+
+@Data
+public class VipTypeNumVO {
+    private Integer vipTypeId;
+    private Integer paidCodeId;
+    private Integer vipTypeNum;
+    private String vipTypeName;
+}

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/CompanyPersonSignUpDTO.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.common.model.qiaobi.tenant;
+
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.Data;
+
+@Data
+public class CompanyPersonSignUpDTO {
+   private String enterpriseCode;
+   private Integer departMentId;
+   private Integer positionId;
+   private String personnelName;
+   private String  personnelPhone;
+   private String personnelEmail;
+   private String personnelUserName;
+    private String  personnelPassword;
+    private String phoneCode;
+    private String  vipTypeId;
+}

+ 20 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/QiaoBiTenantVO.java

@@ -0,0 +1,20 @@
+package cn.cslg.permission.common.model.qiaobi.tenant;
+
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QiaoBiTenantVO {
+    private String address;
+    private String name;
+    private String describe;
+    private Integer id;
+    private Integer number;
+    private Integer state;
+    private Integer type;
+    private String userName;
+    private String email;
+   private List<QiaoBiVIPTypeVO> vipTypes;
+}

+ 13 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/QueryQiaoBiTenantDTO.java

@@ -0,0 +1,13 @@
+package cn.cslg.permission.common.model.qiaobi.tenant;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QueryQiaoBiTenantDTO {
+    private String name;
+    private List<Integer> ids;
+    private Long current;
+    private Long size;
+}

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/tenant/UpdateQiaoBiTenantDTO.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.common.model.qiaobi.tenant;
+
+import cn.cslg.permission.common.model.qiaobi.paidCode.VipTypeNumDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateQiaoBiTenantDTO {
+    private Integer tenantId;
+    private String name;
+    private String describe;
+    private String number;
+    private Integer state;
+    private String type;
+    private String address;
+    private List<VipTypeNumDTO> vipTypes;
+}

+ 13 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/AddFunctionDTO.java

@@ -0,0 +1,13 @@
+package cn.cslg.permission.common.model.qiaobi.version;
+
+import lombok.Data;
+
+@Data
+public class AddFunctionDTO {
+    private String name;
+    private Integer function;
+    private String applicationCode;
+    private String sign;
+    private String path;
+    private String describe;
+}

+ 41 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/QiaoBiVersionVO.java

@@ -0,0 +1,41 @@
+package cn.cslg.permission.common.model.qiaobi.version;
+
+import cn.cslg.permission.common.model.common.SystemFile;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QiaoBiVersionVO {
+    private Integer id;
+
+    /**
+     * 版本名称
+     */
+    private String versionName;
+
+    /**
+     * 版本号
+     */
+    private String versionNum;
+
+    /**
+     * /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 应用唯一标识符
+     */
+    private Integer status;
+    /**
+     * 创建人
+     */
+    private Integer createId;
+
+    private Date createTime;
+    private Date publishTime;
+    private String createName;
+    private SystemFile systemFile;
+}

+ 8 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/QueryFunctionCodeTreeVO.java

@@ -0,0 +1,8 @@
+package cn.cslg.permission.common.model.qiaobi.version;
+
+import lombok.Data;
+
+@Data
+public class QueryFunctionCodeTreeVO {
+    private Integer versionId;
+}

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/version/VersionStatusDTO.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.common.model.qiaobi.version;
+
+import lombok.Data;
+
+@Data
+public class VersionStatusDTO {
+    private Integer id;
+    private Integer status;
+}

+ 11 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/vipType/QueryVipFunctionDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.permission.common.model.qiaobi.vipType;
+
+import lombok.Data;
+
+@Data
+public class QueryVipFunctionDTO {
+    private String applicationCode;
+    private Integer vipTypeId;
+    private Boolean ifAll;
+
+}

+ 5 - 13
PCS/src/main/java/cn/cslg/permission/common/model/vo/AppVipTypeVO.java

@@ -16,16 +16,6 @@ public class AppVipTypeVO {
     private Integer id;
 
     /**
-     * 应用代码
-     */
-    private String applicationCode;
-
-    /**
-     * 会员类型id
-     */
-    private Integer tenantVipTypeId;
-
-    /**
      * 持续时长 月
      */
     private Integer lastTime;
@@ -33,7 +23,7 @@ public class AppVipTypeVO {
     /**
      * 租户会员类型名称
      */
-    private String tenantVipName;
+    private String vipTypeName;
     /**
      * 备注
      */
@@ -41,11 +31,13 @@ public class AppVipTypeVO {
     /**
      * 创建人ID
      */
-    private Integer createPersonId;
+    private Integer createId;
+
+    private Integer enable;
     /**
      * 创建人姓名
      */
-    private String createPersonName;
+    private String createName;
     /**
      * 创建时间
      */

+ 44 - 0
PCS/src/main/java/cn/cslg/permission/common/model/vo/DepartmentInfoVO.java

@@ -0,0 +1,44 @@
+package cn.cslg.permission.common.model.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/11
+ */
+@Data
+public class DepartmentInfoVO {
+
+    private Integer id;
+    /**
+     * 部门名称
+     */
+    private String name;
+
+    /**
+     * 部门描述
+     */
+    private String remark;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenant;
+
+    /**
+     * 租户名称
+     */
+    private String tenantName;
+
+    /**
+     * 部门树路径
+     */
+    private String path;
+
+    private List<Integer> role;
+
+    private List<RoleVO> roleList;
+}

+ 50 - 0
PCS/src/main/java/cn/cslg/permission/common/model/vo/FunctionCodeTreeVO.java

@@ -0,0 +1,50 @@
+package cn.cslg.permission.common.model.vo;
+
+
+import cn.cslg.permission.domain.associate.AssoFunctionModule;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FunctionCodeTreeVO {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * Front:功能名称
+     * Back:功能权限名称
+     */
+    private String name;
+
+    /**
+     * Front:功能描述
+     * Back:功能权限描述
+     */
+    private String describe;
+
+    /**
+     * Front:所属功能
+     * Back:功能权限(上级)
+     */
+    private Integer function;
+
+
+    /**
+     * Front:功能标识
+     * Back:功能权限对应功能
+     */
+    private String sign;
+
+    /**
+     * 功能树路径
+     */
+    private String path;
+
+    private List<AssoFunctionModule> functionCodes;
+
+    private List<FunctionCodeTreeVO> children;
+    private Integer isSelect;
+}

+ 16 - 0
PCS/src/main/java/cn/cslg/permission/common/model/vo/PersonnelUpdateVO.java

@@ -0,0 +1,16 @@
+package cn.cslg.permission.common.model.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/16
+ */
+@Data
+public class PersonnelUpdateVO {
+    private Integer id;
+
+    private Date expitrTime;
+}

+ 7 - 0
PCS/src/main/java/cn/cslg/permission/common/model/vo/PersonnelVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -225,4 +226,10 @@ public class PersonnelVO extends BaseVO {
      */
     private List<Integer> positionIds;
 
+    private Integer vipTypeId;
+
+    private Date expitrTime;
+
+    private String vipTypeName;
+
 }

+ 31 - 0
PCS/src/main/java/cn/cslg/permission/common/model/vo/PositionInfoVO.java

@@ -0,0 +1,31 @@
+package cn.cslg.permission.common.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/12
+ */
+@Data
+public class PositionInfoVO {
+
+    private Integer id;
+
+    private String position;
+
+    private Integer tenant;
+
+    private String tenantName;
+
+    private Integer updepartment;
+
+    private String describe;
+
+    private Integer ismore;
+
+    private List<Integer> role;
+
+    private List<RoleVO> roleList;
+}

+ 0 - 3
PCS/src/main/java/cn/cslg/permission/common/utils/BackupUtils.java

@@ -34,9 +34,6 @@ public class BackupUtils {
         }
     }
 
-    public static void main(String[] args) {
-        System.out.println(getBackupConfig());
-    }
 
     public void run() {
         Backup backup = getBackupConfig();

+ 4 - 0
PCS/src/main/java/cn/cslg/permission/common/utils/RandomUtil.java

@@ -2,6 +2,7 @@ package cn.cslg.permission.common.utils;
 
 import java.security.SecureRandom;
 import java.util.Random;
+import java.util.UUID;
 
 public class RandomUtil {
 
@@ -55,4 +56,7 @@ public class RandomUtil {
 
         return codeBuilder.toString();
     }
+    public static  String getOnlyCode(){
+      return   UUID.randomUUID().toString().replace("-","");
+    }
 }

+ 32 - 0
PCS/src/main/java/cn/cslg/permission/common/utils/web/RequestUtils.java

@@ -0,0 +1,32 @@
+package cn.cslg.permission.common.utils.web;
+
+import cn.cslg.permission.common.core.base.RedisConf;
+import cn.cslg.permission.common.model.vo.PersonnelVO;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.dev33.satoken.exception.NotLoginException;
+import com.alibaba.fastjson2.JSONObject;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@Component
+public class RequestUtils {
+
+
+    public static String getHeader(String header) {
+        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
+        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
+        HttpServletRequest httpRequest = sra.getRequest();
+        String tem = httpRequest.getHeader(header);
+        return tem;
+    }
+
+    public static String getApplicationHeader() {
+        return RequestUtils.getHeader("applicationCode");
+    }
+}

+ 13 - 0
PCS/src/main/java/cn/cslg/permission/controller/DepartmentController.java

@@ -1,6 +1,7 @@
 package cn.cslg.permission.controller;
 
 import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiGetDepartmentDTO;
 import cn.cslg.permission.common.model.vo.DepartmentVO;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.auth.checkAuth;
@@ -64,4 +65,16 @@ public class DepartmentController {
         return departmentService.getTenantDepartments();
     }
 
+    @GetMapping("/queryDepartmentInfo")
+    @Operation(summary = "查询部门信息")
+    public String queryDepartmentInfo(Integer id) {
+        return departmentService.queryDepartmentById(id);
+    }
+
+    @PostMapping("/getDepartmentListByCode")
+    @Operation(summary = "查询部门列表")
+    public String getDepartmentListByCode(@RequestBody QiaoBiGetDepartmentDTO qiaoBiGetDepartmentDTO) {
+        return departmentService.getDepartmentListByCode(qiaoBiGetDepartmentDTO);
+    }
+
 }

+ 41 - 1
PCS/src/main/java/cn/cslg/permission/controller/PersonnelController.java

@@ -2,11 +2,15 @@ package cn.cslg.permission.controller;
 
 import cn.cslg.permission.common.core.base.Constants;
 import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.qiaobi.GetQiaoBiPersonDTO;
+import cn.cslg.permission.common.model.vo.PersonnelUpdateVO;
 import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.auth.checkAuth;
 import cn.cslg.permission.domain.Personnel;
+import cn.cslg.permission.domain.qiaobi.AssoPersonVipType;
 import cn.cslg.permission.service.PersonnelService;
+import cn.cslg.permission.service.qiaobi.AssoPersonVipTypeService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -27,7 +31,7 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class PersonnelController {
     private final PersonnelService personnelService;
-
+    private final AssoPersonVipTypeService assoPersonVipTypeService;
     @checkAuth(FunId = "/admin/user/add")
     @PostMapping("/add")
     @Operation(summary = "新增人员")
@@ -76,6 +80,13 @@ public class PersonnelController {
 
     }
 
+    @checkAuth(FunId = "/admin/user/check")
+    @PostMapping("/queryPageList2")
+    @Operation(summary = "分页查询人员")
+    public String queryPageList2(@RequestBody PersonnelVO personnelVO) {
+        return personnelService.queryPageList2(personnelVO);
+    }
+
 
     @PostMapping("/queryPageListNoAdmin")
     @Operation(summary = "分页查询人员")
@@ -137,5 +148,34 @@ public class PersonnelController {
         return Response.success();
     }
 
+    @GetMapping("/updateState")
+    @Operation(summary = "启用、禁用人员")
+    public String updateState(Integer id, Integer state) {
+        Boolean isSuccess = personnelService.updateState(id, state);
+        if (isSuccess) {
+            return Response.success();
+        } else {
+            return Response.error();
+        }
+    }
+    @PostMapping("/getExpirePersons")
+    @Operation(summary = "查询过期人员")
+    public String getExpirePersons(@RequestBody GetQiaoBiPersonDTO getQiaoBiPersonDTO) {
+        getQiaoBiPersonDTO=new GetQiaoBiPersonDTO();
+        List<PersonnelVO> personnelVOS = personnelService.getExpirePersons(getQiaoBiPersonDTO);
+            return Response.success(personnelVOS);
+
+    }
+
+    @PostMapping("/updateExpitrTime")
+    @Operation(summary = "更新到期时间")
+    public String updateExpitrTime(@RequestBody PersonnelUpdateVO personnelUpdateVO) {
+        Boolean isSuccess = assoPersonVipTypeService.updateExpitrTime(personnelUpdateVO);
+        if (isSuccess) {
+            return Response.success();
+        } else {
+            return Response.error();
+        }
+    }
 
 }

+ 14 - 0
PCS/src/main/java/cn/cslg/permission/controller/PositionController.java

@@ -1,6 +1,7 @@
 package cn.cslg.permission.controller;
 
 import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiGetDepartmentDTO;
 import cn.cslg.permission.common.model.vo.PositionVO;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.auth.checkAuth;
@@ -53,4 +54,17 @@ public class PositionController {
     public String getPositionList() {
         return positionService.getPositionList();
     }
+
+    @GetMapping("/queryPositionInfo")
+    @Operation(summary = "查询职位信息")
+    public String queryPositionInfo(Integer id) {
+        return positionService.queryPositionById(id);
+    }
+
+    @PostMapping("/getPositionListByCode")
+    @Operation(summary = "查询所有职位")
+    public String getPositionListByCode(@RequestBody QiaoBiGetDepartmentDTO qiaoBiGetDepartmentDTO) {
+        return positionService.getPositionListByCode(qiaoBiGetDepartmentDTO);
+    }
+
 }

+ 8 - 1
PCS/src/main/java/cn/cslg/permission/controller/SystemController.java

@@ -2,6 +2,7 @@ package cn.cslg.permission.controller;
 
 import cn.cslg.permission.common.config.MailConstants;
 import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.common.SystemDictDTO;
 import cn.cslg.permission.common.model.dto.PasUserDTO;
 import cn.cslg.permission.common.model.vo.DepartmentVO;
 import cn.cslg.permission.common.model.vo.EntrustVO;
@@ -43,10 +44,16 @@ public class SystemController {
 
     @GetMapping("/getDict")
     @Operation(summary = "获取字典项")
-    public String getDict() {
+    public String getDict( ) {
         return systemService.getDict();
     }
 
+
+    @PostMapping("/getSysDict")
+    @Operation(summary = "获取字典项")
+    public String getSysDict(@RequestBody SystemDictDTO systemDictDTO) {
+        return systemService.getSysDict(systemDictDTO);
+    }
     @GetMapping("/getPermissionList")
     @Operation(summary = "获取用户权限")
     public String getPermissionList(String code) {

+ 25 - 4
PCS/src/main/java/cn/cslg/permission/controller/TenantController.java

@@ -1,15 +1,17 @@
 package cn.cslg.permission.controller;
 
 import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.qiaobi.tenant.UpdateQiaoBiTenantDTO;
+import cn.cslg.permission.common.model.qiaobi.tenant.QueryQiaoBiTenantDTO;
 import cn.cslg.permission.common.model.vo.TenantVO;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.auth.checkAuth;
 import cn.cslg.permission.domain.Invitation;
 import cn.cslg.permission.domain.Tenant;
-import cn.cslg.permission.domain.sys.SysDictItem;
 import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.service.TenantService;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import cn.cslg.permission.service.qiaobi.QiaoBiTenantService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -26,7 +28,7 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class TenantController {
     private final TenantService tenantService;
-
+    private final QiaoBiTenantService qiaoBiTenantService;
     @checkAuth(FunId = "/admin/client/add")
     @PostMapping("/add")
     @Operation(summary = "新增租户")
@@ -39,7 +41,7 @@ public class TenantController {
         }
     }
 
-    @PostMapping("/addByInvitation")
+
     @Operation(summary = "根据邀请码添加租户")
     public String addByInvitation(@RequestBody TenantVO tenantVo) {
         try {
@@ -116,4 +118,23 @@ public class TenantController {
         return Response.success(tenantService.getAdminEmailPersons());
     }
 
+    @Operation(summary = "更新租户vip")
+    @PostMapping("/updateTenantVip")
+    public String updateTenantVip(@RequestBody UpdateQiaoBiTenantDTO updateTenantVipDTO) {
+
+        return Response.success(tenantService.getAdminEmailPersons());
+    }
+
+    @Operation(summary = "查询窍笔租户")
+    @PostMapping("/queryQiaoBiTenant")
+    public String queryQiaoBiTenant(@RequestBody QueryQiaoBiTenantDTO queryQiaoBiTenantDTO) {
+       Records records=qiaoBiTenantService.queryQiaoBiTenants(queryQiaoBiTenantDTO);
+        return Response.success(records);
+    }
+    @Operation(summary = "更新窍笔租户")
+    @PostMapping("/updateQiaoBiTenant")
+    public String updateQiaoBiTenant(@RequestBody UpdateQiaoBiTenantDTO updateQiaoBiTenantDTO) {
+      qiaoBiTenantService.updateQiaoBiTenant(updateQiaoBiTenantDTO);
+        return Response.success(true);
+    }
 }

+ 1 - 4
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/AssoFunctionModuleController.java

@@ -2,12 +2,9 @@ package cn.cslg.permission.controller.qiaobi;
 
 import cn.cslg.permission.common.core.base.Constants;
 import cn.cslg.permission.common.model.Records;
-import cn.cslg.permission.common.model.dto.AppVipTypeDTO;
-import cn.cslg.permission.common.model.dto.AssoFunctionModuleDTO;
 import cn.cslg.permission.common.model.dto.AssoFunctionModuleUpdateDTO;
-import cn.cslg.permission.common.model.dto.QueryVipDTO;
 import cn.cslg.permission.common.utils.Response;
-import cn.cslg.permission.service.associate.AssoFunctionModuleService;
+import cn.cslg.permission.service.qiaobi.AssoFunctionModuleService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;

+ 48 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/BusinessTaskController.java

@@ -0,0 +1,48 @@
+package cn.cslg.permission.controller.qiaobi;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.dto.SendCodeDTO;
+import cn.cslg.permission.common.model.qiaobi.businessTask.AuditTaskDTO;
+import cn.cslg.permission.common.model.qiaobi.businessTask.QueryAuditTaskDTO;
+import cn.cslg.permission.common.model.qiaobi.businessTask.QueryAuditTaskVO;
+import cn.cslg.permission.common.model.qiaobi.paidCode.*;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.service.VersionService;
+import cn.cslg.permission.service.qiaobi.BusinessTaskService;
+import cn.cslg.permission.service.qiaobi.PaidCodeService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author lrj
+ * @Date 2024/12/09
+ */
+@Slf4j
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/businessTask")
+public class BusinessTaskController {
+    @Autowired
+    private BusinessTaskService businessTaskService;
+
+    @Operation(summary = "查询审核任务")
+    @PostMapping("/queryAuditTask")
+    public String queryAuditTask(@RequestBody QueryAuditTaskDTO queryAuditTaskDTO) {
+        List<QueryAuditTaskVO> queryAuditTaskDTOList = businessTaskService.queryAuditTask(queryAuditTaskDTO);
+        return Response.success(queryAuditTaskDTOList);
+    }
+
+    @Operation(summary = "审核任务")
+    @PostMapping("/auditTask")
+    public String auditTask(@RequestBody AuditTaskDTO auditTaskDTO) {
+        businessTaskService.auditTasks(auditTaskDTO);
+        return Response.success(true);
+    }
+}

+ 82 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/PaidCodeController.java

@@ -0,0 +1,82 @@
+package cn.cslg.permission.controller.qiaobi;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.dto.QueryVersionListDTO;
+import cn.cslg.permission.common.model.dto.SendCodeDTO;
+import cn.cslg.permission.common.model.dto.VersionDTO;
+import cn.cslg.permission.common.model.qiaobi.paidCode.*;
+import cn.cslg.permission.common.model.qiaobi.version.AddFunctionDTO;
+import cn.cslg.permission.common.model.qiaobi.version.QiaoBiVersionVO;
+import cn.cslg.permission.common.model.qiaobi.version.QueryFunctionCodeTreeVO;
+import cn.cslg.permission.common.model.qiaobi.version.VersionStatusDTO;
+import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
+import cn.cslg.permission.common.model.vo.FunctionVO;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.common.utils.web.RequestUtils;
+import cn.cslg.permission.service.VersionService;
+import cn.cslg.permission.service.qiaobi.AssoFunctionModuleService;
+import cn.cslg.permission.service.qiaobi.PaidCodeService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author lrj
+ * @Date 2024/12/09
+ */
+@Slf4j
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/paidCode")
+public class PaidCodeController {
+    @Autowired
+    private VersionService versionService;
+    @Autowired
+    private PaidCodeService paidCodeService;
+
+    @Operation(summary = "添加付款码")
+    @PostMapping("/add")
+    public String add(@RequestBody PaidCodeAddDTO paidCodeAddDTO) {
+       String code=   paidCodeService.addPaidCode(paidCodeAddDTO);
+        return Response.success(code);
+    }
+    @Operation(summary = "修改付款码")
+    @PostMapping("/update")
+    public String update(@RequestBody PaidCodeAddDTO paidCodeAddDTO) {
+        String code = paidCodeService.updatePaidCode(paidCodeAddDTO);
+        return Response.success(code);
+    }
+
+    @Operation(summary = "修改付款码状态")
+    @PostMapping("/updateStatus")
+    public String updateStatus(@RequestBody PaidCodeStatusDTO paidCodeStatusDTO) {
+        String code = paidCodeService.updatePaidCodeStatus(paidCodeStatusDTO);
+        return Response.success(code);
+    }
+
+    @Operation(summary = "查询付款码列表")
+    @PostMapping("/queryList")
+    public String queryList(@RequestBody PaidCodeQueryDTO paidCodeQueryDTO) {
+        Records records = paidCodeService.queryPaidCodeList(paidCodeQueryDTO);
+        return Response.success(records);
+    }
+    @Operation(summary = "根据付费码发送手机验证码")
+    @PostMapping("/sendPhoneCode")
+    public String sendPhoneCode(@RequestBody SendCodeDTO sendCodeDTO) {
+        String result = paidCodeService.sendPhoneCode(sendCodeDTO);
+        return Response.success(result);
+    }
+
+    @Operation(summary = "验证付费码")
+    @PostMapping("/checkPhoneCode")
+    public String checkPhoneCode(@RequestBody CheckPaidCodePhoneCodeDTO checkPaidCodePhoneCodeDTO) {
+        PaidCodeReInfoVO paidCodeReInfoVO = paidCodeService.checkPhoneCode(checkPaidCodePhoneCodeDTO);
+        return Response.success(paidCodeReInfoVO);
+    }
+}

+ 14 - 1
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoApplitionController.java

@@ -3,10 +3,14 @@ package cn.cslg.permission.controller.qiaobi;
 import cn.cslg.permission.common.core.base.Constants;
 import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
+import cn.cslg.permission.common.model.qiaobi.vipType.QueryVipFunctionDTO;
 import cn.cslg.permission.common.model.vo.ApplicationVO;
+import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
 import cn.cslg.permission.common.model.vo.LoginVO;
 import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.common.utils.web.RequestUtils;
+import cn.cslg.permission.service.FunctionService;
 import cn.cslg.permission.service.qiaobi.QiaoBiApplicationService;
 import cn.cslg.permission.service.qiaobi.QiaoBiPersonService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -20,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * @author 沈永艺
@@ -32,12 +37,20 @@ import java.util.Arrays;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class QiaoApplitionController {
     private final QiaoBiApplicationService qiaoBiApplicationService;
+    private final FunctionService functionService;
     @PostMapping("/queryApplication")
     @Operation(summary = "查询窍笔应用")
     public String personnelSignUp(@RequestBody ApplicationVO applicationVO) {
         applicationVO.setApplicationCodes(Arrays.asList("4e95e3d926a2a4befa5d913acc0aa9f5"));
         return  qiaoBiApplicationService.queryQiaoBiApplication(applicationVO);
-
     }
 
+    @PostMapping("/queryFunction")
+    @Operation(summary = "查询窍笔应用")
+    public String queryFunction(@RequestBody QueryVipFunctionDTO queryVipFunctionDTO) {
+        queryVipFunctionDTO.setApplicationCode(RequestUtils.getApplicationHeader());
+        queryVipFunctionDTO.setIfAll(true);
+        List<FunctionCodeTreeVO> vos= functionService.queryVipFunctionTree(queryVipFunctionDTO);
+        return Response.success(vos);
+    }
 }

+ 8 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoBiPersonController.java

@@ -6,6 +6,7 @@ import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.common.model.qiaobi.tenant.CompanyPersonSignUpDTO;
 import cn.cslg.permission.common.model.vo.LoginVO;
 import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.utils.Response;
@@ -61,4 +62,11 @@ public class QiaoBiPersonController {
         qiaoBiPersonService.personSignUp(qiaoBiPersonSignUpDTO);
         return Response.success();
     }
+
+    @PostMapping("/companyPersonSignUp")
+    @Operation(summary = "企业用户注册")
+    public String companyPersonSignUp(@RequestBody CompanyPersonSignUpDTO companyPersonSignUpDTO) {
+        qiaoBiPersonService.companyPersonSignUp(companyPersonSignUpDTO);
+        return Response.success(true);
+    }
 }

+ 58 - 24
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VersionController.java

@@ -2,13 +2,24 @@ package cn.cslg.permission.controller.qiaobi;
 
 import cn.cslg.permission.common.core.base.Constants;
 import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.dto.QueryAssoFunctionModuleDTO;
 import cn.cslg.permission.common.model.dto.QueryVersionInfoDTO;
 import cn.cslg.permission.common.model.dto.QueryVersionListDTO;
 import cn.cslg.permission.common.model.dto.VersionDTO;
+import cn.cslg.permission.common.model.qiaobi.version.AddFunctionDTO;
+import cn.cslg.permission.common.model.qiaobi.version.QiaoBiVersionVO;
+import cn.cslg.permission.common.model.qiaobi.version.QueryFunctionCodeTreeVO;
+import cn.cslg.permission.common.model.qiaobi.version.VersionStatusDTO;
+import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
+import cn.cslg.permission.common.model.vo.FunctionVO;
 import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.common.utils.web.RequestUtils;
+import cn.cslg.permission.domain.Function;
 import cn.cslg.permission.service.VersionService;
+import cn.cslg.permission.service.qiaobi.AssoFunctionModuleService;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.http.RequestUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -25,43 +36,30 @@ import java.util.List;
 public class VersionController {
     @Autowired
     private VersionService versionService;
+    @Autowired
+    private AssoFunctionModuleService assoFunctionModuleService;
 
     @Operation(summary = "添加版本")
     @PostMapping("/add")
     public String add(@RequestBody VersionDTO versionDTO) {
-        Records records = versionService.add(versionDTO);
-        return Response.success(records);
+        versionDTO.setApplicationCode(RequestUtils.getApplicationHeader());
+        Integer id = versionService.add(versionDTO);
+        return Response.success(id);
     }
 
     @Operation(summary = "修改版本")
     @PostMapping("/update")
     public String update(@RequestBody VersionDTO versionDTO) {
-        Records records = versionService.update(versionDTO);
-        return Response.success(records);
+        versionDTO.setApplicationCode(RequestUtils.getApplicationHeader());
+        Integer id = versionService.update(versionDTO);
+        return Response.success(id);
     }
 
     @Operation(summary = "分页查询版本列表")
     @PostMapping("/queryVersionList")
-    public String queryVersionList(@RequestBody QueryVersionListDTO queryVersionListDTO){
-        Records records = versionService.queryVersionList(queryVersionListDTO);
-        return Response.success(records);
-    }
-
-    @Operation(summary = "查询版本详情")
-    @PostMapping("/queryVersionInfo")
-    public String queryVersionInfo(@RequestBody QueryVersionInfoDTO queryVersionInfoDTO){
-        Records records = versionService.queryVersionInfo(queryVersionInfoDTO);
-        return Response.success(records);
-    }
-
-    @Operation(summary = "根据id查询版本信息")
-    @GetMapping("/queryById")
-    public String queryById(Integer id) throws IOException {
-        Records records = new Records();
-        if (id != null) {
-            records = versionService.queryById(id);
-        }
-        return Response.success(records);
+    public String queryVersionList(@RequestBody QueryVersionListDTO queryVersionListDTO) {
+        Records record1 = versionService.queryVersionList(queryVersionListDTO);
+        return Response.success(record1);
     }
 
     @Operation(summary = "根据ids删除")
@@ -73,4 +71,40 @@ public class VersionController {
         }
         return Response.error("请求参数为null");
     }
+
+    @Operation(summary = "添加功能")
+    @PostMapping("/addFunction")
+    public String addFunction(@RequestBody AddFunctionDTO addFunctionDTO) {
+        addFunctionDTO.setApplicationCode(RequestUtils.getApplicationHeader());
+        FunctionVO function = versionService.addFunction(addFunctionDTO);
+        return Response.success(function);
+    }
+
+    @Operation(summary = "获取版本功能以及代码")
+    @PostMapping("/queryFunctionCode")
+    public String queryFunctionCode(@RequestBody QueryFunctionCodeTreeVO queryFunctionCodeTreeVO) {
+        List<FunctionCodeTreeVO> vos = assoFunctionModuleService.getFunctionCodeTree(queryFunctionCodeTreeVO);
+        return Response.success(vos);
+    }
+
+    @Operation(summary = "更新版本状态")
+    @PostMapping("/updateStatus")
+    public String updateStatus(@RequestBody VersionStatusDTO versionStatusDTO) {
+        Integer id = versionService.updateVersionStatus(versionStatusDTO);
+        return Response.success(id);
+    }
+
+    @Operation(summary = "分页查询版本列表")
+    @PostMapping("/queryPublicVersionList")
+    public String queryPublicVersionList(@RequestBody QueryVersionListDTO queryVersionListDTO) {
+        queryVersionListDTO.setStatus(3);
+        Records record11 = versionService.queryVersionList(queryVersionListDTO);
+        return Response.success(record11);
+    }
+    @Operation(summary = "查询最新公开版本")
+    @PostMapping("/queryPublicVersionLast")
+    public String queryPublicVersionLast() {
+        QiaoBiVersionVO qiaoBiVersionVO = versionService.queryVersionLast();
+        return Response.success(qiaoBiVersionVO);
+    }
 }

+ 31 - 9
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VipTypeController.java

@@ -6,9 +6,13 @@ import cn.cslg.permission.common.model.dto.AppVipTypeDTO;
 import cn.cslg.permission.common.model.dto.QueryVipDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.common.model.qiaobi.vipType.QueryVipFunctionDTO;
+import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
 import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.common.utils.web.RequestUtils;
 import cn.cslg.permission.domain.qiaobi.AppVipType;
 import cn.cslg.permission.service.ApplicationService;
+import cn.cslg.permission.service.FunctionService;
 import cn.cslg.permission.service.qiaobi.AppVipTypeService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -29,37 +33,39 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class VipTypeController {
     private final AppVipTypeService appVipTypeService;
+    private final FunctionService functionService;
 
     @PostMapping("/queryQiaoBiVipType")
-    public String queryQiaoBiVipType(@RequestBody QiaoBiVipTypeDTO qiaoBiVipTypeDTO){
-      List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList=  appVipTypeService.qiaoBiVIPTypeVOList(qiaoBiVipTypeDTO);
-      return Response.success(qiaoBiVIPTypeVOList);
+    public String queryQiaoBiVipType(@RequestBody QiaoBiVipTypeDTO qiaoBiVipTypeDTO) {
+        List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList = appVipTypeService.qiaoBiVIPTypeVOList(qiaoBiVipTypeDTO);
+        return Response.success(qiaoBiVIPTypeVOList);
     }
 
     @Operation(summary = "添加会员")
     @PostMapping("/add")
     public String add(@RequestBody AppVipTypeDTO appVipTypeDTO) {
-        Records records = appVipTypeService.add(appVipTypeDTO);
-        return Response.success(records);
+        appVipTypeDTO.setApplicationCode(RequestUtils.getApplicationHeader());
+        Integer id = appVipTypeService.add(appVipTypeDTO);
+        return Response.success(id);
     }
 
     @Operation(summary = "修改会员")
     @PostMapping("/update")
     public String update(@RequestBody AppVipTypeDTO appVipTypeDTO) {
-        Records records = appVipTypeService.update(appVipTypeDTO);
-        return Response.success(records);
+        Integer id = appVipTypeService.update(appVipTypeDTO);
+        return Response.success(id);
     }
 
     @Operation(summary = "分页查询会员列表")
     @PostMapping("/query")
-    public String query(@RequestBody QueryVipDTO queryVipDTO){
+    public String query(@RequestBody QueryVipDTO queryVipDTO) {
         Records records = appVipTypeService.queryAppVipType(queryVipDTO);
         return Response.success(records);
     }
 
     @Operation(summary = "根据id查询会员信息")
     @GetMapping("/queryById")
-    public String queryById(Integer id){
+    public String queryById(Integer id) {
         Records records = new Records();
         if (id != null) {
             records = appVipTypeService.getVipById(id);
@@ -77,4 +83,20 @@ public class VipTypeController {
         return Response.error("删除失败");
     }
 
+    @PostMapping("/queryFunction")
+    @Operation(summary = "查询窍笔应用")
+    public String queryFunction(@RequestBody QueryVipFunctionDTO queryVipFunctionDTO) {
+        queryVipFunctionDTO.setApplicationCode(RequestUtils.getApplicationHeader());
+        queryVipFunctionDTO.setIfAll(false);
+        List<FunctionCodeTreeVO> vos = functionService.queryVipFunctionTree(queryVipFunctionDTO);
+        return Response.success(vos);
+    }
+
+    @PostMapping("/queryTenantVipTypeByCode")
+    @Operation(summary = "根据租户码查询租户版本")
+    public String queryTenantVipTypeByCode(@RequestBody QiaoBiVipTypeDTO qiaoBiVipTypeDTO) {
+        List<QiaoBiVIPTypeVO> vos = appVipTypeService.qiaoBiTenantVIPTypeVOList(qiaoBiVipTypeDTO);
+        return Response.success(vos);
+    }
+
 }

+ 5 - 0
PCS/src/main/java/cn/cslg/permission/domain/Role.java

@@ -42,4 +42,9 @@ public class Role extends BaseEntity<Role> {
     @TableField(value = "TENANT_ID")
     private Integer tenantId;
 
+    /**
+     * 角色描述
+     */
+    @TableField(value = "APPLICATION_CODE")
+    private Integer applicationCode;
 }

+ 11 - 3
PCS/src/main/java/cn/cslg/permission/domain/TenantVipType.java

@@ -1,9 +1,12 @@
 package cn.cslg.permission.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
@@ -17,40 +20,45 @@ import java.util.Date;
  * @Data 2023/2/15
  */
 @TableName(value = "TENANT_VIP_TYPE")
-@Accessors(chain = true)
 @Data
-public class TenantVipType implements Serializable {
+public class TenantVipType extends Model {
     /**
      * 主键ID
      */
-    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
     /**
      * 租户会员类型名称
      */
+    @TableField(value = "TENANT_VIP_NAME")
     private String tenantVipName;
     /**
      * 备注
      */
+    @TableField(value = "REMARK")
     private String remark;
     /**
      * 是否启用
      */
+    @TableField(value = "ENABLE")
     private Integer enable;
     /**
      * 创建时间
      */
+    @TableField(value = "CREATE_TIME")
     private Date createTime;
     /**
      * 创建人ID
      */
+    @TableField(value = "CREATE_PERSON_ID")
     private Integer createPersonId;
     /**
      * 创建人姓名
      */
+    @TableField(value = "CREATE_PERSON_NAME")
     private String createPersonName;
     /**
      * 应用会员设置为1
      */
+    @TableField(value = "USE_TYPE")
     private Integer useType;
 }

+ 12 - 1
PCS/src/main/java/cn/cslg/permission/domain/Version.java

@@ -1,6 +1,8 @@
 package cn.cslg.permission.domain;
 
 import cn.cslg.permission.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
@@ -10,6 +12,7 @@ import java.util.Date;
 
 /**
  * 版本
+ *
  * @Author xiexiang
  * @Date 2024/11/19
  */
@@ -43,4 +46,12 @@ public class Version extends Model {
      * 应用唯一标识符
      */
     private String applicationCode;
-}
+    private Integer status;
+    /**
+     * 创建人
+     */
+    private Integer createId;
+
+    private Date createTime;
+    private Date publishTime;
+}

+ 6 - 2
PCS/src/main/java/cn/cslg/permission/domain/associate/AssoFunctionModule.java

@@ -3,6 +3,8 @@ package cn.cslg.permission.domain.associate;
 import cn.cslg.permission.common.model.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -17,8 +19,8 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 @TableName(value = "ASSO_FUNCTION_MODULE")
-public class AssoFunctionModule extends BaseEntity<AssoFunctionModule> {
-
+public class AssoFunctionModule extends Model<AssoFunctionModule> {
+    private Integer id;
     /**
      * 关联功能id
      */
@@ -48,5 +50,7 @@ public class AssoFunctionModule extends BaseEntity<AssoFunctionModule> {
      */
     @TableField(value = "VERSION_ID")
     private Integer versionId;
+    private Integer CreateUser;
+
 
 }

+ 24 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPaidCodeRegistInfo.java

@@ -0,0 +1,24 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_PAID_CODE_REGIST_INFO
+ */
+@TableName(value ="ASSO_PAID_CODE_REGIST_INFO")
+@Data
+public class AssoPaidCodeRegistInfo extends Model<AssoPaidCodeRegistInfo> {
+    private Integer id;
+
+    private Integer paidCodeId;
+
+    private Integer registInfoId;
+
+}

+ 25 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPaidCodeVipType.java

@@ -0,0 +1,25 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_PAID_CODE_VIP_TYPE
+ */
+@TableName(value ="ASSO_PAID_CODE_VIP_TYPE")
+@Data
+public class AssoPaidCodeVipType extends Model {
+    private Integer id;
+
+    private Integer paidCodeId;
+
+    private Integer vipTypeId;
+
+    private Integer vipTypeNum;
+}

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoTenantVipType.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.domain.qiaobi;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_TENANT_VIP_TYPE
+ */
+@TableName(value ="ASSO_TENANT_VIP_TYPE")
+@Data
+public class AssoTenantVipType extends Model<AssoTenantVipType> {
+    private Integer id;
+
+    private Integer tenantId;
+
+    private Integer vipTypeId;
+
+    private Integer vipTypeNum;
+}

+ 26 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoVersionFunction.java

@@ -0,0 +1,26 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_VERSION_FUNCTION
+ */
+@TableName(value ="ASSO_VERSION_FUNCTION")
+@Data
+public class AssoVersionFunction extends Model {
+    private Integer id;
+
+    private Integer versionId;
+
+    private Integer functionId;
+
+    private String functionModifyPath;
+
+}

+ 35 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/BusinessTask.java

@@ -0,0 +1,35 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName BUSINESS_TASK
+ */
+@TableName(value ="BUSINESS_TASK")
+@Data
+public class BusinessTask extends Model<BusinessTask> {
+    private Integer id;
+
+    private Integer taskType;
+
+    private Date createTime;
+
+
+    private Integer handleId;
+
+    private Integer result;
+
+    private Integer createId;
+
+    private Integer status;
+    private Integer tenantId;
+
+}

+ 24 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/EnterpriseCode.java

@@ -0,0 +1,24 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ENTERPRISE_CODE
+ */
+@TableName(value ="ENTERPRISE_CODE")
+@Data
+public class EnterpriseCode extends Model<EnterpriseCode> {
+    private Integer id;
+
+    private Integer tenantId;
+
+    private String code;
+
+}

+ 28 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/PaidCode.java

@@ -0,0 +1,28 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName PAID_CODE
+ */
+@TableName(value = "PAID_CODE")
+@Data
+public class PaidCode extends Model {
+    private Integer id;
+    private String code;
+    private Integer status;
+
+    private Date createTime;
+
+    private Integer createId;
+    private String remark;
+}

+ 41 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/RegistInformation.java

@@ -0,0 +1,41 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName REGIST_INFORMATION
+ */
+@TableName(value ="REGIST_INFORMATION")
+@Data
+public class RegistInformation extends Model {
+    private Integer id;
+
+    private String tenantName;
+
+    private Integer tenantType;
+
+    private String tenantAddress;
+
+    private String personnelName;
+
+    private String personnelPhone;
+
+    private String personnelEmail;
+
+    private String personnelUsername;
+
+    private String personnelPassword;
+    @TableField(value = "DEPARTMENT_ID")
+    private Integer departMentId;
+    @TableField(value = "POSITION_ID")
+    private Integer positionId;
+    @TableField(value = "VIP_TYPE_ID")
+    private Integer vipTypeId;
+}

+ 3 - 1
PCS/src/main/java/cn/cslg/permission/mapper/AssoTenantVipTypeFunctionMapper.java

@@ -1,7 +1,9 @@
 package cn.cslg.permission.mapper;
 
 import cn.cslg.permission.common.model.vo.AssoTenantVipTypeAndFunctionVO;
+import cn.cslg.permission.domain.Application;
 import cn.cslg.permission.domain.AssoTenantVipTypeAndFunction;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -13,7 +15,7 @@ import java.util.List;
  * @Data 2023/2/15
  */
 @Repository
-public interface AssoTenantVipTypeFunctionMapper {
+public interface AssoTenantVipTypeFunctionMapper extends BaseMapper<AssoTenantVipTypeAndFunction> {
     /**
      * 批量插入数据
      *

+ 3 - 0
PCS/src/main/java/cn/cslg/permission/mapper/PersonnelMapper.java

@@ -1,7 +1,9 @@
 package cn.cslg.permission.mapper;
 
 import cn.cslg.permission.common.model.dto.PasUserDTO;
+import cn.cslg.permission.common.model.qiaobi.GetQiaoBiPersonDTO;
 import cn.cslg.permission.common.model.vo.PasUserVO;
+import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.domain.Personnel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,4 +22,5 @@ import java.util.List;
 @Mapper
 public interface PersonnelMapper extends BaseMapper<Personnel> {
     IPage<PasUserVO> getPasUser(Page<PasUserVO> page, @Param("params") PasUserDTO params);
+     List<PersonnelVO>  getQiaoBiPersons(GetQiaoBiPersonDTO getQiaoBiPersonDTO);
 }

+ 4 - 0
PCS/src/main/java/cn/cslg/permission/mapper/TenantMapper.java

@@ -1,5 +1,7 @@
 package cn.cslg.permission.mapper;
 
+import cn.cslg.permission.common.model.qiaobi.tenant.QiaoBiTenantVO;
+import cn.cslg.permission.common.model.qiaobi.tenant.QueryQiaoBiTenantDTO;
 import cn.cslg.permission.common.model.vo.TenantVO;
 import org.springframework.stereotype.Repository;
 
@@ -61,4 +63,6 @@ public interface TenantMapper {
      */
     int updateByTenantVipType(Integer tenantVipType);
 
+    List<QiaoBiTenantVO> queryQiaoBiTenants(QueryQiaoBiTenantDTO queryQiaoBiTenantDTO);
+    Long queryQiaoBiTenantsTotal(QueryQiaoBiTenantDTO queryQiaoBiTenantDTO);
 }

+ 0 - 1
PCS/src/main/java/cn/cslg/permission/mapper/TenantVipTypeMapper.java

@@ -17,7 +17,6 @@ import java.util.List;
  * @Author chenyu
  * @Data 2023/2/15
  */
-@Repository
 public interface TenantVipTypeMapper extends BaseMapper<TenantVipType> {
     /**
      * 插入数据

+ 4 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AppVipTypeMapper.java

@@ -19,6 +19,10 @@ import java.util.List;
 public interface AppVipTypeMapper extends BaseMapper<AppVipType> {
     public List<QiaoBiVIPTypeVO> queryQiaobiVipTypeVOs(QiaoBiVipTypeDTO qiaoBiVipTypeDTO);
     List<AppVipTypeVO> queryAppVipType(QueryVipDTO queryVipDTO);
+    Long queryAppVipTypeTotal(QueryVipDTO queryVipDTO);
+
+    public List<QiaoBiVIPTypeVO> qiaoBiTenantVIPTypeVOList(QiaoBiVipTypeDTO qiaoBiVipTypeDTO);
+    public List<QiaoBiVIPTypeVO> qiaoBiTenantsVIPTypeVOList(QiaoBiVipTypeDTO qiaoBiVipTypeDTO);
 }
 
 

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoPaidCodeRegistInfoMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoPaidCodeRegistInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ASSO_PAID_CODE_REGIST_INFO(付费码和注册信息关联表)】的数据库操作Mapper
+* @createDate 2024-12-09 15:33:14
+* @Entity generator.domain.AssoPaidCodeRegistInfo
+*/
+public interface AssoPaidCodeRegistInfoMapper extends BaseMapper<AssoPaidCodeRegistInfo> {
+
+}
+
+
+
+

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoPaidCodeVipTypeMapper.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.paidCode.VipTypeNumVO;
+import cn.cslg.permission.domain.qiaobi.AssoPaidCodeVipType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【ASSO_PAID_CODE_VIP_TYPE】的数据库操作Mapper
+* @createDate 2024-12-09 15:16:30
+* @Entity generator.domain.AssoPaidCodeVipType
+*/
+public interface AssoPaidCodeVipTypeMapper extends BaseMapper<AssoPaidCodeVipType> {
+   List<VipTypeNumVO> queryVipNumList(List<Integer> paidCodeIds);
+
+}
+
+
+
+

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoTenantVipTypeMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoTenantVipType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ASSO_TENANT_VIP_TYPE】的数据库操作Mapper
+* @createDate 2024-12-15 20:43:53
+* @Entity generator.domain.AssoTenantVipType
+*/
+public interface AssoTenantVipTypeMapper extends BaseMapper<AssoTenantVipType> {
+
+}
+
+
+
+

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoVersionFunctionMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoVersionFunction;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ASSO_VERSION_FUNCTION(租户会员类型和功能关联表)】的数据库操作Mapper
+* @createDate 2024-12-03 18:11:52
+* @Entity generator.domain.AssoVersionFunction
+*/
+public interface AssoVersionFunctionMapper extends BaseMapper<AssoVersionFunction> {
+
+}
+
+
+
+

+ 23 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/BusinessTaskMapper.java

@@ -0,0 +1,23 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.businessTask.QueryAuditTaskDTO;
+import cn.cslg.permission.common.model.qiaobi.businessTask.QueryAuditTaskVO;
+import cn.cslg.permission.domain.qiaobi.BusinessTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【BUSINESS_TASK(业务任务表)】的数据库操作Mapper
+ * @createDate 2024-12-15 11:54:13
+ * @Entity generator.domain.BusinessTask
+ */
+public interface BusinessTaskMapper extends BaseMapper<BusinessTask> {
+
+    public List<QueryAuditTaskVO> queryAuditTask(QueryAuditTaskDTO queryAuditTaskDTO);
+}
+
+
+
+

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/EnterpriseCodeMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.EnterpriseCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ENTERPRISE_CODE(企业码)】的数据库操作Mapper
+* @createDate 2024-12-13 11:24:49
+* @Entity generator.domain.EnterpriseCode
+*/
+public interface EnterpriseCodeMapper extends BaseMapper<EnterpriseCode> {
+
+}
+
+
+
+

+ 25 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/PaidCodeMapper.java

@@ -0,0 +1,25 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.paidCode.PaidCodeQueryDTO;
+import cn.cslg.permission.common.model.qiaobi.paidCode.PaidCodeQueryVO;
+import cn.cslg.permission.domain.qiaobi.PaidCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【PAID_CODE(付费码)】的数据库操作Mapper
+ * @createDate 2024-12-09 15:13:38
+ * @Entity generator.domain.PaidCode
+ */
+public interface PaidCodeMapper extends BaseMapper<PaidCode> {
+
+    List<PaidCodeQueryVO> queryPaidCodeList(PaidCodeQueryDTO paidCodeQueryDTO);
+
+    Long queryPaidCodeListTotal(PaidCodeQueryDTO paidCodeQueryDTO);
+}
+
+
+
+

+ 20 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/RegistInformationMapper.java

@@ -0,0 +1,20 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.RegistInformation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【REGIST_INFORMATION(注册信息表)】的数据库操作Mapper
+* @createDate 2024-12-09 15:16:11
+* @Entity generator.domain.RegistInformation
+*/
+public interface RegistInformationMapper extends BaseMapper<RegistInformation> {
+   public RegistInformation getRegistInformationByTaskId(Integer taskId);
+}
+
+
+
+

+ 7 - 0
PCS/src/main/java/cn/cslg/permission/service/ApplicationService.java

@@ -253,4 +253,11 @@ public class ApplicationService extends ServiceImpl<ApplicationMapper, Applicati
         return Response.success(setApplicationToVO(applicationList), DataUtils.setPageColumn(applicationVO.getSize(), applicationVO.getCurrent(), Math.toIntExact(this.count(queryWrapper))));
     }
 
+    public Application getByCode(String applicationCode) {
+        LambdaQueryWrapper<Application> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Application::getApplicationCode, applicationCode);
+        Application application = this.getOne(queryWrapper, false);
+        return application;
+    }
+
 }

+ 99 - 0
PCS/src/main/java/cn/cslg/permission/service/AssoTenantVipTypeFunctionService.java

@@ -0,0 +1,99 @@
+package cn.cslg.permission.service;
+
+import cn.cslg.permission.common.model.dto.AssoFunctionCodeDTO;
+import cn.cslg.permission.domain.AssoTenantVipTypeAndFunction;
+import cn.cslg.permission.domain.Client;
+import cn.cslg.permission.domain.associate.AssoFunctionModule;
+import cn.cslg.permission.mapper.AssoTenantVipTypeFunctionMapper;
+import cn.cslg.permission.mapper.ClientMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class AssoTenantVipTypeFunctionService extends ServiceImpl<AssoTenantVipTypeFunctionMapper, AssoTenantVipTypeAndFunction> {
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveFunctionModuleBatch(List<Integer> functionIds, Integer tenantVipTypeId) {
+        if (functionIds == null || functionIds.size() == 0) {
+            return;
+        }
+
+        LambdaQueryWrapper<AssoTenantVipTypeAndFunction> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoTenantVipTypeAndFunction::getTenantVipTypeId, tenantVipTypeId);
+        List<AssoTenantVipTypeAndFunction> assoFunctionCodeDTOS = this.list(queryWrapper);
+        List<Integer> orgFunctionIds = new ArrayList<>();
+        if (assoFunctionCodeDTOS != null && assoFunctionCodeDTOS.size() > 0) {
+            orgFunctionIds = assoFunctionCodeDTOS.stream().map(AssoTenantVipTypeAndFunction::getFunctionId).collect(Collectors.toList());
+        }
+
+        Iterator<Integer> assoIterator = functionIds.iterator();
+        while (assoIterator.hasNext()) {
+            Integer item = assoIterator.next();
+            if (orgFunctionIds.size() > 0) {
+                Iterator<Integer> orgIterator = orgFunctionIds.iterator();
+                while (orgIterator.hasNext()) {
+                    Integer tem = orgIterator.next();
+                    if (item == tem) {
+                        assoIterator.remove();
+                        orgIterator.remove();
+                    }
+                }
+
+            }
+        }
+
+        //删除版本代码
+        if (orgFunctionIds != null && orgFunctionIds.size() > 0) {
+            LambdaQueryWrapper<AssoTenantVipTypeAndFunction> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.in(AssoTenantVipTypeAndFunction::getFunctionId, orgFunctionIds)
+                    .eq(AssoTenantVipTypeAndFunction::getTenantVipTypeId, tenantVipTypeId);
+            this.remove(queryWrapper1);
+        }
+        //添加版本代码
+        this.saveAssoBatch(functionIds, tenantVipTypeId);
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveAssoBatch(List<Integer> functionIds, Integer tenantVipTypeId) {
+        if (functionIds == null || functionIds.size() == 0) {
+            return;
+        }
+        List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions = new ArrayList<>();
+        functionIds.forEach(item -> {
+            AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction = new AssoTenantVipTypeAndFunction();
+            assoTenantVipTypeAndFunction.setFunctionId(item);
+            assoTenantVipTypeAndFunction.setTenantVipTypeId(tenantVipTypeId);
+            assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction);
+        });
+        this.saveBatch(assoTenantVipTypeAndFunctions);
+
+    }
+
+    public void deleteByVipIds(List<Integer> ids) {
+        LambdaQueryWrapper<AssoTenantVipTypeAndFunction> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoTenantVipTypeAndFunction::getTenantVipTypeId, ids);
+        this.remove(queryWrapper);
+    }
+
+    public List<Integer> getFunctionIds(Integer vipId) {
+        List<Integer> functionIds = new ArrayList<>();
+        LambdaQueryWrapper<AssoTenantVipTypeAndFunction> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoTenantVipTypeAndFunction::getTenantVipTypeId, vipId);
+        List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions = this.list(queryWrapper);
+        if (assoTenantVipTypeAndFunctions != null) {
+            functionIds = assoTenantVipTypeAndFunctions.stream().map(AssoTenantVipTypeAndFunction::getFunctionId).collect(Collectors.toList());
+
+        }
+        return functionIds;
+
+    }
+}

+ 2 - 2
PCS/src/main/java/cn/cslg/permission/service/ClientService.java

@@ -223,9 +223,9 @@ public class ClientService extends ServiceImpl<ClientMapper, Client> {
             tenantIds.add(params.getTenantId());
         }
 
-        if (ids.size() > 0) {
+        if (tenantIds.size() > 0) {
             LambdaQueryWrapper<Tenant> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.in(Tenant::getId, ids);
+            queryWrapper.in(Tenant::getId, tenantIds);
             if (params.getName() != null) {
                 queryWrapper.like(Tenant::getTenantName, params.getName());
             }

+ 39 - 0
PCS/src/main/java/cn/cslg/permission/service/DepartmentService.java

@@ -1,5 +1,7 @@
 package cn.cslg.permission.service;
 
+import cn.cslg.permission.common.model.qiaobi.QiaoBiGetDepartmentDTO;
+import cn.cslg.permission.common.model.vo.DepartmentInfoVO;
 import cn.cslg.permission.common.model.vo.DepartmentVO;
 import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.utils.CacheUtils;
@@ -11,6 +13,7 @@ import cn.cslg.permission.mapper.DepartmentMapper;
 import cn.cslg.permission.service.associate.DepartPosiService;
 import cn.cslg.permission.service.associate.DepartRoleService;
 import cn.cslg.permission.service.associate.PerDpService;
+import cn.cslg.permission.service.qiaobi.EnterpriseCodeService;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.tree.Tree;
@@ -20,6 +23,7 @@ import cn.hutool.core.lang.tree.TreeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -41,6 +45,7 @@ public class DepartmentService extends ServiceImpl<DepartmentMapper, Department>
     private final PerDpService perDpService;
     private final CacheUtils cacheUtils;
     private final DepartmentMapper departmentMapper;
+    private final EnterpriseCodeService enterpriseCodeService;
 
     @Transactional(rollbackFor = Exception.class)
     public String addDepartment(DepartmentVO departmentVO) {
@@ -266,4 +271,38 @@ public class DepartmentService extends ServiceImpl<DepartmentMapper, Department>
         });
     }
 
+    public String queryDepartmentById(Integer id) {
+        DepartmentInfoVO departmentInfoVO = new DepartmentInfoVO();
+        Department data = this.getById(id);
+        BeanUtils.copyProperties(data, departmentInfoVO);
+        departmentInfoVO.setName(data.getDepartmentName());
+        departmentInfoVO.setTenant(data.getTenantId());
+        departmentInfoVO.setRemark(data.getDepartmentDescription());
+        departmentInfoVO.setRole(departRoleService.queryAssociateDepartRole(data.getId()));
+        departmentInfoVO.setRoleList(departRoleService.getRoleListByDepartmentId(data.getId()));
+        return Response.success(departmentInfoVO);
+    }
+
+
+    public String getDepartmentListByCode(QiaoBiGetDepartmentDTO qiaoBiGetDepartmentDTO) {
+        String code = qiaoBiGetDepartmentDTO.getEnterpriseCode();
+        Integer tenantId = enterpriseCodeService.getTenantIdByCode(code);
+        LambdaQueryWrapper<Department> queryWrapper = new LambdaQueryWrapper<>();
+        //TODO 代码控制只能查看本租户内容
+        queryWrapper.eq(Department::getTenantId, tenantId);
+        List<Department> lst = this.list(queryWrapper);
+        return Response.success(treeGenerate(lst));
+    }
+
+    public List<Department> getDepartmentsByIds(List<Integer> ids){
+        List<Department> departmentList =new ArrayList<>();
+        if(ids==null||ids.size()==0) {
+            return departmentList;
+        }
+        LambdaQueryWrapper<Department> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.in(Department::getId,ids);
+        departmentList=this.list(queryWrapper);
+        return  departmentList;
+        }
+
 }

+ 156 - 4
PCS/src/main/java/cn/cslg/permission/service/FunctionService.java

@@ -1,17 +1,20 @@
 package cn.cslg.permission.service;
 
-import cn.cslg.permission.common.model.vo.AssoTenantVipTypeAndFunctionVO;
-import cn.cslg.permission.common.model.vo.FunctionVO;
-import cn.cslg.permission.common.model.vo.PersonnelVO;
-import cn.cslg.permission.common.model.vo.TenantVO;
+import cn.cslg.permission.common.model.qiaobi.vipType.QueryVipFunctionDTO;
+import cn.cslg.permission.common.model.vo.*;
 import cn.cslg.permission.common.utils.*;
 import cn.cslg.permission.domain.Application;
 import cn.cslg.permission.domain.Function;
+import cn.cslg.permission.domain.Version;
+import cn.cslg.permission.domain.associate.AssoFunctionModule;
+import cn.cslg.permission.domain.qiaobi.AssoVersionFunction;
+import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.AssoTenantVipTypeFunctionMapper;
 import cn.cslg.permission.mapper.FunctionMapper;
 import cn.cslg.permission.mapper.TenantMapper;
 import cn.cslg.permission.service.associate.RoleFunctionDataService;
+import cn.cslg.permission.service.qiaobi.AssoFunctionModuleService;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.tree.Tree;
@@ -22,6 +25,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +51,7 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
     private final TenantMapper tenantMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
+    private final AssoTenantVipTypeFunctionService assoTenantVipTypeFunctionService;
 
     @Transactional(rollbackFor = Exception.class)
     public String addFunction(FunctionVO functionVO) {
@@ -400,4 +405,151 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
 
         return functionList;
     }
+
+    /**
+     * 添加单个功能
+     *
+     * @param functionVO
+     * @return
+     */
+    public Function addFunctionByVo(FunctionVO functionVO) {
+
+        Integer personId =loginUtils.getId();
+        String modifyPath = functionVO.getSign();
+        List<Function> functionList = this.list(new LambdaQueryWrapper<Function>().eq(Function::getFunctionPath, modifyPath).eq(Function::getApplicationId, functionVO.getApply()));
+        if (functionList.size() > 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "新增失败,该功能标识已被使用");
+        }
+        Function function = new Function();
+        function
+                .setFunctionUp(functionVO.getFunction())
+                .setFunctionName(functionVO.getName())
+                .setFunctionPath(functionVO.getSign())
+                .setApplicationId(functionVO.getApply())
+                .setFunctionType(functionVO.getFunctionType())
+                .setFunctionDescription(functionVO.getDescribe())
+                .setCreateUser(personId);
+        if (functionVO.getFunction() == 0) {
+            function.setPath("0");
+        } else {
+            Function lastFunction = this.getById(functionVO.getFunction());
+            String path = lastFunction.getPath() + ',' + lastFunction.getId();
+            function.setPath(path);
+        }
+        function.insert();
+        return function;
+    }
+
+    /**
+     * 根据功能名称查询功能
+     *
+     * @param functionVO
+     * @return
+     */
+    public Function getFunctionByName(FunctionVO functionVO) {
+        Integer lastId = functionVO.getFunction();
+        String name = functionVO.getName();
+        Integer applyId = functionVO.getApply();
+        if (name == null || name.trim().equals("")) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "功能名称不可为空");
+        }
+        LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Function::getFunctionUp, lastId);
+        queryWrapper.eq(Function::getFunctionName, name);
+        queryWrapper.eq(Function::getApplicationId, applyId);
+        Function function = this.getOne(queryWrapper);
+        return function;
+    }
+
+
+    public static FunctionVO transformToVo(Function function) {
+        FunctionVO functionVO = new FunctionVO();
+        functionVO.setDescribe(function.getFunctionDescription());
+        functionVO.setPath(function.getPath());
+        functionVO.setFunction(function.getFunctionUp());
+        functionVO.setId(function.getId());
+        functionVO.setApply(function.getApplicationId());
+        functionVO.setType(function.getFunctionType());
+        functionVO.setSign(function.getFunctionPath());
+        functionVO.setName(function.getFunctionName());
+        return functionVO;
+    }
+
+    /**
+     * 根据应用id查询功能
+     *
+     * @param appId
+     * @return
+     */
+    public List<Function> getFunctionByAppId(Integer appId) {
+        LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Function::getApplicationId, appId);
+        List<Function> functionList = this.list(queryWrapper);
+        return functionList;
+
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public List<FunctionCodeTreeVO> queryVipFunctionTree(QueryVipFunctionDTO queryVipFunctionDTO) {
+        Boolean ifAll = queryVipFunctionDTO.getIfAll();
+        Integer versionId = queryVipFunctionDTO.getVipTypeId();
+        List<Integer> functionIds = assoTenantVipTypeFunctionService.getFunctionIds(versionId);
+        String applicationCode = queryVipFunctionDTO.getApplicationCode();
+        Application application = applicationService.getByCode(applicationCode);
+        if (application == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "应用不存在");
+        }
+
+        List<FunctionCodeTreeVO> functionCodeTreeVOS = new ArrayList<>();
+        //根据versionId查询功能
+        List<Function> functionList  =new ArrayList<>();
+        if (ifAll!=null&&ifAll) {
+            functionList = this.getFunctionByAppId(application.getId());
+        }
+        else {
+            functionList = this.getFuncListByIds(functionIds);
+
+        }
+        if (functionList == null || functionList.size() == 0) {
+            return functionCodeTreeVOS;
+        }
+        List<Function> rootFunctionList = functionList.stream().filter(item -> item.getFunctionUp() != null && item.getFunctionUp().equals(0)).collect(Collectors.toList());
+
+        List<FunctionCodeTreeVO> functionCodeTreeVOS1 = new ArrayList<>();
+        rootFunctionList.forEach(item -> {
+            FunctionCodeTreeVO functionCodeTreeVO = AssoFunctionModuleService.loadFunctionCodeTreeVO(item, null);
+            if (functionIds.contains(functionCodeTreeVO.getId())) {
+                functionCodeTreeVO.setIsSelect(1);
+            } else {
+                functionCodeTreeVO.setIsSelect(2);
+
+            }
+            functionCodeTreeVOS1.add(functionCodeTreeVO);
+        });
+        List<FunctionCodeTreeVO> functionCodeTreeVOS2 = new ArrayList<>();
+        functionCodeTreeVOS2.addAll(functionCodeTreeVOS1);
+        while (functionCodeTreeVOS1.size() > 0) {
+            FunctionCodeTreeVO functionCodeTreeVO = functionCodeTreeVOS1.remove(0);
+            List<Function> childFunctions = functionList.stream().filter(item -> item.getFunctionUp().equals(functionCodeTreeVO.getId())).collect(Collectors.toList());
+            List<FunctionCodeTreeVO> childVos = new ArrayList<>();
+            if (childFunctions != null & childFunctions.size() > 0) {
+                childFunctions.forEach(item -> {
+                    FunctionCodeTreeVO childVo = AssoFunctionModuleService.loadFunctionCodeTreeVO(item, null);
+                    if (functionIds.contains(childVo.getId())) {
+                        childVo.setIsSelect(1);
+                    } else {
+                        childVo.setIsSelect(2);
+
+                    }
+                    childVos.add(childVo);
+                });
+            }
+            functionCodeTreeVOS1.addAll(childVos);
+            functionCodeTreeVO.setChildren(childVos);
+        }
+        return functionCodeTreeVOS2;
+    }
+
+
 }

+ 32 - 0
PCS/src/main/java/cn/cslg/permission/service/LoginService.java

@@ -737,4 +737,36 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
             return Response.success(inviteSignInLink);
         }
     }
+
+
+    /**
+     * 发送验证码
+     *
+     * @param vo
+     * @return
+     */
+    public String getPaidCodePhoneCode(SendCodeDTO vo) {
+        String res = "发送验证码失败";
+        if (Boolean.TRUE.equals(StringUtils.isEmpty(vo.getPhoneNum()))) {
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_IS_NOT_EMPTY);
+        }
+        if (!RegexUtil.isPhoneLegal(vo.getPhoneNum())) {
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_FORMAT_ERROR);
+        }
+        if (StringUtils.isNotEmpty(vo.getPhoneNum())) {
+            String code = redisUtil.get(LoginCacheKeyUtil.getPaidCodeCaptcha(vo.getPaidCode()));
+            if (org.apache.commons.lang3.StringUtils.isNotEmpty(code)) {
+                redisUtil.delete(LoginCacheKeyUtil.getPaidCodeCaptcha(vo.getPaidCode()));
+            }
+            //生成验证码
+            String random = RandomUtil.getSixRandom();
+            //手机号和验证码放进缓存 设置过期时间60s
+            redisUtil.set(LoginCacheKeyUtil.getPaidCodeCaptcha(vo.getPaidCode()), random);
+            redisUtil.expire(LoginCacheKeyUtil.getPaidCodeCaptcha(vo.getPaidCode()), 300L, TimeUnit.SECONDS);
+            //发送短信
+            smsService.sendMessage(vo.getPhoneNum(), random);
+            res = "发送验证码成功";
+        }
+        return res;
+    }
 }

+ 183 - 5
PCS/src/main/java/cn/cslg/permission/service/PersonnelService.java

@@ -4,19 +4,19 @@ import cn.cslg.permission.common.core.base.RedisConf;
 import cn.cslg.permission.common.core.business.LoginCacheKeyUtil;
 import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
 import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.qiaobi.GetQiaoBiPersonDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
-import cn.cslg.permission.common.model.vo.LoginRecordVO;
-import cn.cslg.permission.common.model.vo.LoginVO;
-import cn.cslg.permission.common.model.vo.PersonnelVO;
-import cn.cslg.permission.common.model.vo.RoleVO;
+import cn.cslg.permission.common.model.vo.*;
 import cn.cslg.permission.common.utils.*;
 import cn.cslg.permission.common.utils.SecurityUtils.SecurityUtils;
 import cn.cslg.permission.common.utils.message.MessageUtils;
 import cn.cslg.permission.domain.Personnel;
 import cn.cslg.permission.domain.Tenant;
+import cn.cslg.permission.domain.TenantVipType;
 import cn.cslg.permission.domain.associate.AssoDepartPos;
 import cn.cslg.permission.domain.associate.AssoPerDp;
 import cn.cslg.permission.domain.associate.AssoPersonRole;
+import cn.cslg.permission.domain.qiaobi.AssoPersonVipType;
 import cn.cslg.permission.domain.sys.SysDictItem;
 import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.exception.XiaoShiException;
@@ -26,12 +26,15 @@ import cn.cslg.permission.service.associate.DepartPosiService;
 import cn.cslg.permission.service.associate.PerDpService;
 import cn.cslg.permission.service.associate.PersonGroupService;
 import cn.cslg.permission.service.associate.PersonRoleService;
+import cn.cslg.permission.service.impl.TenantVipTypeService;
+import cn.cslg.permission.service.qiaobi.AssoPersonVipTypeService;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.crypto.SecureUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
@@ -64,6 +67,8 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
     private final LoginRecordService loginRecordService;
     private final LoginService loginService;
     private final SystemService systemService;
+    private final AssoPersonVipTypeService assoPersonVipTypeService;
+    private final TenantVipTypeService tenantVipTypeService;
 
     @Transactional(rollbackFor = Exception.class)
     public Personnel addPersonnel(PersonnelVO personnelVO) {
@@ -767,7 +772,7 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
      * @param phoneLoginDTO
      * @return
      */
-    public Personnel loginPhoneCheck(PhoneLoginDTO phoneLoginDTO,Integer systemId) {
+    public Personnel loginPhoneCheck(PhoneLoginDTO phoneLoginDTO, Integer systemId) {
         //查询用户
         LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
         if (org.apache.commons.lang3.StringUtils.isNotEmpty(phoneLoginDTO.getPhoneNum())) {
@@ -796,4 +801,177 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
         redisUtil.delete(LoginCacheKeyUtil.getLoginCaptcha(phoneLoginDTO.getPhoneNum()));
         return person;
     }
+
+    public List<Personnel> getPersonByIds(List<Integer> ids) {
+        List<Personnel> personnelList = new ArrayList<>();
+        if (ids == null || ids.size() == 0) {
+            return personnelList;
+        }
+
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(Personnel::getId, ids);
+        personnelList = this.list(queryWrapper);
+        return personnelList;
+    }
+
+    /**
+     * 校验手机号是否存在
+     */
+    public void checkPhone(String phone) {
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Personnel::getPersonnelPhone, phone)
+                .eq(Personnel::getIsDelete, 0);
+        Personnel personnel = this.getOne(queryWrapper, false);
+        if (personnel != null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "该手机号已被使用");
+        }
+    }
+
+
+    public String queryPageList2(PersonnelVO personnelVO) {
+        //获取登陆人信息
+        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
+        //TODO 代码控制若不是超级管理员则只能查看本租户的人员列表
+        if (personnelVO1.getRoleType() == null || personnelVO1.getRoleType() != 1) {
+            queryWrapper.eq(Personnel::getTenantId, personnelVO1.getTenantId());
+        }
+        //根据人员名称或是人员描述模糊查询人员列表
+        if (personnelVO.getName() == null) {
+            personnelVO.setName("");
+        }
+        queryWrapper.and((wrapper) -> wrapper.like(Personnel::getPersonnelName, personnelVO.getName())
+                .or()
+                .like(Personnel::getPersonnelDescription, personnelVO.getName())
+        );
+        //根据人员id查询
+        if (personnelVO.getId() != null) {
+            queryWrapper.in(Personnel::getId, Integer.parseInt(personnelVO.getId()));
+        }
+        //若前台有传部门ids,则根据部门ids查询人员列表
+        if (personnelVO.getDepartmentIds() != null && personnelVO.getDepartmentIds().size() != 0) {
+            LambdaQueryWrapper<AssoDepartPos> qw = new LambdaQueryWrapper<>();
+            qw.in(AssoDepartPos::getDepartmentId, personnelVO.getDepartmentIds());
+            List<Integer> dpIds = departPosiService.list(qw).stream().map(AssoDepartPos::getId).collect(Collectors.toList());
+            LambdaQueryWrapper<AssoPerDp> qw2 = new LambdaQueryWrapper<>();
+            qw2.in(AssoPerDp::getDepartPosiId, dpIds);
+            List<Integer> perIds = perDpService.list(qw2).stream().map(AssoPerDp::getPersonnelId).collect(Collectors.toList());
+            queryWrapper.in(Personnel::getId, perIds);
+        }
+        if (personnelVO.getTenant() != null) {
+            queryWrapper.eq(Personnel::getTenantId, personnelVO.getTenant());
+        }
+        //若前台有传职位ids,则根据职位ids查询人员列表
+        if (personnelVO.getPositionIds() != null && personnelVO.getPositionIds().size() != 0) {
+            LambdaQueryWrapper<AssoDepartPos> qw = new LambdaQueryWrapper<>();
+            qw.in(AssoDepartPos::getPositionId, personnelVO.getPositionIds());
+            List<Integer> dpIds = departPosiService.list(qw).stream().map(AssoDepartPos::getId).collect(Collectors.toList());
+            LambdaQueryWrapper<AssoPerDp> qw2 = new LambdaQueryWrapper<>();
+            qw2.in(AssoPerDp::getDepartPosiId, dpIds);
+            List<Integer> perIds = perDpService.list(qw2).stream().map(AssoPerDp::getPersonnelId).collect(Collectors.toList());
+            queryWrapper.in(Personnel::getId, perIds);
+        }
+        SecurityUtils.startDataScope("/admin/user/check");
+        List<Personnel> personnelList = this.page(new Page<>(personnelVO.getCurrent(), personnelVO.getSize()), queryWrapper).getRecords();
+        SecurityUtils.startDataScope("/admin/user/check");
+        long count = this.count(queryWrapper);
+        return Response.success(setPersonnelToVO2(personnelList), DataUtils.setPageColumn(personnelVO.getSize(), personnelVO.getCurrent(), Math.toIntExact(count)));
+    }
+
+    public Object setPersonnelToVO2(List<Personnel> personnelList) {
+        List<PersonnelVO> personnelVOS = new ArrayList<>();
+        for (Personnel personnel : personnelList) {
+            PersonnelVO personnelVO1 = new PersonnelVO();
+            personnelVO1
+                    .setUsername(personnel.getPersonnelUserName())
+                    .setId(personnel.getId().toString())
+                    .setGender(personnel.getPersonnelUserSex())
+                    .setName(personnel.getPersonnelName())
+                    .setEmail(personnel.getPersonnelEmail())
+                    .setMobile(personnel.getPersonnelPhone())
+                    .setState(personnel.getPersonnelStatus())
+                    .setRemark(personnel.getPersonnelDescription())
+                    .setPassword(personnel.getPersonnelPassword())
+                    .setQqNumber(personnel.getPersonnelQQ())
+                    .setPositions(departPosiService.queryAssociate(personnel.getId()))
+                    .setGroup(personGroupService.queryAssociatePerGroup(personnel.getId()))
+                    .setRole(personRoleService.queryAssociatePerRole(personnel.getId()))
+                    .setRoleList(personRoleService.getRoleListByPersonnelId(personnel.getId()))
+                    .setGroupList(personGroupService.getUserGroupListByPersonnelId(personnel.getId()))
+                    .setNail(personnel.getPersonnelDing())
+                    .setTenant(personnel.getTenantId())
+                    .setTenantName(tenantService.getById(personnel.getTenantId()).getTenantName());
+            personnelVOS.add(personnelVO1);
+        }
+        if (personnelVOS != null && !personnelVOS.isEmpty()) {
+            this.loadPersonnelVOS(personnelVOS);
+        }
+        return personnelVOS;
+    }
+
+    public void loadPersonnelVOS(List<PersonnelVO> personnelVOS) {
+        //过滤出所有的人员ids
+        List<Integer> personnelIds = personnelVOS.stream()
+                .map(PersonnelVO::getId)
+                .map(Integer::valueOf)
+                .collect(Collectors.toList());
+        if (personnelIds != null && !personnelIds.isEmpty()) {
+            LambdaQueryWrapper<AssoPersonVipType> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(AssoPersonVipType::getPersonId, personnelIds);
+            List<AssoPersonVipType> assoPersonVipTypes = assoPersonVipTypeService.list(queryWrapper);
+            if (assoPersonVipTypes != null && !assoPersonVipTypes.isEmpty()) {
+                // 过滤出vipTypeIds
+                List<Integer> vipTypeIds = assoPersonVipTypes.stream()
+                        .map(AssoPersonVipType::getVipTypeId)
+                        .collect(Collectors.toList());
+                if (vipTypeIds != null && !vipTypeIds.isEmpty()) {
+                    LambdaQueryWrapper<TenantVipType> queryWrapper1 = new LambdaQueryWrapper<>();
+                    queryWrapper1.in(TenantVipType::getId, vipTypeIds);
+                    List<TenantVipType> tenantVipTypes = tenantVipTypeService.list(queryWrapper1);
+                    if (tenantVipTypes != null && !tenantVipTypes.isEmpty()) {
+                        for (PersonnelVO personnelVO : personnelVOS) {
+                            AssoPersonVipType assoPersonVipType = assoPersonVipTypes
+                                    .stream()
+                                    .filter(item -> item.getPersonId().equals(Integer.valueOf(personnelVO.getId())))
+                                    .findFirst()
+                                    .orElse(null);
+                            if (assoPersonVipType != null) {
+                                personnelVO.setVipTypeId(assoPersonVipType.getVipTypeId());
+                                personnelVO.setExpitrTime(assoPersonVipType.getExpitrTime());
+                                if (assoPersonVipType.getVipTypeId() != null) {
+                                    TenantVipType tenantVipType = tenantVipTypes
+                                            .stream()
+                                            .filter(item -> item.getId().equals(personnelVO.getVipTypeId()))
+                                            .findFirst()
+                                            .orElse(null);
+                                    personnelVO.setVipTypeName(tenantVipType.getTenantVipName());
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    public Boolean updateState(Integer id, Integer state) {
+        Personnel personnel = this.getById(id);
+        if (personnel != null) {
+            personnel.setPersonnelStatus(state);
+            boolean updated = personnel.updateById();
+            return updated;
+        } else {
+            return false;
+        }
+    }
+
+    public List<PersonnelVO> getExpirePersons(GetQiaoBiPersonDTO getQiaoBiPersonDTO) {
+        Date date = new Date();
+        Date expireTime = DateUtils.getPlusMonthDate(date, 1);
+        getQiaoBiPersonDTO.setExpitrTime(expireTime);
+        List<PersonnelVO> personnelList = this.getBaseMapper().getQiaoBiPersons(getQiaoBiPersonDTO);
+
+        return personnelList;
+    }
 }

+ 47 - 1
PCS/src/main/java/cn/cslg/permission/service/PositionService.java

@@ -1,23 +1,29 @@
 package cn.cslg.permission.service;
 
+import cn.cslg.permission.common.model.qiaobi.QiaoBiGetDepartmentDTO;
+import cn.cslg.permission.common.model.vo.DepartmentInfoVO;
 import cn.cslg.permission.common.model.vo.PersonnelVO;
+import cn.cslg.permission.common.model.vo.PositionInfoVO;
 import cn.cslg.permission.common.model.vo.PositionVO;
 import cn.cslg.permission.common.utils.CacheUtils;
 import cn.cslg.permission.common.utils.DataUtils;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.SecurityUtils.SecurityUtils;
+import cn.cslg.permission.domain.Department;
 import cn.cslg.permission.domain.Position;
 import cn.cslg.permission.domain.Tenant;
 import cn.cslg.permission.mapper.PositionMapper;
 import cn.cslg.permission.service.associate.DepartPosiService;
 import cn.cslg.permission.service.associate.PerDpService;
 import cn.cslg.permission.service.associate.PositionRoleService;
+import cn.cslg.permission.service.qiaobi.EnterpriseCodeService;
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -41,7 +47,7 @@ public class PositionService extends ServiceImpl<PositionMapper, Position> {
     private final PerDpService perDpService;
     private final TenantService tenantService;
     private final CacheUtils cacheUtils;
-
+    private final EnterpriseCodeService enterpriseCodeService;
     @Transactional(rollbackFor = Exception.class)
     public String addPosition(PositionVO positionVO) {
         log.info("开始处理【新增职位】的业务,参数为:{}", positionVO);
@@ -112,6 +118,7 @@ public class PositionService extends ServiceImpl<PositionMapper, Position> {
             position
                     .setPositionName(positionVO.getPosition())
                     .setPositionDescription(positionVO.getDescribe())
+                    .setPositionIsOnly(positionVO.getIsmore())
                     .setId(positionVO.getId());
             position.updateById();
 
@@ -193,4 +200,43 @@ public class PositionService extends ServiceImpl<PositionMapper, Position> {
 
         return positionVOS;
     }
+
+    public String queryPositionById(Integer id) {
+        PositionInfoVO positionVO = new PositionInfoVO();
+        Position data = this.getById(id);
+        if (data != null) {
+            positionVO.setPosition(data.getPositionName());
+            positionVO.setIsmore(data.getPositionIsOnly());
+            positionVO.setId(data.getId());
+            positionVO.setDescribe(data.getPositionDescription());
+            positionVO.setRole(positionRoleService.getRoleIdsByPositionId(data.getId()));
+            positionVO.setRoleList(positionRoleService.getRoleListByPositionId(data.getId()));
+            positionVO.setTenant(data.getTenantId());
+            Tenant tenant = tenantService.getById(data.getTenantId());
+            if (tenant != null) {
+                positionVO.setTenantName(tenant.getTenantName());
+            }
+        }
+        return Response.success(positionVO);
+    }
+    public String getPositionListByCode(QiaoBiGetDepartmentDTO qiaoBiGetDepartmentDTO) {
+      String code=qiaoBiGetDepartmentDTO.getEnterpriseCode();
+        Integer tenantId = enterpriseCodeService.getTenantIdByCode(code);
+        LambdaQueryWrapper<Position> queryWrapper = new LambdaQueryWrapper<>();
+            //TODO 代码控制只能查看本租户内容
+            queryWrapper.eq(Position::getTenantId,tenantId);
+        List<Position> positionList = this.list(queryWrapper);
+        return Response.success(setPositionToVO(positionList));
+    }
+
+    public List<Position> getPositionByIds(List<Integer> ids){
+        List<Position> positionList =new ArrayList<>();
+        if(ids==null||ids.size()==0) {
+            return positionList;
+        }
+        LambdaQueryWrapper<Position> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.in(Position::getId,ids);
+        positionList=this.list(queryWrapper);
+        return  positionList;
+    }
 }

+ 73 - 2
PCS/src/main/java/cn/cslg/permission/service/RoleService.java

@@ -9,6 +9,9 @@ import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.SecurityUtils.SecurityUtils;
 import cn.cslg.permission.domain.Position;
 import cn.cslg.permission.domain.Role;
+import cn.cslg.permission.domain.associate.AssoPersonRole;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.RoleMapper;
 import cn.cslg.permission.service.associate.*;
 import cn.dev33.satoken.stp.StpUtil;
@@ -24,6 +27,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author 沈永艺
@@ -64,6 +68,7 @@ public class RoleService extends ServiceImpl<RoleMapper, Role> {
             e.printStackTrace();
         }
     }
+
     @Transactional(rollbackFor = Exception.class)
     public String deleteRole(RoleVO roleVO) {
         log.info("开始处理【删除角色】的业务,参数为:{}", roleVO);
@@ -108,8 +113,8 @@ public class RoleService extends ServiceImpl<RoleMapper, Role> {
             //根据角色id查询角色,获得角色类型 (用于判断是否为管理员:1为系统管理员 2为租户管理员 0为普通角色)
             Integer roleType = this.getRoleType(roleVO.getId());
             //若为超级管理员或租户管理员则无法修改,返回错误提示
-            PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
-            if(personnelVO.getRoleType()!=1) {
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            if (personnelVO.getRoleType() != 1) {
                 if (roleType.equals(1)) {
                     return Response.error("无法修改系统管理员");
                 } else if (roleType.equals(2)) {
@@ -212,4 +217,70 @@ public class RoleService extends ServiceImpl<RoleMapper, Role> {
 
     }
 
+    public List<Role> getRoleByPersonId(Integer personId, String applicationCode) {
+        List<Role> roleList = new ArrayList<>();
+        LambdaQueryWrapper<AssoPersonRole> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonRole::getPersonnelId, personId);
+        List<AssoPersonRole> assoPersonRoles = personRoleService.list(queryWrapper);
+
+        if (assoPersonRoles == null && assoPersonRoles.size() == 0) {
+            return roleList;
+        }
+        List<Integer> roleIds = assoPersonRoles.stream().map(AssoPersonRole::getRoleId).collect(Collectors.toList());
+
+        if (roleIds == null || roleIds.size() == 0) {
+            return roleList;
+        }
+        LambdaQueryWrapper<Role> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(Role::getId, roleIds);
+        if (applicationCode != null) {
+            queryWrapper1.eq(Role::getApplicationCode, applicationCode);
+        }
+        roleList = this.list(queryWrapper1);
+        return roleList;
+    }
+
+
+    public Integer checkLoginPersonRole() {
+        Integer personId = loginUtils.getId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
+        List<Role> roleList = this.getRoleByPersonId(personId,null);
+        if (roleList == null || roleList.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无权限访问数据");
+        }
+        Role role = roleList.stream().filter(item -> item.getRoleType().equals(1) || item.getRoleType().equals(2)).findFirst().orElse(null);
+        if (role == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无权限访问数据");
+        }
+        return personnelVO.getTenantId();
+    }
+
+    public Integer checkLoginPersonRole(String applicationId) {
+        Integer personId = loginUtils.getId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
+        List<Role> roleList = this.getRoleByPersonId(personId, null);
+        if (roleList == null || roleList.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无权限访问数据");
+        }
+        Role role = roleList.stream().filter(item -> item.getRoleType().equals(1) || item.getRoleType().equals(2)).findFirst().orElse(null);
+        if (role == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无权限访问数据");
+        }
+        return personnelVO.getTenantId();
+    }
+
+
+    public Integer checkApplicationRootRole(String applicationCode) {
+        Integer personId = loginUtils.getId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
+        List<Role> roleList = this.getRoleByPersonId(personId, applicationCode);
+        if (roleList == null || roleList.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无权限访问数据");
+        }
+        Role role = roleList.stream().filter(item -> item.getRoleType().equals(1)).findFirst().orElse(null);
+        if (role == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无权限访问数据");
+        }
+        return personnelVO.getTenantId();
+    }
 }

+ 30 - 7
PCS/src/main/java/cn/cslg/permission/service/SystemService.java

@@ -1,5 +1,6 @@
 package cn.cslg.permission.service;
 
+import cn.cslg.permission.common.model.common.SystemDictDTO;
 import cn.cslg.permission.common.model.dto.PasUserDTO;
 import cn.cslg.permission.common.model.vo.EntrustVO;
 import cn.cslg.permission.common.model.vo.PasUserVO;
@@ -107,6 +108,8 @@ public class SystemService {
         Map<String, Object> lst = new HashMap<>();
         //查询所有字典
         List<SysDict> sysDictList = sysDictService.list();
+
+
         for (SysDict sysDict : sysDictList) {
             //用字典的KEY值去字典项表内查询对应字典项
             LambdaQueryWrapper<SysDictItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -115,7 +118,6 @@ public class SystemService {
             //字典格式 KEY:KEY值对应的字典项
             lst.put(sysDict.getDictKey(), sysDictItemMapper.selectList(lambdaQueryWrapper));
         }
-        //数据字典格式 dataDict:查询的所有数据字典数据
         lst.put("dataDict", dataSourceService.list());
         return Response.success(lst);
     }
@@ -281,7 +283,7 @@ public class SystemService {
             ids.add(id);
         });
         LambdaQueryWrapper<Department> queryWrapper1 = new LambdaQueryWrapper<>();
-        queryWrapper1.in(Department::getId,ids);
+        queryWrapper1.in(Department::getId, ids);
         List<Map<String, Object>> mapList = new ArrayList<>();
         List<Department> departmentList = departmentService.list(queryWrapper1);
         departmentList.forEach(item -> {
@@ -406,7 +408,6 @@ public class SystemService {
     }
 
 
-
     /**
      * 获得部门排序
      *
@@ -434,7 +435,7 @@ public class SystemService {
      * @return
      */
     public List<EntrustVO> getEntrustsOrder(Integer orderType) {
-     List<EntrustVO>  entrustVOS=  departmentService.getBaseMapper().getEntrustsOrder(orderType);
+        List<EntrustVO> entrustVOS = departmentService.getBaseMapper().getEntrustsOrder(orderType);
         return entrustVOS;
     }
 
@@ -445,7 +446,7 @@ public class SystemService {
      * @return
      */
     public List<EntrustVO> getEntrustsByIdAndType(List<EntrustVO> entrustVOS) {
-        List<EntrustVO>  entrustVOList=  departmentService.getBaseMapper().getEntrustsByIdAndType(entrustVOS);
+        List<EntrustVO> entrustVOList = departmentService.getBaseMapper().getEntrustsByIdAndType(entrustVOS);
         return entrustVOList;
     }
 
@@ -455,8 +456,8 @@ public class SystemService {
      * @param
      * @return
      */
-    public List<EntrustVO> getEntrustsByName(String name,Integer type) {
-        List<EntrustVO>  entrustVOList=  departmentService.getBaseMapper().getEntrustsByName(name,type);
+    public List<EntrustVO> getEntrustsByName(String name, Integer type) {
+        List<EntrustVO> entrustVOList = departmentService.getBaseMapper().getEntrustsByName(name, type);
         return entrustVOList;
     }
 
@@ -478,4 +479,26 @@ public class SystemService {
         return ids;
     }
 
+
+    public String getSysDict(SystemDictDTO systemDictDTO) {
+        Map<String, Object> lst = new HashMap<>();
+        //查询所有字典
+
+        LambdaQueryWrapper<SysDict> queryWrapper = new LambdaQueryWrapper<>();
+        if (systemDictDTO.getType() != null) {
+            queryWrapper.eq(SysDict::getDictKey, systemDictDTO.getType());
+        }
+        List<SysDict> sysDictList = sysDictService.list(queryWrapper);
+
+
+        for (SysDict sysDict : sysDictList) {
+            //用字典的KEY值去字典项表内查询对应字典项
+            LambdaQueryWrapper<SysDictItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+            lambdaQueryWrapper.eq(SysDictItem::getDictParentKey, sysDict.getDictKey());
+            //装填数据
+            //字典格式 KEY:KEY值对应的字典项
+            lst.put(sysDict.getDictKey(), sysDictItemMapper.selectList(lambdaQueryWrapper));
+        }
+        return Response.success(lst);
+    }
 }

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/service/TenantService.java

@@ -70,6 +70,7 @@ public class TenantService extends ServiceImpl<TenantEntityMapper, Tenant> {
             return -1;
         }
 
+
         //租户表保存租户信息
         Tenant tenant = new Tenant();
         tenant

+ 251 - 104
PCS/src/main/java/cn/cslg/permission/service/VersionService.java

@@ -1,24 +1,45 @@
 package cn.cslg.permission.service;
 
 import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.common.SystemFile;
 import cn.cslg.permission.common.model.dto.*;
+import cn.cslg.permission.common.model.qiaobi.version.AddFunctionDTO;
+import cn.cslg.permission.common.model.qiaobi.version.QiaoBiVersionVO;
+import cn.cslg.permission.common.model.qiaobi.version.VersionStatusDTO;
+import cn.cslg.permission.common.model.vo.FunctionVO;
 import cn.cslg.permission.common.model.vo.VersionVO;
+import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.domain.Application;
+import cn.cslg.permission.domain.Function;
+import cn.cslg.permission.domain.Personnel;
 import cn.cslg.permission.domain.Version;
 import cn.cslg.permission.domain.associate.AssoFunctionModule;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.VersionMapper;
-import cn.cslg.permission.service.associate.AssoFunctionModuleService;
+import cn.cslg.permission.service.outSideApi.FileManagerService;
+import cn.cslg.permission.service.qiaobi.AssoFunctionModuleService;
+import cn.cslg.permission.service.qiaobi.AssoVersionFunctionService;
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author xiexiang
@@ -26,153 +47,279 @@ import java.util.List;
  */
 @Slf4j
 @Service
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class VersionService extends ServiceImpl<VersionMapper, Version> {
+
     private final AssoFunctionModuleService assoFunctionModuleService;
-//    private final FileManagerService fileManagerService;
+    //    private final FileManagerService fileManagerService;
+    private final FunctionService functionService;
+    private final AssoVersionFunctionService assoVersionFunctionService;
+    private final LoginUtils loginUtils;
+    private final PersonnelService personnelService;
+    private final FileManagerService fileManagerService;
+    private final ApplicationService applicationService;
 
     /**
      * 新增
      */
-    public Records add(VersionDTO versionDTO) {
-        Records records = new Records();
+    @Transactional(rollbackFor = Exception.class)
+    public Integer add(VersionDTO versionDTO) {
         Version version = new Version();
+        List<AssoFunctionCodeDTO> codeDTOS = versionDTO.getAssoFunctionCodeDTOS();
+        if (codeDTOS == null) {
+            return null;
+        }
+        String versionNum = versionDTO.getVersionNum();
         BeanUtils.copyProperties(versionDTO, version);
+        if (version.getStatus() != null && version.getStatus().equals(3)) {
+            version.setPublishTime(new Date());
+        }
+        version.setCreateId(loginUtils.getId());
         version.insert();
         Integer id = version.getId();
-        String versionNum = version.getVersionNum();
-        List<AssoFunctionModuleDTO> assoFunctionModuleDTOS = new ArrayList<>();
-        List<AssoFunctionCodeDTO> codeDTOS = versionDTO.getAssoFunctionCodeDTOS();
-        if (codeDTOS != null && !codeDTOS.isEmpty()) {
-            for (AssoFunctionCodeDTO codeDTO : codeDTOS) {
-                AssoFunctionModuleDTO assoFunctionModuleDTO = new AssoFunctionModuleDTO();
-                // 代码和功能赋值
-                assoFunctionModuleDTO.setFunctionId(codeDTO.getFunctionId());
-                assoFunctionModuleDTO.setCode(codeDTO.getCode());
-                // 版本id
-                assoFunctionModuleDTO.setVersionId(id);
-                // 版本号
-                assoFunctionModuleDTO.setVersion(versionNum);
-                // 字段配置
-                assoFunctionModuleDTO.setAuthType(codeDTO.getAuthType());
-                assoFunctionModuleDTO.setCreateUser(versionDTO.getCreateUser());
-                assoFunctionModuleDTO.setIsDelete(false);
-                assoFunctionModuleDTOS.add(assoFunctionModuleDTO);
-            }
-            assoFunctionModuleService.add(assoFunctionModuleDTOS);
-        }
-        records.setRecords(version.getId());
-        return records;
+        //保存版本和功能关联
+        List<Integer> functionIds = codeDTOS.stream().map(AssoFunctionCodeDTO::getFunctionId).collect(Collectors.toList());
+        assoVersionFunctionService.addAssoVersionFunctions(functionIds, version.getId());
+
+        assoFunctionModuleService.saveFunctionModuleBatch(codeDTOS, id, versionNum);
+        return id;
     }
 
     /**
-     *
+     * 更新版本
      */
-    public Records update(VersionDTO versionDTO) {
+    @Transactional(rollbackFor = Exception.class)
+    public Integer update(VersionDTO versionDTO) {
+//        Integer personId =loginUtils.getId();
+        Integer personId = 1;
         Records records = new Records();
         Integer id = versionDTO.getId();
+        this.checkVersionStatus(id);
+
         Version version = this.getById(id);
         BeanUtils.copyProperties(versionDTO, version);
+        if (versionDTO.getStatus() != null && versionDTO.getStatus().equals(3)) {
+            version.setPublishTime(new Date());
+        }
+        version.setCreateId(personId);
         version.updateById();
-        records.setRecords(id);
-        return records;
+        List<AssoFunctionCodeDTO> codeDTOS = versionDTO.getAssoFunctionCodeDTOS();
+        List<Integer> functionIds = new ArrayList<>();
+        if (codeDTOS != null && codeDTOS.size() > 0) {
+            functionIds = codeDTOS.stream().map(AssoFunctionCodeDTO::getFunctionId).collect(Collectors.toList());
+        }
+        assoVersionFunctionService.addAssoVersionFunctions(functionIds, version.getId());
+        String versionNum = version.getVersionNum();
+        assoFunctionModuleService.saveFunctionModuleBatch(codeDTOS, id, versionNum);
+        return id;
     }
 
-    public Records queryVersionList(QueryVersionListDTO queryVersionListDTO){
+    public Records queryVersionList(QueryVersionListDTO queryVersionListDTO) {
         Records records = new Records();
         Long current = queryVersionListDTO.getCurrent();
         Long size = queryVersionListDTO.getSize();
         String versionName = queryVersionListDTO.getVersionName();
         String versionNum = queryVersionListDTO.getVersionNum();
-
+        Integer status = queryVersionListDTO.getStatus();
+        List<Integer> ids = queryVersionListDTO.getIds();
         LambdaQueryWrapper<Version> queryWrapper = new LambdaQueryWrapper<>();
+        if (status != null) {
+            queryWrapper.eq(Version::getStatus, status);
+        }
         if (versionName != null) {
             queryWrapper.like(Version::getVersionName, versionName);
         }
         if (versionNum != null) {
             queryWrapper.like(Version::getVersionNum, versionNum);
         }
-        IPage<Version> versions = this.page(new Page<>(current, size), queryWrapper);
-        List<Version> versionList = versions.getRecords();
+        if (ids != null && ids.size() > 0) {
+            queryWrapper.in(Version::getId, ids);
+        }
+        queryWrapper.orderByDesc(Version::getCreateTime);
+        List<Version> versionList = new ArrayList<>();
+        if (current != null && size != null) {
+            IPage<Version> versions = this.page(new Page<>(current, size), queryWrapper);
+            versionList = versions.getRecords();
+            records.setCurrent(current);
+            records.setSize(size);
+            records.setTotal(versions.getTotal());
+        } else {
+            versionList = this.list(queryWrapper);
+        }
+        List<QiaoBiVersionVO> qiaoBiVersionVOS = this.loadQiaoBiVersionVO(versionList);
 
-        records.setCurrent(current);
-        records.setSize(current);
-        records.setTotal(versions.getTotal());
-        records.setRecords(versionList);
+        records.setRecords(qiaoBiVersionVOS);
         return records;
     }
 
-    public Records queryVersionInfo(QueryVersionInfoDTO queryVersionInfoDTO){
-        Records records = new Records();
-        VersionVO versionVO = new VersionVO();
-        Integer versionId = queryVersionInfoDTO.getId();
-        Version version = this.getById(versionId);
-        if (version != null) {
-            versionVO.setVersionNum(version.getVersionNum());
-            versionVO.setId(version.getId());
-            versionVO.setVersionName(version.getVersionName());
-            versionVO.setRemark(version.getRemark());
-            versionVO.setFileGuid(version.getFileGuid());
-            LambdaQueryWrapper<AssoFunctionModule> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(AssoFunctionModule::getVersionId, versionId);
-            AssoFunctionModule assoFunctionModule = assoFunctionModuleService.getOne(queryWrapper, false);
-            if (assoFunctionModule != null) {
-                versionVO.setAuthType(assoFunctionModule.getAuthType());
-                versionVO.setFunctionId(assoFunctionModule.getFunctionId());
-                versionVO.setCode(assoFunctionModule.getCode());
-                versionVO.setCreateUser(assoFunctionModule.getCreateUser());
-                versionVO.setCreateTime(assoFunctionModule.getCreateTime());
-            }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请选择版本");
         }
-        records.setRecords(versionVO);
-        return records;
+        //删除版本
+        this.deleteByIds(ids);
+        //删除版本和功能关联
+        assoVersionFunctionService.deleteByVersionIds(ids);
+        //删除版本和模块代码关联
+        assoFunctionModuleService.deleteByVersionIds(ids);
     }
 
-    public Records queryById(Integer id) throws IOException {
-        Records records = new Records();
-        VersionVO versionVO = new VersionVO();
+    /**
+     * 根据id删除版本
+     *
+     * @param ids
+     */
+    public void deleteByIds(List<Integer> ids) {
+        if (ids != null && ids.size() > 0) {
+            this.removeByIds(ids);
+        }
+    }
+
+    /**
+     * 窍笔应用添加功能
+     *
+     * @param addFunctionDTO
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public FunctionVO addFunction(AddFunctionDTO addFunctionDTO) {
+        String code = addFunctionDTO.getApplicationCode();
+        //根据功能名称以及上级id查询功能;
+        FunctionVO functionVO = new FunctionVO();
+        BeanUtils.copyProperties(addFunctionDTO, functionVO);
+        Application application = applicationService.getByCode(code);
+        if (application == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "应用不存在");
+        }
+        functionVO.setApply(application.getId());
+        Function function = functionService.getFunctionByName(functionVO);
+        if (function == null) {
+            functionVO.setFunctionType(1);
+            function = functionService.addFunctionByVo(functionVO);
+        }
+        FunctionVO functionVO1 = FunctionService.transformToVo(function);
+
+        return functionVO1;
+    }
+
+    /**
+     * 更新校验版本状态信息
+     *
+     * @param id
+     */
+    public void checkVersionStatus(Integer id) {
         Version version = this.getById(id);
-        if (version != null) {
-            versionVO.setVersionNum(version.getVersionNum());
-            versionVO.setId(version.getId());
-            versionVO.setVersionName(version.getVersionName());
-            versionVO.setRemark(version.getRemark());
-            versionVO.setFileGuid(version.getFileGuid());
-//            List<String> fileGuids = new ArrayList<>();
-//            fileGuids.add(version.getFileGuid());
-//            List<SystemFile> systemFiles = new ArrayList<>();
-//            if (fileGuids.size() != 0) {
-//                String res = fileManagerService.getSystemFileFromFMS(fileGuids);
-//                systemFiles = JSONObject.parseArray(res, SystemFile.class);
-//            }
-//            if (!systemFiles.isEmpty()) {
-//                versionVO.setSystemFileList(systemFiles);
-//            }
-
-            LambdaQueryWrapper<AssoFunctionModule> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(AssoFunctionModule::getVersionId, id);
-            AssoFunctionModule assoFunctionModule = assoFunctionModuleService.getOne(queryWrapper, false);
-            if (assoFunctionModule != null) {
-                versionVO.setAuthType(assoFunctionModule.getAuthType());
-                versionVO.setFunctionId(assoFunctionModule.getFunctionId());
-                versionVO.setCode(assoFunctionModule.getCode());
-                versionVO.setCreateUser(assoFunctionModule.getCreateUser());
-                versionVO.setCreateTime(assoFunctionModule.getCreateTime());
-            }
+        if (version == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "版本不存在");
+        }
+        if (version.getStatus().equals(3)) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "版本已发布,不允许修改");
+
         }
-        records.setRecords(versionVO);
-        return records;
     }
 
-    public void delete(List<Integer> ids){
-       for (Integer id : ids) {
-            Version version = this.getById(id);
-            if (version != null) {
-                LambdaQueryWrapper<AssoFunctionModule> queryWrapper = new LambdaQueryWrapper<>();
-                queryWrapper.eq(AssoFunctionModule::getVersionId, id);
-                assoFunctionModuleService.remove(queryWrapper);
-                this.removeById(id);
+    /**
+     * 装载窍笔vo类
+     *
+     * @param versions
+     * @return
+     */
+    public List<QiaoBiVersionVO> loadQiaoBiVersionVO(List<Version> versions) {
+        List<QiaoBiVersionVO> qiaoBiVersionVOS = new ArrayList<>();
+        if (versions == null || versions.size() == 0) {
+            return qiaoBiVersionVOS;
+        }
+
+        List<Integer> createIds = versions.stream().map(Version::getCreateId).collect(Collectors.toList());
+        List<Personnel> personnelList = new ArrayList<>();
+        if (createIds != null && createIds.size() > 0) {
+            personnelList = personnelService.getPersonByIds(createIds);
+        }
+
+
+        List<SystemFile> systemFiles = new ArrayList<>();
+        List<String> guids = versions.stream().filter(item -> item.getFileGuid() != null).map(Version::getFileGuid).collect(Collectors.toList());
+        if (guids.size() != 0) {
+            try {
+                if (guids != null && guids.size() != 0) {
+                    String res = fileManagerService.getSystemFileFromFMS(guids);
+                    systemFiles = JSONObject.parseArray(res, SystemFile.class);
+                    System.out.println("before" + systemFiles);
+                    if (systemFiles == null) {
+                        systemFiles = new ArrayList<>();
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace(
+                );
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "获取文件信息错误");
             }
-       }
+        }
+
+
+        //装载数据
+        for (Version item : versions) {
+            QiaoBiVersionVO qiaoBiVersionVO = new QiaoBiVersionVO();
+            BeanUtils.copyProperties(item, qiaoBiVersionVO);
+            Personnel personnel = personnelList.stream().filter(tem -> tem.getId().equals(item.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                qiaoBiVersionVO.setCreateName(personnel.getPersonnelName());
+            }
+            SystemFile systemFile = systemFiles.stream().filter(tem -> tem.getGuid().equals(item.getFileGuid())).findFirst().orElse(null);
+            qiaoBiVersionVO.setSystemFile(systemFile);
+            qiaoBiVersionVOS.add(qiaoBiVersionVO);
+        }
+
+        return qiaoBiVersionVOS;
+    }
+
+    public Version getLastVersion() {
+        LambdaQueryWrapper<Version> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Version::getStatus, 3).orderByDesc(Version::getPublishTime).orderByDesc(Version::getCreateTime);
+        Version version = this.getOne(queryWrapper, false);
+        return version;
+    }
+
+    public Integer updateVersionStatus(VersionStatusDTO versionStatusDTO) {
+        Integer versionId = versionStatusDTO.getId();
+        Integer status = versionStatusDTO.getStatus();
+        if (versionId == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请选择版本");
+        }
+        Version version = this.getById(versionId);
+        if (version == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "版本不存在");
+        }
+        if (version.getStatus() == 3) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "已发布版本不允许修改");
+
+        }
+        if (status == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "非法传参");
+
+        }
+        if (status.equals(3)) {
+            version.setPublishTime(new Date());
+        }
+        version.setStatus(status);
+        version.updateById();
+        return version.getId();
+    }
+
+    public QiaoBiVersionVO queryVersionLast() {
+        QiaoBiVersionVO qiaoBiVersionVO = new QiaoBiVersionVO();
+        LambdaQueryWrapper<Version> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Version::getStatus, 3);
+        queryWrapper.orderByDesc(Version::getPublishTime);
+        Version version = this.getOne(queryWrapper, false);
+        if (version == null) {
+            return qiaoBiVersionVO;
+        }
+        List<QiaoBiVersionVO> qiaoBiVersionVOS = this.loadQiaoBiVersionVO(Arrays.asList(version));
+        if (qiaoBiVersionVOS != null && qiaoBiVersionVOS.size() > 0) {
+            qiaoBiVersionVO = qiaoBiVersionVOS.get(0);
+        }
+        return qiaoBiVersionVO;
     }
 }

+ 0 - 74
PCS/src/main/java/cn/cslg/permission/service/associate/AssoFunctionModuleService.java

@@ -1,74 +0,0 @@
-package cn.cslg.permission.service.associate;
-
-import cn.cslg.permission.common.model.Records;
-import cn.cslg.permission.common.model.dto.*;
-import cn.cslg.permission.common.model.vo.AppVipTypeVO;
-import cn.cslg.permission.domain.TenantVipType;
-import cn.cslg.permission.domain.associate.AssoFunctionModule;
-import cn.cslg.permission.domain.qiaobi.AppVipType;
-import cn.cslg.permission.mapper.associate.AssoFunctionModuleMapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @Author xiexiang
- * @Date 2024/11/28
- */
-@Service
-@RequiredArgsConstructor
-public class AssoFunctionModuleService extends ServiceImpl<AssoFunctionModuleMapper, AssoFunctionModule> {
-
-    /**
-     * 新增
-     */
-    public Records add(List<AssoFunctionModuleDTO> assoFunctionModuleDTOS) {
-        Records records = new Records();
-        List<Integer> ids = new ArrayList<>();
-        List<AssoFunctionModule> assoFunctionModules = new ArrayList<>();
-        for (AssoFunctionModuleDTO assoFunctionModuleDTO : assoFunctionModuleDTOS) {
-            AssoFunctionModule assoFunctionModule = new AssoFunctionModule();
-            BeanUtils.copyProperties(assoFunctionModuleDTO, assoFunctionModule);
-            assoFunctionModules.add(assoFunctionModule);
-        }
-        if (!assoFunctionModules.isEmpty()) {
-            this.saveBatch(assoFunctionModules);
-            ids = assoFunctionModules.stream().map(AssoFunctionModule::getId).collect(Collectors.toList());
-        }
-        records.setRecords(ids);
-        return records;
-    }
-
-    /**
-     * 更新
-     */
-    public Records update(AssoFunctionModuleUpdateDTO updateDTO) {
-        Records records = new Records();
-        AssoFunctionModule assoFunctionModule = this.getById(updateDTO.getId());
-        BeanUtils.copyProperties(updateDTO, assoFunctionModule);
-        assoFunctionModule.updateById();
-        records.setRecords(assoFunctionModule.getId());
-        return records;
-    }
-
-    public Records queryAssoFunctionModules(QueryAssoFunctionModuleDTO queryDTO) {
-        Records records = new Records();
-        Long current = queryDTO.getPageNum();
-        Long size = queryDTO.getPageSize();
-        records.setCurrent(current);
-        records.setSize(size);
-        return records;
-    }
-
-
-
-    public void delete(List<Integer> ids){
-        this.removeByIds(ids);
-    }
-
-}

+ 45 - 27
PCS/src/main/java/cn/cslg/permission/service/impl/TenantVipTypeService.java

@@ -65,7 +65,7 @@ public class TenantVipTypeService extends ServiceImpl<TenantVipTypeMapper, Tenan
         TenantVipType tenantVipType = new TenantVipType();
         BeanUtils.copyProperties(tenantVipTypeFunctionAddNewDTO, tenantVipType);
         //是否启用属性暂时默认都设置为启用(禁用0 启用1),若以后有需求再调整
-        tenantVipType.setCreateTime(new Date()).setEnable(1);
+        tenantVipType.setCreateTime(new Date());tenantVipType.setEnable(1);
 
         //数据入会员表
         log.info("数据入会员表");
@@ -90,19 +90,19 @@ public class TenantVipTypeService extends ServiceImpl<TenantVipTypeMapper, Tenan
                         .setFunctionId(functionId)
                         .setFunctionModifyPath(functionModifyPath);
                 assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction);
-    //            //根据当前功能id查询其下未展示的子级功能
-    //            List<FunctionVO2> functionVO2s = functionMapper.selectNotShowChildrenById(functionId);
-    //            for (FunctionVO2 functionVO2 : functionVO2s) {
-    //                String path = functionVO2.getPath();
-    //                Integer notShowChidlrenFunctionId = functionVO2.getId();
-    //                Integer applicationId = functionVO2.getApplicationId();
-    //                String notShowChildrenFunctionModifyPath = applicationId + "," + path.substring(path.indexOf(",") + 1) + "," + notShowChidlrenFunctionId;
-    //                AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction2 = new AssoTenantVipTypeAndFunction()
-    //                        .setTenantVipTypeId(tenantVipTypeId)
-    //                        .setFunctionId(notShowChidlrenFunctionId)
-    //                        .setFunctionModifyPath(notShowChildrenFunctionModifyPath);
-    //                assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction2);
-    //            }
+                //            //根据当前功能id查询其下未展示的子级功能
+                //            List<FunctionVO2> functionVO2s = functionMapper.selectNotShowChildrenById(functionId);
+                //            for (FunctionVO2 functionVO2 : functionVO2s) {
+                //                String path = functionVO2.getPath();
+                //                Integer notShowChidlrenFunctionId = functionVO2.getId();
+                //                Integer applicationId = functionVO2.getApplicationId();
+                //                String notShowChildrenFunctionModifyPath = applicationId + "," + path.substring(path.indexOf(",") + 1) + "," + notShowChidlrenFunctionId;
+                //                AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction2 = new AssoTenantVipTypeAndFunction()
+                //                        .setTenantVipTypeId(tenantVipTypeId)
+                //                        .setFunctionId(notShowChidlrenFunctionId)
+                //                        .setFunctionModifyPath(notShowChildrenFunctionModifyPath);
+                //                assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction2);
+                //            }
             }
             //数据入会员和功能关联表
             log.info("数据插入租户会员类型和功能关联表");
@@ -222,19 +222,19 @@ public class TenantVipTypeService extends ServiceImpl<TenantVipTypeMapper, Tenan
                         .setFunctionId(functionId)
                         .setFunctionModifyPath(functionModifyPath);
                 assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction);
-    //            //根据当前功能id查询其下未展示的子级功能
-    //            List<FunctionVO2> functionVO2s = functionMapper.selectNotShowChildrenById(functionId);
-    //            for (FunctionVO2 functionVO2 : functionVO2s) {
-    //                String path = functionVO2.getPath();
-    //                Integer notShowChidlrenFunctionId = functionVO2.getId();
-    //                Integer applicationId = functionVO2.getApplicationId();
-    //                String notShowChildrenFunctionModifyPath = applicationId + "," + path.substring(path.indexOf(",") + 1) + "," + notShowChidlrenFunctionId;
-    //                AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction2 = new AssoTenantVipTypeAndFunction()
-    //                        .setTenantVipTypeId(tenantVipTypeId)
-    //                        .setFunctionId(notShowChidlrenFunctionId)
-    //                        .setFunctionModifyPath(notShowChildrenFunctionModifyPath);
-    //                assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction2);
-    //            }
+                //            //根据当前功能id查询其下未展示的子级功能
+                //            List<FunctionVO2> functionVO2s = functionMapper.selectNotShowChildrenById(functionId);
+                //            for (FunctionVO2 functionVO2 : functionVO2s) {
+                //                String path = functionVO2.getPath();
+                //                Integer notShowChidlrenFunctionId = functionVO2.getId();
+                //                Integer applicationId = functionVO2.getApplicationId();
+                //                String notShowChildrenFunctionModifyPath = applicationId + "," + path.substring(path.indexOf(",") + 1) + "," + notShowChidlrenFunctionId;
+                //                AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction2 = new AssoTenantVipTypeAndFunction()
+                //                        .setTenantVipTypeId(tenantVipTypeId)
+                //                        .setFunctionId(notShowChidlrenFunctionId)
+                //                        .setFunctionModifyPath(notShowChildrenFunctionModifyPath);
+                //                assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction2);
+                //            }
             }
             log.info("新数据入会员和功能关联表");
             rows = assoTenantVipTypeFunctionMapper.insertBatch(assoTenantVipTypeAndFunctions);
@@ -282,5 +282,23 @@ public class TenantVipTypeService extends ServiceImpl<TenantVipTypeMapper, Tenan
 
     }
 
+    public TenantVipType saveTenantVipType(TenantVipTypeFunctionAddNewDTO tenantVipTypeFunctionAddNewDTO) {
+        TenantVipType tenantVipType = new TenantVipType();
+        BeanUtils.copyProperties(tenantVipTypeFunctionAddNewDTO, tenantVipType);
+        tenantVipType.insert();
+        return tenantVipType;
+    }
+
+    public TenantVipType updateTenantVipType(TenantVipTypeFunctionAddNewDTO addNewDTO) {
+        Integer id = addNewDTO.getId();
+        TenantVipType tenantVipType = this.getById(id);
+        tenantVipType.setTenantVipName(addNewDTO.getTenantVipName());
+        tenantVipType.setEnable(addNewDTO.getEnable());
+        tenantVipType.setRemark(addNewDTO.getRemark());
+        tenantVipTypeMapper.updateById(tenantVipType);
+        return tenantVipType;
+
+
+    }
 
 }

+ 51 - 0
PCS/src/main/java/cn/cslg/permission/service/outSideApi/FileManagerService.java

@@ -0,0 +1,51 @@
+package cn.cslg.permission.service.outSideApi;
+
+
+import com.google.gson.Gson;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * Okhttp调用FMS上传文件接口
+ *
+ * @Author xiexiang
+ * @Date 2023/8/10
+ */
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class FileManagerService {
+    @Value("${FMSUrl}")
+    private String FMSUrl;
+
+    /**
+     * 调用文件系统获取文件信息接口
+     *
+     * @param fileIds 文件ids
+     */
+    public String getSystemFileFromFMS(List<String> fileIds) throws IOException {
+        String param = new Gson().toJson(fileIds);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(FMSUrl + "/fileManager/getFileData")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+}

+ 126 - 61
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AppVipTypeService.java

@@ -8,18 +8,28 @@ import cn.cslg.permission.common.model.dto.TenantVipTypeFunctionUpdateDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
 import cn.cslg.permission.common.model.vo.AppVipTypeVO;
+import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.domain.Personnel;
 import cn.cslg.permission.domain.TenantVipType;
 import cn.cslg.permission.domain.qiaobi.AppVipType;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.qiaobi.AppVipTypeMapper;
+import cn.cslg.permission.service.AssoTenantVipTypeFunctionService;
+import cn.cslg.permission.service.PersonnelService;
 import cn.cslg.permission.service.impl.TenantVipTypeService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author admin
@@ -31,86 +41,84 @@ import java.util.List;
 public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType> {
     private final TenantVipTypeService tenantVipTypeService;
     private final AppVipTypeMapper appVipTypeMapper;
+    private final AssoTenantVipTypeFunctionService assoTenantVipTypeFunctionService;
+    private final PersonnelService personnelService;
+    private final LoginUtils loginUtils;
+    private EnterpriseCodeService enterpriseCodeService;
 
     public List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList(QiaoBiVipTypeDTO qiaoBiVipTypeDTO) {
         qiaoBiVipTypeDTO.setAppCode("4e95e3d926a2a4befa5d913acc0aa9f5");
         List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList = this.getBaseMapper().queryQiaobiVipTypeVOs(qiaoBiVipTypeDTO);
         return qiaoBiVIPTypeVOList;
     }
+
+    /**
+     * @param id
+     * @return
+     */
     public AppVipType queryById(Integer id) {
-        LambdaQueryWrapper<AppVipType> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(AppVipType::getTenantVipTypeId,id);
-        AppVipType appVipType =this.getOne(queryWrapper);
+        LambdaQueryWrapper<AppVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppVipType::getTenantVipTypeId, id);
+        AppVipType appVipType = this.getOne(queryWrapper);
         return appVipType;
     }
 
     /**
      * 新增
      */
-    public Records add(AppVipTypeDTO appVipTypeDTO) {
-        Records records = new Records();
-        Integer id = null;
-        try {
-            TenantVipTypeFunctionAddNewDTO addNewDTO = new TenantVipTypeFunctionAddNewDTO();
-            addNewDTO.setTenantVipName(appVipTypeDTO.getTenantVipName());
-            addNewDTO.setRemark(appVipTypeDTO.getRemark());
-            addNewDTO.setEnable(appVipTypeDTO.getEnable());
-            addNewDTO.setCreatePersonId(1);
-            addNewDTO.setCreatePersonName("管理员");
-            addNewDTO.setUseType(1);
-            Integer tenantVipTypeId = tenantVipTypeService.addNew(addNewDTO);
-            if (tenantVipTypeId != null) {
-                AppVipType appVipType = new AppVipType();
-                appVipType.setTenantVipTypeId(tenantVipTypeId);
-                appVipType.setLastTime(appVipTypeDTO.getLastTime());
-                appVipType.setApplicationCode("4e95e3d926a2a4befa5d913acc0aa9f5");
-                appVipType.insert();
-                id = appVipType.getId();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
+    @Transactional(rollbackFor = Exception.class)
+    public Integer add(AppVipTypeDTO appVipTypeDTO) {
+        List<Integer> functionIds = appVipTypeDTO.getFunctionIds();
+        TenantVipTypeFunctionAddNewDTO addNewDTO = this.getTenantTypeAddDTO(appVipTypeDTO);
+        Integer tenantVipTypeId = tenantVipTypeService.addNew(addNewDTO);
+        if (tenantVipTypeId != null) {
+            AppVipType appVipType = new AppVipType();
+            appVipType.setTenantVipTypeId(tenantVipTypeId);
+            appVipType.setLastTime(appVipTypeDTO.getLastTime());
+            appVipType.setApplicationCode(appVipTypeDTO.getApplicationCode());
+            appVipType.insert();
         }
-        records.setRecords(id);
-        return records;
+        assoTenantVipTypeFunctionService.saveAssoBatch(functionIds, tenantVipTypeId);
+        return tenantVipTypeId;
     }
 
     /**
      * 更新
      */
-    public Records update(AppVipTypeDTO appVipTypeDTO) {
-        Records records = new Records();
-        Integer id = appVipTypeDTO.getId();
-        try {
-            if (id != null) {
-                AppVipType appVipType = this.getById(id);
-                Integer tenantVipTypeId = appVipType.getTenantVipTypeId();
-                appVipType.setLastTime(appVipTypeDTO.getLastTime());
-                appVipType.updateById();
-                TenantVipTypeFunctionUpdateDTO updateDTO = new TenantVipTypeFunctionUpdateDTO();
-                BeanUtils.copyProperties(appVipTypeDTO, updateDTO);
-                updateDTO.setId(tenantVipTypeId);
-                tenantVipTypeService.update(updateDTO);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        records.setRecords(id);
-        return records;
+    @Transactional(rollbackFor = Exception.class)
+    public Integer update(AppVipTypeDTO appVipTypeDTO) {
+        Integer tenantVipId = appVipTypeDTO.getId();
+        Integer lastTime = appVipTypeDTO.getLastTime();
+        List<Integer> functionIds = appVipTypeDTO.getFunctionIds();
+        AppVipType appVipType = this.getByTenantVipId(tenantVipId);
+        appVipType.setLastTime(lastTime);
+        appVipType.updateById();
+        TenantVipTypeFunctionAddNewDTO addNewDTO = this.getTenantTypeAddDTO(appVipTypeDTO);
+        tenantVipTypeService.updateTenantVipType(addNewDTO);
+        assoTenantVipTypeFunctionService.saveFunctionModuleBatch(functionIds, tenantVipId);
+
+        return tenantVipId;
     }
 
     public Records queryAppVipType(QueryVipDTO queryVipDTO) {
         Records records = new Records();
-        Long current = queryVipDTO.getPageNum();
-        Long size = queryVipDTO.getPageSize();
+        Long current = queryVipDTO.getCurrent();
+        Long size = queryVipDTO.getSize();
+        if (current != null && size != null) {
+            queryVipDTO.setCurrent(((current - 1) * size));
+        }
         List<AppVipTypeVO> appVipTypeVOS = appVipTypeMapper.queryAppVipType(queryVipDTO);
+
+        Long total = appVipTypeMapper.queryAppVipTypeTotal(queryVipDTO);
+        this.loadAppVipTypeVO(appVipTypeVOS);
         records.setRecords(appVipTypeVOS);
         records.setCurrent(current);
         records.setSize(size);
-        records.setTotal((long) appVipTypeVOS.size());
+        records.setTotal(total);
         return records;
     }
 
-    public Records getVipById(Integer id){
+    public Records getVipById(Integer id) {
         Records records = new Records();
         AppVipTypeVO appVipTypeVO = new AppVipTypeVO();
         AppVipType appVipType = this.getById(id);
@@ -118,9 +126,9 @@ public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType>
             Integer tenantVipTypeId = appVipType.getTenantVipTypeId();
             TenantVipType tenantVipType = tenantVipTypeService.getById(tenantVipTypeId);
             BeanUtils.copyProperties(appVipType, appVipTypeVO);
-            appVipTypeVO.setTenantVipName(tenantVipType.getTenantVipName());
-            appVipTypeVO.setCreatePersonId(tenantVipType.getCreatePersonId());
-            appVipTypeVO.setCreatePersonName(tenantVipType.getCreatePersonName());
+            appVipTypeVO.setVipTypeName(tenantVipType.getTenantVipName());
+            appVipTypeVO.setCreateId(tenantVipType.getCreatePersonId());
+            appVipTypeVO.setCreateName(tenantVipType.getCreatePersonName());
             appVipTypeVO.setCreateTime(tenantVipType.getCreateTime());
             appVipTypeVO.setRemark(tenantVipType.getRemark());
         }
@@ -128,18 +136,75 @@ public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType>
         return records;
     }
 
-    public void delete(List<Integer> ids){
-        //首先,删除关联的tenantVipType
-        for (Integer id : ids) {
-            AppVipType appVipType = this.getById(id);
-            Integer tenantTypeId = appVipType.getTenantVipTypeId();
-            if (tenantTypeId != null) {
-                tenantVipTypeService.delete(tenantTypeId);
-                this.removeById(id);
+    @Transactional
+    public void delete(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "请选择会员版本");
+        }
+        //删除会员类型
+        this.deleteByVipIds(ids);
+        tenantVipTypeService.removeByIds(ids);
+        assoTenantVipTypeFunctionService.deleteByVipIds(ids);
+    }
+
+    public void saveVipTye(AppVipTypeDTO appVipTypeDTO) {
+
+    }
+
+    public TenantVipTypeFunctionAddNewDTO getTenantTypeAddDTO(AppVipTypeDTO appVipTypeDTO) {
+        Integer personId = loginUtils.getId();
+        TenantVipTypeFunctionAddNewDTO addNewDTO = new TenantVipTypeFunctionAddNewDTO();
+        addNewDTO.setTenantVipName(appVipTypeDTO.getVipTypeName());
+        addNewDTO.setRemark(appVipTypeDTO.getRemark());
+        addNewDTO.setId(appVipTypeDTO.getId());
+        addNewDTO.setEnable(appVipTypeDTO.getEnable());
+        addNewDTO.setCreatePersonId(personId);
+        addNewDTO.setUseType(1);
+        return addNewDTO;
+    }
+
+    public AppVipType getByTenantVipId(Integer tenantVipId) {
+        LambdaQueryWrapper<AppVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppVipType::getTenantVipTypeId, tenantVipId);
+        AppVipType appVipType = this.getOne(queryWrapper, false);
+        return appVipType;
+    }
+
+    public List<AppVipTypeVO> loadAppVipTypeVO(List<AppVipTypeVO> appVipTypeVOS) {
+        if (appVipTypeVOS == null || appVipTypeVOS.size() == 0) {
+            return appVipTypeVOS;
+        }
+        List<Integer> createIds = appVipTypeVOS.stream().map(AppVipTypeVO::getCreateId).collect(Collectors.toList());
+        List<Personnel> personnelList = new ArrayList<>();
+        if (createIds != null && createIds.size() > 0) {
+            personnelList = personnelService.getPersonByIds(createIds);
+        }
+        for (AppVipTypeVO appVipTypeVO : appVipTypeVOS) {
+            Personnel personnel = personnelList.stream().filter(tem -> tem.getId().equals(appVipTypeVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                appVipTypeVO.setCreateName(personnel.getPersonnelName());
+
             }
         }
+        return appVipTypeVOS;
+    }
+
+    /**
+     * @param ids
+     */
+    public void deleteByVipIds(List<Integer> ids) {
+        LambdaQueryWrapper<AppVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AppVipType::getTenantVipTypeId, ids);
+        this.remove(queryWrapper);
 
     }
+
+    public List<QiaoBiVIPTypeVO> qiaoBiTenantVIPTypeVOList(QiaoBiVipTypeDTO qiaoBiVipTypeDTO) {
+        Integer tenantId = enterpriseCodeService.getTenantIdByCode(qiaoBiVipTypeDTO.getEnterpriseCode());
+        qiaoBiVipTypeDTO.setTenantId(tenantId);
+        List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList = this.getBaseMapper().queryQiaobiVipTypeVOs(qiaoBiVipTypeDTO);
+        return qiaoBiVIPTypeVOList;
+    }
 }
 
 

+ 279 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoFunctionModuleService.java

@@ -0,0 +1,279 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.dto.*;
+import cn.cslg.permission.common.model.qiaobi.version.QueryFunctionCodeTreeVO;
+import cn.cslg.permission.common.model.qiaobi.vipType.QueryVipFunctionDTO;
+import cn.cslg.permission.common.model.vo.AppVipTypeVO;
+import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
+import cn.cslg.permission.common.model.vo.FunctionVO;
+import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.domain.Application;
+import cn.cslg.permission.domain.Function;
+import cn.cslg.permission.domain.TenantVipType;
+import cn.cslg.permission.domain.Version;
+import cn.cslg.permission.domain.associate.AssoFunctionModule;
+import cn.cslg.permission.domain.qiaobi.AppVipType;
+import cn.cslg.permission.domain.qiaobi.AssoVersionFunction;
+import cn.cslg.permission.mapper.associate.AssoFunctionModuleMapper;
+import cn.cslg.permission.service.FunctionService;
+import cn.cslg.permission.service.VersionService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/11/28
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class AssoFunctionModuleService extends ServiceImpl<AssoFunctionModuleMapper, AssoFunctionModule> {
+    private final AssoVersionFunctionService assoVersionFunctionService;
+    private final FunctionService functionService;
+    private final LoginUtils loginUtils;
+    @Lazy
+    private final VersionService versionService;
+
+    /**
+     * 新增
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Records add(List<AssoFunctionModuleDTO> assoFunctionModuleDTOS) {
+        Records records = new Records();
+        List<Integer> ids = new ArrayList<>();
+        List<AssoFunctionModule> assoFunctionModules = new ArrayList<>();
+        for (AssoFunctionModuleDTO assoFunctionModuleDTO : assoFunctionModuleDTOS) {
+            AssoFunctionModule assoFunctionModule = new AssoFunctionModule();
+            BeanUtils.copyProperties(assoFunctionModuleDTO, assoFunctionModule);
+            assoFunctionModules.add(assoFunctionModule);
+        }
+        if (!assoFunctionModules.isEmpty()) {
+            this.saveBatch(assoFunctionModules);
+            ids = assoFunctionModules.stream().map(AssoFunctionModule::getId).collect(Collectors.toList());
+        }
+        records.setRecords(ids);
+        return records;
+    }
+
+    /**
+     * 更新
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Records update(AssoFunctionModuleUpdateDTO updateDTO) {
+        Records records = new Records();
+        AssoFunctionModule assoFunctionModule = this.getById(updateDTO.getId());
+        BeanUtils.copyProperties(updateDTO, assoFunctionModule);
+        assoFunctionModule.updateById();
+        records.setRecords(assoFunctionModule.getId());
+        return records;
+    }
+
+    public Records queryAssoFunctionModules(QueryAssoFunctionModuleDTO queryDTO) {
+        Records records = new Records();
+        Long current = queryDTO.getPageNum();
+        Long size = queryDTO.getPageSize();
+        records.setCurrent(current);
+        records.setSize(size);
+        return records;
+    }
+
+
+    public void delete(List<Integer> ids) {
+        this.removeByIds(ids);
+    }
+
+    /**
+     * 将输入数据格式化成assoFunctionModules
+     *
+     * @param assoFunctionCodeDTOS
+     * @param versionId
+     * @param versionNum
+     * @return
+     */
+
+    public List<AssoFunctionModule> transDtoToAssoFunctionModules(List<AssoFunctionCodeDTO> assoFunctionCodeDTOS, Integer versionId, String versionNum) {
+        List<AssoFunctionModule> assoFunctionModules = new ArrayList<>();
+        Integer personId = loginUtils.getId();
+
+        assoFunctionCodeDTOS.forEach(item -> {
+            List<AssoFunctionCodeDTO.FunctionCode> functionCodes = item.getFunctionCodes();
+            if (functionCodes != null && functionCodes.size() > 0) {
+                functionCodes.forEach(tem -> {
+                    AssoFunctionModule assoFunctionModule = assoFunctionModules.stream().filter(t -> t.getFunctionId().equals(item.getFunctionId()) && t.getAuthType().equals(tem.getAuthType())).findFirst().orElse(null);
+                    if (assoFunctionModule == null) {
+                        assoFunctionModule = new AssoFunctionModule();
+                        assoFunctionModule.setFunctionId(item.getFunctionId());
+                        assoFunctionModule.setVersionId(versionId);
+                        assoFunctionModule.setVersion(versionNum);
+                        assoFunctionModule.setCode(tem.getCode());
+                        assoFunctionModule.setCreateUser(personId);
+                        assoFunctionModule.setAuthType(tem.getAuthType());
+                        assoFunctionModules.add(assoFunctionModule);
+                    }
+                });
+            }
+        });
+        return assoFunctionModules;
+    }
+
+    public void saveModules(List<AssoFunctionModule> assoFunctionModules) {
+        if (assoFunctionModules != null && assoFunctionModules.size() > 0) {
+            this.saveBatch(assoFunctionModules);
+        }
+
+
+    }
+
+    public void updateModules(List<AssoFunctionModule> assoFunctionModules) {
+        if (assoFunctionModules != null && assoFunctionModules.size() > 0) {
+            this.updateBatchById(assoFunctionModules);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveFunctionModuleBatch(List<AssoFunctionCodeDTO> assoFunctionCodeDTOS, Integer versionId, String versionNum) {
+        if (assoFunctionCodeDTOS == null || assoFunctionCodeDTOS.size() == 0) {
+            return;
+        }
+        //将输入数据格式化成assoFunctionModules
+        List<AssoFunctionModule> assoFunctionModules = this.transDtoToAssoFunctionModules(assoFunctionCodeDTOS, versionId, versionNum);
+
+        //查询当前的版本代码
+        LambdaQueryWrapper<AssoFunctionModule> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoFunctionModule::getVersionId, versionId);
+        List<AssoFunctionModule> orgAssoFunctionModules = this.list(queryWrapper);
+
+        List<AssoFunctionModule> updateAssoFunctionModules = new ArrayList<>();
+
+        Iterator<AssoFunctionModule> assoIterator = assoFunctionModules.iterator();
+        while (assoIterator.hasNext()) {
+            AssoFunctionModule item = assoIterator.next();
+            if (orgAssoFunctionModules != null) {
+                Iterator<AssoFunctionModule> orgIterator = orgAssoFunctionModules.iterator();
+                while (orgIterator.hasNext()) {
+                    AssoFunctionModule tem = orgIterator.next();
+                    if (item.getFunctionId().equals(tem.getFunctionId()) && item.getAuthType().equals(tem.getAuthType())) {
+                        tem.setCode(item.getCode());
+                        updateAssoFunctionModules.add(tem);
+                        assoIterator.remove();
+                        orgIterator.remove();
+                    }
+                }
+
+            }
+        }
+
+
+        //删除版本代码
+        if (orgAssoFunctionModules != null && orgAssoFunctionModules.size() > 0) {
+            List<Integer> deleteIds = orgAssoFunctionModules.stream().map(AssoFunctionModule::getId).collect(Collectors.toList());
+            if (deleteIds != null && deleteIds.size() > 0) {
+                this.removeByIds(deleteIds);
+            }
+        }
+        //添加版本代码
+        this.saveModules(assoFunctionModules);
+        //更新版本代码
+        this.updateModules(updateAssoFunctionModules);
+    }
+
+    /**
+     * 根据版本id删除模块代码
+     *
+     * @param versionIds
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteByVersionIds(List<Integer> versionIds) {
+        if (versionIds == null || versionIds.size() == 0) {
+            return;
+        }
+        LambdaQueryWrapper<AssoFunctionModule> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoFunctionModule::getVersionId, versionIds);
+        this.remove(queryWrapper);
+
+    }
+
+    public List<AssoFunctionModule> getByVersionId(Integer versionId) {
+        List<AssoFunctionModule> assoFunctionModules = new ArrayList<>();
+        if (versionId == null) {
+            return assoFunctionModules;
+        }
+        LambdaQueryWrapper<AssoFunctionModule> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoFunctionModule::getVersionId, versionId);
+        assoFunctionModules = this.list(queryWrapper);
+        return assoFunctionModules;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public List<FunctionCodeTreeVO> getFunctionCodeTree(QueryFunctionCodeTreeVO queryFunctionCodeTreeVO) {
+        Integer versionId = queryFunctionCodeTreeVO.getVersionId();
+        //当未传版本时
+        if (versionId == null) {
+            Version version = versionService.getLastVersion();
+            if (version != null) {
+                versionId = version.getId();
+            }
+        }
+        List<FunctionCodeTreeVO> functionCodeTreeVOS = new ArrayList<>();
+        //根据versionId查询功能
+        List<AssoVersionFunction> assoVersionFunctions = assoVersionFunctionService.getByVersionId(versionId);
+        if (assoVersionFunctions == null || assoVersionFunctions.size() == 0) {
+            return functionCodeTreeVOS;
+        }
+        //根据versionId 查询功能代码
+        List<AssoFunctionModule> assoFunctionModules = this.getByVersionId(versionId);
+
+        List<Integer> functionIds = assoVersionFunctions.stream().map(AssoVersionFunction::getFunctionId).collect(Collectors.toList());
+
+        List<Function> functionList = functionService.getFuncListByIds(functionIds);
+        List<Function> rootFunctionList = functionList.stream().filter(item -> item.getFunctionUp() != null && item.getFunctionUp().equals(0)).collect(Collectors.toList());
+
+        List<FunctionCodeTreeVO> functionCodeTreeVOS1 = new ArrayList<>();
+        rootFunctionList.forEach(item -> {
+            List<AssoFunctionModule> assoFunctionModules1 = assoFunctionModules.stream().filter(tem -> tem.getFunctionId().equals(item.getId())).collect(Collectors.toList());
+            FunctionCodeTreeVO functionCodeTreeVO = this.loadFunctionCodeTreeVO(item, assoFunctionModules1);
+            functionCodeTreeVOS1.add(functionCodeTreeVO);
+        });
+        List<FunctionCodeTreeVO> functionCodeTreeVOS2 = new ArrayList<>();
+        functionCodeTreeVOS2.addAll(functionCodeTreeVOS1);
+        while (functionCodeTreeVOS1.size() > 0) {
+            FunctionCodeTreeVO functionCodeTreeVO = functionCodeTreeVOS1.remove(0);
+            List<Function> childFunctions = functionList.stream().filter(item -> item.getFunctionUp().equals(functionCodeTreeVO.getId())).collect(Collectors.toList());
+            List<FunctionCodeTreeVO> childVos = new ArrayList<>();
+            if (childFunctions != null & childFunctions.size() > 0) {
+                childFunctions.forEach(item -> {
+                    List<AssoFunctionModule> assoFunctionModules1 = assoFunctionModules.stream().filter(tem -> tem.getFunctionId().equals(item.getId())).collect(Collectors.toList());
+                    FunctionCodeTreeVO childVo = this.loadFunctionCodeTreeVO(item, assoFunctionModules1);
+                    childVos.add(childVo);
+                });
+            }
+            functionCodeTreeVOS1.addAll(childVos);
+            functionCodeTreeVO.setChildren(childVos);
+        }
+        return functionCodeTreeVOS2;
+    }
+
+    public static FunctionCodeTreeVO loadFunctionCodeTreeVO(Function function, List<AssoFunctionModule> assoFunctionModules) {
+        FunctionCodeTreeVO functionCodeTreeVO = new FunctionCodeTreeVO();
+        FunctionVO functionVO = FunctionService.transformToVo(function);
+        BeanUtils.copyProperties(functionVO, functionCodeTreeVO);
+        functionCodeTreeVO.setFunctionCodes(assoFunctionModules);
+        return functionCodeTreeVO;
+    }
+
+
+
+
+
+}

+ 0 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPaidCodeRegistInfoService.java


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác