Browse Source

平台查询用户自充值,修改消费分异动的

Yangzw 6 months ago
parent
commit
b1ea0fbc65
21 changed files with 705 additions and 5 deletions
  1. 1 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ConsumptionEnum.java
  2. 1 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  3. 6 0
      feifan-module-distri/feifan-module-distri-biz/pom.xml
  4. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentagePageReqVO.java
  5. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRespVO.java
  6. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageSaveReqVO.java
  7. 38 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderController.java
  8. 72 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderPageReqVO.java
  9. 85 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderRespVO.java
  10. 72 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderSaveReqVO.java
  11. 5 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java
  12. 93 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderDO.java
  13. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderMapper.java
  14. 19 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/consumer/topupconsumptionpoints/TopUpConsumptionPointsConsumer.java
  15. 15 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/consumptionerrorlog/ConsumptionErrorLogServiceImpl.java
  16. 66 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderService.java
  17. 123 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderServiceImpl.java
  18. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderMapper.xml
  19. 1 1
      feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/enums/DictTypeConstants.java
  20. 20 4
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/order/PayOrderServiceImpl.java
  21. 25 0
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/topupconsumptionpoints/TopUpConsumptionPointsProducer.java

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

@@ -14,6 +14,7 @@ public enum ConsumptionEnum {
     COMMISSION_WITHDRAWAL(5,"佣金提现"),
     PAY_ORDER(6,"购物支付"),
     REFUND_ORDER(7,"退回退款返回"),
+    TOP_UP_GET(8,"充值获得"),
     ;
 
     private final Integer type;

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

@@ -45,5 +45,6 @@ public interface ErrorCodeConstants {
     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, "消费分异动用户记录不存在");
+    ErrorCode USER_TOP_UP_CONSUMPTION_POINTS_ORDER_NOT_EXISTS = new ErrorCode(1_002_030_037, "用户充值消费订单分不存在");
 
 }

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

@@ -130,6 +130,12 @@
             <artifactId>pdfbox</artifactId>
             <version>2.0.24</version>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-pay-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 </project>

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

@@ -77,5 +77,8 @@ public class OrderPercentagePageReqVO extends PageParam {
     @Schema(description = "提现佣金百分比")
     private String withdrawCommission;
 
+    @Schema(description = "用户充值消费分的额度")
+    private String userTopUpConsumptionPoints;
+
 
 }

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

@@ -94,4 +94,8 @@ public class OrderPercentageRespVO {
     @Schema(description = "提现佣金百分比")
     @ExcelProperty("提现佣金百分比")
     private String withdrawCommission;
+
+    @Schema(description = "用户充值消费分的额度")
+    @ExcelProperty("用户充值消费分的额度")
+    private String userTopUpConsumptionPoints;
 }

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

@@ -70,4 +70,7 @@ public class OrderPercentageSaveReqVO {
     @Schema(description = "提现佣金百分比")
     private String withdrawCommission;
 
+    @Schema(description = "用户充值消费分的额度")
+    private String userTopUpConsumptionPoints;
+
 }

+ 38 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderController.java

@@ -0,0 +1,38 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder;
+
+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 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.usertopupconsumptionpointsorder.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderDO;
+import cn.newfeifan.mall.module.distri.service.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderService;
+
+@Tag(name = "管理后台 - 用户充值消费分订单")
+@RestController
+@RequestMapping("/distri/user-top-up-consumption-points-order")
+@Validated
+public class UserTopUpConsumptionPointsOrderController {
+
+    @Resource
+    private UserTopUpConsumptionPointsOrderService userTopUpConsumptionPointsOrderService;
+
+    @GetMapping("/page")
+    @Operation(summary = "获得用户充值消费分订单分页")
+    @PreAuthorize("@ss.hasPermission('distri:user-top-up-consumption-points-order:query')")
+    public CommonResult<PageResult<UserTopUpConsumptionPointsOrderRespVO>> getUserTopUpConsumptionPointsOrderPage(@Valid UserTopUpConsumptionPointsOrderPageReqVO pageReqVO) {
+        PageResult<UserTopUpConsumptionPointsOrderDO> pageResult = userTopUpConsumptionPointsOrderService.getUserTopUpConsumptionPointsOrderPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, UserTopUpConsumptionPointsOrderRespVO.class));
+    }
+
+}

+ 72 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderPageReqVO.java

@@ -0,0 +1,72 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder.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 UserTopUpConsumptionPointsOrderPageReqVO extends PageParam {
+
+    @Schema(description = "订单流水号")
+    private String no;
+
+    @Schema(description = "订单来源终端")
+    private Integer terminal;
+
+    @Schema(description = "用户编号", example = "29707")
+    private Long userId;
+
+    @Schema(description = "用户 IP")
+    private String userIp;
+
+    @Schema(description = "商品标题")
+    private String subject;
+
+    @Schema(description = "充值消费分")
+    private Long topUpConsumptionPoints;
+
+    @Schema(description = "到账消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "用户名", example = "李四")
+    private String userName;
+
+    @Schema(description = "支付订单编号", example = "9840")
+    private Long payOrderId;
+
+    @Schema(description = "是否已支付:[0:未支付 1:已经支付过]", example = "2")
+    private Boolean payStatus;
+
+    @Schema(description = "订单支付时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] payTime;
+
+    @Schema(description = "支付成功的支付渠道")
+    private String payChannelCode;
+
+    @Schema(description = "订单完成时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] finishTime;
+
+    @Schema(description = "订单取消时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] cancelTime;
+
+    @Schema(description = "应付金额(总),单位:分", example = "5880")
+    private Integer payPrice;
+
+    @Schema(description = "计算百分比模板")
+    private String percentTemplate;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 85 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderRespVO.java

@@ -0,0 +1,85 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder.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 UserTopUpConsumptionPointsOrderRespVO {
+
+    @Schema(description = "用户充值消费分订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3828")
+    @ExcelProperty("用户充值消费分订单编号")
+    private Long id;
+
+    @Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("订单流水号")
+    private String no;
+
+    @Schema(description = "订单来源终端", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("订单来源终端")
+    private Integer terminal;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29707")
+    @ExcelProperty("用户编号")
+    private Long userId;
+
+    @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("用户 IP")
+    private String userIp;
+
+    @Schema(description = "商品标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("商品标题")
+    private String subject;
+
+    @Schema(description = "充值消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("充值消费分")
+    private Long topUpConsumptionPoints;
+
+    @Schema(description = "到账消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("到账消费分")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "用户名", example = "李四")
+    @ExcelProperty("用户名")
+    private String userName;
+
+    @Schema(description = "支付订单编号", example = "9840")
+    @ExcelProperty("支付订单编号")
+    private Long payOrderId;
+
+    @Schema(description = "是否已支付:[0:未支付 1:已经支付过]", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("是否已支付:[0:未支付 1:已经支付过]")
+    private Boolean payStatus;
+
+    @Schema(description = "订单支付时间")
+    @ExcelProperty("订单支付时间")
+    private LocalDateTime payTime;
+
+    @Schema(description = "支付成功的支付渠道")
+    @ExcelProperty("支付成功的支付渠道")
+    private String payChannelCode;
+
+    @Schema(description = "订单完成时间")
+    @ExcelProperty("订单完成时间")
+    private LocalDateTime finishTime;
+
+    @Schema(description = "订单取消时间")
+    @ExcelProperty("订单取消时间")
+    private LocalDateTime cancelTime;
+
+    @Schema(description = "应付金额(总),单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "5880")
+    @ExcelProperty("应付金额(总),单位:分")
+    private Integer payPrice;
+
+    @Schema(description = "计算百分比模板")
+    @ExcelProperty("计算百分比模板")
+    private String percentTemplate;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 72 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderSaveReqVO.java

@@ -0,0 +1,72 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 用户充值消费分订单新增/修改 Request VO")
+@Data
+public class UserTopUpConsumptionPointsOrderSaveReqVO {
+
+    @Schema(description = "用户充值消费分订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3828")
+    private Long id;
+
+    @Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "订单流水号不能为空")
+    private String no;
+
+    @Schema(description = "订单来源终端", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "订单来源终端不能为空")
+    private Integer terminal;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29707")
+    @NotNull(message = "用户编号不能为空")
+    private Long userId;
+
+    @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "用户 IP不能为空")
+    private String userIp;
+
+    @Schema(description = "商品标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "商品标题不能为空")
+    private String subject;
+
+    @Schema(description = "充值消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "充值消费分不能为空")
+    private Long topUpConsumptionPoints;
+
+    @Schema(description = "到账消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "到账消费分不能为空")
+    private Long practicalConsumptionPoints;
+
+    @Schema(description = "用户名", example = "李四")
+    private String userName;
+
+    @Schema(description = "支付订单编号", example = "9840")
+    private Long payOrderId;
+
+    @Schema(description = "是否已支付:[0:未支付 1:已经支付过]", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "是否已支付:[0:未支付 1:已经支付过]不能为空")
+    private Boolean payStatus;
+
+    @Schema(description = "订单支付时间")
+    private LocalDateTime payTime;
+
+    @Schema(description = "支付成功的支付渠道")
+    private String payChannelCode;
+
+    @Schema(description = "订单完成时间")
+    private LocalDateTime finishTime;
+
+    @Schema(description = "订单取消时间")
+    private LocalDateTime cancelTime;
+
+    @Schema(description = "应付金额(总),单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "5880")
+    @NotNull(message = "应付金额(总),单位:分不能为空")
+    private Integer payPrice;
+
+    @Schema(description = "计算百分比模板")
+    private String percentTemplate;
+
+}

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

@@ -113,6 +113,11 @@ public class OrderPercentageDO extends BaseDO {
      */
     private String withdrawConsumption;
 
+    /**
+     * 用户充值消费分的额度
+     */
+    private String userTopUpConsumptionPoints;
+
     public String getGrossProfitBonusQuotaPerc() {
         double grossProfitBonusQuotaPerc = Double.parseDouble(this.grossProfitBonusQuotaPerc);
         if(grossProfitBonusQuotaPerc > GROSS_PROFIT_BONUS_QUOTA_PERC){

+ 93 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderDO.java

@@ -0,0 +1,93 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.usertopupconsumptionpointsorder;
+
+import lombok.*;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 用户充值消费分订单 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_user_top_up_consumption_points_order")
+@KeySequence("distri_user_top_up_consumption_points_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserTopUpConsumptionPointsOrderDO extends BaseDO {
+
+    /**
+     * 用户充值消费分订单编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 订单流水号
+     */
+    private String no;
+    /**
+     * 订单来源终端
+     */
+    private Integer terminal;
+    /**
+     * 用户编号
+     */
+    private Long userId;
+    /**
+     * 用户 IP
+     */
+    private String userIp;
+    /**
+     * 商品标题
+     */
+    private String subject;
+    /**
+     * 充值消费分
+     */
+    private Long topUpConsumptionPoints;
+    /**
+     * 到账消费分
+     */
+    private Long practicalConsumptionPoints;
+    /**
+     * 用户名
+     */
+    private String userName;
+    /**
+     * 支付订单编号
+     */
+    private Long payOrderId;
+    /**
+     * 是否已支付:[0:未支付 1:已经支付过]
+     */
+    private Boolean payStatus;
+    /**
+     * 订单支付时间
+     */
+    private LocalDateTime payTime;
+    /**
+     * 支付成功的支付渠道
+     */
+    private String payChannelCode;
+    /**
+     * 订单完成时间
+     */
+    private LocalDateTime finishTime;
+    /**
+     * 订单取消时间
+     */
+    private LocalDateTime cancelTime;
+    /**
+     * 应付金额(总),单位:分
+     */
+    private Integer payPrice;
+    /**
+     * 计算百分比模板
+     */
+    private String percentTemplate;
+
+}

+ 41 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderMapper.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.usertopupconsumptionpointsorder;
+
+
+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.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder.vo.*;
+
+/**
+ * 用户充值消费分订单 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface UserTopUpConsumptionPointsOrderMapper extends BaseMapperX<UserTopUpConsumptionPointsOrderDO> {
+
+    default PageResult<UserTopUpConsumptionPointsOrderDO> selectPage(UserTopUpConsumptionPointsOrderPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserTopUpConsumptionPointsOrderDO>()
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getNo, reqVO.getNo())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getTerminal, reqVO.getTerminal())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getUserIp, reqVO.getUserIp())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getSubject, reqVO.getSubject())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getTopUpConsumptionPoints, reqVO.getTopUpConsumptionPoints())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getPracticalConsumptionPoints, reqVO.getPracticalConsumptionPoints())
+                .likeIfPresent(UserTopUpConsumptionPointsOrderDO::getUserName, reqVO.getUserName())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getPayOrderId, reqVO.getPayOrderId())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getPayStatus, reqVO.getPayStatus())
+                .betweenIfPresent(UserTopUpConsumptionPointsOrderDO::getPayTime, reqVO.getPayTime())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getPayChannelCode, reqVO.getPayChannelCode())
+                .betweenIfPresent(UserTopUpConsumptionPointsOrderDO::getFinishTime, reqVO.getFinishTime())
+                .betweenIfPresent(UserTopUpConsumptionPointsOrderDO::getCancelTime, reqVO.getCancelTime())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getPayPrice, reqVO.getPayPrice())
+                .eqIfPresent(UserTopUpConsumptionPointsOrderDO::getPercentTemplate, reqVO.getPercentTemplate())
+                .betweenIfPresent(UserTopUpConsumptionPointsOrderDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(UserTopUpConsumptionPointsOrderDO::getId));
+    }
+
+}

+ 19 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/consumer/topupconsumptionpoints/TopUpConsumptionPointsConsumer.java

@@ -0,0 +1,19 @@
+package cn.newfeifan.mall.module.distri.mq.consumer.topupconsumptionpoints;
+
+import cn.newfeifan.mall.module.distri.service.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderService;
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
+import org.springframework.context.event.EventListener;
+
+import javax.annotation.Resource;
+
+public class TopUpConsumptionPointsConsumer {
+
+    @Resource
+    private UserTopUpConsumptionPointsOrderService userTopUpConsumptionPointsOrderService;
+
+    @EventListener
+    public void onMessage(PayOrderDO payOrderDO) {
+        //修改订单状态,并计算权益
+        userTopUpConsumptionPointsOrderService.topUpConsumptionPoints(payOrderDO);
+    }
+}

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

@@ -6,6 +6,7 @@ import cn.newfeifan.mall.module.distri.dal.dataobject.consumptionchangelog.Consu
 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.dal.dataobject.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderDO;
 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;
@@ -13,6 +14,7 @@ import cn.newfeifan.mall.module.distri.service.consumptionerroruser.ConsumptionE
 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.distri.service.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderService;
 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;
@@ -71,6 +73,8 @@ public class ConsumptionErrorLogServiceImpl implements ConsumptionErrorLogServic
     private AdminUserService adminUserService;
     @Resource
     private AdminAuthService authService;
+    @Resource
+    private UserTopUpConsumptionPointsOrderService userTopUpConsumptionPointsOrderService;
 
     @Override
     public Long createConsumptionErrorLog(ConsumptionErrorLogSaveReqVO createReqVO) {
@@ -159,6 +163,16 @@ public class ConsumptionErrorLogServiceImpl implements ConsumptionErrorLogServic
                         )
                 ));
 
+        Map<Long, Long> topUpMap = userTopUpConsumptionPointsOrderService.getUserTopUpConsumptionPointsOrderList().stream()
+                .collect(Collectors.groupingBy(
+                        UserTopUpConsumptionPointsOrderDO::getUserId, // 按userid分组
+                        Collectors.reducing(0L, // 初始化累加器
+                                UserTopUpConsumptionPointsOrderDO::getPracticalConsumptionPoints, // 获取每个对象的consumptionPoints
+                                Long::sum // 累加函数
+                        )
+                ));
+
+        // 初始化所有用户消费分
         Map<Long, Long> userTotalMap = integralDOS.stream()
                 .collect(Collectors.toMap(
                         IntegralDO::getUserId,
@@ -170,6 +184,7 @@ public class ConsumptionErrorLogServiceImpl implements ConsumptionErrorLogServic
         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));
+        topUpMap.forEach((userId, topUpPoints) -> userTotalMap.merge(userId, topUpPoints, Long::sum));
 
         // 用户可用消费分
         Map<Long, Long> currentMap = integralDOS.stream()

+ 66 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderService.java

@@ -0,0 +1,66 @@
+package cn.newfeifan.mall.module.distri.service.usertopupconsumptionpointsorder;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
+
+/**
+ * 用户充值消费分订单 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface UserTopUpConsumptionPointsOrderService {
+
+    /**
+     * 创建用户充值消费分订单
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createUserTopUpConsumptionPointsOrder(@Valid UserTopUpConsumptionPointsOrderSaveReqVO createReqVO);
+
+    /**
+     * 更新用户充值消费分订单
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateUserTopUpConsumptionPointsOrder(@Valid UserTopUpConsumptionPointsOrderSaveReqVO updateReqVO);
+
+    /**
+     * 删除用户充值消费分订单
+     *
+     * @param id 编号
+     */
+    void deleteUserTopUpConsumptionPointsOrder(Long id);
+
+    /**
+     * 获得用户充值消费分订单
+     *
+     * @param id 编号
+     * @return 用户充值消费分订单
+     */
+    UserTopUpConsumptionPointsOrderDO getUserTopUpConsumptionPointsOrder(Long id);
+
+    /**
+     * 获得用户充值消费分订单分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用户充值消费分订单分页
+     */
+    PageResult<UserTopUpConsumptionPointsOrderDO> getUserTopUpConsumptionPointsOrderPage(UserTopUpConsumptionPointsOrderPageReqVO pageReqVO);
+
+    /**
+     * 充值消费
+     * @param payOrderDO 支付订单
+     */
+    void topUpConsumptionPoints(PayOrderDO payOrderDO);
+
+    /**
+     * 获取充值消费列表
+     * @return 充值列表
+     */
+    List<UserTopUpConsumptionPointsOrderDO> getUserTopUpConsumptionPointsOrderList();
+}

+ 123 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderServiceImpl.java

@@ -0,0 +1,123 @@
+package cn.newfeifan.mall.module.distri.service.usertopupconsumptionpointsorder;
+
+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.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.pay.dal.dataobject.order.PayOrderDO;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import cn.newfeifan.mall.module.distri.controller.admin.usertopupconsumptionpointsorder.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderDO;
+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.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderMapper;
+
+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 UserTopUpConsumptionPointsOrderServiceImpl implements UserTopUpConsumptionPointsOrderService {
+
+    @Resource
+    private UserTopUpConsumptionPointsOrderMapper userTopUpConsumptionPointsOrderMapper;
+    @Resource
+    private IntegralService integralService;
+    @Resource
+    private ConsumptionChangeLogService consumptionChangeLogService;
+
+    @Override
+    public Long createUserTopUpConsumptionPointsOrder(UserTopUpConsumptionPointsOrderSaveReqVO createReqVO) {
+        // 插入
+        UserTopUpConsumptionPointsOrderDO userTopUpConsumptionPointsOrder = BeanUtils.toBean(createReqVO, UserTopUpConsumptionPointsOrderDO.class);
+        userTopUpConsumptionPointsOrderMapper.insert(userTopUpConsumptionPointsOrder);
+        // 返回
+        return userTopUpConsumptionPointsOrder.getId();
+    }
+
+    @Override
+    public void updateUserTopUpConsumptionPointsOrder(UserTopUpConsumptionPointsOrderSaveReqVO updateReqVO) {
+        // 校验存在
+        validateUserTopUpConsumptionPointsOrderExists(updateReqVO.getId());
+        // 更新
+        UserTopUpConsumptionPointsOrderDO updateObj = BeanUtils.toBean(updateReqVO, UserTopUpConsumptionPointsOrderDO.class);
+        userTopUpConsumptionPointsOrderMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteUserTopUpConsumptionPointsOrder(Long id) {
+        // 校验存在
+        validateUserTopUpConsumptionPointsOrderExists(id);
+        // 删除
+        userTopUpConsumptionPointsOrderMapper.deleteById(id);
+    }
+
+    private void validateUserTopUpConsumptionPointsOrderExists(Long id) {
+        if (userTopUpConsumptionPointsOrderMapper.selectById(id) == null) {
+            throw exception(USER_TOP_UP_CONSUMPTION_POINTS_ORDER_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public UserTopUpConsumptionPointsOrderDO getUserTopUpConsumptionPointsOrder(Long id) {
+        return userTopUpConsumptionPointsOrderMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<UserTopUpConsumptionPointsOrderDO> getUserTopUpConsumptionPointsOrderPage(UserTopUpConsumptionPointsOrderPageReqVO pageReqVO) {
+        pageReqVO.setPayStatus(true);
+        return userTopUpConsumptionPointsOrderMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public void topUpConsumptionPoints(PayOrderDO payOrderDO) {
+        UserTopUpConsumptionPointsOrderDO topUpOrder = userTopUpConsumptionPointsOrderMapper.selectById(payOrderDO.getMerchantOrderId());
+
+        if(topUpOrder.getPayStatus()){
+            return;
+        }
+
+        // 修改订单状态
+        userTopUpConsumptionPointsOrderMapper.updateById(UserTopUpConsumptionPointsOrderDO.builder()
+                .id(topUpOrder.getId())
+                .payStatus(true)
+                .payTime(LocalDateTime.now())
+                .payChannelCode(payOrderDO.getChannelCode())
+                .finishTime(LocalDateTime.now())
+                .build());
+
+        // 获取钱包
+        IntegralDO integralDO = integralService.selectByUser(topUpOrder.getUserId());
+        integralDO.setConsumptionPoints(integralDO.getConsumptionPoints() + topUpOrder.getPracticalConsumptionPoints());
+        integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
+
+        // 消费分变动日志
+        consumptionChangeLogService.createConsumptionChangeLog(ConsumptionChangeLogSaveReqVO.builder()
+                .userId(topUpOrder.getUserId())
+                .consumptionStatus(ConsumptionEnum.TOP_UP_GET.getType())
+                .consumptionPoints(topUpOrder.getPracticalConsumptionPoints())
+                .afterConsumptionPoints(integralDO.getConsumptionPoints())
+                .practicalConsumptionPoints(topUpOrder.getTopUpConsumptionPoints())
+                .generateUserId(topUpOrder.getUserId())
+                .build());
+    }
+
+    @Override
+    public List<UserTopUpConsumptionPointsOrderDO> getUserTopUpConsumptionPointsOrderList() {
+        return userTopUpConsumptionPointsOrderMapper.selectList(UserTopUpConsumptionPointsOrderDO::getPayStatus,true);
+    }
+
+}

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

+ 1 - 1
feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/enums/DictTypeConstants.java

@@ -37,7 +37,7 @@ public interface DictTypeConstants {
 
     String ORDER_NO_PREFIX = "P";
 
-
     String TRADE_NO = "trade_no:";
 
+    String TUP_UP_NO = "-top-up";
 }

+ 20 - 4
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/order/PayOrderServiceImpl.java

@@ -25,6 +25,7 @@ import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderExtensionDO;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderExtensionMapper;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderMapper;
 import cn.newfeifan.mall.module.pay.dal.redis.no.PayNoRedisDAO;
+import cn.newfeifan.mall.module.pay.enums.DictTypeConstants;
 import cn.newfeifan.mall.module.pay.enums.notify.PayNotifyTypeEnum;
 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
 import cn.newfeifan.mall.module.pay.framework.pay.config.PayProperties;
@@ -33,6 +34,7 @@ import cn.newfeifan.mall.module.pay.service.app.PayAppService;
 import cn.newfeifan.mall.module.pay.service.channel.PayChannelService;
 import cn.newfeifan.mall.module.pay.service.fuyouorder.FuYouPayOrderService;
 import cn.newfeifan.mall.module.pay.service.notify.PayNotifyService;
+import cn.newfeifan.mall.module.pay.topupconsumptionpoints.TopUpConsumptionPointsProducer;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.google.common.annotations.VisibleForTesting;
 import lombok.extern.slf4j.Slf4j;
@@ -80,6 +82,8 @@ public class PayOrderServiceImpl implements PayOrderService {
 
     @Resource
     private TradeOrderProducer tradeOrderProducer;
+    @Resource
+    private TopUpConsumptionPointsProducer topUpConsumptionPointsProducer;
 
     @Resource
     private FuYouPayOrderService fuYouPayOrderService;
@@ -370,8 +374,14 @@ public class PayOrderServiceImpl implements PayOrderService {
         PayOrderDO payOrderDO = orderMapper.selectById(order.getId());
         System.out.println(payOrderDO.getStatus());
 
-        //如果确实是漏了订单未支付成功,那就补充回来
-        tradeOrderProducer.sendTradeOrderMessage(order.getId());
+        // 判断是商品订单还是充值订单
+        if (payOrderDO.getNo().contains(DictTypeConstants.TUP_UP_NO)) {
+            // 充值消费分订单
+            topUpConsumptionPointsProducer.sendTradeOrderMessage(payOrderDO);
+        } else {
+            //如果确实是漏了订单未支付成功,那就补充回来
+            tradeOrderProducer.sendTradeOrderMessage(order.getId());
+        }
 
         log.info("[updateOrderExtensionSuccess][order({}) 更新为已支付]", order.getId());
         return false;
@@ -494,8 +504,14 @@ public class PayOrderServiceImpl implements PayOrderService {
 
                 // 支付单状态发生变化才更新
                 if (payOrder != null && !payOrder.getStatus().equals(order.getStatus()) && payOrder.getStatus().equals(PayOrderStatusEnum.SUCCESS.getStatus())) {
-                    // 修改订单状态
-                    tradeOrderProducer.sendTradeOrderMessage(order.getId());
+                    // 判断是商品订单还是充值订单
+                    if (payOrder.getPayOrderNo().contains(DictTypeConstants.TUP_UP_NO)) {
+                        // 充值消费分订单
+                        topUpConsumptionPointsProducer.sendTradeOrderMessage(payOrder);
+                    } else {
+                        // 修改订单状态
+                        tradeOrderProducer.sendTradeOrderMessage(order.getId());
+                    }
                 }
                 return true;
             }

+ 25 - 0
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/topupconsumptionpoints/TopUpConsumptionPointsProducer.java

@@ -0,0 +1,25 @@
+package cn.newfeifan.mall.module.pay.topupconsumptionpoints;
+
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@Component
+public class TopUpConsumptionPointsProducer {
+
+    @Resource
+    private ApplicationContext applicationContext;
+
+    /**
+     * 发送订单消息
+     *
+     * @param payOrder 支付订单
+     */
+    public void sendTradeOrderMessage(PayOrderDO payOrder) {
+        applicationContext.publishEvent(payOrder);
+    }
+}