Browse Source

修改导入提现

Yangzw 7 months ago
parent
commit
d1c4242d05
12 changed files with 125 additions and 44 deletions
  1. 3 2
      feifan-framework/feifan-spring-boot-starter-biz-pay/src/main/java/cn/newfeifan/mall/framework/pay/core/enums/channel/PayChannelEnum.java
  2. 21 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/WithdrawalEnum.java
  3. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalPageReqVO.java
  4. 3 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalRespVO.java
  5. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawal/vo/ApplicationForWithdrawalSaveReqVO.java
  6. 0 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelController.java
  7. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/applicationforwithdrawal/ApplicationForWithdrawalDO.java
  8. 67 22
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/applicationforwithdrawalchannel/ApplicationForWithdrawalChannelServiceImpl.java
  9. 8 0
      feifan-module-system/feifan-module-system-api/src/main/java/cn/newfeifan/mall/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
  10. 0 5
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/dal/dataobject/sms/SmsTemplateDO.java
  11. 16 3
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/sms/SmsCodeServiceImpl.java
  12. 1 1
      sql/mysql/建空库SQL/18_20240717.sql

+ 3 - 2
feifan-framework/feifan-spring-boot-starter-biz-pay/src/main/java/cn/newfeifan/mall/framework/pay/core/enums/channel/PayChannelEnum.java

@@ -30,11 +30,12 @@ public enum PayChannelEnum {
     ALIPAY_BAR("alipay_bar", "支付宝条码支付", AlipayPayClientConfig.class),
     MOCK("mock", "模拟支付", NonePayClientConfig.class),
 
-    WALLET("wallet", "钱包支付", NonePayClientConfig.class);
+    WALLET("wallet", "钱包支付", NonePayClientConfig.class),
+
+    JSAPI("JSAPI","富友微信公众号支付", WxPayClientConfig.class);
 
     /**
      * 编码
-     *
      * 参考 <a href="https://www.pingxx.com/api/支付渠道属性值.html">支付渠道属性值</a>
      */
     private final String code;

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

@@ -0,0 +1,21 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 提现状态枚举
+ */
+
+@Getter
+@AllArgsConstructor
+public enum WithdrawalEnum {
+
+    WITHDRAWAL_ING(0,"提现中"),
+    WITHDRAWAL_SUCCESS(1,"提现成功"),
+    WITHDRAWAL_FAIL(2,"提现失败");
+
+    private final Integer status;
+
+    private final String mark;
+}

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

@@ -26,8 +26,8 @@ public class ApplicationForWithdrawalPageReqVO extends PageParam {
     @Schema(description = "支付宝账号", example = "30303")
     private String withdrawalAccount;
 
-    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
-    private Boolean status;
+    @Schema(description = "提现状态,成功是1, 失败是2, 提现中为0", example = "1")
+    private Integer status;
 
     @Schema(description = "提现渠道记录id", example = "19322")
     private Long applicationForWithdrawalChannelId;

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

@@ -30,9 +30,9 @@ public class ApplicationForWithdrawalRespVO {
     @ExcelProperty("支付宝账号")
     private String withdrawalAccount;
 
-    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
-    @ExcelProperty("提现状态,已完成是1,未完成为0")
-    private Boolean status;
+    @Schema(description = "提现状态,成功是1, 失败是2, 提现中为0", example = "1")
+    @ExcelProperty("提现状态,成功是1, 失败是2, 提现中为0")
+    private Integer status;
 
     @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19322")
     @ExcelProperty("提现渠道记录id")

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

@@ -27,8 +27,8 @@ public class ApplicationForWithdrawalSaveReqVO {
     @NotEmpty(message = "支付宝账号不能为空")
     private String withdrawalAccount;
 
-    @Schema(description = "提现状态,已完成是1,未完成为0", example = "1")
-    private Boolean status;
+    @Schema(description = "提现状态,成功是1, 失败是2, 提现中为0", example = "1")
+    private Integer status;
 
     @Schema(description = "提现渠道记录id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19322")
     @NotNull(message = "提现渠道记录id不能为空")

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

@@ -104,8 +104,6 @@ public class ApplicationForWithdrawalChannelController {
 
         List<ApplicationForWithdrawalChannelImportExcelVO> list = ExcelUtils.read(file, ApplicationForWithdrawalChannelImportExcelVO.class);
 
-
-
         return success(applicationForWithdrawalChannelService.importExcel(list,id));
     }
 

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

@@ -41,9 +41,9 @@ public class ApplicationForWithdrawalDO extends BaseDO {
      */
     private String withdrawalAccount;
     /**
-     * 提现状态,已完成是1,未完成为0
+     * 提现状态,成功是1, 失败是2, 提现中为0
      */
-    private Boolean status;
+    private Integer status;
     /**
      * 提现渠道记录id
      */

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

@@ -9,15 +9,22 @@ import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawal.A
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptdailywithdrawal.PtDailyWithdrawalDO;
 import cn.newfeifan.mall.module.distri.enums.PtSettlemntStatusEnum;
+import cn.newfeifan.mall.module.distri.enums.WithdrawalEnum;
 import cn.newfeifan.mall.module.distri.enums.WithdrawalResultEnum;
 import cn.newfeifan.mall.module.distri.service.applicationforwithdrawal.ApplicationForWithdrawalService;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 import cn.newfeifan.mall.module.distri.service.ptdailywithdrawal.PtDailyWithdrawalService;
 import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.user.MemberUserService;
+import cn.newfeifan.mall.module.system.api.sms.SmsCodeApi;
+import cn.newfeifan.mall.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
+import cn.newfeifan.mall.module.system.enums.sms.SmsSceneEnum;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import cn.newfeifan.mall.module.distri.controller.admin.applicationforwithdrawalchannel.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelDO;
@@ -26,10 +33,13 @@ import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.applicationforwithdrawalchannel.ApplicationForWithdrawalChannelMapper;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.framework.common.util.servlet.ServletUtils.getClientIP;
 import static cn.newfeifan.mall.module.distri.constant.DistriConstants.MILLION;
 import static cn.newfeifan.mall.module.distri.enums.CaclEnum.WITHDRAWAL_ERROR;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
@@ -58,6 +68,12 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
     @Resource
     private PtProfitLogService ptProfitLogService;
 
+    @Resource
+    private SmsCodeApi smsCodeApi;
+
+    @Resource
+    private MemberUserService memberUserService;
+
     @Override
     public Long createApplicationForWithdrawalChannel(ApplicationForWithdrawalChannelSaveReqVO createReqVO) {
         // 插入
@@ -110,7 +126,11 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public List<ApplicationForWithdrawalChannelImportExcelVO> importExcel(List<ApplicationForWithdrawalChannelImportExcelVO> list, Long id) {
+        // 格式化时间
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
         // 用来记录错误的记录
         List<ApplicationForWithdrawalChannelImportExcelVO> errorList = new ArrayList<>();
 
@@ -118,32 +138,52 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
 
         // 异常判断
         if (withdrawalList.isEmpty()) {
-            ErrorCode ERROR = new ErrorCode(1_002_030_034, "选中行的记录为空");
+            ErrorCode ERROR = new ErrorCode(1_002_030_034, "选中行的记录为空");
             throw exception(ERROR);
         }
         if (list.isEmpty()) {
-            ErrorCode ERROR = new ErrorCode(1_002_030_035, "上传的Excel文件中没有数据");
+            ErrorCode ERROR = new ErrorCode(1_002_030_035, "上传的Excel文件中没有数据!");
+            throw exception(ERROR);
+        }
+        if (list.get(0).getMoney() == null || list.get(0).getAccountName() == null || list.get(0).getAccountNumber() == null) {
+            ErrorCode ERROR = new ErrorCode(1_002_030_036, "Excel文件中的信息内容不正确!");
             throw exception(ERROR);
         }
 
+        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannelDO = applicationForWithdrawalChannelMapper.selectById(id);
+        PtDailyWithdrawalDO ptDailyWithdrawal = ptDailyWithdrawalService.getPtDailyWithdrawal(applicationForWithdrawalChannelDO.getPtDailyWithdrawalId());
+
         for (ApplicationForWithdrawalChannelImportExcelVO importVO : list) {
 
+            String withdrawalTime = importVO.getPostscript().substring(importVO.getPostscript().indexOf("提现日期: ") + "提现日期: ".length()).trim();
+            LocalDateTime withdrawalDateTime = LocalDateTime.parse(withdrawalTime, formatter);
+
+            if (ptDailyWithdrawal.getStartTime().isAfter(withdrawalDateTime) || ptDailyWithdrawal.getEndTime().isBefore(withdrawalDateTime)) {
+                ErrorCode ERROR = new ErrorCode(1_002_030_036, "Excel文件中的日期与选择行的日期不匹配!");
+                throw exception(ERROR);
+            }
+
+            Double money = Double.parseDouble(importVO.getMoney());
+
             for (ApplicationForWithdrawalDO withdrawalDO : withdrawalList) {
+                Double amount = Double.parseDouble(withdrawalDO.getAmount().toString());
 
                 // 当前提提现记录的金额和账号与Excel中的金额和账号一致时
-                if (withdrawalDO.getAmount().toString().equals(importVO.getMoney()) &&
-                        withdrawalDO.getWithdrawalAccount().equals(importVO.getAccountNumber())) {
-
-                    if(importVO.getPayResult().equals(WithdrawalResultEnum.SUCCESS.getResult())){
-                        withdrawalDO.setStatus(true);
-                    }else{
-                        withdrawalDO.setStatus(false);
+                if (money.equals(amount) &&
+                        withdrawalDO.getWithdrawalAccount().equals(importVO.getAccountNumber()) &&
+                        withdrawalTime.equals(formatter.format(withdrawalDO.getCreateTime()))
+                ) {
+
+                    if (importVO.getPayResult().equals(WithdrawalResultEnum.SUCCESS.getResult())) {
+                        withdrawalDO.setStatus(WithdrawalEnum.WITHDRAWAL_SUCCESS.getStatus());
+                    } else {
+                        withdrawalDO.setStatus(WithdrawalEnum.WITHDRAWAL_FAIL.getStatus());
                         // 记录提现失败的记录
                         errorList.add(importVO);
 
                         // 退回用户提现积分数量
                         IntegralDO integralDO = integralService.selectByUser(withdrawalDO.getUserId());
-                        Long integral = Long.parseLong(importVO.getMoney()) * MILLION;
+                        Long integral = money.longValue() * MILLION;
 
                         integralDO.setCurrentQuota(integralDO.getCurrentQuota() + integral);
                         integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
@@ -158,7 +198,15 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
                                 .build();
                         ptProfitLogService.createPtProfitLog(ptProfitLogSaveReqVO);
 
+                        MemberUserDO user = memberUserService.getUser(withdrawalDO.getUserId());
                         // 发送短信通知用户提现失败
+                        SmsCodeSendReqDTO smsCodeSendReqDTO = SmsCodeSendReqDTO.builder()
+                                .mobile(user.getMobile())
+                                .scene(SmsSceneEnum.MEMBER_WITHDRAWAL_ERROR.getScene())
+                                .createIp(getClientIP())
+                                .sendTime(withdrawalDO.getCreateTime())
+                                .build();
+                        smsCodeApi.sendSmsCode(smsCodeSendReqDTO);
                     }
 
                     withdrawalService.updateApplicationForWithdrawal(BeanUtils.toBean(withdrawalDO, ApplicationForWithdrawalSaveReqVO.class));
@@ -167,14 +215,12 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
             }
         }
 
-        ApplicationForWithdrawalChannelDO applicationForWithdrawalChannelDO = applicationForWithdrawalChannelMapper.selectById(id);
-
         // 根据导入的记录判断提现结果
-        if(errorList.isEmpty()){
+        if (errorList.isEmpty()) {
             applicationForWithdrawalChannelDO.setStatus(PtSettlemntStatusEnum.SETTLEMENT.getStatus());
-        }else if (errorList.size() < withdrawalList.size()){
+        } else if (errorList.size() < withdrawalList.size()) {
             applicationForWithdrawalChannelDO.setStatus(PtSettlemntStatusEnum.SETTLEMENT_ERROR.getStatus());
-        }else if(errorList.size() == withdrawalList.size()){
+        } else if (errorList.size() == withdrawalList.size()) {
             applicationForWithdrawalChannelDO.setStatus(PtSettlemntStatusEnum.SETTLEMENT_SUCCESS.getStatus());
         }
 
@@ -182,17 +228,16 @@ public class ApplicationForWithdrawalChannelServiceImpl implements ApplicationFo
         applicationForWithdrawalChannelMapper.updateById(applicationForWithdrawalChannelDO);
 
         Long allCount = applicationForWithdrawalChannelMapper.selectCount(ApplicationForWithdrawalChannelDO::getPtDailyWithdrawalId, applicationForWithdrawalChannelDO.getPtDailyWithdrawalId());
-        Long successCount = applicationForWithdrawalChannelMapper.selectCount(PtSettlemntStatusEnum.SETTLEMENT.getStatus(),applicationForWithdrawalChannelDO.getPtDailyWithdrawalId());
-
-        PtDailyWithdrawalDO ptDailyWithdrawal = ptDailyWithdrawalService.getPtDailyWithdrawal(applicationForWithdrawalChannelDO.getPtDailyWithdrawalId());
+        Long liteSuccessCount = applicationForWithdrawalChannelMapper.selectCount(PtSettlemntStatusEnum.SETTLEMENT_ERROR.getStatus(), applicationForWithdrawalChannelDO.getPtDailyWithdrawalId());
+        Long successCount = applicationForWithdrawalChannelMapper.selectCount(PtSettlemntStatusEnum.SETTLEMENT.getStatus(), applicationForWithdrawalChannelDO.getPtDailyWithdrawalId());
 
         // 更新一级记录的提现状态
-        if(allCount.equals(successCount)){
+        if (allCount.equals(successCount)) {
             ptDailyWithdrawal.setStatus(PtSettlemntStatusEnum.SETTLEMENT.getStatus());
-        }else if(successCount == 0) {
-            ptDailyWithdrawal.setStatus(PtSettlemntStatusEnum.SETTLEMENT_SUCCESS.getStatus());
-        }else {
+        } else if (liteSuccessCount > 0) {
             ptDailyWithdrawal.setStatus(PtSettlemntStatusEnum.SETTLEMENT_ERROR.getStatus());
+        } else {
+            ptDailyWithdrawal.setStatus(PtSettlemntStatusEnum.SETTLEMENT_SUCCESS.getStatus());
         }
 
         // 更新状态

+ 8 - 0
feifan-module-system/feifan-module-system-api/src/main/java/cn/newfeifan/mall/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java

@@ -3,10 +3,12 @@ package cn.newfeifan.mall.module.system.api.sms.dto.code;
 import cn.newfeifan.mall.framework.common.validation.InEnum;
 import cn.newfeifan.mall.framework.common.validation.Mobile;
 import cn.newfeifan.mall.module.system.enums.sms.SmsSceneEnum;
+import lombok.Builder;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
 
 /**
  * 短信验证码的发送 Request DTO
@@ -14,6 +16,7 @@ import javax.validation.constraints.NotNull;
  * @author 非繁源码
  */
 @Data
+@Builder
 public class SmsCodeSendReqDTO {
 
     /**
@@ -34,4 +37,9 @@ public class SmsCodeSendReqDTO {
     @NotEmpty(message = "发送 IP 不能为空")
     private String createIp;
 
+    /**
+     * 发送时间
+     */
+    private LocalDateTime sendTime;
+
 }

+ 0 - 5
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/dal/dataobject/sms/SmsTemplateDO.java

@@ -35,13 +35,11 @@ public class SmsTemplateDO extends BaseDO {
 
     /**
      * 短信类型
-     *
      * 枚举 {@link SmsTemplateTypeEnum}
      */
     private Integer type;
     /**
      * 启用状态
-     *
      * 枚举 {@link CommonStatusEnum}
      */
     private Integer status;
@@ -55,7 +53,6 @@ public class SmsTemplateDO extends BaseDO {
     private String name;
     /**
      * 模板内容
-     *
      * 内容的参数,使用 {} 包括,例如说 {name}
      */
     private String content;
@@ -77,13 +74,11 @@ public class SmsTemplateDO extends BaseDO {
 
     /**
      * 短信渠道编号
-     *
      * 关联 {@link SmsChannelDO#getId()}
      */
     private Long channelId;
     /**
      * 短信渠道编码
-     *
      * 冗余 {@link SmsChannelDO#getCode()}
      */
     private String channelCode;

+ 16 - 3
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/sms/SmsCodeServiceImpl.java

@@ -15,6 +15,8 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
 
 import static cn.hutool.core.util.RandomUtil.randomInt;
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -43,11 +45,22 @@ public class SmsCodeServiceImpl implements SmsCodeService {
     public void sendSmsCode(SmsCodeSendReqDTO reqDTO) {
         SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene());
         Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", reqDTO.getScene());
-        // 创建验证码
-        String code = createSmsCode(reqDTO.getMobile(), reqDTO.getScene(), reqDTO.getCreateIp());
+
+        HashMap<String, Object> map;
+
+        // 提现失败发送的不是验证码
+        if (reqDTO.getScene().equals(SmsSceneEnum.MEMBER_WITHDRAWAL_ERROR.getScene())) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            map = MapUtil.of("time", formatter.format(reqDTO.getSendTime()));
+        } else {
+            // 创建验证码
+            String code = createSmsCode(reqDTO.getMobile(), reqDTO.getScene(), reqDTO.getCreateIp());
+            map = MapUtil.of("code", code);
+        }
+
         // 发送验证码
         smsSendService.sendSingleSms(reqDTO.getMobile(), null, null,
-                sceneEnum.getTemplateCode(), MapUtil.of("code", code));
+                sceneEnum.getTemplateCode(), map);
     }
 
     private String createSmsCode(String mobile, Integer scene, String ip) {

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

@@ -12,7 +12,7 @@ CREATE TABLE `distri_application_for_withdrawal` (
                                                      `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',
+                                                     `status` tinyint DEFAULT '0' COMMENT '提现状态,成功是1, 失败是2, 提现中为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 '创建时间',