Selaa lähdekoodia

用户发起提现,查看提现记录

Yangzw 7 kuukautta sitten
vanhempi
commit
766c70bb0c
31 muutettua tiedostoa jossa 1538 lisäystä ja 3 poistoa
  1. 2 1
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 3 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  3. 27 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/WithdrawalChannelTypeEnum.java
  4. 66 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/AppApplicationForWithdrawalController.java
  5. 39 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/vo/AppApplicationForWithdrawalPageReqVO.java
  6. 45 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/vo/AppApplicationForWithdrawalRespVO.java
  7. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/vo/AppApplicationForWithdrawalSaveReqVO.java
  8. 88 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/AppApplicationForWithdrawalChannelController.java
  9. 42 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/vo/AppApplicationForWithdrawalChannelPageReqVO.java
  10. 49 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/vo/AppApplicationForWithdrawalChannelRespVO.java
  11. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/vo/AppApplicationForWithdrawalChannelSaveReqVO.java
  12. 88 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/AppPtDailyWithdrawalController.java
  13. 38 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/vo/AppPtDailyWithdrawalPageReqVO.java
  14. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/vo/AppPtDailyWithdrawalRespVO.java
  15. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/vo/AppPtDailyWithdrawalSaveReqVO.java
  16. 52 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawal/ApplicationForWithdrawalDO.java
  17. 57 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelDO.java
  18. 49 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptdailywithdrawal/PtDailyWithdrawalDO.java
  19. 31 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/applicationforwithdrawal/ApplicationForWithdrawalMapper.java
  20. 31 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelMapper.java
  21. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptdailywithdrawal/PtDailyWithdrawalMapper.java
  22. 4 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java
  23. 53 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalService.java
  24. 197 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalServiceImpl.java
  25. 61 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelService.java
  26. 107 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImpl.java
  27. 58 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalService.java
  28. 135 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalServiceImpl.java
  29. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/applicationforwithdrawal/ApplicationForWithdrawalMapper.xml
  30. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelMapper.xml
  31. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptdailywithdrawal/PtDailyWithdrawalMapper.xml

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

@@ -29,7 +29,8 @@ public enum CaclEnum {
     SMALL_QUOTA_CRASH_SETTLE(22, "合赢奖结算获得","每天计算的合赢奖7天后结算"),
     ORDER_PAY_FREEZE_HIGH_QUOTA(23, "购物获得","消费者购物,获得冻结峰值"),
     ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA(24, "订单退款-撤回峰值奖","消费者购物,获得冻结峰值"),
-    MANUAL_RETURN_INTEGRAL(25, "人工返回最早七天未获得的超出额度的合赢奖","人工返回最早七天未获得的合赢奖,超额的")
+    MANUAL_RETURN_INTEGRAL(25, "人工返回最早七天未获得的超出额度的合赢奖","人工返回最早七天未获得的合赢奖,超额的"),
+    WITHDRAWAL(26, "用户提现","用户将可用积分提现到账户"),
     ;
 
     /**

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

@@ -32,5 +32,8 @@ public interface ErrorCodeConstants {
     ErrorCode SOCIAL_STATUS_CHANGE_CATEGORY_NOT_EXISTS = new ErrorCode(1_005_031_001, "会员身价变化类别不存在");
     ErrorCode USER_SIGN_IN_LOG_NOT_EXISTS = new ErrorCode(1_005_031_002, "用户签到日志记录不存在");
     ErrorCode REDIS_ORDER_PERCENTAGE_NOT_EXISTS = new ErrorCode(1_005_031_003, "缓存中没有找到存储的签到获取的身价值");
+    ErrorCode APPLICATION_FOR_WITHDRAWAL_NOT_EXISTS = new ErrorCode(1_005_031_004, "提现申请记录不存在");
+    ErrorCode PT_DAILY_WITHDRAWAL_NOT_EXISTS = new ErrorCode(1_005_031_005, "平台每日提现记录不存在");
+    ErrorCode APPLICATION_FOR_WITHDRAWAL_CHANNEL_NOT_EXISTS = new ErrorCode(1_005_031_005, "提现渠道记录不存在");
 
 }

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

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum WithdrawalChannelTypeEnum {
+
+    WECHAT(1,"微信"),
+    ALIPAY(2,"支付宝"),
+    BANK(3,"银行账号"),
+    ;
+
+    private final Integer type;
+    private final String name;
+
+    public static String getName(int value) {
+        for (WithdrawalChannelTypeEnum item : WithdrawalChannelTypeEnum.values()) {
+            if (item.getType() == value) {
+                return item.getName();
+            }
+        }
+        return null;
+    }
+}

+ 66 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/AppApplicationForWithdrawalController.java

@@ -0,0 +1,66 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+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.app.applicationforwithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.ApplicationForWithdrawalDO;
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawal.ApplicationForWithdrawalService;
+
+@Tag(name = "用户 APP - 提现申请记录")
+@RestController
+@RequestMapping("/distri/application-for-withdrawal")
+@Validated
+public class AppApplicationForWithdrawalController {
+
+    @Resource
+    private ApplicationForWithdrawalService applicationForWithdrawalService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建提现申请记录")
+    public CommonResult<Long> createApplicationForWithdrawal(@Valid @RequestBody AppApplicationForWithdrawalSaveReqVO createReqVO) {
+        return success(applicationForWithdrawalService.createApplicationForWithdrawal(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新提现申请记录")
+    public CommonResult<Boolean> updateApplicationForWithdrawal(@Valid @RequestBody AppApplicationForWithdrawalSaveReqVO updateReqVO) {
+        applicationForWithdrawalService.updateApplicationForWithdrawal(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除提现申请记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deleteApplicationForWithdrawal(@RequestParam("id") Long id) {
+        applicationForWithdrawalService.deleteApplicationForWithdrawal(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得提现申请记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<AppApplicationForWithdrawalRespVO> getApplicationForWithdrawal(@RequestParam("id") Long id) {
+        ApplicationForWithdrawalDO applicationForWithdrawal = applicationForWithdrawalService.getApplicationForWithdrawal(id);
+        return success(BeanUtils.toBean(applicationForWithdrawal, AppApplicationForWithdrawalRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得提现申请记录分页")
+    public CommonResult<PageResult<AppApplicationForWithdrawalRespVO>> getApplicationForWithdrawalPage(@Valid AppApplicationForWithdrawalPageReqVO pageReqVO) {
+        PageResult<ApplicationForWithdrawalDO> pageResult = applicationForWithdrawalService.getApplicationForWithdrawalPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AppApplicationForWithdrawalRespVO.class));
+    }
+
+}

+ 39 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/vo/AppApplicationForWithdrawalPageReqVO.java

@@ -0,0 +1,39 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal.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 = "用户 APP - 提现申请记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppApplicationForWithdrawalPageReqVO extends PageParam {
+
+    @Schema(description = "用户ID", example = "25631")
+    private Long userId;
+
+    @Schema(description = "提现渠道类型", example = "2")
+    private Integer withdrawalType;
+
+    @Schema(description = "提现金额,单位:元")
+    private Long amount;
+
+    @Schema(description = "支付宝账号", example = "30303")
+    private String withdrawalAccount;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", example = "19322")
+    private Long applicationForWithdrawalChannelId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 45 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/vo/AppApplicationForWithdrawalRespVO.java

@@ -0,0 +1,45 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "用户 APP - 提现申请记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppApplicationForWithdrawalRespVO {
+
+    @Schema(description = "申请id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20678")
+    @ExcelProperty("申请id")
+    private Long id;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25631")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @Schema(description = "提现渠道类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("提现渠道类型")
+    private Integer withdrawalType;
+
+    @Schema(description = "提现金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现金额,单位:元")
+    private Long amount;
+
+    @Schema(description = "支付宝账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30303")
+    @ExcelProperty("支付宝账号")
+    private String withdrawalAccount;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    @ExcelProperty("提现状态,已完成是1,未完成为0")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19322")
+    @ExcelProperty("提现渠道记录id")
+    private Long applicationForWithdrawalChannelId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 34 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawal/vo/AppApplicationForWithdrawalSaveReqVO.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "用户 APP - 提现申请记录新增/修改 Request VO")
+@Data
+public class AppApplicationForWithdrawalSaveReqVO {
+
+    @Schema(description = "申请id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20678")
+    private Long id;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25631")
+    private Long userId;
+
+    @Schema(description = "提现渠道类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "提现渠道类型不能为空")
+    private Integer withdrawalType;
+
+    @Schema(description = "提现金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现金额,单位:元不能为空")
+    private Long amount;
+
+    @Schema(description = "支付宝账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30303")
+    private String withdrawalAccount;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19322")
+    private Long applicationForWithdrawalChannelId;
+
+}

+ 88 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/AppApplicationForWithdrawalChannelController.java

@@ -0,0 +1,88 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+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.app.applicationforwithdrawalchannel.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelService;
+
+@Tag(name = "用户 APP - 提现渠道记录")
+@RestController
+@RequestMapping("/distri/application-for-withdrawal-channel")
+@Validated
+public class AppApplicationForWithdrawalChannelController {
+
+    @Resource
+    private ApplicationForWithdrawalChannelService applicationForWithdrawalChannelService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建提现渠道记录")
+    public CommonResult<Long> createApplicationForWithdrawalChannel(@Valid @RequestBody AppApplicationForWithdrawalChannelSaveReqVO createReqVO) {
+        return success(applicationForWithdrawalChannelService.createApplicationForWithdrawalChannel(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新提现渠道记录")
+    public CommonResult<Boolean> updateApplicationForWithdrawalChannel(@Valid @RequestBody AppApplicationForWithdrawalChannelSaveReqVO updateReqVO) {
+        applicationForWithdrawalChannelService.updateApplicationForWithdrawalChannel(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除提现渠道记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deleteApplicationForWithdrawalChannel(@RequestParam("id") Long id) {
+        applicationForWithdrawalChannelService.deleteApplicationForWithdrawalChannel(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得提现渠道记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<AppApplicationForWithdrawalChannelRespVO> getApplicationForWithdrawalChannel(@RequestParam("id") Long id) {
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannel = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannel(id);
+        return success(BeanUtils.toBean(applicationForWithdrawalChannel, AppApplicationForWithdrawalChannelRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得提现渠道记录分页")
+    public CommonResult<PageResult<AppApplicationForWithdrawalChannelRespVO>> getApplicationForWithdrawalChannelPage(@Valid AppApplicationForWithdrawalChannelPageReqVO pageReqVO) {
+        PageResult<ApplicationForWithdrawalChannelDO> pageResult = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannelPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AppApplicationForWithdrawalChannelRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出提现渠道记录 Excel")
+    @OperateLog(type = EXPORT)
+    public void exportApplicationForWithdrawalChannelExcel(@Valid AppApplicationForWithdrawalChannelPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ApplicationForWithdrawalChannelDO> list = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannelPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "提现渠道记录.xls", "数据", AppApplicationForWithdrawalChannelRespVO.class,
+                        BeanUtils.toBean(list, AppApplicationForWithdrawalChannelRespVO.class));
+    }
+
+}

+ 42 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/vo/AppApplicationForWithdrawalChannelPageReqVO.java

@@ -0,0 +1,42 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.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 = "用户 APP - 提现渠道记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppApplicationForWithdrawalChannelPageReqVO extends PageParam {
+
+    @Schema(description = "提现渠道类型", example = "1")
+    private Integer withdrawalType;
+
+    @Schema(description = "提现渠道名称", example = "李四")
+    private String withdrawalName;
+
+    @Schema(description = "提现金额,单位:元")
+    private Long amount;
+
+    @Schema(description = "提现笔数", example = "6693")
+    private Integer count;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", example = "14600")
+    private Long ptDailyWithdrawalId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "导出状态,已导出是1,未导出为0", example = "2")
+    private Boolean excelStatus;
+
+}

+ 49 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/vo/AppApplicationForWithdrawalChannelRespVO.java

@@ -0,0 +1,49 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "用户 APP - 提现渠道记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppApplicationForWithdrawalChannelRespVO {
+
+    @Schema(description = "提现渠道id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1595")
+    @ExcelProperty("提现渠道id")
+    private Long id;
+
+    @Schema(description = "提现渠道类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("提现渠道类型")
+    private Integer withdrawalType;
+
+    @Schema(description = "提现渠道名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("提现渠道名称")
+    private String withdrawalName;
+
+    @Schema(description = "提现金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现金额,单位:元")
+    private Long amount;
+
+    @Schema(description = "提现笔数", requiredMode = Schema.RequiredMode.REQUIRED, example = "6693")
+    @ExcelProperty("提现笔数")
+    private Integer count;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    @ExcelProperty("提现状态,已完成是1,未完成为0")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14600")
+    @ExcelProperty("提现渠道记录id")
+    private Long ptDailyWithdrawalId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "导出状态,已导出是1,未导出为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("导出状态,已导出是1,未导出为0")
+    private Boolean excelStatus;
+
+}

+ 41 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/applicationforwithdrawalchannel/vo/AppApplicationForWithdrawalChannelSaveReqVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "用户 APP - 提现渠道记录新增/修改 Request VO")
+@Data
+public class AppApplicationForWithdrawalChannelSaveReqVO {
+
+    @Schema(description = "提现渠道id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1595")
+    private Long id;
+
+    @Schema(description = "提现渠道类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "提现渠道类型不能为空")
+    private Integer withdrawalType;
+
+    @Schema(description = "提现渠道名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "提现渠道名称不能为空")
+    private String withdrawalName;
+
+    @Schema(description = "提现金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现金额,单位:元不能为空")
+    private Long amount;
+
+    @Schema(description = "提现笔数", requiredMode = Schema.RequiredMode.REQUIRED, example = "6693")
+    @NotNull(message = "提现笔数不能为空")
+    private Integer count;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14600")
+    @NotNull(message = "提现渠道记录id不能为空")
+    private Long ptDailyWithdrawalId;
+
+    @Schema(description = "导出状态,已导出是1,未导出为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "导出状态,已导出是1,未导出为0不能为空")
+    private Boolean excelStatus;
+
+}

+ 88 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/AppPtDailyWithdrawalController.java

@@ -0,0 +1,88 @@
+package cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+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.app.ptdailywithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
+import cn.newfeifan.mall.module.distri.service.ptdailywithdrawal.PtDailyWithdrawalService;
+
+@Tag(name = "用户 APP - 平台每日提现记录")
+@RestController
+@RequestMapping("/distri/pt-daily-withdrawal")
+@Validated
+public class AppPtDailyWithdrawalController {
+
+    @Resource
+    private PtDailyWithdrawalService ptDailyWithdrawalService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建平台每日提现记录")
+    public CommonResult<Long> createPtDailyWithdrawal(@Valid @RequestBody AppPtDailyWithdrawalSaveReqVO createReqVO) {
+        return success(ptDailyWithdrawalService.createPtDailyWithdrawal(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新平台每日提现记录")
+    public CommonResult<Boolean> updatePtDailyWithdrawal(@Valid @RequestBody AppPtDailyWithdrawalSaveReqVO updateReqVO) {
+        ptDailyWithdrawalService.updatePtDailyWithdrawal(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除平台每日提现记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deletePtDailyWithdrawal(@RequestParam("id") Long id) {
+        ptDailyWithdrawalService.deletePtDailyWithdrawal(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得平台每日提现记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<AppPtDailyWithdrawalRespVO> getPtDailyWithdrawal(@RequestParam("id") Long id) {
+        PtDailyWithdrawalDO ptDailyWithdrawal = ptDailyWithdrawalService.getPtDailyWithdrawal(id);
+        return success(BeanUtils.toBean(ptDailyWithdrawal, AppPtDailyWithdrawalRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得平台每日提现记录分页")
+    public CommonResult<PageResult<AppPtDailyWithdrawalRespVO>> getPtDailyWithdrawalPage(@Valid AppPtDailyWithdrawalPageReqVO pageReqVO) {
+        PageResult<PtDailyWithdrawalDO> pageResult = ptDailyWithdrawalService.getPtDailyWithdrawalPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AppPtDailyWithdrawalRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出平台每日提现记录 Excel")
+    @OperateLog(type = EXPORT)
+    public void exportPtDailyWithdrawalExcel(@Valid AppPtDailyWithdrawalPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<PtDailyWithdrawalDO> list = ptDailyWithdrawalService.getPtDailyWithdrawalPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "平台每日提现记录.xls", "数据", AppPtDailyWithdrawalRespVO.class,
+                        BeanUtils.toBean(list, AppPtDailyWithdrawalRespVO.class));
+    }
+
+}

+ 38 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/vo/AppPtDailyWithdrawalPageReqVO.java

@@ -0,0 +1,38 @@
+package cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.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 = "用户 APP - 平台每日提现记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppPtDailyWithdrawalPageReqVO extends PageParam {
+
+    @Schema(description = "提现金额,单位:元")
+    private Long amount;
+
+    @Schema(description = "提现笔数", example = "19749")
+    private Integer count;
+
+    @Schema(description = "提现状态,0:待转账 1:全部完成 2:部分完成", example = "2")
+    private Integer status;
+
+    @Schema(description = "提现开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] startTime;
+
+    @Schema(description = "提现截止时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] endTime;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 41 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/vo/AppPtDailyWithdrawalRespVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "用户 APP - 平台每日提现记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppPtDailyWithdrawalRespVO {
+
+    @Schema(description = "记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11736")
+    @ExcelProperty("记录id")
+    private Long id;
+
+    @Schema(description = "提现金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现金额,单位:元")
+    private Long amount;
+
+    @Schema(description = "提现笔数", requiredMode = Schema.RequiredMode.REQUIRED, example = "19749")
+    @ExcelProperty("提现笔数")
+    private Integer count;
+
+    @Schema(description = "提现状态,0:待转账 1:全部完成 2:部分完成", example = "2")
+    @ExcelProperty("提现状态,0:待转账 1:全部完成 2:部分完成")
+    private Integer status;
+
+    @Schema(description = "提现开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现开始时间")
+    private LocalDateTime startTime;
+
+    @Schema(description = "提现截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提现截止时间")
+    private LocalDateTime endTime;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 34 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptdailywithdrawal/vo/AppPtDailyWithdrawalSaveReqVO.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+import java.time.LocalDateTime;
+
+@Schema(description = "用户 APP - 平台每日提现记录新增/修改 Request VO")
+@Data
+public class AppPtDailyWithdrawalSaveReqVO {
+
+    @Schema(description = "记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11736")
+    private Long id;
+
+    @Schema(description = "提现金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现金额,单位:元不能为空")
+    private Long amount;
+
+    @Schema(description = "提现笔数", requiredMode = Schema.RequiredMode.REQUIRED, example = "19749")
+    @NotNull(message = "提现笔数不能为空")
+    private Integer count;
+
+    @Schema(description = "提现状态,0:待转账 1:全部完成 2:部分完成", example = "2")
+    private Integer status;
+
+    @Schema(description = "提现开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现开始时间不能为空")
+    private LocalDateTime startTime;
+
+    @Schema(description = "提现截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提现截止时间不能为空")
+    private LocalDateTime endTime;
+
+}

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

@@ -0,0 +1,52 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 提现申请记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_application_for_withdrawal")
+@KeySequence("distri_application_for_withdrawal_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ApplicationForWithdrawalDO extends BaseDO {
+
+    /**
+     * 申请id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 提现渠道类型
+     */
+    private Integer withdrawalType;
+    /**
+     * 提现金额,单位:元
+     */
+    private Long amount;
+    /**
+     * 支付宝账号
+     */
+    private String withdrawalAccount;
+    /**
+     * 提现状态,已完成是1,未完成为0
+     */
+    private Boolean status;
+    /**
+     * 提现渠道记录id
+     */
+    private Long applicationForWithdrawalChannelId;
+
+}

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

@@ -0,0 +1,57 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 提现渠道记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_application_for_withdrawal_channel")
+@KeySequence("distri_application_for_withdrawal_channel_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ApplicationForWithdrawalChannelDO extends BaseDO {
+
+    /**
+     * 提现渠道id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 提现渠道类型
+     */
+    private Integer withdrawalType;
+    /**
+     * 提现渠道名称
+     */
+    private String withdrawalName;
+    /**
+     * 提现金额,单位:元
+     */
+    private Long amount;
+    /**
+     * 提现笔数
+     */
+    private Integer count;
+    /**
+     * 提现状态,已完成是1,未完成为0
+     */
+    private Boolean status;
+    /**
+     * 提现渠道记录id
+     */
+    private Long ptDailyWithdrawalId;
+
+    /**
+     * 导出状态,已导出是1,未导出为0
+     */
+    private Boolean excelStatus;
+
+}

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

@@ -0,0 +1,49 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal;
+
+import lombok.*;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台每日提现记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_pt_daily_withdrawal")
+@KeySequence("distri_pt_daily_withdrawal_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtDailyWithdrawalDO extends BaseDO {
+
+    /**
+     * 记录id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 提现金额,单位:元
+     */
+    private Long amount;
+    /**
+     * 提现笔数
+     */
+    private Integer count;
+    /**
+     * 提现状态,0:待转账 1:全部完成 2:部分完成
+     */
+    private Integer status;
+    /**
+     * 提现开始时间
+     */
+    private LocalDateTime startTime;
+    /**
+     * 提现截止时间
+     */
+    private LocalDateTime endTime;
+
+}

+ 31 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/applicationforwithdrawal/ApplicationForWithdrawalMapper.java

@@ -0,0 +1,31 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.applicationforwithdrawal;
+
+
+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.applicationforwithdrawal.ApplicationForWithdrawalDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal.vo.*;
+
+/**
+ * 提现申请记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ApplicationForWithdrawalMapper extends BaseMapperX<ApplicationForWithdrawalDO> {
+
+    default PageResult<ApplicationForWithdrawalDO> selectPage(AppApplicationForWithdrawalPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ApplicationForWithdrawalDO>()
+                .eqIfPresent(ApplicationForWithdrawalDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(ApplicationForWithdrawalDO::getWithdrawalType, reqVO.getWithdrawalType())
+                .eqIfPresent(ApplicationForWithdrawalDO::getAmount, reqVO.getAmount())
+                .eqIfPresent(ApplicationForWithdrawalDO::getWithdrawalAccount, reqVO.getWithdrawalAccount())
+                .eqIfPresent(ApplicationForWithdrawalDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(ApplicationForWithdrawalDO::getApplicationForWithdrawalChannelId, reqVO.getApplicationForWithdrawalChannelId())
+                .betweenIfPresent(ApplicationForWithdrawalDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ApplicationForWithdrawalDO::getId));
+    }
+
+}

+ 31 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelMapper.java

@@ -0,0 +1,31 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.applicationforwithdrawalchannel;
+
+
+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.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.vo.*;
+
+/**
+ * 提现渠道记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ApplicationForWithdrawalChannelMapper extends BaseMapperX<ApplicationForWithdrawalChannelDO> {
+
+    default PageResult<ApplicationForWithdrawalChannelDO> selectPage(AppApplicationForWithdrawalChannelPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ApplicationForWithdrawalChannelDO>()
+                .eqIfPresent(ApplicationForWithdrawalChannelDO::getWithdrawalType, reqVO.getWithdrawalType())
+                .likeIfPresent(ApplicationForWithdrawalChannelDO::getWithdrawalName, reqVO.getWithdrawalName())
+                .eqIfPresent(ApplicationForWithdrawalChannelDO::getAmount, reqVO.getAmount())
+                .eqIfPresent(ApplicationForWithdrawalChannelDO::getCount, reqVO.getCount())
+                .eqIfPresent(ApplicationForWithdrawalChannelDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(ApplicationForWithdrawalChannelDO::getPtDailyWithdrawalId, reqVO.getPtDailyWithdrawalId())
+                .betweenIfPresent(ApplicationForWithdrawalChannelDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ApplicationForWithdrawalChannelDO::getId));
+    }
+
+}

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

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.ptdailywithdrawal;
+
+
+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.ptdailywithdrawal.PtDailyWithdrawalDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.vo.*;
+
+/**
+ * 平台每日提现记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface PtDailyWithdrawalMapper extends BaseMapperX<PtDailyWithdrawalDO> {
+
+    default PageResult<PtDailyWithdrawalDO> selectPage(AppPtDailyWithdrawalPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<PtDailyWithdrawalDO>()
+                .eqIfPresent(PtDailyWithdrawalDO::getAmount, reqVO.getAmount())
+                .eqIfPresent(PtDailyWithdrawalDO::getCount, reqVO.getCount())
+                .eqIfPresent(PtDailyWithdrawalDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(PtDailyWithdrawalDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(PtDailyWithdrawalDO::getEndTime, reqVO.getEndTime())
+                .betweenIfPresent(PtDailyWithdrawalDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(PtDailyWithdrawalDO::getId));
+    }
+
+}

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

@@ -46,7 +46,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                     ORDER_REFUND_INTEGRAL.getType(),
                     ORDER_CANCEL_BY_USER_REFUND_INTEGRAL.getType(),
                     ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL.getType(),
-                    MANUAL_RETURN_INTEGRAL.getType()
+                    MANUAL_RETURN_INTEGRAL.getType(),
+                    WITHDRAWAL.getType()
             );
             queryWrapper.ne(PtProfitLogDO::getAmount,0);
         } else {
@@ -73,7 +74,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                     AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA.getType(),
                     GROSS_PROFIT_BONUS_QUOTA_PERC_EXCEED_MAXIMUM_LIMIT.getType(),
                     GROSS_PROFIT_ANCESTOR_QUOTA_PERC_EXCEED_MAXIMUM_LIMIT.getType(),
-                    MANUAL_RETURN_INTEGRAL.getType()
+                    MANUAL_RETURN_INTEGRAL.getType(),
+                    WITHDRAWAL.getType()
             );
             reqVO.setUserId(null);
         } else if (reqVO.getIsFreeze() && reqVO.getUserId().equals(PT_ID)) {

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

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawal;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.ApplicationForWithdrawalDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 提现申请记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ApplicationForWithdrawalService {
+
+    /**
+     * 创建提现申请记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createApplicationForWithdrawal(@Valid AppApplicationForWithdrawalSaveReqVO createReqVO);
+
+    /**
+     * 更新提现申请记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateApplicationForWithdrawal(@Valid AppApplicationForWithdrawalSaveReqVO updateReqVO);
+
+    /**
+     * 删除提现申请记录
+     *
+     * @param id 编号
+     */
+    void deleteApplicationForWithdrawal(Long id);
+
+    /**
+     * 获得提现申请记录
+     *
+     * @param id 编号
+     * @return 提现申请记录
+     */
+    ApplicationForWithdrawalDO getApplicationForWithdrawal(Long id);
+
+    /**
+     * 获得提现申请记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 提现申请记录分页
+     */
+    PageResult<ApplicationForWithdrawalDO> getApplicationForWithdrawalPage(AppApplicationForWithdrawalPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,197 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawal;
+
+import cn.newfeifan.mall.framework.common.exception.ErrorCode;
+import cn.newfeifan.mall.module.distri.constant.DistriConstants;
+import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.vo.AppApplicationForWithdrawalChannelSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.vo.AppPtDailyWithdrawalSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.ptprofitlog.vo.PtProfitLogSaveReqVO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.enums.WithdrawalChannelTypeEnum;
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelService;
+import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
+import cn.newfeifan.mall.module.distri.service.ptdailywithdrawal.PtDailyWithdrawalService;
+import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
+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.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.ApplicationForWithdrawalDO;
+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.applicationforwithdrawal.ApplicationForWithdrawalMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+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 ApplicationForWithdrawalServiceImpl implements ApplicationForWithdrawalService {
+
+    @Resource
+    private ApplicationForWithdrawalMapper applicationForWithdrawalMapper;
+
+    @Resource
+    private ApplicationForWithdrawalChannelService applicationForWithdrawalChannelService;
+
+    @Resource
+    private PtDailyWithdrawalService ptDailyWithdrawalService;
+
+    @Resource
+    private MemberUserService userService;
+
+    @Resource
+    private IntegralService integralService;
+
+    @Resource
+    private PtProfitLogService ptProfitLogService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createApplicationForWithdrawal(AppApplicationForWithdrawalSaveReqVO reqVO) {
+
+        // 获取用户钱包
+        IntegralDO integralDO = integralService.selectByUser(getLoginUserId());
+
+        if(integralDO.getCurrentQuota() < reqVO.getAmount() * DistriConstants.INTEGRAL_PAGE2DB){
+            ErrorCode ERROR = new ErrorCode(1_005_031_005, "积分不足!");
+            throw exception(ERROR);
+        }
+
+        // 获取pt一级提现记录
+        PtDailyWithdrawalDO ptDailyWithdrawalDO = ptDailyWithdrawalService.getPtDailyWithdrawalToDay();
+
+        // 二级提现记录
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannelDO = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannel(reqVO.getWithdrawalType(), ptDailyWithdrawalDO.getId());
+
+        // 插入
+        MemberUserDO user = userService.getUser(getLoginUserId());
+
+        reqVO.setApplicationForWithdrawalChannelId(applicationForWithdrawalChannelDO.getId());
+        reqVO.setUserId(user.getId());
+
+        // 根据渠道获取对应账号
+        if (reqVO.getWithdrawalType().equals(WithdrawalChannelTypeEnum.ALIPAY.getType())) {
+            reqVO.setWithdrawalAccount(user.getAlipayAccount());
+        } else if (reqVO.getWithdrawalType().equals(WithdrawalChannelTypeEnum.BANK.getType())) {
+            reqVO.setWithdrawalAccount(user.getBankAccount());
+        }
+
+        if(reqVO.getWithdrawalAccount() == null || reqVO.getWithdrawalAccount().isEmpty()){
+            ErrorCode ERROR = new ErrorCode(1_005_031_005, "提现账号不能为空!");
+            throw exception(ERROR);
+        }
+
+        ApplicationForWithdrawalDO applicationForWithdrawal = BeanUtils.toBean(reqVO, ApplicationForWithdrawalDO.class);
+        applicationForWithdrawalMapper.insert(applicationForWithdrawal);
+
+        // 每一次申请就会改变二级表总数据
+        applicationForWithdrawalChannelDO.setAmount(applicationForWithdrawalChannelDO.getAmount() + reqVO.getAmount());
+        applicationForWithdrawalChannelDO.setCount(applicationForWithdrawalChannelDO.getCount() + 1);
+        applicationForWithdrawalChannelService.updateApplicationForWithdrawalChannel(BeanUtils.toBean(applicationForWithdrawalChannelDO, AppApplicationForWithdrawalChannelSaveReqVO.class));
+
+        // 每一次申请就会改变一级表总数据
+        ptDailyWithdrawalDO.setAmount(ptDailyWithdrawalDO.getAmount() + reqVO.getAmount());
+        ptDailyWithdrawalDO.setCount(ptDailyWithdrawalDO.getCount() + 1);
+        ptDailyWithdrawalService.updatePtDailyWithdrawal(BeanUtils.toBean(ptDailyWithdrawalDO, AppPtDailyWithdrawalSaveReqVO.class));
+
+        // 修改用户钱包余额
+        integralDO.setCurrentQuota(integralDO.getCurrentQuota() - reqVO.getAmount() * DistriConstants.INTEGRAL_PAGE2DB);
+        integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
+
+        // 记录用户积分变动日志
+        PtProfitLogSaveReqVO ptProfitLogSaveReqVO = PtProfitLogSaveReqVO.builder()
+                .amount(-reqVO.getAmount() * DistriConstants.INTEGRAL_PAGE2DB)
+                .afterAmount(integralDO.getCurrentQuota())
+                .profitStatus(CaclEnum.WITHDRAWAL.getType())
+                .userId(user.getId())
+                .generateUserId(user.getId())
+                .build();
+        ptProfitLogService.createPtProfitLog(ptProfitLogSaveReqVO);
+
+        // 返回
+        return applicationForWithdrawal.getId();
+    }
+
+    @Override
+    public void updateApplicationForWithdrawal(AppApplicationForWithdrawalSaveReqVO updateReqVO) {
+        // 校验存在
+        validateApplicationForWithdrawalExists(updateReqVO.getId());
+        // 更新
+        ApplicationForWithdrawalDO updateObj = BeanUtils.toBean(updateReqVO, ApplicationForWithdrawalDO.class);
+        applicationForWithdrawalMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteApplicationForWithdrawal(Long id) {
+        // 校验存在
+        validateApplicationForWithdrawalExists(id);
+        // 删除
+        applicationForWithdrawalMapper.deleteById(id);
+    }
+
+    private void validateApplicationForWithdrawalExists(Long id) {
+        if (applicationForWithdrawalMapper.selectById(id) == null) {
+            throw exception(APPLICATION_FOR_WITHDRAWAL_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ApplicationForWithdrawalDO getApplicationForWithdrawal(Long id) {
+        return applicationForWithdrawalMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ApplicationForWithdrawalDO> getApplicationForWithdrawalPage(AppApplicationForWithdrawalPageReqVO pageReqVO) {
+
+        pageReqVO.setUserId(getLoginUserId());
+
+        PageResult<ApplicationForWithdrawalDO> result = applicationForWithdrawalMapper.selectPage(pageReqVO);
+
+        for (ApplicationForWithdrawalDO withdrawalDO : result.getList()) {
+            withdrawalDO.setWithdrawalAccount(formatAccount(withdrawalDO.getWithdrawalAccount()));
+        }
+
+        return result;
+    }
+
+    /**
+     * 格式化账号,只显示前三位和后四位,中间用*代替
+     *
+     * @param account 原始账号字符串
+     * @return 格式化后的账号
+     */
+    private String formatAccount(String account) {
+        if (account == null || account.length() <= 7) {
+            return "****"; // 如果账号长度小于等于7,显示四个星号
+        }
+
+        // 截取前三位
+        String firstPart = account.substring(0, 3);
+        // 截取后四位
+        String lastPart = account.substring(account.length() - 4);
+
+        // 生成中间的*部分
+        String middlePart = "****";
+
+        // 拼接最终的格式化账号
+        return firstPart + middlePart + lastPart;
+    }
+
+}

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

@@ -0,0 +1,61 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 提现渠道记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ApplicationForWithdrawalChannelService {
+
+    /**
+     * 创建提现渠道记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createApplicationForWithdrawalChannel(@Valid AppApplicationForWithdrawalChannelSaveReqVO createReqVO);
+
+    /**
+     * 更新提现渠道记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateApplicationForWithdrawalChannel(@Valid AppApplicationForWithdrawalChannelSaveReqVO updateReqVO);
+
+    /**
+     * 删除提现渠道记录
+     *
+     * @param id 编号
+     */
+    void deleteApplicationForWithdrawalChannel(Long id);
+
+    /**
+     * 获得提现渠道记录
+     *
+     * @param id 编号
+     * @return 提现渠道记录
+     */
+    ApplicationForWithdrawalChannelDO getApplicationForWithdrawalChannel(Long id);
+
+    /**
+     * 获得提现渠道记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 提现渠道记录分页
+     */
+    PageResult<ApplicationForWithdrawalChannelDO> getApplicationForWithdrawalChannelPage(AppApplicationForWithdrawalChannelPageReqVO pageReqVO);
+
+    /**
+     * 获得提现渠道记录
+     *
+     * @param withdrawalType 渠道类型
+     * @param id
+     * @return 提现渠道记录
+     */
+    ApplicationForWithdrawalChannelDO getApplicationForWithdrawalChannel(Integer withdrawalType, Long id);
+}

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

@@ -0,0 +1,107 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel;
+
+import cn.newfeifan.mall.module.distri.enums.WithdrawalChannelTypeEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import org.springframework.validation.annotation.Validated;
+
+import cn.newfeifan.mall.module.distri.controller.app.applicationforwithdrawalchannel.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+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.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelMapper;
+
+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 ApplicationForWithdrawalChannelServiceImpl implements ApplicationForWithdrawalChannelService {
+
+    @Resource
+    private ApplicationForWithdrawalChannelMapper applicationForWithdrawalChannelMapper;
+
+    @Override
+    public Long createApplicationForWithdrawalChannel(AppApplicationForWithdrawalChannelSaveReqVO createReqVO) {
+        // 插入
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannel = BeanUtils.toBean(createReqVO, ApplicationForWithdrawalChannelDO.class);
+        applicationForWithdrawalChannelMapper.insert(applicationForWithdrawalChannel);
+        // 返回
+        return applicationForWithdrawalChannel.getId();
+    }
+
+    @Override
+    public void updateApplicationForWithdrawalChannel(AppApplicationForWithdrawalChannelSaveReqVO updateReqVO) {
+        // 校验存在
+        validateApplicationForWithdrawalChannelExists(updateReqVO.getId());
+        // 更新
+        ApplicationForWithdrawalChannelDO updateObj = BeanUtils.toBean(updateReqVO, ApplicationForWithdrawalChannelDO.class);
+        applicationForWithdrawalChannelMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteApplicationForWithdrawalChannel(Long id) {
+        // 校验存在
+        validateApplicationForWithdrawalChannelExists(id);
+        // 删除
+        applicationForWithdrawalChannelMapper.deleteById(id);
+    }
+
+    private void validateApplicationForWithdrawalChannelExists(Long id) {
+        if (applicationForWithdrawalChannelMapper.selectById(id) == null) {
+            throw exception(APPLICATION_FOR_WITHDRAWAL_CHANNEL_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ApplicationForWithdrawalChannelDO getApplicationForWithdrawalChannel(Long id) {
+        return applicationForWithdrawalChannelMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ApplicationForWithdrawalChannelDO> getApplicationForWithdrawalChannelPage(AppApplicationForWithdrawalChannelPageReqVO pageReqVO) {
+        return applicationForWithdrawalChannelMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public ApplicationForWithdrawalChannelDO getApplicationForWithdrawalChannel(Integer withdrawalType, Long id) {
+
+        // 先查看有没有该渠道的记录
+        LambdaQueryWrapper<ApplicationForWithdrawalChannelDO> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ApplicationForWithdrawalChannelDO::getPtDailyWithdrawalId, id);
+        if(WithdrawalChannelTypeEnum.ALIPAY.getType().equals(withdrawalType) || WithdrawalChannelTypeEnum.BANK.getType().equals(withdrawalType)){
+            wrapper.eq(ApplicationForWithdrawalChannelDO::getWithdrawalType, WithdrawalChannelTypeEnum.ALIPAY.getType())
+                    .or()
+                    .eq(ApplicationForWithdrawalChannelDO::getWithdrawalType, WithdrawalChannelTypeEnum.BANK.getType())
+            ;
+        }
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannelDO = applicationForWithdrawalChannelMapper.selectOne(wrapper);
+
+        // 没有就插入
+        if (applicationForWithdrawalChannelDO == null) {
+            applicationForWithdrawalChannelDO = ApplicationForWithdrawalChannelDO.builder()
+                    .withdrawalType(withdrawalType)
+                    .ptDailyWithdrawalId(id)
+                    .build();
+
+            if(WithdrawalChannelTypeEnum.ALIPAY.getType().equals(withdrawalType) || WithdrawalChannelTypeEnum.BANK.getType().equals(withdrawalType)){
+                applicationForWithdrawalChannelDO.setWithdrawalName(WithdrawalChannelTypeEnum.getName(WithdrawalChannelTypeEnum.ALIPAY.getType()) + "/" + WithdrawalChannelTypeEnum.getName(WithdrawalChannelTypeEnum.BANK.getType()));
+            }
+
+            applicationForWithdrawalChannelMapper.insert(applicationForWithdrawalChannelDO);
+            return applicationForWithdrawalChannelMapper.selectById(applicationForWithdrawalChannelDO.getId());
+        }
+
+        return applicationForWithdrawalChannelDO;
+    }
+
+}

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

@@ -0,0 +1,58 @@
+package cn.newfeifan.mall.module.distri.service.ptdailywithdrawal;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 平台每日提现记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface PtDailyWithdrawalService {
+
+    /**
+     * 创建平台每日提现记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPtDailyWithdrawal(@Valid AppPtDailyWithdrawalSaveReqVO createReqVO);
+
+    /**
+     * 更新平台每日提现记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePtDailyWithdrawal(@Valid AppPtDailyWithdrawalSaveReqVO updateReqVO);
+
+    /**
+     * 删除平台每日提现记录
+     *
+     * @param id 编号
+     */
+    void deletePtDailyWithdrawal(Long id);
+
+    /**
+     * 获得平台每日提现记录
+     *
+     * @param id 编号
+     * @return 平台每日提现记录
+     */
+    PtDailyWithdrawalDO getPtDailyWithdrawal(Long id);
+
+    /**
+     * 获得平台每日提现记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台每日提现记录分页
+     */
+    PageResult<PtDailyWithdrawalDO> getPtDailyWithdrawalPage(AppPtDailyWithdrawalPageReqVO pageReqVO);
+
+    /**
+     * 获取当天时间段的平台每日提现记录
+     * @return 平台每日提现记录
+     */
+    PtDailyWithdrawalDO getPtDailyWithdrawalToDay();
+}

+ 135 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalServiceImpl.java

@@ -0,0 +1,135 @@
+package cn.newfeifan.mall.module.distri.service.ptdailywithdrawal;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+import cn.newfeifan.mall.module.distri.controller.app.ptdailywithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
+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.ptdailywithdrawal.PtDailyWithdrawalMapper;
+
+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 PtDailyWithdrawalServiceImpl implements PtDailyWithdrawalService {
+
+    @Resource
+    private PtDailyWithdrawalMapper ptDailyWithdrawalMapper;
+
+    @Override
+    public Long createPtDailyWithdrawal(AppPtDailyWithdrawalSaveReqVO createReqVO) {
+        // 插入
+        PtDailyWithdrawalDO ptDailyWithdrawal = BeanUtils.toBean(createReqVO, PtDailyWithdrawalDO.class);
+        ptDailyWithdrawalMapper.insert(ptDailyWithdrawal);
+        // 返回
+        return ptDailyWithdrawal.getId();
+    }
+
+    @Override
+    public void updatePtDailyWithdrawal(AppPtDailyWithdrawalSaveReqVO updateReqVO) {
+        // 校验存在
+        validatePtDailyWithdrawalExists(updateReqVO.getId());
+        // 更新
+        PtDailyWithdrawalDO updateObj = BeanUtils.toBean(updateReqVO, PtDailyWithdrawalDO.class);
+        ptDailyWithdrawalMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deletePtDailyWithdrawal(Long id) {
+        // 校验存在
+        validatePtDailyWithdrawalExists(id);
+        // 删除
+        ptDailyWithdrawalMapper.deleteById(id);
+    }
+
+    private void validatePtDailyWithdrawalExists(Long id) {
+        if (ptDailyWithdrawalMapper.selectById(id) == null) {
+            throw exception(PT_DAILY_WITHDRAWAL_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public PtDailyWithdrawalDO getPtDailyWithdrawal(Long id) {
+        return ptDailyWithdrawalMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<PtDailyWithdrawalDO> getPtDailyWithdrawalPage(AppPtDailyWithdrawalPageReqVO pageReqVO) {
+        return ptDailyWithdrawalMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public PtDailyWithdrawalDO getPtDailyWithdrawalToDay() {
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        // 获取今天下午五点
+        LocalDateTime todayFivePM = LocalDateTime.of(LocalDate.now(), LocalTime.of(17, 0));
+
+        // 获取昨天下午五点
+        LocalDateTime yesterdayFivePM = LocalDate.now().minusDays(1).atTime(17, 0);
+
+        // 判断当前时间是否在昨天下午五点和今天下午五点之间
+        if (now.isAfter(yesterdayFivePM) && now.isBefore(todayFivePM)) {
+            PtDailyWithdrawalDO ptDailyWithdrawalDO = ptDailyWithdrawalMapper.selectOne(new LambdaQueryWrapper<PtDailyWithdrawalDO>()
+                    .eq(PtDailyWithdrawalDO::getStartTime, yesterdayFivePM)
+                    .eq(PtDailyWithdrawalDO::getEndTime, todayFivePM)
+            );
+
+            // 如果没有记录那就插入一条新的
+            if (ptDailyWithdrawalDO == null) {
+                ptDailyWithdrawalDO = PtDailyWithdrawalDO.builder()
+                        .startTime(yesterdayFivePM)
+                        .endTime(todayFivePM)
+                        .build();
+
+                ptDailyWithdrawalMapper.insert(ptDailyWithdrawalDO);
+
+                return ptDailyWithdrawalMapper.selectById(ptDailyWithdrawalDO.getId());
+            }
+
+            return ptDailyWithdrawalDO;
+
+        } else {
+            // 获取明天下午五点的时间
+            LocalDateTime tomorrowFivePM = LocalDate.now().plusDays(1).atTime(17, 0);
+
+            PtDailyWithdrawalDO ptDailyWithdrawalDO = ptDailyWithdrawalMapper.selectOne(new LambdaQueryWrapper<PtDailyWithdrawalDO>()
+                    .eq(PtDailyWithdrawalDO::getStartTime, todayFivePM)
+                    .eq(PtDailyWithdrawalDO::getEndTime, tomorrowFivePM)
+            );
+
+            // 如果没有记录那就插入一条新的
+            if (ptDailyWithdrawalDO == null) {
+                ptDailyWithdrawalDO = PtDailyWithdrawalDO.builder()
+                        .startTime(todayFivePM)
+                        .endTime(tomorrowFivePM)
+                        .build();
+
+                ptDailyWithdrawalMapper.insert(ptDailyWithdrawalDO);
+
+                return ptDailyWithdrawalMapper.selectById(ptDailyWithdrawalDO.getId());
+            }
+
+            return ptDailyWithdrawalDO;
+        }
+    }
+
+}

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