Forráskód Böngészése

修复商户退款失败问题。引入积分、身价相关类

Ben 11 hónapja
szülő
commit
49e336628c
43 módosított fájl, 1559 hozzáadás és 5 törlés
  1. 38 0
      feifan-module-distri/feifan-module-distri-api/.gitignore
  2. 30 0
      feifan-module-distri/feifan-module-distri-api/pom.xml
  3. 14 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/constant/DistriConstants.java
  4. 44 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  5. 28 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  6. 117 0
      feifan-module-distri/feifan-module-distri-biz/pom.xml
  7. 42 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogPageReqVO.java
  8. 51 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogRespVO.java
  9. 44 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogSaveReqVO.java
  10. 69 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/duser/DuserDO.java
  11. 49 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/integral/IntegralDO.java
  12. 40 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/ptprofit/PtProfitDO.java
  13. 58 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/ptprofitlog/PtProfitLogDO.java
  14. 25 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/integral/IntegralMapper.java
  15. 38 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofit/PtProfitMapper.java
  16. 33 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java
  17. 82 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  18. 155 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  19. 83 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java
  20. 163 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java
  21. 29 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/duser/DuserMapper.xml
  22. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/integral/IntegralMapper.xml
  23. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ordercalc/OrderCalcMapper.xml
  24. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/orderpercentage/OrderPercentageMapper.xml
  25. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/partitionbrothers/PartitionBrothersMapper.xml
  26. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/partitioncrash/PartitionCrashMapper.xml
  27. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/partitionson/PartitionSonMapper.xml
  28. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptprofit/PtProfitMapper.xml
  29. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptprofitlog/PtProfitLogMapper.xml
  30. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharelink/ShareLinkMapper.xml
  31. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharelinkregister/ShareLinkRegisterMapper.xml
  32. 76 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml
  33. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/socialstatus/SocialStatusMapper.xml
  34. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/source/SourceMapper.xml
  35. 31 0
      feifan-module-distri/pom.xml
  36. 7 0
      feifan-module-distri/src/main/java/cn/newfeifan/zx/Main.java
  37. 6 0
      feifan-module-mall/feifan-module-trade-biz/pom.xml
  38. 12 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java
  39. 35 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleServiceImpl.java
  40. 9 4
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/dal/mysql/order/PayOrderMapper.java
  41. 5 0
      feifan-server/pom.xml
  42. 1 1
      feifan-server/src/main/resources/application.yaml
  43. 1 0
      pom.xml

+ 38 - 0
feifan-module-distri/feifan-module-distri-api/.gitignore

@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store

+ 30 - 0
feifan-module-distri/feifan-module-distri-api/pom.xml

@@ -0,0 +1,30 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>cn.newfeifan.zx</groupId>
+        <artifactId>feifan-module-distri</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <name>${project.artifactId}</name> <!-- 3. 新增 name 为 ${project.artifactId} -->
+    <artifactId>feifan-module-distri-api</artifactId>
+    <packaging>jar</packaging>
+
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+
+
+    <description> <!-- 4. 新增 description 为该模块的描述 -->
+        营销模块 模块,主要实现 身价, 积分, 分销计算等功能。
+    </description>
+    <dependencies>  <!-- 5. 新增 yudao-common 依赖 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-common</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 14 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/constant/DistriConstants.java

@@ -0,0 +1,14 @@
+package cn.newfeifan.mall.module.distri.constant;
+
+import java.math.BigDecimal;
+
+public class DistriConstants {
+    // ========== 分销信息商户信息 1-002-029-000 ==========
+    public static final Integer PERCENT = 10000;//积分数据库中的值,比页面显示的值,大了此倍数
+
+    // 数据库中,积分比金钱大的倍数,即钱转成积分要乘于此参数
+    public static final Integer MONEY2INTEGRAL = PERCENT/100;
+    // MONEY2INTEGRAL的BigDecimal版本
+    public static final BigDecimal MONEY2INTEGRAL_BIG_DECIMAL = new BigDecimal(Integer.parseInt(MONEY2INTEGRAL.toString()));
+
+}

+ 44 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java

@@ -0,0 +1,44 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum CaclEnum {
+    PLATFORM_SERVICE_FEE(1, "平台服务费"),
+    PLATFORM_REVENUE(2, "平台收益"),
+    RECOMMENDED_PERSON_QUOTA(3, "推荐人额度"),
+    DIRECT_REFERRAL_QUOTA(4, "直推人额度"),
+    TOGETHER_AWARD(5, "合赢奖"),
+    HIGH_QUOTA(6, "最高可以获得积分"),
+    SMALL_QUOTA_CRASH(7, "小区额度分配"),
+    AFTER_CRASH_CALC_PT_TOTAL_QUOTA(8, "碰撞后计算平台总收益"),
+    ORDER_PAY_INTEGRAL(9,"购物使用积分"),//支付了一部分积分作购物用
+    ORDER_REFUND_INTEGRAL(10,"订单退款,退回积分"),//订单已支付,用户退款申请通过,则退回商品项使用的积分
+    ORDER_INTEGRAL_UNFREEZE(11,"订单积分到账"),//购物收货7天后,冻结积分变为可用积分
+    ORDER_GET_FREEZE_INTEGRAL(12,"购物返积分"),//购物获得冻结积分
+    ORDER_CANCEL_BY_USER_REFUND_INTEGRAL(13,"取消订单,退回积分"),//用户手动取消未支付订单,退回购物使用的积分
+    ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL(14,"订单超时未支付,退回积分"),//订单超时未支付,退回购物使用的积分
+    ORDER_REFUND_CANCEL_INTEGRAL(15,"订单退款,减少冻结积分"),//订单已支付,用户退款申请通过,则减少之前给用户的冻结积分
+    ;
+
+    /**
+     * 来源
+     */
+    private final Integer type;
+    /**
+     * 类型的名字
+     */
+    private final String name;
+
+    public static CaclEnum getCaclEnumByValue(int value) {
+        for (CaclEnum caclEnum : CaclEnum.values()) {
+            if (caclEnum.getType() == value) {
+                return caclEnum;
+            }
+        }
+        return null;
+    }
+
+}

+ 28 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java

@@ -0,0 +1,28 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+import cn.newfeifan.mall.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+    // ========== 分销信息商户信息 1-002-029-000 ==========
+    ErrorCode SHARE_PATH_NOT_EXISTS = new ErrorCode(1_002_030_000, "分销路径不存在");
+    ErrorCode SOCIAL_STATUS_NOT_EXISTS = new ErrorCode(1_002_030_001, "身价不存在");
+    ErrorCode SOURCE_NOT_EXISTS = new ErrorCode(1_002_030_002, "分销来源不存在");
+    ErrorCode INTEGRAL_NOT_EXISTS = new ErrorCode(1_002_030_003, "积分表不存在");
+    ErrorCode ORDER_CALC_NOT_EXISTS = new ErrorCode(1_002_030_004, "计算不存在");
+    ErrorCode ORDER_PERCENTAGE_NOT_EXISTS = new ErrorCode(1_002_030_005, "订单计算不存在");
+    ErrorCode PARTITION_BROTHERS_NOT_EXISTS = new ErrorCode(1_002_030_006, "兄弟分区不存在");
+    ErrorCode PARTITION_SON_NOT_EXISTS = new ErrorCode(1_002_030_007, "儿子分区不存在");
+    ErrorCode USER_NOT_EXISTS = new ErrorCode(1_002_030_008, "分销用户不存在");
+    ErrorCode DUSER_NOT_EXISTS = new ErrorCode(1_002_030_009, "分销用户不存在");
+    ErrorCode IS_EXISTS = new ErrorCode(1_002_030_010, "当前推销人已经存在上级");
+    ErrorCode PARTITION_CRASH_NOT_EXISTS = new ErrorCode(1_002_030_011, "碰撞分区不存在");
+    ErrorCode PT_PROFIT_NOT_EXISTS = new ErrorCode(1_002_030_012, "平台利润不存在");
+    ErrorCode PT_PROFIT_LOG_NOT_EXISTS = new ErrorCode(1_002_030_013, "平台利润日志表不存在");
+    ErrorCode PERCENT_LARGE_ONE_HUNDRED = new ErrorCode(1_002_030_014, "百分比总和超过100");
+    ErrorCode HAS_PARENT = new ErrorCode(1_002_030_015, "该直推人已经有推荐人, 故不能增加");
+
+    // ========== 分享链接信息 1-003-030-000 ==========
+    ErrorCode SHARE_LINK_NOT_EXISTS = new ErrorCode(1_003_031_001, "分享链接不存在");
+    ErrorCode SHARE_LINK_REGISTER_NOT_EXISTS = new ErrorCode(1_003_031_002, "通过分享链接,新注册用户不存在");
+
+}

+ 117 - 0
feifan-module-distri/feifan-module-distri-biz/pom.xml

@@ -0,0 +1,117 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>cn.newfeifan.zx</groupId>
+        <artifactId>feifan-module-distri</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <name>${project.artifactId}</name>
+    <artifactId>feifan-module-distri-biz</artifactId>
+    <packaging>jar</packaging>
+
+
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+
+
+    <description>
+        营销模块 模块,主要实现 身价, 积分, 分销计算等功能。
+    </description>
+    <dependencies>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-distri-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-system-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-infra-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-system-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-member-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-product-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+
+
+        <!-- 业务组件 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-biz-operatelog</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-biz-tenant</artifactId>
+        </dependency>
+
+        <!-- Web 相关 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <!-- DB 相关 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-mybatis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-redis</artifactId>
+        </dependency>
+
+        <!-- 消息队列相关 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-mq</artifactId>
+        </dependency>
+
+        <!-- Test 测试相关 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- 工具类相关 -->
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-spring-boot-starter-biz-ip</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 42 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogPageReqVO.java

@@ -0,0 +1,42 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 平台利润记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PtProfitLogPageReqVO extends PageParam {
+
+    @Schema(description = "增加金额")
+    private Long amount;
+
+    @Schema(description = "增加后金额")
+    private Long afterAmount;
+
+    @Schema(description = "收益类型 1:平台服务器费 2:平台收益 3用户下单返回毛利额度 4直推人额度 5合赢奖", example = "2")
+    private Integer profitStatus;
+
+    @Schema(description = "用户ID , 只有收益类型为 3,4才有值", example = "6982")
+    private Long userId;
+
+    @Schema(description = "订单Id", example = "26464")
+    private Long orderId;
+
+    @Schema(description = "订单编号")
+    private String orderNo;
+
+    @Schema(description = "计算百分比模板")
+    private String percentTemplate;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 51 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogRespVO.java

@@ -0,0 +1,51 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 平台利润记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PtProfitLogRespVO {
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12046")
+    @ExcelProperty("用户编号")
+    private Long id;
+
+    @Schema(description = "增加金额")
+    @ExcelProperty("增加金额")
+    private Long amount;
+
+    @Schema(description = "增加后金额")
+    @ExcelProperty("增加后金额")
+    private Long afterAmount;
+
+    @Schema(description = "收益类型 1:平台服务器费 2:平台收益 3用户下单返回毛利额度 4直推人额度 5合赢奖", example = "2")
+    @ExcelProperty("收益类型 1:平台服务器费 2:平台收益")
+    private Integer profitStatus;
+
+    @Schema(description = "收益类型名称")
+    private String profitStatusName;
+
+    @Schema(description = "用户ID , 只有收益类型为 3,4才有值", example = "6982")
+    private Long userId;
+
+    @Schema(description = "订单Id", example = "26464")
+    @ExcelProperty("订单Id")
+    private Long orderId;
+
+    @Schema(description = "订单编号")
+    @ExcelProperty("订单编号")
+    private String orderNo;
+
+    @Schema(description = "计算百分比模板")
+    @ExcelProperty("计算百分比模板")
+    private String percentTemplate;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+}

+ 44 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogSaveReqVO.java

@@ -0,0 +1,44 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+
+@Schema(description = "管理后台 - 平台利润记录新增/修改 Request VO")
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class PtProfitLogSaveReqVO {
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12046")
+    private Long id;
+
+    @Schema(description = "增加金额")
+    private Long amount;
+
+    @Schema(description = "增加后金额")
+    private Long afterAmount;
+
+    @Schema(description = "变动的冻结积分")
+    private Long freezeAmount;
+
+    @Schema(description = "变动后的冻结积分值")
+    private Long afterFreezeAmount;
+
+    @Schema(description = "收益类型 1:平台服务器费 2:平台收益 3推荐人额度 4直推人额度 5合赢奖 6最高可以获得积分", example = "2")
+    private Integer profitStatus;
+
+    @Schema(description = "用户ID , 只有收益类型为 3,4才有值", example = "6982")
+    private Long userId;
+
+    @Schema(description = "订单Id", example = "26464")
+    private Long orderId;
+
+    @Schema(description = "订单编号")
+    private String orderNo;
+
+    @Schema(description = "计算百分比模板")
+    private String percentTemplate;
+
+}

+ 69 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/duser/DuserDO.java

@@ -0,0 +1,69 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.duser;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 推荐用户 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_duser")
+@KeySequence("distri_duser_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DuserDO extends BaseDO {
+
+    /**
+     * 用户编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 团队人员ID
+     */
+    private Long userId;
+    /**
+     * 团队人员姓名
+     */
+    private String name;
+    /**
+     * 团队人员手机号码
+     */
+    private String mobile;
+    /**
+     * 团队人员来源
+     */
+    private Integer source;
+    /**
+     * 团队用户当前积分
+     */
+    private Long integralId;
+    /**
+     * 团队用户当前身价(等级)
+     */
+    private Integer socialStatus;
+    /**
+     * 团队用户当前点数
+     */
+    private Long socialStatusPoint;
+    /**
+     * 身价距下一级所需点数
+     */
+    private Long socialUpNeed;
+    /**
+     * 用户类型
+     */
+    private Long categoryId;
+
+    private String nickName;
+
+}

+ 49 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/integral/IntegralDO.java

@@ -0,0 +1,49 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.integral;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 推荐用户积分 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_integral")
+@KeySequence("distri_integral_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IntegralDO extends BaseDO {
+
+    /**
+     * 用户编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 当前积分
+     */
+    private Long currentQuota;
+    /**
+     * 冻结积分
+     */
+    private Long freezeQuota;
+    /**
+     * 用户类型
+     */
+    private Long categoryId;
+
+    private Long highQuota;
+
+    private String name;
+
+    private String nickName;
+}

+ 40 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/ptprofit/PtProfitDO.java

@@ -0,0 +1,40 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台利润 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_pt_profit")
+@KeySequence("distri_pt_profit_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtProfitDO extends BaseDO {
+
+    /**
+     * 用户编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 平台服务费(毛利下的百分比收益)
+     */
+    private Long ptAdd;
+    /**
+     * 平台收益(0.3888 之外的收益)
+     */
+    private Long ptGrossAdd;
+    /**
+     * 平台总收益
+     */
+    private Long ptTotalAdd;
+
+}

+ 58 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/dataobject/ptprofitlog/PtProfitLogDO.java

@@ -0,0 +1,58 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台利润记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_pt_profit_log")
+@KeySequence("distri_pt_profit_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtProfitLogDO extends BaseDO {
+
+    /**
+     * 用户编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 增加金额
+     */
+    private Long amount;
+    /**
+     * 增加后金额
+     */
+    private Long afterAmount;
+    /**
+     * 收益类型 1:平台服务器费 2:平台收益 3用户下单返回毛利额度 4直推人额度 5合赢奖
+     */
+    private Integer profitStatus;
+    /**
+     * 用户ID , 只有收益类型为 3,4才有值
+     */
+    private Long userId;
+
+    /**
+     * 订单Id
+     */
+    private Long orderId;
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+    /**
+     * 计算百分比模板
+     */
+    private String percentTemplate;
+
+
+}

+ 25 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/integral/IntegralMapper.java

@@ -0,0 +1,25 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.integral;
+
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 推荐用户积分 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface IntegralMapper extends BaseMapperX<IntegralDO> {
+
+//    default PageResult<IntegralDO> selectPage(IntegralPageReqVO reqVO) {
+//        return selectPage(reqVO, new LambdaQueryWrapperX<IntegralDO>()
+//                .eqIfPresent(IntegralDO::getUserId, reqVO.getUserId())
+//                .eqIfPresent(IntegralDO::getCurrentQuota, reqVO.getCurrentQuota())
+//                .eqIfPresent(IntegralDO::getFreezeQuota, reqVO.getFreezeQuota())
+//                .eqIfPresent(IntegralDO::getCategoryId, reqVO.getCategoryId())
+//                .betweenIfPresent(IntegralDO::getCreateTime, reqVO.getCreateTime())
+//                .orderByDesc(IntegralDO::getId));
+//    }
+
+}

+ 38 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofit/PtProfitMapper.java

@@ -0,0 +1,38 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.ptprofit;
+
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.Map;
+
+/**
+ * 平台利润 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface PtProfitMapper extends BaseMapperX<PtProfitDO> {
+
+//    default PageResult<PtProfitDO> selectPage(PtProfitPageReqVO reqVO) {
+//        return selectPage(reqVO, new LambdaQueryWrapperX<PtProfitDO>()
+//                .eqIfPresent(PtProfitDO::getPtAdd, reqVO.getPtAdd())
+//                .eqIfPresent(PtProfitDO::getPtGrossAdd, reqVO.getPtGrossAdd())
+//                .eqIfPresent(PtProfitDO::getPtTotalAdd, reqVO.getPtTotalAdd())
+//                .betweenIfPresent(PtProfitDO::getCreateTime, reqVO.getCreateTime())
+//                .orderByDesc(PtProfitDO::getId));
+//    }
+
+    @Update("UPDATE distri_integral SET current_quota = current_quota + #{amount},freeze_quota = freeze_quota + #{freeze_mount} WHERE (current_quota + #{amount2})>=0 and user_id=#{userId} and (freeze_quota + #{freeze_mount2})>=0 ")
+    int updateUserIntegral(@Param("amount") Long amount,
+                           @Param("amount2") Long amount2,
+                           @Param("freeze_mount") Long freezeAmount,
+                           @Param("freeze_mount2") Long freezeAmount2,
+                           @Param("userId") Long userId);
+
+    @Select("SELECT current_quota,freeze_quota FROM distri_integral WHERE user_id = #{userId}")
+    Map<String, Object> selectUserIntegral(@Param("userId") Long userId);
+}

+ 33 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java

@@ -0,0 +1,33 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.ptprofitlog;
+
+
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogPageReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 平台利润记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
+    Object selectPage(PtProfitLogPageReqVO pageReqVO);
+
+//    default PageResult<PtProfitLogDO> selectPage(PtProfitLogPageReqVO reqVO) {
+//        LambdaQueryWrapperX<PtProfitLogDO> queryWrapper = new LambdaQueryWrapperX<PtProfitLogDO>()
+//                .eqIfPresent(PtProfitLogDO::getAmount, reqVO.getAmount())
+//                .eqIfPresent(PtProfitLogDO::getAfterAmount, reqVO.getAfterAmount())
+//                .eqIfPresent(PtProfitLogDO::getOrderId, reqVO.getOrderId())
+//                .eqIfPresent(PtProfitLogDO::getPercentTemplate, reqVO.getPercentTemplate())
+//                .eqIfPresent(PtProfitLogDO::getUserId, reqVO.getUserId())
+//                .orderByDesc(PtProfitLogDO::getCreateTime);
+//        if(reqVO.getIsFreeze()){
+//            queryWrapper.isNotNull(PtProfitLogDO::getAmount);
+//        }else{
+//            queryWrapper.isNotNull(PtProfitLogDO::getFreezeAmount);
+//        }
+//        return selectPage(reqVO, queryWrapper);
+//    }
+}

+ 82 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java

@@ -0,0 +1,82 @@
+package cn.newfeifan.mall.module.distri.service.integral;
+
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+
+/**
+ * 推荐用户积分 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface IntegralService {
+
+//    /**
+//     * 创建推荐用户积分
+//     *
+//     * @param createReqVO 创建信息
+//     * @return 编号
+//     */
+//    Long createIntegral(@Valid IntegralSaveReqVO createReqVO);
+//
+//    /**
+//     * 更新推荐用户积分
+//     *
+//     * @param updateReqVO 更新信息
+//     */
+//    void updateIntegral(@Valid IntegralSaveReqVO updateReqVO);
+//
+//    /**
+//     * 删除推荐用户积分
+//     *
+//     * @param id 编号
+//     */
+//    void deleteIntegral(Long id);
+//
+//    /**
+//     * 获得推荐用户积分
+//     *
+//     * @param id 编号
+//     * @return 推荐用户积分
+//     */
+//    IntegralDO getIntegral(Long id);
+//
+//    /**
+//     * 获得推荐用户积分分页
+//     *
+//     * @param pageReqVO 分页查询
+//     * @return 推荐用户积分分页
+//     */
+//    PageResult<IntegralDO> getIntegralPage(IntegralPageReqVO pageReqVO);
+//
+//    /**
+//     * 根据用户ID查询是否有钱包
+//     * @param descendant
+//     * @return
+//     */
+//    IntegralDO selectByUser(Long descendant);
+
+
+    /**
+     * 修改用户积分
+     *
+     * @param userId 要修改积分的用户
+     * @param caclEnum 导致积分变化的事件类型枚举
+     * @param amount 用户积分变化金额,可为负数
+     * @param freezeAmount 用户冻结积分变化金额,可为负数
+     * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
+     */
+    Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Long amount, Long freezeAmount,
+                               Long tradeOrderId,
+                               String orderNum
+                               );
+
+//    /**
+//     * 修改用户身价
+//     * @param userId 用户ID
+//     * @param socialStatusUpdateEnum 身价变动类别
+//     * @param socialStatusPoint 身价变化值
+//     * @param ObjectId 导致身价变动的对应业务对象ID,如订单ID、收藏记录ID、新注册用户ID等
+//     * @return 升级后的身价名称,如果返回null,表明没升级
+//     */
+//    String updateUserSocialStatus(Long userId, SocialStatusUpdateEnum socialStatusUpdateEnum, Integer socialStatusPoint,
+//                                   Long ObjectId);
+}

+ 155 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java

@@ -0,0 +1,155 @@
+package cn.newfeifan.mall.module.distri.service.integral;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 推荐用户积分 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class IntegralServiceImpl implements IntegralService {
+
+//    @Resource
+//    private DuserMapper duserMapper;
+
+//    @Resource
+//    private IntegralMapper integralMapper;
+
+    @Resource
+    private PtProfitMapper ptProfitMapper;
+
+    @Resource
+    private PtProfitLogService ptProfitLogService;
+
+//    @Override
+//    public Long createIntegral(IntegralSaveReqVO createReqVO) {
+//        // 插入
+//        IntegralDO integral = BeanUtils.toBean(createReqVO, IntegralDO.class);
+//        integralMapper.insert(integral);
+//        // 返回
+//        return integral.getId();
+//    }
+//
+//    @Override
+//    public void updateIntegral(IntegralSaveReqVO updateReqVO) {
+//        // 校验存在
+//        validateIntegralExists(updateReqVO.getId());
+//        // 更新
+//        IntegralDO updateObj = BeanUtils.toBean(updateReqVO, IntegralDO.class);
+//        integralMapper.updateById(updateObj);
+//    }
+//
+//    @Override
+//    public void deleteIntegral(Long id) {
+//        // 校验存在
+//        validateIntegralExists(id);
+//        // 删除
+//        integralMapper.deleteById(id);
+//    }
+//
+//    private void validateIntegralExists(Long id) {
+//        if (integralMapper.selectById(id) == null) {
+//            throw exception(INTEGRAL_NOT_EXISTS);
+//        }
+//    }
+//
+//    @Override
+//    public IntegralDO getIntegral(Long id) {
+//        return integralMapper.selectOne(new LambdaQueryWrapperX<IntegralDO>().eq(IntegralDO::getUserId,id));
+//    }
+//
+//    @Override
+//    public PageResult<IntegralDO> getIntegralPage(IntegralPageReqVO pageReqVO) {
+//        return integralMapper.selectPage(pageReqVO);
+//    }
+//
+//    @Override
+//    public IntegralDO selectByUser(Long descendant) {
+//        return integralMapper.selectOne(new LambdaQueryWrapper<IntegralDO>().eq(IntegralDO::getUserId, descendant));
+//    }
+
+    /**
+     * add by Ben
+     * 修改用户积分
+     *
+     * @param userId 要修改积分的用户
+     * @param caclEnum 导致积分变化的事件类型枚举
+     * @param amount 用户可用积分变化金额,可为负数
+     * @param freezeAmount 用户冻结积分变化金额,可为负数
+     * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
+     */
+    @Override
+    public Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Long amount, Long freezeAmount,
+                                      Long tradeOrderId,
+                                      String OrderNum
+                                      ) {
+        Boolean success = null;
+
+        //修改用户积分钱包的积分
+        int effectRowNum = ptProfitMapper.updateUserIntegral(amount,amount,freezeAmount,freezeAmount,userId);
+
+        if (effectRowNum==1) {//如果成功修改积分记录
+            success = true;
+
+            //用户修改后的当前可用的钱包余额
+            Long afterAmount = null;
+            //用户修改后的冻结积分钱包余额
+            Long afterFreezeAmount = null;
+
+            //查询用户修改后的积分
+            Map<String, Object> map = ptProfitMapper.selectUserIntegral(userId);
+            Object currentQuotaObj = map.get("current_quota");
+            Object freezeQuotaObj = map.get("freeze_quota");
+
+            afterAmount = (Long)currentQuotaObj;
+            afterFreezeAmount = (Long)freezeQuotaObj;
+
+            if(afterAmount<0||afterFreezeAmount<0){
+                throw new RuntimeException("用户钱包为负数:用户IO为"+userId+"的用户可用钱包为"+afterAmount+",冻结钱包为"+afterFreezeAmount);
+            }
+
+            //记录用户的积分变动日志
+            ptProfitLogService.addMessage(userId, caclEnum, amount, afterAmount,
+                    freezeAmount, afterFreezeAmount,null,tradeOrderId,OrderNum);
+
+        }else if(effectRowNum<1){//如果钱包积分不足,不够抵扣
+            success = false;
+        } else if (effectRowNum>1) {
+//            success = false;
+            throw new RuntimeException("用户IO为"+userId+"的用户钱包不只一个!");
+        }
+
+        return success;
+    }
+
+//
+//    /**
+//     * 修改用户身价
+//     * @param userId 用户ID
+//     * @param socialStatusUpdateEnum 身价变动类别
+//     * @param socialStatusPoint 身价变化值
+//     * @param ObjectId 导致身价变动的对应业务对象ID,如订单ID、收藏记录ID、新注册用户ID等
+//     * @return 升级后的身价名称,如果返回null,表明没升级
+//     */
+//    public String updateUserSocialStatus(Long userId, SocialStatusUpdateEnum socialStatusUpdateEnum, Integer socialStatusPoint,
+//                                   Long ObjectId){
+//        //升级后的身价名称,如果返回null,表明没升级
+//        String newSocialStatusName = null;
+//        //用户身价升了几级
+//        Integer socialStatusUpgradation = 0;
+//
+//        DuserDO duser = duserMapper.selectOne("user_id", userId);
+//        Integer oldSocialStatus = duser.getSocialStatus();//升级前身价等级
+//
+//        return newSocialStatusName;
+//    }
+}

+ 83 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java

@@ -0,0 +1,83 @@
+package cn.newfeifan.mall.module.distri.service.ptprofitlog;
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogPageReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogRespVO;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogSaveReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 平台利润记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface PtProfitLogService {
+
+    /**
+     * 创建平台利润记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPtProfitLog(@Valid PtProfitLogSaveReqVO createReqVO);
+
+    /**
+     * 更新平台利润记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePtProfitLog(@Valid PtProfitLogSaveReqVO updateReqVO);
+
+//    Long createPtProfitLog(PtProfitLogSaveReqVO createReqVO);
+
+    /**
+     * 删除平台利润记录
+     *
+     * @param id 编号
+     */
+    void deletePtProfitLog(Long id);
+
+    /**
+     * 获得平台利润记录
+     *
+     * @param id 编号
+     * @return 平台利润记录
+     */
+    PtProfitLogDO getPtProfitLog(Long id);
+
+    /**
+     * 获得平台利润记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台利润记录分页
+     */
+    PageResult<PtProfitLogRespVO> getPtProfitLogPage(PtProfitLogPageReqVO pageReqVO);
+
+//    PageResult<PtProfitLogRespVO> getPtProfitLogPage(PtProfitLogPageReqVO pageReqVO);
+
+    void saveBatch(List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS);
+
+    //记录用户的积分变动日志
+    void addMessage(Long userId, CaclEnum caclEnum, Integer amount,
+                    Integer afterAmount, Integer freezeAmount,
+                    Integer afterFreezeAmount, String percentTemplate,
+                    Long tradeOrderId,
+                    String OrderNum
+                    );
+
+    void addMessage(Long userId, CaclEnum caclEnum, Long amount, Long afterAmount,
+                    Long freezeAmount, Long afterFreezeAmount,
+                    String percentTemplate,
+                    Long tradeOrderId,
+                    String OrderNum
+    );
+
+    String getYesterdayLog(List<Long> sonsId);
+
+    String getTotalLog(List<Long> sonsId);
+
+}

+ 163 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java

@@ -0,0 +1,163 @@
+package cn.newfeifan.mall.module.distri.service.ptprofitlog;
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogPageReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogRespVO;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogSaveReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitlog.PtProfitLogMapper;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+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 cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.PT_PROFIT_LOG_NOT_EXISTS;
+
+/**
+ * 平台利润记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class PtProfitLogServiceImpl implements PtProfitLogService {
+
+    @Resource
+    private PtProfitLogMapper ptProfitLogMapper;
+
+    @Override
+    public Long createPtProfitLog(PtProfitLogSaveReqVO createReqVO) {
+        // 插入
+        PtProfitLogDO ptProfitLog = BeanUtils.toBean(createReqVO, PtProfitLogDO.class);
+        ptProfitLogMapper.insert(ptProfitLog);
+        // 返回
+        return ptProfitLog.getId();
+    }
+
+    @Override
+    public void updatePtProfitLog(PtProfitLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validatePtProfitLogExists(updateReqVO.getId());
+        // 更新
+        PtProfitLogDO updateObj = BeanUtils.toBean(updateReqVO, PtProfitLogDO.class);
+        ptProfitLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deletePtProfitLog(Long id) {
+        // 校验存在
+        validatePtProfitLogExists(id);
+        // 删除
+        ptProfitLogMapper.deleteById(id);
+    }
+
+    private void validatePtProfitLogExists(Long id) {
+        if (ptProfitLogMapper.selectById(id) == null) {
+            throw exception(PT_PROFIT_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public PtProfitLogDO getPtProfitLog(Long id) {
+        return ptProfitLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<PtProfitLogRespVO> getPtProfitLogPage(PtProfitLogPageReqVO pageReqVO) {
+//        pageReqVO.setUserId(getLoginUserId());
+//        PageResult<PtProfitLogRespVO> result = BeanUtils.toBean(ptProfitLogMapper.selectPage(pageReqVO), PtProfitLogRespVO.class);
+//        for (PtProfitLogRespVO ptProfitLogRespVO : result.getList()) {
+//            ptProfitLogRespVO.setProfitStatusName(Objects.requireNonNull(CaclEnum.getCaclEnumByValue(ptProfitLogRespVO.getProfitStatus())).getName());
+//        }
+
+        PageResult<PtProfitLogRespVO> result = null;
+        return result;
+    }
+
+    @Override
+    public void saveBatch(List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS) {
+        List<PtProfitLogDO> ptProfitLog = BeanUtils.toBean(ptProfitLogSaveReqVOS, PtProfitLogDO.class);
+        ptProfitLogMapper.insertBatch(ptProfitLog);
+    }
+
+    @Override
+    public void addMessage(Long userId, CaclEnum caclEnum, Integer amount, Integer afterAmount, Integer freezeAmount, Integer afterFreezeAmount, String percentTemplate, Long tradeOrderId, String OrderNum) {
+
+    }
+
+    /**
+     * 添加一条用户积分日志消息
+     * @param userId
+     * @param caclEnum
+     * @param amount
+     * @param afterAmount
+     * @param freezeAmount
+     * @param afterFreezeAmount
+     * @param percentTemplate
+     * @param tradeOrderId
+     * @param OrderNum
+     */
+    @Override
+    public void addMessage(Long userId, CaclEnum caclEnum, Long amount, Long afterAmount,
+                           Long freezeAmount, Long afterFreezeAmount,
+                           String percentTemplate,
+                           Long tradeOrderId,
+                           String OrderNum
+    ) {
+        PtProfitLogSaveReqVO ptProfitLog = PtProfitLogSaveReqVO.builder()
+                .afterAmount(afterAmount)
+                .amount(amount)
+                .percentTemplate(percentTemplate)
+                .userId(userId)
+                .profitStatus(caclEnum.getType()).orderId(tradeOrderId).orderNo(OrderNum)
+                .freezeAmount(freezeAmount).afterFreezeAmount(afterFreezeAmount)
+                .build();
+        ptProfitLogMapper.insert(BeanUtils.toBean(ptProfitLog, PtProfitLogDO.class));
+
+    }
+
+
+    @Override
+    public String getYesterdayLog(List<Long> sonsId) {
+
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        // 获取昨天的3点
+        LocalDateTime yesterdayThreeAM = now.minusDays(1).withHour(3).withMinute(0).withSecond(0).withNano(0);
+
+        // 获取今天的3点
+        LocalDateTime todayThreeAM = now.withHour(3).withMinute(0).withSecond(0).withNano(0);
+        if (now.isBefore(todayThreeAM)) {
+            // 如果当前时间在今天的3点之前,调整今天的3点为昨天的3点
+            todayThreeAM = todayThreeAM.minusDays(1);
+        }
+
+        List<PtProfitLogDO> ptProfitLogDOS = ptProfitLogMapper.selectList(new LambdaQueryWrapperX<PtProfitLogDO>()
+                .betweenIfPresent(PtProfitLogDO::getCreateTime, yesterdayThreeAM, todayThreeAM)
+                .eqIfPresent(PtProfitLogDO::getProfitStatus, CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
+                .or().eq(PtProfitLogDO::getProfitStatus, CaclEnum.TOGETHER_AWARD.getType())
+                .in(PtProfitLogDO::getUserId, sonsId));
+        long sum = ptProfitLogDOS.stream().mapToLong(PtProfitLogDO::getAmount).sum();
+
+        return sum + "";
+    }
+
+    @Override
+    public String getTotalLog(List<Long> sonsId) {
+        List<PtProfitLogDO> ptProfitLogDOS = ptProfitLogMapper.selectList(new LambdaQueryWrapperX<PtProfitLogDO>()
+                .eqIfPresent(PtProfitLogDO::getProfitStatus, CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
+                .or().eq(PtProfitLogDO::getProfitStatus, CaclEnum.TOGETHER_AWARD.getType())
+                .in(PtProfitLogDO::getUserId, sonsId));
+        long sum = ptProfitLogDOS.stream().mapToLong(PtProfitLogDO::getAmount).sum();
+
+        return sum + "";
+    }
+
+}

+ 29 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/duser/DuserMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.duser.DuserMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+    <resultMap id="BaseResultMap" type="cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="name" property="name" />
+        <result column="mobile" property="mobile" />
+        <result column="source" property="source" />
+        <result column="social_status" property="socialStatus" />
+        <result column="social_status_kandian" property="socialStatusPoint" />
+        <result column="creator" property="creator" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="deleted" property="deleted" />
+    </resultMap>
+
+    <select id="hasParent" resultType="Integer" >
+        SELECT COUNT(dp) > 0 FROM distri_share_path dp WHERE dp.descendant =  #{distributorId}  AND dp.depth = 1
+    </select>
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/integral/IntegralMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.integral.IntegralMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ordercalc/OrderCalcMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.ordercalc.OrderCalcMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/orderpercentage/OrderPercentageMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.orderpercentage.OrderPercentageMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/partitionbrothers/PartitionBrothersMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.partitionbrothers.PartitionBrothersMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/partitioncrash/PartitionCrashMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.partitioncrash.PartitionCrashMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/partitionson/PartitionSonMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.partitionson.PartitionSonMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptprofit/PtProfitMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptprofitlog/PtProfitLogMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.ptprofitlog.PtProfitLogMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharelink/ShareLinkMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.sharelink.ShareLinkMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharelinkregister/ShareLinkRegisterMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.sharelinkregister.ShareLinkRegisterMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 76 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.sharepath.SharePathMapper">
+
+
+    <!-- 增加节点 -->
+    <insert id="addNode">
+        INSERT INTO distri_share_path (ancestor,
+                                       anc_name,
+                                       anc_nick_name,
+                                       anc_phone,
+                                       descendant,
+                                       desc_name,
+                                       desc_nick_name,
+                                       desc_phone,
+                                       depth, sort)
+        SELECT ancestor,
+               anc_name,
+               anc_nick_name,
+               anc_phone,
+
+               #{newDescendantId},
+               #{newDescendantName},
+               #{newDescendantNickName},
+               #{newDescendantMobile},
+
+               depth + 1,
+               (SELECT IFNULL(MAX(sort), 0) + 1 FROM distri_share_path WHERE ancestor = #{parentId} AND depth = 1)
+        FROM distri_share_path
+        WHERE descendant = #{parentId}
+        UNION ALL
+        SELECT #{parentId},
+               #{parentName},
+               #{parentNickName},
+               #{parentMobile},
+
+               #{newDescendantId},
+               #{newDescendantName},
+               #{newDescendantNickName},
+               #{newDescendantMobile},
+               1,
+               (SELECT IFNULL(MAX(sort), 0) + 1 FROM distri_share_path WHERE ancestor = #{parentId} AND depth = 1);
+    </insert>
+
+
+
+    <!-- Get the maximum sort value for a given parent ID -->
+    <select id="getMaxSortByParentId" resultType="int" parameterType="long">
+        SELECT IFNULL(MAX(sort), 0) + 1 FROM distri_share_path WHERE ancestor = #{parentId} AND depth = 1
+    </select>
+
+
+    <!-- 删除旧的祖先关系 -->
+    <delete id="deleteOldAncestors" parameterType="java.lang.Long">
+        DELETE FROM distri_share_path
+        WHERE descendant IN (
+            SELECT descendant FROM distri_share_path WHERE ancestor = #{nodeId}
+        )
+          AND ancestor NOT IN (
+            SELECT descendant FROM distri_share_path WHERE ancestor = #{nodeId}
+        );
+    </delete>
+
+    <!-- 添加新的祖先关系 -->
+    <insert id="addNewAncestors" parameterType="map">
+        INSERT INTO distri_share_path (ancestor, descendant, depth, sort)
+        SELECT np.ancestor, c.descendant, np.depth + c.depth + 1, 0
+        FROM distri_share_path AS np
+                 CROSS JOIN (
+            SELECT descendant, depth FROM distri_share_path WHERE ancestor = #{nodeId}
+        ) AS c
+        WHERE np.descendant = #{newParentId}
+        UNION ALL
+        SELECT #{nodeId} as ancestor, descendant, depth + 1, 0 FROM distri_share_path WHERE ancestor = #{nodeId};
+    </insert>
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/socialstatus/SocialStatusMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.socialstatus.SocialStatusMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/source/SourceMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.source.SourceMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 31 - 0
feifan-module-distri/pom.xml

@@ -0,0 +1,31 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>cn.newfeifan.zx</groupId>
+        <artifactId>feifan</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>feifan-module-distri</artifactId>
+    <packaging>pom</packaging>
+
+    <name>${project.artifactId}</name>
+    <url>http://maven.apache.org</url>
+    <modules>
+        <module>feifan-module-distri-api</module>
+        <module>feifan-module-distri-biz</module>
+    </modules>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+<description> <!-- 4. 新增 description 为该模块的描述 -->
+demo 模块,主要实现 XXX、YYY、ZZZ 等功能。
+</description>
+
+
+
+
+
+</project>

+ 7 - 0
feifan-module-distri/src/main/java/cn/newfeifan/zx/Main.java

@@ -0,0 +1,7 @@
+package cn.newfeifan.zx;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}

+ 6 - 0
feifan-module-mall/feifan-module-trade-biz/pom.xml

@@ -113,6 +113,12 @@
             <artifactId>feifan-module-system-biz</artifactId>
             <version>${revision}</version>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-distri-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java

@@ -31,6 +31,18 @@ public class TradeOrderItemDO extends BaseDO {
      * 编号
      */
     private Long id;
+    /**
+     * 支付积分
+     */
+    private Long payIntegral;
+    /**
+     * 退还积分
+     */
+    private Long refundIntegral;
+    /**
+     * 用户付款后,获得的冻结积分
+     */
+    private Long increaseIntegral;
     /**
      * 用户编号
      *

+ 35 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleServiceImpl.java

@@ -7,6 +7,8 @@ import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.util.object.ObjectUtils;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 import cn.newfeifan.mall.module.pay.api.refund.PayRefundApi;
 import cn.newfeifan.mall.module.pay.api.refund.dto.PayRefundCreateReqDTO;
 import cn.newfeifan.mall.module.system.dal.dataobject.user.AdminUserDO;
@@ -23,6 +25,8 @@ import cn.newfeifan.mall.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderDO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderItemDO;
 import cn.newfeifan.mall.module.trade.dal.mysql.aftersale.AfterSaleMapper;
+import cn.newfeifan.mall.module.trade.dal.mysql.order.TradeOrderItemMapper;
+import cn.newfeifan.mall.module.trade.dal.mysql.order.TradeOrderMapper;
 import cn.newfeifan.mall.module.trade.dal.redis.no.TradeNoRedisDAO;
 import cn.newfeifan.mall.module.trade.enums.aftersale.AfterSaleOperateTypeEnum;
 import cn.newfeifan.mall.module.trade.enums.aftersale.AfterSaleStatusEnum;
@@ -88,6 +92,13 @@ public class AfterSaleServiceImpl implements AfterSaleService {
     private StringRedisTemplate stringRedisTemplate;
     @Resource
     private AdminUserMapper userMapper;
+    @Resource
+    private TradeOrderMapper tradeOrderMapper;
+    @Resource
+    private TradeOrderItemMapper tradeOrderItemMapper;
+    @Resource
+    private IntegralService integralService;
+
 
     @Override
     public PageResult<AfterSaleDO> getAfterSalePage(AfterSalePageReqVO pageReqVO) {
@@ -367,6 +378,30 @@ public class AfterSaleServiceImpl implements AfterSaleService {
             throw exception(AFTER_SALE_REFUND_FAIL_STATUS_NOT_WAIT_REFUND);
         }
 
+        //退积分 add by Ben
+        //1. 退购物使用的积分
+        Long tradeOrderId = afterSale.getOrderId();//购物单ID
+        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(tradeOrderId);
+        String tradeOrderNum = tradeOrderDO.getNo();
+
+        //交易订单项编号
+        Long orderItemId = afterSale.getOrderItemId();
+        TradeOrderItemDO tradeOrderItemDO = tradeOrderItemMapper.selectById(orderItemId);
+        Long payIntegral = tradeOrderItemDO.getPayIntegral();//支付积分
+
+        //记录退还积分
+        TradeOrderItemDO toid = new TradeOrderItemDO();
+        toid.setId(tradeOrderItemDO.getId());
+        toid.setRefundIntegral(payIntegral);
+        tradeOrderItemMapper.updateById(toid);
+        //返回退款订单项对应的积分
+        integralService.updateUserIntegral(userId, CaclEnum.ORDER_REFUND_INTEGRAL, payIntegral,0l,tradeOrderId,tradeOrderNum);
+
+
+        //2. 减少退货物品对应的冻结积分
+        Long increaseIntegral = tradeOrderItemDO.getIncreaseIntegral();
+        integralService.updateUserIntegral(userId, CaclEnum.ORDER_REFUND_CANCEL_INTEGRAL, 0l,increaseIntegral,tradeOrderId,tradeOrderNum);
+
         // 发起退款单。注意,需要在事务提交后,再进行发起,避免重复发起
         createPayRefund(userIp, afterSale);
 

+ 9 - 4
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/dal/mysql/order/PayOrderMapper.java

@@ -8,6 +8,8 @@ import cn.newfeifan.mall.module.pay.controller.admin.order.vo.PayOrderPageReqVO;
 import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -43,10 +45,13 @@ public interface PayOrderMapper extends BaseMapperX<PayOrderDO> {
         return selectCount(PayOrderDO::getAppId, appId);
     }
 
-    default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {
-        return selectOne(PayOrderDO::getAppId, appId,
-                PayOrderDO::getMerchantOrderId, merchantOrderId);
-    }
+    @Select("select * from pay_order where id = (select pay_order_id from trade_order where trade_order.id=#{id})")
+    PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, @Param("id") String merchantOrderId) ;
+
+//    default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {
+//        return selectOne(PayOrderDO::getAppId, appId,
+//                PayOrderDO::getMerchantOrderId, merchantOrderId);
+//    }
 
     default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) {
         return update(update, new LambdaQueryWrapper<PayOrderDO>()

+ 5 - 0
feifan-server/pom.xml

@@ -91,6 +91,11 @@
             <artifactId>feifan-module-statistics-biz</artifactId>
             <version>${revision}</version>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-distri-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
 
         <!-- CRM 相关模块。默认注释,保证编译速度 -->
 <!--        <dependency>-->

+ 1 - 1
feifan-server/src/main/resources/application.yaml

@@ -3,7 +3,7 @@ spring:
     name: feifan-server
 
   profiles:
-    active: local
+    active: prod
 
   main:
     allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。

+ 1 - 0
pom.xml

@@ -22,6 +22,7 @@
         <module>feifan-module-pay</module>
         <module>feifan-module-mall</module>
         <module>feifan-module-sale</module>
+        <module>feifan-module-distri</module>
         <!--        <module>feifan-module-crm</module>-->
         <!-- 示例项目 -->
 <!--        <module>feifan-example</module>-->