提交 38f2e65c 作者: xiaowang

申请提现至云享飞后台

上级 0d1d560e
package com.mmc.iuav.user.model.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author: lw
* @Date: 2023/8/25 10:25
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ApplyWithdrawalVO implements Serializable {
private static final long serialVersionUID = 8677383830415176214L;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "交易类型(bankcard:银行卡,alipay:支付宝,wechatpay:微信)", required = true)
private String settleType;
@ApiModelProperty(value = "收款账号,交易类型为支付宝时,为支付宝账号;交易类型为微信时,填收款用户的openid", required = true)
private String payAccount;
@ApiModelProperty(value = "收款人银行名称 (无需细到支行名称)")
private String bankName;
@ApiModelProperty(value = "服务类型,测试:销售推广;正式:市场推广", required = true)
private String positionName;
@ApiModelProperty(value = "交易金额(实际到账金额, 单位元,精确两位小数 )", required = true)
private BigDecimal payAmount;
}
package com.mmc.iuav.user.controller.xzsz; package com.mmc.iuav.user.controller.wallet;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController; import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO; import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.WithdrawalService; import com.mmc.iuav.user.service.xzsz.WithdrawalService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/** /**
* @author: zj * @author: zj
* @Date: 2023/8/23 15:58 * @Date: 2023/8/23 15:58
...@@ -31,8 +33,8 @@ public class WithdrawalController extends BaseController { ...@@ -31,8 +33,8 @@ public class WithdrawalController extends BaseController {
@ApiOperation(value = "提现申请") @ApiOperation(value = "提现申请")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)}) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("apply") @PostMapping("apply")
public ResultBody apply(@RequestBody XzWithdrawalVO xzWithdrawalVO) { public ResultBody apply(@RequestBody ApplyWithdrawalVO applyWithdrawalVO, HttpServletRequest request) {
return withdrawalService.apply(xzWithdrawalVO); return withdrawalService.apply(applyWithdrawalVO, this.getUserLoginInfoFromRedis(request).getUserAccountId());
} }
// 提现查询 // 提现查询
......
package com.mmc.iuav.user.dao.xzsz; package com.mmc.iuav.user.dao.xzsz;
import com.mmc.iuav.user.entity.XzWithdrawalApplyDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
...@@ -8,4 +9,5 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -8,4 +9,5 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface WithdrawalDao { public interface WithdrawalDao {
void insertWithdrawalApply(XzWithdrawalApplyDO xzWithdrawalApplyDO);
} }
...@@ -2,6 +2,7 @@ package com.mmc.iuav.user.entity; ...@@ -2,6 +2,7 @@ package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.enums.SettleTypeEnum; import com.mmc.iuav.user.enums.SettleTypeEnum;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO; import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -70,4 +71,12 @@ public class XzWithdrawalApplyDO implements Serializable { ...@@ -70,4 +71,12 @@ public class XzWithdrawalApplyDO implements Serializable {
this.bankRemo = xzWithdrawalVO.getBankRemo(); this.bankRemo = xzWithdrawalVO.getBankRemo();
} }
public XzWithdrawalApplyDO(ApplyWithdrawalVO applyWithdrawalVO) {
this.userAccountId = applyWithdrawalVO.getUserAccountId();
this.bankName = applyWithdrawalVO.getBankName();
this.settleType = applyWithdrawalVO.getSettleType();
this.payAccount = applyWithdrawalVO.getPayAccount();
this.positionName = applyWithdrawalVO.getPositionName();
this.payAmount = applyWithdrawalVO.getPayAmount().doubleValue();
}
} }
package com.mmc.iuav.user.service.xzsz; package com.mmc.iuav.user.service.xzsz;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO; import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
/** /**
* @author: zj * @author: zj
* @Date: 2023/8/23 16:09 * @Date: 2023/8/23 16:09
*/ */
public interface WithdrawalService { public interface WithdrawalService {
ResultBody apply(XzWithdrawalVO xzWithdrawalVO); ResultBody apply(ApplyWithdrawalVO applyWithdrawalVO, Integer userAccountId);
} }
package com.mmc.iuav.user.service.xzsz.impl; package com.mmc.iuav.user.service.xzsz.impl;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.dao.RealNameAuthDao;
import com.mmc.iuav.user.dao.wallet.PayWalletDao;
import com.mmc.iuav.user.dao.xzsz.WithdrawalDao; import com.mmc.iuav.user.dao.xzsz.WithdrawalDao;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO; import com.mmc.iuav.user.dao.xzsz.XzDao;
import com.mmc.iuav.user.entity.RealNameAuthDO;
import com.mmc.iuav.user.entity.XzAuthDO;
import com.mmc.iuav.user.entity.XzWithdrawalApplyDO;
import com.mmc.iuav.user.entity.wallet.PayWalletDO;
import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.WithdrawalService; import com.mmc.iuav.user.service.xzsz.WithdrawalService;
import com.mmc.iuav.user.service.xzsz.XzService; import com.mmc.iuav.user.util.TDateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
/** /**
* @author: zj * @author: zj
* @Date: 2023/8/23 16:09 * @Date: 2023/8/23 16:09
...@@ -20,12 +33,51 @@ public class WithdrawalServiceImpl implements WithdrawalService { ...@@ -20,12 +33,51 @@ public class WithdrawalServiceImpl implements WithdrawalService {
private WithdrawalDao withdrawalDao; private WithdrawalDao withdrawalDao;
@Autowired @Autowired
private XzService xzService; private XzDao xzDao;
@Resource
private RealNameAuthDao realNameAuthDao;
@Autowired
private PayWalletDao payWalletDao;
@Override @Override
public ResultBody apply(XzWithdrawalVO xzWithdrawalVO) { public ResultBody apply(ApplyWithdrawalVO applyWithdrawalVO, Integer userAccountId) {
// 确保已电签、自己钱包余额足够 // 判断该用户是否实名认证
// 确保主体金额足够再提现 RealNameAuthDO realNameAuth = realNameAuthDao.getRealNameAuthByUId(userAccountId);
if (realNameAuth != null && !realNameAuth.getCheckStatus().equals(1)) {
return ResultBody.error("实名认证未通过!");
}
if (realNameAuth == null) {
return ResultBody.error(ResultEnum.PLEASE_ERFORM_REAL_NAME_AUTHENTICATION_FIRST);
}
// 确保已电签
XzAuthDO xzAuth = xzDao.getXzAuthByUserAccountId(userAccountId);
if (xzAuth != null && !xzAuth.getXzAuthStatus().equals(1)) {
return ResultBody.error("电签未通过!");
}
if (xzAuth == null) {
return ResultBody.error("请先完成电签操作!");
}
// 当前提现金额是否足够
PayWalletDO payWallet = payWalletDao.getPayWalletByUser(userAccountId);
BigDecimal salaryAmt = payWallet.getSalaryAmt();
if (salaryAmt.compareTo(applyWithdrawalVO.getPayAmount()) < 0) {
return ResultBody.error("当前金额大于可提现金额!");
}
applyWithdrawalVO.setUserAccountId(userAccountId);
// 生成提现流水编号
String outerTradeNo = "T" + TDateUtil.getDateStr(new Date(), TDateUtil.TYPE) + userAccountId + CodeUtil.getRandomNum(4);
// 记录提现申请记录
XzWithdrawalApplyDO xzWithdrawalApplyDO = new XzWithdrawalApplyDO(applyWithdrawalVO);
xzWithdrawalApplyDO.setOuterTradeNo(outerTradeNo);
xzWithdrawalApplyDO.setEmpName(realNameAuth.getUserName());
xzWithdrawalApplyDO.setEmpPhone(realNameAuth.getPhoneNum());
xzWithdrawalApplyDO.setLicenseId(realNameAuth.getIdNumber());
xzWithdrawalApplyDO.setLicenseType("ID_CARD");
xzWithdrawalApplyDO.setMonth(TDateUtil.getCurrentDateByType("yyyy-MM"));
xzWithdrawalApplyDO.setTradeStatus("apply");
withdrawalDao.insertWithdrawalApply(xzWithdrawalApplyDO);
return ResultBody.success(); return ResultBody.success();
} }
} }
...@@ -4,4 +4,21 @@ ...@@ -4,4 +4,21 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.xzsz.WithdrawalDao"> <mapper namespace="com.mmc.iuav.user.dao.xzsz.WithdrawalDao">
<insert id="insertWithdrawalApply">
insert into xz_withdrawal_apply (user_account_id,
bank_name,
emp_name,
emp_phone,
license_id,
license_type,
`month`,
outer_trade_no,
pay_account,
pay_amount,
position_name,
settle_type,
trade_status)
values (#{userAccountId}, #{bankName}, #{empName}, #{empPhone}, #{licenseId}, #{licenseType}, #{month},
#{outerTradeNo}, #{payAccount}, #{payAmount}, #{positionName}, #{settleType}, #{tradeStatus})
</insert>
</mapper> </mapper>
\ No newline at end of file
...@@ -5,12 +5,27 @@ ...@@ -5,12 +5,27 @@
<mapper namespace="com.mmc.iuav.user.dao.xzsz.XzDao"> <mapper namespace="com.mmc.iuav.user.dao.xzsz.XzDao">
<insert id="addAuth" parameterType="com.mmc.iuav.user.entity.XzAuthDO" useGeneratedKeys="true" keyProperty="id"> <insert id="addAuth" parameterType="com.mmc.iuav.user.entity.XzAuthDO" useGeneratedKeys="true" keyProperty="id">
insert into xz_auth(user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id, custom_params, contract_url, xz_auth_status, create_time) insert into xz_auth(user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id,
values (#{userAccountId}, #{name}, #{idCardNo}, #{mobile}, #{bankAccount}, #{subsidiary_name}, #{document_id}, #{customParams}, #{contract_url}, #{xzAuthStatus}, NOW()) custom_params, contract_url, xz_auth_status, create_time)
values (#{userAccountId}, #{name}, #{idCardNo}, #{mobile}, #{bankAccount}, #{subsidiary_name}, #{document_id},
#{customParams}, #{contract_url}, #{xzAuthStatus}, NOW())
</insert> </insert>
<select id="getXzAuthByUserAccountId" resultType="com.mmc.iuav.user.entity.XzAuthDO"> <select id="getXzAuthByUserAccountId" resultType="com.mmc.iuav.user.entity.XzAuthDO">
select id, user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id, custom_params, contract_url, create_time select id,
from xz_auth where user_account_id = #{userAccountId} and is_deleted = 0 user_account_id,
`name`,
id_card_no,
mobile,
bank_account,
subsidiary_name,
document_id,
custom_params,
contract_url,
create_time,
xz_auth_status
from xz_auth
where user_account_id = #{userAccountId}
and is_deleted = 0
</select> </select>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论