Parcourir la source

Merge remote-tracking branch 'origin/master' into develop_zqc

# Conflicts:
#	menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/package-info.java
#	menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/package-info.java
WIN10-20210525Q\Administrator il y a 1 an
Parent
commit
93fe49eeff
100 fichiers modifiés avec 1584 ajouts et 2377 suppressions
  1. 4 0
      citu-framework/citu-spring-boot-starter-web/src/main/java/com/citu/framework/web/core/handler/GlobalExceptionHandler.java
  2. 3 0
      citu-module-infra/citu-module-infra-biz/src/main/resources/application.yaml
  3. 1 1
      citu-module-system/citu-module-system-biz/src/main/resources/application.yaml
  4. 0 6
      menduner/menduner-common/pom.xml
  5. 11 1
      menduner/menduner-common/src/main/java/com/citu/module/menduner/common/util/LoginUserContext.java
  6. 0 6
      menduner/menduner-im-api/pom.xml
  7. 0 1
      menduner/menduner-im-biz/pom.xml
  8. 0 40
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/permission/CustomDataPermissionAutoConfiguration.java
  9. 0 197
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/permission/CustomDataPermissionRule.java
  10. 0 18
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/permission/CustomDataPermissionRuleCustomizer.java
  11. 0 25
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/framework/datapermission/config/DataPermissionConfiguration.java
  12. 2 2
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/framework/security/config/SecurityConfiguration.java
  13. 0 817
      menduner/menduner-im-biz/src/main/resources/major/major.csv
  14. 0 5
      menduner/menduner-im-biz/src/main/resources/major/readme.txt
  15. 1 1
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/EasyRulesConstants.java
  16. 8 7
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/ErrorCodeConstants.java
  17. 1 1
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/OperationEnum.java
  18. 0 50
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/record/PointBizTypeEnum.java
  19. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/PointRuleTest.java
  20. 0 46
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/record/PointRecordController.java
  21. 0 76
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/user/UserPointController.java
  22. 0 51
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/app/record/AppPointRecordController.java
  23. 0 11
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/app/record/vo/AppPointRecordRespVO.java
  24. 0 37
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/app/user/AppUserPointController.java
  25. 5 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventMetricSaveReqVO.java
  26. 3 3
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordSaveReqVO.java
  27. 0 24
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointBaseVO.java
  28. 0 25
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointRespVO.java
  29. 0 20
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointSaveReqVO.java
  30. 0 25
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointUpdateReqVO.java
  31. 0 20
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/convert/PointRecordConvert.java
  32. 0 22
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/convert/UserPointConvert.java
  33. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/core/EasyRulesEngine.java
  34. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/core/PointRule.java
  35. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/core/PointRuleListener.java
  36. 0 41
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/dataobject/user/UserPointDO.java
  37. 0 62
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/record/PointRecordMapper.java
  38. 0 78
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/user/UserPointMapper.java
  39. 14 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/redis/RedisKeyConstants.java
  40. 3 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/framework/rpc/config/RpcConfiguration.java
  41. 8 9
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/mq/consumer/UserPointConsumer.java
  42. 2 2
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/mq/message/UserPointSendMessage.java
  43. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/rule/DynamicPointRule.java
  44. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/rule/DynamicRule.java
  45. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/rule/DynamicRuleAction.java
  46. 24 6
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigServiceImpl.java
  47. 47 22
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventRecordServiceImpl.java
  48. 7 7
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackServiceImpl.java
  49. 0 71
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordService.java
  50. 0 118
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordServiceImpl.java
  51. 11 8
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/signin/SignInRecordServiceImpl.java
  52. 0 83
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointService.java
  53. 0 102
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointServiceImpl.java
  54. 1 1
      menduner/menduner-reward-biz/src/main/resources/application-dev.yaml
  55. 1 1
      menduner/menduner-reward-biz/src/main/resources/application-local.yaml
  56. 3 0
      menduner/menduner-reward-biz/src/main/resources/application.yaml
  57. 8 6
      menduner/menduner-reward-biz/src/main/resources/i18n/messages_en_US.properties
  58. 8 6
      menduner/menduner-reward-biz/src/main/resources/i18n/messages_zh_CN.properties
  59. 1 1
      menduner/menduner-reward-biz/src/test/java/com/citu/module/menduner/reward/service/Test.java
  60. 106 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/AccountRecordSaveReqDTO.java
  61. 21 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/AccountRespDTO.java
  62. 87 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/EnterpriseAccountApi.java
  63. 73 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/UserAccountApi.java
  64. 60 3
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  65. 8 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/MathOperationEnum.java
  66. 22 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/AccountRecordTypeEnum.java
  67. 52 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/BalanceBizTypeEnum.java
  68. 53 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/PointBizTypeEnum.java
  69. 1 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/cv/JobCvRelStatusEnum.java
  70. 0 23
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/hire/HireJobCvRelStatusEnum.java
  71. 21 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/invite/EnterpriseInviteTypeEnum.java
  72. 4 5
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/permission/MdeRoleCodeEnum.java
  73. 6 0
      menduner/menduner-system-biz/pom.xml
  74. 82 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/api/account/EnterpriseAccountApiImpl.java
  75. 82 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/api/account/UserAccountApiImpl.java
  76. 104 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/EnterpriseAccountController.java
  77. 8 8
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/EnterpriseUserLookController.java
  78. 31 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/vo/EnterpriseAccountPageRespVO.java
  79. 14 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/hire/HireCommissionRatioController.java
  80. 0 94
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/hire/HireJobCvRelController.java
  81. 94 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteController.java
  82. 93 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteRecordController.java
  83. 45 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/record/EnterpriseAccountRecordController.java
  84. 43 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/record/UserAccountRecordController.java
  85. 46 40
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/user/UserAccountController.java
  86. 28 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/user/vo/UserAccountPageRespVO.java
  87. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/AppEnterpriseController.java
  88. 35 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/AppJobCvRelController.java
  89. 15 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelQueryReqVO.java
  90. 32 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelReqVO.java
  91. 28 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelRespVO.java
  92. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppEnterpriseJobHomeRespVO.java
  93. 4 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedDetailRespVO.java
  94. 21 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedPageReqVO.java
  95. 4 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedRespVO.java
  96. 16 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobCvLookRespVO.java
  97. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobCvRelReqVO.java
  98. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/AppPersonController.java
  99. 17 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/AppPersonResumeController.java
  100. 35 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/resume/AppPersonInfoSaveSimpleReqVO.java

+ 4 - 0
citu-framework/citu-spring-boot-starter-web/src/main/java/com/citu/framework/web/core/handler/GlobalExceptionHandler.java

@@ -2,6 +2,7 @@ package com.citu.framework.web.core.handler;
 
 import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.citu.framework.apilog.core.service.ApiErrorLogFrameworkService;
 import com.citu.framework.common.exception.ErrorCode;
@@ -300,6 +301,9 @@ public class GlobalExceptionHandler {
 
 
     private void createExceptionLog(HttpServletRequest req, Throwable e) {
+        if(ObjectUtil.isEmpty(WebFrameworkUtils.getTenantId(req))) {
+            return;
+        }
         // 插入错误日志
         ApiErrorLogCreateReqDTO errorLog = new ApiErrorLogCreateReqDTO();
         try {

+ 3 - 0
citu-module-infra/citu-module-infra-biz/src/main/resources/application.yaml

@@ -121,6 +121,8 @@ citu:
   web:
     admin-ui:
       url: http://dashboard.citu.iocoder.cn # Admin 管理后台 UI 的地址
+  access-log:
+    enable: true
   websocket:
     enable: true # websocket的开关
     path: /infra/ws # 路径
@@ -151,6 +153,7 @@ citu:
       - com.citu.module.pay.enums.ErrorCodeConstants
       - com.citu.module.system.enums.ErrorCodeConstants
       - com.citu.module.mp.enums.ErrorCodeConstants
+    enable: false
   tenant: # 多租户相关配置项
     enable: true
     ignore-urls:

+ 1 - 1
citu-module-system/citu-module-system-biz/src/main/resources/application.yaml

@@ -148,7 +148,7 @@ citu:
   captcha:
     enable: true # 验证码的开关,默认为 true;
   error-code: # 错误码相关配置项
-    enable: true
+    enable: false
     constants-class-list:
       - com.citu.module.system.enums.ErrorCodeConstants
   tenant: # 多租户相关配置项

+ 0 - 6
menduner/menduner-common/pom.xml

@@ -74,12 +74,6 @@
             <artifactId>citu-spring-boot-starter-excel</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>com.citu</groupId>
-            <artifactId>citu-spring-boot-starter-es</artifactId>
-            <version>${revision}</version>
-        </dependency>
-
         <!-- 监控相关 -->
         <dependency>
             <groupId>com.citu</groupId>

+ 11 - 1
menduner/menduner-common/src/main/java/com/citu/module/menduner/common/util/LoginUserContext.java

@@ -11,7 +11,7 @@ import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exce
 /**
  * 登录用户上下文
  *
- * @author rayson
+ * @author Rayson
  **/
 public class LoginUserContext {
 
@@ -80,6 +80,16 @@ public class LoginUserContext {
         return Long.valueOf(loginUser.getInfo().get(LoginUser.INFO_KEY_DATA_ID));
     }
 
+    /**
+     * 获取当前登录的用户的企业id
+     **/
+    public static Long getEnterpriseId2(LoginUser loginUser) {
+        if (!checkEnterprise(loginUser)) {
+          return null;
+        }
+        return Long.valueOf(loginUser.getInfo().get(LoginUser.INFO_KEY_DATA_ID));
+    }
+
     /**
      * 效验当前用户企业信息是否存在
      **/

+ 0 - 6
menduner/menduner-im-api/pom.xml

@@ -20,12 +20,6 @@
             <groupId>com.citu</groupId>
             <artifactId>menduner-common</artifactId>
             <version>${revision}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.citu</groupId>
-                    <artifactId>citu-spring-boot-starter-es</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
     </dependencies>

+ 0 - 1
menduner/menduner-im-biz/pom.xml

@@ -32,7 +32,6 @@
         </dependency>
 
 
-
         <!-- Registry 注册中心相关 -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>

+ 0 - 40
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/permission/CustomDataPermissionAutoConfiguration.java

@@ -1,40 +0,0 @@
-package com.citu.module.menduner.im.config.permission;
-
-import cn.hutool.extra.spring.SpringUtil;
-//import com.citu.module.menduner.system.api.permission.MendunerPermissionApi;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.List;
-
-/**
- * 自定义的数据权限 AutoConfiguration
- *
- * @author Rayson
- */
-@Configuration
-//@ConditionalOnClass(LoginUser.class)
-//@ConditionalOnBean(value = CustomDataPermissionRuleCustomizer.class)
-public class CustomDataPermissionAutoConfiguration {
-
-//    @Bean
-//    public CustomDataPermissionRule customDataPermissionRule(MendunerPermissionApi permissionApi,
-//                                                             List<CustomDataPermissionRuleCustomizer> customizers) {
-//        // Cloud 专属逻辑:优先使用本地的 MendunerPermissionApi 实现类,而不是 Feign 调用
-//        // 原因:在创建租户时,租户还没创建好,导致 Feign 调用获取数据权限时,报“租户不存在”的错误
-//        try {
-//            MendunerPermissionApi permissionApiImpl = SpringUtil.getBean("mendunerPermissionApi", MendunerPermissionApi.class);
-//            if (permissionApiImpl != null) {
-//                permissionApi = permissionApiImpl;
-//            }
-//        } catch (Exception ignored) {
-//        }
-//
-//        // 创建 CustomDataPermissionRule 对象
-//        CustomDataPermissionRule rule = new CustomDataPermissionRule(permissionApi);
-//        // 补全表配置
-//        customizers.forEach(customizer -> customizer.customize(rule));
-//        return rule;
-//    }
-
-}

+ 0 - 197
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/permission/CustomDataPermissionRule.java

@@ -1,197 +0,0 @@
-package com.citu.module.menduner.im.config.permission;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.text.CharSequenceUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
-import com.citu.framework.common.enums.UserTypeEnum;
-import com.citu.framework.common.util.collection.CollectionUtils;
-import com.citu.framework.common.util.json.JsonUtils;
-import com.citu.framework.datapermission.core.rule.DataPermissionRule;
-import com.citu.framework.mybatis.core.dataobject.BaseDO;
-import com.citu.framework.mybatis.core.util.MyBatisUtils;
-import com.citu.framework.security.core.LoginUser;
-import com.citu.framework.security.core.util.SecurityFrameworkUtils;
-//import com.citu.module.menduner.im.api.permission.MendunerPermissionApi;
-import com.citu.module.menduner.common.util.LoginUserContext;
-import com.citu.module.system.api.permission.dto.DataPermissionRespDTO;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import net.sf.jsqlparser.expression.*;
-import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
-import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
-import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
-import net.sf.jsqlparser.expression.operators.relational.InExpression;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import static com.citu.module.menduner.common.util.LoginUserContext.checkEnterprise;
-
-/**
- * @author Rayson
- * @description CustomDataPermissionRule
- * 基于自定义的 {@link DataPermissionRule} 数据权限规则实现
- * @create 2024/5/8 下午7:41
- **/
-@AllArgsConstructor
-@Slf4j
-public class CustomDataPermissionRule implements DataPermissionRule {
-
-    /**
-     * LoginUser 的 Context 缓存 Key
-     */
-    protected static final String CONTEXT_KEY = CustomDataPermissionRule.class.getSimpleName();
-
-    static final Expression EXPRESSION_NULL = new NullValue();
-    /**
-     * 基于数据的表字段配置 TODO 目前只支持一个数据权限字段,xx_id 和 user_id 不能同时配置。
-     * 如基于部门的数据编号字段是 自定义xx_id,基于店铺的数据编号字段是 shop_id,通过该配置自定义,如 group_id。
-     * <p>
-     * key:表名
-     * value:字段名
-     */
-    private final static Map<String, String> DATA_COLUMNS = new HashMap<>();
-    /**
-     * 基于用户的表字段配置
-     * 一般情况下,每个表的数据编号字段是 user_id,通过该配置自定义,如 admin_user_id。
-     * <p>
-     * key:表名
-     * value:字段名
-     */
-    private final static Map<String, String> USER_COLUMNS = new HashMap<>();
-    /**
-     * 所有表名,是 {@link #DATA_COLUMNS} 和 {@link #USER_COLUMNS} 的合集
-     */
-    private final static Set<String> TABLE_NAMES = new HashSet<>();
-
-//    private final MendunerPermissionApi permissionApi;
-
-    @Override
-    public Set<String> getTableNames() {
-        return TABLE_NAMES;
-    }
-
-    @Override
-    public Expression getExpression(String tableName, Alias tableAlias) {
-        // 只有登陆用户的情况下,才进行数据权限的处理
-        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
-        if (loginUser == null) {
-            return null;
-        }
-        // 只有MEMBER_ADMIN类型的用户,才进行数据权限的处理
-        if (ObjectUtil.notEqual(loginUser.getUserType(), UserTypeEnum.MEMBER_ADMIN.getValue())) {
-            return null;
-        }
-
-        if (!checkEnterprise(loginUser)) {
-            // 没有企业id
-            return null;
-        }
-        // 获得数据权限
-        DataPermissionRespDTO dataPermission = loginUser.getContext(CONTEXT_KEY, DataPermissionRespDTO.class);
-        // 从上下文中拿不到,则调用逻辑进行获取
-        if (dataPermission == null) {
-            Long enterpriseId = LoginUserContext.getEnterpriseId(loginUser);
-//            dataPermission = permissionApi.getDataPermission(loginUser.getId(), enterpriseId).getCheckedData();
-//            if (dataPermission == null) {
-//                log.error("[getExpression][LoginUser({}) 获取数据权限为 null]", JsonUtils.toJsonString(loginUser));
-//                throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 未返回数据权限",
-//                        loginUser.getId(), tableName, tableAlias.getName()));
-//            }
-            // 添加到上下文中,避免重复计算
-            loginUser.setContext(CONTEXT_KEY, dataPermission);
-        }
-
-        // 情况一,如果是 ALL 可查看全部,则无需拼接条件
-        if (dataPermission.getAll()) {
-            return null;
-        }
-
-        // 情况二,即不能查看部门,又不能查看自己,则说明 100% 无权限
-        if (CollUtil.isEmpty(dataPermission.getDataIds())
-                && Boolean.FALSE.equals(dataPermission.getSelf())) {
-            return new EqualsTo(null, null); // WHERE null = null,可以保证返回的数据为空
-        }
-
-        // 情况三,拼接 Dept 和 User 的条件,最后组合
-        Expression dataExpression = buildDeptExpression(tableName, tableAlias, dataPermission.getDataIds());
-        Expression userExpression = buildUserExpression(tableName, tableAlias, dataPermission.getSelf(), loginUser.getId());
-        if (dataExpression == null && userExpression == null) {
-            // TODO 芋艿:获得不到条件的时候,暂时不抛出异常,而是不返回数据
-            log.warn("[getExpression][LoginUser({}) Table({}/{}) DeptDataPermission({}) 构建的条件为空]",
-                    JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(dataPermission));
-            return EXPRESSION_NULL; // AND NULL
-        }
-
-        if (dataExpression == null) {
-            return userExpression;
-        }
-        if (userExpression == null) {
-            return dataExpression;
-        }
-        // // 目前,如果有指定数据 + 可查看自己,采用 OR 条件。即,WHERE (xx_id IN ? OR user_id = ?)
-        // return new Parenthesis(new OrExpression(dataExpression, userExpression));
-        // 改为 AND 条件。即,WHERE (xx_id IN ? and user_id = ?)
-        return new Parenthesis(new AndExpression(dataExpression, userExpression));
-    }
-
-    private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> dataIds) {
-        // 如果不存在配置,则无需作为条件
-        String columnName = DATA_COLUMNS.get(tableName);
-        if (StrUtil.isEmpty(columnName)) {
-            return null;
-        }
-        // 如果为空,则无条件
-        if (CollUtil.isEmpty(dataIds)) {
-            return null;
-        }
-        // 拼接条件
-        return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName),
-                new ExpressionList(CollectionUtils.convertList(dataIds, LongValue::new)));
-    }
-
-    private Expression buildUserExpression(String tableName, Alias tableAlias, Boolean self, Long userId) {
-        // 如果不查看自己,则无需作为条件
-        if (Boolean.FALSE.equals(self)) {
-            return null;
-        }
-        String columnName = USER_COLUMNS.get(tableName);
-        if (StrUtil.isEmpty(columnName)) {
-            return null;
-        }
-        // 拼接条件
-        return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), new LongValue(userId));
-    }
-
-    // ==================== 添加配置 ====================
-    public void addDataColumn(Class<? extends BaseDO> entityClass, String columnName) {
-        String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName();
-        addDataColumn(tableName, columnName);
-    }
-
-
-    public void addDataColumn(String tableName, String columnName) {
-        if (CharSequenceUtil.isEmpty(tableName)) {
-            return;
-        }
-        DATA_COLUMNS.put(tableName, columnName);
-        TABLE_NAMES.add(tableName);
-    }
-
-    public void addUserColumn(Class<? extends BaseDO> entityClass, String columnName) {
-        String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName();
-        addUserColumn(tableName, columnName);
-    }
-
-    public void addUserColumn(String tableName, String columnName) {
-        if (CharSequenceUtil.isEmpty(tableName)) {
-            return;
-        }
-        USER_COLUMNS.put(tableName, columnName);
-        TABLE_NAMES.add(tableName);
-    }
-}

+ 0 - 18
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/config/permission/CustomDataPermissionRuleCustomizer.java

@@ -1,18 +0,0 @@
-package com.citu.module.menduner.im.config.permission;
-
-/**
- * @author Rayson
- * @description CustomDataPermissionRuleCustomizer {@link CustomDataPermissionRule} 的自定义配置接口
- **/
-@FunctionalInterface
-public interface CustomDataPermissionRuleCustomizer {
-
-    /**
-     * 自定义该权限规则
-     * 1. 调用 {@link CustomDataPermissionRule#addDataColumn(Class, String)} 方法,配置基于数据编号的过滤规则
-     * 2. 调用 {@link CustomDataPermissionRule#addUserColumn(Class, String)} 方法,配置基于用户编号的过滤规则
-     *
-     * @param rule 权限规则
-     */
-    void customize(CustomDataPermissionRule rule);
-}

+ 0 - 25
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/framework/datapermission/config/DataPermissionConfiguration.java

@@ -1,25 +0,0 @@
-package com.citu.module.menduner.im.framework.datapermission.config;
-
-
-import com.citu.framework.common.enums.UserTypeEnum;
-import com.citu.module.menduner.im.config.permission.CustomDataPermissionRuleCustomizer;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * menduner 模块的数据权限 Configuration
- *
- * @author Rayson
- */
-@Configuration(proxyBeanMethods = false)
-public class DataPermissionConfiguration {
-
-
-    @Bean
-    public CustomDataPermissionRuleCustomizer customDataPermissionRuleCustomizer() {
-        return rule -> {
-
-        };
-    }
-}

+ 2 - 2
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/framework/security/config/SecurityConfiguration.java

@@ -10,10 +10,10 @@ import org.springframework.security.config.annotation.web.configurers.Expression
 /**
  * menduner 模块的 Security 配置
  */
-@Configuration("mendunerSecurityConfiguration")
+@Configuration("mendunerMiSecurityConfiguration")
 public class SecurityConfiguration {
 
-    @Bean("mendunerAuthorizeRequestsCustomizer")
+    @Bean("mendunerMiAuthorizeRequestsCustomizer")
     public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() {
         return new AuthorizeRequestsCustomizer() {
 

+ 0 - 817
menduner/menduner-im-biz/src/main/resources/major/major.csv

@@ -1,817 +0,0 @@
-id,categorize,code,name_cn
-1,哲学类,010101,哲学
-2,哲学类,010102,逻辑学
-3,哲学类,010103K,宗教学
-4,哲学类,010104T,伦理学
-5,经济学类,020101,经济学
-6,经济学类,020102,经济统计学
-7,经济学类,020103T,国民经济管理
-8,经济学类,020104T,资源与环境经济学
-9,经济学类,020105T,商务经济学
-10,经济学类,020106T,能源经济
-11,经济学类,020107T,劳动经济学
-12,经济学类,020108T,经济工程
-13,经济学类,020109T,数字经济
-14,财政学类,020201K,财政学
-15,财政学类,020202,税收学
-16,财政学类,020203TK,国际税收
-17,金融学类,020301K,金融学
-18,金融学类,020302,金融工程
-19,金融学类,020303,保险学
-20,金融学类,020304,投资学
-21,金融学类,020305T,金融数学
-22,金融学类,020306T,信用管理
-23,金融学类,020307T,经济与金融
-24,金融学类,020308T,精算学
-25,金融学类,020309T,互联网金融
-26,金融学类,020310T,金融科技
-27,金融学类,020311TK,金融审计
-28,经济与贸易类,020401,国际经济与贸易
-29,经济与贸易类,020402,贸易经济
-30,经济与贸易类,020403T,国际经济发展合作
-31,法学类,030101K,法学
-32,法学类,030102T,知识产权
-33,法学类,030103T,监狱学
-34,法学类,030104T,信用风险管理与法律防控
-35,法学类,030105T,国际经贸规则
-36,法学类,030106TK,司法警察学
-37,法学类,030107TK,社区矫正
-38,法学类,030108TK,纪检监察
-39,法学类,030109TK,国际法
-40,法学类,030110TK,司法鉴定学
-41,法学类,030111TK,国家安全学
-42,法学类,030112TK,海外利益安全
-43,政治学类,030201,政治学与行政学
-44,政治学类,030202,国际政治
-45,政治学类,030203,外交学
-46,政治学类,030204T,国际事务与国际关系
-47,政治学类,030205T,政治学、经济学与哲学
-48,政治学类,030206TK,国际组织与全球治理
-49,社会学类,030301,社会学
-50,社会学类,030302,社会工作
-51,社会学类,030303T,人类学
-52,社会学类,030304T,女性学
-53,社会学类,030305T,家政学
-54,社会学类,030306T,老年学
-55,社会学类,030307T,社会政策
-56,民族学类,030401,民族学
-57,马克思主义理论类,030501,科学社会主义
-58,马克思主义理论类,030502,中国共产党历史
-59,马克思主义理论类,030503,思想政治教育
-60,马克思主义理论类,030504T,马克思主义理论
-61,马克思主义理论类,030505TK,工会学
-62,公安学类,030601K,治安学
-63,公安学类,030602K,侦查学
-64,公安学类,030603K,边防管理
-65,公安学类,030604TK,禁毒学
-66,公安学类,030605TK,警犬技术
-67,公安学类,030606TK,经济犯罪侦查
-68,公安学类,030607TK,边防指挥
-69,公安学类,030608TK,消防指挥
-70,公安学类,030609TK,警卫学
-71,公安学类,030610TK,公安情报学
-72,公安学类,030611TK,犯罪学
-73,公安学类,030612TK,公安管理学
-74,公安学类,030613TK,涉外警务
-75,公安学类,030614TK,国内安全保卫
-76,公安学类,030615TK,警务指挥与战术
-77,公安学类,030616TK,技术侦查学
-78,公安学类,030617TK,海警执法
-79,公安学类,030618TK,公安政治工作
-80,公安学类,030619TK,移民管理
-81,公安学类,030620TK,出入境管理
-82,公安学类,030621TK,反恐警务
-83,公安学类,030622TK,消防政治工作
-84,公安学类,030623TK,铁路警务
-85,教育学类,040101,教育学
-86,教育学类,040102,科学教育
-87,教育学类,040103,人文教育
-88,教育学类,040104,教育技术学
-89,教育学类,040105,艺术教育
-90,教育学类,040106,学前教育
-91,教育学类,040107,小学教育
-92,教育学类,040108,特殊教育
-93,教育学类,040109T,华文教育
-94,教育学类,040110TK,教育康复学
-95,教育学类,040111T,卫生教育
-96,教育学类,040112T,认知科学与技术
-97,教育学类,040113T,融合教育
-98,教育学类,040114TK,劳动教育
-99,教育学类,040115T,家庭教育
-100,教育学类,040116TK,孤独症儿童教育
-101,体育学类,040201,体育教育
-102,体育学类,040202K,运动训练
-103,体育学类,040203,社会体育指导与管理
-104,体育学类,040204K,武术与民族传统体育
-105,体育学类,040205,运动人体科学
-106,体育学类,040206T,运动康复
-107,体育学类,040207T,休闲体育
-108,体育学类,040208T,体能训练
-109,体育学类,040209T,冰雪运动
-110,体育学类,040210TK,电子竞技运动与管理
-111,体育学类,040211TK,智能体育工程
-112,体育学类,040212TK,体育旅游
-113,体育学类,040213T,运动能力开发
-114,体育学类,040214TK,足球运动
-115,体育学类,040215TK,马术运动与管理
-116,体育学类,040216T,体育康养
-117,中国语言文学类,050101,汉语言文学
-118,中国语言文学类,050102,汉语言
-119,中国语言文学类,050103,汉语国际教育
-120,中国语言文学类,050104,中国少数民族语言文学
-121,中国语言文学类,050105,古典文献学
-122,中国语言文学类,050106T,应用语言学
-123,中国语言文学类,050107T,秘书学
-124,中国语言文学类,050108T,中国语言与文化
-125,中国语言文学类,050109T,手语翻译
-126,中国语言文学类,050110T,数字人文
-127,中国语言文学类,050111T,中国古典学
-128,中国语言文学类,050112T,汉学与中国学
-129,中国语言文学类,050113T,应用中文
-130,外国语言文学类,050201,英语
-131,外国语言文学类,050202,俄语
-132,外国语言文学类,050203,德语
-133,外国语言文学类,050204,法语
-134,外国语言文学类,050205,西班牙语
-135,外国语言文学类,050206,阿拉伯语
-136,外国语言文学类,050207,日语
-137,外国语言文学类,050208,波斯语
-138,外国语言文学类,050209,朝鲜语
-139,外国语言文学类,050210,菲律宾语
-140,外国语言文学类,050211,梵语巴利语
-141,外国语言文学类,050212,印度尼西亚语
-142,外国语言文学类,050213,印地语
-143,外国语言文学类,050214,柬埔寨语
-144,外国语言文学类,050215,老挝语
-145,外国语言文学类,050216,缅甸语
-146,外国语言文学类,050217,马来语
-147,外国语言文学类,050218,蒙古语
-148,外国语言文学类,050219,僧伽罗语
-149,外国语言文学类,050220,泰语
-150,外国语言文学类,050221,乌尔都语
-151,外国语言文学类,050222,希伯来语
-152,外国语言文学类,050223,越南语
-153,外国语言文学类,050224,豪萨语
-154,外国语言文学类,050225,斯瓦希里语
-155,外国语言文学类,050226,阿尔巴尼亚语
-156,外国语言文学类,050227,保加利亚语
-157,外国语言文学类,050228,波兰语
-158,外国语言文学类,050229,捷克语
-159,外国语言文学类,050230,斯洛伐克语
-160,外国语言文学类,050231,罗马尼亚语
-161,外国语言文学类,050232,葡萄牙语
-162,外国语言文学类,050233,瑞典语
-163,外国语言文学类,050234,塞尔维亚语
-164,外国语言文学类,050235,土耳其语
-165,外国语言文学类,050236,希腊语
-166,外国语言文学类,050237,匈牙利语
-167,外国语言文学类,050238,意大利语
-168,外国语言文学类,050239,泰米尔语
-169,外国语言文学类,050240,普什图语
-170,外国语言文学类,050241,世界语
-171,外国语言文学类,050242,孟加拉语
-172,外国语言文学类,050243,尼泊尔语
-173,外国语言文学类,050244,克罗地亚语
-174,外国语言文学类,050245,荷兰语
-175,外国语言文学类,050246,芬兰语
-176,外国语言文学类,050247,乌克兰语
-177,外国语言文学类,050248,挪威语
-178,外国语言文学类,050249,丹麦语
-179,外国语言文学类,050250,冰岛语
-180,外国语言文学类,050251,爱尔兰语
-181,外国语言文学类,050252,拉脱维亚语
-182,外国语言文学类,050253,立陶宛语
-183,外国语言文学类,050254,斯洛文尼亚语
-184,外国语言文学类,050255,爱沙尼亚语
-185,外国语言文学类,050256,马耳他语
-186,外国语言文学类,050257,哈萨克语
-187,外国语言文学类,050258,乌兹别克语
-188,外国语言文学类,050259,祖鲁语
-189,外国语言文学类,050260,拉丁语
-190,外国语言文学类,050261,翻译
-191,外国语言文学类,050262,商务英语
-192,外国语言文学类,050263T,阿姆哈拉语
-193,外国语言文学类,050264T,吉尔吉斯语
-194,外国语言文学类,050265T,索马里语
-195,外国语言文学类,050266T,土库曼语
-196,外国语言文学类,050267T,加泰罗尼亚语
-197,外国语言文学类,050268T,约鲁巴语
-198,外国语言文学类,050269T,亚美尼亚语
-199,外国语言文学类,050270T,马达加斯加语
-200,外国语言文学类,050271T,格鲁吉亚语
-201,外国语言文学类,050272T,阿塞拜疆语
-202,外国语言文学类,050273T,阿非利卡语
-203,外国语言文学类,050274T,马其顿语
-204,外国语言文学类,050275T,塔吉克语
-205,外国语言文学类,050276T,茨瓦纳语
-206,外国语言文学类,050277T,恩德贝莱语
-207,外国语言文学类,050278T,科摩罗语
-208,外国语言文学类,050279T,克里奥尔语
-209,外国语言文学类,050280T,绍纳语
-210,外国语言文学类,050281T,提格雷尼亚语
-211,外国语言文学类,050282T,白俄罗斯语
-212,外国语言文学类,050283T,毛利语
-213,外国语言文学类,050284T,汤加语
-214,外国语言文学类,050285T,萨摩亚语
-215,外国语言文学类,050286T,库尔德语
-216,外国语言文学类,050287T,比斯拉马语
-217,外国语言文学类,050288T,达里语
-218,外国语言文学类,050289T,德顿语
-219,外国语言文学类,050290T,迪维希语
-220,外国语言文学类,050291T,斐济语
-221,外国语言文学类,050292T,库克群岛毛利语
-222,外国语言文学类,050293T,隆迪语
-223,外国语言文学类,050294T,卢森堡语
-224,外国语言文学类,050295T,卢旺达语
-225,外国语言文学类,050296T,纽埃语
-226,外国语言文学类,050297T,皮金语
-227,外国语言文学类,050298T,切瓦语
-228,外国语言文学类,050299T,塞苏陀语
-229,外国语言文学类,050200T,桑戈语
-230,外国语言文学类,0502100T,语言学
-231,外国语言文学类,0502101T,塔玛齐格特语
-232,外国语言文学类,0502102T,爪哇语
-233,外国语言文学类,0502103T,旁遮普语
-234,新闻传播学类,050301,新闻学
-235,新闻传播学类,050302,广播电视学
-236,新闻传播学类,050303,广告学
-237,新闻传播学类,050304,传播学
-238,新闻传播学类,050305,编辑出版学
-239,新闻传播学类,050306T,网络与新媒体
-240,新闻传播学类,050307T,数字出版
-241,新闻传播学类,050308T,时尚传播
-242,新闻传播学类,050309T,国际新闻与传播
-243,新闻传播学类,050310T,会展
-244,历史学类,060101,历史学
-245,历史学类,060102,世界史
-246,历史学类,060103,考古学
-247,历史学类,060104,文物与博物馆学
-248,历史学类,060105T,文物保护技术
-249,历史学类,060106T,外国语言与外国历史
-250,历史学类,060107T,文化遗产
-251,历史学类,060108T,古文字学
-252,历史学类,060109T,科学史
-253,数学类,070101,数学与应用数学
-254,数学类,070102,信息与计算科学
-255,数学类,070103T,数理基础科学
-256,数学类,070104T,数据计算及应用
-257,物理学类,070201,物理学
-258,物理学类,070202,应用物理学
-259,物理学类,070203,核物理
-260,物理学类,070204T,声学
-261,物理学类,070205T,系统科学与工程
-262,物理学类,070206T,量子信息科学
-263,化学类,070301,化学
-264,化学类,070302,应用化学
-265,化学类,070303T,化学生物学
-266,化学类,070304T,分子科学与工程
-267,化学类,070305T,能源化学
-268,化学类,070306T,化学测量学与技术
-269,化学类,070307T,资源化学
-270,天文学类,070401,天文学
-271,地理科学类,070501,地理科学
-272,地理科学类,070502,自然地理与资源环境
-273,地理科学类,070503,人文地理与城乡规划
-274,地理科学类,070504,地理信息科学
-275,大气科学类,070601,大气科学
-276,大气科学类,070602,应用气象学
-277,大气科学类,070603T,气象技术与工程
-278,大气科学类,070604T,地球系统科学
-279,海洋科学类,070701,海洋科学
-280,海洋科学类,070702,海洋技术
-281,海洋科学类,070703T,海洋资源与环境
-282,海洋科学类,070704T,军事海洋学
-283,地球物理学类,070801,地球物理学
-284,地球物理学类,070802,空间科学与技术
-285,地球物理学类,070803T,防灾减灾科学与工程
-286,地球物理学类,070804TK,行星科学
-287,地质学类,070901,地质学
-288,地质学类,070902,地球化学
-289,地质学类,070903T,地球信息科学与技术
-290,地质学类,070904T,古生物学
-291,生物科学类,071001,生物科学
-292,生物科学类,071002,生物技术
-293,生物科学类,071003,生物信息学
-294,生物科学类,071004,生态学
-295,生物科学类,071005T,整合科学
-296,生物科学类,071006T,神经科学
-297,心理学类,071101,心理学
-298,心理学类,071102,应用心理学
-299,统计学类,071201,统计学
-300,统计学类,071202,应用统计学
-301,统计学类,071203T,数据科学
-302,统计学类,071204T,生物统计学
-303,力学类,080101,理论与应用力学
-304,力学类,080102,工程力学
-305,机械类,080201,机械工程
-306,机械类,080202,机械设计制造及其自动化
-307,机械类,080203,材料成型及控制工程
-308,机械类,080204,机械电子工程
-309,机械类,080205,工业设计
-310,机械类,080206,过程装备与控制工程
-311,机械类,080207,车辆工程
-312,机械类,080208,汽车服务工程
-313,机械类,080209T,机械工艺技术
-314,机械类,080210T,微机电系统工程
-315,机械类,080211T,机电技术教育
-316,机械类,080212T,汽车维修工程教育
-317,机械类,080213T,智能制造工程
-318,机械类,080214T,智能车辆工程
-319,机械类,080215T,仿生科学与工程
-320,机械类,080216T,新能源汽车工程
-321,机械类,080217T,增材制造工程
-322,机械类,080218T,智能交互设计
-323,机械类,080219T,应急装备技术与工程
-324,机械类,080220T,农林智能装备工程
-325,仪器类,080301,测控技术与仪器
-326,仪器类,080302T,精密仪器
-327,仪器类,080303T,智能感知工程
-328,材料类,080401,材料科学与工程
-329,材料类,080402,材料物理
-330,材料类,080403,材料化学
-331,材料类,080404,冶金工程
-332,材料类,080405,金属材料工程
-333,材料类,080406,无机非金属材料工程
-334,材料类,080407,高分子材料与工程
-335,材料类,080408,复合材料与工程
-336,材料类,080409T,粉体材料科学与工程
-337,材料类,080410T,宝石及材料工艺学
-338,材料类,080411T,焊接技术与工程
-339,材料类,080412T,功能材料
-340,材料类,080413T,纳米材料与技术
-341,材料类,080414T,新能源材料与器件
-342,材料类,080415T,材料设计科学与工程
-343,材料类,080416T,复合材料成型工程
-344,材料类,080417T,智能材料与结构
-345,材料类,080418T,光电信息材料与器件
-346,材料类,080419T,生物材料
-347,材料类,080420T,材料智能技术
-348,材料类,080421T,电子信息材料
-349,材料类,080422T,软物质科学与工程
-350,材料类,080423T,稀土材料科学与工程
-351,能源动力类,080501,能源与动力工程
-352,能源动力类,080502T,能源与环境系统工程
-353,能源动力类,080503T,新能源科学与工程
-354,能源动力类,080504T,储能科学与工程
-355,能源动力类,080505T,能源服务工程
-356,能源动力类,080506TK,氢能科学与工程
-357,能源动力类,080507TK,可持续能源
-358,电气类,080601,电气工程及其自动化
-359,电气类,080602T,智能电网信息工程
-360,电气类,080603T,光源与照明
-361,电气类,080604T,电气工程与智能控制
-362,电气类,080605T,电机电器智能化
-363,电气类,080606T,电缆工程
-364,电气类,080607T,能源互联网工程
-365,电气类,080608TK,智慧能源工程
-366,电气类,080609T,电动载运工程
-367,电气类,080610TK,大功率半导体科学与工程
-368,电子信息类,080701,电子信息工程
-369,电子信息类,080702,电子科学与技术
-370,电子信息类,080703,通信工程
-371,电子信息类,080704,微电子科学与工程
-372,电子信息类,080705,光电信息科学与工程
-373,电子信息类,080706,信息工程
-374,电子信息类,080707T,广播电视工程
-375,电子信息类,080708T,水声工程
-376,电子信息类,080709T,电子封装技术
-377,电子信息类,080710T,集成电路设计与集成系统
-378,电子信息类,080711T,医学信息工程
-379,电子信息类,080712T,电磁场与无线技术
-380,电子信息类,080713T,电波传播与天线
-381,电子信息类,080714T,电子信息科学与技术
-382,电子信息类,080715T,电信工程及管理
-383,电子信息类,080716T,应用电子技术教育
-384,电子信息类,080717T,人工智能
-385,电子信息类,080718T,海洋信息工程
-386,电子信息类,080719T,柔性电子学
-387,电子信息类,080720T,智能测控工程
-388,电子信息类,080721T,智能视觉工程
-389,自动化类,080801,自动化
-390,自动化类,080802T,轨道交通信号与控制
-391,自动化类,080803T,机器人工程
-392,自动化类,080804T,邮政工程
-393,自动化类,080805T,核电技术与控制工程
-394,自动化类,080806T,智能装备与系统
-395,自动化类,080807T,工业智能
-396,自动化类,080808T,智能工程与创意设计
-397,计算机类,080901,计算机科学与技术
-398,计算机类,080902,软件工程
-399,计算机类,080903,网络工程
-400,计算机类,080904K,信息安全
-401,计算机类,080905,物联网工程
-402,计算机类,080906,数字媒体技术
-403,计算机类,080907T,智能科学与技术
-404,计算机类,080908T,空间信息与数字技术
-405,计算机类,080909T,电子与计算机工程
-406,计算机类,080910T,数据科学与大数据技术
-407,计算机类,080911TK,网络空间安全
-408,计算机类,080912T,新媒体技术
-409,计算机类,080913T,电影制作
-410,计算机类,080914TK,保密技术
-411,计算机类,080915T,服务科学与工程
-412,计算机类,080916T,虚拟现实技术
-413,计算机类,080917T,区块链工程
-414,计算机类,080918TK,密码科学与技术
-415,土木类,081001,土木工程
-416,土木类,081002,建筑环境与能源应用工程
-417,土木类,081003,给排水科学与工程
-418,土木类,081004,建筑电气与智能化
-419,土木类,081005T,城市地下空间工程
-420,土木类,081006T,道路桥梁与渡河工程
-421,土木类,081007T,铁道工程
-422,土木类,081008T,智能建造
-423,土木类,081009T,土木、水利与海洋工程
-424,土木类,081010T,土木、水利与交通工程
-425,土木类,081011T,城市水系统工程
-426,土木类,081012T,智能建造与智慧交通
-427,土木类,081013T,工程软件
-428,水利类,081101,水利水电工程
-429,水利类,081102,水文与水资源工程
-430,水利类,081103,港口航道与海岸工程
-431,水利类,081104T,水务工程
-432,水利类,081105T,水利科学与工程
-433,水利类,081106T,智慧水利
-434,测绘类,081201,测绘工程
-435,测绘类,081202,遥感科学与技术
-436,测绘类,081203T,导航工程
-437,测绘类,081204T,地理国情监测
-438,测绘类,081205T,地理空间信息工程
-439,化工与制药类,081301,化学工程与工艺
-440,化工与制药类,081302,制药工程
-441,化工与制药类,081303T,资源循环科学与工程
-442,化工与制药类,081304T,能源化学工程
-443,化工与制药类,081305T,化学工程与工业生物工程
-444,化工与制药类,081306T,化工安全工程
-445,化工与制药类,081307T,涂料工程
-446,化工与制药类,081308T,精细化工
-447,地质类,081401,地质工程
-448,地质类,081402,勘查技术与工程
-449,地质类,081403K,资源勘查工程
-450,地质类,081404T,地下水科学与工程
-451,地质类,081405T,旅游地学与规划工程
-452,地质类,081406T,智能地球探测
-453,地质类,081407T,资源环境大数据工程
-454,矿业类,081501,采矿工程
-455,矿业类,081502,石油工程
-456,矿业类,081503,矿物加工工程
-457,矿业类,081504,油气储运工程
-458,矿业类,081505T,矿物资源工程
-459,矿业类,081506T,海洋油气工程
-460,矿业类,081507T,智能采矿工程
-461,矿业类,081508TK,碳储科学与工程
-462,纺织类,081601,纺织工程
-463,纺织类,081602,服装设计与工程
-464,纺织类,081603T,非织造材料与工程
-465,纺织类,081604T,服装设计与工艺教育
-466,纺织类,081605T,丝绸设计与工程
-467,轻工类,081701,轻化工程
-468,轻工类,081702,包装工程
-469,轻工类,081703,印刷工程
-470,轻工类,081704T,香料香精技术与工程
-471,轻工类,081705T,化妆品技术与工程
-472,轻工类,081706TK,生物质能源与材料
-473,交通运输类,081801,交通运输
-474,交通运输类,081802,交通工程
-475,交通运输类,081803K,航海技术
-476,交通运输类,081804K,轮机工程
-477,交通运输类,081805K,飞行技术
-478,交通运输类,081806T,交通设备与控制工程
-479,交通运输类,081807T,救助与打捞工程
-480,交通运输类,081808TK,船舶电子电气工程
-481,交通运输类,081809T,轨道交通电气与控制
-482,交通运输类,081810T,邮轮工程与管理
-483,交通运输类,081811T,智慧交通
-484,交通运输类,081812T,智能运输工程
-485,海洋工程类,081901,船舶与海洋工程
-486,海洋工程类,081902T,海洋工程与技术
-487,海洋工程类,081903T,海洋资源开发技术
-488,海洋工程类,081904T,海洋机器人
-489,海洋工程类,081905T,智慧海洋技术
-490,海洋工程类,081906T,智能海洋装备
-491,航空航天类,082001,航空航天工程
-492,航空航天类,082002,飞行器设计与工程
-493,航空航天类,082003,飞行器制造工程
-494,航空航天类,082004,飞行器动力工程
-495,航空航天类,082005,飞行器环境与生命保障工程
-496,航空航天类,082006T,飞行器质量与可靠性
-497,航空航天类,082007T,飞行器适航技术
-498,航空航天类,082008T,飞行器控制与信息工程
-499,航空航天类,082009T,无人驾驶航空器系统工程
-500,航空航天类,082010T,智能飞行器技术
-501,航空航天类,082011T,空天智能电推进技术
-502,航空航天类,082012T,飞行器运维工程
-503,兵器类,082101,武器系统与工程
-504,兵器类,082102,武器发射工程
-505,兵器类,082103,探测制导与控制技术
-506,兵器类,082104,弹药工程与爆炸技术
-507,兵器类,082105,特种能源技术与工程
-508,兵器类,082106,装甲车辆工程
-509,兵器类,082107,信息对抗技术
-510,兵器类,082108T,智能无人系统技术
-511,核工程类,082201,核工程与核技术
-512,核工程类,082202,辐射防护与核安全
-513,核工程类,082203,工程物理
-514,核工程类,082204,核化工与核燃料工程
-515,农业工程类,082301,农业工程
-516,农业工程类,082302,农业机械化及其自动化
-517,农业工程类,082303,农业电气化
-518,农业工程类,082304,农业建筑环境与能源工程
-519,农业工程类,082305,农业水利工程
-520,农业工程类,082306T,土地整治工程
-521,农业工程类,082307T,农业智能装备工程
-522,林业工程类,082401,森林工程
-523,林业工程类,082402,木材科学与工程
-524,林业工程类,082403,林产化工
-525,林业工程类,082404T,家具设计与工程
-526,林业工程类,082405T,木结构建筑与材料
-527,环境科学与工程类,082501,环境科学与工程
-528,环境科学与工程类,082502,环境工程
-529,环境科学与工程类,082503,环境科学
-530,环境科学与工程类,082504,环境生态工程
-531,环境科学与工程类,082505T,环保设备工程
-532,环境科学与工程类,082506T,资源环境科学
-533,环境科学与工程类,082507T,水质科学与技术
-534,生物医学工程类,082601,生物医学工程
-535,生物医学工程类,082602T,假肢矫形工程
-536,生物医学工程类,082603T,临床工程技术
-537,生物医学工程类,082604T,康复工程
-538,生物医学工程类,082605T,健康科学与技术
-539,食品科学与工程类,082701,食品科学与工程
-540,食品科学与工程类,082702,食品质量与安全
-541,食品科学与工程类,082703,粮食工程
-542,食品科学与工程类,082704,乳品工程
-543,食品科学与工程类,082705,酿酒工程
-544,食品科学与工程类,082706T,葡萄与葡萄酒工程
-545,食品科学与工程类,082707T,食品营养与检验教育
-546,食品科学与工程类,082708T,烹饪与营养教育
-547,食品科学与工程类,082709T,食品安全与检测
-548,食品科学与工程类,082710T,食品营养与健康
-549,食品科学与工程类,082711T,食用菌科学与工程
-550,食品科学与工程类,082712T,白酒酿造工程
-551,食品科学与工程类,082713T,咖啡科学与工程
-552,建筑类,082801,建筑学
-553,建筑类,082802,城乡规划
-554,建筑类,082803,风景园林
-555,建筑类,082804T,历史建筑保护工程
-556,建筑类,082805T,人居环境科学与技术
-557,建筑类,082806T,城市设计
-558,建筑类,082807T,智慧建筑与建造
-559,安全科学与工程类,082901,安全工程
-560,安全科学与工程类,082902T,应急技术与管理
-561,安全科学与工程类,082903T,职业卫生工程
-562,安全科学与工程类,082904T,安全生产监管
-563,生物工程类,083001,生物工程
-564,生物工程类,083002T,生物制药
-565,生物工程类,083003T,合成生物学
-566,公安技术类,083101K,刑事科学技术
-567,公安技术类,083102K,消防工程
-568,公安技术类,083103TK,交通管理工程
-569,公安技术类,083104TK,安全防范工程
-570,公安技术类,083105TK,公安视听技术
-571,公安技术类,083106TK,抢险救援指挥与技术
-572,公安技术类,083107TK,火灾勘查
-573,公安技术类,083108TK,网络安全与执法
-574,公安技术类,083109TK,核生化消防
-575,公安技术类,083110TK,海警舰艇指挥与技术
-576,公安技术类,083111TK,数据警务技术
-577,公安技术类,083112TK,食品药品环境犯罪侦查技术
-578,交叉工程类,083201TK,未来机器人
-579,交叉工程类,083202TK,交叉工程
-580,植物生产类,090101,农学
-581,植物生产类,090102,园艺
-582,植物生产类,090103,植物保护
-583,植物生产类,090104,植物科学与技术
-584,植物生产类,090105,种子科学与工程
-585,植物生产类,090106,设施农业科学与工程
-586,植物生产类,090107T,茶学
-587,植物生产类,090108T,烟草
-588,植物生产类,090109T,应用生物科学
-589,植物生产类,090110T,农艺教育
-590,植物生产类,090111T,园艺教育
-591,植物生产类,090112T,智慧农业
-592,植物生产类,090113T,菌物科学与工程
-593,植物生产类,090114T,农药化肥
-594,植物生产类,090115T,生物农药科学与工程
-595,植物生产类,090116TK,生物育种科学
-596,植物生产类,090117TK,生物育种技术
-597,自然保护与环境生态类,090201,农业资源与环境
-598,自然保护与环境生态类,090202,野生动物与自然保护区管理
-599,自然保护与环境生态类,090203,水土保持与荒漠化防治
-600,自然保护与环境生态类,090204T,生物质科学与工程
-601,自然保护与环境生态类,090205T,土地科学与技术
-602,自然保护与环境生态类,090206T,湿地保护与恢复
-603,自然保护与环境生态类,090207TK,国家公园建设与管理
-604,自然保护与环境生态类,090208TK,生态修复学
-605,动物生产类,090301,动物科学
-606,动物生产类,090302T,蚕学
-607,动物生产类,090303T,蜂学
-608,动物生产类,090304T,经济动物学
-609,动物生产类,090305T,马业科学
-610,动物生产类,090306T,饲料工程
-611,动物生产类,090307T,智慧牧业科学与工程
-612,动物医学类,090401,动物医学
-613,动物医学类,090402,动物药学
-614,动物医学类,090403T,动植物检疫
-615,动物医学类,090404T,实验动物学
-616,动物医学类,090405T,中兽医学
-617,动物医学类,090406TK,兽医公共卫生
-618,林学类,090501,林学
-619,林学类,090502,园林
-620,林学类,090503,森林保护
-621,林学类,090504T,经济林
-622,林学类,090505T,智慧林业
-623,水产类,090601,水产养殖学
-624,水产类,090602,海洋渔业科学与技术
-625,水产类,090603T,水族科学与技术
-626,水产类,090604TK,水生动物医学
-627,草学类,090701,草业科学
-628,草学类,090702T,草坪科学与工程
-629,基础医学类,100101K,基础医学
-630,基础医学类,100102TK,生物医学
-631,基础医学类,100103T,生物医学科学
-632,临床医学类,100201K,临床医学
-633,临床医学类,100202TK,麻醉学
-634,临床医学类,100203TK,医学影像学
-635,临床医学类,100204TK,眼视光医学
-636,临床医学类,100205TK,精神医学
-637,临床医学类,100206TK,放射医学
-638,临床医学类,100207TK,儿科学
-639,口腔医学类,100301K,口腔医学
-640,公共卫生与预防医学类,100401K,预防医学
-641,公共卫生与预防医学类,100402,食品卫生与营养学
-642,公共卫生与预防医学类,100403TK,妇幼保健医学
-643,公共卫生与预防医学类,100404TK,卫生监督
-644,公共卫生与预防医学类,100405TK,全球健康学
-645,公共卫生与预防医学类,100406T,运动与公共健康
-646,中医学类,100501K,中医学
-647,中医学类,100502K,针灸推拿学
-648,中医学类,100503K,藏医学
-649,中医学类,100504K,蒙医学
-650,中医学类,100505K,维医学
-651,中医学类,100506K,壮医学
-652,中医学类,100507K,哈医学
-653,中医学类,100508TK,傣医学
-654,中医学类,100509TK,回医学
-655,中医学类,100510TK,中医康复学
-656,中医学类,100511TK,中医养生学
-657,中医学类,100512TK,中医儿科学
-658,中医学类,100513TK,中医骨伤科学
-659,中西医结合类,100601K,中西医临床医学
-660,药学类,100701,药学
-661,药学类,100702,药物制剂
-662,药学类,100703TK,临床药学
-663,药学类,100704T,药事管理
-664,药学类,100705T,药物分析
-665,药学类,100706T,药物化学
-666,药学类,100707T,海洋药学
-667,药学类,100708T,化妆品科学与技术
-668,中药学类,100801,中药学
-669,中药学类,100802,中药资源与开发
-670,中药学类,100803T,藏药学
-671,中药学类,100804T,蒙药学
-672,中药学类,100805T,中药制药
-673,中药学类,100806T,中草药栽培与鉴定
-674,法医学类,100901K,法医学
-675,医学技术类,101001,医学检验技术
-676,医学技术类,101002,医学实验技术
-677,医学技术类,101003,医学影像技术
-678,医学技术类,101004,眼视光学
-679,医学技术类,101005,康复治疗学
-680,医学技术类,101006,口腔医学技术
-681,医学技术类,101007,卫生检验与检疫
-682,医学技术类,101008T,听力与言语康复学
-683,医学技术类,101009T,康复物理治疗
-684,医学技术类,101010T,康复作业治疗
-685,医学技术类,101011T,智能医学工程
-686,医学技术类,101012T,生物医药数据科学
-687,医学技术类,101013T,智能影像工程
-688,医学技术类,101014TK,医工学
-689,护理学类,101101K,护理学
-690,护理学类,101102TK,助产学
-691,管理科学与工程类,120101,管理科学
-692,管理科学与工程类,120102,信息管理与信息系统
-693,管理科学与工程类,120103,工程管理
-694,管理科学与工程类,120104,房地产开发与管理
-695,管理科学与工程类,120105,工程造价
-696,管理科学与工程类,120106TK,保密管理
-697,管理科学与工程类,120107T,邮政管理
-698,管理科学与工程类,120108T,大数据管理与应用
-699,管理科学与工程类,120109T,工程审计
-700,管理科学与工程类,120110T,计算金融
-701,管理科学与工程类,120111T,应急管理
-702,工商管理类,120201K,工商管理
-703,工商管理类,120202,市场营销
-704,工商管理类,120203K,会计学
-705,工商管理类,120204,财务管理
-706,工商管理类,120205,国际商务
-707,工商管理类,120206,人力资源管理
-708,工商管理类,120207,审计学
-709,工商管理类,120208,资产评估
-710,工商管理类,120209,物业管理
-711,工商管理类,120210,文化产业管理
-712,工商管理类,120211T,劳动关系
-713,工商管理类,120212T,体育经济与管理
-714,工商管理类,120213T,财务会计教育
-715,工商管理类,120214T,市场营销教育
-716,工商管理类,120215T,零售业管理
-717,工商管理类,120216T,创业管理
-718,工商管理类,120217TK,海关稽查
-719,工商管理类,120218T,内部审计
-720,农业经济管理类,120301,农林经济管理
-721,农业经济管理类,120302,农村区域发展
-722,农业经济管理类,120303TK,乡村治理
-723,公共管理类,120401,公共事业管理
-724,公共管理类,120402,行政管理
-725,公共管理类,120403,劳动与社会保障
-726,公共管理类,120404,土地资源管理
-727,公共管理类,120405,城市管理
-728,公共管理类,120406TK,海关管理
-729,公共管理类,120407T,交通管理
-730,公共管理类,120408T,海事管理
-731,公共管理类,120409T,公共关系学
-732,公共管理类,120410T,健康服务与管理
-733,公共管理类,120411TK,海警后勤管理
-734,公共管理类,120412T,医疗产品管理
-735,公共管理类,120413T,医疗保险
-736,公共管理类,120414T,养老服务管理
-737,公共管理类,120415TK,海关检验检疫安全
-738,公共管理类,120416TK,海外安全管理
-739,公共管理类,120417T,自然资源登记与管理
-740,公共管理类,120418T,慈善管理
-741,公共管理类,120419TK,航空安防管理
-742,公共管理类,120420TK,无障碍管理
-743,图书情报与档案管理类,120501,图书馆学
-744,图书情报与档案管理类,120502,档案学
-745,图书情报与档案管理类,120503,信息资源管理
-746,物流管理与工程类,120601,物流管理
-747,物流管理与工程类,120602,物流工程
-748,物流管理与工程类,120603T,采购管理
-749,物流管理与工程类,120604T,供应链管理
-750,工业工程类,120701,工业工程
-751,工业工程类,120702T,标准化工程
-752,工业工程类,120703T,质量管理工程
-753,电子商务类,120801,电子商务
-754,电子商务类,120802T,电子商务及法律
-755,电子商务类,120803T,跨境电子商务
-756,旅游管理类,120901K,旅游管理
-757,旅游管理类,120902,酒店管理
-758,旅游管理类,120903,会展经济与管理
-759,旅游管理类,120904T,旅游管理与服务教育
-760,艺术学理论类,130101,艺术史论
-761,艺术学理论类,130102T,艺术管理
-762,艺术学理论类,130103T,非物质文化遗产保护
-763,音乐与舞蹈学类,130201,音乐表演
-764,音乐与舞蹈学类,130202,音乐学
-765,音乐与舞蹈学类,130203,作曲与作曲技术理论
-766,音乐与舞蹈学类,130204,舞蹈表演
-767,音乐与舞蹈学类,130205,舞蹈学
-768,音乐与舞蹈学类,130206,舞蹈编导
-769,音乐与舞蹈学类,130207T,舞蹈教育
-770,音乐与舞蹈学类,130208TK,航空服务艺术与管理
-771,音乐与舞蹈学类,130209T,流行音乐
-772,音乐与舞蹈学类,130210T,音乐治疗
-773,音乐与舞蹈学类,130211T,流行舞蹈
-774,音乐与舞蹈学类,130212T,音乐教育
-775,音乐与舞蹈学类,130213TK,冰雪舞蹈表演
-776,戏剧与影视学类,130301,表演
-777,戏剧与影视学类,130302,戏剧学
-778,戏剧与影视学类,130303,电影学
-779,戏剧与影视学类,130304,戏剧影视文学
-780,戏剧与影视学类,130305,广播电视编导
-781,戏剧与影视学类,130306,戏剧影视导演
-782,戏剧与影视学类,130307,戏剧影视美术设计
-783,戏剧与影视学类,130308,录音艺术
-784,戏剧与影视学类,130309,播音与主持艺术
-785,戏剧与影视学类,130310,动画
-786,戏剧与影视学类,130311T,影视摄影与制作
-787,戏剧与影视学类,130312T,影视技术
-788,戏剧与影视学类,130313T,戏剧教育
-789,戏剧与影视学类,130314TK,曲艺
-790,戏剧与影视学类,130315TK,音乐剧
-791,美术学类,130401,美术学
-792,美术学类,130402,绘画
-793,美术学类,130403,雕塑
-794,美术学类,130404,摄影
-795,美术学类,130405T,书法学
-796,美术学类,130406T,中国画
-797,美术学类,130407TK,实验艺术
-798,美术学类,130408TK,跨媒体艺术
-799,美术学类,130409T,文物保护与修复
-800,美术学类,130410T,漫画
-801,美术学类,130411T,纤维艺术
-802,美术学类,130412TK,科技艺术
-803,美术学类,130413TK,美术教育
-804,设计学类,130501,艺术设计学
-805,设计学类,130502,视觉传达设计
-806,设计学类,130503,环境设计
-807,设计学类,130504,产品设计
-808,设计学类,130505,服装与服饰设计
-809,设计学类,130506,公共艺术
-810,设计学类,130507,工艺美术
-811,设计学类,130508,数字媒体艺术
-812,设计学类,130509T,艺术与科技
-813,设计学类,130510TK,陶瓷艺术设计
-814,设计学类,130511T,新媒体艺术
-815,设计学类,130512T,包装设计
-816,设计学类,130513TK,珠宝首饰设计与工艺

+ 0 - 5
menduner/menduner-im-biz/src/main/resources/major/readme.txt

@@ -1,5 +0,0 @@
-来源
-http://www.moe.gov.cn/srcsite/A08/moe_1034/s4930/202403/W020240319305498791768.pdf
-
-转换成Excel
-https://smallpdf.com/cn/pdf-to-excel#r=convert-to-excel

+ 1 - 1
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/EasyRulesConstants.java

@@ -1,7 +1,7 @@
 package com.citu.module.menduner.reward.enums;
 
 /**
- * @author rayson
+ * @author Rayson
  * @description EasyRulesConstants
  * @create 2024/6/18 上午10:39
  **/

+ 8 - 7
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/ErrorCodeConstants.java

@@ -42,18 +42,19 @@ public interface ErrorCodeConstants {
     ErrorCode SIGN_IN_CONFIG_POINT_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_003_004, "奖励积分不能为空");
     ErrorCode SIGN_IN_CONFIG_POINT_CAN_NOT_BE_LESS_THAN_ZERO = new ErrorCode(1_110_003_005, "奖励积分不能小于 0");
 
-
     //========== 签到记录 1_110_004_000 ==========
     ErrorCode SIGN_IN_RECORD_TODAY_EXISTS = new ErrorCode(1_110_004_001, "今日已签到,请勿重复签到");
 
-    // ========== 用户相关  1_110_005_000 ============
-    ErrorCode USER_NOT_EXISTS = new ErrorCode(1_110_005_001, "用户不存在");
-    ErrorCode USER_POINT_NOT_ENOUGH = new ErrorCode(1_110_005_002, "用户积分余额不足");
-    ErrorCode USER_POINT_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_005_003, "变动积分不能为空");
+    // ==========  事件记录  1_110_005_000 ============
+    ErrorCode EVENT_RECORD_NOT_EXISTS = new ErrorCode(1_110_005_001, "事件记录不存在");
+    ErrorCode EVENT_URL_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_005_001, "事件地址不能为空");
+    ErrorCode DATE_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_005_002, "日期不能为空");
 
     // ========== 事件指标 1_110_006_000 ==========
     ErrorCode EVENT_METRIC_NOT_EXISTS = new ErrorCode(1_110_006_001, "事件指标不存在");
+    ErrorCode EVENT_METRIC_NAME_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_002, "指标名称不能为空");
+    ErrorCode EVENT_METRIC_VALUE_NAME_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_003, "指标值名称不能为空");
+    ErrorCode EVENT_METRIC_CATEGORY_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_004, "指标分类不能为空");
+    ErrorCode EVENT_METRIC_VALUE_TYPE_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_005, "指标值类型不能为空");
 
-    // ========== 事件记录 1_110_007_000 ==========
-    ErrorCode EVENT_RECORD_NOT_EXISTS = new ErrorCode(1_110_007_001, "事件记录不存在");
 }

+ 1 - 1
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/OperationEnum.java

@@ -3,7 +3,7 @@ package com.citu.module.menduner.reward.enums;
 /**
  * 逻辑操作符枚举
  *
- * @author rayson
+ * @author Rayson
  **/
 public enum OperationEnum {
     GREATER_THAN("GT", "%s > %s", "大于"),

+ 0 - 50
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/record/PointBizTypeEnum.java

@@ -1,50 +0,0 @@
-package com.citu.module.menduner.reward.enums.record;
-
-import cn.hutool.core.util.EnumUtil;
-import com.citu.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Objects;
-
-/**
- * 用户积分的业务类型枚举
- *
- * @author Rayson
- */
-@AllArgsConstructor
-@Getter
-public enum PointBizTypeEnum implements IntArrayValuable {
-
-    SIGN(1, "签到", "签到获得 {}积分", true),
-    ADMIN(2, "管理员修改", "管理员修改 {} 积分", true),
-    EVENT(3, "事件跟踪", "访问[{}],{}{} 积分", true);
-
-    /**
-     * 类型
-     */
-    private final Integer type;
-    /**
-     * 名字
-     */
-    private final String name;
-    /**
-     * 描述
-     */
-    private final String description;
-    /**
-     * 是否为扣减积分
-     */
-    private final boolean add;
-
-    public static PointBizTypeEnum getByType(Integer type) {
-        return EnumUtil.getBy(PointBizTypeEnum.class,
-                e -> Objects.equals(type, e.getType()));
-    }
-
-    @Override
-    public int[] array() {
-        return new int[0];
-    }
-
-}

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/PointRuleTest.java

@@ -10,7 +10,7 @@ import com.citu.module.menduner.reward.rule.DynamicRuleAction;
 import org.jeasy.rules.api.Facts;
 
 /**
- * @author rayson
+ * @author Rayson
  * @description PointRuleTest
  * @create 2024/6/6 上午10:59
  **/

+ 0 - 46
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/record/PointRecordController.java

@@ -1,46 +0,0 @@
-package com.citu.module.menduner.reward.controller.admin.record;
-
-import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordPageReqVO;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordRespVO;
-import com.citu.module.menduner.reward.convert.PointRecordConvert;
-import com.citu.module.menduner.reward.dal.dataobject.record.PointRecordDO;
-import com.citu.module.menduner.reward.service.record.PointRecordService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.CollectionUtils;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-
-import static com.citu.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - 积分记录")
-@RestController
-@RequestMapping("/menduner/reward/point/record")
-@Validated
-public class PointRecordController {
-
-    @Resource
-    private PointRecordService pointRecordService;
-
-
-    @GetMapping("/page")
-    @Operation(summary = "获得用户积分记录分页")
-    @PreAuthorize("@ss.hasPermission('menduner:reward:point-record:query')")
-    public CommonResult<PageResult<PointRecordRespVO>> getPointRecordPage(@Valid PointRecordPageReqVO pageVO) {
-        // 执行分页查询
-        PageResult<PointRecordDO> pageResult = pointRecordService.getPointRecordPage(pageVO);
-        if (CollectionUtils.isEmpty(pageResult.getList())) {
-            return success(PageResult.empty(pageResult.getTotal()));
-        }
-        return success(PointRecordConvert.INSTANCE.convertPage(pageResult));
-    }
-
-}

+ 0 - 76
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/user/UserPointController.java

@@ -1,76 +0,0 @@
-package com.citu.module.menduner.reward.controller.admin.user;
-
-import cn.hutool.core.collection.CollUtil;
-import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.user.UserPointPageReqVO;
-import com.citu.module.menduner.reward.controller.base.user.UserPointRespVO;
-import com.citu.module.menduner.reward.controller.base.user.UserPointUpdateReqVO;
-import com.citu.module.menduner.reward.convert.UserPointConvert;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
-import com.citu.module.menduner.reward.service.record.PointRecordService;
-import com.citu.module.menduner.reward.service.user.UserPointService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-
-import static com.citu.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - 用户积分")
-@RestController
-@RequestMapping("/menduner/reward/user-point")
-@Validated
-public class UserPointController {
-
-    @Resource
-    private UserPointService userService;
-
-    @Resource
-    private PointRecordService pointRecordService;
-
-    @PutMapping("/update-point")
-    @Operation(summary = "修改用户的积分")
-    @PreAuthorize("@ss.hasPermission('menduner:reward:user-point:update')")
-    public CommonResult<Boolean> updateUserPoint(@Valid @RequestBody UserPointUpdateReqVO updateReqVO) {
-        pointRecordService.createPointRecord(updateReqVO.getUserId(),
-                null,
-                null,
-                MathOperationEnum.ADD.getOperator().equals(updateReqVO.getOperation())
-                        ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT,
-                updateReqVO.getPoint(),
-                PointBizTypeEnum.ADMIN,
-                String.valueOf(updateReqVO.getUserId()));
-        return success(true);
-    }
-
-
-    @GetMapping("/get")
-    @Operation(summary = "获得用户积分")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('menduner:reward:user-point:query')")
-    public CommonResult<UserPointRespVO> getUser(@RequestParam("id") Long id) {
-        UserPointDO user = userService.getUser(id);
-        return success(UserPointConvert.INSTANCE.convert2(user));
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得用户积分分页")
-    @PreAuthorize("@ss.hasPermission('menduner:reward:user-point:query')")
-    public CommonResult<PageResult<UserPointRespVO>> getUserPage(@Valid UserPointPageReqVO pageVO) {
-        PageResult<UserPointDO> pageResult = userService.getUserPage(pageVO);
-        if (CollUtil.isEmpty(pageResult.getList())) {
-            return success(PageResult.empty());
-        }
-
-        return success(UserPointConvert.INSTANCE.convertPage(pageResult));
-    }
-
-}

+ 0 - 51
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/app/record/AppPointRecordController.java

@@ -1,51 +0,0 @@
-package com.citu.module.menduner.reward.controller.app.record;
-
-import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.common.pojo.PageParam;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.framework.security.core.annotations.PreAuthenticated;
-import com.citu.module.menduner.common.util.LoginUserContext;
-import com.citu.module.menduner.reward.controller.app.record.vo.AppPointRecordRespVO;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordPageReqVO;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordRespVO;
-import com.citu.module.menduner.reward.convert.PointRecordConvert;
-import com.citu.module.menduner.reward.dal.dataobject.record.PointRecordDO;
-import com.citu.module.menduner.reward.service.record.PointRecordService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.CollectionUtils;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-
-import static com.citu.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "求职端 - 积分记录")
-@RestController
-@RequestMapping("/menduner/reward/point/record")
-@Validated
-public class AppPointRecordController {
-
-    @Resource
-    private PointRecordService pointRecordService;
-
-
-    @GetMapping("/page")
-    @PreAuthenticated
-    @Operation(summary = "获得用户积分记录分页")
-    public CommonResult<PageResult<AppPointRecordRespVO>> page(PageParam pageVO) {
-        // 执行分页查询
-        PageResult<PointRecordDO> pageResult =
-                pointRecordService.page(LoginUserContext.getUserId(),pageVO);
-        if (CollectionUtils.isEmpty(pageResult.getList())) {
-            return success(PageResult.empty(pageResult.getTotal()));
-        }
-        return success(PointRecordConvert.INSTANCE.convertPage2(pageResult));
-    }
-
-}

+ 0 - 11
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/app/record/vo/AppPointRecordRespVO.java

@@ -1,11 +0,0 @@
-package com.citu.module.menduner.reward.controller.app.record.vo;
-
-import com.citu.module.menduner.reward.controller.base.record.PointRecordRespVO;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "menduner - 用户积分记录 Response VO")
-@Data
-public class AppPointRecordRespVO extends PointRecordRespVO {
-
-}

+ 0 - 37
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/app/user/AppUserPointController.java

@@ -1,37 +0,0 @@
-package com.citu.module.menduner.reward.controller.app.user;
-
-
-import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.security.core.annotations.PreAuthenticated;
-import com.citu.module.menduner.common.util.LoginUserContext;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-
-import com.citu.module.menduner.reward.service.user.UserPointService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-
-import static com.citu.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "求职端 - 用户积分")
-@RestController
-@RequestMapping("/menduner/reward/user-point")
-@Validated
-public class AppUserPointController {
-
-    @Resource
-    private UserPointService userService;
-
-
-    @GetMapping("/get")
-    @Operation(summary = "获得用户积分")
-    @PreAuthenticated
-    public CommonResult<Integer> get() {
-        UserPointDO user =
-                userService.createUserPointIfAbsent(LoginUserContext.getUserId());
-        return success(user.getPoint());
-    }
-}

+ 5 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventMetricSaveReqVO.java

@@ -14,26 +14,26 @@ public class EventMetricSaveReqVO {
     private Long id;
 
     @Schema(description = "指标名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
-    @NotEmpty(message = "指标名称不能为空")
+    @NotEmpty(message = "{1_110_006_002}")
     private String name;
 
     @Schema(description = "指标值名称", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "指标值名称不能为空")
+    @NotEmpty(message = "{1_110_006_003}")
     private String value;
 
     @Schema(description = "指标分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "指标分类不能为空")
+    @NotNull(message = "{1_110_006_004}")
     private Integer type;
 
     @Schema(description = "备注说明", example = "随便")
     private String remark;
 
     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotEmpty(message = "状态不能为空")
+    @NotEmpty(message = "{1_110_000_001}")
     private String status;
 
     @Schema(description = "指标值类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "指标值类型不能为空")
+    @NotNull(message = "{1_110_006_005}")
     private Integer valueType;
 
 }

+ 3 - 3
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordSaveReqVO.java

@@ -15,15 +15,15 @@ public class EventRecordSaveReqVO {
     private Long id;
 
     @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4194")
-    @NotEmpty(message = "用户id不能为空")
+    @NotEmpty(message = "{1_110_000_003}")
     private Long userId;
 
     @Schema(description = "事件地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
-    @NotEmpty(message = "事件地址不能为空")
+    @NotEmpty(message = "{1_110_005_001}")
     private String url;
 
     @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "日期不能为空")
+    @NotNull(message = "{1_110_005_002}")
     private LocalDateTime date;
 
     @Schema(description = "总次数", example = "20502")

+ 0 - 24
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointBaseVO.java

@@ -1,24 +0,0 @@
-package com.citu.module.menduner.reward.controller.base.user;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * 用户积分 Base VO,提供给添加、修改、详细的子 VO 使用
- * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
- */
-@Data
-public class UserPointBaseVO {
-    
-    @Schema(description = "用户id", example = "1")
-    private Long userId;
-
-    @Schema(description = "积分数量积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788")
-    private Integer point;
-    
-    @Schema(description = "标签", example = "[1, 2]")
-    private List<Long> tagIds;
-
-}

+ 0 - 25
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointRespVO.java

@@ -1,25 +0,0 @@
-package com.citu.module.menduner.reward.controller.base.user;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Schema(description = "管理后台 - 用户积分 Response VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class UserPointRespVO extends UserPointBaseVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788")
-    private Long id;
-    
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-    @Schema(description = "更新时间")
-    private LocalDateTime updateTime;
-}

+ 0 - 20
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointSaveReqVO.java

@@ -1,20 +0,0 @@
-package com.citu.module.menduner.reward.controller.base.user;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import javax.validation.constraints.NotNull;
-
-@Schema(description = "管理后台 - 用户积分更新 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class UserPointSaveReqVO extends UserPointBaseVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788")
-    @NotNull(message = "{1_110_000_002}")
-    private Long id;
-
-}

+ 0 - 25
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/user/UserPointUpdateReqVO.java

@@ -1,25 +0,0 @@
-package com.citu.module.menduner.reward.controller.base.user;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.ToString;
-
-import javax.validation.constraints.NotNull;
-
-@Schema(description = "管理后台 - 用户修改积分 Request VO")
-@Data
-@ToString(callSuper = true)
-public class UserPointUpdateReqVO {
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788")
-    @NotNull(message = "{1_110_000_003}")
-    private Long userId;
-
-    @Schema(description = "递增、递减", requiredMode = Schema.RequiredMode.REQUIRED, example = "+")
-    private String operation;
-
-    @Schema(description = "变动积分,正数为增加,负数为减少", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
-    @NotNull(message = "{1_110_005_003}")
-    private Integer point;
-
-}

+ 0 - 20
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/convert/PointRecordConvert.java

@@ -1,20 +0,0 @@
-package com.citu.module.menduner.reward.convert;
-
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.app.record.vo.AppPointRecordRespVO;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordRespVO;
-import com.citu.module.menduner.reward.dal.dataobject.record.PointRecordDO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-
-@Mapper
-public interface PointRecordConvert {
-    PointRecordConvert INSTANCE = Mappers.getMapper(PointRecordConvert.class);
-
-
-    PageResult<PointRecordRespVO> convertPage(PageResult<PointRecordDO> pageResult);
-
-    PageResult<AppPointRecordRespVO> convertPage2(PageResult<PointRecordDO> pageResult);
-
-}

+ 0 - 22
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/convert/UserPointConvert.java

@@ -1,22 +0,0 @@
-package com.citu.module.menduner.reward.convert;
-
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.user.UserPointRespVO;
-import com.citu.module.menduner.reward.controller.base.user.UserPointUpdateReqVO;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-@Mapper
-public interface UserPointConvert {
-
-    UserPointConvert INSTANCE = Mappers.getMapper(UserPointConvert.class);
-
-    UserPointDO convert(UserPointUpdateReqVO bean);
-
-    UserPointRespVO convert2(UserPointDO bean);
-
-    PageResult<UserPointRespVO> convertPage(PageResult<UserPointDO> page);
-
-
-}

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/core/EasyRulesEngine.java

@@ -24,7 +24,7 @@ import static com.citu.module.menduner.reward.enums.EasyRulesConstants.*;
  * EasyRules 工具类
  * (负责解析自定义json字符串中的condition和action内容,赋值给Mvel规则when、then)
  *
- * @author rayson
+ * @author Rayson
  **/
 @Slf4j
 public class EasyRulesEngine {

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/core/PointRule.java

@@ -7,7 +7,7 @@ import java.util.Map;
 /**
  * 积分规则 事实 fact
  *
- * @author rayson
+ * @author Rayson
  **/
 @Data
 public class PointRule extends RuleBase {

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/core/PointRuleListener.java

@@ -5,7 +5,7 @@ import org.jeasy.rules.api.Rule;
 import org.jeasy.rules.api.RuleListener;
 
 /**
- * @author rayson
+ * @author Rayson
  * @description PointRuleListener
  * @create 2024/6/27 上午10:24
  **/

+ 0 - 41
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/dataobject/user/UserPointDO.java

@@ -1,41 +0,0 @@
-package com.citu.module.menduner.reward.dal.dataobject.user;
-
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.citu.framework.mybatis.core.type.LongListTypeHandler;
-import com.citu.framework.tenant.core.db.TenantBaseDO;
-import lombok.*;
-
-import java.util.List;
-
-@TableName(value = "mde_reward_user_point", autoResultMap = true)
-@KeySequence("mde_reward_user_point_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class UserPointDO extends TenantBaseDO {
-
-
-    @TableId
-    private Long id;
-
-    /**
-     * 用户id
-     */
-    private Long userId;
-
-    /**
-     * 积分
-     */
-    private Integer point;
-
-    /**
-     * 预留 标签列表,以逗号分隔
-     */
-    @TableField(typeHandler = LongListTypeHandler.class)
-    private List<Long> tagIds;
-}

+ 0 - 62
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/record/PointRecordMapper.java

@@ -1,62 +0,0 @@
-package com.citu.module.menduner.reward.dal.mysql.record;
-
-import com.citu.framework.common.pojo.PageParam;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.framework.mybatis.core.mapper.BaseMapperX;
-import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordPageReqVO;
-import com.citu.module.menduner.reward.dal.dataobject.record.PointRecordDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-/**
- * 用户积分记录 Mapper
- *
- * @author Rayson
- */
-@Mapper
-public interface PointRecordMapper extends BaseMapperX<PointRecordDO> {
-
-    default PageResult<PointRecordDO> selectPage(PointRecordPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<PointRecordDO>()
-                .eqIfPresent(PointRecordDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(PointRecordDO::getBizType, reqVO.getBizType())
-                .likeIfPresent(PointRecordDO::getTitle, reqVO.getTitle())
-                .orderByDesc(PointRecordDO::getCreateTime));
-    }
-
-    /**
-     * 获取一定时间范围内的用户积分记录
-     * @param userId 用户id
-     * @param url 事件地址
-     * @param startDate 开始时间
-     * @param endDate 结束时间
-     * @return List<PointRecordDO>
-     **/
-    default List<PointRecordDO> getUserPointList(Long userId,
-                                                 String url,
-                                                 LocalDateTime startDate,
-                                                 LocalDateTime endDate) {
-        LambdaQueryWrapperX<PointRecordDO> wrapperX = new LambdaQueryWrapperX<PointRecordDO>();
-        wrapperX.eq(PointRecordDO::getUserId, userId);
-        wrapperX.eqIfPresent(PointRecordDO::getUrl, url);
-        if (null != startDate) {
-            wrapperX.ge(PointRecordDO::getCreateTime, startDate);
-        }
-
-        if (null != endDate) {
-            wrapperX.le(PointRecordDO::getCreateTime, endDate);
-        }
-
-        return selectList(wrapperX);
-    }
-
-    default PageResult<PointRecordDO> selectPageByUserId(Long userId, PageParam pageVO) {
-        return selectPage(pageVO, new LambdaQueryWrapperX<PointRecordDO>()
-                .eq(PointRecordDO::getUserId, userId)
-                .orderByDesc(PointRecordDO::getCreateTime));
-    }
-
-}

+ 0 - 78
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/user/UserPointMapper.java

@@ -1,78 +0,0 @@
-package com.citu.module.menduner.reward.dal.mysql.user;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.framework.mybatis.core.mapper.BaseMapperX;
-import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.citu.module.menduner.reward.controller.base.user.UserPointPageReqVO;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.stream.Collectors;
-
-/**
- * 用户积分 Mapper
- *
- * @author Rayson
- */
-@Mapper
-public interface UserPointMapper extends BaseMapperX<UserPointDO> {
-
-
-    default PageResult<UserPointDO> selectPage(UserPointPageReqVO reqVO) {
-        // 处理 tagIds 过滤条件
-        String tagIdSql = "";
-        if (CollUtil.isNotEmpty(reqVO.getTagIds())) {
-            tagIdSql = reqVO.getTagIds().stream()
-                    .map(tagId -> "FIND_IN_SET(" + tagId + ", tag_ids)")
-                    .collect(Collectors.joining(" OR "));
-        }
-        // 分页查询
-        return selectPage(reqVO, new LambdaQueryWrapperX<UserPointDO>()
-                .betweenIfPresent(UserPointDO::getCreateTime, reqVO.getCreateTime())
-                .apply(StrUtil.isNotEmpty(tagIdSql), tagIdSql)
-                .orderByDesc(UserPointDO::getId));
-    }
-
-    default UserPointDO selectByUserId(Long userId) {
-        return selectOne(new LambdaQueryWrapperX<UserPointDO>().eq(UserPointDO::getUserId, userId));
-    }
-
-
-    default Long selectCountByTagId(Long tagId) {
-        return selectCount(new LambdaQueryWrapperX<UserPointDO>()
-                .apply("FIND_IN_SET({0}, tag_ids)", tagId));
-    }
-
-    /**
-     * 更新用户积分(增加)
-     *
-     * @param id        用户编号
-     * @param incrCount 增加积分(正数)
-     */
-    default void updatePointIncr(Long id, Integer incrCount) {
-        Assert.isTrue(incrCount > 0);
-        LambdaUpdateWrapper<UserPointDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<UserPointDO>()
-                .setSql(" point = point + " + incrCount)
-                .eq(UserPointDO::getUserId, id);
-        update(null, lambdaUpdateWrapper);
-    }
-
-    /**
-     * 更新用户积分(减少)
-     *
-     * @param id        用户编号
-     * @param incrCount 增加积分(负数)
-     * @return 更新行数
-     */
-    default int updatePointDecr(Long id, Integer incrCount) {
-        Assert.isTrue(incrCount < 0);
-        LambdaUpdateWrapper<UserPointDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<UserPointDO>()
-                .setSql(" point = point + " + incrCount) // 负数,所以使用 + 号
-                .eq(UserPointDO::getUserId, id);
-        return update(null, lambdaUpdateWrapper);
-    }
-}

+ 14 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/redis/RedisKeyConstants.java

@@ -16,6 +16,14 @@ public interface RedisKeyConstants {
      */
     String POINT_RULE_CONFIG = "point_rule_config";
 
+    /**
+     * 积分规则配置
+     * <p>
+     * KEY 格式:point_rule_config_list:{url}
+     * VALUE 数据类型:String 积分规则配置
+     */
+    String POINT_RULE_CONFIG_LIST = "point_rule_config_list";
+
     /**
      * 点击指标数量
      * <p>
@@ -24,6 +32,12 @@ public interface RedisKeyConstants {
      */
     String EVENT_RECORD_COUNT = "click_metric_count";
 
+    /**
+     * 事件记录锁
+     * <p>
+     * KEY 格式:event_record_lock:  userId : url  : time
+     */
+    String EVENT_RECORD_LOCK = "event_record_lock:{}:{}:{}";
 
 
 }

+ 3 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/framework/rpc/config/RpcConfiguration.java

@@ -1,14 +1,12 @@
 package com.citu.module.menduner.reward.framework.rpc.config;
 
+import com.citu.module.menduner.system.api.account.EnterpriseAccountApi;
 import com.citu.module.menduner.system.api.url.MendunerSystemUrlApi;
-import com.citu.module.system.api.logger.LoginLogApi;
-import com.citu.module.system.api.sms.SmsCodeApi;
-import com.citu.module.system.api.social.SocialClientApi;
-import com.citu.module.system.api.social.SocialUserApi;
+import com.citu.module.menduner.system.api.account.UserAccountApi;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration(proxyBeanMethods = false)
-@EnableFeignClients(clients = {MendunerSystemUrlApi.class})
+@EnableFeignClients(clients = {MendunerSystemUrlApi.class, UserAccountApi.class, EnterpriseAccountApi.class})
 public class RpcConfiguration {
 }

+ 8 - 9
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/mq/consumer/UserPointConsumer.java

@@ -1,11 +1,9 @@
 package com.citu.module.menduner.reward.mq.consumer;
 
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
 import com.citu.module.menduner.reward.mq.message.UserPointSendMessage;
-import com.citu.module.menduner.reward.service.event.EventRecordService;
-import com.citu.module.menduner.reward.service.record.PointRecordService;
+import com.citu.module.menduner.system.api.account.AccountRecordSaveReqDTO;
+import com.citu.module.menduner.system.api.account.UserAccountApi;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -27,21 +25,22 @@ import javax.annotation.Resource;
 public class UserPointConsumer implements RocketMQListener<UserPointSendMessage>, RocketMQPushConsumerLifecycleListener {
 
     @Resource
-    private PointRecordService pointRecordService;
+    private UserAccountApi userAccountApi;
 
     @Override
     @DSTransactional
     public void onMessage(UserPointSendMessage message) {
         log.info("接收到队列消息[{}]", message);
         // 增加用户积分
-        pointRecordService.createPointRecord(
-                message.getUserId(),
+        AccountRecordSaveReqDTO dto = new AccountRecordSaveReqDTO();
+        dto.build(message.getUserId(),
                 message.getUrl(),
                 message.getTitle(),
-                message.getOperation(),
+                message.getOperation().getExpression(),
                 message.getPoint(),
-                message.getBizType(),
+                message.getBizType().getType(),
                 message.getBizId());
+        userAccountApi.createPointRecord(dto).getCheckedData();
         log.info("消息处理完备[{}]", message);
     }
 

+ 2 - 2
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/mq/message/UserPointSendMessage.java

@@ -1,7 +1,7 @@
 package com.citu.module.menduner.reward.mq.message;
 
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/rule/DynamicPointRule.java

@@ -13,7 +13,7 @@ import java.util.Map;
 /**
  * 动态积分规则
  *
- * @author rayson
+ * @author Rayson
  **/
 @Slf4j
 @Rule(name = "DynamicRule")

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/rule/DynamicRule.java

@@ -13,7 +13,7 @@ import java.util.Map;
 /**
  * 动态规则
  *
- * @author rayson
+ * @author Rayson
  **/
 @Slf4j
 @Rule(name = "DynamicRule")

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/rule/DynamicRuleAction.java

@@ -3,7 +3,7 @@ package com.citu.module.menduner.reward.rule;
 /**
  * 动态规则效验成功后的动作 接口
  *
- * @author rayson
+ * @author Rayson
  **/
 @FunctionalInterface
 public interface DynamicRuleAction<T> {

+ 24 - 6
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigServiceImpl.java

@@ -12,6 +12,7 @@ import com.citu.module.menduner.reward.enums.config.PointRuleConfigStatusEnum;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -20,7 +21,6 @@ import java.util.List;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.POINT_RULE_CONFIG_NOT_EXISTS;
-import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.POINT_RULE_CONFIG_URL_EXISTS;
 
 /**
  * 积分规则配置 Service 实现类
@@ -36,6 +36,10 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
+    @Caching(evict = {
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, key = "#updateReqVO.url"),
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG_LIST)
+    })
     public Long createPointRuleConfig(PointRuleConfigSaveReqVO createReqVO) {
         // 插入
         PointRuleConfigDO pointRuleConfig = BeanUtils.toBean(createReqVO, PointRuleConfigDO.class);
@@ -51,7 +55,10 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
-    @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, key = "#updateReqVO.url")
+    @Caching(evict = {
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, key = "#updateReqVO.url"),
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG_LIST)
+    })
     public void updatePointRuleConfig(PointRuleConfigSaveReqVO updateReqVO) {
         // 校验存在
         validatePointRuleConfigExists(updateReqVO.getId());
@@ -67,7 +74,10 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
-    @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, key = "#id")
+    @Caching(evict = {
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, key = "#id"),
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG_LIST)
+    })
     public void deletePointRuleConfig(Long id) {
         // 校验存在
         validatePointRuleConfigExists(id);
@@ -92,13 +102,15 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
     }
 
     @Override
-    @Cacheable(value = RedisKeyConstants.POINT_RULE_CONFIG, key = "#url",
+    @Cacheable(value = RedisKeyConstants.POINT_RULE_CONFIG + "#1h", key = "#url",
             unless = "#result == null")
     public List<PointRuleConfigDO> getByUrlList(String url) {
         return mapper.selectByUrlAndStatus(url, PointRuleConfigStatusEnum.ENABLE);
     }
 
     @Override
+    @Cacheable(value = RedisKeyConstants.POINT_RULE_CONFIG_LIST + "#1h",
+            unless = "#result == null")
     public List<PointRuleConfigDO> selectDistinctUrlList() {
         return mapper.selectDistinctUrlList();
     }
@@ -115,7 +127,10 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
-    @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, allEntries = true)
+    @Caching(evict = {
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, allEntries = true),
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG_LIST)
+    })
     public boolean enable(List<Long> ids) {
         for (Long id : ids) {
             PointRuleConfigDO configDO = valid(id);
@@ -130,7 +145,10 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
-    @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, allEntries = true)
+    @Caching(evict = {
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, allEntries = true),
+            @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG_LIST)
+    })
     public boolean disable(List<Long> ids) {
         for (Long id : ids) {
             PointRuleConfigDO configDO = valid(id);

+ 47 - 22
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventRecordServiceImpl.java

@@ -2,6 +2,7 @@ package com.citu.module.menduner.reward.service.event;
 
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
@@ -11,8 +12,10 @@ import com.citu.module.menduner.reward.dal.dataobject.event.EventMetricDO;
 import com.citu.module.menduner.reward.dal.dataobject.event.EventRecordDO;
 import com.citu.module.menduner.reward.dal.mysql.event.EventRecordMapper;
 import com.citu.module.menduner.reward.enums.event.EventMetricTypeEnum;
-import com.citu.module.menduner.reward.service.record.PointRecordService;
+import com.citu.module.menduner.system.api.account.UserAccountApi;
 import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -21,8 +24,10 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.reward.dal.redis.RedisKeyConstants.EVENT_RECORD_LOCK;
 import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.EVENT_RECORD_NOT_EXISTS;
 
 /**
@@ -42,7 +47,10 @@ public class EventRecordServiceImpl implements EventRecordService {
     private EventMetricService eventMetricService;
 
     @Resource
-    private PointRecordService pointRecordService;
+    private UserAccountApi userAccountApi;
+
+    @Resource
+    private RedissonClient redissonClient;
 
 
     @Override
@@ -124,9 +132,9 @@ public class EventRecordServiceImpl implements EventRecordService {
         EventMetricDO eventMetric = eventMetricService.getByValue(metricValue);
         LocalDateTime[] dateRange = generateDateRange(eventMetric);
         if (eventMetric.getValue().contains("event")) {
-            return pointRecordService.getPointCount(userId, url, dateRange[0], dateRange[1]);
+            return userAccountApi.getPointCount(userId, url, dateRange[0], dateRange[1]).getCheckedData();
         } else if (eventMetric.getValue().contains("point")) {
-            return pointRecordService.getPointCount(userId, null, dateRange[0], dateRange[1]);
+            return userAccountApi.getPointCount(userId, null, dateRange[0], dateRange[1]).getCheckedData();
         }
         List<EventRecordDO> list = eventRecordMapper.getList(userId, url, dateRange[0], dateRange[1]);
         if (ObjectUtil.isEmpty(list)) {
@@ -138,25 +146,42 @@ public class EventRecordServiceImpl implements EventRecordService {
     @Override
     @DSTransactional
     public void createEventRecord(Long userId, String url) {
-        //TODO 读多写多场景,不好使用缓存,暂时直接写库
-
-        // 查询今天记录
-        EventRecordDO record =
-                eventRecordMapper.get(userId, url, LocalDate.now().atStartOfDay());
-        if (null == record) {
-            // 没有今天的记录
-            //新增
-            eventRecordMapper.insert(EventRecordDO.builder()
-                    .userId(userId)
-                    .url(url)
-                    .date(LocalDate.now().atStartOfDay())
-                    .count(1)
-                    .build());
-        } else {
-            // 修改次数
-            record.setCount(record.getCount() + 1);
-            eventRecordMapper.updateById(record);
+        //TODO 读多写多场景,读写分离,不好使用缓存,暂时直接写库
+
+        // 尝试加锁
+        LocalDateTime time = LocalDate.now().atStartOfDay();
+        String lockKey = StrUtil.format(EVENT_RECORD_LOCK, userId, url, time);
+        RLock lock = redissonClient.getLock(lockKey);
+        try {
+            // 尝试获取锁,等待时间为30秒,锁自动续期时间为10分钟
+            if (lock.tryLock(30, 10, TimeUnit.MINUTES)) {
+
+                // 查询今天记录
+                EventRecordDO record =
+                        eventRecordMapper.get(userId, url, time);
+                if (null == record) {
+                    // 没有今天的记录
+                    //新增
+                    eventRecordMapper.insert(EventRecordDO.builder()
+                            .userId(userId)
+                            .url(url)
+                            .date(time)
+                            .count(1)
+                            .build());
+                } else {
+                    // 修改次数
+                    record.setCount(record.getCount() + 1);
+                    eventRecordMapper.updateById(record);
+                }
+
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new RuntimeException("Failed to acquire lock");
+        } finally {
+            lock.unlock();
         }
     }
 
+
 }

+ 7 - 7
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackServiceImpl.java

@@ -13,8 +13,6 @@ import com.citu.module.menduner.reward.core.PointRule;
 import com.citu.module.menduner.reward.core.RuleMatch;
 import com.citu.module.menduner.reward.dal.dataobject.config.Condition;
 import com.citu.module.menduner.reward.dal.dataobject.config.PointRuleConfigDO;
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
 import com.citu.module.menduner.reward.mq.message.UserPointSendMessage;
 import com.citu.module.menduner.reward.mq.producer.UserPointProducer;
 import com.citu.module.menduner.reward.rule.DynamicPointRule;
@@ -22,6 +20,8 @@ import com.citu.module.menduner.reward.rule.DynamicRuleAction;
 import com.citu.module.menduner.reward.service.config.PointRuleConfigService;
 import com.citu.module.menduner.system.api.url.MendunerSystemUrlApi;
 import com.citu.module.menduner.system.api.url.UrlInfoRespVO;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.jeasy.rules.api.Facts;
 import org.springframework.stereotype.Service;
@@ -36,7 +36,7 @@ import static com.citu.module.menduner.reward.enums.EasyRulesConstants.*;
 /**
  * 事件跟踪 Service 实现类
  *
- * @author rayson
+ * @author Rayson
  **/
 @Slf4j
 @Service
@@ -127,8 +127,10 @@ public class EventTrackServiceImpl implements EventTrackService {
             // 将处理结果添加到响应列表中
             respVOList.add(respVO);
         }
-
+        // 调用服务记录事件访问
+        eventRecordService.createEventRecord(loginUser.getId(), url);
         return respVOList;
+
     }
 
     /**
@@ -154,9 +156,6 @@ public class EventTrackServiceImpl implements EventTrackService {
 
         // 执行规则匹配和相关操作
         execute(pointRule, loginUser, config, url, respVO);
-        // 调用服务记录事件访问
-        eventRecordService.createEventRecord(loginUser.getId(), url);
-
         return respVO;
     }
 
@@ -257,6 +256,7 @@ public class EventTrackServiceImpl implements EventTrackService {
 
     /**
      * 执行匹配
+     *
      * @param pointRule 积分规则对象
      **/
     private void match(PointRule pointRule,

+ 0 - 71
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordService.java

@@ -1,71 +0,0 @@
-package com.citu.module.menduner.reward.service.record;
-
-import com.citu.framework.common.pojo.PageParam;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordPageReqVO;
-import com.citu.module.menduner.reward.dal.dataobject.record.PointRecordDO;
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-
-/**
- * 用户积分记录 Service 接口
- *
- * @author Rayson
- */
-public interface PointRecordService {
-
-    /**
-     * 【管理员】获得积分记录分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 签到记录分页
-     */
-    PageResult<PointRecordDO> getPointRecordPage(PointRecordPageReqVO pageReqVO);
-
-
-    /**
-     * 创建用户积分记录
-     *
-     * @param userId  用户ID
-     * @param url 事件地址
-     * @param title 规则标题
-     * @param operation 操作
-     * @param point   变动积分
-     * @param bizType 业务类型
-     * @param bizId   业务编号
-     */
-    void createPointRecord(Long userId,
-                           String url,
-                           String title,
-                           MathOperationEnum operation,
-                           Integer point,
-                           PointBizTypeEnum bizType,
-                           String bizId);
-
-
-    /**
-     * 获取一段时间内的用户积分获得的数量
-     * @author Rayson
-     * @param userId 用户id
-     * @param url 事件地址
-     * @param startDate 开始时间
-     * @param endDate 结束时间
-     * @date 2024/6/28 上午10:06
-     * @return Integer
-     **/
-    Integer getPointCount(Long userId,String url, LocalDateTime startDate, LocalDateTime endDate);
-
-    // ========== 求职端 ==========
-
-    /**
-     * 分页获取当前用户积分记录
-     * @param userId 用户id
-     * @param pageVO 分页
-     * @return PageResult<PointRecordDO>
-     **/
-    PageResult<PointRecordDO> page(Long userId,PageParam pageVO);
-}

+ 0 - 118
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordServiceImpl.java

@@ -1,118 +0,0 @@
-package com.citu.module.menduner.reward.service.record;
-
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.dynamic.datasource.annotation.DSTransactional;
-import com.citu.framework.common.pojo.PageParam;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.record.PointRecordPageReqVO;
-import com.citu.module.menduner.reward.dal.dataobject.record.PointRecordDO;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-import com.citu.module.menduner.reward.dal.mysql.record.PointRecordMapper;
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
-import com.citu.module.menduner.reward.service.user.UserPointService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import javax.annotation.Resource;
-import java.time.LocalDateTime;
-import java.util.List;
-
-import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.USER_POINT_NOT_ENOUGH;
-
-
-/**
- * 积分记录 Service 实现类
- *
- * @author Rayson
- */
-@Slf4j
-@Service
-@Validated
-public class PointRecordServiceImpl implements PointRecordService {
-
-    @Resource
-    private PointRecordMapper mapper;
-
-    @Resource
-    private UserPointService userPointService;
-
-    @Override
-    public PageResult<PointRecordDO> getPointRecordPage(PointRecordPageReqVO pageReqVO) {
-        return mapper.selectPage(pageReqVO);
-    }
-
-    @Override
-    @DSTransactional
-    public void createPointRecord(Long userId,
-                                  String url,
-                                  String title,
-                                  MathOperationEnum operation,
-                                  Integer point,
-                                  PointBizTypeEnum bizType,
-                                  String bizId) {
-        if (0 == point) {
-            return;
-        }
-        // 1. 校验用户积分余额
-        UserPointDO user = userPointService.createUserPointIfAbsent(userId);
-        Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0);
-        int totalPoint = userPoint + point; // 用户变动后的积分
-        if (totalPoint < 0) {
-            throw exception(USER_POINT_NOT_ENOUGH);
-        }
-
-        if (MathOperationEnum.SUBTRACT.equals(operation)) {
-            if (userPoint - point < 0) {
-                throw exception(USER_POINT_NOT_ENOUGH);
-            }
-            totalPoint = userPoint - point;
-            // 减法
-            point = -Math.abs(point);
-
-        }
-
-        // 2. 更新用户积分
-        boolean success = userPointService.updateUserPoint(userId, point);
-        if (!success) {
-            throw exception(USER_POINT_NOT_ENOUGH);
-        }
-
-        // 3. 增加积分记录
-        PointRecordDO record = new PointRecordDO()
-                .setUserId(userId)
-                .setBizId(bizId)
-                .setBizType(bizType.getType())
-                .setTitle(bizType.getName())
-                .setUrl(url)
-                .setOperation(operation.getOperator())
-                .setDescription(StrUtil.format(bizType.getDescription(), point))
-                .setPoint(point).setTotalPoint(totalPoint);
-
-        if (PointBizTypeEnum.EVENT.equals(bizType)) {
-            if (MathOperationEnum.SUBTRACT.equals(operation)) {
-                record.setDescription(StrUtil.format(bizType.getDescription(), title, point));
-            } else {
-                record.setDescription(StrUtil.format(bizType.getDescription(), title, operation.getOperator(), point));
-            }
-        }
-        mapper.insert(record);
-    }
-
-    @Override
-    public Integer getPointCount(Long userId, String url, LocalDateTime startDate, LocalDateTime endDate) {
-        List<PointRecordDO> list = mapper.getUserPointList(userId, url, startDate, endDate);
-        if (ObjectUtil.isEmpty(list)) {
-            return 0;
-        }
-        return list.stream().mapToInt(PointRecordDO::getPoint).sum();
-    }
-
-    @Override
-    public PageResult<PointRecordDO> page(Long userId, PageParam pageVO) {
-        return mapper.selectPageByUserId(userId,pageVO);
-    }
-}

+ 11 - 8
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/signin/SignInRecordServiceImpl.java

@@ -13,9 +13,10 @@ import com.citu.module.menduner.reward.convert.SignInRecordConvert;
 import com.citu.module.menduner.reward.dal.dataobject.signin.SignInConfigDO;
 import com.citu.module.menduner.reward.dal.dataobject.signin.SignInRecordDO;
 import com.citu.module.menduner.reward.dal.mysql.signin.SignInRecordMapper;
-import com.citu.module.menduner.reward.enums.MathOperationEnum;
-import com.citu.module.menduner.reward.enums.record.PointBizTypeEnum;
-import com.citu.module.menduner.reward.service.record.PointRecordService;
+import com.citu.module.menduner.system.api.account.AccountRecordSaveReqDTO;
+import com.citu.module.menduner.system.api.account.UserAccountApi;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -40,7 +41,7 @@ public class SignInRecordServiceImpl implements SignInRecordService {
     @Resource
     private SignInConfigService signInConfigService;
     @Resource
-    private PointRecordService pointRecordService;
+    private UserAccountApi userAccountApi;
 
 
     @Override
@@ -74,14 +75,16 @@ public class SignInRecordServiceImpl implements SignInRecordService {
 
         // 4. 增加积分
         if (!ObjectUtils.equalsAny(record.getPoint(), null, 0)) {
-            pointRecordService.createPointRecord(
+            AccountRecordSaveReqDTO dto = new AccountRecordSaveReqDTO();
+            dto.build(
                     userId,
-                    null,
+                    "",
                     PointBizTypeEnum.SIGN.getName(),
-                    MathOperationEnum.ADD,
+                    MathOperationEnum.ADD.getExpression(),
                     record.getPoint(),
-                    PointBizTypeEnum.SIGN,
+                    PointBizTypeEnum.SIGN.getType(),
                     String.valueOf(record.getId()));
+            userAccountApi.createPointRecord(dto);
         }
         return record;
     }

+ 0 - 83
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointService.java

@@ -1,83 +0,0 @@
-package com.citu.module.menduner.reward.service.user;
-
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.user.UserPointPageReqVO;
-import com.citu.module.menduner.reward.controller.base.user.UserPointUpdateReqVO;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-
-import javax.validation.Valid;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 用户积分 Service 接口
- *
- * @author Rayson
- */
-public interface UserPointService {
-
-    /**
-     * 通过用户 ID 查询用户
-     *
-     * @param id 用户ID
-     * @return 用户对象信息
-     */
-    UserPointDO getUser(Long id);
-
-    /**
-     * 通过用户 编号 查询用户
-     *
-     * @param userId 用户 编号
-     * @return 用户对象信息
-     */
-    UserPointDO getPointByUserId(Long userId);
-
-    /**
-     * 通过用户 ID 查询用户们
-     *
-     * @param ids 用户 ID
-     * @return 用户对象信息数组
-     */
-    List<UserPointDO> getUserList(Collection<Long> ids);
-
-    /**
-     * 更新用户积分
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateUser(@Valid UserPointUpdateReqVO updateReqVO);
-
-    /**
-     * 获得用户积分分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 用户积分分页
-     */
-    PageResult<UserPointDO> getUserPage(UserPointPageReqVO pageReqVO);
-
-
-    /**
-     * 获得指定标签下的用户数量
-     *
-     * @param tagId 用户标签编号
-     * @return 用户数量
-     */
-    Long getUserCountByTagId(Long tagId);
-
-    /**
-     * 更新用户的积分
-     *
-     * @param userId 用户编号
-     * @param point  积分数量
-     * @return 更新结果
-     */
-    boolean updateUserPoint(Long userId, Integer point);
-
-    /**
-     * 如果用户积分不存在,则创建
-     * @param userId 用户编号
-     * @return 用户积分对象
-     */
-    UserPointDO createUserPointIfAbsent(Long userId);
-
-}

+ 0 - 102
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointServiceImpl.java

@@ -1,102 +0,0 @@
-package com.citu.module.menduner.reward.service.user;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.ListUtil;
-import com.baomidou.dynamic.datasource.annotation.DSTransactional;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.reward.controller.base.user.UserPointPageReqVO;
-import com.citu.module.menduner.reward.controller.base.user.UserPointUpdateReqVO;
-import com.citu.module.menduner.reward.convert.UserPointConvert;
-import com.citu.module.menduner.reward.dal.dataobject.user.UserPointDO;
-import com.citu.module.menduner.reward.dal.mysql.user.UserPointMapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-import java.util.Collection;
-import java.util.List;
-
-import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.USER_NOT_EXISTS;
-
-/**
- * 用户积分 Service 实现类
- *
- * @author Rayson
- */
-@Service
-@Valid
-@Slf4j
-public class UserPointServiceImpl implements UserPointService {
-
-    @Resource
-    private UserPointMapper userPointMapper;
-
-
-    @Override
-    public UserPointDO getUser(Long id) {
-        return userPointMapper.selectById(id);
-    }
-
-    @Override
-    public UserPointDO getPointByUserId(Long userId) {
-        return userPointMapper.selectByUserId(userId);
-    }
-
-    @Override
-    public List<UserPointDO> getUserList(Collection<Long> ids) {
-        if (CollUtil.isEmpty(ids)) {
-            return ListUtil.empty();
-        }
-        return userPointMapper.selectBatchIds(ids);
-    }
-
-
-    @Override
-    @DSTransactional
-    public void updateUser(UserPointUpdateReqVO updateReqVO) {
-        // 校验存在
-        UserPointDO user = userPointMapper.selectById(updateReqVO.getUserId());
-        if (null == user) {
-            throw exception(USER_NOT_EXISTS);
-        }
-        // 更新
-        UserPointDO updateObj = UserPointConvert.INSTANCE.convert(updateReqVO);
-        userPointMapper.updateById(updateObj);
-    }
-
-
-    @Override
-    public PageResult<UserPointDO> getUserPage(UserPointPageReqVO pageReqVO) {
-        return userPointMapper.selectPage(pageReqVO);
-    }
-
-
-    @Override
-    public Long getUserCountByTagId(Long tagId) {
-        return userPointMapper.selectCountByTagId(tagId);
-    }
-
-    @Override
-    public boolean updateUserPoint(Long id, Integer point) {
-        if (point > 0) {
-            userPointMapper.updatePointIncr(id, point);
-        } else if (point < 0) {
-            return userPointMapper.updatePointDecr(id, point) > 0;
-        }
-        return true;
-    }
-
-    @Override
-    @DSTransactional
-    public UserPointDO createUserPointIfAbsent(Long userId) {
-        UserPointDO userPointDO = userPointMapper.selectByUserId(userId);
-        if (null != userPointDO) {
-          return userPointDO;
-        }
-        UserPointDO userPoint = UserPointDO.builder().userId(userId).point(0).build();
-        userPointMapper.insert(userPoint);
-        return userPoint;
-    }
-}

+ 1 - 1
menduner/menduner-reward-biz/src/main/resources/application-dev.yaml

@@ -55,7 +55,7 @@ spring:
   redis:
     host: 400-infra.server.iocoder.cn # 地址
     port: 6379 # 端口
-    database: 1 # 数据库索引
+    database: 2 # 数据库索引
 #    password: 123456 # 密码,建议生产环境开启
 
 --- #################### MQ 消息队列相关配置 ####################

+ 1 - 1
menduner/menduner-reward-biz/src/main/resources/application-local.yaml

@@ -66,7 +66,7 @@ spring:
   redis:
     host: 192.168.3.80 # 地址
     port: 6379 # 端口
-    database: 0 # 数据库索引
+    database: 2 # 数据库索引
 #    password: 123456 # 密码,建议生产环境开启
 
 --- #################### MQ 消息队列相关配置 ####################

+ 3 - 0
menduner/menduner-reward-biz/src/main/resources/application.yaml

@@ -118,6 +118,9 @@ citu:
   web:
     admin-ui:
       url: http://192.168.3.80 # Admin 管理后台 UI 的地址
+  # 是否开启访问日志
+  access-log:
+    enable: false
   swagger:
     title: 管理后台
     description: 提供管理员管理的所有功能

+ 8 - 6
menduner/menduner-reward-biz/src/main/resources/i18n/messages_en_US.properties

@@ -39,11 +39,13 @@
 1_110_003_005=Reward points cannot be less than 0
 # ========== 签到记录 1_110_004_000 ==========
 1_110_004_001=Checked in today, please do not sign in again
-# ========== 用户相关  1_110_005_000 ============
-1_110_005_001=User does not exist
-1_110_005_002=Insufficient user points balance
-1_110_005_003=Variable integral cannot be empty
+# ========== 事件记录  1_110_005_000 ============
+1_110_005_001=Event record does not exist
+1_110_005_002=Event address cannot be empty
+1_110_005_003=Date cannot be empty
 # ========== 事件指标 1_110_006_000 ==========
 1_110_006_001=Event indicator does not exist
-# ========== 事件记录 1_110_007_000 ==========
-1_110_007_001=Event record does not exist
+1_110_006_002=Indicator name cannot be empty
+1_110_006_003=Indicator value name cannot be empty
+1_110_006_004=Indicator classification cannot be empty
+1_110_006_005=Indicator value type cannot be empty

+ 8 - 6
menduner/menduner-reward-biz/src/main/resources/i18n/messages_zh_CN.properties

@@ -39,11 +39,13 @@
 1_110_003_005=奖励积分不能小于 0
 # ========== 签到记录 1_110_004_000 ==========
 1_110_004_001=今日已签到,请勿重复签到
-# ========== 用户相关  1_110_005_000 ============
-1_110_005_001=用户不存在
-1_110_005_002=用户积分余额不足
-1_110_005_003=变动积分不能为空
+# ========== 事件记录  1_110_005_000 ============
+1_110_005_001=事件记录不存在
+1_110_005_002=事件地址不能为空
+1_110_005_003=日期不能为空
 # ========== 事件指标 1_110_006_000 ==========
 1_110_006_001=事件指标不存在
-# ========== 事件记录 1_110_007_000 ==========
-1_110_007_001=事件记录不存在
+1_110_006_002=指标名称不能为空
+1_110_006_003=指标值名称不能为空
+1_110_006_004=指标分类不能为空
+1_110_006_005=指标值类型不能为空

+ 1 - 1
menduner/menduner-reward-biz/src/test/java/com/citu/module/menduner/reward/service/Test.java

@@ -1,7 +1,7 @@
 package com.citu.module.menduner.reward.service;
 
 /**
- * @author rayson
+ * @author Rayson
  * @description Test
  * @create 2024/6/17 下午7:30
  **/

+ 106 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/AccountRecordSaveReqDTO.java

@@ -0,0 +1,106 @@
+package com.citu.module.menduner.system.api.account;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@Schema(description = "账户记录保存 DTO VO")
+public class AccountRecordSaveReqDTO {
+
+    private Long enterpriseId;
+    private Long userId;
+    private String url;
+    private String title;
+    private String operation;
+    private Integer point;
+    private BigDecimal balance;
+    private Integer pointBizType;
+    private Integer balanceBizType;
+    private String bizId;
+
+
+    /**
+     * 创建用户账户积分变动记录
+     **/
+    public void build(Long userId,
+                      String url,
+                      String title,
+                      String operation,
+                      Integer point,
+                      Integer bizType,
+                      String bizId) {
+        this.url = url;
+        this.pointBizType = bizType;
+        this.point = point;
+        initCommon(userId, title, operation, bizId);
+
+    }
+
+    /**
+     * 创建用户账户余额变动记录
+     **/
+    public void build(Long userId,
+                      String title,
+                      String operation,
+                      BigDecimal balance,
+                      Integer bizType,
+                      String bizId) {
+        this.balanceBizType = bizType;
+        this.balance = balance;
+        initCommon(userId, title, operation, bizId);
+
+    }
+
+    /**
+     * 创建企业账户积分变动记录
+     **/
+    public void build(
+            Long enterpriseId,
+            Long userId,
+            String title,
+            String operation,
+            Integer point,
+            Integer bizType,
+            String bizId) {
+        this.enterpriseId = enterpriseId;
+        this.pointBizType = bizType;
+        this.point = point;
+        initCommon(userId, title, operation, bizId);
+
+    }
+
+    /**
+     * 创建企业账户余额变动记录
+     **/
+    public void build(
+            Long enterpriseId,
+            Long userId,
+            String title,
+            String operation,
+            BigDecimal balance,
+            Integer bizType,
+            String bizId) {
+        this.enterpriseId = enterpriseId;
+        this.balanceBizType = bizType;
+        this.balance = balance;
+        initCommon(userId, title, operation, bizId);
+
+    }
+
+
+    /**
+     * 公共属性
+     **/
+    private void initCommon(Long userId,
+                            String title,
+                            String operation,
+                            String bizId) {
+        this.userId = userId;
+        this.title = title;
+        this.operation = operation;
+        this.bizId = bizId;
+
+    }
+}

+ 21 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/AccountRespDTO.java

@@ -0,0 +1,21 @@
+package com.citu.module.menduner.system.api.account;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description = "账户 DTO VO")
+public class AccountRespDTO {
+
+    @Schema(description = "积分")
+    private Integer point;
+
+    @Schema(description = "余额")
+    private BigDecimal balance;
+}

+ 87 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/EnterpriseAccountApi.java

@@ -0,0 +1,87 @@
+package com.citu.module.menduner.system.api.account;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.system.enums.ApiConstants;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.security.PermitAll;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@FeignClient(name = ApiConstants.NAME)
+@Tag(name = "RPC 服务 - 企业账户")
+public interface EnterpriseAccountApi {
+
+    String PREFIX = ApiConstants.PREFIX + "/enterprise-account";
+
+    @PostMapping(PREFIX + "/create")
+    @Operation(summary = "如果企业账户不存在,则创建")
+    @Parameters({
+            @Parameter(name = "enterpriseId", description = "企业编号", example = "1", required = true),
+            @Parameter(name = "userId", description = "企业编号", example = "1", required = true)
+    })
+    CommonResult<AccountRespDTO> createEnterpriseAccountIfAbsent(
+            @RequestParam("enterpriseId") Long enterpriseId,
+            @RequestParam("userId") Long userId
+    );
+
+
+    @PutMapping(PREFIX + "/point/update")
+    @Operation(summary = "更新企业的积分,则创建")
+    @Parameters({
+            @Parameter(name = "enterpriseId", description = "企业编号", example = "1", required = true),
+            @Parameter(name = "userId", description = "企业编号", example = "2", required = true),
+            @Parameter(name = "point", description = "积分", example = "2", required = true),
+    })
+    CommonResult<Boolean> updatePoint(
+            @RequestParam("enterpriseId") Long enterpriseId,
+            @RequestParam("userId") Long userId,
+            @RequestParam("point") Integer point
+    );
+
+    @PutMapping(PREFIX + "/balance/update")
+    @Operation(summary = "更新企业的余额,则创建")
+    @Parameters({
+            @Parameter(name = "enterpriseId", description = "企业编号", example = "1", required = true),
+            @Parameter(name = "userId", description = "企业编号", example = "2", required = true),
+            @Parameter(name = "balance", description = "余额", example = "2", required = true),
+    })
+    CommonResult<Boolean> updateBalance(
+            @RequestParam("enterpriseId") Long enterpriseId,
+            @RequestParam("userId") Long userId,
+            @RequestParam("balance") BigDecimal balance);
+
+    @PermitAll
+    @PostMapping(PREFIX + "/create/point/record")
+    @Operation(summary = "创建企业账户积分变动记录")
+    CommonResult<Boolean> createPointRecord(@RequestBody AccountRecordSaveReqDTO dto);
+
+    @PermitAll
+    @PostMapping(PREFIX + "/create/balance/record")
+    @Operation(summary = "创建企业账户余额变动记录")
+    CommonResult<Boolean> createBalanceRecord(@RequestBody AccountRecordSaveReqDTO dto);
+
+
+    @GetMapping(PREFIX + "/get/point/count")
+    @Operation(summary = "获取一段时间内的企业账户积分变动获得的数量")
+    @Parameters({
+            @Parameter(name = "enterpriseId", description = "企业号", example = "2", required = true),
+            @Parameter(name = "userId", description = "用户编号", example = "2", required = true),
+            @Parameter(name = "url", description = "事件地址", example = "2", required = false),
+            @Parameter(name = "startDate", description = "开始时间", example = "2", required = false),
+            @Parameter(name = "endDate", description = "结束时间", example = "2", required = false)
+    })
+    CommonResult<Integer> getPointCount(
+            @RequestParam("enterpriseId") Long enterpriseId,
+            @RequestParam("userId") Long userId,
+            @RequestParam(value = "url", required = false) String url,
+            @RequestParam(value = "startDate", required = false) LocalDateTime startDate,
+            @RequestParam(value = "endDate", required = false) LocalDateTime endDate);
+
+
+}

+ 73 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/api/account/UserAccountApi.java

@@ -0,0 +1,73 @@
+package com.citu.module.menduner.system.api.account;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.system.enums.ApiConstants;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.security.PermitAll;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@FeignClient(name = ApiConstants.NAME)
+@Tag(name = "RPC 服务 - 用户账户")
+public interface UserAccountApi {
+
+    String PREFIX = ApiConstants.PREFIX + "/user-account";
+
+    @PostMapping(PREFIX + "/create")
+    @Operation(summary = "如果用户账户不存在,则创建")
+    @Parameters({
+            @Parameter(name = "userId", description = "用户编号", example = "1", required = true)
+    })
+    CommonResult<AccountRespDTO> createUserAccountIfAbsent(@RequestParam("userId") Long userId);
+
+
+    @PutMapping(PREFIX + "/point/update")
+    @Operation(summary = "更新用户的积分,则创建")
+    @Parameters({
+            @Parameter(name = "userId", description = "用户编号", example = "2", required = true),
+            @Parameter(name = "point", description = "积分", example = "2", required = true),
+    })
+    CommonResult<Boolean> updatePoint(@RequestParam("userId") Long userId, @RequestParam("point") Integer point);
+
+    @PutMapping(PREFIX + "/balance/update")
+    @Operation(summary = "更新用户的余额,则创建")
+    @Parameters({
+            @Parameter(name = "userId", description = "用户编号", example = "2", required = true),
+            @Parameter(name = "balance", description = "余额", example = "2", required = true),
+    })
+    CommonResult<Boolean> updateBalance(@RequestParam("userId") Long userId,
+                                        @RequestParam("balance") BigDecimal balance);
+
+
+    @PermitAll
+    @PostMapping(PREFIX + "/create/point/record")
+    @Operation(summary = "创建用户账户积分变动记录")
+    CommonResult<Boolean> createPointRecord(@RequestBody AccountRecordSaveReqDTO dto);
+
+    @PermitAll
+    @PostMapping(PREFIX + "/create/balance/record")
+    @Operation(summary = "创建用户账户余额变动记录")
+    CommonResult<Boolean> createBalanceRecord(@RequestBody AccountRecordSaveReqDTO dto);
+
+
+    @GetMapping(PREFIX + "/get/point/count")
+    @Operation(summary = "获取一段时间内的用户账户积分变动获得的数量")
+    @Parameters({
+            @Parameter(name = "userId", description = "用户编号", example = "2", required = true),
+            @Parameter(name = "url", description = "事件地址", example = "2", required = false),
+            @Parameter(name = "startDate", description = "开始时间", example = "2", required = false),
+            @Parameter(name = "endDate", description = "结束时间", example = "2", required = false)
+    })
+    CommonResult<Integer> getPointCount(@RequestParam("userId") Long userId,
+                                        @RequestParam(value = "url", required = false) String url,
+                                        @RequestParam(value = "startDate", required = false) LocalDateTime startDate,
+                                        @RequestParam(value = "endDate", required = false) LocalDateTime endDate);
+
+
+}

+ 60 - 3
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -28,7 +28,7 @@ public interface ErrorCodeConstants {
 
 
     // ========== 人员信息-个人档案 1_100_001_000 ==========
-    ErrorCode MDE_USER_INFO_NOT_EXISTS = new ErrorCode(1_100_001_001, "人员信息-个人档案不存在");
+    ErrorCode MDE_USER_INFO_NOT_EXISTS = new ErrorCode(1_100_001_001, "个人档案不存在");
     ErrorCode MDE_PERSON_ADVANTAGE_NOT_EXISTS = new ErrorCode(1_100_001_002, "个人优势不能为空");
     ErrorCode MDE_PERSON_NAME_NOT_EXISTS = new ErrorCode(1_100_001_003, "真实姓名不能为空");
     ErrorCode MDE_PERSON_PHONE_NOT_EXISTS = new ErrorCode(1_100_001_004, "联系手机号不能为空");
@@ -159,7 +159,6 @@ public interface ErrorCodeConstants {
     ErrorCode MDE_AUTH_TOKEN_NOT_NULL = new ErrorCode(1_100_017_018, "访问令牌不能为空");
 
 
-
     // ========== 角色模块 1_100_018_000 ==========
     ErrorCode MDE_ROLE_NOT_EXISTS = new ErrorCode(1_100_018_001, "角色不存在");
     ErrorCode MDE_ROLE_NAME_DUPLICATE = new ErrorCode(1_100_018_002, "已经存在名为【{}】的角色");
@@ -240,6 +239,10 @@ public interface ErrorCodeConstants {
     ErrorCode MDE_JOB_ADVERTISED_USER_ID_NOT_NULL = new ErrorCode(1_100_025_005, "发布用户id不能为空");
     ErrorCode MDE_JOB_ADVERTISED_EXP_TYPE_NOT_NULL = new ErrorCode(1_100_025_006, "工作经验不能为空");
     ErrorCode MDE_JOB_ADVERTISED_EDU_TYPE_NOT_NULL = new ErrorCode(1_100_025_007, "学历要求不能为空");
+    ErrorCode MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH = new ErrorCode(1_100_025_008, "账户余额不足");
+    ErrorCode MDE_ENTERPRISE_ACCOUNT_POINT_NOT_ENOUGH = new ErrorCode(1_100_025_009, "账户积分不足");
+    ErrorCode MDE_JOB_ADVERTISED_BALANCE_UPDATE = new ErrorCode(1_100_025_010, "不能修改已发布职位赏金余额");
+    ErrorCode MDE_JOB_ADVERTISED_POINT_UPDATE = new ErrorCode(1_100_025_011, "不能修改已发布职位赏金积分");
 
 
     // ========== 企业招聘者浏览 1_100_026_000 ==========
@@ -313,8 +316,62 @@ public interface ErrorCodeConstants {
     // ========== 众聘-佣金比例 1_100_037_000 ==========
     ErrorCode HIRE_COMMISSION_RATIO_NOT_EXISTS = new ErrorCode(1_100_037_001, "佣金比例不存在");
     ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_NULL = new ErrorCode(1_100_037_002, "佣金比例不能为空");
-    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_LESS_THAN_ZERO = new ErrorCode(1_100_037_003, "佣金比例不能小于0");
+    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_LESS_THAN_ZERO =
+            new ErrorCode(1_100_037_003, "佣金比例不能小于0");
+    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_MORE_THAN_ONE =
+            new ErrorCode(1_100_037_004, "佣金比例合计不能小于或大于100%");
 
     // ========== 用户账户 1_100_038_000 ==========
     ErrorCode USER_ACCOUNT_NOT_EXISTS = new ErrorCode(1_100_038_001, "用户账户不存在");
+
+    // ========== 账户记录相关  1_100_039_000 ============
+    ErrorCode USER_NOT_EXISTS = new ErrorCode(1_100_039_001, "用户不存在");
+    ErrorCode USER_POINT_NOT_ENOUGH = new ErrorCode(1_100_039_002, "用户积分余额不足");
+    ErrorCode USER_POINT_CAN_NOT_BE_EMPTY = new ErrorCode(1_100_039_003, "变动积分不能为空");
+    ErrorCode USER_BALANCE_NOT_ENOUGH = new ErrorCode(1_100_039_004, "用户余额不足");
+    ErrorCode USER_BALANCE_CAN_NOT_BE_EMPTY = new ErrorCode(1_100_039_005, "变动余额不能为空");
+
+    // ========== 企业邀请码 1_100_040_000 ==========
+    ErrorCode ENTERPRISE_INVITE_NOT_EXISTS = new ErrorCode(1_100_040_001, "企业邀请码不存在");
+    ErrorCode ENTERPRISE_INVITE_ENTERPRISE_ID_NOT_NULL = new ErrorCode(1_100_040_002, "企业id不能为空");
+    ErrorCode ENTERPRISE_INVITE_USER_ID_NOT_NULL = new ErrorCode(1_100_040_003, "用户编号不能为空");
+    ErrorCode ENTERPRISE_INVITE_TYPE_NOT_NULL = new ErrorCode(1_100_040_004, "类型不能为空");
+    ErrorCode ENTERPRISE_INVITE_CODE_NOT_NULL = new ErrorCode(1_100_040_005, "邀请码不能为空");
+    ErrorCode ENTERPRISE_INVITE_INVALID_DAYS_NOT_NULL = new ErrorCode(1_100_040_006, "失效天数不能为空");
+
+    // ========== 企业邀请记录 1_100_041_000 ==========
+    ErrorCode ENTERPRISE_INVITE_RECORD_NOT_EXISTS = new ErrorCode(1_100_041_001, "企业邀请记录不存在");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_INVITE_ENTERPRISE_ID_NOT_NULL =
+            new ErrorCode(1_100_041_002, "受邀企业id不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_USER_ID_NOT_NULL =
+            new ErrorCode(1_100_041_003, "受邀用户编号不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_INVITE_ENTERPRISE_ID_NOT_NULL2 =
+            new ErrorCode(1_100_041_004, "邀请企业id不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_USER_ID_NOT_NULL2 =
+            new ErrorCode(1_100_041_005, "邀请用户编号不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_TYPE_NOT_NULL =
+            new ErrorCode(1_100_041_006, "类型不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_CODE_NOT_NULL =
+            new ErrorCode(1_100_041_007, "邀请码不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_NOT_ADMIN =
+            new ErrorCode(1_100_041_008, "不是企业管理员不能操作成为子公司");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_EXIST_PARENT =
+            new ErrorCode(1_100_041_009, "公司已存在所属上级,不能操作成为子公司");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_EXIST=
+            new ErrorCode(1_100_041_010, "已加入该企业不可重复操作");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_PERSON_INFO_NOT_COMPLETE =
+            new ErrorCode(1_100_041_011, "请先完善个人基本信息");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_EXIST_ENTERPRISE =
+            new ErrorCode(1_100_041_012, "无法加入相同的企业");
 }

+ 8 - 1
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/MathOperationEnum.java → menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/MathOperationEnum.java

@@ -1,8 +1,11 @@
-package com.citu.module.menduner.reward.enums;
+package com.citu.module.menduner.system.enums;
 
+import cn.hutool.core.util.EnumUtil;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Objects;
+
 /**
  * 数据操作符 0 + | 1 -
  **/
@@ -16,4 +19,8 @@ public enum MathOperationEnum {
     final String operator;
     final String remark;
 
+    public static MathOperationEnum from(String expression) {
+        return EnumUtil.getBy(MathOperationEnum.class,
+                e -> Objects.equals(expression, e.getExpression()));
+    }
 }

+ 22 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/AccountRecordTypeEnum.java

@@ -0,0 +1,22 @@
+package com.citu.module.menduner.system.enums.account;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 账户记录类型枚举
+ * (0 变动积分 | 1 变动余额)
+ *
+ * @author Rayson
+ */
+@AllArgsConstructor
+@Getter
+public enum AccountRecordTypeEnum {
+
+    POINT("0", "变动积分"),
+    BALANCE("1", "变动余额");
+
+    final String type;
+    final String name;
+
+}

+ 52 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/BalanceBizTypeEnum.java

@@ -0,0 +1,52 @@
+package com.citu.module.menduner.system.enums.account;
+
+import cn.hutool.core.util.EnumUtil;
+import com.citu.framework.common.core.IntArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * 余额的业务类型枚举
+ *
+ * @author Rayson
+ */
+@AllArgsConstructor
+@Getter
+public enum BalanceBizTypeEnum {
+
+    RECHARGE(1, "充值", "充值获得 {} 余额", true),
+    ADMIN(2, "管理员修改", "管理员修改 {} 余额", true),
+    PUBLISH(3, "职位发布", "发布职位,扣除 {} 余额", false),
+    PLATFORM_COMMISSION(4, "平台抽成", "平台抽取 {} ", true),
+    RECOMMENDED_POSITIONS(5, "推荐职位", "推荐职位,获得 {}", true),
+    DELIVERY_PERSON(6, "投递人", "投递人,获得 {}", true),
+    GIFT(7, "赠与", "赠与,获得 {}", true)
+    ;
+
+
+    /**
+     * 类型
+     */
+    private final Integer type;
+    /**
+     * 名字
+     */
+    private final String name;
+    /**
+     * 描述
+     */
+    private final String description;
+    /**
+     * 是否为扣减积分
+     */
+    private final boolean add;
+
+    public static BalanceBizTypeEnum from(Integer type) {
+        return EnumUtil.getBy(BalanceBizTypeEnum.class,
+                e -> Objects.equals(type, e.getType()));
+    }
+
+
+}

+ 53 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/PointBizTypeEnum.java

@@ -0,0 +1,53 @@
+package com.citu.module.menduner.system.enums.account;
+
+import cn.hutool.core.util.EnumUtil;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * 积分的业务类型枚举
+ *
+ * @author Rayson
+ */
+@AllArgsConstructor
+@Getter
+public enum PointBizTypeEnum {
+
+    RECHARGE(1, "充值", "充值获得 {} 余额", true),
+    ADMIN(2, "管理员修改", "管理员修改 {} 积分", true),
+    PUBLISH(3, "职位发布", "发布职位,扣除 {} 积分", false),
+    PLATFORM_COMMISSION(4, "平台抽成", "平台抽取 {} ", true),
+    RECOMMENDED_POSITIONS(5, "推荐职位", "推荐职位,获得 {}", true),
+    DELIVERY_PERSON(6, "投递人", "投递人,获得 {}", true),
+    GIFT(7, "赠与", "赠与,获得 {}", true),
+    SIGN(98, "签到", "签到获得 {} 积分", true),
+    EVENT(99, "事件跟踪", "访问[{}],{}{} 积分", true),
+    ;
+
+    /**
+     * 类型
+     */
+    private final Integer type;
+    /**
+     * 名字
+     */
+    private final String name;
+    /**
+     * 描述
+     */
+    private final String description;
+    /**
+     * 是否为扣减积分
+     */
+    private final boolean add;
+
+    public static PointBizTypeEnum from(Integer type) {
+        return EnumUtil.getBy(PointBizTypeEnum.class,
+                e -> Objects.equals(type, e.getType()));
+    }
+
+
+}

+ 1 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/cv/JobCvRelStatusEnum.java

@@ -14,6 +14,7 @@ public enum JobCvRelStatusEnum {
     INVITE("2", "已邀约"),
     OFFER("3", "已发offer"),
     ENTRY("4", "已入职"),
+    SETTLEMENT("5", "已结算"),
     ELIMINATE("99", "不合适");
 
     private final String status;

+ 0 - 23
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/hire/HireJobCvRelStatusEnum.java

@@ -1,23 +0,0 @@
-package com.citu.module.menduner.system.enums.hire;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 众聘简历投递状态(0 已报名 | 1 已查看 | 2 已邀约 | 3 已发offer | 4 已入职 | 5 已结算 | 99 不合适 已淘汰)
- **/
-@Getter
-@AllArgsConstructor
-public enum HireJobCvRelStatusEnum {
-    NEW("0", "已报名"),
-    LOOK("1", "已查看"),
-    INVITE("2", "已邀约"),
-    OFFER("3", "已发offer"),
-    ENTRY("4", "已入职"),
-    SETTLEMENT("5", "已结算"),
-    ELIMINATE("99", "不合适");
-
-    private final String status;
-
-    private final String name;
-}

+ 21 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/invite/EnterpriseInviteTypeEnum.java

@@ -0,0 +1,21 @@
+package com.citu.module.menduner.system.enums.invite;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 企业邀请 0邀请同事 1 邀请子公司
+ **/
+@Getter
+@AllArgsConstructor
+public enum  EnterpriseInviteTypeEnum {
+
+
+    COLLEAGUE("0", "邀请同事"),
+    SUBSIDIARY("1", "邀请子公司"),
+    ;
+
+    private String type;
+    private String desc;
+
+}

+ 4 - 5
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/permission/MdeRoleCodeEnum.java

@@ -11,9 +11,8 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum MdeRoleCodeEnum {
 
-    SUPER_ADMIN("super_admin", "超级管理员"),
-    TENANT_ADMIN("tenant_admin", "租户管理员"),
-    MDE_ADMIN("mde_admin", "menduner 管理员"),
+
+    MDE_ADMIN("menduner_admin", "menduner 管理员"),
     ;
 
     /**
@@ -25,8 +24,8 @@ public enum MdeRoleCodeEnum {
      */
     private final String name;
 
-    public static boolean isSuperAdmin(String code) {
-        return ObjectUtils.equalsAny(code, SUPER_ADMIN.getCode());
+    public static boolean isAdmin(String code) {
+        return ObjectUtils.equalsAny(code, MDE_ADMIN.getCode());
     }
 
 }

+ 6 - 0
menduner/menduner-system-biz/pom.xml

@@ -31,6 +31,12 @@
             <version>${revision}</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.citu</groupId>
+            <artifactId>citu-spring-boot-starter-es</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <dependency>
             <groupId>com.xingyuv</groupId>
             <artifactId>spring-boot-starter-captcha-plus</artifactId> <!-- 验证码,一般用于登录使用 -->

+ 82 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/api/account/EnterpriseAccountApiImpl.java

@@ -0,0 +1,82 @@
+package com.citu.module.menduner.system.api.account;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseAccountDO;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.BalanceBizTypeEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
+import com.citu.module.menduner.system.service.enterprise.account.EnterpriseAccountService;
+import com.citu.module.menduner.system.service.record.EnterpriseAccountRecordService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@RestController // 提供 RESTful API 接口,给 Feign 调用
+@Validated
+public class EnterpriseAccountApiImpl implements EnterpriseAccountApi {
+
+    @Resource
+    private EnterpriseAccountService service;
+
+    @Resource
+    private EnterpriseAccountRecordService accountRecordService;
+
+    @Override
+    public CommonResult<AccountRespDTO> createEnterpriseAccountIfAbsent(Long enterpriseId, Long userId) {
+        EnterpriseAccountDO accountDO = service.createEnterpriseAccountIfAbsent(enterpriseId, userId);
+        AccountRespDTO dto = new AccountRespDTO();
+        dto.setPoint(accountDO.getPoint());
+        dto.setBalance(accountDO.getBalance());
+        return success(dto);
+    }
+
+    @Override
+    public CommonResult<Boolean> updatePoint(Long enterpriseId, Long userId, Integer point) {
+        return success(service.updatePoint(enterpriseId, userId, point));
+    }
+
+    @Override
+    public CommonResult<Boolean> updateBalance(Long enterpriseId, Long userId, BigDecimal balance) {
+        return success(service.updateBalance(enterpriseId, userId, balance));
+    }
+
+    @Override
+    public CommonResult<Boolean> createPointRecord(AccountRecordSaveReqDTO dto) {
+        accountRecordService.createPointRecord(dto.getEnterpriseId(),
+                dto.getUserId(),
+                dto.getTitle(),
+                MathOperationEnum.from(dto.getOperation()),
+                dto.getPoint(),
+                PointBizTypeEnum.from(dto.getPointBizType()),
+                dto.getBizId()
+        );
+        return success(true);
+    }
+
+    @Override
+    public CommonResult<Boolean> createBalanceRecord(AccountRecordSaveReqDTO dto) {
+        accountRecordService.createBalanceRecord(dto.getEnterpriseId(),
+                dto.getUserId(),
+                dto.getTitle(),
+                MathOperationEnum.from(dto.getOperation()),
+                dto.getBalance(),
+                BalanceBizTypeEnum.from(dto.getBalanceBizType()),
+                dto.getBizId()
+        );
+        return success(true);
+    }
+
+    @Override
+    public CommonResult<Integer> getPointCount(Long enterpriseId,
+                                               Long userId,
+                                               String url,
+                                               LocalDateTime startDate,
+                                               LocalDateTime endDate) {
+        return success(accountRecordService.getPointCount(enterpriseId, userId, url, startDate, endDate));
+    }
+}

+ 82 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/api/account/UserAccountApiImpl.java

@@ -0,0 +1,82 @@
+package com.citu.module.menduner.system.api.account;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.system.dal.dataobject.user.UserAccountDO;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.BalanceBizTypeEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
+import com.citu.module.menduner.system.service.record.UserAccountRecordService;
+import com.citu.module.menduner.system.service.user.UserAccountService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@RestController // 提供 RESTful API 接口,给 Feign 调用
+@Validated
+public class UserAccountApiImpl implements UserAccountApi {
+
+    @Resource
+    private UserAccountService service;
+
+    @Resource
+    private UserAccountRecordService accountRecordService;
+
+    @Override
+    public CommonResult<AccountRespDTO> createUserAccountIfAbsent(Long userId) {
+        UserAccountDO userAccountDO = service.createUserAccountIfAbsent(userId);
+        AccountRespDTO dto = new AccountRespDTO();
+        dto.setPoint(userAccountDO.getPoint());
+        dto.setBalance(userAccountDO.getBalance());
+        return success(dto);
+    }
+
+    @Override
+    public CommonResult<Boolean> updatePoint(Long userId, Integer point) {
+        return success(service.updatePoint(userId, point));
+    }
+
+    @Override
+    public CommonResult<Boolean> updateBalance(Long userId, BigDecimal balance) {
+        return success(service.updateBalance(userId, balance));
+    }
+
+    @Override
+    public CommonResult<Boolean> createPointRecord(AccountRecordSaveReqDTO dto) {
+        accountRecordService.createPointRecord(
+                dto.getUserId(),
+                dto.getUrl(),
+                dto.getTitle(),
+                MathOperationEnum.from(dto.getOperation()),
+                dto.getPoint(),
+                PointBizTypeEnum.from(dto.getPointBizType()),
+                dto.getBizId()
+        );
+        return success(true);
+    }
+
+    @Override
+    public CommonResult<Boolean> createBalanceRecord(AccountRecordSaveReqDTO dto) {
+        accountRecordService.createBalanceRecord(
+                dto.getUserId(),
+                dto.getTitle(),
+                MathOperationEnum.from(dto.getOperation()),
+                dto.getBalance(),
+                BalanceBizTypeEnum.from(dto.getBalanceBizType()),
+                dto.getBizId()
+        );
+        return success(true);
+    }
+
+    @Override
+    public CommonResult<Integer> getPointCount(Long userId,
+                                               String url,
+                                               LocalDateTime startDate,
+                                               LocalDateTime endDate) {
+        return success(accountRecordService.getPointCount(userId, url, startDate, endDate));
+    }
+}

+ 104 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/EnterpriseAccountController.java

@@ -0,0 +1,104 @@
+package com.citu.module.menduner.system.controller.admin.enterprise;
+
+
+import com.citu.framework.apilog.core.annotation.ApiAccessLog;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.admin.enterprise.vo.EnterpriseAccountPageRespVO;
+import com.citu.module.menduner.system.controller.base.account.AccountBalanceUpdateReqVO;
+import com.citu.module.menduner.system.controller.base.account.AccountPointUpdateReqVO;
+import com.citu.module.menduner.system.controller.base.enterprise.account.EnterpriseAccountPageReqVO;
+import com.citu.module.menduner.system.controller.base.enterprise.account.EnterpriseAccountRespVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseAccountDO;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.BalanceBizTypeEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
+import com.citu.module.menduner.system.service.enterprise.account.EnterpriseAccountService;
+import com.citu.module.menduner.system.service.record.EnterpriseAccountRecordService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 企业账户")
+@RestController
+@RequestMapping("/menduner/system/enterprise-account")
+@Validated
+public class EnterpriseAccountController {
+
+    @Resource
+    private EnterpriseAccountService enterpriseAccountService;
+
+    @Resource
+    private EnterpriseAccountRecordService service;
+    
+    @GetMapping("/page")
+    @Operation(summary = "获得企业账户分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-account-record:query')")
+    public CommonResult<PageResult<EnterpriseAccountPageRespVO>> getEnterpriseAccountPage
+            (@Valid EnterpriseAccountPageReqVO pageReqVO) {
+        PageResult<EnterpriseAccountPageRespVO> pageResult = enterpriseAccountService.page2(pageReqVO);
+        return success(pageResult);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出企业账户 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-account:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportEnterpriseAccountExcel(@Valid EnterpriseAccountPageReqVO pageReqVO,
+                                             HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EnterpriseAccountDO> list = enterpriseAccountService.page(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "企业账户.xls", "数据", EnterpriseAccountRespVO.class,
+                BeanUtils.toBean(list, EnterpriseAccountRespVO.class));
+    }
+
+ 
+
+    @PutMapping("/update-point")
+    @Operation(summary = "修改账户的积分")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-point:update')")
+    public CommonResult<Boolean> updateUserPoint(@Valid @RequestBody AccountPointUpdateReqVO updateReqVO) {
+        service.createPointRecord(
+                updateReqVO.getEnterpriseId(),
+                updateReqVO.getUserId(),
+                null,
+                MathOperationEnum.ADD.getOperator().equals(updateReqVO.getOperation())
+                        ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT,
+                updateReqVO.getPoint(),
+                PointBizTypeEnum.ADMIN,
+                String.valueOf(updateReqVO.getUserId()));
+        return success(true);
+    }
+
+    @PutMapping("/update-balance")
+    @Operation(summary = "修改账户余额")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-balance:update')")
+    public CommonResult<Boolean> updateBalance(@Valid @RequestBody AccountBalanceUpdateReqVO updateReqVO) {
+        service.createBalanceRecord(
+                updateReqVO.getEnterpriseId(),
+                updateReqVO.getUserId(),
+                null,
+                MathOperationEnum.ADD.getOperator().equals(updateReqVO.getOperation())
+                        ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT,
+                updateReqVO.getBalance(),
+                BalanceBizTypeEnum.ADMIN,
+                String.valueOf(updateReqVO.getUserId()));
+        return success(true);
+    }
+
+}

+ 8 - 8
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/EnterpriseUserLookController.java

@@ -27,7 +27,7 @@ import java.util.List;
 import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static com.citu.framework.common.pojo.CommonResult.success;
 
-@Tag(name = "管理后台 - 门墩儿 - 企业招聘者浏览")
+@Tag(name = "管理后台 -  企业招聘者浏览")
 @RestController
 @RequestMapping("/menduner/system/enterprise-user-look")
 @Validated
@@ -37,14 +37,14 @@ public class EnterpriseUserLookController {
     private EnterpriseUserLookService enterpriseUserLookService;
 
     @PostMapping("/create")
-    @Operation(summary = "创建门墩儿 - 企业招聘者浏览")
+    @Operation(summary = "创建 企业招聘者浏览")
     @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-user-look:create')")
     public CommonResult<Long> createEnterpriseUserLook(@Valid @RequestBody EnterpriseUserLookSaveReqVO createReqVO) {
         return success(enterpriseUserLookService.createEnterpriseUserLook(createReqVO));
     }
 
     @PutMapping("/update")
-    @Operation(summary = "更新门墩儿 - 企业招聘者浏览")
+    @Operation(summary = "更新 企业招聘者浏览")
     @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-user-look:update')")
     public CommonResult<Boolean> updateEnterpriseUserLook(@Valid @RequestBody EnterpriseUserLookSaveReqVO updateReqVO) {
         enterpriseUserLookService.updateEnterpriseUserLook(updateReqVO);
@@ -52,7 +52,7 @@ public class EnterpriseUserLookController {
     }
 
     @DeleteMapping("/delete")
-    @Operation(summary = "删除门墩儿 - 企业招聘者浏览")
+    @Operation(summary = "删除 企业招聘者浏览")
     @Parameter(name = "id", description = "编号", required = true)
     @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-user-look:delete')")
     public CommonResult<Boolean> deleteEnterpriseUserLook(@RequestParam("id") Long id) {
@@ -61,7 +61,7 @@ public class EnterpriseUserLookController {
     }
 
     @GetMapping("/get")
-    @Operation(summary = "获得门墩儿 - 企业招聘者浏览")
+    @Operation(summary = "获得 企业招聘者浏览")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-user-look:query')")
     public CommonResult<EnterpriseUserLookRespVO> getEnterpriseUserLook(@RequestParam("id") Long id) {
@@ -70,7 +70,7 @@ public class EnterpriseUserLookController {
     }
 
     @GetMapping("/page")
-    @Operation(summary = "获得门墩儿 - 企业招聘者浏览分页")
+    @Operation(summary = "获得 企业招聘者浏览分页")
     @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-user-look:query')")
     public CommonResult<PageResult<EnterpriseUserLookRespVO>> getEnterpriseUserLookPage(@Valid EnterpriseUserLookPageReqVO pageReqVO) {
         PageResult<EnterpriseUserLookDO> pageResult = enterpriseUserLookService.getEnterpriseUserLookPage(pageReqVO);
@@ -78,7 +78,7 @@ public class EnterpriseUserLookController {
     }
 
     @GetMapping("/export-excel")
-    @Operation(summary = "导出门墩儿 - 企业招聘者浏览 Excel")
+    @Operation(summary = "导出 企业招聘者浏览 Excel")
     @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-user-look:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportEnterpriseUserLookExcel(@Valid EnterpriseUserLookPageReqVO pageReqVO,
@@ -86,7 +86,7 @@ public class EnterpriseUserLookController {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<EnterpriseUserLookDO> list = enterpriseUserLookService.getEnterpriseUserLookPage(pageReqVO).getList();
         // 导出 Excel
-        ExcelUtils.write(response, "门墩儿 - 企业招聘者浏览.xls", "数据", EnterpriseUserLookRespVO.class,
+        ExcelUtils.write(response, " 企业招聘者浏览.xls", "数据", EnterpriseUserLookRespVO.class,
                 BeanUtils.toBean(list, EnterpriseUserLookRespVO.class));
     }
 

+ 31 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/vo/EnterpriseAccountPageRespVO.java

@@ -0,0 +1,31 @@
+package com.citu.module.menduner.system.controller.admin.enterprise.vo;
+
+import com.citu.module.menduner.system.controller.base.enterprise.account.EnterpriseAccountRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 企业账户分页 Response VO")
+@Data
+public class EnterpriseAccountPageRespVO extends EnterpriseAccountRespVO {
+
+    // ========== 企业信息 ==========
+    @Schema(description = "企业全称", example = "广州xx科技")
+    private String enterpriseName;
+
+    @Schema(description = "企业别称", example = "xx科技")
+    private String anotherName;
+
+    @Schema(description = "logo图片地址", example = "https://www.iocoder.cn")
+    private String logoUrl;
+
+    // ========== 用户信息 ==========
+
+    @Schema(description = "名称", example = "x女士")
+    private String userName;
+
+    @Schema(description = "用户性别")
+    private String sex;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+}

+ 14 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/hire/HireCommissionRatioController.java

@@ -20,6 +20,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.annotation.security.PermitAll;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
@@ -61,15 +62,24 @@ public class HireCommissionRatioController {
         return success(true);
     }
 
+
+    @PermitAll
     @GetMapping("/get")
     @Operation(summary = "获得众聘-佣金比例")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-commission-ratio:query')")
-    public CommonResult<HireCommissionRatioRespVO> getHireCommissionRatio(@RequestParam("id") Long id) {
-        HireCommissionRatioDO hireCommissionRatio = hireCommissionRatioService.getHireCommissionRatio(id);
+    // @PreAuthorize("@ss.hasPermission('menduner:system:hire-commission-ratio:query')")
+    public CommonResult<HireCommissionRatioRespVO> get() {
+        HireCommissionRatioDO hireCommissionRatio = hireCommissionRatioService.get();
         return success(BeanUtils.toBean(hireCommissionRatio, HireCommissionRatioRespVO.class));
     }
 
+    @PostMapping("/save")
+    @Operation(summary = "保存众聘-佣金比例")
+    @PreAuthorize("@ss.hasPermission('menduner:system:hire-commission-ratio:save')")
+    public CommonResult<Boolean> save(@Valid @RequestBody HireCommissionRatioSaveReqVO createReqVO) {
+        hireCommissionRatioService.save(createReqVO);
+        return success(true);
+    }
+
     @GetMapping("/page")
     @Operation(summary = "获得众聘-佣金比例分页")
     @PreAuthorize("@ss.hasPermission('menduner:system:hire-commission-ratio:query')")

+ 0 - 94
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/hire/HireJobCvRelController.java

@@ -1,94 +0,0 @@
-package com.citu.module.menduner.system.controller.admin.hire;
-
-
-import com.citu.framework.apilog.core.annotation.ApiAccessLog;
-import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.common.pojo.PageParam;
-import com.citu.framework.common.pojo.PageResult;
-import com.citu.framework.common.util.object.BeanUtils;
-import com.citu.framework.excel.core.util.ExcelUtils;
-import com.citu.module.menduner.system.controller.base.hire.HireJobCvRelPageReqVO;
-import com.citu.module.menduner.system.controller.base.hire.HireJobCvRelRespVO;
-import com.citu.module.menduner.system.controller.base.hire.HireJobCvRelSaveReqVO;
-import com.citu.module.menduner.system.dal.dataobject.hire.HireJobCvRelDO;
-import com.citu.module.menduner.system.service.hire.HireJobCvRelService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.List;
-
-import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
-import static com.citu.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - 众聘-简历投递")
-@RestController
-@RequestMapping("/menduner/system/hire-job-cv-rel")
-@Validated
-public class HireJobCvRelController {
-
-    @Resource
-    private HireJobCvRelService hireJobCvRelService;
-
-    @PostMapping("/create")
-    @Operation(summary = "创建众聘-简历投递")
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-job-cv-rel:create')")
-    public CommonResult<Long> createHireJobCvRel(@Valid @RequestBody HireJobCvRelSaveReqVO createReqVO) {
-        return success(hireJobCvRelService.createHireJobCvRel(createReqVO));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新众聘-简历投递")
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-job-cv-rel:update')")
-    public CommonResult<Boolean> updateHireJobCvRel(@Valid @RequestBody HireJobCvRelSaveReqVO updateReqVO) {
-        hireJobCvRelService.updateHireJobCvRel(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除众聘-简历投递")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-job-cv-rel:delete')")
-    public CommonResult<Boolean> deleteHireJobCvRel(@RequestParam("id") Long id) {
-        hireJobCvRelService.deleteHireJobCvRel(id);
-        return success(true);
-    }
-
-    @GetMapping("/get")
-    @Operation(summary = "获得众聘-简历投递")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-job-cv-rel:query')")
-    public CommonResult<HireJobCvRelRespVO> getHireJobCvRel(@RequestParam("id") Long id) {
-        HireJobCvRelDO hireJobCvRel = hireJobCvRelService.getHireJobCvRel(id);
-        return success(BeanUtils.toBean(hireJobCvRel, HireJobCvRelRespVO.class));
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得众聘-简历投递分页")
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-job-cv-rel:query')")
-    public CommonResult<PageResult<HireJobCvRelRespVO>> getHireJobCvRelPage(@Valid HireJobCvRelPageReqVO pageReqVO) {
-        PageResult<HireJobCvRelDO> pageResult = hireJobCvRelService.getHireJobCvRelPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, HireJobCvRelRespVO.class));
-    }
-
-    @GetMapping("/export-excel")
-    @Operation(summary = "导出众聘-简历投递 Excel")
-    @PreAuthorize("@ss.hasPermission('menduner:system:hire-job-cv-rel:export')")
-    @ApiAccessLog(operateType = EXPORT)
-    public void exportHireJobCvRelExcel(@Valid HireJobCvRelPageReqVO pageReqVO,
-                                        HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<HireJobCvRelDO> list = hireJobCvRelService.getHireJobCvRelPage(pageReqVO).getList();
-        // 导出 Excel
-        ExcelUtils.write(response, "众聘-简历投递.xls", "数据", HireJobCvRelRespVO.class,
-                BeanUtils.toBean(list, HireJobCvRelRespVO.class));
-    }
-
-}

+ 94 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteController.java

@@ -0,0 +1,94 @@
+package com.citu.module.menduner.system.controller.admin.invite;
+
+
+import com.citu.framework.apilog.core.annotation.ApiAccessLog;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInvitePageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRespVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteDO;
+import com.citu.module.menduner.system.service.invite.EnterpriseInviteService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 企业邀请码")
+@RestController
+@RequestMapping("/menduner/system/enterprise-invite")
+@Validated
+public class EnterpriseInviteController {
+
+    @Resource
+    private EnterpriseInviteService enterpriseInviteService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建企业邀请码")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:create')")
+    public CommonResult<Long> createEnterpriseInvite(@Valid @RequestBody EnterpriseInviteSaveReqVO createReqVO) {
+        return success(enterpriseInviteService.createEnterpriseInvite(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新企业邀请码")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:update')")
+    public CommonResult<Boolean> updateEnterpriseInvite(@Valid @RequestBody EnterpriseInviteSaveReqVO updateReqVO) {
+        enterpriseInviteService.updateEnterpriseInvite(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除企业邀请码")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:delete')")
+    public CommonResult<Boolean> deleteEnterpriseInvite(@RequestParam("id") Long id) {
+        enterpriseInviteService.deleteEnterpriseInvite(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得企业邀请码")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:query')")
+    public CommonResult<EnterpriseInviteRespVO> getEnterpriseInvite(@RequestParam("id") Long id) {
+        EnterpriseInviteDO enterpriseInvite = enterpriseInviteService.getEnterpriseInvite(id);
+        return success(BeanUtils.toBean(enterpriseInvite, EnterpriseInviteRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得企业邀请码分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:query')")
+    public CommonResult<PageResult<EnterpriseInviteRespVO>> getEnterpriseInvitePage(@Valid EnterpriseInvitePageReqVO pageReqVO) {
+        PageResult<EnterpriseInviteDO> pageResult = enterpriseInviteService.getEnterpriseInvitePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, EnterpriseInviteRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出企业邀请码 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportEnterpriseInviteExcel(@Valid EnterpriseInvitePageReqVO pageReqVO,
+                                            HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EnterpriseInviteDO> list = enterpriseInviteService.getEnterpriseInvitePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "企业邀请码.xls", "数据", EnterpriseInviteRespVO.class,
+                BeanUtils.toBean(list, EnterpriseInviteRespVO.class));
+    }
+
+}

+ 93 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteRecordController.java

@@ -0,0 +1,93 @@
+package com.citu.module.menduner.system.controller.admin.invite;
+
+import com.citu.framework.apilog.core.annotation.ApiAccessLog;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordRespVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteRecordDO;
+import com.citu.module.menduner.system.service.invite.EnterpriseInviteRecordService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 企业邀请记录")
+@RestController
+@RequestMapping("/menduner/system/enterprise-invite-record")
+@Validated
+public class EnterpriseInviteRecordController {
+
+    @Resource
+    private EnterpriseInviteRecordService enterpriseInviteRecordService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建企业邀请记录")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:create')")
+    public CommonResult<Long> createEnterpriseInviteRecord(@Valid @RequestBody EnterpriseInviteRecordSaveReqVO createReqVO) {
+        return success(enterpriseInviteRecordService.createEnterpriseInviteRecord(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新企业邀请记录")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:update')")
+    public CommonResult<Boolean> updateEnterpriseInviteRecord(@Valid @RequestBody EnterpriseInviteRecordSaveReqVO updateReqVO) {
+        enterpriseInviteRecordService.updateEnterpriseInviteRecord(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除企业邀请记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:delete')")
+    public CommonResult<Boolean> deleteEnterpriseInviteRecord(@RequestParam("id") Long id) {
+        enterpriseInviteRecordService.deleteEnterpriseInviteRecord(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得企业邀请记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:query')")
+    public CommonResult<EnterpriseInviteRecordRespVO> getEnterpriseInviteRecord(@RequestParam("id") Long id) {
+        EnterpriseInviteRecordDO enterpriseInviteRecord = enterpriseInviteRecordService.getEnterpriseInviteRecord(id);
+        return success(BeanUtils.toBean(enterpriseInviteRecord, EnterpriseInviteRecordRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得企业邀请记录分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:query')")
+    public CommonResult<PageResult<EnterpriseInviteRecordRespVO>> getEnterpriseInviteRecordPage(@Valid EnterpriseInviteRecordPageReqVO pageReqVO) {
+        PageResult<EnterpriseInviteRecordDO> pageResult = enterpriseInviteRecordService.getEnterpriseInviteRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, EnterpriseInviteRecordRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出企业邀请记录 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportEnterpriseInviteRecordExcel(@Valid EnterpriseInviteRecordPageReqVO pageReqVO,
+                                                  HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EnterpriseInviteRecordDO> list = enterpriseInviteRecordService.getEnterpriseInviteRecordPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "企业邀请记录.xls", "数据", EnterpriseInviteRecordRespVO.class,
+                BeanUtils.toBean(list, EnterpriseInviteRecordRespVO.class));
+    }
+
+}

+ 45 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/record/EnterpriseAccountRecordController.java

@@ -0,0 +1,45 @@
+package com.citu.module.menduner.system.controller.admin.record;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.account.record.EnterpriseAccountRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.account.record.EnterpriseAccountRecordRespVO;
+
+import com.citu.module.menduner.system.convert.EnterpriseAccountRecordConvert;
+import com.citu.module.menduner.system.dal.dataobject.record.EnterpriseAccountRecordDO;
+import com.citu.module.menduner.system.service.record.EnterpriseAccountRecordService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 企业账户变动记录")
+@RestController
+@RequestMapping("/menduner/system/enterprise/account/record")
+@Validated
+public class EnterpriseAccountRecordController {
+
+    @Resource
+    private EnterpriseAccountRecordService service;
+
+    @GetMapping("/page")
+    @Operation(summary = "分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-account-record:query')")
+    public CommonResult<PageResult<EnterpriseAccountRecordRespVO>> page
+            (@Valid EnterpriseAccountRecordPageReqVO pageVO) {
+        // 执行分页查询
+        PageResult<EnterpriseAccountRecordDO> pageResult = service.page(pageVO);
+        return success(EnterpriseAccountRecordConvert.INSTANCE.convertPage(pageResult));
+    }
+
+
+
+}

+ 43 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/record/UserAccountRecordController.java

@@ -0,0 +1,43 @@
+package com.citu.module.menduner.system.controller.admin.record;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.account.record.UserAccountRecordRespVO;
+import com.citu.module.menduner.system.controller.base.account.record.UserAccountRecordPageReqVO;
+import com.citu.module.menduner.system.convert.UserAccountRecordConvert;
+import com.citu.module.menduner.system.dal.dataobject.record.UserAccountRecordDO;
+import com.citu.module.menduner.system.service.record.UserAccountRecordService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 用户账户变动记录")
+@RestController
+@RequestMapping("/menduner/system/user/account/record")
+@Validated
+public class UserAccountRecordController {
+
+    @Resource
+    private UserAccountRecordService accountRecordService;
+
+    @GetMapping("/page")
+    @Operation(summary = "分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:user-account-record:query')")
+    public CommonResult<PageResult<UserAccountRecordRespVO>> page
+            (@Valid UserAccountRecordPageReqVO pageVO) {
+        // 执行分页查询
+        PageResult<UserAccountRecordDO> pageResult = accountRecordService.page(pageVO);
+        return success(UserAccountRecordConvert.INSTANCE.convertPage(pageResult));
+    }
+
+
+}

+ 46 - 40
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/user/UserAccountController.java

@@ -7,13 +7,18 @@ import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.admin.user.vo.UserAccountPageRespVO;
+import com.citu.module.menduner.system.controller.base.account.AccountBalanceUpdateReqVO;
+import com.citu.module.menduner.system.controller.base.account.AccountPointUpdateReqVO;
 import com.citu.module.menduner.system.controller.base.user.account.UserAccountPageReqVO;
 import com.citu.module.menduner.system.controller.base.user.account.UserAccountRespVO;
-import com.citu.module.menduner.system.controller.base.user.account.UserAccountSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.user.UserAccountDO;
+import com.citu.module.menduner.system.enums.MathOperationEnum;
+import com.citu.module.menduner.system.enums.account.BalanceBizTypeEnum;
+import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
+import com.citu.module.menduner.system.service.record.UserAccountRecordService;
 import com.citu.module.menduner.system.service.user.UserAccountService;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -36,46 +41,15 @@ public class UserAccountController {
 
     @Resource
     private UserAccountService userAccountService;
-
-    @PostMapping("/create")
-    @Operation(summary = "创建用户账户")
-    @PreAuthorize("@ss.hasPermission('menduner:system:user-account:create')")
-    public CommonResult<Long> createUserAccount(@Valid @RequestBody UserAccountSaveReqVO createReqVO) {
-        return success(userAccountService.createUserAccount(createReqVO));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新用户账户")
-    @PreAuthorize("@ss.hasPermission('menduner:system:user-account:update')")
-    public CommonResult<Boolean> updateUserAccount(@Valid @RequestBody UserAccountSaveReqVO updateReqVO) {
-        userAccountService.updateUserAccount(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除用户账户")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('menduner:system:user-account:delete')")
-    public CommonResult<Boolean> deleteUserAccount(@RequestParam("id") Long id) {
-        userAccountService.deleteUserAccount(id);
-        return success(true);
-    }
-
-    @GetMapping("/get")
-    @Operation(summary = "获得用户账户")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('menduner:system:user-account:query')")
-    public CommonResult<UserAccountRespVO> getUserAccount(@RequestParam("id") Long id) {
-        UserAccountDO userAccount = userAccountService.getUserAccount(id);
-        return success(BeanUtils.toBean(userAccount, UserAccountRespVO.class));
-    }
+    @Resource
+    private UserAccountRecordService accountRecordService;
 
     @GetMapping("/page")
     @Operation(summary = "获得用户账户分页")
-    @PreAuthorize("@ss.hasPermission('menduner:system:user-account:query')")
-    public CommonResult<PageResult<UserAccountRespVO>> getUserAccountPage(@Valid UserAccountPageReqVO pageReqVO) {
-        PageResult<UserAccountDO> pageResult = userAccountService.getUserAccountPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, UserAccountRespVO.class));
+    @PreAuthorize("@ss.hasPermission('menduner:system:user-account-record:query')")
+    public CommonResult<PageResult<UserAccountPageRespVO>> getUserAccountPage(@Valid UserAccountPageReqVO pageReqVO) {
+        PageResult<UserAccountPageRespVO> pageResult = userAccountService.page2(pageReqVO);
+        return success(pageResult);
     }
 
     @GetMapping("/export-excel")
@@ -85,10 +59,42 @@ public class UserAccountController {
     public void exportUserAccountExcel(@Valid UserAccountPageReqVO pageReqVO,
                                        HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<UserAccountDO> list = userAccountService.getUserAccountPage(pageReqVO).getList();
+        List<UserAccountDO> list = userAccountService.page(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "用户账户.xls", "数据", UserAccountRespVO.class,
                 BeanUtils.toBean(list, UserAccountRespVO.class));
     }
 
+
+
+
+    @PutMapping("/update-point")
+    @Operation(summary = "修改账户积分")
+    @PreAuthorize("@ss.hasPermission('menduner:system:user-point:update')")
+    public CommonResult<Boolean> updatePoint(@Valid @RequestBody AccountPointUpdateReqVO updateReqVO) {
+        accountRecordService.createPointRecord(updateReqVO.getUserId(),
+                null,
+                null,
+                MathOperationEnum.ADD.getOperator().equals(updateReqVO.getOperation())
+                        ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT,
+                updateReqVO.getPoint(),
+                PointBizTypeEnum.ADMIN,
+                String.valueOf(updateReqVO.getUserId()));
+        return success(true);
+    }
+
+    @PutMapping("/update-balance")
+    @Operation(summary = "修改账户余额")
+    @PreAuthorize("@ss.hasPermission('menduner:system:user-balance:update')")
+    public CommonResult<Boolean> updateBalance(@Valid @RequestBody AccountBalanceUpdateReqVO updateReqVO) {
+        accountRecordService.createBalanceRecord(updateReqVO.getUserId(),
+                null,
+                MathOperationEnum.ADD.getOperator().equals(updateReqVO.getOperation())
+                        ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT,
+                updateReqVO.getBalance(),
+                BalanceBizTypeEnum.ADMIN,
+                String.valueOf(updateReqVO.getUserId()));
+        return success(true);
+    }
+
 }

+ 28 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/user/vo/UserAccountPageRespVO.java

@@ -0,0 +1,28 @@
+package com.citu.module.menduner.system.controller.admin.user.vo;
+
+import com.citu.module.menduner.system.controller.base.user.account.UserAccountRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 用户账户分页 Response VO")
+@Data
+public class UserAccountPageRespVO extends UserAccountRespVO {
+
+    // ========== 用户信息 ==========
+
+    @Schema(description = "名称", example = "x女士")
+    private String userName;
+
+    @Schema(description = "手机号码")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    private String email;
+
+    @Schema(description = "用户性别")
+    private String sex;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+
+}

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/AppEnterpriseController.java

@@ -6,7 +6,7 @@ import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseClickReqVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseDetailRespVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSearchPageReqVO;
-import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
 import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -46,7 +46,7 @@ public class AppEnterpriseController {
 
     @GetMapping("/search")
     @Operation(summary = "搜索企业")
-    public CommonResult<PageResult<AppEnterpriseSimpleRespVO>> search(@Valid AppEnterpriseSearchPageReqVO reqVO) {
+    public CommonResult<PageResult<EnterpriseBaseSimpleRespVO>> search(@Valid AppEnterpriseSearchPageReqVO reqVO) {
         return success(enterpriseService.search(reqVO));
     }
 

+ 35 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/AppJobCvRelController.java

@@ -4,9 +4,13 @@ import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
-import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedHomeRespVO;
+import com.citu.module.menduner.system.controller.app.job.hire.AppHireJobCvRelQueryReqVO;
+import com.citu.module.menduner.system.controller.app.job.hire.AppHireJobCvRelReqVO;
+import com.citu.module.menduner.system.controller.app.job.hire.AppHireJobCvRelRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedRespVO;
+import com.citu.module.menduner.system.controller.app.job.vo.AppJobCvLookRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobCvRelReqVO;
+import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.service.job.JobCvRelService;
 import com.citu.module.menduner.system.service.job.JobIntegrationService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -17,6 +21,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 
+import java.util.List;
+
 import static com.citu.framework.common.pojo.CommonResult.success;
 
 @Tag(name = "求职端 - 招聘职位简历投递")
@@ -38,6 +44,27 @@ public class AppJobCvRelController {
         jobCvRelService.send(reqVO);
         return success(true);
     }
+    @PostMapping("/hire/recommend/send")
+    @Operation(summary = "众聘分享-投递简历")
+    public CommonResult<Boolean> send(@Valid @RequestBody AppHireJobCvRelReqVO reqVO) {
+        jobCvRelService.send(reqVO);
+        return success(true);
+    }
+
+    @PreAuthenticated
+    @GetMapping("/page")
+    @Operation(summary = "众聘分享-获取邀请投递的职位信息")
+    public CommonResult<PageResult<AppHireJobCvRelRespVO>> page
+            (@Valid AppHireJobCvRelQueryReqVO pageReqVO) {
+        return success(jobCvRelService.page(pageReqVO));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/get/commend/count")
+    @Operation(summary = "众聘分享-获取推荐职位投递状态数量")
+    public CommonResult<List<CommonRespVO>> getRecommendCount() {
+        return success(jobCvRelService.getRecommendCount());
+    }
 
     @GetMapping("/send/check")
     @PreAuthenticated
@@ -46,7 +73,6 @@ public class AppJobCvRelController {
         return success(jobCvRelService.checkSend(jobId));
     }
 
-
     @GetMapping("/get/job/cv/page")
     @PreAuthenticated
     @Operation(summary = "获取投递的职位分页")
@@ -54,5 +80,12 @@ public class AppJobCvRelController {
         return success(jobIntegrationService.getJobCvPage(page));
     }
 
+    @GetMapping("/get/job/cv/look/page")
+    @PreAuthenticated
+    @Operation(summary = "看过我的企业用户")
+    public CommonResult<PageResult<AppJobCvLookRespVO>> getJobCvLook(@Valid PageParam page) {
+        return success(jobIntegrationService.getJobCvLook(page));
+    }
+
 
 }

+ 15 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelQueryReqVO.java

@@ -0,0 +1,15 @@
+package com.citu.module.menduner.system.controller.app.job.hire;
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "求职端 - 众聘-简历投递查询 Request VO")
+@Data
+public class AppHireJobCvRelQueryReqVO extends PageParam {
+
+    @Schema(description = "投递的简历状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private String status;
+
+
+}

+ 32 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelReqVO.java

@@ -0,0 +1,32 @@
+package com.citu.module.menduner.system.controller.app.job.hire;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "menduner - 众聘 - 招聘职位简历投递 Request VO")
+@Data
+public class AppHireJobCvRelReqVO {
+
+    @Schema(description = "发布的职位id")
+    @NotNull(message = "{1_100_036_002}")
+    private Long jobId;
+
+    @Schema(description = "推荐人")
+    private Long recommendUserId;
+
+    @Schema(description = "简历附件地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+    @NotEmpty(message = "{1_100_036_008}")
+    private String url;
+
+    // ========== 不登录情况下填 ==========
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "手机号")
+    private String phone;
+
+}

+ 28 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelRespVO.java

@@ -0,0 +1,28 @@
+package com.citu.module.menduner.system.controller.app.job.hire;
+
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.job.HireJobCvRelRespVO;
+import com.citu.module.menduner.system.controller.base.job.JobAdvertisedSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.person.info.PersonSimpleRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "求职端 - 众聘-简历投递 Response VO")
+@Data
+public class AppHireJobCvRelRespVO extends HireJobCvRelRespVO {
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "招聘信息")
+    private JobAdvertisedSimpleRespVO job;
+
+    @Schema(description = "投递人员信息")
+    private PersonSimpleRespVO sendPerson;
+
+    @Schema(description = "投递企业信息")
+    private EnterpriseSimpleRespVO enterprise;
+
+}

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppEnterpriseJobHomeRespVO.java

@@ -1,6 +1,6 @@
 package com.citu.module.menduner.system.controller.app.job.vo;
 
-import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -17,7 +17,7 @@ import java.util.List;
 public class AppEnterpriseJobHomeRespVO  {
 
     @Schema(description = "企业信息", example = "{}")
-    AppEnterpriseSimpleRespVO enterprise;
+    EnterpriseBaseSimpleRespVO enterprise;
 
     @Schema(description = "企业发布职位", example = "{}")
     private List<AppJobAdvertisedSimpleRespVO> jobList;

+ 4 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedDetailRespVO.java

@@ -1,15 +1,13 @@
 package com.citu.module.menduner.system.controller.app.job.vo;
 
 
-import com.citu.module.menduner.system.controller.base.contact.AppEnterpriseUserContactRespVO;
-import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.contact.EnterpriseUserContactRespVO;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.List;
 
 @Schema(description = "menduner - 招聘职位-详情 Response VO")
 @Data
@@ -19,13 +17,13 @@ public class AppJobAdvertisedDetailRespVO extends JobAdvertisedRespVO {
     private LocalDateTime updateTime;
 
     @Schema(description = "企业信息")
-    private AppEnterpriseSimpleRespVO enterprise;
+    private EnterpriseBaseSimpleRespVO enterprise;
 
     @Schema(description = "企业在招职位数量")
     private Long jobAdvertisedNum;
 
     @Schema(description = "招聘联系人信息")
-    private AppEnterpriseUserContactRespVO contact;
+    private EnterpriseUserContactRespVO contact;
 
 
 }

+ 21 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedPageReqVO.java

@@ -51,13 +51,32 @@ public class AppJobAdvertisedPageReqVO extends PageParam {
     private Boolean hire;
 
     @Schema(description = "是否置顶")
-    private Boolean top;
+    private Boolean top ;
 
     @Schema(description = "标记,详情看该类下常量")
     private Integer mark;
 
+    // ========== 相识参数 ==========
+    @Schema(description = "开启推荐相识职位")
+    private Boolean acquainted = false;
 
-    public AppJobAdvertisedPageReqVO(PageParam page,Integer mark) {
+    @Schema(description = "工作地区")
+    private List<Long> areaIds;
+
+    @Schema(description = "职位类型id")
+    private List<Long> positionIds;
+
+    @Schema(description = "期望行业id")
+    private List<Long> industryIds;
+
+    @Schema(description = "求职类型")
+    private List<String> jobTypes;
+
+    public AppJobAdvertisedPageReqVO() {
+
+    }
+
+    public AppJobAdvertisedPageReqVO(PageParam page, Integer mark) {
         this.setPageNo(page.getPageNo());
         this.setPageSize(page.getPageSize());
         this.mark = mark;

+ 4 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedRespVO.java

@@ -1,7 +1,7 @@
 package com.citu.module.menduner.system.controller.app.job.vo;
 
-import com.citu.module.menduner.system.controller.base.contact.AppEnterpriseUserContactRespVO;
-import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.contact.EnterpriseUserContactRespVO;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -13,8 +13,8 @@ public class AppJobAdvertisedRespVO {
     private AppJobAdvertisedSimpleRespVO job;
 
     @Schema(description = "招聘企业信息")
-    private AppEnterpriseSimpleRespVO enterprise;
+    private EnterpriseBaseSimpleRespVO enterprise;
 
     @Schema(description = "招聘联系人信息")
-    private AppEnterpriseUserContactRespVO contact;
+    private EnterpriseUserContactRespVO contact;
 }

+ 16 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobCvLookRespVO.java

@@ -0,0 +1,16 @@
+package com.citu.module.menduner.system.controller.app.job.vo;
+
+import com.citu.module.menduner.system.controller.base.contact.EnterpriseUserSummaryRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "menduner - 看过我的企业用户 Response VO")
+@Data
+public class AppJobCvLookRespVO extends EnterpriseUserSummaryRespVO {
+
+    @Schema(description = "查看时间")
+    private LocalDateTime updateTime;
+
+}

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobCvRelReqVO.java

@@ -14,6 +14,9 @@ public class AppJobCvRelReqVO {
     @NotNull(message = "{1_100_035_004}")
     private Long jobId;
 
+    @Schema(description = "投递类型(0 平台投递 | 1 赏金投递)", example = "0")
+    private String type;
+
     @Schema(description = "简历附件标题", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotEmpty(message = "{1_100_035_003}")
     private String title;

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/AppPersonController.java

@@ -4,7 +4,7 @@ import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
-import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedRespVO;
 import com.citu.module.menduner.system.controller.app.person.enterprise.PersonEnterpriseSubscribeReqVO;
 import com.citu.module.menduner.system.controller.app.person.job.AppPersonJobFavoriteReqVO;
@@ -83,7 +83,7 @@ public class AppPersonController {
     @PreAuthenticated
     @PostMapping("/get/enterprise/subscribe/page")
     @Operation(summary = "获取关注的企业分页")
-    public CommonResult<PageResult<AppEnterpriseSimpleRespVO>> getEnterpriseSubscribePage
+    public CommonResult<PageResult<EnterpriseBaseSimpleRespVO>> getEnterpriseSubscribePage
             (@Valid @RequestBody PageParam reqVO) {
         return success(jobIntegrationService.getEnterpriseSubscribePage(reqVO));
     }

+ 17 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/AppPersonResumeController.java

@@ -12,6 +12,7 @@ import com.citu.module.menduner.system.controller.app.person.projectexp.AppProje
 import com.citu.module.menduner.system.controller.app.person.projectexp.AppProjectExpSaveReqVO;
 import com.citu.module.menduner.system.controller.app.person.resume.AppPersonAdvantageSaveReqVO;
 import com.citu.module.menduner.system.controller.app.person.resume.AppPersonInfoSaveReqVO;
+import com.citu.module.menduner.system.controller.app.person.resume.AppPersonInfoSaveSimpleReqVO;
 import com.citu.module.menduner.system.controller.app.person.trainexp.AppTrainExpRespVO;
 import com.citu.module.menduner.system.controller.app.person.trainexp.AppTrainExpSaveReqVO;
 import com.citu.module.menduner.system.controller.app.person.skill.AppPersonSkillRespVO;
@@ -84,6 +85,22 @@ public class AppPersonResumeController {
         return success(personInfoService.saveInfo(reqVO));
     }
 
+
+    @PreAuthenticated
+    @PostMapping("/avatar/update")
+    @Operation(summary = "修改人才头像")
+    public CommonResult<Boolean> uploadAvatar(@RequestParam("avatar") String avatar) {
+        personInfoService.uploadAvatar(avatar);
+        return success(true);
+    }
+
+    @PreAuthenticated
+    @PostMapping("/info/simple/save")
+    @Operation(summary = "保存简易基本信息")
+    public CommonResult<Boolean> saveSimple(@Valid @RequestBody AppPersonInfoSaveSimpleReqVO reqVO) {
+        return success(personInfoService.saveSimple(reqVO));
+    }
+
     @PreAuthenticated
     @PostMapping("/job/status/update")
     @Operation(summary = "修改求职类型")

+ 35 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/resume/AppPersonInfoSaveSimpleReqVO.java

@@ -0,0 +1,35 @@
+package com.citu.module.menduner.system.controller.app.person.resume;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@Schema(description = "menduner 人才简历-简易基本信息 Request VO")
+public class AppPersonInfoSaveSimpleReqVO {
+
+    @NotBlank(message = "{1_100_001_003}")
+    @Schema(description = "真实姓名", example = "王五")
+    private String name;
+
+    @Schema(description = "用户性别")
+    private String sex;
+
+    @NotBlank(message = "{1_100_001_004}")
+    @Schema(description = "联系手机号")
+    private String phone;
+
+    @NotBlank(message = "{1_100_001_008}")
+    @Schema(description = "求职状态(0离职-随时到岗 1在职-月内到岗 2在职-考虑机会 3在职-暂不考虑)", example = "1")
+    private String jobStatus;
+
+    @NotBlank(message = "{1_100_001_006}")
+    @Schema(description = "工作经验", example = "1")
+    private String expType;
+
+    @NotBlank(message = "{1_100_001_007}")
+    @Schema(description = "学历", example = "2")
+    private String eduType;
+
+}

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff