Browse Source

加入消费分充值,转让记录,每日计算消费分异动提醒

Yangzw 6 months ago
parent
commit
cf65c73f95
100 changed files with 2839 additions and 27 deletions
  1. 2 1
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 30 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ConsumptionEnum.java
  3. 5 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  4. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalPageReqVO.java
  5. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalRespVO.java
  6. 10 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalSaveReqVO.java
  7. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelPageReqVO.java
  8. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelRespVO.java
  9. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelSaveReqVO.java
  10. 36 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/ConsumptionChangeLogController.java
  11. 45 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/vo/ConsumptionChangeLogPageReqVO.java
  12. 57 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/vo/ConsumptionChangeLogRespVO.java
  13. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/vo/ConsumptionChangeLogSaveReqVO.java
  14. 54 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/ConsumptionErrorLogController.java
  15. 27 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/vo/ConsumptionErrorLogPageReqVO.java
  16. 29 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/vo/ConsumptionErrorLogRespVO.java
  17. 21 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/vo/ConsumptionErrorLogSaveReqVO.java
  18. 47 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/ConsumptionErrorUserController.java
  19. 48 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/vo/ConsumptionErrorUserPageReqVO.java
  20. 57 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/vo/ConsumptionErrorUserRespVO.java
  21. 44 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/vo/ConsumptionErrorUserSaveReqVO.java
  22. 73 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/ConsumptionTopUpLogController.java
  23. 27 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionInfoVO.java
  24. 36 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionTopUpLogPageReqVO.java
  25. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionTopUpLogRespVO.java
  26. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionTopUpLogSaveReqVO.java
  27. 94 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/ConsumptionTransferLogController.java
  28. 45 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/vo/ConsumptionTransferLogPageReqVO.java
  29. 53 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/vo/ConsumptionTransferLogRespVO.java
  30. 42 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/vo/ConsumptionTransferLogSaveReqVO.java
  31. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/excelvo/DailyBillExcelRespVO.java
  32. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/vo/DailyBillPageReqVO.java
  33. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/vo/DailyBillRespVO.java
  34. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/vo/DailyBillSaveReqVO.java
  35. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java
  36. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java
  37. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java
  38. 16 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentagePageReqVO.java
  39. 20 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRespVO.java
  40. 14 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageSaveReqVO.java
  41. 0 22
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/PartitionCrashController.java
  42. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashPageReqVO.java
  43. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailybill/vo/PtDailyBillPageReqVO.java
  44. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailybill/vo/PtDailyBillRespVO.java
  45. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailybill/vo/PtDailyBillSaveReqVO.java
  46. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/vo/PtDailyWithdrawalPageReqVO.java
  47. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/vo/PtDailyWithdrawalRespVO.java
  48. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/vo/PtDailyWithdrawalSaveReqVO.java
  49. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptsettlement/vo/PtSettlementPageReqVO.java
  50. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptsettlement/vo/PtSettlementRespVO.java
  51. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptsettlement/vo/PtSettlementSaveReqVO.java
  52. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/shopsettlement/excelvo/ShopSettlementExcelRespVO.java
  53. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/shopsettlement/vo/ShopSettlementPageReqVO.java
  54. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/shopsettlement/vo/ShopSettlementRespVO.java
  55. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/shopsettlement/vo/ShopSettlementSaveReqVO.java
  56. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/convert/dailybill/DailyBillConvert.java
  57. 1 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/convert/shopsettlement/ShopSettlementConvert.java
  58. 13 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawal/ApplicationForWithdrawalDO.java
  59. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelDO.java
  60. 62 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptionchangelog/ConsumptionChangeLogDO.java
  61. 36 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptionerrorlog/ConsumptionErrorLogDO.java
  62. 65 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptionerroruser/ConsumptionErrorUserDO.java
  63. 48 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptiontopuplog/ConsumptionTopUpLogDO.java
  64. 60 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptiontransferlog/ConsumptionTransferLogDO.java
  65. 13 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/dailybill/DailyBillDO.java
  66. 5 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java
  67. 22 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java
  68. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptdailybill/PtDailyBillDO.java
  69. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptdailywithdrawal/PtDailyWithdrawalDO.java
  70. 5 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptsettlement/PtSettlementDO.java
  71. 6 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/shopsettlement/ShopSettlementDO.java
  72. 29 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptionchangelog/ConsumptionChangeLogMapper.java
  73. 27 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptionerrorlog/ConsumptionErrorLogMapper.java
  74. 33 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptionerroruser/ConsumptionErrorUserMapper.java
  75. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptiontopuplog/ConsumptionTopUpLogMapper.java
  76. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptiontransferlog/ConsumptionTransferLogMapper.java
  77. 6 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitioncrash/PartitionCrashMapper.java
  78. 3 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java
  79. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalService.java
  80. 7 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalServiceImpl.java
  81. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImpl.java
  82. 60 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionchangelog/ConsumptionChangeLogService.java
  83. 92 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionchangelog/ConsumptionChangeLogServiceImpl.java
  84. 58 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerrorlog/ConsumptionErrorLogService.java
  85. 262 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerrorlog/ConsumptionErrorLogServiceImpl.java
  86. 53 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerroruser/ConsumptionErrorUserService.java
  87. 70 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerroruser/ConsumptionErrorUserServiceImpl.java
  88. 67 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontopuplog/ConsumptionTopUpLogService.java
  89. 175 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontopuplog/ConsumptionTopUpLogServiceImpl.java
  90. 59 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontransferlog/ConsumptionTransferLogService.java
  91. 77 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontransferlog/ConsumptionTransferLogServiceImpl.java
  92. 20 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/dailybill/DailyBillServiceImpl.java
  93. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/dailybill/dto/OrderDTO.java
  94. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/dailybill/dto/OrderItemDTO.java
  95. 5 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcService.java
  96. 16 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java
  97. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/orderpercentage/OrderPercentageServiceImpl.java
  98. 11 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/shopsettlement/ShopSettlementServiceImpl.java
  99. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/consumptionchangelog/ConsumptionChangeLogMapper.xml
  100. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/consumptionerrorlog/ConsumptionErrorLogMapper.xml

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

@@ -32,7 +32,8 @@ public enum CaclEnum {
     MANUAL_RETURN_INTEGRAL(25, "人工返回最早七天未获得的超出额度的合赢奖","人工返回最早七天未获得的合赢奖,超额的"),
     WITHDRAWAL(26, "用户提现","用户将可用积分提现到账户"),
     WITHDRAWAL_ERROR(27, "提现失败退回","提现失败退回积分到用户"),
-    ORDER_SETTLEMENT(28,"订单结算利润","店铺订单结算,每笔订单结算出来的利润(成本价 - 结算价)")
+    ORDER_SETTLEMENT(28,"订单结算利润","店铺订单结算,每笔订单结算出来的利润(成本价 - 结算价)"),
+    COMMISSION_TRANSITION(29,"佣金转化为消费分","佣金转化为消费分 1:1"),
     ;
 
     /**

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

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ConsumptionEnum {
+
+    PT_TOP_TUP(1,"平台充值"),
+    COMMISSION_TRANSITION(2,"佣金转化为消费分"),
+    CONSUMPTION_TRANSFER(3,"消费分转出"),
+    CONSUMPTION_RECIPIENT(4,"消费分转入"),
+    COMMISSION_WITHDRAWAL(5,"佣金提现"),
+    PAY_ORDER(6,"购物支付"),
+    REFUND_ORDER(7,"退回退款返回"),
+    ;
+
+    private final Integer type;
+    private final String name;
+
+    public static String getName(Integer type){
+        for (ConsumptionEnum value : ConsumptionEnum.values()) {
+            if(value.getType().equals(type)){
+                return value.getName();
+            }
+        }
+        return null;
+    }
+}

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

@@ -40,5 +40,10 @@ public interface ErrorCodeConstants {
     ErrorCode APPLICATION_FOR_WITHDRAWAL_NOT_EXISTS = new ErrorCode(1_002_030_032, "提现申请记录不存在");
     ErrorCode PT_DAILY_WITHDRAWAL_NOT_EXISTS = new ErrorCode(1_002_030_033, "平台每日提现记录不存在");
     ErrorCode APPLICATION_FOR_WITHDRAWAL_CHANNEL_NOT_EXISTS = new ErrorCode(1_002_030_034, "提现渠道记录不存在");
+    ErrorCode CONSUMPTION_TOP_UP_LOG_NOT_EXISTS = new ErrorCode(1_002_030_035, "充值消费分记录不存在");
+    ErrorCode CONSUMPTION_CHANGE_LOG_NOT_EXISTS = new ErrorCode(1_002_030_036, "消费分变动记录不存在");
+    ErrorCode CONSUMPTION_TRANSFER_LOG_NOT_EXISTS = new ErrorCode(1_002_030_037, "消费分转让记录不存在");
+    ErrorCode CONSUMPTION_ERROR_LOG_NOT_EXISTS = new ErrorCode(1_002_030_037, "消费分异动记录不存在");
+    ErrorCode CONSUMPTION_ERROR_USER_NOT_EXISTS = new ErrorCode(1_002_030_037, "消费分异动用户记录不存在");
 
 }

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

@@ -36,4 +36,13 @@ public class ApplicationForWithdrawalPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "提现总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long withdrawConsumption;
+
+    @Schema(description = "计算百分比模板")
+    private String percentTemplate;
+
 }

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalRespVO.java

@@ -45,4 +45,16 @@ public class ApplicationForWithdrawalRespVO {
     @Schema(description = "提现账号名称")
     private String accountName;
 
+    @Schema(description = "提现总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现总金额,单位:分")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现消费分,单位:分")
+    private Long withdrawConsumption;
+
+    @Schema(description = "计算百分比模板")
+    @ExcelProperty("计算百分比模板")
+    private String percentTemplate;
+
 }

+ 10 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalSaveReqVO.java

@@ -34,4 +34,14 @@ public class ApplicationForWithdrawalSaveReqVO {
     @NotNull(message = "提现渠道记录id不能为空")
     private Long applicationForWithdrawalChannelId;
 
+    @Schema(description = "提现总金额,单位:分")
+    @NotNull(message = "提现金额,不能为空")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分")
+    private Long withdrawConsumption;
+
+    @Schema(description = "计算百分比模板")
+    private String percentTemplate;
+
 }

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

@@ -38,4 +38,11 @@ public class ApplicationForWithdrawalChannelPageReqVO extends PageParam {
 
     @Schema(description = "导出状态,已导出是1,未导出为0", example = "2")
     private Boolean excelStatus;
+
+    @Schema(description = "提现总金额,单位:分")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分")
+    private Long withdrawConsumption;
+
 }

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

@@ -46,4 +46,12 @@ public class ApplicationForWithdrawalChannelRespVO {
     @ExcelProperty("导出状态,已导出是1,未导出为0")
     private Boolean excelStatus;
 
+    @Schema(description = "提现总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现总金额,单位:分")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现消费分,单位:分")
+    private Long withdrawConsumption;
+
 }

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

@@ -38,4 +38,10 @@ public class ApplicationForWithdrawalChannelSaveReqVO {
     @NotNull(message = "导出状态,已导出是1,未导出为0不能为空")
     private Boolean excelStatus;
 
+    @Schema(description = "提现总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现总金额,单位:分不能为空")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long withdrawConsumption;
 }

+ 36 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/ConsumptionChangeLogController.java

@@ -0,0 +1,36 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.vo.*;
+import cn.newfeifan.mall.module.distri.service.consumptionchangelog.ConsumptionChangeLogService;
+
+@Tag(name = "管理后台 - 平台消费分变动记录")
+@RestController
+@RequestMapping("/distri/consumption-change-log")
+@Validated
+public class ConsumptionChangeLogController {
+
+    @Resource
+    private ConsumptionChangeLogService consumptionChangeLogService;
+
+    @GetMapping("/page")
+    @Operation(summary = "获得平台消费分变动记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-change-log:query')")
+    public CommonResult<PageResult<ConsumptionChangeLogRespVO>> getConsumptionChangeLogPage(@Valid ConsumptionChangeLogPageReqVO pageReqVO) {
+        PageResult<ConsumptionChangeLogRespVO> pageResult = consumptionChangeLogService.getConsumptionChangeLogPage(pageReqVO);
+        return success(pageResult);
+    }
+
+}

+ 45 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/vo/ConsumptionChangeLogPageReqVO.java

@@ -0,0 +1,45 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.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 ConsumptionChangeLogPageReqVO extends PageParam {
+
+    @Schema(description = "用户ID", example = "10871")
+    private Long userId;
+
+    @Schema(description = "变动的消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "变动后消费分")
+    private Long afterConsumptionPoints;
+
+    @Schema(description = "消费分变动类型", example = "2")
+    private Integer consumptionStatus;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "实际消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "消费分产生对象", example = "23323")
+    private Long generateUserId;
+
+    @Schema(description = "订单Id", example = "18715")
+    private Long orderId;
+
+    @Schema(description = "订单编号")
+    private String orderNo;
+
+}

+ 57 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/vo/ConsumptionChangeLogRespVO.java

@@ -0,0 +1,57 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.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 ConsumptionChangeLogRespVO {
+
+    @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7160")
+    @ExcelProperty("日志编号")
+    private Long id;
+
+    @Schema(description = "用户ID", example = "10871")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @Schema(description = "变动的消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("变动的消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "变动后消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("变动后消费分")
+    private Long afterConsumptionPoints;
+
+    @Schema(description = "消费分变动类型", example = "2")
+    @ExcelProperty("消费分变动类型")
+    private Integer consumptionStatus;
+
+    @Schema(description = "类型名称")
+    private String consumptionStatusName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "实际消费分")
+    @ExcelProperty("实际消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "消费分产生对象", example = "23323")
+    private Long generateUserId;
+
+    private String generateUserName;
+
+    @Schema(description = "订单Id", example = "18715")
+    @ExcelProperty("订单Id")
+    private Long orderId;
+
+    @Schema(description = "订单编号")
+    @ExcelProperty("订单编号")
+    private String orderNo;
+
+}

+ 41 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionchangelog/vo/ConsumptionChangeLogSaveReqVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 平台消费分变动记录新增/修改 Request VO")
+@Data
+@Builder
+public class ConsumptionChangeLogSaveReqVO {
+
+    @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7160")
+    private Long id;
+
+    @Schema(description = "用户ID", example = "10871")
+    private Long userId;
+
+    @Schema(description = "变动的消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "变动的消费分不能为空")
+    private Long consumptionPoints;
+
+    @Schema(description = "变动后消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "变动后消费分不能为空")
+    private Long afterConsumptionPoints;
+
+    @Schema(description = "消费分变动类型", example = "2")
+    private Integer consumptionStatus;
+
+    @Schema(description = "实际消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "消费分产生对象", example = "23323")
+    private Long generateUserId;
+
+    @Schema(description = "订单Id", example = "18715")
+    private Long orderId;
+
+    @Schema(description = "订单编号")
+    private String orderNo;
+
+}

+ 54 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/ConsumptionErrorLogController.java

@@ -0,0 +1,54 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerrorlog.ConsumptionErrorLogDO;
+import cn.newfeifan.mall.module.distri.service.consumptionerrorlog.ConsumptionErrorLogService;
+
+@Tag(name = "管理后台 - 消费分异动日志记录")
+@RestController
+@RequestMapping("/distri/consumption-error-log")
+@Validated
+public class ConsumptionErrorLogController {
+
+    @Resource
+    private ConsumptionErrorLogService consumptionErrorLogService;
+
+    @GetMapping("/get")
+    @Operation(summary = "获得消费分异动日志记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-error-log:query')")
+    public CommonResult<ConsumptionErrorLogRespVO> getConsumptionErrorLog(@RequestParam("id") Long id) {
+        ConsumptionErrorLogDO consumptionErrorLog = consumptionErrorLogService.getConsumptionErrorLog(id);
+        return success(BeanUtils.toBean(consumptionErrorLog, ConsumptionErrorLogRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得消费分异动日志记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-error-log:query')")
+    public CommonResult<PageResult<ConsumptionErrorLogRespVO>> getConsumptionErrorLogPage(@Valid ConsumptionErrorLogPageReqVO pageReqVO) {
+        PageResult<ConsumptionErrorLogDO> pageResult = consumptionErrorLogService.getConsumptionErrorLogPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ConsumptionErrorLogRespVO.class));
+    }
+
+    @GetMapping("/testCalcConsumptionErrorLog")
+    @Operation(summary = "测试计算消费分异动日志记录")
+    public CommonResult<String> testCalcConsumptionErrorLog() {
+        consumptionErrorLogService.calcEveryDayConsumptionPointsErrorLog();
+        return success("success");
+    }
+
+}

+ 27 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/vo/ConsumptionErrorLogPageReqVO.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.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 ConsumptionErrorLogPageReqVO extends PageParam {
+
+    @Schema(description = "异动用户数量", example = "27243")
+    private Integer errorUsersCount;
+
+    @Schema(description = "异动消费分总额")
+    private Long errorConsumptionPointsTotal;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 29 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/vo/ConsumptionErrorLogRespVO.java

@@ -0,0 +1,29 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.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 ConsumptionErrorLogRespVO {
+
+    @Schema(description = "异动日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18676")
+    @ExcelProperty("异动日志编号")
+    private Long id;
+
+    @Schema(description = "异动用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "27243")
+    @ExcelProperty("异动用户数量")
+    private Integer errorUsersCount;
+
+    @Schema(description = "异动消费分总额")
+    @ExcelProperty("异动消费分总额")
+    private Long errorConsumptionPointsTotal;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 21 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerrorlog/vo/ConsumptionErrorLogSaveReqVO.java

@@ -0,0 +1,21 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 消费分异动日志记录新增/修改 Request VO")
+@Data
+public class ConsumptionErrorLogSaveReqVO {
+
+    @Schema(description = "异动日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18676")
+    private Long id;
+
+    @Schema(description = "异动用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "27243")
+    @NotNull(message = "异动用户数量不能为空")
+    private Integer errorUsersCount;
+
+    @Schema(description = "异动消费分总额")
+    private Long errorConsumptionPointsTotal;
+
+}

+ 47 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/ConsumptionErrorUserController.java

@@ -0,0 +1,47 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerroruser.ConsumptionErrorUserDO;
+import cn.newfeifan.mall.module.distri.service.consumptionerroruser.ConsumptionErrorUserService;
+
+@Tag(name = "管理后台 - 消费分异动用户")
+@RestController
+@RequestMapping("/distri/consumption-error-user")
+@Validated
+public class ConsumptionErrorUserController {
+
+    @Resource
+    private ConsumptionErrorUserService consumptionErrorUserService;
+    @GetMapping("/get")
+    @Operation(summary = "获得消费分异动用户")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-error-user:query')")
+    public CommonResult<ConsumptionErrorUserRespVO> getConsumptionErrorUser(@RequestParam("id") Long id) {
+        ConsumptionErrorUserDO consumptionErrorUser = consumptionErrorUserService.getConsumptionErrorUser(id);
+        return success(BeanUtils.toBean(consumptionErrorUser, ConsumptionErrorUserRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得消费分异动用户分页")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-error-user:query')")
+    public CommonResult<PageResult<ConsumptionErrorUserRespVO>> getConsumptionErrorUserPage(@Valid ConsumptionErrorUserPageReqVO pageReqVO) {
+        PageResult<ConsumptionErrorUserDO> pageResult = consumptionErrorUserService.getConsumptionErrorUserPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ConsumptionErrorUserRespVO.class));
+    }
+
+}

+ 48 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/vo/ConsumptionErrorUserPageReqVO.java

@@ -0,0 +1,48 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.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 ConsumptionErrorUserPageReqVO extends PageParam {
+
+    @Schema(description = "异动日志编号", example = "10657")
+    private Long consumptionErrorLogId;
+
+    @Schema(description = "用户编号", example = "25907")
+    private Long userId;
+
+    @Schema(description = "用户名", example = "张三")
+    private String userName;
+
+    @Schema(description = "累加消费分总额")
+    private Long consumptionPointsTotal;
+
+    @Schema(description = "目前消费分总额")
+    private Long nowConsumptionPointsTotal;
+
+    @Schema(description = "可用消费分")
+    private Long currentConsumptionPointsTotal;
+
+    @Schema(description = "已用消费分")
+    private Long usedConsumptionPointsTotal;
+
+    @Schema(description = "已转让消费分")
+    private Long transferConsumptionPointsTotal;
+
+    @Schema(description = "异动消费分差额")
+    private Long errorConsumptionPointsTotal;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 57 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptionerroruser/vo/ConsumptionErrorUserRespVO.java

@@ -0,0 +1,57 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.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 ConsumptionErrorUserRespVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25118")
+    @ExcelProperty("编号")
+    private Long id;
+
+    @Schema(description = "异动日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10657")
+    @ExcelProperty("异动日志编号")
+    private Long consumptionErrorLogId;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25907")
+    @ExcelProperty("用户编号")
+    private Long userId;
+
+    @Schema(description = "用户名", example = "张三")
+    @ExcelProperty("用户名")
+    private String userName;
+
+    @Schema(description = "累加消费分总额")
+    @ExcelProperty("累加消费分总额")
+    private Long consumptionPointsTotal;
+
+    @Schema(description = "目前消费分总额")
+    @ExcelProperty("目前消费分总额")
+    private Long nowConsumptionPointsTotal;
+
+    @Schema(description = "可用消费分")
+    @ExcelProperty("可用消费分")
+    private Long currentConsumptionPointsTotal;
+
+    @Schema(description = "已用消费分")
+    @ExcelProperty("已用消费分")
+    private Long usedConsumptionPointsTotal;
+
+    @Schema(description = "已转让消费分")
+    @ExcelProperty("已转让消费分")
+    private Long transferConsumptionPointsTotal;
+
+    @Schema(description = "异动消费分差额")
+    @ExcelProperty("异动消费分差额")
+    private Long errorConsumptionPointsTotal;
+
+    @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/consumptionerroruser/vo/ConsumptionErrorUserSaveReqVO.java

@@ -0,0 +1,44 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 消费分异动用户新增/修改 Request VO")
+@Data
+@Builder
+public class ConsumptionErrorUserSaveReqVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25118")
+    private Long id;
+
+    @Schema(description = "异动日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10657")
+    @NotNull(message = "异动日志编号不能为空")
+    private Long consumptionErrorLogId;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25907")
+    @NotNull(message = "用户编号不能为空")
+    private Long userId;
+
+    @Schema(description = "用户名", example = "张三")
+    private String userName;
+
+    @Schema(description = "累加消费分总额")
+    private Long consumptionPointsTotal;
+
+    @Schema(description = "目前消费分总额")
+    private Long nowConsumptionPointsTotal;
+
+    @Schema(description = "可用消费分")
+    private Long currentConsumptionPointsTotal;
+
+    @Schema(description = "已用消费分")
+    private Long usedConsumptionPointsTotal;
+
+    @Schema(description = "已转让消费分")
+    private Long transferConsumptionPointsTotal;
+
+    @Schema(description = "异动消费分差额")
+    private Long errorConsumptionPointsTotal;
+
+}

+ 73 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/ConsumptionTopUpLogController.java

@@ -0,0 +1,73 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog;
+
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontopuplog.ConsumptionTopUpLogDO;
+import cn.newfeifan.mall.module.distri.service.consumptiontopuplog.ConsumptionTopUpLogService;
+
+@Tag(name = "管理后台 - 平台消费分充值记录")
+@RestController
+@RequestMapping("/distri/consumption-top-up-log")
+@Validated
+public class ConsumptionTopUpLogController {
+
+    @Resource
+    private ConsumptionTopUpLogService consumptionTopUpLogService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建平台消费分充值记录")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-top-up-log:create')")
+    public CommonResult<Long> createConsumptionTopUpLog(@Valid @RequestBody ConsumptionTopUpLogSaveReqVO createReqVO) {
+        return success(consumptionTopUpLogService.createConsumptionTopUpLog(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新平台消费分充值记录")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-top-up-log:update')")
+    public CommonResult<Boolean> updateConsumptionTopUpLog(@Valid @RequestBody ConsumptionTopUpLogSaveReqVO updateReqVO) {
+        consumptionTopUpLogService.updateConsumptionTopUpLog(updateReqVO);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得平台消费分充值记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-top-up-log:query')")
+    public CommonResult<ConsumptionTopUpLogRespVO> getConsumptionTopUpLog(@RequestParam("id") Long id) {
+        ConsumptionTopUpLogDO consumptionTopUpLog = consumptionTopUpLogService.getConsumptionTopUpLog(id);
+        return success(BeanUtils.toBean(consumptionTopUpLog, ConsumptionTopUpLogRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得平台消费分充值记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-top-up-log:query')")
+    public CommonResult<PageResult<ConsumptionTopUpLogRespVO>> getConsumptionTopUpLogPage(@Valid ConsumptionTopUpLogPageReqVO pageReqVO) {
+        PageResult<ConsumptionTopUpLogDO> pageResult = consumptionTopUpLogService.getConsumptionTopUpLogPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ConsumptionTopUpLogRespVO.class));
+    }
+
+    @GetMapping("/isFirstConsumption")
+    @Operation(summary = "是否是第一次充值消费分")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-top-up-log:query')")
+    public CommonResult<ConsumptionInfoVO> isFirstConsumption(@RequestParam("userId") Long userId) {
+        return success(consumptionTopUpLogService.isFirstConsumption(userId));
+    }
+}

+ 27 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionInfoVO.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 消费分信息
+ */
+
+@Data
+@Builder
+public class ConsumptionInfoVO {
+    /**
+     * 是否是第一次充值消费分
+     */
+    private Boolean isFirstConsumption;
+
+    /**
+     * 最低充值消费分
+     */
+    private Long minimumConsumptionPoints;
+
+    /**
+     * 充值的倍率
+     */
+    private String consumptionMagnification;
+}

+ 36 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionTopUpLogPageReqVO.java

@@ -0,0 +1,36 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.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 ConsumptionTopUpLogPageReqVO extends PageParam {
+
+    @Schema(description = "用户ID", example = "22163")
+    private Long userId;
+
+    @Schema(description = "转账凭证附件")
+    private String attachment;
+
+    @Schema(description = "消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "实际消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "用户名", example = "赵六")
+    private String userName;
+
+}

+ 41 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionTopUpLogRespVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.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 ConsumptionTopUpLogRespVO {
+
+    @Schema(description = "充值编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5725")
+    @ExcelProperty("充值编号")
+    private Long id;
+
+    @Schema(description = "用户ID", example = "22163")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @Schema(description = "转账凭证附件")
+    @ExcelProperty("转账凭证附件")
+    private String attachment;
+
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "实际消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("实际消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "用户名", example = "赵六")
+    @ExcelProperty("用户名")
+    private String userName;
+
+}

+ 34 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontopuplog/vo/ConsumptionTopUpLogSaveReqVO.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.vo;
+
+import cn.newfeifan.mall.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 平台消费分充值记录新增/修改 Request VO")
+@Data
+public class ConsumptionTopUpLogSaveReqVO {
+
+    @Schema(description = "充值编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5725")
+    private Long id;
+
+    @Schema(description = "用户ID", example = "22163")
+    private Long userId;
+
+    @Schema(description = "转账凭证附件")
+    private String attachment;
+
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "消费分不能为空")
+    private Long consumptionPoints;
+
+    @Schema(description = "实际消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "用户名", example = "赵六")
+    private String userName;
+
+    @Schema(description = "短信验证码 DTO")
+    private SmsCodeUseReqDTO smsCodeUseReqDTO;
+
+}

+ 94 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/ConsumptionTransferLogController.java

@@ -0,0 +1,94 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontransferlog.ConsumptionTransferLogDO;
+import cn.newfeifan.mall.module.distri.service.consumptiontransferlog.ConsumptionTransferLogService;
+
+@Tag(name = "管理后台 - 消费分转让记录")
+@RestController
+@RequestMapping("/distri/consumption-transfer-log")
+@Validated
+public class ConsumptionTransferLogController {
+
+    @Resource
+    private ConsumptionTransferLogService consumptionTransferLogService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建消费分转让记录")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-transfer-log:create')")
+    public CommonResult<Long> createConsumptionTransferLog(@Valid @RequestBody ConsumptionTransferLogSaveReqVO createReqVO) {
+        return success(consumptionTransferLogService.createConsumptionTransferLog(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新消费分转让记录")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-transfer-log:update')")
+    public CommonResult<Boolean> updateConsumptionTransferLog(@Valid @RequestBody ConsumptionTransferLogSaveReqVO updateReqVO) {
+        consumptionTransferLogService.updateConsumptionTransferLog(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除消费分转让记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:consumption-transfer-log:delete')")
+    public CommonResult<Boolean> deleteConsumptionTransferLog(@RequestParam("id") Long id) {
+        consumptionTransferLogService.deleteConsumptionTransferLog(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得消费分转让记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-transfer-log:query')")
+    public CommonResult<ConsumptionTransferLogRespVO> getConsumptionTransferLog(@RequestParam("id") Long id) {
+        ConsumptionTransferLogDO consumptionTransferLog = consumptionTransferLogService.getConsumptionTransferLog(id);
+        return success(BeanUtils.toBean(consumptionTransferLog, ConsumptionTransferLogRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得消费分转让记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-transfer-log:query')")
+    public CommonResult<PageResult<ConsumptionTransferLogRespVO>> getConsumptionTransferLogPage(@Valid ConsumptionTransferLogPageReqVO pageReqVO) {
+        PageResult<ConsumptionTransferLogDO> pageResult = consumptionTransferLogService.getConsumptionTransferLogPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ConsumptionTransferLogRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出消费分转让记录 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:consumption-transfer-log:export')")
+    @OperateLog(type = EXPORT)
+    public void exportConsumptionTransferLogExcel(@Valid ConsumptionTransferLogPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ConsumptionTransferLogDO> list = consumptionTransferLogService.getConsumptionTransferLogPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "消费分转让记录.xls", "数据", ConsumptionTransferLogRespVO.class,
+                        BeanUtils.toBean(list, ConsumptionTransferLogRespVO.class));
+    }
+
+}

+ 45 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/vo/ConsumptionTransferLogPageReqVO.java

@@ -0,0 +1,45 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.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 ConsumptionTransferLogPageReqVO extends PageParam {
+
+    @Schema(description = "转让用户ID", example = "7655")
+    private Long transferUserId;
+
+    @Schema(description = "转让人用户名", example = "王五")
+    private String transferUserName;
+
+    @Schema(description = "接收用户ID", example = "26720")
+    private Long recipientUserId;
+
+    @Schema(description = "接收人用户名", example = "张三")
+    private String recipientUserName;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "转让的消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "变动后消费分(余额)")
+    private Long afterTransferConsumptionPoints;
+
+    @Schema(description = "接收的消费分")
+    private Long recipientPoints;
+
+    @Schema(description = "变动后消费分(余额)")
+    private Long afterRecipientConsumptionPoints;
+
+}

+ 53 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/consumptiontransferlog/vo/ConsumptionTransferLogRespVO.java

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.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 ConsumptionTransferLogRespVO {
+
+    @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5320")
+    @ExcelProperty("日志编号")
+    private Long id;
+
+    @Schema(description = "转让用户ID", example = "7655")
+    @ExcelProperty("转让用户ID")
+    private Long transferUserId;
+
+    @Schema(description = "转让人用户名", example = "王五")
+    @ExcelProperty("转让人用户名")
+    private String transferUserName;
+
+    @Schema(description = "接收用户ID", example = "26720")
+    @ExcelProperty("接收用户ID")
+    private Long recipientUserId;
+
+    @Schema(description = "接收人用户名", example = "张三")
+    @ExcelProperty("接收人用户名")
+    private String recipientUserName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "转让的消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("转让的消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "变动后消费分(余额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("变动后消费分(余额)")
+    private Long afterTransferConsumptionPoints;
+
+    @Schema(description = "接收的消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("接收的消费分")
+    private Long recipientPoints;
+
+    @Schema(description = "变动后消费分(余额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("变动后消费分(余额)")
+    private Long afterRecipientConsumptionPoints;
+
+}

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

@@ -0,0 +1,42 @@
+package cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 消费分转让记录新增/修改 Request VO")
+@Data
+public class ConsumptionTransferLogSaveReqVO {
+
+    @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5320")
+    private Long id;
+
+    @Schema(description = "转让用户ID", example = "7655")
+    private Long transferUserId;
+
+    @Schema(description = "转让人用户名", example = "王五")
+    private String transferUserName;
+
+    @Schema(description = "接收用户ID", example = "26720")
+    private Long recipientUserId;
+
+    @Schema(description = "接收人用户名", example = "张三")
+    private String recipientUserName;
+
+    @Schema(description = "转让的消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "转让的消费分不能为空")
+    private Long consumptionPoints;
+
+    @Schema(description = "变动后消费分(余额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "变动后消费分(余额)不能为空")
+    private Long afterTransferConsumptionPoints;
+
+    @Schema(description = "接收的消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "接收的消费分不能为空")
+    private Long recipientPoints;
+
+    @Schema(description = "变动后消费分(余额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "变动后消费分(余额)不能为空")
+    private Long afterRecipientConsumptionPoints;
+
+}

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/excelvo/DailyBillExcelRespVO.java

@@ -39,6 +39,18 @@ public class DailyBillExcelRespVO {
     @ExcelProperty("退款积分")
     private Double refundIntegral;
 
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("消费分")
+    private Double consumptionPoints;
+
+    @Schema(description = "确收消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("确收消费分")
+    private Double receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("退款消费分")
+    private Double refundConsumptionPoints;
+
     @Schema(description = "订单数,默认为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "27164")
     @ExcelProperty("订单数")
     private Long orderCount;

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

@@ -56,4 +56,13 @@ public class DailyBillPageReqVO extends PageParam {
     @Schema(description = "平台每日账单表id", example = "6905")
     private Long ptDailyBillId;
 
+    @Schema(description = "消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "确收消费分")
+    private Long receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分")
+    private Long refundConsumptionPoints;
+
 }

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/vo/DailyBillRespVO.java

@@ -76,6 +76,18 @@ public class DailyBillRespVO {
     @ExcelProperty("平台每日账单表id")
     private Long ptDailyBillId;
 
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "确收消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("确收消费分")
+    private Long receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("退款消费分")
+    private Long refundConsumptionPoints;
+
     public String getOrderCalcTime() {
         return orderCalcTime.toString();
     }

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/dailybill/vo/DailyBillSaveReqVO.java

@@ -59,4 +59,16 @@ public class DailyBillSaveReqVO {
     @NotNull(message = "平台每日账单表id不能为空")
     private Long ptDailyBillId;
 
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "消费分不能为空")
+    private Long consumptionPoints;
+
+    @Schema(description = "确收消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "确收消费分不能为空")
+    private Long receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "退款消费分不能为空")
+    private Long refundConsumptionPoints;
+
 }

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

@@ -47,4 +47,7 @@ public class IntegralPageReqVO extends PageParam {
 
     @Schema(description = "累计获取的峰值")
     private Long highQuotaTotal;
+
+    @Schema(description = "当前消费分")
+    private Long consumptionPoints;
 }

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

@@ -57,4 +57,8 @@ public class IntegralRespVO {
     @Schema(description = "累计获取的峰值")
     @ExcelProperty("累计获取的峰值")
     private Long highQuotaTotal;
+
+    @Schema(description = "当前消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("当前消费分")
+    private Long consumptionPoints;
 }

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

@@ -49,4 +49,7 @@ public class IntegralSaveReqVO {
 
     @Schema(description = "累计获取的峰值")
     private Long highQuotaTotal;
+
+    @Schema(description = "当前消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long consumptionPoints;
 }

+ 16 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentagePageReqVO.java

@@ -62,4 +62,20 @@ public class OrderPercentagePageReqVO extends PageParam {
     @Schema(description = "签到获取身价", example = "1")
     private String signInSocialStatus;
 
+    @Schema(description = "充值消费分的倍率")
+    private String consumptionMagnification;
+
+    @Schema(description = "首次充值消费分的额度")
+    private String firstTopUpConsumption;
+
+    @Schema(description = "后续充值消费分的额度")
+    private String followUpConsumption;
+
+    @Schema(description = "提现消费分百分比")
+    private String withdrawConsumption;
+
+    @Schema(description = "提现佣金百分比")
+    private String withdrawCommission;
+
+
 }

+ 20 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRespVO.java

@@ -74,4 +74,24 @@ public class OrderPercentageRespVO {
     @Schema(description = "签到获取身价", example = "1")
     @ExcelProperty("签到获取身价")
     private String signInSocialStatus;
+
+    @Schema(description = "充值消费分的倍率")
+    @ExcelProperty("充值消费分的倍率")
+    private String consumptionMagnification;
+
+    @Schema(description = "首次充值消费分的额度")
+    @ExcelProperty("首次充值消费分的额度")
+    private String firstTopUpConsumption;
+
+    @Schema(description = "后续充值消费分的额度")
+    @ExcelProperty("后续充值消费分的额度")
+    private String followUpConsumption;
+
+    @Schema(description = "提现消费分百分比")
+    @ExcelProperty("提现消费分百分比")
+    private String withdrawConsumption;
+
+    @Schema(description = "提现佣金百分比")
+    @ExcelProperty("提现佣金百分比")
+    private String withdrawCommission;
 }

+ 14 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageSaveReqVO.java

@@ -55,5 +55,19 @@ public class OrderPercentageSaveReqVO {
     @Schema(description = "签到获取身价", example = "1")
     private String signInSocialStatus;
 
+    @Schema(description = "充值消费分的倍率")
+    private String consumptionMagnification;
+
+    @Schema(description = "首次充值消费分的额度")
+    private String firstTopUpConsumption;
+
+    @Schema(description = "后续充值消费分的额度")
+    private String followUpConsumption;
+
+    @Schema(description = "提现消费分百分比")
+    private String withdrawConsumption;
+
+    @Schema(description = "提现佣金百分比")
+    private String withdrawCommission;
 
 }

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

@@ -9,20 +9,11 @@ import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Operation;
 
 import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
 
-import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
-
-import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
-import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
 
 import cn.newfeifan.mall.module.distri.controller.admin.partitioncrash.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.partitioncrash.PartitionCrashDO;
@@ -81,17 +72,4 @@ public class PartitionCrashController {
         return success(BeanUtils.toBean(pageResult, PartitionCrashRespVO.class));
     }
 
-    @GetMapping("/export-excel")
-    @Operation(summary = "导出分区碰撞 Excel")
-    @PreAuthorize("@ss.hasPermission('distri:partition-crash:export')")
-    @OperateLog(type = EXPORT)
-    public void exportPartitionCrashExcel(@Valid PartitionCrashPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<PartitionCrashDO> list = partitionCrashService.getPartitionCrashPage(pageReqVO).getList();
-        // 导出 Excel
-        ExcelUtils.write(response, "分区碰撞.xls", "数据", PartitionCrashRespVO.class,
-                        BeanUtils.toBean(list, PartitionCrashRespVO.class));
-    }
-
 }

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

@@ -46,4 +46,10 @@ public class PartitionCrashPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private LocalDate everyday;
 
+    @Schema(description = "是否选中碰撞记录")
+    private Boolean isSelectCrash;
+
+    @Schema(description = "是否排序")
+    private Boolean isSelectCrashYesterday;
+
 }

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

@@ -48,4 +48,12 @@ public class PtDailyBillPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "确收消费分")
+    private Long receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分")
+    private Long refundConsumptionPoints;
 }

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailybill/vo/PtDailyBillRespVO.java

@@ -56,6 +56,18 @@ public class PtDailyBillRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("消费分")
+    private Long consumptionPoints;
+
+    @Schema(description = "确收消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("确收消费分")
+    private Long receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("退款消费分")
+    private Long refundConsumptionPoints;
+
     public String getOrderCalcTime() {
         return orderCalcTime.toString();
     }

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailybill/vo/PtDailyBillSaveReqVO.java

@@ -49,4 +49,16 @@ public class PtDailyBillSaveReqVO {
     @NotEmpty(message = "订单ID列表,文本类型不能为空")
     private String orderIds;
 
+    @Schema(description = "消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "消费分不能为空")
+    private Long consumptionPoints;
+
+    @Schema(description = "确收消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "确收消费分不能为空")
+    private Long receivedConsumptionPoints;
+
+    @Schema(description = "退款消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "退款消费分不能为空")
+    private Long refundConsumptionPoints;
+
 }

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

@@ -34,5 +34,11 @@ public class PtDailyWithdrawalPageReqVO extends PageParam {
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
+    @Schema(description = "提现总金额,单位:分")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分")
+    private Long withdrawConsumption;
+
 
 }

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

@@ -38,4 +38,12 @@ public class PtDailyWithdrawalRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "提现总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现总金额,单位:分")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现消费分,单位:分")
+    private Long withdrawConsumption;
+
 }

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

@@ -31,4 +31,12 @@ public class PtDailyWithdrawalSaveReqVO {
     @NotNull(message = "提现截止时间不能为空")
     private LocalDateTime endTime;
 
+    @Schema(description = "提现总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现总金额,单位:分不能为空")
+    private Long amountTotal;
+
+    @Schema(description = "提现消费分,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现消费分,单位:分不能为空")
+    private Long withdrawConsumption;
+
 }

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptsettlement/vo/PtSettlementPageReqVO.java

@@ -34,4 +34,6 @@ public class PtSettlementPageReqVO extends PageParam {
     @Schema(description = "导出状态,已导出是1,未导出为0", example = "1")
     private Boolean exportStatus;
 
+    @Schema(description = "抵扣消费分")
+    private Long consumptionPoints;
 }

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

@@ -41,4 +41,8 @@ public class PtSettlementRespVO {
 
     @Schema(description = "导出状态,已导出是1,未导出为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Boolean exportStatus;
+
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("抵扣消费分")
+    private Long consumptionPoints;
 }

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

@@ -29,4 +29,7 @@ public class PtSettlementSaveReqVO {
     @Schema(description = "导出状态,已导出是1,未导出为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Boolean exportStatus;
 
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "抵扣消费分不能为空")
+    private Long consumptionPoints;
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/shopsettlement/excelvo/ShopSettlementExcelRespVO.java

@@ -28,6 +28,10 @@ public class ShopSettlementExcelRespVO {
     @ExcelProperty("抵扣积分")
     private Double shopAmount;
 
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("抵扣消费分")
+    private Double shopConsumptionPoints;
+
     @Schema(description = "共计成本价格(高精度 + 成本)")
     @ExcelProperty("应结(成本)")
     private Double shopTotalHighAmount;

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/shopsettlement/vo/ShopSettlementPageReqVO.java

@@ -40,4 +40,6 @@ public class ShopSettlementPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "抵扣消费分")
+    private Long ShopConsumptionPoints;
 }

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

@@ -50,4 +50,7 @@ public class ShopSettlementRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("抵扣消费分")
+    private Long shopConsumptionPoints;
 }

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

@@ -43,4 +43,8 @@ public class ShopSettlementSaveReqVO {
 
     @Schema(description = "账户号码")
     private String accountNumber;
+
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "抵扣消费分不能为空")
+    private Long shopConsumptionPoints;
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/convert/dailybill/DailyBillConvert.java

@@ -22,6 +22,9 @@ public interface DailyBillConvert {
             respVO.setIntegral(respVO.getIntegral() / MILLION);
             respVO.setReceivedIntegral(respVO.getReceivedIntegral() / MILLION);
             respVO.setRefundIntegral(respVO.getRefundIntegral() / MILLION);
+            respVO.setConsumptionPoints(respVO.getConsumptionPoints() / MILLION);
+            respVO.setReceivedConsumptionPoints(respVO.getReceivedConsumptionPoints() / MILLION);
+            respVO.setRefundConsumptionPoints(respVO.getRefundConsumptionPoints() / MILLION);
         }
 
         return respVOList;

+ 1 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/convert/shopsettlement/ShopSettlementConvert.java

@@ -18,6 +18,7 @@ public interface ShopSettlementConvert {
         for (ShopSettlementExcelRespVO respVO : respVOList) {
             respVO.setPlatformCollectionAmount(respVO.getPlatformCollectionAmount() / ONE_HUNDRED);
             respVO.setShopAmount(respVO.getShopAmount() / MILLION);
+            respVO.setShopConsumptionPoints(respVO.getShopConsumptionPoints() / MILLION);
             respVO.setShopTotalHighAmount(Math.floor(respVO.getShopTotalHighAmount() / ONE_HUNDRED * ONE_HUNDRED) / ONE_HUNDRED);       // 将小数点后的位数截断,保留两位但不进行四舍五入
         }
         return respVOList;

+ 13 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawal/ApplicationForWithdrawalDO.java

@@ -48,5 +48,18 @@ public class ApplicationForWithdrawalDO extends BaseDO {
      * 提现渠道记录id
      */
     private Long applicationForWithdrawalChannelId;
+    /**
+     * 提现总金额,单位:分
+     */
+    private Long amountTotal;
+    /**
+     * 提现消费分,单位:分
+     */
+    private Long withdrawConsumption;
+    /**
+     * 计算百分比模板
+     */
+    private String percentTemplate;
+
 
 }

+ 9 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelDO.java

@@ -54,4 +54,13 @@ public class ApplicationForWithdrawalChannelDO extends BaseDO {
      */
     private Boolean excelStatus;
 
+    /**
+     * 提现总金额,单位:分
+     */
+    private Long amountTotal;
+    /**
+     * 提现消费分,单位:分
+     */
+    private Long withdrawConsumption;
+
 }

+ 62 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptionchangelog/ConsumptionChangeLogDO.java

@@ -0,0 +1,62 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.consumptionchangelog;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台消费分变动记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_consumption_change_log")
+@KeySequence("distri_consumption_change_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConsumptionChangeLogDO extends BaseDO {
+
+    /**
+     * 日志编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 变动的消费分
+     */
+    private Long consumptionPoints;
+    /**
+     * 变动后消费分
+     */
+    private Long afterConsumptionPoints;
+    /**
+     * 消费分变动类型
+     */
+    private Integer consumptionStatus;
+    /**
+     * 实际消费分
+     */
+    private Long practicalConsumptionPoints;
+
+    /**
+     * 消费分产生对象
+     */
+    private Long generateUserId;
+    /**
+     * 订单Id
+     */
+    private Long orderId;
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+
+
+}

+ 36 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptionerrorlog/ConsumptionErrorLogDO.java

@@ -0,0 +1,36 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerrorlog;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 消费分异动日志记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_consumption_error_log")
+@KeySequence("distri_consumption_error_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConsumptionErrorLogDO extends BaseDO {
+
+    /**
+     * 异动日志编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 异动用户数量
+     */
+    private Integer errorUsersCount;
+    /**
+     * 异动消费分总额
+     */
+    private Long errorConsumptionPointsTotal;
+
+}

+ 65 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptionerroruser/ConsumptionErrorUserDO.java

@@ -0,0 +1,65 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerroruser;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 消费分异动用户 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_consumption_error_user")
+@KeySequence("distri_consumption_error_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConsumptionErrorUserDO extends BaseDO {
+
+    /**
+     * 编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 异动日志编号
+     */
+    private Long consumptionErrorLogId;
+    /**
+     * 用户编号
+     */
+    private Long userId;
+    /**
+     * 用户名
+     */
+    private String userName;
+    /**
+     * 累加消费分总额
+     */
+    private Long consumptionPointsTotal;
+    /**
+     * 目前消费分总额
+     */
+    private Long nowConsumptionPointsTotal;
+    /**
+     * 可用消费分
+     */
+    private Long currentConsumptionPointsTotal;
+    /**
+     * 已用消费分
+     */
+    private Long usedConsumptionPointsTotal;
+    /**
+     * 已转让消费分
+     */
+    private Long transferConsumptionPointsTotal;
+
+    /**
+     * 异动消费分差额
+     */
+    private Long errorConsumptionPointsTotal;
+
+}

+ 48 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptiontopuplog/ConsumptionTopUpLogDO.java

@@ -0,0 +1,48 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontopuplog;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台消费分充值记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_consumption_top_up_log")
+@KeySequence("distri_consumption_top_up_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConsumptionTopUpLogDO extends BaseDO {
+
+    /**
+     * 充值编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 转账凭证附件
+     */
+    private String attachment;
+    /**
+     * 消费分
+     */
+    private Long consumptionPoints;
+    /**
+     * 实际消费分
+     */
+    private Long practicalConsumptionPoints;
+    /**
+     * 用户名
+     */
+    private String userName;
+
+}

+ 60 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/consumptiontransferlog/ConsumptionTransferLogDO.java

@@ -0,0 +1,60 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontransferlog;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 消费分转让记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_consumption_transfer_log")
+@KeySequence("distri_consumption_transfer_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConsumptionTransferLogDO extends BaseDO {
+
+    /**
+     * 日志编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 转让用户ID
+     */
+    private Long transferUserId;
+    /**
+     * 转让人用户名
+     */
+    private String transferUserName;
+    /**
+     * 接收用户ID
+     */
+    private Long recipientUserId;
+    /**
+     * 接收人用户名
+     */
+    private String recipientUserName;
+    /**
+     * 转让的消费分
+     */
+    private Long consumptionPoints;
+    /**
+     * 变动后消费分(余额)
+     */
+    private Long afterTransferConsumptionPoints;
+    /**
+     * 接收的消费分
+     */
+    private Long recipientPoints;
+    /**
+     * 变动后消费分(余额)
+     */
+    private Long afterRecipientConsumptionPoints;
+
+}

+ 13 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/dailybill/DailyBillDO.java

@@ -75,4 +75,17 @@ public class DailyBillDO extends BaseDO {
      */
     private Long ptDailyBillId;
 
+    /**
+     * 消费分
+     */
+    private Long consumptionPoints;
+    /**
+     * 确收消费分
+     */
+    private Long receivedConsumptionPoints;
+    /**
+     * 退款消费分
+     */
+    private Long refundConsumptionPoints;
+
 }

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

@@ -68,4 +68,9 @@ public class IntegralDO extends BaseDO {
      * 累计获取的峰值
      */
     private Long highQuotaTotal;
+
+    /**
+     * 当前消费分
+     */
+    private Long consumptionPoints;
 }

+ 22 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java

@@ -91,6 +91,28 @@ public class OrderPercentageDO extends BaseDO {
      */
     private String signInSocialStatus;
 
+    /**
+     * 充值消费分的倍率
+     */
+    private String consumptionMagnification;
+    /**
+     * 首次充值消费分的额度
+     */
+    private String firstTopUpConsumption;
+    /**
+     * 后续充值消费分的额度
+     */
+    private String followUpConsumption;
+
+    /**
+     * 提现佣金百分比
+     */
+    private String withdrawCommission;
+    /**
+     * 提现消费分百分比
+     */
+    private String withdrawConsumption;
+
     public String getGrossProfitBonusQuotaPerc() {
         double grossProfitBonusQuotaPerc = Double.parseDouble(this.grossProfitBonusQuotaPerc);
         if(grossProfitBonusQuotaPerc > GROSS_PROFIT_BONUS_QUOTA_PERC){

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptdailybill/PtDailyBillDO.java

@@ -63,4 +63,16 @@ public class PtDailyBillDO extends BaseDO {
      */
     private String orderIds;
 
+    /**
+     * 消费分
+     */
+    private Long consumptionPoints;
+    /**
+     * 确收消费分
+     */
+    private Long receivedConsumptionPoints;
+    /**
+     * 退款消费分
+     */
+    private Long refundConsumptionPoints;
 }

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

@@ -46,4 +46,12 @@ public class PtDailyWithdrawalDO extends BaseDO {
      */
     private LocalDateTime endTime;
 
+    /**
+     * 提现总金额,单位:分
+     */
+    private Long amountTotal;
+    /**
+     * 提现消费分,单位:分
+     */
+    private Long withdrawConsumption;
 }

+ 5 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptsettlement/PtSettlementDO.java

@@ -52,4 +52,9 @@ public class PtSettlementDO extends BaseDO {
      */
     private Boolean exportStatus;
 
+    /**
+     * 抵扣消费分
+     */
+    private Long consumptionPoints;
+
 }

+ 6 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/shopsettlement/ShopSettlementDO.java

@@ -34,7 +34,7 @@ public class ShopSettlementDO extends BaseDO {
      */
     private Long merchantId;
     /**
-     * 销售额(积分 + 支付金额)
+     * 销售额(积分 + 消费分 + 支付金额)
      */
     private Integer platformCollectionAmount;
     /**
@@ -62,4 +62,9 @@ public class ShopSettlementDO extends BaseDO {
      */
     private String accountNumber;
 
+    /**
+     * 抵扣消费分
+     */
+    private Long shopConsumptionPoints;
+
 }

+ 29 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptionchangelog/ConsumptionChangeLogMapper.java

@@ -0,0 +1,29 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.consumptionchangelog;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionchangelog.ConsumptionChangeLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.vo.*;
+
+/**
+ * 平台消费分变动记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ConsumptionChangeLogMapper extends BaseMapperX<ConsumptionChangeLogDO> {
+
+    default PageResult<ConsumptionChangeLogDO> selectPage(ConsumptionChangeLogPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ConsumptionChangeLogDO>()
+                .eqIfPresent(ConsumptionChangeLogDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(ConsumptionChangeLogDO::getConsumptionPoints, reqVO.getConsumptionPoints())
+                .eqIfPresent(ConsumptionChangeLogDO::getAfterConsumptionPoints, reqVO.getAfterConsumptionPoints())
+                .eqIfPresent(ConsumptionChangeLogDO::getConsumptionStatus, reqVO.getConsumptionStatus())
+                .betweenIfPresent(ConsumptionChangeLogDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ConsumptionChangeLogDO::getId));
+    }
+
+}

+ 27 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptionerrorlog/ConsumptionErrorLogMapper.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.consumptionerrorlog;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerrorlog.ConsumptionErrorLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.vo.*;
+
+/**
+ * 消费分异动日志记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ConsumptionErrorLogMapper extends BaseMapperX<ConsumptionErrorLogDO> {
+
+    default PageResult<ConsumptionErrorLogDO> selectPage(ConsumptionErrorLogPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ConsumptionErrorLogDO>()
+                .eqIfPresent(ConsumptionErrorLogDO::getErrorUsersCount, reqVO.getErrorUsersCount())
+                .eqIfPresent(ConsumptionErrorLogDO::getErrorConsumptionPointsTotal, reqVO.getErrorConsumptionPointsTotal())
+                .betweenIfPresent(ConsumptionErrorLogDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ConsumptionErrorLogDO::getId));
+    }
+
+}

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

@@ -0,0 +1,33 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.consumptionerroruser;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerroruser.ConsumptionErrorUserDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.vo.*;
+
+/**
+ * 消费分异动用户 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ConsumptionErrorUserMapper extends BaseMapperX<ConsumptionErrorUserDO> {
+
+    default PageResult<ConsumptionErrorUserDO> selectPage(ConsumptionErrorUserPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ConsumptionErrorUserDO>()
+                .eqIfPresent(ConsumptionErrorUserDO::getConsumptionErrorLogId, reqVO.getConsumptionErrorLogId())
+                .eqIfPresent(ConsumptionErrorUserDO::getUserId, reqVO.getUserId())
+                .likeIfPresent(ConsumptionErrorUserDO::getUserName, reqVO.getUserName())
+                .eqIfPresent(ConsumptionErrorUserDO::getConsumptionPointsTotal, reqVO.getConsumptionPointsTotal())
+                .eqIfPresent(ConsumptionErrorUserDO::getNowConsumptionPointsTotal, reqVO.getNowConsumptionPointsTotal())
+                .eqIfPresent(ConsumptionErrorUserDO::getCurrentConsumptionPointsTotal, reqVO.getCurrentConsumptionPointsTotal())
+                .eqIfPresent(ConsumptionErrorUserDO::getUsedConsumptionPointsTotal, reqVO.getUsedConsumptionPointsTotal())
+                .eqIfPresent(ConsumptionErrorUserDO::getErrorConsumptionPointsTotal, reqVO.getErrorConsumptionPointsTotal())
+                .betweenIfPresent(ConsumptionErrorUserDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ConsumptionErrorUserDO::getId));
+    }
+
+}

+ 30 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptiontopuplog/ConsumptionTopUpLogMapper.java

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.consumptiontopuplog;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontopuplog.ConsumptionTopUpLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.vo.*;
+
+/**
+ * 平台消费分充值记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ConsumptionTopUpLogMapper extends BaseMapperX<ConsumptionTopUpLogDO> {
+
+    default PageResult<ConsumptionTopUpLogDO> selectPage(ConsumptionTopUpLogPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ConsumptionTopUpLogDO>()
+                .eqIfPresent(ConsumptionTopUpLogDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(ConsumptionTopUpLogDO::getAttachment, reqVO.getAttachment())
+                .eqIfPresent(ConsumptionTopUpLogDO::getConsumptionPoints, reqVO.getConsumptionPoints())
+                .eqIfPresent(ConsumptionTopUpLogDO::getPracticalConsumptionPoints, reqVO.getPracticalConsumptionPoints())
+                .betweenIfPresent(ConsumptionTopUpLogDO::getCreateTime, reqVO.getCreateTime())
+                .likeIfPresent(ConsumptionTopUpLogDO::getUserName, reqVO.getUserName())
+                .orderByDesc(ConsumptionTopUpLogDO::getId));
+    }
+
+}

+ 30 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/consumptiontransferlog/ConsumptionTransferLogMapper.java

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.consumptiontransferlog;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontransferlog.ConsumptionTransferLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.vo.*;
+
+/**
+ * 消费分转让记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ConsumptionTransferLogMapper extends BaseMapperX<ConsumptionTransferLogDO> {
+
+    default PageResult<ConsumptionTransferLogDO> selectPage(ConsumptionTransferLogPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ConsumptionTransferLogDO>()
+                .eqIfPresent(ConsumptionTransferLogDO::getTransferUserId, reqVO.getTransferUserId())
+                .likeIfPresent(ConsumptionTransferLogDO::getTransferUserName, reqVO.getTransferUserName())
+                .eqIfPresent(ConsumptionTransferLogDO::getConsumptionPoints, reqVO.getConsumptionPoints())
+                .eqIfPresent(ConsumptionTransferLogDO::getRecipientUserId, reqVO.getRecipientUserId())
+                .likeIfPresent(ConsumptionTransferLogDO::getRecipientUserName, reqVO.getRecipientUserName())
+                .betweenIfPresent(ConsumptionTransferLogDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ConsumptionTransferLogDO::getId));
+    }
+
+}

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

@@ -28,7 +28,12 @@ public interface PartitionCrashMapper extends BaseMapperX<PartitionCrashDO> {
                 .betweenIfPresent(PartitionCrashDO::getCreateTime, LocalDateTimeTool.startTime(reqVO.getEveryday()), LocalDateTimeTool.endTime(reqVO.getEveryday()))
                 .likeIfPresent(PartitionCrashDO::getUserName, reqVO.getUserName())
                 .likeIfPresent(PartitionCrashDO::getNickName, reqVO.getNickName())
-                .orderByDesc(PartitionCrashDO::getId);
+                .orderByDesc(PartitionCrashDO::getBrotherPrice)
+                .orderByDesc(PartitionCrashDO::getSonPrice);
+        if (reqVO.getIsSelectCrash() != null && reqVO.getIsSelectCrash()) {
+            queryWrapper.ne(PartitionCrashDO::getBrotherPrice, 0);
+            queryWrapper.ne(PartitionCrashDO::getSonPrice, 0);
+        }
         return selectPage(reqVO, queryWrapper);
     }
 

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

@@ -13,6 +13,7 @@ import java.util.List;
 
 import static cn.newfeifan.mall.module.distri.constant.DistriConstants.PT_ID;
 import static cn.newfeifan.mall.module.distri.enums.CaclEnum.*;
+import static cn.newfeifan.mall.module.distri.enums.CaclEnum.COMMISSION_TRANSITION;
 
 /**
  * 平台利润记录 Mapper
@@ -41,7 +42,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                 ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
                 MANUAL_RETURN_INTEGRAL.getType(),
                 WITHDRAWAL.getType(),
-                WITHDRAWAL_ERROR.getType()
+                WITHDRAWAL_ERROR.getType(),
+                COMMISSION_TRANSITION.getType()
         );
 
         if(reqVO.getUserId().equals(PT_ID)){

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalService.java

@@ -65,4 +65,10 @@ public interface ApplicationForWithdrawalService {
      * @return 提现记录
      */
     List<ApplicationForWithdrawalDO> selectListByChannelId(Long id);
+
+    /**
+     * 获取所有的提现记录
+     * @return 提现记录
+     */
+    List<ApplicationForWithdrawalDO> selectList();
 }

+ 7 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.newfeifan.mall.module.distri.service.applicationforwithdrawal;
 
+import cn.newfeifan.mall.module.distri.constant.DistriConstants;
 import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo.ApplicationForWithdrawalChannelExcelRespVO;
 import cn.newfeifan.mall.module.distri.enums.WithdrawalChannelTypeEnum;
 import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
@@ -94,7 +95,7 @@ public class ApplicationForWithdrawalServiceImpl implements ApplicationForWithdr
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
             ApplicationForWithdrawalChannelExcelRespVO build = ApplicationForWithdrawalChannelExcelRespVO.builder()
-                    .amount(withdrawalDO.getAmount().toString())
+                    .amount(String.valueOf(withdrawalDO.getAmount() / DistriConstants.ONE_HUNDRED))
                     .account(withdrawalDO.getWithdrawalAccount())
                     .mark("提现日期: " + formatter.format(withdrawalDO.getCreateTime()))
                     .build();
@@ -116,4 +117,9 @@ public class ApplicationForWithdrawalServiceImpl implements ApplicationForWithdr
         return applicationForWithdrawalMapper.selectList(ApplicationForWithdrawalDO::getApplicationForWithdrawalChannelId,id, ApplicationForWithdrawalDO::getStatus,0);
     }
 
+    @Override
+    public List<ApplicationForWithdrawalDO> selectList() {
+        return applicationForWithdrawalMapper.selectList();
+    }
+
 }

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel;
 
 import cn.newfeifan.mall.framework.common.exception.ErrorCode;
+import cn.newfeifan.mall.module.distri.constant.DistriConstants;
 import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal.vo.ApplicationForWithdrawalSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.ptdailywithdrawal.vo.PtDailyWithdrawalSaveReqVO;
@@ -166,6 +167,7 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
             Double money = Double.parseDouble(importVO.getMoney());
 
             for (ApplicationForWithdrawalDO withdrawalDO : withdrawalList) {
+                withdrawalDO.setAmount(withdrawalDO.getAmount() / DistriConstants.ONE_HUNDRED);
                 Double amount = Double.parseDouble(withdrawalDO.getAmount().toString());
 
                 // 当前提提现记录的金额和账号与Excel中的金额和账号一致时

+ 60 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionchangelog/ConsumptionChangeLogService.java

@@ -0,0 +1,60 @@
+package cn.newfeifan.mall.module.distri.service.consumptionchangelog;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionchangelog.ConsumptionChangeLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 平台消费分变动记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ConsumptionChangeLogService {
+
+    /**
+     * 创建平台消费分变动记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createConsumptionChangeLog(@Valid ConsumptionChangeLogSaveReqVO createReqVO);
+
+    /**
+     * 更新平台消费分变动记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateConsumptionChangeLog(@Valid ConsumptionChangeLogSaveReqVO updateReqVO);
+
+    /**
+     * 删除平台消费分变动记录
+     *
+     * @param id 编号
+     */
+    void deleteConsumptionChangeLog(Long id);
+
+    /**
+     * 获得平台消费分变动记录
+     *
+     * @param id 编号
+     * @return 平台消费分变动记录
+     */
+    ConsumptionChangeLogDO getConsumptionChangeLog(Long id);
+
+    /**
+     * 获得平台消费分变动记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台消费分变动记录分页
+     */
+    PageResult<ConsumptionChangeLogRespVO> getConsumptionChangeLogPage(ConsumptionChangeLogPageReqVO pageReqVO);
+
+    /**
+     * 根据状态获取消费分变动记录
+     * @param type 状态
+     * @return 变动记录
+     */
+    List<ConsumptionChangeLogDO> selectListByStatus(Integer type);
+}

+ 92 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionchangelog/ConsumptionChangeLogServiceImpl.java

@@ -0,0 +1,92 @@
+package cn.newfeifan.mall.module.distri.service.consumptionchangelog;
+
+import cn.newfeifan.mall.module.distri.enums.ConsumptionEnum;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.user.MemberUserService;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionchangelog.ConsumptionChangeLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.consumptionchangelog.ConsumptionChangeLogMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 平台消费分变动记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ConsumptionChangeLogServiceImpl implements ConsumptionChangeLogService {
+
+    @Resource
+    private ConsumptionChangeLogMapper consumptionChangeLogMapper;
+
+    @Resource
+    private MemberUserService memberUserService;
+
+    @Override
+    public Long createConsumptionChangeLog(ConsumptionChangeLogSaveReqVO createReqVO) {
+        // 插入
+        ConsumptionChangeLogDO consumptionChangeLog = BeanUtils.toBean(createReqVO, ConsumptionChangeLogDO.class);
+        consumptionChangeLogMapper.insert(consumptionChangeLog);
+        // 返回
+        return consumptionChangeLog.getId();
+    }
+
+    @Override
+    public void updateConsumptionChangeLog(ConsumptionChangeLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validateConsumptionChangeLogExists(updateReqVO.getId());
+        // 更新
+        ConsumptionChangeLogDO updateObj = BeanUtils.toBean(updateReqVO, ConsumptionChangeLogDO.class);
+        consumptionChangeLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteConsumptionChangeLog(Long id) {
+        // 校验存在
+        validateConsumptionChangeLogExists(id);
+        // 删除
+        consumptionChangeLogMapper.deleteById(id);
+    }
+
+    private void validateConsumptionChangeLogExists(Long id) {
+        if (consumptionChangeLogMapper.selectById(id) == null) {
+            throw exception(CONSUMPTION_CHANGE_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ConsumptionChangeLogDO getConsumptionChangeLog(Long id) {
+        return consumptionChangeLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ConsumptionChangeLogRespVO> getConsumptionChangeLogPage(ConsumptionChangeLogPageReqVO pageReqVO) {
+        PageResult<ConsumptionChangeLogRespVO> bean = BeanUtils.toBean(consumptionChangeLogMapper.selectPage(pageReqVO), ConsumptionChangeLogRespVO.class);
+
+        for (ConsumptionChangeLogRespVO consumptionChangeLogRespVO : bean.getList()) {
+            consumptionChangeLogRespVO.setConsumptionStatusName(ConsumptionEnum.getName(consumptionChangeLogRespVO.getConsumptionStatus()));
+            if(consumptionChangeLogRespVO.getGenerateUserId() != null){
+                MemberUserDO user = memberUserService.getUser(consumptionChangeLogRespVO.getGenerateUserId());
+                consumptionChangeLogRespVO.setGenerateUserName(user.getUsername());
+            }
+        }
+        return bean;
+    }
+
+    @Override
+    public List<ConsumptionChangeLogDO> selectListByStatus(Integer type) {
+        return consumptionChangeLogMapper.selectList(ConsumptionChangeLogDO::getConsumptionStatus,type);
+    }
+
+}

+ 58 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerrorlog/ConsumptionErrorLogService.java

@@ -0,0 +1,58 @@
+package cn.newfeifan.mall.module.distri.service.consumptionerrorlog;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerrorlog.ConsumptionErrorLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 消费分异动日志记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ConsumptionErrorLogService {
+
+    /**
+     * 创建消费分异动日志记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createConsumptionErrorLog(@Valid ConsumptionErrorLogSaveReqVO createReqVO);
+
+    /**
+     * 更新消费分异动日志记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateConsumptionErrorLog(@Valid ConsumptionErrorLogSaveReqVO updateReqVO);
+
+    /**
+     * 删除消费分异动日志记录
+     *
+     * @param id 编号
+     */
+    void deleteConsumptionErrorLog(Long id);
+
+    /**
+     * 获得消费分异动日志记录
+     *
+     * @param id 编号
+     * @return 消费分异动日志记录
+     */
+    ConsumptionErrorLogDO getConsumptionErrorLog(Long id);
+
+    /**
+     * 获得消费分异动日志记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 消费分异动日志记录分页
+     */
+    PageResult<ConsumptionErrorLogDO> getConsumptionErrorLogPage(ConsumptionErrorLogPageReqVO pageReqVO);
+
+    /**
+     * 计算每日消费分异动日志记录
+     */
+    void calcEveryDayConsumptionPointsErrorLog();
+
+}

+ 262 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerrorlog/ConsumptionErrorLogServiceImpl.java

@@ -0,0 +1,262 @@
+package cn.newfeifan.mall.module.distri.service.consumptionerrorlog;
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.vo.ConsumptionErrorUserSaveReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.ApplicationForWithdrawalDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionchangelog.ConsumptionChangeLogDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontopuplog.ConsumptionTopUpLogDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontransferlog.ConsumptionTransferLogDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
+import cn.newfeifan.mall.module.distri.enums.ConsumptionEnum;
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawal.ApplicationForWithdrawalService;
+import cn.newfeifan.mall.module.distri.service.consumptionchangelog.ConsumptionChangeLogService;
+import cn.newfeifan.mall.module.distri.service.consumptionerroruser.ConsumptionErrorUserService;
+import cn.newfeifan.mall.module.distri.service.consumptiontopuplog.ConsumptionTopUpLogService;
+import cn.newfeifan.mall.module.distri.service.consumptiontransferlog.ConsumptionTransferLogService;
+import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.user.MemberUserService;
+import cn.newfeifan.mall.module.system.controller.admin.auth.vo.AuthSmsSendReqVO;
+import cn.newfeifan.mall.module.system.dal.dataobject.user.AdminUserDO;
+import cn.newfeifan.mall.module.system.enums.sms.SmsSceneEnum;
+import cn.newfeifan.mall.module.system.service.auth.AdminAuthService;
+import cn.newfeifan.mall.module.system.service.user.AdminUserService;
+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 java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerrorlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerrorlog.ConsumptionErrorLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.consumptionerrorlog.ConsumptionErrorLogMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 消费分异动日志记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ConsumptionErrorLogServiceImpl implements ConsumptionErrorLogService {
+
+    @Resource
+    private ConsumptionErrorLogMapper consumptionErrorLogMapper;
+    @Resource
+    private ConsumptionErrorUserService consumptionErrorUserService;
+    @Resource
+    private ConsumptionTopUpLogService consumptionTopUpLogService;
+    @Resource
+    private ConsumptionChangeLogService consumptionChangeLogService;
+    @Resource
+    private ConsumptionTransferLogService consumptionTransferLogService;
+    @Resource
+    private ApplicationForWithdrawalService applicationForWithdrawalService;
+    @Resource
+    private IntegralService integralService;
+    @Resource
+    private MemberUserService memberUserService;
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private AdminAuthService authService;
+
+    @Override
+    public Long createConsumptionErrorLog(ConsumptionErrorLogSaveReqVO createReqVO) {
+        // 插入
+        ConsumptionErrorLogDO consumptionErrorLog = BeanUtils.toBean(createReqVO, ConsumptionErrorLogDO.class);
+        consumptionErrorLogMapper.insert(consumptionErrorLog);
+        // 返回
+        return consumptionErrorLog.getId();
+    }
+
+    @Override
+    public void updateConsumptionErrorLog(ConsumptionErrorLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validateConsumptionErrorLogExists(updateReqVO.getId());
+        // 更新
+        ConsumptionErrorLogDO updateObj = BeanUtils.toBean(updateReqVO, ConsumptionErrorLogDO.class);
+        consumptionErrorLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteConsumptionErrorLog(Long id) {
+        // 校验存在
+        validateConsumptionErrorLogExists(id);
+        // 删除
+        consumptionErrorLogMapper.deleteById(id);
+    }
+
+    private void validateConsumptionErrorLogExists(Long id) {
+        if (consumptionErrorLogMapper.selectById(id) == null) {
+            throw exception(CONSUMPTION_ERROR_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ConsumptionErrorLogDO getConsumptionErrorLog(Long id) {
+        return consumptionErrorLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ConsumptionErrorLogDO> getConsumptionErrorLogPage(ConsumptionErrorLogPageReqVO pageReqVO) {
+        return consumptionErrorLogMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void calcEveryDayConsumptionPointsErrorLog() {
+        // 获取所有用户钱包
+        List<IntegralDO> integralDOS = integralService.selectAllUser();
+
+        // 每个用户的充值记录
+        Map<Long, Long> topUpLogMap = consumptionTopUpLogService.selectList().stream()
+                .collect(Collectors.groupingBy(
+                        ConsumptionTopUpLogDO::getUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                ConsumptionTopUpLogDO::getPracticalConsumptionPoints, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+
+        // 用户的佣金转消费分记录
+        Map<Long, Long> changLogMap = consumptionChangeLogService.selectListByStatus(ConsumptionEnum.COMMISSION_TRANSITION.getType()).stream()
+                .collect(Collectors.groupingBy(
+                        ConsumptionChangeLogDO::getUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                ConsumptionChangeLogDO::getConsumptionPoints, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+        // 用户的佣金转让记录(进账)
+        Map<Long, Long> recipientLogMap = consumptionTransferLogService.selectList().stream()
+                .collect(Collectors.groupingBy(
+                        ConsumptionTransferLogDO::getRecipientUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                ConsumptionTransferLogDO::getRecipientPoints, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+
+        // 用户的提现记录
+        Map<Long, Long> withdrawalMap = applicationForWithdrawalService.selectList().stream()
+                .collect(Collectors.groupingBy(
+                        ApplicationForWithdrawalDO::getUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                ApplicationForWithdrawalDO::getWithdrawConsumption, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+
+        Map<Long, Long> userTotalMap = integralDOS.stream()
+                .collect(Collectors.toMap(
+                        IntegralDO::getUserId,
+                        consumptionPoints -> 0L)
+                );
+
+        // 遍历得到所有用户的应得消费分
+        topUpLogMap.forEach((userId, topUpPoints) -> userTotalMap.merge(userId, topUpPoints, Long::sum));
+        changLogMap.forEach((userId, topUpPoints) -> userTotalMap.merge(userId, topUpPoints, Long::sum));
+        recipientLogMap.forEach((userId, topUpPoints) -> userTotalMap.merge(userId, topUpPoints, Long::sum));
+        withdrawalMap.forEach((userId, topUpPoints) -> userTotalMap.merge(userId, topUpPoints, Long::sum));
+
+        // 用户可用消费分
+        Map<Long, Long> currentMap = integralDOS.stream()
+                .collect(Collectors.toMap(
+                        IntegralDO::getUserId,
+                        IntegralDO::getConsumptionPoints)
+                );
+
+        // 用户已用(购买商品的)消费分
+        Map<Long, Long> uesdMap = consumptionChangeLogService.selectListByStatus(ConsumptionEnum.PAY_ORDER.getType()).stream()
+                .collect(Collectors.groupingBy(
+                        ConsumptionChangeLogDO::getUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                ConsumptionChangeLogDO::getConsumptionPoints, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+        uesdMap.forEach((k, v) -> uesdMap.put(k, v * -1));
+
+        // 用户转让的消费分(出账)
+        Map<Long, Long> transferLogMap = consumptionTransferLogService.selectList().stream()
+                .collect(Collectors.groupingBy(
+                        ConsumptionTransferLogDO::getTransferUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                ConsumptionTransferLogDO::getConsumptionPoints, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+        transferLogMap.forEach((k, v) -> transferLogMap.put(k, v * -1));
+
+        Map<Long, Long> nowConsumptionPointsMap = new HashMap<>();
+        currentMap.forEach((userId, topUpPoints) -> nowConsumptionPointsMap.merge(userId, topUpPoints, Long::sum));
+
+        uesdMap.forEach((userId, topUpPoints) -> nowConsumptionPointsMap.merge(userId, topUpPoints, Long::sum));
+
+        transferLogMap.forEach((userId, consumptionPoints) -> nowConsumptionPointsMap.merge(userId, consumptionPoints, Long::sum));
+
+        AtomicLong errorConsumptionPoints = new AtomicLong(0L);     // 错误消费分
+        AtomicInteger errorUserCount = new AtomicInteger(0);             // 错误用户数
+
+        Map<Long, Long> userMap = new HashMap<>();
+        // 遍历所有的用户,判断哪个用户的消费分有误
+        userTotalMap.forEach((userId, topUpPoints) -> {
+            // 如果实际消费分大于应得消费分,则视为异动用户
+            if (nowConsumptionPointsMap.get(userId) > topUpPoints) {
+                long points = nowConsumptionPointsMap.get(userId) - topUpPoints;
+                errorConsumptionPoints.addAndGet(points);
+                errorUserCount.addAndGet(1);
+
+                // 记录用户
+                userMap.put(userId, points);
+                System.out.println("用户id:" + userId + "应得消费分:" + topUpPoints + " 实际消费分:" + currentMap.get(userId));
+            }
+        });
+
+        // 插入异动日志
+        if (errorConsumptionPoints.get() > 0 && errorUserCount.get() > 0) {
+            ConsumptionErrorLogDO consumptionErrorLogDO = new ConsumptionErrorLogDO()
+                    .setErrorConsumptionPointsTotal(errorConsumptionPoints.get())
+                    .setErrorUsersCount(errorUserCount.get());
+            consumptionErrorLogMapper.insert(consumptionErrorLogDO);
+
+            userMap.forEach((userId, points) -> {
+                MemberUserDO user = memberUserService.getUser(userId);
+                ConsumptionErrorUserSaveReqVO consumptionErrorLogUserDO = ConsumptionErrorUserSaveReqVO.builder()
+                        .consumptionErrorLogId(consumptionErrorLogDO.getId())
+                        .userId(userId)
+                        .userName(user.getUsername())
+                        .consumptionPointsTotal(userTotalMap.get(userId))
+                        .nowConsumptionPointsTotal(nowConsumptionPointsMap.get(userId))
+                        .currentConsumptionPointsTotal(currentMap.get(userId))
+                        .usedConsumptionPointsTotal(uesdMap.get(userId))
+                        .transferConsumptionPointsTotal(transferLogMap.get(userId))
+                        .errorConsumptionPointsTotal(points)
+                        .build();
+                consumptionErrorUserService.createConsumptionErrorUser(consumptionErrorLogUserDO);
+            });
+
+            // 短信通知系统管理员
+            for (AdminUserDO superAdminUser : adminUserService.getSuperAdminUsers()) {
+                System.out.println("系统管理员手机号:" + superAdminUser.getMobile());
+                authService.sendSmsCode(AuthSmsSendReqVO.builder()
+                        .mobile(superAdminUser.getMobile())
+                        .scene(SmsSceneEnum.CONSUMPTION_POINTS_ERROR_WARNING.getScene())
+                        .build());
+            }
+        }
+    }
+
+}

+ 53 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerroruser/ConsumptionErrorUserService.java

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.distri.service.consumptionerroruser;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerroruser.ConsumptionErrorUserDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 消费分异动用户 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ConsumptionErrorUserService {
+
+    /**
+     * 创建消费分异动用户
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createConsumptionErrorUser(@Valid ConsumptionErrorUserSaveReqVO createReqVO);
+
+    /**
+     * 更新消费分异动用户
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateConsumptionErrorUser(@Valid ConsumptionErrorUserSaveReqVO updateReqVO);
+
+    /**
+     * 删除消费分异动用户
+     *
+     * @param id 编号
+     */
+    void deleteConsumptionErrorUser(Long id);
+
+    /**
+     * 获得消费分异动用户
+     *
+     * @param id 编号
+     * @return 消费分异动用户
+     */
+    ConsumptionErrorUserDO getConsumptionErrorUser(Long id);
+
+    /**
+     * 获得消费分异动用户分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 消费分异动用户分页
+     */
+    PageResult<ConsumptionErrorUserDO> getConsumptionErrorUserPage(ConsumptionErrorUserPageReqVO pageReqVO);
+
+}

+ 70 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerroruser/ConsumptionErrorUserServiceImpl.java

@@ -0,0 +1,70 @@
+package cn.newfeifan.mall.module.distri.service.consumptionerroruser;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionerroruser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionerroruser.ConsumptionErrorUserDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.consumptionerroruser.ConsumptionErrorUserMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 消费分异动用户 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ConsumptionErrorUserServiceImpl implements ConsumptionErrorUserService {
+
+    @Resource
+    private ConsumptionErrorUserMapper consumptionErrorUserMapper;
+
+    @Override
+    public Long createConsumptionErrorUser(ConsumptionErrorUserSaveReqVO createReqVO) {
+        // 插入
+        ConsumptionErrorUserDO consumptionErrorUser = BeanUtils.toBean(createReqVO, ConsumptionErrorUserDO.class);
+        consumptionErrorUserMapper.insert(consumptionErrorUser);
+        // 返回
+        return consumptionErrorUser.getId();
+    }
+
+    @Override
+    public void updateConsumptionErrorUser(ConsumptionErrorUserSaveReqVO updateReqVO) {
+        // 校验存在
+        validateConsumptionErrorUserExists(updateReqVO.getId());
+        // 更新
+        ConsumptionErrorUserDO updateObj = BeanUtils.toBean(updateReqVO, ConsumptionErrorUserDO.class);
+        consumptionErrorUserMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteConsumptionErrorUser(Long id) {
+        // 校验存在
+        validateConsumptionErrorUserExists(id);
+        // 删除
+        consumptionErrorUserMapper.deleteById(id);
+    }
+
+    private void validateConsumptionErrorUserExists(Long id) {
+        if (consumptionErrorUserMapper.selectById(id) == null) {
+            throw exception(CONSUMPTION_ERROR_USER_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ConsumptionErrorUserDO getConsumptionErrorUser(Long id) {
+        return consumptionErrorUserMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ConsumptionErrorUserDO> getConsumptionErrorUserPage(ConsumptionErrorUserPageReqVO pageReqVO) {
+        return consumptionErrorUserMapper.selectPage(pageReqVO);
+    }
+
+}

+ 67 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontopuplog/ConsumptionTopUpLogService.java

@@ -0,0 +1,67 @@
+package cn.newfeifan.mall.module.distri.service.consumptiontopuplog;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontopuplog.ConsumptionTopUpLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 平台消费分充值记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ConsumptionTopUpLogService {
+
+    /**
+     * 创建平台消费分充值记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createConsumptionTopUpLog(@Valid ConsumptionTopUpLogSaveReqVO createReqVO);
+
+    /**
+     * 更新平台消费分充值记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateConsumptionTopUpLog(@Valid ConsumptionTopUpLogSaveReqVO updateReqVO);
+
+    /**
+     * 删除平台消费分充值记录
+     *
+     * @param id 编号
+     */
+    void deleteConsumptionTopUpLog(Long id);
+
+    /**
+     * 获得平台消费分充值记录
+     *
+     * @param id 编号
+     * @return 平台消费分充值记录
+     */
+    ConsumptionTopUpLogDO getConsumptionTopUpLog(Long id);
+
+    /**
+     * 获得平台消费分充值记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台消费分充值记录分页
+     */
+    PageResult<ConsumptionTopUpLogDO> getConsumptionTopUpLogPage(ConsumptionTopUpLogPageReqVO pageReqVO);
+
+    /**
+     * 是否是第一次充值消费分
+     *
+     * @param userId 用户编号
+     * @return 是否是第一次充值消费分
+     */
+    ConsumptionInfoVO isFirstConsumption(Long userId);
+
+    /**
+     * 获取所有的充值记录
+     * @return 充值记录
+     */
+    List<ConsumptionTopUpLogDO> selectList();
+}

+ 175 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontopuplog/ConsumptionTopUpLogServiceImpl.java

@@ -0,0 +1,175 @@
+package cn.newfeifan.mall.module.distri.service.consumptiontopuplog;
+
+import cn.newfeifan.mall.framework.common.exception.ErrorCode;
+import cn.newfeifan.mall.module.distri.constant.DistriConstants;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptionchangelog.vo.ConsumptionChangeLogSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
+import cn.newfeifan.mall.module.distri.enums.ConsumptionEnum;
+import cn.newfeifan.mall.module.distri.service.consumptionchangelog.ConsumptionChangeLogService;
+import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
+import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
+import cn.newfeifan.mall.module.system.service.sms.SmsCodeService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontopuplog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontopuplog.ConsumptionTopUpLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.consumptiontopuplog.ConsumptionTopUpLogMapper;
+
+import java.util.List;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.framework.common.util.servlet.ServletUtils.getClientIP;
+import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 平台消费分充值记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ConsumptionTopUpLogServiceImpl implements ConsumptionTopUpLogService {
+
+    @Resource
+    private ConsumptionTopUpLogMapper consumptionTopUpLogMapper;
+
+    @Resource
+    private OrderPercentageService orderPercentageService;
+
+    @Resource
+    private IntegralService integralService;
+
+    @Resource
+    private ConsumptionChangeLogService consumptionChangeLogService;
+
+    @Resource
+    private SmsCodeService smsCodeService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createConsumptionTopUpLog(ConsumptionTopUpLogSaveReqVO createReqVO) {
+        OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
+        // 充值额度校验
+        quotaVerify(createReqVO.getUserId(), createReqVO.getConsumptionPoints(), orderPercentageDO);
+
+        // 短信验证码校验
+        smsCodeService.useSmsCode(createReqVO.getSmsCodeUseReqDTO().setUsedIp(getClientIP()));
+
+        // 额度放大百万倍,存储需要(方便换算),和积分一样
+        createReqVO.setConsumptionPoints(createReqVO.getConsumptionPoints() * DistriConstants.MILLION);
+
+        // 充值倍率
+        createReqVO.setPracticalConsumptionPoints((long) (createReqVO.getConsumptionPoints() * Double.parseDouble(orderPercentageDO.getConsumptionMagnification())));
+
+
+        // 插入
+        ConsumptionTopUpLogDO consumptionTopUpLog = BeanUtils.toBean(createReqVO, ConsumptionTopUpLogDO.class);
+        consumptionTopUpLogMapper.insert(consumptionTopUpLog);
+
+        // 修改用户钱包
+        IntegralDO integralDO = integralService.selectByUser(consumptionTopUpLog.getUserId());
+        integralDO.setConsumptionPoints(integralDO.getConsumptionPoints() + consumptionTopUpLog.getPracticalConsumptionPoints());
+        integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
+
+        // 记录用户消费分变动日志
+        consumptionChangeLogService.createConsumptionChangeLog(ConsumptionChangeLogSaveReqVO.builder()
+                .userId(consumptionTopUpLog.getUserId())
+                .consumptionPoints(consumptionTopUpLog.getPracticalConsumptionPoints())
+                .afterConsumptionPoints(integralDO.getConsumptionPoints())
+                .consumptionStatus(ConsumptionEnum.PT_TOP_TUP.getType())
+                .practicalConsumptionPoints(consumptionTopUpLog.getConsumptionPoints())
+                .generateUserId(getLoginUserId())
+                .build());
+
+        // 返回
+        return consumptionTopUpLog.getId();
+    }
+
+    /**
+     * 校验充值额度
+     *
+     * @param userId            充值用户
+     * @param consumptionPoints 额度
+     * @param orderPercentageDO 设定额度
+     */
+    private void quotaVerify(Long userId, Long consumptionPoints, OrderPercentageDO orderPercentageDO) {
+        // 充值额度校验
+        Long quota = Long.parseLong(orderPercentageDO.getFollowUpConsumption());      // 后续充值
+        if (consumptionTopUpLogMapper.selectList(ConsumptionTopUpLogDO::getUserId, userId).isEmpty()) {
+            // 首次充值
+            quota = Long.parseLong(orderPercentageDO.getFirstTopUpConsumption());
+        }
+        if (consumptionPoints < quota) {
+            ErrorCode ERROR = new ErrorCode(1_002_030_035, "充值的额度不能小于规定额度");
+            throw exception(ERROR);
+        }
+    }
+
+    @Override
+    public void updateConsumptionTopUpLog(ConsumptionTopUpLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validateConsumptionTopUpLogExists(updateReqVO.getId());
+        // 更新
+        ConsumptionTopUpLogDO updateObj = BeanUtils.toBean(updateReqVO, ConsumptionTopUpLogDO.class);
+        consumptionTopUpLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteConsumptionTopUpLog(Long id) {
+        // 校验存在
+        validateConsumptionTopUpLogExists(id);
+        // 删除
+        consumptionTopUpLogMapper.deleteById(id);
+    }
+
+    private void validateConsumptionTopUpLogExists(Long id) {
+        if (consumptionTopUpLogMapper.selectById(id) == null) {
+            throw exception(CONSUMPTION_TOP_UP_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ConsumptionTopUpLogDO getConsumptionTopUpLog(Long id) {
+        return consumptionTopUpLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ConsumptionTopUpLogDO> getConsumptionTopUpLogPage(ConsumptionTopUpLogPageReqVO pageReqVO) {
+        return consumptionTopUpLogMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public ConsumptionInfoVO isFirstConsumption(Long userId) {
+        List<ConsumptionTopUpLogDO> consumptionTopUpLogDOS = consumptionTopUpLogMapper.selectList(ConsumptionTopUpLogDO::getUserId, userId);
+
+        ConsumptionInfoVO build = ConsumptionInfoVO.builder().build();
+        OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
+        if (consumptionTopUpLogDOS.isEmpty()) {
+            build.setIsFirstConsumption(true);
+            build.setMinimumConsumptionPoints(Long.valueOf(orderPercentageDO.getFirstTopUpConsumption()));
+        } else {
+            build.setIsFirstConsumption(false);
+            build.setMinimumConsumptionPoints(Long.valueOf(orderPercentageDO.getFollowUpConsumption()));
+        }
+        build.setConsumptionMagnification(orderPercentageDO.getConsumptionMagnification());
+        return build;
+    }
+
+    @Override
+    public List<ConsumptionTopUpLogDO> selectList() {
+        return consumptionTopUpLogMapper.selectList();
+    }
+
+
+}

+ 59 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontransferlog/ConsumptionTransferLogService.java

@@ -0,0 +1,59 @@
+package cn.newfeifan.mall.module.distri.service.consumptiontransferlog;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontransferlog.ConsumptionTransferLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 消费分转让记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ConsumptionTransferLogService {
+
+    /**
+     * 创建消费分转让记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createConsumptionTransferLog(@Valid ConsumptionTransferLogSaveReqVO createReqVO);
+
+    /**
+     * 更新消费分转让记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateConsumptionTransferLog(@Valid ConsumptionTransferLogSaveReqVO updateReqVO);
+
+    /**
+     * 删除消费分转让记录
+     *
+     * @param id 编号
+     */
+    void deleteConsumptionTransferLog(Long id);
+
+    /**
+     * 获得消费分转让记录
+     *
+     * @param id 编号
+     * @return 消费分转让记录
+     */
+    ConsumptionTransferLogDO getConsumptionTransferLog(Long id);
+
+    /**
+     * 获得消费分转让记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 消费分转让记录分页
+     */
+    PageResult<ConsumptionTransferLogDO> getConsumptionTransferLogPage(ConsumptionTransferLogPageReqVO pageReqVO);
+
+    /**
+     * 获取转让记录
+     * @return 转让记录
+     */
+    List<ConsumptionTransferLogDO> selectList();
+}

+ 77 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptiontransferlog/ConsumptionTransferLogServiceImpl.java

@@ -0,0 +1,77 @@
+package cn.newfeifan.mall.module.distri.service.consumptiontransferlog;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+import cn.newfeifan.mall.module.distri.controller.admin.consumptiontransferlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.consumptiontransferlog.ConsumptionTransferLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.consumptiontransferlog.ConsumptionTransferLogMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 消费分转让记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ConsumptionTransferLogServiceImpl implements ConsumptionTransferLogService {
+
+    @Resource
+    private ConsumptionTransferLogMapper consumptionTransferLogMapper;
+
+    @Override
+    public Long createConsumptionTransferLog(ConsumptionTransferLogSaveReqVO createReqVO) {
+        // 插入
+        ConsumptionTransferLogDO consumptionTransferLog = BeanUtils.toBean(createReqVO, ConsumptionTransferLogDO.class);
+        consumptionTransferLogMapper.insert(consumptionTransferLog);
+        // 返回
+        return consumptionTransferLog.getId();
+    }
+
+    @Override
+    public void updateConsumptionTransferLog(ConsumptionTransferLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validateConsumptionTransferLogExists(updateReqVO.getId());
+        // 更新
+        ConsumptionTransferLogDO updateObj = BeanUtils.toBean(updateReqVO, ConsumptionTransferLogDO.class);
+        consumptionTransferLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteConsumptionTransferLog(Long id) {
+        // 校验存在
+        validateConsumptionTransferLogExists(id);
+        // 删除
+        consumptionTransferLogMapper.deleteById(id);
+    }
+
+    private void validateConsumptionTransferLogExists(Long id) {
+        if (consumptionTransferLogMapper.selectById(id) == null) {
+            throw exception(CONSUMPTION_TRANSFER_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ConsumptionTransferLogDO getConsumptionTransferLog(Long id) {
+        return consumptionTransferLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ConsumptionTransferLogDO> getConsumptionTransferLogPage(ConsumptionTransferLogPageReqVO pageReqVO) {
+        return consumptionTransferLogMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public List<ConsumptionTransferLogDO> selectList() {
+        return consumptionTransferLogMapper.selectList();
+    }
+
+}

+ 20 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/dailybill/DailyBillServiceImpl.java

@@ -115,6 +115,13 @@ public class DailyBillServiceImpl implements DailyBillService {
                     .filter(order -> order.getRefundIntegral() != null)  // 过滤掉 getRefundIntegral 为空的订单
                     .mapToLong(OrderDTO::getRefundIntegral)
                     .sum();
+            Long ptConsumptionPoints = orderList.stream()
+                    .mapToLong(OrderDTO::getPayConsumptionPoints)
+                    .sum();
+            Long ptRefundConsumptionPoints = orderList.stream()
+                    .filter(order -> order.getRefundConsumption() != null)  // 过滤掉 getRefundConsumptionPoints 为空的订单
+                    .mapToLong(OrderDTO::getRefundConsumption)
+                    .sum();
 
             PtDailyBillDO ptDailyBillDO = PtDailyBillDO.builder()
                     .price(ptPrice)
@@ -123,6 +130,9 @@ public class DailyBillServiceImpl implements DailyBillService {
                     .integral(ptIntegral)
                     .refundIntegral(ptRefundIntegral)
                     .receivedIntegral(ptIntegral - ptRefundIntegral)
+                    .consumptionPoints(ptConsumptionPoints)
+                    .refundConsumptionPoints(ptRefundConsumptionPoints)
+                    .receivedConsumptionPoints(ptConsumptionPoints - ptRefundConsumptionPoints)
                     .orderCount((long) orderList.size())
                     .orderIds(orderList.stream().map(OrderDTO::getId).collect(Collectors.toList()).toString())
                     .orderCalcTime(date)
@@ -148,6 +158,13 @@ public class DailyBillServiceImpl implements DailyBillService {
                         .filter(order -> order.getRefundIntegral() != null)  // 过滤掉 getRefundIntegral 为空的订单
                         .mapToLong(OrderDTO::getRefundIntegral)
                         .sum();
+                Long consumptionPoints = shopOrderList.stream()
+                        .mapToLong(OrderDTO::getPayConsumptionPoints)
+                        .sum();
+                Long refundConsumptionPoints = shopOrderList.stream()
+                        .filter(order -> order.getRefundConsumption() != null)  // 过滤掉 getRefundConsumptionPoints 为空的订单
+                        .mapToLong(OrderDTO::getRefundConsumption)
+                        .sum();
 
                 DailyBillDO dailyBillDO = DailyBillDO.builder()
                         .price(price)
@@ -156,6 +173,9 @@ public class DailyBillServiceImpl implements DailyBillService {
                         .integral(integral)
                         .refundIntegral(refundIntegral)
                         .receivedIntegral(integral - refundIntegral)
+                        .consumptionPoints(consumptionPoints)
+                        .refundConsumptionPoints(refundConsumptionPoints)
+                        .receivedConsumptionPoints(consumptionPoints - refundConsumptionPoints)
                         .orderCount((long) shopOrderList.size())
                         .orderIds(shopOrderList.stream().map(OrderDTO::getId).collect(Collectors.toList()).toString())
                         .orderCalcTime(date)

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/dailybill/dto/OrderDTO.java

@@ -60,6 +60,14 @@ public class OrderDTO extends BaseDO {
      * 退还的使用的积分
      */
     private Long refundIntegral;
+    /**
+     * 支付消费分
+     */
+    private Long payConsumptionPoints;
+    /**
+     * 退还的使用的消费分
+     */
+    private Long refundConsumption;
     /**
      * 实付人民币,单位:分
      */

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/dailybill/dto/OrderItemDTO.java

@@ -66,6 +66,12 @@ public class OrderItemDTO {
      * 支付积分
      */
     private Long payIntegral;
+
+    /**
+     * 消费分
+     */
+    private Long payConsumptionPoints;
+
     /**
      * 实付人民币,单位:分
      */

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

@@ -65,4 +65,9 @@ public interface OrderCalcService {
     List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd,List<Long> userList);
 
     void updateOrderItem(Long orderItemId);
+
+    /**
+     * 手动开启计算订单分配权益(用于七天分配权益变更后)
+     */
+    void calc(List<OrderCalcMessage> tradeOrderDO);
 }

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

@@ -15,6 +15,7 @@ import cn.newfeifan.mall.module.distri.enums.SocialStatusEnum;
 import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;
 import cn.newfeifan.mall.module.distri.mq.message.order.OrderCalcMessage;
 import cn.newfeifan.mall.module.distri.mq.message.order.OrderItemMessage;
+import cn.newfeifan.mall.module.distri.service.consumptionerrorlog.ConsumptionErrorLogService;
 import cn.newfeifan.mall.module.distri.service.dailyawardrecords.DailyAwardRecordsService;
 import cn.newfeifan.mall.module.distri.service.dailybill.DailyBillService;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
@@ -110,6 +111,9 @@ public class OrderCalcServiceImpl implements OrderCalcService {
     @Resource
     private JobMapper jobMapper;
 
+    @Resource
+    private ConsumptionErrorLogService consumptionErrorLogService;
+
     @Override
     public Long createOrderCalc(OrderCalcSaveReqVO createReqVO) {
         // 插入
@@ -199,6 +203,9 @@ public class OrderCalcServiceImpl implements OrderCalcService {
             // 结算订单,签收七天的订单
             shopSettlementService.settlementOrder();
 
+            // 每日消费分校对预警
+            consumptionErrorLogService.calcEveryDayConsumptionPointsErrorLog();
+
             System.out.println("=================计算程序结束====================");
         }
 
@@ -340,6 +347,15 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         orderCalcMapper.updateOrderItemById(orderItemId);
     }
 
+    @Override
+    public void calc(List<OrderCalcMessage> tradeOrderDO) {
+        OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
+        // 当前计算百分比模板
+        String percentTemplate = JsonUtils.toJsonString(orderPercentageDO);
+
+        calc(tradeOrderDO, orderPercentageDO, percentTemplate);
+    }
+
     private void calc(List<OrderCalcMessage> tradeOrderDO, OrderPercentageDO orderPercentageDO, String percentTemplate) {
 
         // 平台收益日志

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

@@ -1,5 +1,6 @@
 package cn.newfeifan.mall.module.distri.service.orderpercentage;
 
+import cn.newfeifan.mall.framework.common.exception.ErrorCode;
 import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import lombok.extern.slf4j.Slf4j;
@@ -70,6 +71,13 @@ public class OrderPercentageServiceImpl implements OrderPercentageService {
     public void updateOrderPercentage(OrderPercentageSaveReqVO updateReqVO) {
         // 校验存在
         validateOrderPercentageExists(updateReqVO.getId());
+
+        // 提现百分比校验
+        if(Double.parseDouble(updateReqVO.getWithdrawConsumption()) + Double.parseDouble(updateReqVO.getWithdrawCommission()) != 1.0){
+            ErrorCode ERROR = new ErrorCode(1_002_030_005, "公众提现的总和设置百分比必须等于100%");
+            throw exception(ERROR);
+        }
+
         // 更新
         OrderPercentageDO updateObj = BeanUtils.toBean(updateReqVO, OrderPercentageDO.class);
         orderPercentageMapper.updateById(updateObj);

+ 11 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/shopsettlement/ShopSettlementServiceImpl.java

@@ -173,6 +173,8 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
         Integer ptPlatformCollectionAmount = 0;
         // 代收积分
         Long ptPayIntegral = 0L;
+        // 代收消费分
+        Long ptPayConsumptionPoints = 0L;
         // 店铺应得金额(成本 * 数量)
         int ptShopAmount = 0;
         BigDecimal ptShopHighAmount = BigDecimal.ZERO;
@@ -194,6 +196,9 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
                 Integer platformCollectionAmount = 0;
                 // 代收积分
                 Long payIntegral = 0L;
+                // 代收消费分
+                Long payConsumptionPoints = 0L;
+
                 // 店铺应得金额(成本 * 数量)
                 int shopAmount = 0;
                 BigDecimal shopHighAmount = BigDecimal.ZERO;
@@ -214,7 +219,9 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
                         ptPlatformCollectionAmount += item.getPayRmb();
                         //计算订单的收入积分(pt)
                         payIntegral += item.getPayIntegral();
+                        payConsumptionPoints += item.getPayConsumptionPoints();     //消费分
                         ptPayIntegral += item.getPayIntegral();
+                        ptPayConsumptionPoints += item.getPayConsumptionPoints();   //消费分
                         // 商品的成本价(成本 * 数量)
                         shopAmount += item.getSettlementPrice() * item.getCount();
                         ptShopAmount += item.getSettlementPrice() * item.getCount();
@@ -263,6 +270,7 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
                   积分要转换才能变为钱
                  */
                 platformCollectionAmount += integral2Money(payIntegral);
+                platformCollectionAmount += integral2Money(payConsumptionPoints);
 
 
                 // 店铺共计成本金额
@@ -274,6 +282,7 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
                         .merchantId(merchant.getMerchantId())
                         .platformCollectionAmount(platformCollectionAmount)
                         .shopAmount(payIntegral)
+                        .shopConsumptionPoints(payConsumptionPoints)
                         .shopTotalHighAmount(totalHighAmount.setScale(6, RoundingMode.HALF_UP))
                         .accountName(shop.getAccountName())
                         .accountNumber(shop.getAccountNumber())
@@ -283,6 +292,7 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
         }
 
         ptPlatformCollectionAmount += integral2Money(ptPayIntegral);
+        ptPlatformCollectionAmount += integral2Money(ptPayConsumptionPoints);
         // 平台共计成本金额
         BigDecimal totalHighAmount = ptShopHighAmount.add(BigDecimal.valueOf(ptShopAmount));
 
@@ -290,6 +300,7 @@ public class ShopSettlementServiceImpl implements ShopSettlementService {
         PtSettlementDO ptSettlementDO = PtSettlementDO.builder()
                 .platformCollectionAmount(ptPlatformCollectionAmount)
                 .shopAmount(ptPayIntegral)
+                .consumptionPoints(ptPayConsumptionPoints)
                 .shopTotalHighAmount(totalHighAmount.setScale(6, RoundingMode.HALF_UP))
                 .build();
         ptSettlementMapper.insert(ptSettlementDO);

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/consumptionchangelog/ConsumptionChangeLogMapper.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.consumptionchangelog.ConsumptionChangeLogMapper">
+
+    <!--
+        一般情况下,尽可能使用 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/consumptionerrorlog/ConsumptionErrorLogMapper.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.consumptionerrorlog.ConsumptionErrorLogMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

Some files were not shown because too many files changed in this diff