Browse Source

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

Yangzw 7 months ago
parent
commit
2f034aab90
43 changed files with 2036 additions and 4 deletions
  1. 2 1
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 4 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. 112 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/ApplicationForWithdrawalController.java
  5. 39 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalPageReqVO.java
  6. 48 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalRespVO.java
  7. 37 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalSaveReqVO.java
  8. 99 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelController.java
  9. 31 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelExcelRespVO.java
  10. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelPageReqVO.java
  11. 49 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelRespVO.java
  12. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelSaveReqVO.java
  13. 94 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/PtDailyWithdrawalController.java
  14. 38 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/vo/PtDailyWithdrawalPageReqVO.java
  15. 41 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/vo/PtDailyWithdrawalRespVO.java
  16. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptdailywithdrawal/vo/PtDailyWithdrawalSaveReqVO.java
  17. 52 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawal/ApplicationForWithdrawalDO.java
  18. 57 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelDO.java
  19. 49 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptdailywithdrawal/PtDailyWithdrawalDO.java
  20. 31 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/applicationforwithdrawal/ApplicationForWithdrawalMapper.java
  21. 31 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelMapper.java
  22. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptdailywithdrawal/PtDailyWithdrawalMapper.java
  23. 4 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java
  24. 61 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalService.java
  25. 110 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalServiceImpl.java
  26. 59 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelService.java
  27. 79 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImpl.java
  28. 53 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalService.java
  29. 71 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalServiceImpl.java
  30. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/applicationforwithdrawal/ApplicationForWithdrawalMapper.xml
  31. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelMapper.xml
  32. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptdailywithdrawal/PtDailyWithdrawalMapper.xml
  33. 146 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalServiceImplTest.java
  34. 146 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImplTest.java
  35. 142 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalServiceImplTest.java
  36. 5 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java
  37. 11 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/excelVO/DailyBillOrderRespVO.java
  38. 5 1
      feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/api/user/dto/MemberUserRespDTO.java
  39. 15 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserBaseVO.java
  40. 15 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserPageReqVO.java
  41. 15 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserRespVO.java
  42. 21 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/dataobject/user/MemberUserDO.java
  43. 55 0
      sql/mysql/建空库SQL/18_20240717.sql

+ 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, "用户提现","用户将可用积分提现到账户"),
     ;
 
     /**

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

@@ -37,4 +37,8 @@ public interface ErrorCodeConstants {
     ErrorCode PT_SETTLEMENT_NOT_EXISTS = new ErrorCode(1_002_030_030, "平台结算记录不存在");
     ErrorCode PT_DAILY_BILL_NOT_EXISTS = new ErrorCode(1_002_030_031, "平台每日账单不存在");
 
+    ErrorCode APPLICATION_FOR_WITHDRAWAL_NOT_EXISTS = new ErrorCode(1_002_030_032, "提现申请记录不存在");
+    ErrorCode PT_DAILY_WITHDRAWAL_NOT_EXISTS = new ErrorCode(1_002_030_033, "平台每日提现记录不存在");
+    ErrorCode APPLICATION_FOR_WITHDRAWAL_CHANNEL_NOT_EXISTS = new ErrorCode(1_002_030_034, "提现渠道记录不存在");
+
 }

+ 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;
+    }
+}

+ 112 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/ApplicationForWithdrawalController.java

@@ -0,0 +1,112 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal;
+
+import cn.newfeifan.mall.module.distri.enums.WithdrawalChannelTypeEnum;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.user.MemberUserService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.ApplicationForWithdrawalDO;
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawal.ApplicationForWithdrawalService;
+
+@Tag(name = "管理后台 - 提现申请记录")
+@RestController
+@RequestMapping("/distri/application-for-withdrawal")
+@Validated
+public class ApplicationForWithdrawalController {
+
+    @Resource
+    private ApplicationForWithdrawalService applicationForWithdrawalService;
+
+    @Resource
+    private MemberUserService memberUserService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建提现申请记录")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal:create')")
+    public CommonResult<Long> createApplicationForWithdrawal(@Valid @RequestBody ApplicationForWithdrawalSaveReqVO createReqVO) {
+        return success(applicationForWithdrawalService.createApplicationForWithdrawal(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新提现申请记录")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal:update')")
+    public CommonResult<Boolean> updateApplicationForWithdrawal(@Valid @RequestBody ApplicationForWithdrawalSaveReqVO updateReqVO) {
+        applicationForWithdrawalService.updateApplicationForWithdrawal(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除提现申请记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal:delete')")
+    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")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal:query')")
+    public CommonResult<ApplicationForWithdrawalRespVO> getApplicationForWithdrawal(@RequestParam("id") Long id) {
+        ApplicationForWithdrawalDO applicationForWithdrawal = applicationForWithdrawalService.getApplicationForWithdrawal(id);
+        return success(BeanUtils.toBean(applicationForWithdrawal, ApplicationForWithdrawalRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得提现申请记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal:query')")
+    public CommonResult<PageResult<ApplicationForWithdrawalRespVO>> getApplicationForWithdrawalPage(@Valid ApplicationForWithdrawalPageReqVO pageReqVO) {
+        PageResult<ApplicationForWithdrawalDO> pageResult = applicationForWithdrawalService.getApplicationForWithdrawalPage(pageReqVO);
+        PageResult<ApplicationForWithdrawalRespVO> bean = BeanUtils.toBean(pageResult, ApplicationForWithdrawalRespVO.class);
+
+        for (ApplicationForWithdrawalRespVO applicationForWithdrawalRespVO : bean.getList()) {
+            MemberUserDO user = memberUserService.getUser(applicationForWithdrawalRespVO.getUserId());
+
+            if(applicationForWithdrawalRespVO.getWithdrawalType().equals(WithdrawalChannelTypeEnum.ALIPAY.getType())){
+                applicationForWithdrawalRespVO.setAccountName(user.getAlipayName());
+            }else if(applicationForWithdrawalRespVO.getWithdrawalType().equals(WithdrawalChannelTypeEnum.BANK.getType())){
+                applicationForWithdrawalRespVO.setAccountName(user.getBankName());
+            }
+        }
+
+        return success(bean);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出提现申请记录 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal:export')")
+    @OperateLog(type = EXPORT)
+    public void exportApplicationForWithdrawalExcel(@Valid ApplicationForWithdrawalPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ApplicationForWithdrawalDO> list = applicationForWithdrawalService.getApplicationForWithdrawalPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "提现申请记录.xls", "数据", ApplicationForWithdrawalRespVO.class,
+                        BeanUtils.toBean(list, ApplicationForWithdrawalRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,39 @@
+package cn.newfeifan.mall.module.distri.controller.admin.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 = "管理后台 - 提现申请记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ApplicationForWithdrawalPageReqVO 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;
+
+}

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

@@ -0,0 +1,48 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal.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 ApplicationForWithdrawalRespVO {
+
+    @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;
+
+    @Schema(description = "提现账号名称")
+    private String accountName;
+
+}

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

@@ -0,0 +1,37 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 提现申请记录新增/修改 Request VO")
+@Data
+public class ApplicationForWithdrawalSaveReqVO {
+
+    @Schema(description = "申请id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20678")
+    private Long id;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25631")
+    @NotNull(message = "用户ID不能为空")
+    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")
+    @NotEmpty(message = "支付宝账号不能为空")
+    private String withdrawalAccount;
+
+    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
+    private Boolean status;
+
+    @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19322")
+    @NotNull(message = "提现渠道记录id不能为空")
+    private Long applicationForWithdrawalChannelId;
+
+}

+ 99 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelController.java

@@ -0,0 +1,99 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel;
+
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawal.ApplicationForWithdrawalService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+import cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelService;
+
+@Tag(name = "管理后台 - 提现渠道记录")
+@RestController
+@RequestMapping("/distri/application-for-withdrawal-channel")
+@Validated
+public class ApplicationForWithdrawalChannelController {
+
+    @Resource
+    private ApplicationForWithdrawalChannelService applicationForWithdrawalChannelService;
+
+    @Resource
+    private ApplicationForWithdrawalService applicationForWithdrawalService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建提现渠道记录")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal-channel:create')")
+    public CommonResult<Long> createApplicationForWithdrawalChannel(@Valid @RequestBody ApplicationForWithdrawalChannelSaveReqVO createReqVO) {
+        return success(applicationForWithdrawalChannelService.createApplicationForWithdrawalChannel(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新提现渠道记录")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal-channel:update')")
+    public CommonResult<Boolean> updateApplicationForWithdrawalChannel(@Valid @RequestBody ApplicationForWithdrawalChannelSaveReqVO updateReqVO) {
+        applicationForWithdrawalChannelService.updateApplicationForWithdrawalChannel(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除提现渠道记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal-channel:delete')")
+    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")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal-channel:query')")
+    public CommonResult<ApplicationForWithdrawalChannelRespVO> getApplicationForWithdrawalChannel(@RequestParam("id") Long id) {
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannel = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannel(id);
+        return success(BeanUtils.toBean(applicationForWithdrawalChannel, ApplicationForWithdrawalChannelRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得提现渠道记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal-channel:query')")
+    public CommonResult<PageResult<ApplicationForWithdrawalChannelRespVO>> getApplicationForWithdrawalChannelPage(@Valid ApplicationForWithdrawalChannelPageReqVO pageReqVO) {
+        PageResult<ApplicationForWithdrawalChannelDO> pageResult = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannelPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ApplicationForWithdrawalChannelRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出提现渠道记录 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:application-for-withdrawal-channel:export')")
+    @OperateLog(type = EXPORT)
+    public void exportApplicationForWithdrawalChannelExcel(@RequestParam("id") Long id,
+              HttpServletResponse response) throws IOException {
+        List<ApplicationForWithdrawalChannelExcelRespVO> list = applicationForWithdrawalService.getApplicationForWithdrawalChannelPage(id);
+
+        // 修改该记录的导出状态
+        applicationForWithdrawalChannelService.updateApplicationForWithdrawalChannel(id);
+
+        // 导出 Excel
+        ExcelUtils.write(response, "提现记录.xls", "数据", ApplicationForWithdrawalChannelExcelRespVO.class, list);
+    }
+
+}

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

@@ -0,0 +1,31 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 提现记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+@Builder
+public class ApplicationForWithdrawalChannelExcelRespVO {
+
+    @Schema(description = "收款方名称")
+    @ExcelProperty("收款方名称")
+    private String name;
+
+    @Schema(description = "收款方账号")
+    @ExcelProperty("收款方账号")
+    private String account;
+
+    @Schema(description = "金额")
+    @ExcelProperty("金额")
+    private String amount;
+
+    @Schema(description = "附言/用途")
+    @ExcelProperty("附言/用途")
+    private String mark;
+
+}

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

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.admin.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 = "管理后台 - 提现渠道记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ApplicationForWithdrawalChannelPageReqVO 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/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelRespVO.java

@@ -0,0 +1,49 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.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 ApplicationForWithdrawalChannelRespVO {
+
+    @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/admin/applicationforwithdrawalchannel/vo/ApplicationForWithdrawalChannelSaveReqVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 提现渠道记录新增/修改 Request VO")
+@Data
+public class ApplicationForWithdrawalChannelSaveReqVO {
+
+    @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;
+
+}

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

@@ -0,0 +1,94 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptdailywithdrawal;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.ptdailywithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
+import cn.newfeifan.mall.module.distri.service.ptdailywithdrawal.PtDailyWithdrawalService;
+
+@Tag(name = "管理后台 - 平台每日提现记录")
+@RestController
+@RequestMapping("/distri/pt-daily-withdrawal")
+@Validated
+public class PtDailyWithdrawalController {
+
+    @Resource
+    private PtDailyWithdrawalService ptDailyWithdrawalService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建平台每日提现记录")
+    @PreAuthorize("@ss.hasPermission('distri:pt-daily-withdrawal:create')")
+    public CommonResult<Long> createPtDailyWithdrawal(@Valid @RequestBody PtDailyWithdrawalSaveReqVO createReqVO) {
+        return success(ptDailyWithdrawalService.createPtDailyWithdrawal(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新平台每日提现记录")
+    @PreAuthorize("@ss.hasPermission('distri:pt-daily-withdrawal:update')")
+    public CommonResult<Boolean> updatePtDailyWithdrawal(@Valid @RequestBody PtDailyWithdrawalSaveReqVO updateReqVO) {
+        ptDailyWithdrawalService.updatePtDailyWithdrawal(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除平台每日提现记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:pt-daily-withdrawal:delete')")
+    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")
+    @PreAuthorize("@ss.hasPermission('distri:pt-daily-withdrawal:query')")
+    public CommonResult<PtDailyWithdrawalRespVO> getPtDailyWithdrawal(@RequestParam("id") Long id) {
+        PtDailyWithdrawalDO ptDailyWithdrawal = ptDailyWithdrawalService.getPtDailyWithdrawal(id);
+        return success(BeanUtils.toBean(ptDailyWithdrawal, PtDailyWithdrawalRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得平台每日提现记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:pt-daily-withdrawal:query')")
+    public CommonResult<PageResult<PtDailyWithdrawalRespVO>> getPtDailyWithdrawalPage(@Valid PtDailyWithdrawalPageReqVO pageReqVO) {
+        PageResult<PtDailyWithdrawalDO> pageResult = ptDailyWithdrawalService.getPtDailyWithdrawalPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, PtDailyWithdrawalRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出平台每日提现记录 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:pt-daily-withdrawal:export')")
+    @OperateLog(type = EXPORT)
+    public void exportPtDailyWithdrawalExcel(@Valid PtDailyWithdrawalPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<PtDailyWithdrawalDO> list = ptDailyWithdrawalService.getPtDailyWithdrawalPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "平台每日提现记录.xls", "数据", PtDailyWithdrawalRespVO.class,
+                        BeanUtils.toBean(list, PtDailyWithdrawalRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,38 @@
+package cn.newfeifan.mall.module.distri.controller.admin.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 = "管理后台 - 平台每日提现记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PtDailyWithdrawalPageReqVO 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/admin/ptdailywithdrawal/vo/PtDailyWithdrawalRespVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptdailywithdrawal.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 PtDailyWithdrawalRespVO {
+
+    @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/admin/ptdailywithdrawal/vo/PtDailyWithdrawalSaveReqVO.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptdailywithdrawal.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 PtDailyWithdrawalSaveReqVO {
+
+    @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.admin.applicationforwithdrawal.vo.*;
+
+/**
+ * 提现申请记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ApplicationForWithdrawalMapper extends BaseMapperX<ApplicationForWithdrawalDO> {
+
+    default PageResult<ApplicationForWithdrawalDO> selectPage(ApplicationForWithdrawalPageReqVO 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.admin.applicationforwithdrawalchannel.vo.*;
+
+/**
+ * 提现渠道记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ApplicationForWithdrawalChannelMapper extends BaseMapperX<ApplicationForWithdrawalChannelDO> {
+
+    default PageResult<ApplicationForWithdrawalChannelDO> selectPage(ApplicationForWithdrawalChannelPageReqVO 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.admin.ptdailywithdrawal.vo.*;
+
+/**
+ * 平台每日提现记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface PtDailyWithdrawalMapper extends BaseMapperX<PtDailyWithdrawalDO> {
+
+    default PageResult<PtDailyWithdrawalDO> selectPage(PtDailyWithdrawalPageReqVO 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

@@ -39,7 +39,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                 SMALL_QUOTA_CRASH_SETTLE.getType(),
                 ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
                 ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
-                MANUAL_RETURN_INTEGRAL.getType()
+                MANUAL_RETURN_INTEGRAL.getType(),
+                WITHDRAWAL.getType()
         );
 
         if(reqVO.getUserId().equals(PT_ID)){
@@ -60,7 +61,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                     ORDER_CANCEL_BY_USER_REFUND_INTEGRAL.getType(),
                     ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL.getType(),
                     ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
-                    ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA.getType()
+                    ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
+                    WITHDRAWAL.getType()
             );
 //            reqVO.setUserId(null);
         }

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

@@ -0,0 +1,61 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawal;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo.ApplicationForWithdrawalChannelExcelRespVO;
+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 ApplicationForWithdrawalSaveReqVO createReqVO);
+
+    /**
+     * 更新提现申请记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateApplicationForWithdrawal(@Valid ApplicationForWithdrawalSaveReqVO updateReqVO);
+
+    /**
+     * 删除提现申请记录
+     *
+     * @param id 编号
+     */
+    void deleteApplicationForWithdrawal(Long id);
+
+    /**
+     * 获得提现申请记录
+     *
+     * @param id 编号
+     * @return 提现申请记录
+     */
+    ApplicationForWithdrawalDO getApplicationForWithdrawal(Long id);
+
+    /**
+     * 获得提现申请记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 提现申请记录分页
+     */
+    PageResult<ApplicationForWithdrawalDO> getApplicationForWithdrawalPage(ApplicationForWithdrawalPageReqVO pageReqVO);
+
+    /**
+     * 获得提现申请记录
+     * @param id 二级记录id
+     * @return 提现记录
+     */
+    List<ApplicationForWithdrawalChannelExcelRespVO> getApplicationForWithdrawalChannelPage(Long id);
+}

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

@@ -0,0 +1,110 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawal;
+
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo.ApplicationForWithdrawalChannelExcelRespVO;
+import cn.newfeifan.mall.module.distri.enums.WithdrawalChannelTypeEnum;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.user.MemberUserService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.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.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 提现申请记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ApplicationForWithdrawalServiceImpl implements ApplicationForWithdrawalService {
+
+    @Resource
+    private ApplicationForWithdrawalMapper applicationForWithdrawalMapper;
+
+    @Resource
+    private MemberUserService userService;
+
+    @Override
+    public Long createApplicationForWithdrawal(ApplicationForWithdrawalSaveReqVO createReqVO) {
+        // 插入
+        ApplicationForWithdrawalDO applicationForWithdrawal = BeanUtils.toBean(createReqVO, ApplicationForWithdrawalDO.class);
+        applicationForWithdrawalMapper.insert(applicationForWithdrawal);
+        // 返回
+        return applicationForWithdrawal.getId();
+    }
+
+    @Override
+    public void updateApplicationForWithdrawal(ApplicationForWithdrawalSaveReqVO 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(ApplicationForWithdrawalPageReqVO pageReqVO) {
+        return applicationForWithdrawalMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public List<ApplicationForWithdrawalChannelExcelRespVO> getApplicationForWithdrawalChannelPage(Long id) {
+
+        List<ApplicationForWithdrawalDO> applicationForWithdrawalDOS = applicationForWithdrawalMapper.selectList(ApplicationForWithdrawalDO::getApplicationForWithdrawalChannelId, id, ApplicationForWithdrawalDO::getStatus, 0);
+
+        List<ApplicationForWithdrawalChannelExcelRespVO> list = new ArrayList<>();
+
+        for (ApplicationForWithdrawalDO withdrawalDO : applicationForWithdrawalDOS) {
+            MemberUserDO user = userService.getUser(withdrawalDO.getUserId());
+
+            ApplicationForWithdrawalChannelExcelRespVO build = ApplicationForWithdrawalChannelExcelRespVO.builder()
+                    .amount(withdrawalDO.getAmount().toString())
+                    .account(withdrawalDO.getWithdrawalAccount())
+                    .mark("提现日期: " + withdrawalDO.getCreateTime().toString())
+                    .build();
+
+            if(withdrawalDO.getWithdrawalType().equals(WithdrawalChannelTypeEnum.ALIPAY.getType())){
+                build.setName(user.getAlipayName());
+            }else if(withdrawalDO.getWithdrawalType().equals(WithdrawalChannelTypeEnum.BANK.getType())){
+                build.setName(user.getBankName());
+            }
+
+            list.add(build);
+        }
+
+        return list;
+    }
+
+}

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

@@ -0,0 +1,59 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.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 ApplicationForWithdrawalChannelSaveReqVO createReqVO);
+
+    /**
+     * 更新提现渠道记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateApplicationForWithdrawalChannel(@Valid ApplicationForWithdrawalChannelSaveReqVO updateReqVO);
+
+    /**
+     * 删除提现渠道记录
+     *
+     * @param id 编号
+     */
+    void deleteApplicationForWithdrawalChannel(Long id);
+
+    /**
+     * 获得提现渠道记录
+     *
+     * @param id 编号
+     * @return 提现渠道记录
+     */
+    ApplicationForWithdrawalChannelDO getApplicationForWithdrawalChannel(Long id);
+
+    /**
+     * 获得提现渠道记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 提现渠道记录分页
+     */
+    PageResult<ApplicationForWithdrawalChannelDO> getApplicationForWithdrawalChannelPage(ApplicationForWithdrawalChannelPageReqVO pageReqVO);
+
+    /**
+     * 更新提现渠道记录
+     *
+     * @param id 编号
+     */
+    void updateApplicationForWithdrawalChannel(Long id);
+}

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

@@ -0,0 +1,79 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.distri.controller.admin.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(ApplicationForWithdrawalChannelSaveReqVO createReqVO) {
+        // 插入
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannel = BeanUtils.toBean(createReqVO, ApplicationForWithdrawalChannelDO.class);
+        applicationForWithdrawalChannelMapper.insert(applicationForWithdrawalChannel);
+        // 返回
+        return applicationForWithdrawalChannel.getId();
+    }
+
+    @Override
+    public void updateApplicationForWithdrawalChannel(ApplicationForWithdrawalChannelSaveReqVO 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(ApplicationForWithdrawalChannelPageReqVO pageReqVO) {
+        return applicationForWithdrawalChannelMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public void updateApplicationForWithdrawalChannel(Long id) {
+        ApplicationForWithdrawalChannelDO channel = applicationForWithdrawalChannelMapper.selectById(id);
+
+        channel.setExcelStatus(true);
+
+        applicationForWithdrawalChannelMapper.updateById(channel);
+    }
+
+}

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

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.distri.service.ptdailywithdrawal;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.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 PtDailyWithdrawalSaveReqVO createReqVO);
+
+    /**
+     * 更新平台每日提现记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePtDailyWithdrawal(@Valid PtDailyWithdrawalSaveReqVO updateReqVO);
+
+    /**
+     * 删除平台每日提现记录
+     *
+     * @param id 编号
+     */
+    void deletePtDailyWithdrawal(Long id);
+
+    /**
+     * 获得平台每日提现记录
+     *
+     * @param id 编号
+     * @return 平台每日提现记录
+     */
+    PtDailyWithdrawalDO getPtDailyWithdrawal(Long id);
+
+    /**
+     * 获得平台每日提现记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台每日提现记录分页
+     */
+    PageResult<PtDailyWithdrawalDO> getPtDailyWithdrawalPage(PtDailyWithdrawalPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,71 @@
+package cn.newfeifan.mall.module.distri.service.ptdailywithdrawal;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import cn.newfeifan.mall.module.distri.controller.admin.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(PtDailyWithdrawalSaveReqVO createReqVO) {
+        // 插入
+        PtDailyWithdrawalDO ptDailyWithdrawal = BeanUtils.toBean(createReqVO, PtDailyWithdrawalDO.class);
+        ptDailyWithdrawalMapper.insert(ptDailyWithdrawal);
+        // 返回
+        return ptDailyWithdrawal.getId();
+    }
+
+    @Override
+    public void updatePtDailyWithdrawal(PtDailyWithdrawalSaveReqVO 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(PtDailyWithdrawalPageReqVO pageReqVO) {
+        return ptDailyWithdrawalMapper.selectPage(pageReqVO);
+    }
+
+}

+ 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>

+ 146 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawal/ApplicationForWithdrawalServiceImplTest.java

@@ -0,0 +1,146 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawal;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.ApplicationForWithdrawalDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.applicationforwithdrawal.ApplicationForWithdrawalMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import org.springframework.context.annotation.Import;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+import static cn.newfeifan.mall.framework.test.core.util.AssertUtils.*;
+import static cn.newfeifan.mall.framework.test.core.util.RandomUtils.*;
+import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.*;
+import static cn.newfeifan.mall.framework.common.util.object.ObjectUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link ApplicationForWithdrawalServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(ApplicationForWithdrawalServiceImpl.class)
+public class ApplicationForWithdrawalServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private ApplicationForWithdrawalServiceImpl applicationForWithdrawalService;
+
+    @Resource
+    private ApplicationForWithdrawalMapper applicationForWithdrawalMapper;
+
+    @Test
+    public void testCreateApplicationForWithdrawal_success() {
+        // 准备参数
+        ApplicationForWithdrawalSaveReqVO createReqVO = randomPojo(ApplicationForWithdrawalSaveReqVO.class).setId(null);
+
+        // 调用
+        Long applicationForWithdrawalId = applicationForWithdrawalService.createApplicationForWithdrawal(createReqVO);
+        // 断言
+        assertNotNull(applicationForWithdrawalId);
+        // 校验记录的属性是否正确
+        ApplicationForWithdrawalDO applicationForWithdrawal = applicationForWithdrawalMapper.selectById(applicationForWithdrawalId);
+        assertPojoEquals(createReqVO, applicationForWithdrawal, "id");
+    }
+
+    @Test
+    public void testUpdateApplicationForWithdrawal_success() {
+        // mock 数据
+        ApplicationForWithdrawalDO dbApplicationForWithdrawal = randomPojo(ApplicationForWithdrawalDO.class);
+        applicationForWithdrawalMapper.insert(dbApplicationForWithdrawal);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        ApplicationForWithdrawalSaveReqVO updateReqVO = randomPojo(ApplicationForWithdrawalSaveReqVO.class, o -> {
+            o.setId(dbApplicationForWithdrawal.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        applicationForWithdrawalService.updateApplicationForWithdrawal(updateReqVO);
+        // 校验是否更新正确
+        ApplicationForWithdrawalDO applicationForWithdrawal = applicationForWithdrawalMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, applicationForWithdrawal);
+    }
+
+    @Test
+    public void testUpdateApplicationForWithdrawal_notExists() {
+        // 准备参数
+        ApplicationForWithdrawalSaveReqVO updateReqVO = randomPojo(ApplicationForWithdrawalSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> applicationForWithdrawalService.updateApplicationForWithdrawal(updateReqVO), APPLICATION_FOR_WITHDRAWAL_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteApplicationForWithdrawal_success() {
+        // mock 数据
+        ApplicationForWithdrawalDO dbApplicationForWithdrawal = randomPojo(ApplicationForWithdrawalDO.class);
+        applicationForWithdrawalMapper.insert(dbApplicationForWithdrawal);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbApplicationForWithdrawal.getId();
+
+        // 调用
+        applicationForWithdrawalService.deleteApplicationForWithdrawal(id);
+       // 校验数据不存在了
+       assertNull(applicationForWithdrawalMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteApplicationForWithdrawal_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> applicationForWithdrawalService.deleteApplicationForWithdrawal(id), APPLICATION_FOR_WITHDRAWAL_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetApplicationForWithdrawalPage() {
+       // mock 数据
+       ApplicationForWithdrawalDO dbApplicationForWithdrawal = randomPojo(ApplicationForWithdrawalDO.class, o -> { // 等会查询到
+           o.setUserId(null);
+           o.setWithdrawalType(null);
+           o.setAmount(null);
+           o.setWithdrawalAccount(null);
+           o.setStatus(null);
+           o.setApplicationForWithdrawalChannelId(null);
+           o.setCreateTime(null);
+       });
+       applicationForWithdrawalMapper.insert(dbApplicationForWithdrawal);
+       // 测试 userId 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setUserId(null)));
+       // 测试 withdrawalType 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setWithdrawalType(null)));
+       // 测试 amount 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setAmount(null)));
+       // 测试 withdrawalAccount 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setWithdrawalAccount(null)));
+       // 测试 status 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setStatus(null)));
+       // 测试 applicationForWithdrawalChannelId 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setApplicationForWithdrawalChannelId(null)));
+       // 测试 createTime 不匹配
+       applicationForWithdrawalMapper.insert(cloneIgnoreId(dbApplicationForWithdrawal, o -> o.setCreateTime(null)));
+       // 准备参数
+       ApplicationForWithdrawalPageReqVO reqVO = new ApplicationForWithdrawalPageReqVO();
+       reqVO.setUserId(null);
+       reqVO.setWithdrawalType(null);
+       reqVO.setAmount(null);
+       reqVO.setWithdrawalAccount(null);
+       reqVO.setStatus(null);
+       reqVO.setApplicationForWithdrawalChannelId(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<ApplicationForWithdrawalDO> pageResult = applicationForWithdrawalService.getApplicationForWithdrawalPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbApplicationForWithdrawal, pageResult.getList().get(0));
+    }
+
+}

+ 146 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImplTest.java

@@ -0,0 +1,146 @@
+package cn.newfeifan.mall.module.distri.service.applicationforwithdrawalchannel;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import org.springframework.context.annotation.Import;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+import static cn.newfeifan.mall.framework.test.core.util.AssertUtils.*;
+import static cn.newfeifan.mall.framework.test.core.util.RandomUtils.*;
+import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.*;
+import static cn.newfeifan.mall.framework.common.util.object.ObjectUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link ApplicationForWithdrawalChannelServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(ApplicationForWithdrawalChannelServiceImpl.class)
+public class ApplicationForWithdrawalChannelServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private ApplicationForWithdrawalChannelServiceImpl applicationForWithdrawalChannelService;
+
+    @Resource
+    private ApplicationForWithdrawalChannelMapper applicationForWithdrawalChannelMapper;
+
+    @Test
+    public void testCreateApplicationForWithdrawalChannel_success() {
+        // 准备参数
+        ApplicationForWithdrawalChannelSaveReqVO createReqVO = randomPojo(ApplicationForWithdrawalChannelSaveReqVO.class).setId(null);
+
+        // 调用
+        Long applicationForWithdrawalChannelId = applicationForWithdrawalChannelService.createApplicationForWithdrawalChannel(createReqVO);
+        // 断言
+        assertNotNull(applicationForWithdrawalChannelId);
+        // 校验记录的属性是否正确
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannel = applicationForWithdrawalChannelMapper.selectById(applicationForWithdrawalChannelId);
+        assertPojoEquals(createReqVO, applicationForWithdrawalChannel, "id");
+    }
+
+    @Test
+    public void testUpdateApplicationForWithdrawalChannel_success() {
+        // mock 数据
+        ApplicationForWithdrawalChannelDO dbApplicationForWithdrawalChannel = randomPojo(ApplicationForWithdrawalChannelDO.class);
+        applicationForWithdrawalChannelMapper.insert(dbApplicationForWithdrawalChannel);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        ApplicationForWithdrawalChannelSaveReqVO updateReqVO = randomPojo(ApplicationForWithdrawalChannelSaveReqVO.class, o -> {
+            o.setId(dbApplicationForWithdrawalChannel.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        applicationForWithdrawalChannelService.updateApplicationForWithdrawalChannel(updateReqVO);
+        // 校验是否更新正确
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannel = applicationForWithdrawalChannelMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, applicationForWithdrawalChannel);
+    }
+
+    @Test
+    public void testUpdateApplicationForWithdrawalChannel_notExists() {
+        // 准备参数
+        ApplicationForWithdrawalChannelSaveReqVO updateReqVO = randomPojo(ApplicationForWithdrawalChannelSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> applicationForWithdrawalChannelService.updateApplicationForWithdrawalChannel(updateReqVO), APPLICATION_FOR_WITHDRAWAL_CHANNEL_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteApplicationForWithdrawalChannel_success() {
+        // mock 数据
+        ApplicationForWithdrawalChannelDO dbApplicationForWithdrawalChannel = randomPojo(ApplicationForWithdrawalChannelDO.class);
+        applicationForWithdrawalChannelMapper.insert(dbApplicationForWithdrawalChannel);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbApplicationForWithdrawalChannel.getId();
+
+        // 调用
+        applicationForWithdrawalChannelService.deleteApplicationForWithdrawalChannel(id);
+       // 校验数据不存在了
+       assertNull(applicationForWithdrawalChannelMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteApplicationForWithdrawalChannel_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> applicationForWithdrawalChannelService.deleteApplicationForWithdrawalChannel(id), APPLICATION_FOR_WITHDRAWAL_CHANNEL_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetApplicationForWithdrawalChannelPage() {
+       // mock 数据
+       ApplicationForWithdrawalChannelDO dbApplicationForWithdrawalChannel = randomPojo(ApplicationForWithdrawalChannelDO.class, o -> { // 等会查询到
+           o.setWithdrawalType(null);
+           o.setWithdrawalName(null);
+           o.setAmount(null);
+           o.setCount(null);
+           o.setStatus(null);
+           o.setPtDailyWithdrawalId(null);
+           o.setCreateTime(null);
+       });
+       applicationForWithdrawalChannelMapper.insert(dbApplicationForWithdrawalChannel);
+       // 测试 withdrawalType 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setWithdrawalType(null)));
+       // 测试 withdrawalName 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setWithdrawalName(null)));
+       // 测试 amount 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setAmount(null)));
+       // 测试 count 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setCount(null)));
+       // 测试 status 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setStatus(null)));
+       // 测试 ptDailyWithdrawalId 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setPtDailyWithdrawalId(null)));
+       // 测试 createTime 不匹配
+       applicationForWithdrawalChannelMapper.insert(cloneIgnoreId(dbApplicationForWithdrawalChannel, o -> o.setCreateTime(null)));
+       // 准备参数
+       ApplicationForWithdrawalChannelPageReqVO reqVO = new ApplicationForWithdrawalChannelPageReqVO();
+       reqVO.setWithdrawalType(null);
+       reqVO.setWithdrawalName(null);
+       reqVO.setAmount(null);
+       reqVO.setCount(null);
+       reqVO.setStatus(null);
+       reqVO.setPtDailyWithdrawalId(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<ApplicationForWithdrawalChannelDO> pageResult = applicationForWithdrawalChannelService.getApplicationForWithdrawalChannelPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbApplicationForWithdrawalChannel, pageResult.getList().get(0));
+    }
+
+}

+ 142 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/ptdailywithdrawal/PtDailyWithdrawalServiceImplTest.java

@@ -0,0 +1,142 @@
+package cn.newfeifan.mall.module.distri.service.ptdailywithdrawal;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.ptdailywithdrawal.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptdailywithdrawal.PtDailyWithdrawalMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import org.springframework.context.annotation.Import;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+import static cn.newfeifan.mall.framework.test.core.util.AssertUtils.*;
+import static cn.newfeifan.mall.framework.test.core.util.RandomUtils.*;
+import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.*;
+import static cn.newfeifan.mall.framework.common.util.object.ObjectUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link PtDailyWithdrawalServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(PtDailyWithdrawalServiceImpl.class)
+public class PtDailyWithdrawalServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private PtDailyWithdrawalServiceImpl ptDailyWithdrawalService;
+
+    @Resource
+    private PtDailyWithdrawalMapper ptDailyWithdrawalMapper;
+
+    @Test
+    public void testCreatePtDailyWithdrawal_success() {
+        // 准备参数
+        PtDailyWithdrawalSaveReqVO createReqVO = randomPojo(PtDailyWithdrawalSaveReqVO.class).setId(null);
+
+        // 调用
+        Long ptDailyWithdrawalId = ptDailyWithdrawalService.createPtDailyWithdrawal(createReqVO);
+        // 断言
+        assertNotNull(ptDailyWithdrawalId);
+        // 校验记录的属性是否正确
+        PtDailyWithdrawalDO ptDailyWithdrawal = ptDailyWithdrawalMapper.selectById(ptDailyWithdrawalId);
+        assertPojoEquals(createReqVO, ptDailyWithdrawal, "id");
+    }
+
+    @Test
+    public void testUpdatePtDailyWithdrawal_success() {
+        // mock 数据
+        PtDailyWithdrawalDO dbPtDailyWithdrawal = randomPojo(PtDailyWithdrawalDO.class);
+        ptDailyWithdrawalMapper.insert(dbPtDailyWithdrawal);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        PtDailyWithdrawalSaveReqVO updateReqVO = randomPojo(PtDailyWithdrawalSaveReqVO.class, o -> {
+            o.setId(dbPtDailyWithdrawal.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        ptDailyWithdrawalService.updatePtDailyWithdrawal(updateReqVO);
+        // 校验是否更新正确
+        PtDailyWithdrawalDO ptDailyWithdrawal = ptDailyWithdrawalMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, ptDailyWithdrawal);
+    }
+
+    @Test
+    public void testUpdatePtDailyWithdrawal_notExists() {
+        // 准备参数
+        PtDailyWithdrawalSaveReqVO updateReqVO = randomPojo(PtDailyWithdrawalSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> ptDailyWithdrawalService.updatePtDailyWithdrawal(updateReqVO), PT_DAILY_WITHDRAWAL_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeletePtDailyWithdrawal_success() {
+        // mock 数据
+        PtDailyWithdrawalDO dbPtDailyWithdrawal = randomPojo(PtDailyWithdrawalDO.class);
+        ptDailyWithdrawalMapper.insert(dbPtDailyWithdrawal);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbPtDailyWithdrawal.getId();
+
+        // 调用
+        ptDailyWithdrawalService.deletePtDailyWithdrawal(id);
+       // 校验数据不存在了
+       assertNull(ptDailyWithdrawalMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeletePtDailyWithdrawal_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> ptDailyWithdrawalService.deletePtDailyWithdrawal(id), PT_DAILY_WITHDRAWAL_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetPtDailyWithdrawalPage() {
+       // mock 数据
+       PtDailyWithdrawalDO dbPtDailyWithdrawal = randomPojo(PtDailyWithdrawalDO.class, o -> { // 等会查询到
+           o.setAmount(null);
+           o.setCount(null);
+           o.setStatus(null);
+           o.setStartTime(null);
+           o.setEndTime(null);
+           o.setCreateTime(null);
+       });
+       ptDailyWithdrawalMapper.insert(dbPtDailyWithdrawal);
+       // 测试 amount 不匹配
+       ptDailyWithdrawalMapper.insert(cloneIgnoreId(dbPtDailyWithdrawal, o -> o.setAmount(null)));
+       // 测试 count 不匹配
+       ptDailyWithdrawalMapper.insert(cloneIgnoreId(dbPtDailyWithdrawal, o -> o.setCount(null)));
+       // 测试 status 不匹配
+       ptDailyWithdrawalMapper.insert(cloneIgnoreId(dbPtDailyWithdrawal, o -> o.setStatus(null)));
+       // 测试 startTime 不匹配
+       ptDailyWithdrawalMapper.insert(cloneIgnoreId(dbPtDailyWithdrawal, o -> o.setStartTime(null)));
+       // 测试 endTime 不匹配
+       ptDailyWithdrawalMapper.insert(cloneIgnoreId(dbPtDailyWithdrawal, o -> o.setEndTime(null)));
+       // 测试 createTime 不匹配
+       ptDailyWithdrawalMapper.insert(cloneIgnoreId(dbPtDailyWithdrawal, o -> o.setCreateTime(null)));
+       // 准备参数
+       PtDailyWithdrawalPageReqVO reqVO = new PtDailyWithdrawalPageReqVO();
+       reqVO.setAmount(null);
+       reqVO.setCount(null);
+       reqVO.setStatus(null);
+       reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+       reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<PtDailyWithdrawalDO> pageResult = ptDailyWithdrawalService.getPtDailyWithdrawalPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbPtDailyWithdrawal, pageResult.getList().get(0));
+    }
+
+}

+ 5 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java

@@ -385,6 +385,11 @@ public class TradeOrderController {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
 
         List<DailyBillOrderRespVO> list = TradeOrderConvert.INSTANCE.convertDailyBillOrder(tradeOrderQueryService.getOrderPage(pageReqVO).getList());
+
+        for (DailyBillOrderRespVO respVO : list) {
+            respVO.setUsername(memberUserApi.getUser(respVO.getUserId()).getUsername());
+        }
+
         // 导出 Excel
         ExcelUtils.write(response, "每日账单下的订单.xls", "数据", DailyBillOrderRespVO.class,
                 list);

+ 11 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/excelVO/DailyBillOrderRespVO.java

@@ -31,6 +31,17 @@ public class DailyBillOrderRespVO {
     @ExcelProperty("积分抵扣")
     private Double payIntegral;
 
+    @Schema(description = "用户id")
+    private Long userId;
+
+    @Schema(description = "用户名")
+    @ExcelProperty("用户名")
+    private String username;
+
+    @Schema(description = "购买数量")
+    @ExcelProperty("购买数量")
+    private Integer productCount;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("下单时间")
     private LocalDateTime createTime;

+ 5 - 1
feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/api/user/dto/MemberUserRespDTO.java

@@ -27,7 +27,6 @@ public class MemberUserRespDTO {
     private String nickname;
     /**
      * 帐号状态
-     *
      * 枚举 {@link CommonStatusEnum}
      */
     private Integer status;
@@ -56,4 +55,9 @@ public class MemberUserRespDTO {
      */
     private Integer point;
 
+    /**
+     * 用户名
+     */
+    private String username;
+
 }

+ 15 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserBaseVO.java

@@ -97,4 +97,19 @@ public class MemberUserBaseVO {
     @Schema(description = "累计消费金额(只算人民币,单位为分)")
     private Long cumulativeSpending;
 
+    @Schema(description = "支付宝账号", example = "6872")
+    private String alipayAccount;
+
+    @Schema(description = "支付宝名称", example = "李四")
+    private String alipayName;
+
+    @Schema(description = "开户行名称", example = "李四")
+    private String bankName;
+
+    @Schema(description = "开户名", example = "王五")
+    private String accountName;
+
+    @Schema(description = "银行账号", example = "31488")
+    private String bankAccount;
+
 }

+ 15 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserPageReqVO.java

@@ -84,4 +84,19 @@ public class MemberUserPageReqVO extends PageParam {
 
     @Schema(description = "用户名")
     private String username;
+
+    @Schema(description = "支付宝账号", example = "6872")
+    private String alipayAccount;
+
+    @Schema(description = "支付宝名称", example = "李四")
+    private String alipayName;
+
+    @Schema(description = "开户行名称", example = "李四")
+    private String bankName;
+
+    @Schema(description = "开户名", example = "王五")
+    private String accountName;
+
+    @Schema(description = "银行账号", example = "31488")
+    private String bankAccount;
 }

+ 15 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserRespVO.java

@@ -100,4 +100,19 @@ public class MemberUserRespVO extends MemberUserBaseVO {
 
     @Schema(description = "峰值累计")
     private Long highQuotaTotal;
+
+    @Schema(description = "支付宝账号", example = "6872")
+    private String alipayAccount;
+
+    @Schema(description = "支付宝名称", example = "李四")
+    private String alipayName;
+
+    @Schema(description = "开户行名称", example = "李四")
+    private String bankName;
+
+    @Schema(description = "开户名", example = "王五")
+    private String accountName;
+
+    @Schema(description = "银行账号", example = "31488")
+    private String bankAccount;
 }

+ 21 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/dataobject/user/MemberUserDO.java

@@ -192,4 +192,25 @@ public class MemberUserDO extends TenantBaseDO {
      */
     private String username;
 
+    /**
+     * 支付宝账号
+     */
+    private String alipayAccount;
+    /**
+     * 支付宝名称
+     */
+    private String alipayName;
+    /**
+     * 开户行名称
+     */
+    private String bankName;
+    /**
+     * 开户名
+     */
+    private String accountName;
+    /**
+     * 银行账号
+     */
+    private String bankAccount;
+
 }

+ 55 - 0
sql/mysql/建空库SQL/18_20240717.sql

@@ -0,0 +1,55 @@
+ALTER TABLE member_user
+    ADD COLUMN `alipay_account` VARCHAR(255) default null COMMENT '支付宝账号',
+		ADD COLUMN `alipay_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci default null COMMENT '支付宝名称',
+		ADD COLUMN `bank_name` VARCHAR(255) default null COMMENT '开户行名称',
+		ADD COLUMN `account_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci default null COMMENT '开户名',
+		ADD COLUMN `bank_account` VARCHAR(255) default null COMMENT '银行账号';
+
+
+CREATE TABLE `distri_application_for_withdrawal` (
+                                                     `id` bigint NOT NULL AUTO_INCREMENT COMMENT '申请id',
+                                                     `user_id` bigint NOT NULL COMMENT '用户ID',
+                                                     `withdrawal_type` tinyint NOT NULL COMMENT '提现渠道类型',
+                                                     `amount` bigint NOT NULL COMMENT '提现金额,单位:元',
+                                                     `withdrawal_account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '提现账号',
+                                                     `status` bit(1) DEFAULT b'0' COMMENT '提现状态,已完成是1,未完成为0',
+                                                     `application_for_withdrawal_channel_id` bigint NOT NULL COMMENT '提现渠道记录id',
+                                                     `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建者',
+                                                     `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                                     `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新者',
+                                                     `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+                                                     `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+                                                     PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='提现申请记录表';
+
+CREATE TABLE `distri_application_for_withdrawal_channel` (
+                                                             `id` bigint NOT NULL AUTO_INCREMENT COMMENT '提现渠道id',
+                                                             `withdrawal_type` tinyint NOT NULL COMMENT '提现渠道类型',
+                                                             `withdrawal_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '提现渠道名称',
+                                                             `amount` bigint NOT NULL DEFAULT '0' COMMENT '提现金额,单位:元',
+                                                             `count` int NOT NULL DEFAULT '0' COMMENT '提现笔数',
+                                                             `status` bit(1) DEFAULT b'0' COMMENT '提现状态,已完成是1,未完成为0',
+                                                             `pt_daily_withdrawal_id` bigint NOT NULL COMMENT '提现渠道记录id',
+                                                             `excel_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '导出状态,已导出是1,未导出为0',
+                                                             `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建者',
+                                                             `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                                             `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新者',
+                                                             `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+                                                             `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+                                                             PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='提现渠道记录表';
+
+CREATE TABLE `distri_pt_daily_withdrawal` (
+                                              `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录id',
+                                              `amount` bigint NOT NULL DEFAULT '0' COMMENT '提现金额,单位:元',
+                                              `count` int NOT NULL DEFAULT '0' COMMENT '提现笔数',
+                                              `status` tinyint DEFAULT '0' COMMENT '提现状态,0:待转账 1:全部完成 2:部分完成',
+                                              `start_time` datetime NOT NULL COMMENT '提现开始时间',
+                                              `end_time` datetime NOT NULL COMMENT '提现截止时间',
+                                              `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建者',
+                                              `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                              `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新者',
+                                              `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+                                              `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+                                              PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='平台每日提现记录表';