Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcPageReqVO.java
#	feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcSaveReqVO.java
#	feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ordercalc/OrderCalcDO.java
#	feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ordercalc/OrderCalcMapper.java
gaohp 11 months ago
parent
commit
07d1a36227
56 changed files with 993 additions and 51 deletions
  1. 3 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserPageReqVO.java
  3. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserRespVO.java
  4. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserSaveReqVO.java
  5. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java
  6. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java
  7. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java
  8. 8 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcPageReqVO.java
  9. 13 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcRespVO.java
  10. 4 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcSaveReqVO.java
  11. 5 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionbrothers/vo/PartitionBrothersPageReqVO.java
  12. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionbrothers/vo/PartitionBrothersRespVO.java
  13. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionbrothers/vo/PartitionBrothersSaveReqVO.java
  14. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/PartitionCrashController.java
  15. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashPageReqVO.java
  16. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashRespVO.java
  17. 5 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashSaveReqVO.java
  18. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionson/vo/PartitionSonPageReqVO.java
  19. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionson/vo/PartitionSonRespVO.java
  20. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionson/vo/PartitionSonSaveReqVO.java
  21. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathPageReqVO.java
  22. 11 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathRespVO.java
  23. 4 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathSaveReqVO.java
  24. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/duser/DuserDO.java
  25. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java
  26. 2 6
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ordercalc/OrderCalcDO.java
  27. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/partitionbrothers/PartitionBrothersDO.java
  28. 1 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/partitioncrash/PartitionCrashDO.java
  29. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/partitionson/PartitionSonDO.java
  30. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/sharepath/SharePathDO.java
  31. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/duser/DuserMapper.java
  32. 4 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/integral/IntegralMapper.java
  33. 1 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ordercalc/OrderCalcMapper.java
  34. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitionbrothers/PartitionBrothersMapper.java
  35. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitioncrash/PartitionCrashMapper.java
  36. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitionson/PartitionSonMapper.java
  37. 29 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharepath/SharePathMapper.java
  38. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/message/order/DistriOrderMessage.java
  39. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserService.java
  40. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java
  41. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  42. 13 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  43. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcService.java
  44. 43 7
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java
  45. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/partitioncrash/PartitionCrashService.java
  46. 245 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/partitioncrash/PartitionCrashServiceImpl.java
  47. 11 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java
  48. 15 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java
  49. 21 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java
  50. 82 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java
  51. 34 1
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml
  52. 3 1
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/job/order/TradeOrderAutoCalcJob.java
  53. 11 3
      feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/order/BrokerageUserMapper.xml
  54. 1 1
      feifan-server/src/main/resources/application-local.yaml
  55. 268 0
      feifan-server/src/main/resources/application-pro.yaml
  56. 9 9
      sql/mysql/建空库SQL/3_20240320.sql

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

@@ -12,6 +12,9 @@ public enum CaclEnum {
     DIRECT_REFERRAL_QUOTA(4, "直推人额度"),
     TOGETHER_AWARD(5, "合赢奖"),
     HIGH_QUOTA(6, "最高可以获得积分"),
+    SMALL_QUOTA_CRASH(7, "小区额度分配"),
+    AFTER_CRASH_CALC_PT_TOTAL_QUOTA(8, "碰撞后计算平台总收益"),
+
     ;
 
     /**

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserPageReqVO.java

@@ -45,4 +45,7 @@ public class DuserPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+
+    @Schema(description = "用户名称", example = "张三")
+    private String nickName;
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserRespVO.java

@@ -55,4 +55,8 @@ public class DuserRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "用户名称", example = "张三")
+    @ExcelProperty("用户名称")
+    private String nickName;
+
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserSaveReqVO.java

@@ -48,4 +48,7 @@ public class DuserSaveReqVO {
     @NotNull(message = "用户类型不能为空")
     private Long categoryId;
 
+    @Schema(description = "用户名称", example = "张三")
+    private String nickName;
+
 }

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java

@@ -34,4 +34,11 @@ public class IntegralPageReqVO extends PageParam {
     @Schema(description = "最高可获取积分")
     private Integer highQuota;
 
+    @Schema(description = "用户名称", example = "赵六")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "赵六")
+    private String nickName;
+
+
 }

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java

@@ -40,4 +40,11 @@ public class IntegralRespVO {
     @Schema(description = "最高可获取积分")
     @ExcelProperty("最高可获取积分")
     private Integer highQuota;
+    @Schema(description = "用户名称", example = "赵六")
+    @ExcelProperty("用户名称")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "赵六")
+    @ExcelProperty("用户昵称")
+    private String nickName;
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java

@@ -32,4 +32,10 @@ public class IntegralSaveReqVO {
     private Integer highQuota;
 
 
+    @Schema(description = "用户名称", example = "赵六")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "赵六")
+    private String nickName;
+
 }

+ 8 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcPageReqVO.java

@@ -27,9 +27,6 @@ public class OrderCalcPageReqVO extends PageParam {
     @Schema(description = "成本")
     private Integer cost;
 
-    @Schema(description = "购买数量", example = "10152")
-    private Integer productCount;
-
     @Schema(description = "毛利 = 成本 * 0.38... (推广费用)")
     private Integer grossProfit;
 
@@ -53,10 +50,16 @@ public class OrderCalcPageReqVO extends PageParam {
     @Schema(description = "计算百分比模板")
     private String percentTemplate;
 
-    @Schema(description = "订单ID", example = "21497")
-    private Long orderId;
+
+    @Schema(description = "用户昵称", example = "王五")
+    private String nickName;
 
     @Schema(description = "下单人姓名", example = "赵六")
     private String name;
 
+    @Schema(description = "订单ID", example = "21497")
+    private Long orderId;
+    @Schema(description = "购买数量", example = "10152")
+    private Integer productCount;
+
 }

+ 13 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcRespVO.java

@@ -62,6 +62,19 @@ public class OrderCalcRespVO {
     private LocalDateTime createTime;
     @Schema(description = "计算百分比模板")
     private String percentTemplate;
+    @Schema(description = "购买数量", example = "10152")
+    @ExcelProperty("购买数量")
+    private Integer productCount;
+    @Schema(description = "用户昵称", example = "王五")
+    @ExcelProperty("用户昵称")
+    private String nickName;
+    @Schema(description = "订单ID", example = "21497")
+    @ExcelProperty("订单ID")
+    private Long orderId;
+
+    @Schema(description = "下单人姓名", example = "赵六")
+    @ExcelProperty("下单人姓名")
+    private String name;
 
     @Schema(description = "订单ID", example = "21497")
     @ExcelProperty("订单ID")

+ 4 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcSaveReqVO.java

@@ -28,9 +28,6 @@ public class OrderCalcSaveReqVO {
     @Schema(description = "成本")
     private Integer cost;
 
-    @Schema(description = "购买数量", example = "10152")
-    private Integer productCount;
-
     @Schema(description = "毛利 = 成本 * 0.38... (推广费用)")
     private Integer grossProfit;
 
@@ -48,9 +45,12 @@ public class OrderCalcSaveReqVO {
     @Schema(description = "计算百分比模板")
     private String percentTemplate;
 
+    @Schema(description = "用户昵称", example = "王五")
+    private String nickName;
     @Schema(description = "订单ID", example = "21497")
     private Long orderId;
-
+    @Schema(description = "购买数量", example = "10152")
+    private Integer productCount;
     @Schema(description = "下单人姓名", example = "赵六")
     private String name;
 

+ 5 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionbrothers/vo/PartitionBrothersPageReqVO.java

@@ -36,5 +36,10 @@ public class PartitionBrothersPageReqVO extends PageParam {
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
+    @Schema(description = "用户名称", example = "张三")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "赵六")
+    private String nickName;
 
 }

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionbrothers/vo/PartitionBrothersRespVO.java

@@ -44,5 +44,12 @@ public class PartitionBrothersRespVO {
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
+    @Schema(description = "用户名称", example = "张三")
+    @ExcelProperty("用户名称")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "赵六")
+    @ExcelProperty("用户昵称")
+    private String nickName;
 
 }

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionbrothers/vo/PartitionBrothersSaveReqVO.java

@@ -7,6 +7,9 @@ import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 兄弟分区新增/修改 Request VO")
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class PartitionBrothersSaveReqVO {
 
     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5562")
@@ -30,5 +33,10 @@ public class PartitionBrothersSaveReqVO {
 
     @Schema(description = "是否是大区 0为小区 1为大区")
     private Integer size;
+    @Schema(description = "用户名称", example = "张三")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "赵六")
+    private String nickName;
 
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/PartitionCrashController.java

@@ -38,6 +38,9 @@ public class PartitionCrashController {
     @Resource
     private PartitionCrashService partitionCrashService;
 
+
+    // 查询某一个用户昨天的后代产生的订单
+
     @PostMapping("/create")
     @Operation(summary = "创建分区碰撞")
     @PreAuthorize("@ss.hasPermission('distri:partition-crash:create')")

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashPageReqVO.java

@@ -35,4 +35,7 @@ public class PartitionCrashPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "用户昵称", example = "赵六")
+    private String nickName;
+
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashRespVO.java

@@ -43,4 +43,7 @@ public class PartitionCrashRespVO {
     @Schema(description = "用户名称", example = "王五")
     @ExcelProperty("用户名称")
     private String userName;
+    @Schema(description = "用户昵称", example = "赵六")
+    @ExcelProperty("用户昵称")
+    private String nickName;
 }

+ 5 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashSaveReqVO.java

@@ -7,6 +7,9 @@ import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 分区碰撞新增/修改 Request VO")
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class PartitionCrashSaveReqVO {
 
     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15914")
@@ -28,4 +31,6 @@ public class PartitionCrashSaveReqVO {
     @Schema(description = "碰撞后额度")
     private Integer afterHitQuota;
 
+    @Schema(description = "用户昵称", example = "赵六")
+    private String nickName;
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionson/vo/PartitionSonPageReqVO.java

@@ -36,5 +36,11 @@ public class PartitionSonPageReqVO extends PageParam {
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
+    @Schema(description = "用户名称", example = "非繁人")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "李四")
+    private String nickName;
+
 
 }

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionson/vo/PartitionSonRespVO.java

@@ -44,5 +44,12 @@ public class PartitionSonRespVO {
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
+    @Schema(description = "用户名称", example = "非繁人")
+    @ExcelProperty("用户名称")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "李四")
+    @ExcelProperty("用户昵称")
+    private String nickName;
 
 }

+ 9 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitionson/vo/PartitionSonSaveReqVO.java

@@ -7,6 +7,9 @@ import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 后代分区新增/修改 Request VO")
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class PartitionSonSaveReqVO {
 
     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12758")
@@ -30,5 +33,11 @@ public class PartitionSonSaveReqVO {
 
     @Schema(description = "是否是大区 0为小区 1为大区")
     private Integer size;
+    @Schema(description = "用户名称", example = "非繁人")
+    private String name;
+
+    @Schema(description = "用户昵称", example = "李四")
+    private String nickName;
+
 
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathPageReqVO.java

@@ -44,5 +44,9 @@ public class SharePathPageReqVO extends PageParam {
     @Schema(description = "推荐人手机号")
     private String descPhone;
 
+    @Schema(description = "直推人昵称", example = "张三")
+    private String descNickName;
+    @Schema(description = "推荐人昵称", example = "非繁人")
+    private String ancNickName;
 
 }

+ 11 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathRespVO.java

@@ -39,15 +39,26 @@ public class SharePathRespVO {
 
 
     @Schema(description = "推荐人姓名", example = "王五")
+    @ExcelProperty("推荐人姓名")
     private String ancName;
 
     @Schema(description = "推荐人手机号")
+    @ExcelProperty("推荐人手机号")
     private String ancPhone;
 
     @Schema(description = "直推人姓名", example = "李四")
+    @ExcelProperty("直推人姓名")
     private String descName;
 
     @Schema(description = "推荐人手机号")
+    @ExcelProperty("推荐人手机号")
     private String descPhone;
 
+    @Schema(description = "推荐人昵称", example = "非繁人")
+    @ExcelProperty("推荐人昵称")
+    private String ancNickName;
+
+    @Schema(description = "直推人昵称", example = "张三")
+    @ExcelProperty("直推人昵称")
+    private String descNickName;
 }

+ 4 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathSaveReqVO.java

@@ -43,5 +43,8 @@ public class SharePathSaveReqVO {
 
     @Schema(description = "推荐人手机号")
     private String descPhone;
-
+    @Schema(description = "推荐人昵称", example = "非繁人")
+    private String ancNickName;
+    @Schema(description = "直推人昵称", example = "张三")
+    private String descNickName;
 }

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

@@ -64,4 +64,6 @@ public class DuserDO extends BaseDO {
      */
     private Long categoryId;
 
+    private String nickName;
+
 }

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

@@ -45,4 +45,8 @@ public class IntegralDO extends BaseDO {
     private Long categoryId;
 
     private Integer highQuota;
+
+    private String name;
+
+    private String nickName;
 }

+ 2 - 6
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ordercalc/OrderCalcDO.java

@@ -43,10 +43,6 @@ public class OrderCalcDO extends BaseDO {
      * 成本
      */
     private Integer cost;
-    /**
-     * 购买数量
-     */
-    private Integer productCount;
     /**
      * 毛利 = 成本 * 0.38... (推广费用)
      */
@@ -68,9 +64,9 @@ public class OrderCalcDO extends BaseDO {
      */
     private Integer grossProfitPlatformQuota;
     private String percentTemplate;
-
+    private String nickName;
+    private Integer productCount;
     private Long orderId;
 
     private String name;
-
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/partitionbrothers/PartitionBrothersDO.java

@@ -51,5 +51,8 @@ public class PartitionBrothersDO extends BaseDO {
      * 是否是大区 0为小区 1为大区
      */
     private Integer size;
+    private String name;
+
+    private String nickName;
 
 }

+ 1 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/partitioncrash/PartitionCrashDO.java

@@ -51,4 +51,5 @@ public class PartitionCrashDO extends BaseDO {
      * 用户名称
      */
     private String userName;
+    private String nickName;
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/partitionson/PartitionSonDO.java

@@ -51,5 +51,9 @@ public class PartitionSonDO extends BaseDO {
      * 是否是大区 0为小区 1为大区
      */
     private Integer size;
+    private String name;
+
+    private String nickName;
+
 
 }

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/sharepath/SharePathDO.java

@@ -59,4 +59,12 @@ public class SharePathDO extends BaseDO {
      * 推荐人手机号
      */
     private String descPhone;
+    /**
+     * 直推人昵称
+     */
+    private String descNickName;
+    /**
+     * 推荐人昵称
+     */
+    private String ancNickName;
 }

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/duser/DuserMapper.java

@@ -17,6 +17,7 @@ import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.*;
 @Mapper
 public interface DuserMapper extends BaseMapperX<DuserDO> {
 
+
     default PageResult<DuserDO> selectPage(DuserPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<DuserDO>()
                 .eqIfPresent(DuserDO::getUserId, reqVO.getUserId())
@@ -29,6 +30,7 @@ public interface DuserMapper extends BaseMapperX<DuserDO> {
                 .eqIfPresent(DuserDO::getSource, reqVO.getSource())
                 .eqIfPresent(DuserDO::getSocialUpNeed, reqVO.getSocialUpNeed())
                 .eqIfPresent(DuserDO::getCategoryId, reqVO.getCategoryId())
+                .likeIfPresent(DuserDO::getNickName, reqVO.getNickName())
                 .orderByDesc(DuserDO::getId));
     }
     int hasParent(Long userId);

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

@@ -20,10 +20,12 @@ 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())
+                .likeIfPresent(IntegralDO::getName, reqVO.getName())
+                .likeIfPresent(IntegralDO::getNickName, reqVO.getNickName())
+                .eqIfPresent(IntegralDO::getCurrentQuota, reqVO.getCurrentQuota())
+                .eqIfPresent(IntegralDO::getFreezeQuota, reqVO.getFreezeQuota())
                 .eqIfPresent(IntegralDO::getHighQuota, reqVO.getHighQuota())
                 .orderByDesc(IntegralDO::getId));
     }

+ 1 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ordercalc/OrderCalcMapper.java

@@ -33,6 +33,7 @@ public interface OrderCalcMapper extends BaseMapperX<OrderCalcDO> {
                 .eqIfPresent(OrderCalcDO::getPercentTemplate, reqVO.getPercentTemplate())
                 .eqIfPresent(OrderCalcDO::getOrderId, reqVO.getOrderId())
                 .likeIfPresent(OrderCalcDO::getName, reqVO.getName())
+                .likeIfPresent(OrderCalcDO::getNickName, reqVO.getNickName())
                 .orderByDesc(OrderCalcDO::getId));
     }
 

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitionbrothers/PartitionBrothersMapper.java

@@ -26,6 +26,8 @@ public interface PartitionBrothersMapper extends BaseMapperX<PartitionBrothersDO
                 .eqIfPresent(PartitionBrothersDO::getAfterHitQuota, reqVO.getAfterHitQuota())
                 .eqIfPresent(PartitionBrothersDO::getSize, reqVO.getSize())
                 .betweenIfPresent(PartitionBrothersDO::getCreateTime, reqVO.getCreateTime())
+                .likeIfPresent(PartitionBrothersDO::getName, reqVO.getName())
+                .likeIfPresent(PartitionBrothersDO::getNickName, reqVO.getNickName())
                 .orderByDesc(PartitionBrothersDO::getId));
     }
 

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitioncrash/PartitionCrashMapper.java

@@ -17,6 +17,7 @@ import cn.newfeifan.mall.module.distri.controller.admin.partitioncrash.vo.*;
 @Mapper
 public interface PartitionCrashMapper extends BaseMapperX<PartitionCrashDO> {
 
+
     default PageResult<PartitionCrashDO> selectPage(PartitionCrashPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<PartitionCrashDO>()
                 .eqIfPresent(PartitionCrashDO::getUserId, reqVO.getUserId())
@@ -26,6 +27,7 @@ public interface PartitionCrashMapper extends BaseMapperX<PartitionCrashDO> {
                 .eqIfPresent(PartitionCrashDO::getAfterHitQuota, reqVO.getAfterHitQuota())
                 .betweenIfPresent(PartitionCrashDO::getCreateTime, reqVO.getCreateTime())
                 .likeIfPresent(PartitionCrashDO::getUserName, reqVO.getUserName())
+                .likeIfPresent(PartitionCrashDO::getNickName, reqVO.getNickName())
                 .orderByDesc(PartitionCrashDO::getId));
     }
 

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitionson/PartitionSonMapper.java

@@ -26,6 +26,8 @@ public interface PartitionSonMapper extends BaseMapperX<PartitionSonDO> {
                 .eqIfPresent(PartitionSonDO::getAfterHitQuota, reqVO.getAfterHitQuota())
                 .eqIfPresent(PartitionSonDO::getSize, reqVO.getSize())
                 .betweenIfPresent(PartitionSonDO::getCreateTime, reqVO.getCreateTime())
+                .likeIfPresent(PartitionSonDO::getName, reqVO.getName())
+                .likeIfPresent(PartitionSonDO::getNickName, reqVO.getNickName())
                 .orderByDesc(PartitionSonDO::getId));
     }
 

+ 29 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharepath/SharePathMapper.java

@@ -29,11 +29,20 @@ public interface SharePathMapper extends BaseMapperX<SharePathDO> {
                 .eqIfPresent(SharePathDO::getAncPhone, reqVO.getAncPhone())
                 .likeIfPresent(SharePathDO::getDescName, reqVO.getDescName())
                 .eqIfPresent(SharePathDO::getDescPhone, reqVO.getDescPhone())
+                .likeIfPresent(SharePathDO::getAncNickName, reqVO.getAncNickName())
+                .likeIfPresent(SharePathDO::getDescNickName, reqVO.getDescNickName())
                 .orderByDesc(SharePathDO::getId));
     }
 
-    void addNode(@Param("parentId") Long parentId, @Param("parentName") String parentName, @Param("parentMobile") String parentMobile,
-                 @Param("newDescendantId") Long newDescendantId, @Param("newDescendantName") String newDescendantName, @Param("newDescendantMobile") String newDescendantMobile);
+    void addNode(@Param("parentId") Long parentId,
+                 @Param("parentName") String parentName,
+                 @Param("parentNickName") String parentNickName,
+                 @Param("parentMobile") String parentMobile,
+
+                 @Param("newDescendantId") Long newDescendantId,
+                 @Param("newDescendantName") String newDescendantName,
+                 @Param("newDescendantNickName") String newDescendantNickName,
+                 @Param("newDescendantMobile") String newDescendantMobile);
 
 
     int getMaxSortByParentId(@Param("parentId") Long parentId);
@@ -43,4 +52,21 @@ public interface SharePathMapper extends BaseMapperX<SharePathDO> {
 
     // 添加节点及其子节点的新祖先关系
     void addNewAncestors(@Param("nodeId") Long nodeId, @Param("newParentId") Long newParentId);
-}
+
+
+    // 查询该节点的所有子节点信息
+    List<Long> findAllDescendants(@Param("ancestorId") Long ancestorId);
+
+    // 查询该节点的顺序号小于该节点兄弟节点
+    List<Long> findLessSortedSiblings(@Param("descendantId") Long descendantId);
+
+
+
+
+
+
+}
+
+
+
+

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/message/order/DistriOrderMessage.java

@@ -1,5 +1,6 @@
 package cn.newfeifan.mall.module.distri.mq.message.order;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -27,6 +28,9 @@ public class DistriOrderMessage {
      */
     private Integer productCount;
 
+    private String name;
+    private String nickName;
+
 
     /**
      * 成本价

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserService.java

@@ -60,4 +60,12 @@ public interface DuserService {
 
     void hasUserAndCreat(List<Long> userIds);
 
+    /**
+     * 获取所有的用户
+     * @return
+     */
+    List<DuserDO> selectAllUser();
+
+
+
 }

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java

@@ -115,6 +115,11 @@ public class DuserServiceImpl implements DuserService {
         userIds.forEach(this::hasUserAndCreat);
     }
 
+    @Override
+    public List<DuserDO> selectAllUser() {
+        return duserMapper.selectList();
+    }
+
     private void checkAndCreat(Long userId) {
         DuserDO duserDO = duserMapper.selectOne(new LambdaQueryWrapperX<DuserDO>().eqIfPresent(DuserDO::getUserId, userId));
         MemberUserDO user = memberUserService.getUser(userId);
@@ -124,6 +129,8 @@ public class DuserServiceImpl implements DuserService {
             // 创建一个钱包
             IntegralSaveReqVO integralSaveReqVO = IntegralSaveReqVO.builder()
                     .currentQuota(0)
+                    .nickName(user.getNickname())
+                    .name(user.getName())
                     .freezeQuota(0)
                     .categoryId(3L)
                     .userId(userId).build();
@@ -136,6 +143,7 @@ public class DuserServiceImpl implements DuserService {
                     .userId(userId)
                     .mobile(user.getMobile())
                     .name(user.getName())
+                    .nickName(user.getNickname())
                     .integralId(integralDO.getId())
                     .source(userId)
                     .socialStatus(1L)

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

@@ -69,4 +69,12 @@ public interface IntegralService {
     void updateBatch(List<IntegralSaveReqVO> integralSaveReqVOS);
 
 
+    /**
+     * 查询当前用户的父亲的积分信息
+     * @param userId
+     * @return
+     */
+    IntegralDO selectUserParent(Long userId);
+
+
 }

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

@@ -1,6 +1,8 @@
 package cn.newfeifan.mall.module.distri.service.integral;
 
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
+import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
 
@@ -34,6 +36,9 @@ public class IntegralServiceImpl implements IntegralService {
     @Resource
     private IntegralMapper integralMapper;
 
+    @Resource
+    private SharePathService sharePathService;
+
     @Override
     public Long createIntegral(IntegralSaveReqVO createReqVO) {
         // 插入
@@ -90,7 +95,7 @@ public class IntegralServiceImpl implements IntegralService {
     @Override
     public void updateBatch(List<IntegralSaveReqVO> integralSaveReqVOS) {
 
-        integralSaveReqVOS.forEach(k->{
+        integralSaveReqVOS.forEach(k -> {
             // 校验存在
             validateIntegralExists(k.getId());
             // 更新
@@ -100,4 +105,11 @@ public class IntegralServiceImpl implements IntegralService {
 
     }
 
+    @Override
+    public IntegralDO selectUserParent(Long userId) {
+
+        Long parentId = sharePathService.queryParentBySonUserId(userId);
+        return integralMapper.selectOne(new LambdaQueryWrapperX<IntegralDO>().eqIfPresent(IntegralDO::getUserId, parentId));
+    }
+
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcService.java

@@ -1,5 +1,6 @@
 package cn.newfeifan.mall.module.distri.service.ordercalc;
 
+import java.time.LocalDateTime;
 import java.util.*;
 import javax.validation.*;
 
@@ -60,4 +61,6 @@ public interface OrderCalcService {
     void calc(List<DistriOrderMessage> tradeOrderDO);
 
 
+    List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd);
+
 }

+ 43 - 7
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.distri.service.ordercalc;
 
 import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.DuserSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo.PtProfitSaveReqVO;
@@ -14,6 +15,7 @@ import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
+import cn.newfeifan.mall.module.distri.service.partitioncrash.PartitionCrashService;
 import cn.newfeifan.mall.module.distri.service.ptprofit.PtProfitService;
 import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
 import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
@@ -26,6 +28,7 @@ import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -71,6 +74,9 @@ public class OrderCalcServiceImpl implements OrderCalcService {
     @Resource
     private IntegralService integralService;
 
+    @Resource
+    private PartitionCrashService partitionCrashService;
+
     @Override
     public Long createOrderCalc(OrderCalcSaveReqVO createReqVO) {
         // 插入
@@ -125,13 +131,29 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         // 判断当前下单人是否有有上级, 如果没有, 创建直推人关系
         sharePathService.createSharePathByUserId(userId);
 
-        OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
-        // 当前计算百分比模板
-        String percentTemplate = JsonUtils.toJsonString(orderPercentageDO);
+        try {
+
+            OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
+            // 当前计算百分比模板
+            String percentTemplate = JsonUtils.toJsonString(orderPercentageDO);
 
-        calc(tradeOrderDO, orderPercentageDO, percentTemplate);
+            calc(tradeOrderDO, orderPercentageDO, percentTemplate);
+
+        } catch (Exception e) {
+
+        } finally {
+            // todo 计算当天用户的碰撞
+            // 计算兄弟分区, 以及后代分区
+            partitionCrashService.calcCrash(userId);
+        }
+
+
+    }
+
+    @Override
+    public List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd) {
 
-        // todo 计算当天用户的碰撞
+        return   orderCalcMapper.selectList(new LambdaQueryWrapperX<OrderCalcDO>().betweenIfPresent(OrderCalcDO::getCreateTime,todayStart,todayEnd));
 
     }
 
@@ -200,8 +222,22 @@ public class OrderCalcServiceImpl implements OrderCalcService {
             IntegralDO integralDO = integralService.selectByUser(sharePath.getDescendant());
             IntegralDO ptIntegral = integralService.selectByUser(1L);
             // ========== 汇总计算 =================
-            addCaclDo(percentTemplate, saveList, k, grossProfitInt, ancestorQuotaInt, descendantQuotaInt, bonusQuotaInt, platformQuotaInt);
-            // ========== 修改用户钱包 =================
+            OrderCalcSaveReqVO orderCalcSaveReqVO = OrderCalcSaveReqVO.builder()
+                    .userId(k.getUserId())
+                    .orderNo(k.getNo())
+                    .orderId(k.getOrderId())
+                    .cost(k.getCostPrice())
+                    .price(k.getPrice())
+                    .productCount(k.getProductCount())
+                    .nickName(k.getNickName())
+                    .name(k.getName())
+                    .grossProfit(grossProfitInt)
+                    .grossProfitUserQuota(ancestorQuotaInt)
+                    .grossProfitAncestorQuota(descendantQuotaInt)
+                    .grossProfitBonusQuota(bonusQuotaInt)
+                    .grossProfitPlatformQuota(platformQuotaInt)
+                    .percentTemplate(percentTemplate).build();
+            saveList.add(orderCalcSaveReqVO);            // ========== 修改用户钱包 =================
             changeUserWallet(integralSaveReqVOS, integralDO, integralDOAncestor, ptIntegral, ancestorQuotaInt, descendantQuotaInt, highQuotaInt, grossProfitInt, platformQuotaInt);
             // ========== 修改平台信息 =================
             // 每个订单计算的过程

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/partitioncrash/PartitionCrashService.java

@@ -52,4 +52,11 @@ public interface PartitionCrashService {
      */
     PageResult<PartitionCrashDO> getPartitionCrashPage(PartitionCrashPageReqVO pageReqVO);
 
+    /**
+     * 计算碰撞后分区
+     * @param userId
+     */
+    void calcCrash(List<Long> userId);
+
+
 }

+ 245 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/partitioncrash/PartitionCrashServiceImpl.java

@@ -1,15 +1,41 @@
 package cn.newfeifan.mall.module.distri.service.partitioncrash;
 
+import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.partitionbrothers.vo.PartitionBrothersSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.partitionson.vo.PartitionSonSaveReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ordercalc.OrderCalcDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.service.duser.DuserService;
+import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
+import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
+import cn.newfeifan.mall.module.distri.service.partitionbrothers.PartitionBrothersService;
+import cn.newfeifan.mall.module.distri.service.partitionson.PartitionSonService;
+import cn.newfeifan.mall.module.distri.service.ptprofit.PtProfitService;
+import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
+import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
 import cn.newfeifan.mall.module.distri.controller.admin.partitioncrash.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.partitioncrash.PartitionCrashDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.partitioncrash.PartitionCrashMapper;
@@ -29,6 +55,31 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
     @Resource
     private PartitionCrashMapper partitionCrashMapper;
 
+    @Resource
+    private SharePathService sharePathService;
+
+    @Resource
+    private PartitionSonService partitionSonService;
+
+    @Resource
+    private PartitionBrothersService partitionBrothersService;
+
+    @Resource
+    private DuserService duserService;
+
+    @Resource
+    private PtProfitLogService ptProfitLogService;
+
+    @Resource
+    private IntegralService integralService;
+
+    @Resource
+    private OrderPercentageService orderPercentageService;
+
+    @Resource
+    private PtProfitService ptProfitService;
+
+
     @Override
     public Long createPartitionCrash(PartitionCrashSaveReqVO createReqVO) {
         // 插入
@@ -71,4 +122,196 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
         return partitionCrashMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public void calcCrash(List<Long> userId) {
+
+        // 获取所有的营销用户
+        List<DuserDO> duserDOS = duserService.selectAllUser();
+        if (duserDOS.isEmpty()) {
+            return;
+        }
+        // 获取当前合赢奖百分比
+        OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
+        List<HashMap<Long, Integer>> afterCrashMap = duserDOS.stream().map(k -> CompletableFuture.supplyAsync(() -> {
+
+            // 获取当前用户的钱包
+            IntegralDO integralDO = integralService.selectByUser(k.getUserId());
+            // 获取当前父亲的钱包
+            IntegralDO parentIntegralDo = integralService.selectUserParent(k.getUserId());
+
+            // 创建一个分区编号
+            String todayNo = crashTodayNo(k.getUserId());
+            String yesterdayNo = crashYesterdayNo(k.getUserId());
+
+            PartitionSonSaveReqVO.PartitionSonSaveReqVOBuilder sonBuilder = PartitionSonSaveReqVO.builder();
+            PartitionBrothersSaveReqVO.PartitionBrothersSaveReqVOBuilder brotherBuilder = PartitionBrothersSaveReqVO.builder();
+            PartitionCrashSaveReqVO.PartitionCrashSaveReqVOBuilder crashSaveReqVOBuilder = PartitionCrashSaveReqVO.builder();
+            sonBuilder.partNo(todayNo);
+            sonBuilder.name(k.getName());
+            sonBuilder.nickName(k.getNickName());
+            sonBuilder.hasHit(1);
+
+            brotherBuilder.partNo(todayNo);
+            brotherBuilder.name(k.getName());
+            brotherBuilder.nickName(k.getNickName());
+            brotherBuilder.hasHit(1);
+
+
+            crashSaveReqVOBuilder.partNo(todayNo);
+            crashSaveReqVOBuilder.nickName(k.getNickName());
+            crashSaveReqVOBuilder.userName(k.getName());
+
+            // 获取当前用户的后代分区 , 并且该分区存在有下单的用户
+            List<OrderCalcDO> sonOrderCalcDOS = sharePathService.selectSons(k.getUserId(), userId);
+            if (sonOrderCalcDOS.isEmpty()) {
+                // 插入空数据
+                sonBuilder = addSonEmpty(sonBuilder, k);
+                crashSaveReqVOBuilder.sonPrice(0);
+                partitionSonService.createPartitionSon(sonBuilder.build());
+            }
+            // 合计儿子分支额度
+            Integer sonSumPrice = sonOrderCalcDOS.stream().mapToInt(OrderCalcDO::getGrossProfitBonusQuota).sum();
+            crashSaveReqVOBuilder.sonPrice(sonSumPrice);
+
+            // 获取当前用户的兄弟分区
+            List<OrderCalcDO> brothersOrderCalcDOS = sharePathService.selectBrothers(k.getUserId(), userId);
+            if (brothersOrderCalcDOS.isEmpty()) {
+                // 插入空数据
+                brotherBuilder = addBrotherEmpty(brotherBuilder, k);
+                crashSaveReqVOBuilder.brotherPrice(0);
+                partitionBrothersService.createPartitionBrothers(brotherBuilder.build());
+            }
+
+            // 合并兄弟分支额度
+            Integer brotherSumPrice = brothersOrderCalcDOS.stream().mapToInt(OrderCalcDO::getGrossProfitBonusQuota).sum();
+            crashSaveReqVOBuilder.brotherPrice(sonSumPrice);
+
+
+            // 判断,昨天是否有存余的分支
+            PartitionCrashDO yesterdayCrash = partitionCrashMapper.selectOne(new LambdaQueryWrapperX<PartitionCrashDO>().eqIfPresent(PartitionCrashDO::getPartNo, yesterdayNo));
+            // 如果不为空, 则判断增加到哪个分支中
+            if (yesterdayCrash.getSonPrice() >= yesterdayCrash.getBrotherPrice()) {
+                sonSumPrice = sonSumPrice + yesterdayCrash.getSonPrice();
+            } else {
+                brotherSumPrice = brotherSumPrice + yesterdayCrash.getBrotherPrice();
+            }
+
+            int afterCrash = 0;
+            Integer smallQuota = 0;
+            // 碰撞计算
+            if (sonSumPrice >= brotherSumPrice) {
+                sonBuilder.size(1);
+                brotherBuilder.size(0);
+                afterCrash = sonSumPrice - brotherSumPrice;
+                smallQuota = brotherSumPrice;
+
+            } else {
+                sonBuilder.size(0);
+                brotherBuilder.size(1);
+                afterCrash = brotherSumPrice - sonSumPrice;
+                smallQuota = sonSumPrice;
+            }
+
+
+            crashSaveReqVOBuilder.brotherPrice(brotherSumPrice);
+            crashSaveReqVOBuilder.sonPrice(sonSumPrice);
+            crashSaveReqVOBuilder.afterHitQuota(afterCrash);
+
+            // 积分添加 添加的时候, 需要注意当前用户是否有足够的积分可以获取
+            // 碰撞后的额度的
+            Integer highQuota = integralDO.getHighQuota();
+            Integer parentHighQuota = parentIntegralDo.getHighQuota();
+
+            BigDecimal smallBigDecimal = new BigDecimal(String.valueOf(smallQuota));
+            BigDecimal multiply = smallBigDecimal.multiply(new BigDecimal(String.valueOf(orderPercentageDO.getDivideIntoPerc())));
+            if (compare(highQuota, multiply)) {
+                Integer currentQuota = integralDO.getCurrentQuota();
+                integralDO.setCurrentQuota(currentQuota + multiply.intValue());
+                // 碰撞后的额度添加到日志中 增加日志模块
+                integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
+                ptProfitLogService.addMessage(k.getUserId(), CaclEnum.SMALL_QUOTA_CRASH, currentQuota, integralDO.getCurrentQuota(), JsonUtils.toJsonString(orderPercentageDO));
+            }
+            if (compare(parentHighQuota, multiply)) {
+                Integer currentQuota = parentIntegralDo.getCurrentQuota();
+                parentIntegralDo.setCurrentQuota(currentQuota + multiply.intValue());
+                // 碰撞后的额度添加到日志中 增加日志模块
+                integralService.updateIntegral(BeanUtils.toBean(parentIntegralDo, IntegralSaveReqVO.class));
+                ptProfitLogService.addMessage(parentIntegralDo.getUserId(), CaclEnum.SMALL_QUOTA_CRASH, currentQuota, parentIntegralDo.getCurrentQuota(), JsonUtils.toJsonString(orderPercentageDO));
+            }
+
+            // 获取计算后积分, Long为userId, Integer为碰撞后额度
+            HashMap<Long, Integer> map = new HashMap<>();
+            map.put(k.getUserId(), multiply.intValue());
+            map.put(parentIntegralDo.getUserId(), multiply.intValue());
+            return map;
+
+        })).collect(Collectors.toList()).stream().map(CompletableFuture::join).collect(Collectors.toList());
+
+        // 计算平台积分
+        // 获取当前平台的额度
+        PtProfitDO ptProfit = ptProfitService.getPtProfit();
+        // 遍历hashMap
+        for (HashMap<Long, Integer> longIntegerHashMap : afterCrashMap) {
+            for (Map.Entry<Long, Integer> entry : longIntegerHashMap.entrySet()) {
+                if (ptProfit.getPtTotalAdd() <= 0) {
+                    break;
+                }
+                // 当前平台总积分
+                Integer ptTotalAdd = ptProfit.getPtTotalAdd();
+                // 平台扣除积分
+                ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() - entry.getValue());
+                // 碰撞后的额度添加到日志中 增加日志模块
+                ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_QUOTA
+                        , ptTotalAdd, ptProfit.getPtTotalAdd() - entry.getValue(), JsonUtils.toJsonString(orderPercentageDO));
+            }
+        }
+    }
+
+    public Boolean compare(Integer highQuota, BigDecimal afterCrash) {
+        BigDecimal high = new BigDecimal(String.valueOf(highQuota));
+        int i = high.compareTo(afterCrash);
+        return i >= 0;
+    }
+
+
+    private PartitionBrothersSaveReqVO.PartitionBrothersSaveReqVOBuilder addBrotherEmpty(PartitionBrothersSaveReqVO.PartitionBrothersSaveReqVOBuilder brotherBuilder, DuserDO duserDO) {
+
+        return brotherBuilder.name(duserDO.getName())
+                .nickName(duserDO.getNickName())
+                .size(0)
+                .price(0)
+                .afterHitQuota(0)
+                .hasHit(0);
+    }
+
+    private PartitionSonSaveReqVO.PartitionSonSaveReqVOBuilder addSonEmpty(
+            PartitionSonSaveReqVO.PartitionSonSaveReqVOBuilder sonBuilder,
+            DuserDO duserDO) {
+        return sonBuilder.name(duserDO.getName())
+                .nickName(duserDO.getNickName())
+                .size(0)
+                .price(0)
+                .afterHitQuota(0)
+                .hasHit(0);
+    }
+
+
+    // 创建编号 创建今天的编号
+    public String crashTodayNo(Long userId) {
+        LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); // 今天的开始时间,即午夜12点
+        String todayStartString = todayStart.toString();
+        return "CRASH:" + userId + todayStartString;
+
+    }
+
+    // 获取昨天的编号
+    public String crashYesterdayNo(Long userId) {
+        LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); // 今天的开始时间,即午夜12点
+        LocalDateTime localDateTime = todayStart.minusDays(1);
+        String yesterdayString = localDateTime.toString();
+        return "CRASH:" + userId + yesterdayString;
+
+    }
+
+
 }

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

@@ -5,7 +5,7 @@ import javax.validation.*;
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
 
 /**
  * 平台利润记录 Service 接口
@@ -54,5 +54,15 @@ public interface PtProfitLogService {
 
     void saveBatch(List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS);
 
+    /**
+     * 增加日志
+     *
+     * @param userId      用户ID
+     * @param caclEnum    日志模板
+     * @param amount      增加额度
+     * @param afterAmount 增加之后的额度
+     * @param jsonString
+     */
+    void addMessage(Long userId, CaclEnum caclEnum, Integer amount, Integer afterAmount, String jsonString);
 
 }

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

@@ -1,18 +1,17 @@
 package cn.newfeifan.mall.module.distri.service.ptprofitlog;
 
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitlog.PtProfitLogMapper;
@@ -32,6 +31,7 @@ public class PtProfitLogServiceImpl implements PtProfitLogService {
     @Resource
     private PtProfitLogMapper ptProfitLogMapper;
 
+
     @Override
     public Long createPtProfitLog(PtProfitLogSaveReqVO createReqVO) {
         // 插入
@@ -80,4 +80,17 @@ public class PtProfitLogServiceImpl implements PtProfitLogService {
         ptProfitLogMapper.insertBatch(ptProfitLog);
     }
 
+    @Override
+    public void addMessage(Long userId, CaclEnum caclEnum, Integer amount, Integer afterAmount, String percentTemplate) {
+        PtProfitLogSaveReqVO ptProfitLog = PtProfitLogSaveReqVO.builder()
+                .afterAmount(afterAmount)
+                .amount(amount)
+                .percentTemplate(percentTemplate)
+                .userId(userId)
+                .profitStatus(caclEnum.getType())
+                .build();
+        ptProfitLogMapper.insert(BeanUtils.toBean(ptProfitLog, PtProfitLogDO.class));
+
+    }
+
 }

+ 21 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java

@@ -4,6 +4,7 @@ import java.util.*;
 import javax.validation.*;
 
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ordercalc.OrderCalcDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.pojo.PageParam;
@@ -79,4 +80,24 @@ public interface SharePathService {
     SharePathDO getSharePathByDescendant(Long userId);
 
 
+    /**
+     * 获取儿子订单计算分区
+     *
+     * @param userId
+     * @return
+     */
+    List<OrderCalcDO> selectSons(Long userId, List<Long> userIds);
+
+    /**
+     * 获取兄弟订单分区
+     *
+     * @param userId
+     * @param userId1
+     * @return
+     */
+    List<OrderCalcDO> selectBrothers(Long userId, List<Long> userId1);
+
+
+    Long queryParentBySonUserId(Long userId);
+
 }

+ 82 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

@@ -2,7 +2,9 @@ package cn.newfeifan.mall.module.distri.service.sharepath;
 
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ordercalc.OrderCalcDO;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
+import cn.newfeifan.mall.module.distri.service.ordercalc.OrderCalcService;
 import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 import cn.newfeifan.mall.module.member.service.user.MemberUserService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -13,7 +15,12 @@ import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
@@ -43,6 +50,8 @@ public class SharePathServiceImpl implements SharePathService {
     private DuserService duserService;
     @Resource
     private MemberUserService memberUserService;
+    @Resource
+    private OrderCalcService orderCalcService;
 
     @Override
     public Long createSharePath(SharePathSaveReqVO createReqVO) {
@@ -78,8 +87,16 @@ public class SharePathServiceImpl implements SharePathService {
         duserService.hasUserAndCreat(createReqVO);
 
         // 存储他们之间的关系
-        sharePathMapper.addNode(createReqVO.getAncestor(), ancestor.getName(), ancestor.getMobile(),
-                createReqVO.getDescendant(), descendant.getName(), descendant.getMobile());
+        sharePathMapper.addNode(
+                createReqVO.getAncestor(),
+                ancestor.getName(),
+                ancestor.getNickname(),
+                ancestor.getMobile(),
+
+                createReqVO.getDescendant(),
+                descendant.getName(),
+                descendant.getNickname(),
+                descendant.getMobile());
     }
 
     @Override
@@ -162,5 +179,68 @@ public class SharePathServiceImpl implements SharePathService {
         return sharePathDOS.get(0);
     }
 
+    @Override
+    public List<OrderCalcDO> selectSons(Long userId, List<Long> userIds) {
+        List<Long> allDescendants = sharePathMapper.findAllDescendants(userId);
+        if (allDescendants.isEmpty()) {
+            return Collections.emptyList();
+        }
+        // 查询出两个list的并集
+        List<Long> unionList = unionList(userIds, allDescendants);
+        if (unionList.isEmpty()) {
+            return Collections.emptyList();
+        }
+        // 获取这个分区的所有订单的合赢奖
+        return calcQuota(unionList);
+
+    }
+
+    private List<OrderCalcDO> calcQuota(List<Long> unionList) {
+
+        // 根据当前userId, 查询当日,计算出来的订单
+        // 创建日期
+        LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); // 今天的开始时间,即午夜12点
+        LocalDateTime todayEnd = todayStart.plusDays(1);
+
+        return orderCalcService.queryTodayCalcByUserIds(todayStart, todayEnd);
+
+    }
+
+    @Override
+    public List<OrderCalcDO> selectBrothers(Long userId, List<Long> userIds) {
+
+        List<Long> sortedSiblings = sharePathMapper.findLessSortedSiblings(userId);
+        if (sortedSiblings.isEmpty()) {
+            return Collections.emptyList();
+        }
+        // 查询出两个list的并集
+        List<Long> unionList = unionList(userIds, sortedSiblings);
+        if (unionList.isEmpty()) {
+            return Collections.emptyList();
+        }
+        // 获取这个分区的所有订单的合赢奖
+        return calcQuota(unionList);
+    }
+
+    @Override
+    public Long queryParentBySonUserId(Long userId) {
+
+        SharePathDO sharePathDO = sharePathMapper.selectOne(new LambdaQueryWrapperX<SharePathDO>()
+                .eqIfPresent(SharePathDO::getDescendant, userId).eqIfPresent(SharePathDO::getDepth, 1));
+        if (sharePathDO == null) {
+            return 1L;
+        } else {
+            return sharePathDO.getAncestor();
+        }
+
+
+    }
+
+
+    public List<Long> unionList(List<Long> orderUserId, List<Long> userId) {
+        return Stream.concat(orderUserId.stream(), userId.stream()).distinct().collect(Collectors.toList());
+
+    }
+
 
 }

+ 34 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml

@@ -5,13 +5,27 @@
 
     <!-- 增加节点 -->
     <insert id="addNode">
-        INSERT INTO distri_share_path (ancestor, anc_name, anc_phone, descendant, desc_name, desc_phone, depth, sort)
+        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
@@ -19,9 +33,12 @@
         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);
@@ -58,4 +75,20 @@
         UNION ALL
         SELECT #{nodeId} as ancestor, descendant, depth + 1, 0 FROM distri_share_path WHERE ancestor = #{nodeId};
     </insert>
+
+
+    <!-- 查询某节点的所有后代节点 -->
+    <select id="findAllDescendants" resultType="long">
+        SELECT descendant
+        FROM distri_share_path
+        WHERE ancestor = #{ancestorId}
+    </select>
+
+    <!-- 查询排序号小于当前节点的兄弟节点 -->
+    <select id="findLessSortedSiblings" resultType="long">
+        SELECT a.descendant
+        FROM distri_share_path a
+                 JOIN distri_share_path b ON a.ancestor = b.ancestor
+        WHERE b.descendant = #{descendantId} AND a.sort  &lt; b.sort
+    </select>
 </mapper>

+ 3 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/job/order/TradeOrderAutoCalcJob.java

@@ -31,7 +31,9 @@ public class TradeOrderAutoCalcJob implements JobHandler {
         List<DistriOrderMessage> appTradeOrderDetailRespVos = tradeOrderQueryService.queryAllOrder();
         CalcMessage calcMessage = CalcMessage.builder().distriOrderMessages(appTradeOrderDetailRespVos).build();
         distriOrderProducer.sendDistriOrderMessage(calcMessage);
-        return String.format("执行成功");
+        return String.format("计算订单信息结束");
+
+
     }
 
 }

+ 11 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/order/BrokerageUserMapper.xml

@@ -12,6 +12,10 @@
         <result column="shopId" property="shopId"/>
         <result column="merchantId" property="merchantId"/>
         <result column="orderId" property="orderId"/>
+        <result column="name" property="name"/>
+        <result column="nickName" property="nickName"/>
+
+
     </resultMap>
 
     <select id="queryAllOrder" resultMap="BaseResultMap">
@@ -23,13 +27,17 @@
                tor.id            as orderId,
                tor.user_id       as userId,
                ps.merchant_id    as merchantId,
-               ps.shop_id        as shopId
+               ps.shop_id        as shopId,
+               ps.shop_id        as shopId,
+               mu.`name`         as name,
+               mu.nickname        as nickname
         from trade_order tor
+                 LEFT JOIN member_user mu
+                           ON tor.user_id = mu.id
                  LEFT JOIN trade_order_item toi
                            on tor.id = toi.order_id
                  LEFT JOIN product_sku ps
                            on toi.sku_id = ps.id
-        where tor.update_time BETWEEN #{start} AND #{end}
+        where  tor.update_time BETWEEN #{start} AND #{end}
     </select>
-
 </mapper>

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

@@ -1,5 +1,5 @@
 server:
-  port: 8002
+  port: 8004
 
 --- #################### 数据库相关配置 ####################
 

+ 268 - 0
feifan-server/src/main/resources/application-pro.yaml

@@ -0,0 +1,268 @@
+server:
+  port: 8002
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+#      - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
+#      - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
+#      - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
+#      - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 1 # 初始连接数
+        min-idle: 1 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          name: mall-letcgo
+          url: jdbc:mysql://120.78.5.233:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+          username: root
+          password: PA55W0RD
+        slave: # 模拟从库,可根据自己需要修改
+          name: mall-letcgo
+          lazy: true # 开启懒加载,保证启动速度
+          url: jdbc:mysql://120.78.5.233:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+          username: root
+          password: PA55W0RD
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  redis:
+    host: 47.107.29.61  # 地址
+    port: 6379 # 端口
+    database: 0 # 数据库索引
+#    password: 123456 # 密码,建议生产环境开启
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+  quartz:
+    auto-startup: true # 本地开发环境,尽量不要开启 Job
+    scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+    job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+    wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+    properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+      org:
+        quartz:
+          # Scheduler 相关配置
+          scheduler:
+            instanceName: schedulerName
+            instanceId: AUTO # 自动生成 instance ID
+          # JobStore 相关配置
+          jobStore:
+            # JobStore 实现类。可见博客:https://blog.csdn.net/weixin_42458219/article/details/122247162
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+            isClustered: true # 是集群模式
+            clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+            misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+          # 线程池相关配置
+          threadPool:
+            threadCount: 25 # 线程池大小。默认为 10 。
+            threadPriority: 5 # 线程优先级
+            class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+    jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+      initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 消息队列相关 ####################
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 127.0.0.1:9876 # RocketMQ Namesrv
+
+spring:
+  # RabbitMQ 配置项,对应 RabbitProperties 配置类
+  rabbitmq:
+    host: 127.0.0.1 # RabbitMQ 服务的地址
+    port: 5672 # RabbitMQ 服务的端口
+    username: rabbit # RabbitMQ 服务的账号
+    password: rabbit # RabbitMQ 服务的密码
+  # Kafka 配置项,对应 KafkaProperties 配置类
+  kafka:
+    bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+# Resilience4j 配置项
+resilience4j:
+  ratelimiter:
+    instances:
+      backendA:
+        limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
+        limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
+        timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
+        register-health-indicator: true # 是否注册到健康监测
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        url: http://47.107.28.221:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.newfeifan.mall.module.bpm.dal.mysql: debug
+    cn.newfeifan.mall.module.infra.dal.mysql: debug
+    cn.newfeifan.mall.module.infra.dal.mysql.job.JobLogMapper: INFO # 配置 JobLogMapper 的日志级别为 info
+    cn.newfeifan.mall.module.infra.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    cn.newfeifan.mall.module.pay.dal.mysql: debug
+    cn.newfeifan.mall.module.pay.dal.mysql.notify.PayNotifyTaskMapper: INFO # 配置 JobLogMapper 的日志级别为 info
+    cn.newfeifan.mall.module.system.dal.mysql: debug
+    cn.newfeifan.mall.module.system.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info
+    cn.newfeifan.mall.module.system.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info
+    cn.newfeifan.mall.module.tool.dal.mysql: debug
+    cn.newfeifan.mall.module.member.dal.mysql: debug
+    cn.newfeifan.mall.module.trade.dal.mysql: debug
+    cn.newfeifan.mall.module.promotion.dal.mysql: debug
+    cn.newfeifan.mall.module.statistics.dal.mysql: debug
+    cn.newfeifan.mall.module.crm.dal.mysql: debug
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 非繁人:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+
+debug: false
+
+--- #################### 微信公众号、小程序相关配置 ####################
+wx:
+  mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+#    app-id: wx041349c6f39b268b # 测试号(牛希尧提供的)
+#    secret: 5abee519483bc9f8cb37ce280e814bd0
+    app-id: wx917c16ecb85e8fb8 # 测试号(自己的)
+    secret: e6be2d75ba7dc0f3d833469645062b79
+#    app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的)
+#    secret: bd4f9fab889591b62aeac0d7b8d8b4a0
+    # 存储配置,解决 AccessToken 的跨节点的共享
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wx # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+  miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
+    #    appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的)
+    #    secret: 333ae72f41552af1e998fe1f54e1584a
+    appid: wx63c280fe3248a3e7 # wenhualian的接口测试号
+    secret: 6f270509224a7ae1296bbf1c8cb97aed
+#    appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
+#    secret: 4a1a04e07f6a4a0751b39c3064a92c8b
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wa # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+
+--- #################### 非繁相关配置 ####################
+
+# 非繁配置项,设置当前项目所有自定义的配置
+feifan:
+  captcha:
+    enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试;
+  security:
+    mock-enable: true
+  xss:
+    enable: false
+    exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
+      - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
+      - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
+  pay:
+    order-notify-url: http://zxgz.newfeifan.cn/admin-api/pay/notify/order # 支付渠道的【支付】回调地址
+    refund-notify-url: http://zxgz.newfeifan.cn/admin-api/pay/notify/refund # 支付渠道的【退款】回调地址
+  access-log: # 访问日志的配置项
+    enable: false
+  error-code: # 错误码相关配置项
+    enable: false
+  demo: false # 关闭演示模式
+  tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
+
+justauth:
+  enabled: true
+  type:
+    DINGTALK: # 钉钉
+      client-id: dingvrnreaje3yqvzhxg
+      client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+      ignore-check-redirect-uri: true
+    WECHAT_ENTERPRISE: # 企业微信
+      client-id: wwd411c69a39ad2e54
+      client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+      agent-id: 1000004
+      ignore-check-redirect-uri: true
+    WECHAT_MINI_APP: # 微信小程序
+      client-id: ${wx.miniapp.appid}
+      client-secret: ${wx.miniapp.secret}
+      ignore-check-redirect-uri: true
+      ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
+    WECHAT_MP: # 微信公众号
+      client-id: ${wx.mp.app-id}
+      client-secret: ${wx.mp.secret}
+      ignore-check-redirect-uri: true
+  cache:
+    type: REDIS
+    prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+    timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+
+# TODO 赤焰:这个配置的目的是?
+#ureport配置
+#ureport:
+#  disableHttpSessionReportCache: true #是否禁用
+#  disableFileProvider: true #是否禁用
+#  debug: true
+#  fileStoreDir: D://ureport//files
+#  provider:
+#    database:
+#       disabled: true
+#    file:
+#       disabled: true
+
+

+ 9 - 9
sql/mysql/建空库SQL/3_20240320.sql

@@ -1,6 +1,6 @@
 /* 订单相关数据库扩展
 
-订单主表`trade_order`增加字段pay_points(支付积分)、increase_points(用户获得积分);
+订单主表`trade_order`增加字段pay_integral(支付积分)、increase_integral(用户获得积分);
 订单主表`trade_order`原有use_point、give_point 字段、refund_point('退还的使用的积分') 字段:记录订单项的积分信息。但是系统原来的积分与我们需求的设定不同,安全起见不使用这些积分字段。
 
 
@@ -18,22 +18,22 @@ ALTER TABLE `sale_shop`
 ALTER TABLE `sale_shop`
     ADD COLUMN `delivery_pick_up_enabled` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否开启自提';
 
--- 订单主表`trade_order`增加字段pay_points(支付积分)、increase_points(用户获得积分)
+-- 订单主表`trade_order`增加字段pay_integral(支付积分)、increase_integral(用户获得积分)
  ALTER TABLE `trade_order` 
-ADD COLUMN `pay_points` int COMMENT '支付积分';
+ADD COLUMN `pay_integral` int COMMENT '支付积分';
 
  ALTER TABLE `trade_order` 
-ADD COLUMN `increase_points` int COMMENT '用户获得积分';
+ADD COLUMN `increase_integral` int COMMENT '用户获得积分';
 
 ALTER TABLE `trade_order`
-    ADD COLUMN `refund_points` int COMMENT '退还的使用的积分';
+    ADD COLUMN `refund_integral` int COMMENT '退还的使用的积分';
 
 ALTER TABLE `trade_order`
     ADD COLUMN `pay_rmb` int COMMENT '实付人民币,单位:分';
 
--- 订单项表`trade_order_item`增加字段pay_points(支付积分)
-ALTER TABLE `trade_order_item` ADD COLUMN `pay_points` int COMMENT '支付积分';
-ALTER TABLE `trade_order_item` ADD COLUMN `increase_points` int COMMENT '用户获得积分';
-ALTER TABLE `trade_order_item` ADD COLUMN `refund_points` int COMMENT '退还的使用的积分';
+-- 订单项表`trade_order_item`增加字段pay_integral(支付积分)
+ALTER TABLE `trade_order_item` ADD COLUMN `pay_integral` int COMMENT '支付积分';
+ALTER TABLE `trade_order_item` ADD COLUMN `increase_integral` int COMMENT '用户获得积分';
+ALTER TABLE `trade_order_item` ADD COLUMN `refund_integral` int COMMENT '退还的使用的积分';
 ALTER TABLE `trade_order_item` ADD COLUMN `pay_rmb` int COMMENT '实付人民币,单位:分';