package com.stylefeng.guns.modular.account.controller;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.stylefeng.guns.core.shiro.ShiroKit;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.account.model.TBank;
|
import com.stylefeng.guns.modular.account.model.TBankNext;
|
import com.stylefeng.guns.modular.account.model.TUserBankAccount;
|
import com.stylefeng.guns.modular.account.service.ElectronicLedgerService;
|
import com.stylefeng.guns.modular.account.service.ITBankNextService;
|
import com.stylefeng.guns.modular.account.service.ITBankService;
|
import com.stylefeng.guns.modular.account.service.UserWithdrawalService;
|
import com.stylefeng.guns.modular.account.util.Base64Util;
|
import com.stylefeng.guns.modular.cloudPayment.example.BalanceAcctExample;
|
import com.stylefeng.guns.modular.cloudPayment.example.CusApplicationExample;
|
import com.stylefeng.guns.modular.cloudPayment.example.SettleAcctExample;
|
import com.stylefeng.guns.modular.cloudPayment.req.BalanceAcctReq;
|
import com.stylefeng.guns.modular.cloudPayment.req.UserBankAccountReq;
|
import com.stylefeng.guns.modular.system.model.BankCard;
|
import com.stylefeng.guns.modular.system.model.Driver;
|
import com.stylefeng.guns.modular.system.model.ElectronicLedger;
|
import com.stylefeng.guns.modular.system.model.UserWithdrawal;
|
import com.stylefeng.guns.modular.system.service.IBankCardService;
|
import com.stylefeng.guns.modular.system.service.IDriverService;
|
import com.stylefeng.guns.modular.system.util.ResultUtil;
|
import com.unionpay.upyzt.resp.BalanceAcctStoreResp;
|
import com.unionpay.upyzt.resp.SettleAcctDeleteResp;
|
import com.unionpay.upyzt.resp.SettleAcctResp;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.transaction.annotation.Isolation;
|
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
@Slf4j
|
@Api(tags = "司机绑卡-提现")
|
@RestController
|
@RequestMapping("/api/userAccount")
|
public class AccountController {
|
|
private final IBankCardService bankCardService;
|
private final ElectronicLedgerService electronicLedgerService;
|
private final UserWithdrawalService userWithdrawalService;
|
private final IDriverService driverService;
|
private final ITBankService bankService;
|
private final ITBankNextService bankNextService;
|
|
|
@Autowired
|
public AccountController(IBankCardService bankCardService, ElectronicLedgerService electronicLedgerService, UserWithdrawalService userWithdrawalService, IDriverService driverService, ITBankService bankService, ITBankNextService bankNextService) {
|
this.bankCardService = bankCardService;
|
this.electronicLedgerService = electronicLedgerService;
|
this.userWithdrawalService = userWithdrawalService;
|
this.driverService = driverService;
|
this.bankService = bankService;
|
this.bankNextService = bankNextService;
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/bindCard", method = RequestMethod.POST)
|
@ApiOperation(value = "司机添加银行卡", tags = {"司机端-司机添加银行卡"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED,rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
|
public ResultUtil bindCard(TUserBankAccount userBankAccount, HttpServletRequest request){
|
try {
|
|
Integer driverId = driverService.getUserIdFormRedis(request);
|
if(null == driverId){
|
return ResultUtil.tokenErr();
|
}
|
Driver driver = driverService.selectById(driverId);
|
|
// 查询是否绑定该银行卡
|
int count = bankCardService.selectCount(new EntityWrapper<BankCard>()
|
.eq("driverId", driverId)
|
.eq("code", userBankAccount.getBankCardCode())
|
.eq("status", true));
|
if(count>0){
|
return ResultUtil.error("该银行卡已绑定!");
|
}
|
|
// TODO 司机进件信息
|
List<UserWithdrawal> userWithdrawalList = userWithdrawalService.selectList(new EntityWrapper<UserWithdrawal>()
|
.eq("phone",driver.getPhone()));
|
if(userWithdrawalList.size()==0){
|
return ResultUtil.error("请先进行个人用户进件信息填写");
|
}
|
|
// 获取当前用户的开户用户号cusId
|
// TODO 司机进件信息
|
UserWithdrawal userWithdrawal = userWithdrawalService.selectOne(new EntityWrapper<UserWithdrawal>()
|
.eq("phone",driver.getPhone())
|
.eq("status", true)
|
.last("LIMIT 1"));
|
|
// 创建电子账簿
|
// BalanceAcctReq balanceAcctReq = electronicLedgerService.createBalanceAcctReq(userWithdrawal.getCusId(), Base64Util.decode(userWithdrawal.getTransactionAuthorizationCode()));
|
// BalanceAcctStoreResp balanceAcctStoreResp = BalanceAcctExample.create(balanceAcctReq);
|
// log.info("添加银行卡创建电子账簿:{}",balanceAcctStoreResp);
|
// // 开通电子账簿成功,封装实体
|
// ElectronicLedger electronicLedger = electronicLedgerService.createElectronicLedger(balanceAcctStoreResp,userWithdrawal,userWithdrawal.getTransactionAuthorizationCode());
|
// electronicLedgerService.insert(electronicLedger);
|
|
BankCard bankCard = new BankCard();
|
|
bankCard.setBank(userBankAccount.getBankName());
|
bankCard.setName(userBankAccount.getOpenAccountName());
|
bankCard.setCode(userBankAccount.getBankCardCode());
|
bankCard.setPhone(userBankAccount.getPhone());
|
bankCard.setBankCode(userBankAccount.getBankCode());
|
bankCard.setBankBranchCode(userBankAccount.getBankBranchCode());
|
bankCard.setInsertTime(new Date());
|
bankCard.setOutRequestNo(ToolUtil.getRandomString(32));
|
bankCard.setBankAcctType("1");
|
bankCard.setDriverId(driverId);
|
bankCardService.insert(bankCard);
|
|
// UserBankAccountReq userBankAccountReq = electronicLedgerService.createUserBankAccountReq(bankCard,userWithdrawal.getCusId(),userBankAccount.getCode());
|
// SettleAcctResp settleAcctResp = SettleAcctExample.create(userBankAccountReq);
|
//
|
// // 保存绑定银行卡返回信息
|
// bankCard.setVerifyStatus(settleAcctResp.getVerifyStatus());
|
// bankCard.setSettleAcctId(settleAcctResp.getSettleAcctId());
|
// bankCard.setAcctValidationFailureMsg(settleAcctResp.getAcctValidationFailureMsg());
|
// bankCard.setAcctValidationFinishedAt(settleAcctResp.getAcctValidationFinishedAt());
|
// bankCardService.updateById(bankCard);
|
return ResultUtil.success();
|
}catch (Exception e){
|
e.printStackTrace();
|
log.error("司机添加银行卡:{}",e.getMessage());
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/getCode", method = RequestMethod.POST)
|
@ApiOperation(value = "获取验证码", tags = {"司机端-获取验证码"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
})
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED,rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
|
public ResultUtil getCode(String phone){
|
try {
|
CusApplicationExample.smsCode(phone);
|
return ResultUtil.success();
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
|
@ResponseBody
|
@RequestMapping(value = "/getBindCardList", method = RequestMethod.POST)
|
@ApiOperation(value = "获取银行卡", tags = {"司机端-获取银行卡"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
@ApiImplicitParam(value = "pageNumber", name = "pageNumber", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "pageSize", name = "pageSize", required = true, dataType = "int"),
|
})
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED,rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
|
public ResultUtil getBindCardList(int pageNumber, int pageSize, HttpServletRequest request){
|
try {
|
Integer driverId = driverService.getUserIdFormRedis(request);
|
if(null == driverId){
|
return ResultUtil.tokenErr();
|
}
|
Driver driver = driverService.selectById(driverId);
|
// List<BankCard> bankCards = bankCardService.queryBankCard(pageNumber, pageSize, driverId);
|
List<BankCard> bankCards = bankCardService.queryBankCardByPhone(pageNumber, pageSize, driver.getPhone());
|
return ResultUtil.success(bankCards);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/setDivideAccountsCard", method = RequestMethod.POST)
|
@ApiOperation(value = "设置银行卡分账", tags = {"司机端-设置银行卡分账"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
@ApiImplicitParam(value = "卡id", name = "id", required = true, dataType = "int"),
|
})
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED,rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
|
public ResultUtil setDivideAccountsCard(int id, HttpServletRequest request){
|
try {
|
Integer driverId = driverService.getUserIdFormRedis(request);
|
if(null == driverId){
|
return ResultUtil.tokenErr();
|
}
|
List<BankCard> bankCardList = bankCardService.selectList(new EntityWrapper<BankCard>()
|
.eq("driverId", driverId)
|
.eq("status",1));
|
for (BankCard bankCard : bankCardList) {
|
bankCard.setIfDefault(false);
|
}
|
bankCardService.updateBatchById(bankCardList);
|
|
BankCard bankCard = bankCardService.selectById(id);
|
bankCard.setIfDefault(true);
|
bankCardService.updateById(bankCard);
|
return ResultUtil.success();
|
}catch (Exception e){
|
e.printStackTrace();
|
log.error("设置银行卡分账:{}",e.getMessage());
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/deleteBindCard", method = RequestMethod.POST)
|
@ApiOperation(value = "删除银行卡", tags = {"司机端-删除银行卡"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
@ApiImplicitParam(value = "卡id", name = "id", required = true, dataType = "int"),
|
})
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED,rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
|
public ResultUtil getBindCardList(int id){
|
try {
|
BankCard bankCard = bankCardService.selectById(id);
|
// if(StringUtils.hasLength(bankCard.getSettleAcctId())){
|
// return ResultUtil.error("该银行卡为银联绑定账户不可删除!");
|
// }
|
bankCard.setStatus(false);
|
bankCardService.updateById(bankCard);
|
// SettleAcctDeleteResp settleAcctDeleteResp = SettleAcctExample.removeById(bankCard.getSettleAcctId());
|
return ResultUtil.success();
|
}catch (Exception e){
|
e.printStackTrace();
|
log.error("删除银行卡:{}",e.getMessage());
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/getAllCard", method = RequestMethod.POST)
|
@ApiOperation(value = "获取所有银行卡信息--第一级", tags = {"司机端-获取所有银行卡信息--第一级"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
})
|
public ResultUtil getAllCard(){
|
try {
|
List<TBank> tBanks = bankService.selectList(null);
|
return ResultUtil.success(tBanks);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/getAllCardTwo", method = RequestMethod.POST)
|
@ApiOperation(value = "获取所有银行卡信息--第二级", tags = {"司机端-获取所有银行卡信息--第二级"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
@ApiImplicitParam(value = "pageNumber", name = "pageNumber", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "pageSize", name = "pageSize", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "code", name = "code", required = true, dataType = "String"),
|
@ApiImplicitParam(value = "name", name = "name", required = false, dataType = "String"),
|
})
|
public ResultUtil getAllCardTwo(int pageNumber,int pageSize,String code,String name ){
|
try {
|
Page<TBankNext> tBankNextPage = new Page<>(pageNumber, pageSize);
|
EntityWrapper<TBankNext> tBankNextEntityWrapper = new EntityWrapper<>();
|
tBankNextEntityWrapper.eq("drecCode",code);
|
if(ToolUtil.isNotEmpty(name)){
|
tBankNextEntityWrapper.like("bankName",name);
|
}
|
Page<TBankNext> tBankNextPage1 = bankNextService.selectPage(tBankNextPage, tBankNextEntityWrapper);
|
return ResultUtil.success(tBankNextPage1.getRecords());
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.error(e.getMessage());
|
}
|
}
|
|
}
|