package com.stylefeng.guns.modular.system.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.stylefeng.guns.modular.system.dao.UserInfoMapper;
|
import com.stylefeng.guns.modular.system.dao.WithdrawalMapper;
|
import com.stylefeng.guns.modular.system.model.Driver;
|
import com.stylefeng.guns.modular.system.model.UserInfo;
|
import com.stylefeng.guns.modular.system.model.Withdrawal;
|
import com.stylefeng.guns.modular.system.service.IDriverService;
|
import com.stylefeng.guns.modular.system.service.IWithdrawalService;
|
//import com.stylefeng.guns.modular.system.util.ICBCPayUtil;
|
import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
|
import com.stylefeng.guns.modular.system.util.ResultUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Isolation;
|
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestTemplate;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
|
@Service
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
public class WithdrawalServiceImpl extends ServiceImpl<WithdrawalMapper, Withdrawal> implements IWithdrawalService {
|
|
@Resource
|
private WithdrawalMapper withdrawalMapper;
|
|
@Resource
|
private UserInfoMapper userInfoMapper;
|
|
@Autowired
|
private IDriverService driverService;
|
|
// @Autowired
|
// private ICBCPayUtil icbcPayUtil;
|
|
@Autowired
|
private RestTemplate internalRestTemplate;
|
|
@Autowired
|
private PayMoneyUtil payMoneyUtil;
|
|
|
|
private Map<String, Timer> timerMap = new HashMap<>();
|
|
|
|
|
/**
|
* 提现操作
|
* @param money
|
* @param code
|
* @param name
|
* @param uid
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil withdrawal(Double money, String code, String name, Integer uid, Integer type) throws Exception {
|
if(money.compareTo(0D) <= 0){
|
return ResultUtil.error("提现金额必须大于0");
|
}
|
Driver driver = driverService.selectById(uid);
|
if(null == type){
|
type = 1;
|
}
|
|
Withdrawal withdrawal = new Withdrawal();
|
if(type == 1){
|
if(null == driver.getLaveActivityMoney()){
|
return ResultUtil.error("账户没有余额,不能提现");
|
}
|
if(driver.getLaveActivityMoney().compareTo(money) < 0){
|
return ResultUtil.error("提现金额必须小于账户余额");
|
}
|
withdrawal.setBalance(driver.getLaveActivityMoney());
|
}
|
if(type == 2){
|
if(null == driver.getLaveBusinessMoney()){
|
return ResultUtil.error("账户没有余额,不能提现");
|
}
|
if(driver.getLaveBusinessMoney().compareTo(money) < 0){
|
return ResultUtil.error("提现金额必须小于账户余额");
|
}
|
withdrawal.setBalance(driver.getLaveBusinessMoney());
|
}
|
withdrawal.setCode(code);
|
withdrawal.setFlag(1);
|
withdrawal.setInsertTime(new Date());
|
withdrawal.setMoney(money);
|
withdrawal.setName(name);
|
withdrawal.setState(1);
|
withdrawal.setUserId(uid);
|
withdrawal.setUserType(2);
|
withdrawal.setType(type);
|
withdrawal.setWithdrawalType(1);//线上
|
|
if(type == 1){
|
double v = new BigDecimal(driver.getLaveActivityMoney()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
|
driver.setLaveActivityMoney(v);
|
v = new BigDecimal(driver.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
|
driver.setBalance(v);
|
}
|
if(type == 2){
|
double v = new BigDecimal(driver.getLaveBusinessMoney()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
|
driver.setLaveBusinessMoney(v);
|
}
|
this.insert(withdrawal);
|
driverService.updateById(driver);
|
return ResultUtil.success();
|
}
|
|
|
/**
|
* 获取历史提交数
|
* @param uid
|
* @param pageNum
|
* @param size
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<Map<String, Object>> queryWithdrawal(Integer uid, Integer type, Integer pageNum, Integer size) throws Exception {
|
pageNum = (pageNum - 1) * size;
|
return withdrawalMapper.queryWithdrawal(uid, 2, type, pageNum, size);
|
}
|
|
|
/**
|
* 提交审核处理
|
* @param id
|
* @param state
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil withdrawalAudit(Integer id, Integer state) throws Exception {
|
Withdrawal withdrawal = this.selectById(id);
|
if(withdrawal.getState() == 2){
|
return ResultUtil.error("申请已审核通过,不能重复提交");
|
}
|
if(withdrawal.getState() == 3){
|
return ResultUtil.error("申请已审核拒绝,不能重复提交");
|
}
|
|
if(withdrawal.getUserType() == 1){//用户
|
if(state == 2){//审核拒绝
|
UserInfo userInfo = userInfoMapper.selectById(withdrawal.getUserId());
|
userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
userInfoMapper.updateById(userInfo);
|
|
withdrawal.setState(3);
|
this.updateById(withdrawal);
|
}else{
|
//调用银行转账申请(客户要求提交申请就成功了,剩下的他们自己处理)
|
Map<String, String> map = payMoneyUtil.wxPayBank("用户提现", withdrawal.getMoney().toString(), withdrawal.getId().toString(), withdrawal.getCode(), withdrawal.getName(), "");
|
if("SUCCESS".equals(map.get("return_code"))){
|
withdrawal.setSerialNo(map.get("payment_no"));//交易序列号
|
withdrawal.setState(2);
|
this.updateById(withdrawal);
|
}else{
|
return ResultUtil.error(map.get("err_code_des"));
|
}
|
|
|
// //调用银行转账申请(客户要求提交申请就成功了,剩下的他们自己处理)
|
// ResultUtil<String> transfer = icbcPayUtil.transfer(Double.valueOf(withdrawal.getMoney() * 100).longValue(), withdrawal.getCode(), withdrawal.getName());
|
// if(transfer.getCode() == 200){
|
// withdrawal.setSerialNo(transfer.getData());//交易序列号
|
// withdrawal.setState(2);
|
// this.updateById(withdrawal);
|
// }else{
|
// return transfer;
|
// }
|
|
|
// TimerTask timerTask = new TimerTask() {
|
// @Override
|
// public void run() {
|
// Integer integer = icbcPayUtil.queryTransfer(withdrawal.getSerialNo());
|
// if(integer == 0){//交易成功
|
// withdrawal.setState(2);
|
// WithdrawalServiceImpl.this.updateById(withdrawal);
|
//
|
// Timer timer = timerMap.get(withdrawal.getSerialNo());
|
// timer.cancel();
|
// }
|
// if(integer == 2){//交易拒绝/失败
|
// //还原余额
|
// if(withdrawal.getUserType() == 1){//用户
|
// withdrawal.setState(3);
|
// WithdrawalServiceImpl.this.updateById(withdrawal);
|
//
|
// UserInfo userInfo = userInfoMapper.selectById(withdrawal.getUserId());
|
// userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
// userInfoMapper.updateById(userInfo);
|
//
|
// Timer timer = timerMap.get(withdrawal.getSerialNo());
|
// timer.cancel();
|
// }
|
//
|
// }
|
// }
|
// };
|
// Timer timer = new Timer();
|
// timer.schedule(timerTask, 1000, 10000);//1秒钟后间隔10秒钟查询交易结果
|
// timerMap.put(withdrawal.getSerialNo(), timer);
|
}
|
}else{//司机
|
if(state == 2){//拒绝
|
Driver driver = driverService.selectById(withdrawal.getUserId());
|
driver.setBalance(new BigDecimal(driver.getBalance()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driver.setLaveActivityMoney(new BigDecimal(driver.getLaveActivityMoney()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driverService.updateById(driver);
|
}else{
|
//调用银行转账申请(客户要求提交申请就成功了,剩下的他们自己处理)
|
Map<String, String> map = payMoneyUtil.wxPayBank("司机提现", withdrawal.getMoney().toString(), withdrawal.getId().toString(), withdrawal.getCode(), withdrawal.getName(), "");
|
if("SUCCESS".equals(map.get("return_code"))){
|
withdrawal.setSerialNo(map.get("payment_no"));//交易序列号
|
withdrawal.setState(2);
|
this.updateById(withdrawal);
|
}else{
|
return ResultUtil.error(map.get("err_code_des"));
|
}
|
|
// //调用银行转账申请(客户要求提交申请就成功了,剩下的他们自己处理)
|
// ResultUtil<String> transfer = icbcPayUtil.transfer(Double.valueOf(withdrawal.getMoney() * 100).longValue(), withdrawal.getCode(), withdrawal.getName());
|
// if(transfer.getCode() == 200){
|
// withdrawal.setSerialNo(transfer.getData());//交易序列号
|
// withdrawal.setState(2);
|
// this.updateById(withdrawal);
|
// }else{
|
// return transfer;
|
// }
|
|
// TimerTask timerTask = new TimerTask() {
|
// @Override
|
// public void run() {
|
// Integer integer = icbcPayUtil.queryTransfer(withdrawal.getSerialNo());
|
// if(integer == 0){//交易成功
|
// withdrawal.setState(2);
|
// WithdrawalServiceImpl.this.updateById(withdrawal);
|
//
|
// Timer timer = timerMap.get(withdrawal.getSerialNo());
|
// timer.cancel();
|
// }
|
// if(integer == 2){//交易拒绝/失败
|
// withdrawal.setState(3);
|
// WithdrawalServiceImpl.this.updateById(withdrawal);
|
//
|
// //还原余额
|
// Driver driver = driverService.selectById(withdrawal.getUserId());
|
// driver.setBalance(new BigDecimal(driver.getBalance()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
// driver.setLaveActivityMoney(new BigDecimal(driver.getLaveActivityMoney()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
// driverService.updateById(driver);
|
//
|
// Timer timer = timerMap.get(withdrawal.getSerialNo());
|
// timer.cancel();
|
// }
|
// }
|
// };
|
// Timer timer = new Timer();
|
// timer.schedule(timerTask, 1000, 10000);//1秒钟后间隔10秒钟查询交易结果
|
// timerMap.put(withdrawal.getSerialNo(), timer);
|
}
|
}
|
return ResultUtil.success();
|
}
|
}
|