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() .eq("driverId", driverId) .eq("code", userBankAccount.getBankCardCode()) .eq("status", true)); if(count>0){ return ResultUtil.error("该银行卡已绑定!"); } // TODO 司机进件信息 List userWithdrawalList = userWithdrawalService.selectList(new EntityWrapper() .eq("userId", driver.getId()) .eq("type", 1)); if(userWithdrawalList.size()==0){ return ResultUtil.error("请先进行个人用户进件信息填写"); } // 获取当前用户的开户用户号cusId // TODO 司机进件信息 UserWithdrawal userWithdrawal = userWithdrawalService.selectOne(new EntityWrapper() .eq("userId",driver.getId()) .eq("userType",2).eq("type",1) .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); bankCard.setBankCardProvinceCode(userBankAccount.getBankCardProvinceCode()); bankCard.setBankCardCityCode(userBankAccount.getBankCardCityCode()); 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 bankCards = bankCardService.queryBankCard(pageNumber, pageSize, driverId); List bankCards = bankCardService.queryBankCardByPhone(pageNumber, pageSize, driver.getId()); 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 bankCardList = bankCardService.selectList(new EntityWrapper() .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 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 tBankNextPage = new Page<>(pageNumber, pageSize); EntityWrapper tBankNextEntityWrapper = new EntityWrapper<>(); tBankNextEntityWrapper.eq("drecCode",code); if(ToolUtil.isNotEmpty(name)){ tBankNextEntityWrapper.like("bankName",name); } Page tBankNextPage1 = bankNextService.selectPage(tBankNextPage, tBankNextEntityWrapper); return ResultUtil.success(tBankNextPage1.getRecords()); }catch (Exception e){ e.printStackTrace(); return ResultUtil.error(e.getMessage()); } } }