guomengjiao месяцев назад: 3
Родитель
Сommit
01b4632bf8

+ 64 - 0
renren-admin/src/main/java/io/renren/modules/qyh/api/ApiWithdrawController.java

@@ -0,0 +1,64 @@
+package io.renren.modules.qyh.api;
+
+import io.renren.common.utils.Constant;
+import io.renren.common.utils.PageUtils;
+import io.renren.common.utils.R;
+import io.renren.modules.qyh.entity.WithdrawInfoEntity;
+import io.renren.modules.qyh.model.vo.MyWalletVO;
+import io.renren.modules.qyh.service.MemberWalletService;
+import io.renren.modules.qyh.service.WithdrawInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * 小程序端提现API
+ */
+@RestController
+@RequestMapping("api/withdraw")
+@Api(tags = "小程序-提现相关")
+public class ApiWithdrawController {
+
+    @Autowired
+    private WithdrawInfoService withdrawInfoService;
+
+    @Autowired
+    private MemberWalletService memberWalletService;
+
+    /**
+     * 我的钱包
+     */
+    @GetMapping("/wallet")
+    @ApiOperation("我的钱包")
+    public R wallet(@RequestParam Long memberId) {
+        MyWalletVO wallet = memberWalletService.getMyWallet(memberId);
+        return R.ok().put("data", wallet);
+    }
+
+    /**
+     * 申请提现
+     */
+    @PostMapping("/apply")
+    @ApiOperation("申请提现")
+    public R apply(@RequestBody WithdrawInfoEntity withdrawInfoEntity) {
+        withdrawInfoService.apply(withdrawInfoEntity);
+        return R.ok();
+    }
+
+    @GetMapping("/page")
+    @ApiOperation("分页")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"),
+            @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"),
+    })
+    public R page(@RequestParam Map<String, Object> params) {
+        PageUtils page = withdrawInfoService.queryPage(params);
+        return R.ok().put("page", page);
+    }
+
+}

+ 42 - 0
renren-admin/src/main/java/io/renren/modules/qyh/controller/WithdrawController.java

@@ -0,0 +1,42 @@
+package io.renren.modules.qyh.controller;
+
+import io.renren.common.utils.Constant;
+import io.renren.common.utils.PageUtils;
+import io.renren.common.utils.R;
+import io.renren.modules.qyh.service.WithdrawInfoService;
+import io.renren.modules.sys.controller.AbstractController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 青雲慧-提现
+ *
+ */
+@RestController
+@RequestMapping("qyh/withdraw")
+@Api(tags = "青雲慧-提现")
+public class WithdrawController extends AbstractController {
+    @Autowired
+    private WithdrawInfoService withdrawInfoService;
+
+    @GetMapping("/page")
+    @ApiOperation("分页")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"),
+            @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"),
+    })
+    public R page(@RequestParam Map<String, Object> params) {
+        PageUtils page = withdrawInfoService.queryPage(params);
+        return R.ok().put("page", page);
+    }
+
+}

+ 97 - 0
renren-admin/src/main/java/io/renren/modules/qyh/entity/WithdrawInfoEntity.java

@@ -0,0 +1,97 @@
+package io.renren.modules.qyh.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 提现记录表
+ *
+ * @author qingyunhui
+ * @date 2026-04-24
+ */
+@Data
+@TableName("qyh_withdraw_info")
+public class WithdrawInfoEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long memberId;
+
+    /**
+     * 提现类型 1-会员佣金提现
+     */
+    private Integer withdrawType;
+
+    /**
+     * 提现金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 收款方式 0-微信
+     */
+    private Integer paymentTerm;
+
+    /**
+     * 业务单号
+     */
+    private String businessCode;
+
+    /**
+     * 申请时间
+     */
+    private LocalDateTime applyTime;
+
+    /**
+     * 审核人员
+     */
+    private Long auditPer;
+
+    /**
+     * 审核状态 1-待审核 2-已通过 3-已拒绝 4-已打款
+     */
+    private Integer auditState;
+
+    /**
+     * 审核说明/备注
+     */
+    private String auditExplain;
+
+    /**
+     * 审核时间
+     */
+    private LocalDateTime auditTime;
+
+    /**
+     * 打款状态 0-未打款 1-已打款
+     */
+    private Integer remitStatus;
+
+    /**
+     * 打款时间
+     */
+    private LocalDateTime remitTime;
+
+    /**
+     * 收款人
+     */
+    private String payee;
+
+    /**
+     * 第三方交易单号(微信交易单号)
+     */
+    private String thirdTransactionNo;
+}

+ 22 - 0
renren-admin/src/main/java/io/renren/modules/qyh/mapper/WithdrawInfoMapper.java

@@ -0,0 +1,22 @@
+package io.renren.modules.qyh.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.renren.modules.qyh.entity.WithdrawInfoEntity;
+import io.renren.modules.qyh.model.vo.WithdrawInfoVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+/**
+ * 提现记录表
+ *
+ * @author qingyunhui
+ * @date 2026-04-24
+ */
+@Mapper
+public interface WithdrawInfoMapper extends BaseMapper<WithdrawInfoEntity> {
+
+    IPage<WithdrawInfoVO> queryPage(IPage<WithdrawInfoEntity> iPage, @Param("params") Map<String, Object> params);
+}

+ 29 - 0
renren-admin/src/main/java/io/renren/modules/qyh/model/vo/MyWalletVO.java

@@ -0,0 +1,29 @@
+package io.renren.modules.qyh.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+/**
+ * 我的钱包VO
+ *
+ * @author qingyunhui
+ * @date 2026-04-24
+ */
+@Data
+@ApiModel("我的钱包VO")
+public class MyWalletVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("可提现余额")
+    private BigDecimal availableAmount;
+
+    @ApiModelProperty("累计收益")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty("待结算金额")
+    private BigDecimal pendingAmount;
+
+}

+ 45 - 0
renren-admin/src/main/java/io/renren/modules/qyh/model/vo/WithdrawInfoVO.java

@@ -0,0 +1,45 @@
+package io.renren.modules.qyh.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class WithdrawInfoVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+    /**
+     * 手机号
+     */
+    private String phone;
+    /**
+     * 提现金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 收款方式 0-微信
+     */
+    private Integer paymentTerm;
+
+    /**
+     * 业务单号
+     */
+    private String businessCode;
+
+    /**
+     * 申请时间
+     */
+    private LocalDateTime applyTime;
+
+    /**
+     * 审核状态 1-待审核 2-已通过 3-已拒绝 4-已打款
+     */
+    private Integer auditState;
+}

+ 10 - 0
renren-admin/src/main/java/io/renren/modules/qyh/service/MemberWalletService.java

@@ -2,6 +2,7 @@ package io.renren.modules.qyh.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import io.renren.modules.qyh.entity.MemberWalletEntity;
+import io.renren.modules.qyh.model.vo.MyWalletVO;
 
 import java.math.BigDecimal;
 
@@ -23,4 +24,13 @@ public interface MemberWalletService extends IService<MemberWalletEntity> {
      * @param orderAmount 订单金额
      */
     void handleRechargeCommission(Long orderMemberId, Long orderId, BigDecimal orderAmount);
+
+    /**
+     * 冻结钱包余额
+     * @param memberId
+     * @param money
+     */
+    void freezeBalance(Long memberId, BigDecimal money);
+
+    MyWalletVO getMyWallet(Long memberId);
 }

+ 31 - 0
renren-admin/src/main/java/io/renren/modules/qyh/service/WithdrawInfoService.java

@@ -0,0 +1,31 @@
+package io.renren.modules.qyh.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import io.renren.common.utils.PageUtils;
+import io.renren.modules.qyh.entity.WithdrawInfoEntity;
+
+import java.util.Map;
+
+/**
+ * 提现记录表
+ *
+ * @author qingyunhui
+ * @date 2026-04-24
+ */
+public interface WithdrawInfoService extends IService<WithdrawInfoEntity> {
+
+    /**
+     * 后台分页查询
+     */
+    PageUtils queryPage(Map<String, Object> params);
+
+    /**
+     * 小程序申请提现
+     */
+    void apply(WithdrawInfoEntity withdrawInfoEntity);
+
+    /**
+     * 后台审核提现
+     */
+    void audit(WithdrawInfoEntity withdrawInfoEntity);
+}

+ 23 - 0
renren-admin/src/main/java/io/renren/modules/qyh/service/impl/MemberWalletServiceImpl.java

@@ -10,6 +10,7 @@ import io.renren.modules.qyh.entity.CommissionRecordEntity;
 import io.renren.modules.qyh.entity.MemberWalletEntity;
 import io.renren.modules.qyh.entity.WithdrawConfigEntity;
 import io.renren.modules.qyh.mapper.MemberWalletMapper;
+import io.renren.modules.qyh.model.vo.MyWalletVO;
 import io.renren.modules.qyh.service.CommissionRecordService;
 import io.renren.modules.qyh.service.MemberWalletService;
 import io.renren.modules.qyh.service.WithdrawConfigService;
@@ -92,4 +93,26 @@ public class MemberWalletServiceImpl extends ServiceImpl<MemberWalletMapper, Mem
         record.setCreateTime(LocalDateTime.now());
         commissionRecordService.save(record);
     }
+
+    @Override
+    public void freezeBalance(Long memberId, BigDecimal money) {
+        MemberWalletEntity wallet = this.getOrCreateWallet(memberId);
+        if (wallet.getBalance().compareTo(money) < 0) {
+            throw new RRException("钱包余额不足");
+        }
+        wallet.setBalance(wallet.getBalance().subtract(money));
+        wallet.setPendingAmount(wallet.getPendingAmount().add(money));
+        wallet.setUpdateTime(LocalDateTime.now());
+        baseMapper.updateById(wallet);
+    }
+
+    @Override
+    public MyWalletVO getMyWallet(Long memberId) {
+        MemberWalletEntity wallet = this.getOrCreateWallet(memberId);
+        MyWalletVO vo = new MyWalletVO();
+        vo.setAvailableAmount(wallet.getBalance());
+        vo.setTotalAmount(wallet.getTotalAmount());
+        vo.setPendingAmount(wallet.getPendingAmount());
+        return vo;
+    }
 }

+ 116 - 0
renren-admin/src/main/java/io/renren/modules/qyh/service/impl/WithdrawInfoServiceImpl.java

@@ -0,0 +1,116 @@
+package io.renren.modules.qyh.service.impl;
+
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.renren.common.enums.WithdrawAuditStateEnum;
+import io.renren.common.enums.WithdrawTypeEnum;
+import io.renren.common.exception.RRException;
+import io.renren.common.utils.Constant;
+import io.renren.common.utils.PageUtils;
+import io.renren.modules.qyh.entity.MemberWalletEntity;
+import io.renren.modules.qyh.entity.WithdrawConfigEntity;
+import io.renren.modules.qyh.entity.WithdrawInfoEntity;
+import io.renren.modules.qyh.mapper.WithdrawInfoMapper;
+import io.renren.modules.qyh.model.vo.WithdrawInfoVO;
+import io.renren.modules.qyh.service.MemberWalletService;
+import io.renren.modules.qyh.service.WithdrawConfigService;
+import io.renren.modules.qyh.service.WithdrawInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * 提现记录表
+ *
+ * @author qingyunhui
+ * @date 2026-04-24
+ */
+@Service("withdrawInfoService")
+public class WithdrawInfoServiceImpl extends ServiceImpl<WithdrawInfoMapper, WithdrawInfoEntity>
+        implements WithdrawInfoService {
+
+    @Autowired
+    private MemberWalletService memberWalletService;
+
+    @Autowired
+    private WithdrawConfigService withdrawConfigService;
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+        Integer page = MapUtil.getInt(params, Constant.PAGE);
+        Integer limit = MapUtil.getInt(params, Constant.LIMIT);
+        IPage<WithdrawInfoEntity> iPage = new Page<>(page, limit);
+        IPage<WithdrawInfoVO> resultPage = baseMapper.queryPage(iPage, params);
+        return new PageUtils(resultPage);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void apply(WithdrawInfoEntity dto) {
+        // 1. 获取配置
+        WithdrawConfigEntity config = withdrawConfigService.getOne();
+        // 2. 校验金额
+        BigDecimal money = dto.getMoney();
+        Long memberId = dto.getMemberId();
+        if (money.compareTo(config.getMinWithdrawAmount()) < 0) {
+            throw new RRException("提现金额不能低于" + config.getMinWithdrawAmount() + "元");
+        }
+        if (money.compareTo(config.getMaxWithdrawAmount()) > 0) {
+            throw new RRException("提现金额不能高于" + config.getMaxWithdrawAmount() + "元");
+        }
+        // 3. 获取钱包并校验余额
+        MemberWalletEntity wallet = memberWalletService.getOrCreateWallet(memberId);
+        if (wallet.getBalance().compareTo(money) < 0) {
+            throw new RRException("钱包余额不足");
+        }
+        // 4. 冻结钱包余额
+        memberWalletService.freezeBalance(memberId, money);
+        // 5. 生成提现记录
+        WithdrawInfoEntity entity = new WithdrawInfoEntity();
+        entity.setMemberId(memberId);
+        entity.setWithdrawType(WithdrawTypeEnum.MEMBER_COMMISSION_WITHDRAW.value());
+        entity.setMoney(money);
+        entity.setPaymentTerm(dto.getPaymentTerm());
+        entity.setBusinessCode("WD" + new Snowflake().nextIdStr());
+        entity.setApplyTime(LocalDateTime.now());
+        entity.setAuditState(WithdrawAuditStateEnum.WAIT_AUDIT.value());
+        entity.setPayee(dto.getPayee());
+        baseMapper.insert(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void audit(WithdrawInfoEntity dto) {
+        WithdrawInfoEntity entity = this.getById(dto.getId());
+        if (entity == null) {
+            throw new RRException("提现记录不存在");
+        }
+        if (!entity.getAuditState().equals(1)) {
+            throw new RRException("当前状态不可审核");
+        }
+
+        entity.setAuditState(dto.getAuditState());
+        entity.setAuditExplain(dto.getAuditExplain());
+        entity.setAuditPer(dto.getAuditPer());
+        entity.setAuditTime(LocalDateTime.now());
+
+        // 如果是拒绝,需要退回余额 (这里简单处理,具体看业务逻辑是否需要退回)
+        // 正常逻辑是:审核通过 -> 调用微信打款 -> 打款成功 -> 更新状态
+        // 或者:审核通过 -> 状态变为已打款
+        if (dto.getAuditState().equals(2)) {
+            // 假设审核通过即视为已打款(如果是手动打款流程)
+            // 实际对接微信企业付款需要异步回调
+            entity.setRemitStatus(1);
+            entity.setRemitTime(LocalDateTime.now());
+        }
+
+        baseMapper.updateById(entity);
+    }
+}

+ 39 - 0
renren-admin/src/main/resources/mapper/qyh/WithdrawInfoDao.xml

@@ -0,0 +1,39 @@
+<?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="io.renren.modules.qyh.mapper.WithdrawInfoMapper">
+
+    <select id="queryPage" resultType="io.renren.modules.qyh.model.vo.WithdrawInfoVO">
+        SELECT
+        cr.*,
+        mi.VIPNAME AS userName,
+        mi.PHONE AS phone
+        FROM qyh_withdraw_info cr
+        LEFT JOIN member_info mi ON cr.member_id = mi.id
+        <where>
+            <if test="params.memberId != null and params.memberId != ''">
+                AND cr.member_id = #{params.memberId}
+            </if>
+            <if test="params.userName != null and params.userName != ''">
+                AND mi.VIPNAME LIKE CONCAT('%', #{params.userName}, '%')
+            </if>
+            <if test="params.phone != null and params.phone != ''">
+                AND mi.PHONE LIKE CONCAT('%', #{params.phone}, '%')
+            </if>
+            <if test="params.businessCode != null and params.businessCode != ''">
+                AND cr.business_code LIKE CONCAT('%', #{params.businessCode}, '%')
+            </if>
+            <if test="params.minAmount != null and params.minAmount != ''">
+                AND cr.money &gt;= #{params.minAmount}
+            </if>
+            <if test="params.maxAmount != null and params.maxAmount != ''">
+                AND cr.money &lt;= #{params.maxAmount}
+            </if>
+            <if test="params.auditState != null and params.auditState != ''">
+                AND cr.audit_state = #{params.auditState}
+            </if>
+        </where>
+        ORDER BY cr.apply_time DESC
+    </select>
+
+</mapper>

+ 42 - 0
renren-common/src/main/java/io/renren/common/enums/WithdrawAuditStateEnum.java

@@ -0,0 +1,42 @@
+package io.renren.common.enums;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+/**
+ * 审核状态 1-待审核 2-已通过 3-已拒绝 4-已打款
+ *
+ * @author lijiahe
+ */
+public enum WithdrawAuditStateEnum {
+    WAIT_AUDIT(1, "待审核"),
+    AUDIT_PASS(2, "已通过"),
+    AUDIT_REFUSE(3, "已拒绝"),
+    REMIT_SUCCESS(4, "已打款")
+    ;
+    private Integer value;
+    private String desc;
+
+    WithdrawAuditStateEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public Integer value() {
+        return this.value;
+    }
+
+    public String desc() {
+        return this.desc;
+    }
+
+    @JsonCreator
+    public static WithdrawAuditStateEnum getByCode(Integer value) {
+        for (WithdrawAuditStateEnum ynEnum : WithdrawAuditStateEnum.values()) {
+            if (ObjectUtil.equal(value, ynEnum.value())) {
+                return ynEnum;
+            }
+        }
+        return null;
+    }
+}

+ 39 - 0
renren-common/src/main/java/io/renren/common/enums/WithdrawPaymentTermEnum.java

@@ -0,0 +1,39 @@
+package io.renren.common.enums;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+/**
+ * 收款方式 0-微信
+ *
+ * @author lijiahe
+ */
+public enum WithdrawPaymentTermEnum {
+    WECHAT(0, "微信"),
+    ;
+    private Integer value;
+    private String desc;
+
+    WithdrawPaymentTermEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public Integer value() {
+        return this.value;
+    }
+
+    public String desc() {
+        return this.desc;
+    }
+
+    @JsonCreator
+    public static WithdrawPaymentTermEnum getByCode(Integer value) {
+        for (WithdrawPaymentTermEnum ynEnum : WithdrawPaymentTermEnum.values()) {
+            if (ObjectUtil.equal(value, ynEnum.value())) {
+                return ynEnum;
+            }
+        }
+        return null;
+    }
+}

+ 40 - 0
renren-common/src/main/java/io/renren/common/enums/WithdrawRemitStatusEnum.java

@@ -0,0 +1,40 @@
+package io.renren.common.enums;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+/**
+ * 打款状态 0-未打款 1-已打款
+ *
+ * @author lijiahe
+ */
+public enum WithdrawRemitStatusEnum {
+    UNREMITTED(0, "未打款"),
+    REMITTED(1, "已打款")
+    ;
+    private Integer value;
+    private String desc;
+
+    WithdrawRemitStatusEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public Integer value() {
+        return this.value;
+    }
+
+    public String desc() {
+        return this.desc;
+    }
+
+    @JsonCreator
+    public static WithdrawRemitStatusEnum getByCode(Integer value) {
+        for (WithdrawRemitStatusEnum ynEnum : WithdrawRemitStatusEnum.values()) {
+            if (ObjectUtil.equal(value, ynEnum.value())) {
+                return ynEnum;
+            }
+        }
+        return null;
+    }
+}

+ 39 - 0
renren-common/src/main/java/io/renren/common/enums/WithdrawTypeEnum.java

@@ -0,0 +1,39 @@
+package io.renren.common.enums;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+/**
+ * 提现类型 1-会员佣金提现
+ *
+ * @author lijiahe
+ */
+public enum WithdrawTypeEnum {
+    MEMBER_COMMISSION_WITHDRAW(1, "会员佣金提现");
+    ;
+    private Integer value;
+    private String desc;
+
+    WithdrawTypeEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public Integer value() {
+        return this.value;
+    }
+
+    public String desc() {
+        return this.desc;
+    }
+
+    @JsonCreator
+    public static WithdrawTypeEnum getByCode(Integer value) {
+        for (WithdrawTypeEnum ynEnum : WithdrawTypeEnum.values()) {
+            if (ObjectUtil.equal(value, ynEnum.value())) {
+                return ynEnum;
+            }
+        }
+        return null;
+    }
+}