Эх сурвалжийг харах

Merge branch 'master' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/mall_product

 Conflicts:
	yudao-module-member/yudao-module-member-biz/src/test/resources/sql/create_tables.sql
YunaiV 1 жил өмнө
parent
commit
bf92727b27
26 өөрчлөгдсөн 192 нэмэгдсэн , 88 устгасан
  1. 2 0
      .gitignore
  2. 35 1
      pom.xml
  3. 19 13
      sql/mysql/ruoyi-vue-pro.sql
  4. 33 1
      yudao-dependencies/pom.xml
  5. 3 1
      yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java
  6. 1 1
      yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java
  7. 1 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java
  8. 1 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java
  9. 1 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java
  10. 12 12
      yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java
  11. 26 22
      yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java
  12. 6 0
      yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java
  13. 2 0
      yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java
  14. 5 4
      yudao-module-member/yudao-module-member-biz/src/test/resources/sql/create_tables.sql
  15. 2 0
      yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/menu/MpMenuConvert.java
  16. 2 1
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java
  17. 16 4
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/util/MoneyUtils.java
  18. 1 1
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java
  19. 1 4
      yudao-server/pom.xml
  20. 4 4
      yudao-ui-admin/src/components/Crontab/day.vue
  21. 3 3
      yudao-ui-admin/src/components/Crontab/hour.vue
  22. 3 3
      yudao-ui-admin/src/components/Crontab/min.vue
  23. 3 3
      yudao-ui-admin/src/components/Crontab/month.vue
  24. 3 3
      yudao-ui-admin/src/components/Crontab/second.vue
  25. 4 4
      yudao-ui-admin/src/components/Crontab/week.vue
  26. 3 3
      yudao-ui-admin/src/components/Crontab/year.vue

+ 2 - 0
.gitignore

@@ -8,6 +8,8 @@
 target/
 target/
 !.mvn/wrapper/maven-wrapper.jar
 !.mvn/wrapper/maven-wrapper.jar
 
 
+.flattened-pom.xml
+
 ######################################################################
 ######################################################################
 # IDE
 # IDE
 
 

+ 35 - 1
pom.xml

@@ -30,13 +30,14 @@
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
 
 
     <properties>
     <properties>
-        <revision>1.8.0-snapshot</revision>
+        <revision>1.8.1-snapshot</revision>
         <!-- Maven 相关 -->
         <!-- Maven 相关 -->
         <java.version>1.8</java.version>
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
         <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
         <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
         <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+        <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
         <!-- 看看咋放到 bom 里 -->
         <!-- 看看咋放到 bom 里 -->
         <lombok.version>1.18.28</lombok.version>
         <lombok.version>1.18.28</lombok.version>
         <spring.boot.version>2.7.14</spring.boot.version>
         <spring.boot.version>2.7.14</spring.boot.version>
@@ -92,8 +93,41 @@
                         </annotationProcessorPaths>
                         </annotationProcessorPaths>
                     </configuration>
                     </configuration>
                 </plugin>
                 </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>flatten-maven-plugin</artifactId>
+                </plugin>
             </plugins>
             </plugins>
         </pluginManagement>
         </pluginManagement>
+
+        <plugins>
+            <!-- 统一 revision 版本 -->
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>flatten-maven-plugin</artifactId>
+                <version>${flatten-maven-plugin.version}</version>
+                <configuration>
+                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
+                    <updatePomFile>true</updatePomFile>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>flatten</goal>
+                        </goals>
+                        <id>flatten</id>
+                        <phase>process-resources</phase>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                        <id>flatten.clean</id>
+                        <phase>clean</phase>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
     </build>
     </build>
 
 
     <!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->
     <!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->

+ 19 - 13
sql/mysql/ruoyi-vue-pro.sql

@@ -11,7 +11,7 @@
  Target Server Version : 80034
  Target Server Version : 80034
  File Encoding         : 65001
  File Encoding         : 65001
 
 
- Date: 31/08/2023 20:40:45
+ Date: 03/09/2023 19:13:55
 */
 */
 
 
 SET NAMES utf8mb4;
 SET NAMES utf8mb4;
@@ -715,7 +715,7 @@ CREATE TABLE `member_experience_record`  (
   PRIMARY KEY (`id`) USING BTREE,
   PRIMARY KEY (`id`) USING BTREE,
   INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员经验记录-用户编号',
   INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员经验记录-用户编号',
   INDEX `idx_user_biz_type`(`user_id` ASC, `biz_type` ASC) USING BTREE COMMENT '会员经验记录-用户业务类型'
   INDEX `idx_user_biz_type`(`user_id` ASC, `biz_type` ASC) USING BTREE COMMENT '会员经验记录-用户业务类型'
-) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员经验记录';
+) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员经验记录';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of member_experience_record
 -- Records of member_experience_record
@@ -725,6 +725,8 @@ INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `
 INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 247, '0', 0, '管理员调整', '管理员调整获得100经验', -50, 100, '1', '2023-08-22 21:52:44', '1', '2023-08-22 21:52:44', b'0', 1);
 INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 247, '0', 0, '管理员调整', '管理员调整获得100经验', -50, 100, '1', '2023-08-22 21:52:44', '1', '2023-08-22 21:52:44', b'0', 1);
 INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 247, '78', 2, '下单奖励', '下单获得 27 经验', 27, 127, NULL, '2023-08-30 18:46:52', NULL, '2023-08-30 18:46:52', b'0', 1);
 INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 247, '78', 2, '下单奖励', '下单获得 27 经验', 27, 127, NULL, '2023-08-30 18:46:52', NULL, '2023-08-30 18:46:52', b'0', 1);
 INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 247, 'null', 3, '退单扣除', '退单获得 -6 经验', -6, 121, NULL, '2023-08-31 19:56:21', NULL, '2023-08-31 19:56:21', b'0', 1);
 INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 247, 'null', 3, '退单扣除', '退单获得 -6 经验', -6, 121, NULL, '2023-08-31 19:56:21', NULL, '2023-08-31 19:56:21', b'0', 1);
+INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 247, '80', 2, '下单奖励', '下单获得 699906 经验', 699906, 700027, NULL, '2023-08-31 23:43:29', NULL, '2023-08-31 23:43:29', b'0', 1);
+INSERT INTO `member_experience_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `experience`, `total_experience`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, 247, '81', 2, '下单奖励', '下单获得 2799606 经验', 2799606, 3499633, NULL, '2023-08-31 23:46:17', NULL, '2023-08-31 23:46:17', b'0', 1);
 COMMIT;
 COMMIT;
 
 
 -- ----------------------------
 -- ----------------------------
@@ -801,7 +803,7 @@ CREATE TABLE `member_level_record`  (
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   PRIMARY KEY (`id`) USING BTREE,
   PRIMARY KEY (`id`) USING BTREE,
   INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员等级记录-用户编号'
   INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员等级记录-用户编号'
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员等级记录';
+) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员等级记录';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of member_level_record
 -- Records of member_level_record
@@ -857,7 +859,7 @@ CREATE TABLE `member_point_record`  (
   PRIMARY KEY (`id`) USING BTREE,
   PRIMARY KEY (`id`) USING BTREE,
   INDEX `index_userId`(`user_id` ASC) USING BTREE,
   INDEX `index_userId`(`user_id` ASC) USING BTREE,
   INDEX `index_title`(`title` ASC) USING BTREE
   INDEX `index_title`(`title` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户积分记录';
+) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户积分记录';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of member_point_record
 -- Records of member_point_record
@@ -868,6 +870,8 @@ INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title
 INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 247, '12', 1, '12', NULL, -12, 12, '', '2023-07-02 14:50:55', '', '2023-08-21 14:19:29', b'0', 1);
 INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 247, '12', 1, '12', NULL, -12, 12, '', '2023-07-02 14:50:55', '', '2023-08-21 14:19:29', b'0', 1);
 INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 247, '78', 10, '订单消费', '下单获得 81 积分', 81, 91, NULL, '2023-08-30 18:46:52', NULL, '2023-08-30 18:46:52', b'0', 1);
 INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 247, '78', 10, '订单消费', '下单获得 81 积分', 81, 91, NULL, '2023-08-30 18:46:52', NULL, '2023-08-30 18:46:52', b'0', 1);
 INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 247, 'null', 11, '订单取消', '退单获得 -18 积分', -18, 73, NULL, '2023-08-31 19:56:21', NULL, '2023-08-31 19:56:21', b'0', 1);
 INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 247, 'null', 11, '订单取消', '退单获得 -18 积分', -18, 73, NULL, '2023-08-31 19:56:21', NULL, '2023-08-31 19:56:21', b'0', 1);
+INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, 247, '80', 10, '订单消费', '下单获得 2099718 积分', 2099718, 2099791, NULL, '2023-08-31 23:43:29', NULL, '2023-08-31 23:43:29', b'0', 1);
+INSERT INTO `member_point_record` (`id`, `user_id`, `biz_id`, `biz_type`, `title`, `description`, `point`, `total_point`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (7, 247, '81', 10, '订单消费', '下单获得 8398818 积分', 8398818, 10498609, NULL, '2023-08-31 23:46:17', NULL, '2023-08-31 23:46:17', b'0', 1);
 COMMIT;
 COMMIT;
 
 
 -- ----------------------------
 -- ----------------------------
@@ -1055,7 +1059,7 @@ CREATE TABLE `system_dict_data`  (
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1358 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典数据表';
+) ENGINE = InnoDB AUTO_INCREMENT = 1359 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典数据表';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of system_dict_data
 -- Records of system_dict_data
@@ -1184,8 +1188,8 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1166, 2, '折扣', '2', 'promotion_discount_type', 0, 'primary', '', '优惠类型 - 折扣', '1', '2022-11-01 12:46:51', '1', '2022-11-01 12:50:08', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1166, 2, '折扣', '2', 'promotion_discount_type', 0, 'primary', '', '优惠类型 - 折扣', '1', '2022-11-01 12:46:51', '1', '2022-11-01 12:50:08', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1167, 1, '固定日期', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 固定日期', '1', '2022-11-02 00:07:34', '1', '2022-11-04 00:07:49', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1167, 1, '固定日期', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 固定日期', '1', '2022-11-02 00:07:34', '1', '2022-11-04 00:07:49', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1168, 2, '领取之后', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 领取之后', '1', '2022-11-02 00:07:54', '1', '2022-11-04 00:07:52', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1168, 2, '领取之后', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 领取之后', '1', '2022-11-02 00:07:54', '1', '2022-11-04 00:07:52', b'0');
-INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1169, 1, '全部商品参与', '1', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 全部商品参与', '1', '2022-11-02 00:28:22', '1', '2022-11-02 00:28:22', b'0');
-INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1170, 2, '指定商品参与', '2', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 指定商品参与', '1', '2022-11-02 00:28:34', '1', '2022-11-02 00:28:40', b'0');
+INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1169, 1, '通用卷', '1', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 全部商品参与', '1', '2022-11-02 00:28:22', '1', '2023-09-01 23:42:49', b'0');
+INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1170, 2, '商品卷', '2', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 指定商品参与', '1', '2022-11-02 00:28:34', '1', '2023-09-01 23:42:54', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1171, 1, '已领取', '1', 'promotion_coupon_status', 0, 'primary', '', '优惠劵的状态 - 已领取', '1', '2022-11-04 00:15:08', '1', '2022-11-04 19:16:04', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1171, 1, '已领取', '1', 'promotion_coupon_status', 0, 'primary', '', '优惠劵的状态 - 已领取', '1', '2022-11-04 00:15:08', '1', '2022-11-04 19:16:04', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1172, 2, '已使用', '2', 'promotion_coupon_status', 0, 'success', '', '优惠劵的状态 - 已使用', '1', '2022-11-04 00:15:21', '1', '2022-11-04 19:16:08', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1172, 2, '已使用', '2', 'promotion_coupon_status', 0, 'success', '', '优惠劵的状态 - 已使用', '1', '2022-11-04 00:15:21', '1', '2022-11-04 19:16:08', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1173, 3, '已过期', '3', 'promotion_coupon_status', 0, 'info', '', '优惠劵的状态 - 已过期', '1', '2022-11-04 00:15:43', '1', '2022-11-04 19:16:12', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1173, 3, '已过期', '3', 'promotion_coupon_status', 0, 'info', '', '优惠劵的状态 - 已过期', '1', '2022-11-04 00:15:43', '1', '2022-11-04 19:16:12', b'0');
@@ -1280,6 +1284,7 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1355, 5, '抽奖奖励', '5', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1355, 5, '抽奖奖励', '5', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1356, 1, '快递发货', '1', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:04:55', '1', '2023-08-23 00:04:55', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1356, 1, '快递发货', '1', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:04:55', '1', '2023-08-23 00:04:55', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1357, 2, '用户自提', '2', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:05:05', '1', '2023-08-23 00:05:05', b'0');
 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1357, 2, '用户自提', '2', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:05:05', '1', '2023-08-23 00:05:05', b'0');
+INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1358, 3, '品类卷', '3', 'promotion_product_scope', 0, 'default', '', '', '1', '2023-09-01 23:43:07', '1', '2023-09-01 23:43:07', b'0');
 COMMIT;
 COMMIT;
 
 
 -- ----------------------------
 -- ----------------------------
@@ -1413,7 +1418,7 @@ CREATE TABLE `system_login_log`  (
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2372 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录';
+) ENGINE = InnoDB AUTO_INCREMENT = 2375 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of system_login_log
 -- Records of system_login_log
@@ -1543,7 +1548,7 @@ CREATE TABLE `system_menu`  (
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2341 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表';
+) ENGINE = InnoDB AUTO_INCREMENT = 2342 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of system_menu
 -- Records of system_menu
@@ -1994,6 +1999,7 @@ INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_i
 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2338, '添加自评', 'product:comment:create', 3, 2, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:23', '1', '2023-08-26 11:08:18', b'0');
 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2338, '添加自评', 'product:comment:create', 3, 2, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:23', '1', '2023-08-26 11:08:18', b'0');
 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2339, '商家回复', 'product:comment:update', 3, 3, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:37', '1', '2023-08-26 11:04:37', b'0');
 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2339, '商家回复', 'product:comment:update', 3, 3, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:37', '1', '2023-08-26 11:04:37', b'0');
 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2340, '显隐评论', 'product:comment:update', 3, 4, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:55', '1', '2023-08-26 11:04:55', b'0');
 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2340, '显隐评论', 'product:comment:update', 3, 4, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:55', '1', '2023-08-26 11:04:55', b'0');
+INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2341, '优惠劵发送', 'promotion:coupon:send', 3, 2, 2038, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-09-02 00:03:14', '1', '2023-09-02 00:03:14', b'0');
 COMMIT;
 COMMIT;
 
 
 -- ----------------------------
 -- ----------------------------
@@ -2110,7 +2116,7 @@ CREATE TABLE `system_oauth2_access_token`  (
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2590 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌';
+) ENGINE = InnoDB AUTO_INCREMENT = 2597 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of system_oauth2_access_token
 -- Records of system_oauth2_access_token
@@ -2232,7 +2238,7 @@ CREATE TABLE `system_oauth2_refresh_token`  (
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 894 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌';
+) ENGINE = InnoDB AUTO_INCREMENT = 896 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of system_oauth2_refresh_token
 -- Records of system_oauth2_refresh_token
@@ -2272,7 +2278,7 @@ CREATE TABLE `system_operate_log`  (
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 8312 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志记录';
+) ENGINE = InnoDB AUTO_INCREMENT = 8321 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志记录';
 
 
 -- ----------------------------
 -- ----------------------------
 -- Records of system_operate_log
 -- Records of system_operate_log
@@ -3596,7 +3602,7 @@ CREATE TABLE `system_users`  (
 -- Records of system_users
 -- Records of system_users
 -- ----------------------------
 -- ----------------------------
 BEGIN;
 BEGIN;
-INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/e1fdd7271685ec143a0900681606406621717a666ad0b2798b096df41422b32f.png', 0, '0:0:0:0:0:0:0:1', '2023-08-31 19:55:42', 'admin', '2021-01-05 17:03:47', NULL, '2023-08-31 19:55:42', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/e1fdd7271685ec143a0900681606406621717a666ad0b2798b096df41422b32f.png', 0, '0:0:0:0:0:0:0:1', '2023-09-02 00:03:37', 'admin', '2021-01-05 17:03:47', NULL, '2023-09-02 00:03:37', b'0', 1);
 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', b'0', 1);
 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', b'0', 1);
 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-07-08 01:26:27', '', '2021-01-13 23:50:35', NULL, '2022-07-08 01:26:27', b'0', 1);
 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-07-08 01:26:27', '', '2021-01-13 23:50:35', NULL, '2022-07-08 01:26:27', b'0', 1);
 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$10$GP8zvqHB//TekuzYZSBYAuBQJiNq1.fxQVDYJ.uBCOnWCtDVKE4H6', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '127.0.0.1', '2022-05-28 15:43:17', '', '2021-01-21 02:13:53', NULL, '2022-07-09 09:00:33', b'0', 1);
 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$10$GP8zvqHB//TekuzYZSBYAuBQJiNq1.fxQVDYJ.uBCOnWCtDVKE4H6', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '127.0.0.1', '2022-05-28 15:43:17', '', '2021-01-21 02:13:53', NULL, '2022-07-09 09:00:33', b'0', 1);

+ 33 - 1
yudao-dependencies/pom.xml

@@ -14,7 +14,8 @@
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
 
 
     <properties>
     <properties>
-        <revision>1.8.0-snapshot</revision>
+        <revision>1.8.1-snapshot</revision>
+        <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
         <!-- 统一依赖管理 -->
         <!-- 统一依赖管理 -->
         <spring.boot.version>2.7.14</spring.boot.version>
         <spring.boot.version>2.7.14</spring.boot.version>
         <!-- Web 相关 -->
         <!-- Web 相关 -->
@@ -645,4 +646,35 @@
         </dependencies>
         </dependencies>
     </dependencyManagement>
     </dependencyManagement>
 
 
+    <build>
+        <plugins>
+            <!-- 统一 revision 版本 -->
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>flatten-maven-plugin</artifactId>
+                <version>${flatten-maven-plugin.version}</version>
+                <configuration>
+                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
+                    <updatePomFile>true</updatePomFile>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>flatten</goal>
+                        </goals>
+                        <id>flatten</id>
+                        <phase>process-resources</phase>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                        <id>flatten.clean</id>
+                        <phase>clean</phase>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
 </project>

+ 3 - 1
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java

@@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
 import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule;
 import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule;
 import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRuleFactory;
 import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRuleFactory;
 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
-import com.alibaba.ttl.TransmittableThreadLocal;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
 import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
@@ -508,6 +507,9 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
             // 单条规则的条件
             // 单条规则的条件
             String tableName = MyBatisUtils.getTableName(table);
             String tableName = MyBatisUtils.getTableName(table);
             Expression oneExpress = rule.getExpression(tableName, table.getAlias());
             Expression oneExpress = rule.getExpression(tableName, table.getAlias());
+            if (oneExpress == null){
+                continue;
+            }
             // 拼接到 allExpression 中
             // 拼接到 allExpression 中
             allExpression = allExpression == null ? oneExpress
             allExpression = allExpression == null ? oneExpress
                     : new AndExpression(allExpression, oneExpress);
                     : new AndExpression(allExpression, oneExpress);

+ 1 - 1
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java

@@ -56,7 +56,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
     protected void doInit(String tradeType) {
     protected void doInit(String tradeType) {
         // 创建 config 配置
         // 创建 config 配置
         WxPayConfig payConfig = new WxPayConfig();
         WxPayConfig payConfig = new WxPayConfig();
-        BeanUtil.copyProperties(config, payConfig, "keyContent");
+        BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent", "privateCertContent");
         payConfig.setTradeType(tradeType);
         payConfig.setTradeType(tradeType);
         // weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决
         // weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决
         if (Base64.isBase64(config.getKeyContent())) {
         if (Base64.isBase64(config.getKeyContent())) {

+ 1 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java

@@ -32,6 +32,7 @@ public class MemberGroupServiceImpl implements MemberGroupService {
 
 
     @Resource
     @Resource
     private MemberGroupMapper memberGroupMapper;
     private MemberGroupMapper memberGroupMapper;
+
     @Resource
     @Resource
     private MemberUserService memberUserService;
     private MemberUserService memberUserService;
 
 

+ 1 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java

@@ -43,6 +43,7 @@ public class MemberLevelServiceImpl implements MemberLevelService {
 
 
     @Resource
     @Resource
     private MemberLevelMapper memberLevelMapper;
     private MemberLevelMapper memberLevelMapper;
+
     @Resource
     @Resource
     private MemberLevelRecordService memberLevelRecordService;
     private MemberLevelRecordService memberLevelRecordService;
     @Resource
     @Resource

+ 1 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java

@@ -32,6 +32,7 @@ public class MemberTagServiceImpl implements MemberTagService {
 
 
     @Resource
     @Resource
     private MemberTagMapper memberTagMapper;
     private MemberTagMapper memberTagMapper;
+
     @Resource
     @Resource
     private MemberUserService memberUserService;
     private MemberUserService memberUserService;
 
 

+ 12 - 12
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImplTest.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.module.member.service.group;
 package cn.iocoder.yudao.module.member.service.group;
 
 
-import cn.hutool.core.util.RandomUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@@ -8,11 +7,10 @@ import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreat
 import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO;
 import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO;
 import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO;
 import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO;
 import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
 import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
-import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
 import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
 import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
-import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
-import cn.iocoder.yudao.module.system.enums.common.SexEnum;
+import cn.iocoder.yudao.module.member.service.user.MemberUserService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.Import;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -26,7 +24,10 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
 
 
+// TODO 芋艿:完全 review 完,在去 review 单测
 /**
 /**
  * {@link MemberGroupServiceImpl} 的单元测试类
  * {@link MemberGroupServiceImpl} 的单元测试类
  *
  *
@@ -40,13 +41,15 @@ public class MemberGroupServiceImplTest extends BaseDbUnitTest {
 
 
     @Resource
     @Resource
     private MemberGroupMapper groupMapper;
     private MemberGroupMapper groupMapper;
-    @Resource
-    private MemberUserMapper memberUserMapper;
+
+    @MockBean
+    private MemberUserService memberUserService;
 
 
     @Test
     @Test
     public void testCreateGroup_success() {
     public void testCreateGroup_success() {
         // 准备参数
         // 准备参数
-        MemberGroupCreateReqVO reqVO = randomPojo(MemberGroupCreateReqVO.class);
+        MemberGroupCreateReqVO reqVO = randomPojo(MemberGroupCreateReqVO.class,
+                o -> o.setStatus(randomCommonStatus()));
 
 
         // 调用
         // 调用
         Long groupId = groupService.createGroup(reqVO);
         Long groupId = groupService.createGroup(reqVO);
@@ -65,6 +68,7 @@ public class MemberGroupServiceImplTest extends BaseDbUnitTest {
         // 准备参数
         // 准备参数
         MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class, o -> {
         MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class, o -> {
             o.setId(dbGroup.getId()); // 设置更新的 ID
             o.setId(dbGroup.getId()); // 设置更新的 ID
+            o.setStatus(randomCommonStatus());
         });
         });
 
 
         // 调用
         // 调用
@@ -115,11 +119,7 @@ public class MemberGroupServiceImplTest extends BaseDbUnitTest {
         Long id = dbGroup.getId();
         Long id = dbGroup.getId();
 
 
         // mock 会员数据
         // mock 会员数据
-        MemberUserDO dbUser = randomPojo(MemberUserDO.class, o -> {
-            o.setGroupId(id);
-            o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
-        });
-        memberUserMapper.insert(dbUser);
+        when(memberUserService.getUserCountByGroupId(eq(id))).thenReturn(1L);
 
 
         // 调用, 并断言异常
         // 调用, 并断言异常
         assertServiceException(() -> groupService.deleteGroup(id), GROUP_HAS_USER);
         assertServiceException(() -> groupService.deleteGroup(id), GROUP_HAS_USER);

+ 26 - 22
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java

@@ -1,7 +1,6 @@
 package cn.iocoder.yudao.module.member.service.level;
 package cn.iocoder.yudao.module.member.service.level;
 
 
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO;
 import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO;
@@ -9,6 +8,7 @@ import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLeve
 import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO;
 import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO;
 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
 import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper;
 import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper;
+import cn.iocoder.yudao.module.member.service.user.MemberUserService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.Import;
@@ -38,12 +38,14 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
     private MemberLevelServiceImpl levelService;
     private MemberLevelServiceImpl levelService;
 
 
     @Resource
     @Resource
-    private MemberLevelMapper levelMapper;
+    private MemberLevelMapper memberlevelMapper;
 
 
     @MockBean
     @MockBean
     private MemberLevelRecordService memberLevelRecordService;
     private MemberLevelRecordService memberLevelRecordService;
     @MockBean
     @MockBean
     private MemberExperienceRecordService memberExperienceRecordService;
     private MemberExperienceRecordService memberExperienceRecordService;
+    @MockBean
+    private MemberUserService memberUserService;
 
 
     @Test
     @Test
     public void testCreateLevel_success() {
     public void testCreateLevel_success() {
@@ -52,6 +54,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
             o.setDiscountPercent(randomInt());
             o.setDiscountPercent(randomInt());
             o.setIcon(randomURL());
             o.setIcon(randomURL());
             o.setBackgroundUrl(randomURL());
             o.setBackgroundUrl(randomURL());
+            o.setStatus(randomCommonStatus());
         });
         });
 
 
         // 调用
         // 调用
@@ -59,7 +62,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         // 断言
         // 断言
         assertNotNull(levelId);
         assertNotNull(levelId);
         // 校验记录的属性是否正确
         // 校验记录的属性是否正确
-        MemberLevelDO level = levelMapper.selectById(levelId);
+        MemberLevelDO level = memberlevelMapper.selectById(levelId);
         assertPojoEquals(reqVO, level);
         assertPojoEquals(reqVO, level);
     }
     }
 
 
@@ -67,7 +70,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
     public void testUpdateLevel_success() {
     public void testUpdateLevel_success() {
         // mock 数据
         // mock 数据
         MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class);
         MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class);
-        levelMapper.insert(dbLevel);// @Sql: 先插入出一条存在的数据
+        memberlevelMapper.insert(dbLevel);// @Sql: 先插入出一条存在的数据
         // 准备参数
         // 准备参数
         MemberLevelUpdateReqVO reqVO = randomPojo(MemberLevelUpdateReqVO.class, o -> {
         MemberLevelUpdateReqVO reqVO = randomPojo(MemberLevelUpdateReqVO.class, o -> {
             o.setId(dbLevel.getId()); // 设置更新的 ID
             o.setId(dbLevel.getId()); // 设置更新的 ID
@@ -79,12 +82,13 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
             o.setDiscountPercent(randomInt());
             o.setDiscountPercent(randomInt());
             o.setIcon(randomURL());
             o.setIcon(randomURL());
             o.setBackgroundUrl(randomURL());
             o.setBackgroundUrl(randomURL());
+            o.setStatus(randomCommonStatus());
         });
         });
 
 
         // 调用
         // 调用
         levelService.updateLevel(reqVO);
         levelService.updateLevel(reqVO);
         // 校验是否更新正确
         // 校验是否更新正确
-        MemberLevelDO level = levelMapper.selectById(reqVO.getId()); // 获取最新的
+        MemberLevelDO level = memberlevelMapper.selectById(reqVO.getId()); // 获取最新的
         assertPojoEquals(reqVO, level);
         assertPojoEquals(reqVO, level);
     }
     }
 
 
@@ -101,14 +105,14 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
     public void testDeleteLevel_success() {
     public void testDeleteLevel_success() {
         // mock 数据
         // mock 数据
         MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class);
         MemberLevelDO dbLevel = randomPojo(MemberLevelDO.class);
-        levelMapper.insert(dbLevel);// @Sql: 先插入出一条存在的数据
+        memberlevelMapper.insert(dbLevel);// @Sql: 先插入出一条存在的数据
         // 准备参数
         // 准备参数
         Long id = dbLevel.getId();
         Long id = dbLevel.getId();
 
 
         // 调用
         // 调用
         levelService.deleteLevel(id);
         levelService.deleteLevel(id);
         // 校验数据不存在了
         // 校验数据不存在了
-        assertNull(levelMapper.selectById(id));
+        assertNull(memberlevelMapper.selectById(id));
     }
     }
 
 
     @Test
     @Test
@@ -127,11 +131,11 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
             o.setName("黄金会员");
             o.setName("黄金会员");
             o.setStatus(1);
             o.setStatus(1);
         });
         });
-        levelMapper.insert(dbLevel);
+        memberlevelMapper.insert(dbLevel);
         // 测试 name 不匹配
         // 测试 name 不匹配
-        levelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setName("")));
+        memberlevelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setName("")));
         // 测试 status 不匹配
         // 测试 status 不匹配
-        levelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setStatus(0)));
+        memberlevelMapper.insert(cloneIgnoreId(dbLevel, o -> o.setStatus(0)));
         // 准备参数
         // 准备参数
         MemberLevelListReqVO reqVO = new MemberLevelListReqVO();
         MemberLevelListReqVO reqVO = new MemberLevelListReqVO();
         reqVO.setName("黄金会员");
         reqVO.setName("黄金会员");
@@ -150,10 +154,10 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         String name = randomString();
         String name = randomString();
 
 
         // mock 数据
         // mock 数据
-        levelMapper.insert(randomLevelDO(o -> o.setName(name)));
+        memberlevelMapper.insert(randomLevelDO(o -> o.setName(name)));
 
 
         // 调用,校验异常
         // 调用,校验异常
-        List<MemberLevelDO> list = levelMapper.selectList();
+        List<MemberLevelDO> list = memberlevelMapper.selectList();
         assertServiceException(() -> levelService.validateNameUnique(list, null, name), LEVEL_NAME_EXISTS, name);
         assertServiceException(() -> levelService.validateNameUnique(list, null, name), LEVEL_NAME_EXISTS, name);
     }
     }
 
 
@@ -164,10 +168,10 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         String name = randomString();
         String name = randomString();
 
 
         // mock 数据
         // mock 数据
-        levelMapper.insert(randomLevelDO(o -> o.setName(name)));
+        memberlevelMapper.insert(randomLevelDO(o -> o.setName(name)));
 
 
         // 调用,校验异常
         // 调用,校验异常
-        List<MemberLevelDO> list = levelMapper.selectList();
+        List<MemberLevelDO> list = memberlevelMapper.selectList();
         assertServiceException(() -> levelService.validateNameUnique(list, id, name), LEVEL_NAME_EXISTS, name);
         assertServiceException(() -> levelService.validateNameUnique(list, id, name), LEVEL_NAME_EXISTS, name);
     }
     }
 
 
@@ -178,13 +182,13 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         String name = randomString();
         String name = randomString();
 
 
         // mock 数据
         // mock 数据
-        levelMapper.insert(randomLevelDO(o -> {
+        memberlevelMapper.insert(randomLevelDO(o -> {
             o.setLevel(level);
             o.setLevel(level);
             o.setName(name);
             o.setName(name);
         }));
         }));
 
 
         // 调用,校验异常
         // 调用,校验异常
-        List<MemberLevelDO> list = levelMapper.selectList();
+        List<MemberLevelDO> list = memberlevelMapper.selectList();
         assertServiceException(() -> levelService.validateLevelUnique(list, null, level), LEVEL_VALUE_EXISTS, level, name);
         assertServiceException(() -> levelService.validateLevelUnique(list, null, level), LEVEL_VALUE_EXISTS, level, name);
     }
     }
 
 
@@ -196,13 +200,13 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         String name = randomString();
         String name = randomString();
 
 
         // mock 数据
         // mock 数据
-        levelMapper.insert(randomLevelDO(o -> {
+        memberlevelMapper.insert(randomLevelDO(o -> {
             o.setLevel(level);
             o.setLevel(level);
             o.setName(name);
             o.setName(name);
         }));
         }));
 
 
         // 调用,校验异常
         // 调用,校验异常
-        List<MemberLevelDO> list = levelMapper.selectList();
+        List<MemberLevelDO> list = memberlevelMapper.selectList();
         assertServiceException(() -> levelService.validateLevelUnique(list, id, level), LEVEL_VALUE_EXISTS, level, name);
         assertServiceException(() -> levelService.validateLevelUnique(list, id, level), LEVEL_VALUE_EXISTS, level, name);
     }
     }
 
 
@@ -214,12 +218,12 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         String name = randomString();
         String name = randomString();
 
 
         // mock 数据
         // mock 数据
-        levelMapper.insert(randomLevelDO(o -> {
+        memberlevelMapper.insert(randomLevelDO(o -> {
             o.setLevel(level);
             o.setLevel(level);
             o.setExperience(experience);
             o.setExperience(experience);
             o.setName(name);
             o.setName(name);
         }));
         }));
-        List<MemberLevelDO> list = levelMapper.selectList();
+        List<MemberLevelDO> list = memberlevelMapper.selectList();
 
 
         // 调用,校验异常
         // 调用,校验异常
         assertServiceException(() -> levelService.validateExperienceOutRange(list, null, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level);
         assertServiceException(() -> levelService.validateExperienceOutRange(list, null, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level);
@@ -236,12 +240,12 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
         String name = randomString();
         String name = randomString();
 
 
         // mock 数据
         // mock 数据
-        levelMapper.insert(randomLevelDO(o -> {
+        memberlevelMapper.insert(randomLevelDO(o -> {
             o.setLevel(level);
             o.setLevel(level);
             o.setExperience(experience);
             o.setExperience(experience);
             o.setName(name);
             o.setName(name);
         }));
         }));
-        List<MemberLevelDO> list = levelMapper.selectList();
+        List<MemberLevelDO> list = memberlevelMapper.selectList();
 
 
         // 调用,校验异常
         // 调用,校验异常
         assertServiceException(() -> levelService.validateExperienceOutRange(list, id, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level);
         assertServiceException(() -> levelService.validateExperienceOutRange(list, id, level + 1, experience - 1), LEVEL_EXPERIENCE_MIN, name, level);

+ 6 - 0
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImplTest.java

@@ -7,7 +7,9 @@ import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagPageReqVO
 import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO;
 import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReqVO;
 import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO;
 import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO;
 import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper;
 import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper;
+import cn.iocoder.yudao.module.member.service.user.MemberUserService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.Import;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -22,6 +24,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.TAG_NOT_EXISTS;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.TAG_NOT_EXISTS;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 
+// TODO 芋艿:完全 review 完,在去 review 单测
 /**
 /**
  * {@link MemberTagServiceImpl} 的单元测试类
  * {@link MemberTagServiceImpl} 的单元测试类
  *
  *
@@ -36,6 +39,9 @@ public class MemberTagServiceImplTest extends BaseDbUnitTest {
     @Resource
     @Resource
     private MemberTagMapper tagMapper;
     private MemberTagMapper tagMapper;
 
 
+    @MockBean
+    private MemberUserService memberUserService;
+
     @Test
     @Test
     public void testCreateTag_success() {
     public void testCreateTag_success() {
         // 准备参数
         // 准备参数

+ 2 - 0
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImplTest.java

@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
 import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
 import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
 import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl;
 import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl;
 import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
 import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.Import;
@@ -92,6 +93,7 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest {
 //    }
 //    }
 
 
     @Test
     @Test
+    @Disabled // TODO 芋艿:后续再修复
     public void updateMobile_success(){
     public void updateMobile_success(){
         // mock数据
         // mock数据
         String oldMobile = randomNumbers(11);
         String oldMobile = randomNumbers(11);

+ 5 - 4
yudao-module-member/yudao-module-member-biz/src/test/resources/sql/create_tables.sql

@@ -63,7 +63,7 @@ CREATE TABLE IF NOT EXISTS "member_level"
     "name"           varchar  NOT NULL,
     "name"           varchar  NOT NULL,
     "experience"     int      NOT NULL,
     "experience"     int      NOT NULL,
     "level"          int      NOT NULL,
     "level"          int      NOT NULL,
-    "discount"       int      NOT NULL,
+    "discount_percent"       int      NOT NULL,
     "icon"           varchar  NOT NULL,
     "icon"           varchar  NOT NULL,
     "background_url" varchar  NOT NULL,
     "background_url" varchar  NOT NULL,
     "creator"        varchar           DEFAULT '',
     "creator"        varchar           DEFAULT '',
@@ -72,7 +72,7 @@ CREATE TABLE IF NOT EXISTS "member_level"
     "update_time"    datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     "update_time"    datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     "deleted"        bit      NOT NULL DEFAULT FALSE,
     "deleted"        bit      NOT NULL DEFAULT FALSE,
     "tenant_id"      bigint   not null default '0',
     "tenant_id"      bigint   not null default '0',
-    "status"         int      NOT NULL,
+    "status" tinyint NOT NULL DEFAULT '0',
     PRIMARY KEY ("id")
     PRIMARY KEY ("id")
 ) COMMENT '会员等级';
 ) COMMENT '会员等级';
 
 
@@ -81,7 +81,7 @@ CREATE TABLE IF NOT EXISTS "member_group"
     "id"          bigint   NOT NULL GENERATED BY DEFAULT AS IDENTITY,
     "id"          bigint   NOT NULL GENERATED BY DEFAULT AS IDENTITY,
     "name"        varchar  NOT NULL,
     "name"        varchar  NOT NULL,
     "remark"      varchar  NOT NULL,
     "remark"      varchar  NOT NULL,
-    "status"      varchar  NOT NULL,
+    "status" tinyint NOT NULL DEFAULT '0',
     "creator"     varchar           DEFAULT '',
     "creator"     varchar           DEFAULT '',
     "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
     "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
     "updater"     varchar           DEFAULT '',
     "updater"     varchar           DEFAULT '',
@@ -90,6 +90,7 @@ CREATE TABLE IF NOT EXISTS "member_group"
     "tenant_id"      bigint   not null default '0',
     "tenant_id"      bigint   not null default '0',
     PRIMARY KEY ("id")
     PRIMARY KEY ("id")
 ) COMMENT '用户分组';
 ) COMMENT '用户分组';
+
 CREATE TABLE IF NOT EXISTS "member_brokerage_record"
 CREATE TABLE IF NOT EXISTS "member_brokerage_record"
 (
 (
     "id"            int      NOT NULL GENERATED BY DEFAULT AS IDENTITY,
     "id"            int      NOT NULL GENERATED BY DEFAULT AS IDENTITY,
@@ -110,4 +111,4 @@ CREATE TABLE IF NOT EXISTS "member_brokerage_record"
     "deleted"       bit      NOT NULL DEFAULT FALSE,
     "deleted"       bit      NOT NULL DEFAULT FALSE,
     "tenant_id"      bigint   not null default '0',
     "tenant_id"      bigint   not null default '0',
     PRIMARY KEY ("id")
     PRIMARY KEY ("id")
-) COMMENT '佣金记录';
+) COMMENT '佣金记录';

+ 2 - 0
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/menu/MpMenuConvert.java

@@ -40,6 +40,8 @@ public interface MpMenuConvert {
     @Mappings({
     @Mappings({
             @Mapping(source = "menuKey", target = "key"),
             @Mapping(source = "menuKey", target = "key"),
             @Mapping(source = "children", target = "subButtons"),
             @Mapping(source = "children", target = "subButtons"),
+            @Mapping(source = "miniProgramAppId", target = "appId"),
+            @Mapping(source = "miniProgramPagePath", target = "pagePath"),
     })
     })
     WxMenuButton convert(MpMenuSaveReqVO.Menu bean);
     WxMenuButton convert(MpMenuSaveReqVO.Menu bean);
 
 

+ 2 - 1
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java

@@ -345,7 +345,8 @@ public class PayOrderServiceImpl implements PayOrderService {
                         .channelId(channel.getId()).channelCode(channel.getCode())
                         .channelId(channel.getId()).channelCode(channel.getCode())
                         .successTime(notify.getSuccessTime()).extensionId(orderExtension.getId()).no(orderExtension.getNo())
                         .successTime(notify.getSuccessTime()).extensionId(orderExtension.getId()).no(orderExtension.getNo())
                         .channelOrderNo(notify.getChannelOrderNo()).channelUserId(notify.getChannelUserId())
                         .channelOrderNo(notify.getChannelOrderNo()).channelUserId(notify.getChannelUserId())
-                        .channelFeeRate(channel.getFeeRate()).channelFeePrice(MoneyUtils.calculateRatePrice(order.getPrice(), channel.getFeeRate()))
+                        .channelFeeRate(channel.getFeeRate())
+		                .channelFeePrice(MoneyUtils.calculateRatePrice(order.getPrice(), channel.getFeeRate()))
                         .build());
                         .build());
         if (updateCounts == 0) { // 校验状态,必须是待支付
         if (updateCounts == 0) { // 校验状态,必须是待支付
             throw exception(ORDER_STATUS_IS_NOT_WAITING);
             throw exception(ORDER_STATUS_IS_NOT_WAITING);

+ 16 - 4
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/util/MoneyUtils.java

@@ -1,5 +1,7 @@
 package cn.iocoder.yudao.module.pay.util;
 package cn.iocoder.yudao.module.pay.util;
 
 
+import cn.hutool.core.util.NumberUtil;
+
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
 
 
@@ -18,10 +20,20 @@ public class MoneyUtils {
      * @return 百分比金额
      * @return 百分比金额
      */
      */
     public static Integer calculateRatePrice(Integer price, Double rate) {
     public static Integer calculateRatePrice(Integer price, Double rate) {
-        return new BigDecimal(price)
-                .multiply(BigDecimal.valueOf(rate)) // 乘以
-                .setScale(0, RoundingMode.HALF_UP) // 四舍五入
-                .intValue();
+        return calculateRatePrice(price, rate, 0, RoundingMode.HALF_UP).intValue();
     }
     }
 
 
+	/**
+	 * 计算百分比金额
+	 *
+	 * @param price 金额
+	 * @param rate 百分比,例如说 56.77% 则传入 56.77
+	 * @param scale 保留小数位数
+	 * @param roundingMode 舍入模式
+	 */
+	public static BigDecimal calculateRatePrice(Number price, Number rate, int scale, RoundingMode roundingMode) {
+		return NumberUtil.toBigDecimal(price).multiply(NumberUtil.toBigDecimal(rate)) // 乘以
+				.divide(BigDecimal.valueOf(100), scale, roundingMode); // 除以 100
+	}
+
 }
 }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java

@@ -197,7 +197,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
         role100.setTenantId(dbTenant.getId());
         role100.setTenantId(dbTenant.getId());
         RoleDO role101 = randomPojo(RoleDO.class, o -> o.setId(101L));
         RoleDO role101 = randomPojo(RoleDO.class, o -> o.setId(101L));
         role101.setTenantId(dbTenant.getId());
         role101.setTenantId(dbTenant.getId());
-        when(roleService.getRoleListByStatus(isNull())).thenReturn(asList(role100, role101));
+        when(roleService.getRoleList()).thenReturn(asList(role100, role101));
         // mock 每个角色的权限
         // mock 每个角色的权限
         when(permissionService.getRoleMenuListByRoleId(eq(101L))).thenReturn(asSet(201L, 202L));
         when(permissionService.getRoleMenuListByRoleId(eq(101L))).thenReturn(asSet(201L, 202L));
 
 

+ 1 - 4
yudao-server/pom.xml

@@ -111,10 +111,7 @@
             <plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>2.7.14</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 -->
-                <configuration>
-                    <fork>true</fork>
-                </configuration>
+                <version>${spring.boot.version}</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <goals>
                         <goals>

+ 4 - 4
yudao-ui-admin/src/components/Crontab/day.vue

@@ -103,25 +103,25 @@ export default {
 		},
 		},
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'day', this.cycleTotal);
 				this.$emit('update', 'day', this.cycleTotal);
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'day', this.averageTotal);
 				this.$emit('update', 'day', this.averageTotal);
 			}
 			}
 		},
 		},
 		// 最近工作日值变化时
 		// 最近工作日值变化时
 		workdayChange() {
 		workdayChange() {
-			if (this.radioValue === '5') {
+			if (this.radioValue === 5) {
 				this.$emit('update', 'day', this.workdayCheck + 'W');
 				this.$emit('update', 'day', this.workdayCheck + 'W');
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '7') {
+			if (this.radioValue === 7) {
 				this.$emit('update', 'day', this.checkboxString);
 				this.$emit('update', 'day', this.checkboxString);
 			}
 			}
 		}
 		}

+ 3 - 3
yudao-ui-admin/src/components/Crontab/hour.vue

@@ -68,19 +68,19 @@ export default {
 		},
 		},
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '2') {
+			if (this.radioValue === 2) {
 				this.$emit('update', 'hour', this.cycleTotal);
 				this.$emit('update', 'hour', this.cycleTotal);
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'hour', this.averageTotal);
 				this.$emit('update', 'hour', this.averageTotal);
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'hour', this.checkboxString);
 				this.$emit('update', 'hour', this.checkboxString);
 			}
 			}
 		}
 		}

+ 3 - 3
yudao-ui-admin/src/components/Crontab/min.vue

@@ -69,19 +69,19 @@ export default {
 		},
 		},
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '2') {
+			if (this.radioValue === 2) {
 				this.$emit('update', 'min', this.cycleTotal, 'min');
 				this.$emit('update', 'min', this.cycleTotal, 'min');
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'min', this.averageTotal, 'min');
 				this.$emit('update', 'min', this.averageTotal, 'min');
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'min', this.checkboxString, 'min');
 				this.$emit('update', 'min', this.checkboxString, 'min');
 			}
 			}
 		},
 		},

+ 3 - 3
yudao-ui-admin/src/components/Crontab/month.vue

@@ -68,19 +68,19 @@ export default {
 		},
 		},
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '2') {
+			if (this.radioValue === 2) {
 				this.$emit('update', 'month', this.cycleTotal);
 				this.$emit('update', 'month', this.cycleTotal);
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'month', this.averageTotal);
 				this.$emit('update', 'month', this.averageTotal);
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'month', this.checkboxString);
 				this.$emit('update', 'month', this.checkboxString);
 			}
 			}
 		}
 		}

+ 3 - 3
yudao-ui-admin/src/components/Crontab/second.vue

@@ -68,19 +68,19 @@ export default {
 		},
 		},
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '2') {
+			if (this.radioValue === 2) {
 				this.$emit('update', 'second', this.cycleTotal);
 				this.$emit('update', 'second', this.cycleTotal);
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'second', this.averageTotal);
 				this.$emit('update', 'second', this.averageTotal);
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'second', this.checkboxString);
 				this.$emit('update', 'second', this.checkboxString);
 			}
 			}
 		}
 		}

+ 4 - 4
yudao-ui-admin/src/components/Crontab/week.vue

@@ -144,25 +144,25 @@ export default {
 
 
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'week', this.cycleTotal);
 				this.$emit('update', 'week', this.cycleTotal);
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'week', this.averageTotal);
 				this.$emit('update', 'week', this.averageTotal);
 			}
 			}
 		},
 		},
 		// 最近工作日值变化时
 		// 最近工作日值变化时
 		weekdayChange() {
 		weekdayChange() {
-			if (this.radioValue === '5') {
+			if (this.radioValue === 5) {
 				this.$emit('update', 'week', this.weekday + 'L');
 				this.$emit('update', 'week', this.weekday + 'L');
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '6') {
+			if (this.radioValue === 6) {
 				this.$emit('update', 'week', this.checkboxString);
 				this.$emit('update', 'week', this.checkboxString);
 			}
 			}
 		},
 		},

+ 3 - 3
yudao-ui-admin/src/components/Crontab/year.vue

@@ -79,19 +79,19 @@ export default {
 		},
 		},
 		// 周期两个值变化时
 		// 周期两个值变化时
 		cycleChange() {
 		cycleChange() {
-			if (this.radioValue === '3') {
+			if (this.radioValue === 3) {
 				this.$emit('update', 'year', this.cycleTotal);
 				this.$emit('update', 'year', this.cycleTotal);
 			}
 			}
 		},
 		},
 		// 平均两个值变化时
 		// 平均两个值变化时
 		averageChange() {
 		averageChange() {
-			if (this.radioValue === '4') {
+			if (this.radioValue === 4) {
 				this.$emit('update', 'year', this.averageTotal);
 				this.$emit('update', 'year', this.averageTotal);
 			}
 			}
 		},
 		},
 		// checkbox值变化时
 		// checkbox值变化时
 		checkboxChange() {
 		checkboxChange() {
-			if (this.radioValue === '5') {
+			if (this.radioValue === 5) {
 				this.$emit('update', 'year', this.checkboxString);
 				this.$emit('update', 'year', this.checkboxString);
 			}
 			}
 		}
 		}