package com.supersavedriving.driver.modular.system.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.supersavedriving.driver.core.util.ToolUtil;
|
import com.supersavedriving.driver.modular.system.dao.CashWithdrawalMapper;
|
import com.supersavedriving.driver.modular.system.model.*;
|
import com.supersavedriving.driver.modular.system.service.*;
|
import com.supersavedriving.driver.modular.system.util.MallBook.model.*;
|
import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
|
import com.supersavedriving.driver.modular.system.util.ResultUtil;
|
import com.supersavedriving.driver.modular.system.util.UUIDUtil;
|
import com.supersavedriving.driver.modular.system.util.separateAccounts.TransferUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
/**
|
* @author zhibing.pu
|
* @date 2023/3/18 17:03
|
*/
|
@Service
|
public class CashWithdrawalServiceImpl extends ServiceImpl<CashWithdrawalMapper, CashWithdrawal> implements ICashWithdrawalService {
|
|
@Autowired
|
private IDriverService driverService;
|
@Autowired
|
private IDriverBankService driverBankService;
|
|
|
|
@Autowired
|
private IAccountChangeDetailService accountChangeDetailService;
|
|
@Autowired
|
private IRechargeRecordService rechargeRecordService;
|
|
@Autowired
|
private IDivisionRecordService divisionRecordService;
|
|
@Value("${callbackPath}")
|
private String callbackPath;
|
|
|
|
|
|
|
/**
|
* 司机提现操作
|
* @param driverId
|
* @param bankId
|
* @param money
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil withdrawCash(Integer driverId, Integer type, Integer bankId, Double money) throws Exception {
|
Driver driver = driverService.selectById(driverId);
|
if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){
|
return ResultUtil.error("余额不足");
|
}
|
if(type == 2 && (null == driver.getCommission() || driver.getCommission().compareTo(money) < 0)){
|
return ResultUtil.error("收入余额不足");
|
}
|
// if(ToolUtil.isEmpty(driver.getMerchantNumber())){
|
// return ResultUtil.error("请先注册商户号");
|
// }
|
DriverBank driverBank = driverBankService.selectOne(new EntityWrapper<DriverBank>().eq("id", bankId));
|
if(ToolUtil.isEmpty(driverBank)){
|
return ResultUtil.error("请先绑定银行卡");
|
}
|
CashWithdrawal cashWithdrawal = new CashWithdrawal();
|
cashWithdrawal.setType(2);
|
cashWithdrawal.setUserDriverId(driverId);
|
cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
|
cashWithdrawal.setBusinessType(type == 2 ? 11 : 12);
|
cashWithdrawal.setBankId(bankId);
|
cashWithdrawal.setAmount(money);
|
cashWithdrawal.setState(1);
|
cashWithdrawal.setCreateTime(new Date());
|
this.insert(cashWithdrawal);
|
|
//增加记录
|
AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
|
accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
|
accountChangeDetail.setUserType(2);
|
accountChangeDetail.setUserId(driver.getId());
|
accountChangeDetail.setType(1);
|
accountChangeDetail.setChangeType(type == 1 ? 4 : 6);
|
if(type == 1){
|
accountChangeDetail.setOldData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(money)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
accountChangeDetail.setNewData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
}else{
|
accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
driver.setCommission(new BigDecimal(driver.getCommission()).subtract(new BigDecimal(money)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
}
|
accountChangeDetail.setExplain(type == 1 ? "账户余额提现" : "佣金余额提现");
|
driverService.updateById(driver);
|
accountChangeDetailService.saveData(accountChangeDetail);
|
|
// 提现商户转账到银行卡
|
JSONObject result = TransferUtil.transfer(cashWithdrawal.getCode(), new BigDecimal(money), driverBank.getBankNumber(), driverBank.getName(), driverBank.getBankName(), "提现");
|
// if(result.getJSONObject("data").getInteger("state") != 1){
|
// if (type==1) {
|
// driver.setBalance(driver.getBalance() + money);
|
// }else {
|
// driver.setCommission(driver.getCommission() + money);
|
// }
|
// driverService.updateById(driver);
|
// return ResultUtil.error(result.getJSONObject("data").getString("errMsg"));
|
// }else {
|
// cashWithdrawal.setState(2);
|
// }
|
this.updateById(cashWithdrawal);
|
|
return ResultUtil.success();
|
}
|
// @Override
|
// public ResultUtil withdrawCash(Integer driverId, Integer type, Integer bankId, Double money) throws Exception {
|
// Driver driver = driverService.selectById(driverId);
|
// if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){
|
// return ResultUtil.error("余额不足");
|
// }
|
// if(type == 2 && (null == driver.getCommission() || driver.getCommission().compareTo(money) < 0)){
|
// return ResultUtil.error("收入余额不足");
|
// }
|
// if(ToolUtil.isEmpty(driver.getMerchantNumber())){
|
// return ResultUtil.error("请先注册商户号");
|
// }
|
//
|
// CashWithdrawal cashWithdrawal = new CashWithdrawal();
|
// cashWithdrawal.setType(2);
|
// cashWithdrawal.setUserDriverId(driverId);
|
// cashWithdrawal.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
|
// cashWithdrawal.setBusinessType(type == 2 ? 11 : 12);
|
// cashWithdrawal.setBankId(bankId);
|
// cashWithdrawal.setAmount(money);
|
// cashWithdrawal.setState(1);
|
// cashWithdrawal.setCreateTime(new Date());
|
// this.insert(cashWithdrawal);
|
//
|
// //增加记录
|
// AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
|
// accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
|
// accountChangeDetail.setUserType(2);
|
// accountChangeDetail.setUserId(driver.getId());
|
// accountChangeDetail.setType(1);
|
// accountChangeDetail.setChangeType(type == 1 ? 4 : 6);
|
// if(type == 1){
|
// accountChangeDetail.setOldData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
// driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(money)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
// accountChangeDetail.setNewData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
// }else{
|
// accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
// driver.setCommission(new BigDecimal(driver.getCommission()).subtract(new BigDecimal(money)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
// accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
// }
|
// accountChangeDetail.setExplain(type == 1 ? "账户余额提现" : "佣金余额提现");
|
// driverService.updateById(driver);
|
// accountChangeDetailService.saveData(accountChangeDetail);
|
//
|
//
|
// if(type == 1){//余额提现,调用分账接口 -->确认收货--->提现
|
// List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2)
|
// .eq("userId", driver.getId()).eq("payType", 1).eq("payStatus", 2).gt("surplusDividedAmount", 0));
|
// for (RechargeRecord rechargeRecord : rechargeRecords) {
|
// Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
|
// if(surplusDividedAmount.compareTo(money) >= 0){//够分账
|
// ResultUtil fenzhang = fenzhang(driver, rechargeRecord, cashWithdrawal, 3, money);
|
// if(fenzhang.getCode() == 10000){
|
// rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money);
|
// rechargeRecordService.updateById(rechargeRecord);
|
// break;
|
// }else{
|
// return fenzhang;
|
// }
|
// }else{
|
// ResultUtil fenzhang = fenzhang(driver, rechargeRecord, cashWithdrawal, 3, surplusDividedAmount);
|
// if(fenzhang.getCode() == 10000){
|
// rechargeRecord.setSurplusDividedAmount(0D);
|
// rechargeRecordService.updateById(rechargeRecord);
|
// money -= surplusDividedAmount;
|
// }else{
|
// return fenzhang;
|
// }
|
// }
|
// }
|
// }else{//佣金提现,直接提现到银行卡
|
// Double finalMoney = money;
|
// new Timer().schedule(new TimerTask() {
|
// @Override
|
// public void run() {
|
// Withdraw withdraw = new Withdraw();
|
// withdraw.setUserId(driver.getMerchantNumber());
|
// withdraw.setAmount(new BigDecimal(finalMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
// withdraw.setOrderName("账户余额提现");
|
// withdraw.setRemark("账户余额提现");
|
// withdraw.setNotifyUrl(callbackPath + "/base/driver/withdrawCashCallback");
|
// withdraw.setParameter1(cashWithdrawal.getId().toString());
|
// TrhRequest<Withdraw> request1 = new TrhRequest();
|
// InterfaceResponse execute = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现)
|
// if("0000".equals(execute.getCode())){
|
// JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
|
// String merOrderId1 = jsonObject1.getString("merOrderId");
|
// Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
|
// if(1 == status){
|
// cashWithdrawal.setOrderNumber(merOrderId1);
|
// cashWithdrawal.setState(2);
|
// CashWithdrawalServiceImpl.this.updateById(cashWithdrawal);
|
// }
|
// if(2 == status){
|
// System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
|
// }
|
// }else{
|
// System.err.println("结算接口异常【提现】:" + execute.getMsg());
|
// }
|
// }
|
// }, 60000);
|
// }
|
// return ResultUtil.success();
|
// }
|
|
|
|
|
|
|
/**
|
* 司机提现,现将支付的订单进行分账
|
* @param driver
|
* @param amount
|
* @param cashWithdrawal
|
* @return
|
*/
|
public ResultUtil fenzhang(Driver driver, Double amount, CashWithdrawal cashWithdrawal, Integer payType){
|
List<RechargeRecord> rechargeRecords = new ArrayList<>();
|
if(payType == 1){//司机充值
|
rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2)
|
.eq("userId", driver.getId()).eq("payType", 1).eq("payStatus", 2).gt("surplusDividedAmount", 0));
|
}
|
if(payType == 2){//平台充值(补贴金额)
|
rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>()
|
.eq("payType", 2).eq("payStatus", 2).gt("surplusDividedAmount", 0));
|
}
|
for (RechargeRecord rechargeRecord : rechargeRecords) {
|
Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
|
if(surplusDividedAmount.compareTo(amount) >= 0){//够分账
|
DivisionRecord divisionRecord = new DivisionRecord();
|
divisionRecord.setUserType(1);
|
divisionRecord.setUserId(driver.getId());
|
divisionRecord.setOrderId(rechargeRecord.getId().longValue());
|
divisionRecord.setSourceType(payType == 1 ? 3 : 2);
|
divisionRecord.setAmount(amount);
|
divisionRecord.setMerchantNumber(driver.getMerchantNumber());
|
divisionRecord.setState(1);
|
divisionRecord.setCreateTime(new Date());
|
divisionRecordService.insert(divisionRecord);
|
|
rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - amount);
|
rechargeRecordService.updateById(rechargeRecord);
|
|
Complete complete = new Complete();
|
complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
|
complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
|
complete.setParameter1(divisionRecord.getId().toString());
|
complete.setParameter2(rechargeRecord.getId() + "_" + cashWithdrawal.getId());
|
//分账方列表
|
List<PamentOrderUser> splitList = new ArrayList<>();
|
PamentOrderUser pamentOrderUser = new PamentOrderUser();
|
pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
|
pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
pamentOrderUser.setSplitType("1");
|
splitList.add(pamentOrderUser);
|
complete.setSplitList(splitList);
|
TrhRequest<Complete> request = new TrhRequest();
|
InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
|
if("0000".equals(execute.getCode())){
|
JSONObject jsonObject = JSON.parseObject(execute.getResult());
|
Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
|
String merOrderId = jsonObject.getString("merOrderId");
|
if(2 == status){
|
System.err.println("司机提现分账失败:" + execute.getMsg());
|
break;
|
}
|
if(1 == status){
|
divisionRecord.setMerOrderId(merOrderId);
|
divisionRecord.setPayTime(new Date());
|
divisionRecord.setState(2);
|
divisionRecordService.updateById(divisionRecord);
|
//间隔10秒开始调用确认收货后开始提现
|
|
new Timer().schedule(new TimerTask() {//确认收货和提现
|
@Override
|
public void run() {
|
confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
|
}
|
}, 60000);
|
}
|
}else{
|
System.err.println("司机提现分账处理异常 :" + execute.getMsg());
|
return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
|
}
|
}else{//不够分账
|
DivisionRecord divisionRecord = new DivisionRecord();
|
divisionRecord.setUserType(1);
|
divisionRecord.setUserId(driver.getId());
|
divisionRecord.setOrderId(rechargeRecord.getId().longValue());
|
divisionRecord.setSourceType(payType == 1 ? 3 : 2);
|
divisionRecord.setAmount(surplusDividedAmount);
|
divisionRecord.setMerchantNumber(driver.getMerchantNumber());
|
divisionRecord.setState(1);
|
divisionRecord.setCreateTime(new Date());
|
divisionRecordService.insert(divisionRecord);
|
|
rechargeRecord.setSurplusDividedAmount(0D);
|
rechargeRecordService.updateById(rechargeRecord);
|
|
Complete complete = new Complete();
|
complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
|
complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
|
complete.setParameter1(divisionRecord.getId().toString());
|
//分账方列表
|
List<PamentOrderUser> splitList = new ArrayList<>();
|
PamentOrderUser pamentOrderUser = new PamentOrderUser();
|
pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
|
pamentOrderUser.setSplitAmount(new BigDecimal(surplusDividedAmount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
pamentOrderUser.setSplitType("1");
|
splitList.add(pamentOrderUser);
|
complete.setSplitList(splitList);
|
TrhRequest<Complete> request = new TrhRequest();
|
InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
|
if("0000".equals(execute.getCode())){
|
JSONObject jsonObject = JSON.parseObject(execute.getResult());
|
Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
|
String merOrderId = jsonObject.getString("merOrderId");
|
if(2 == status){
|
System.err.println("司机提现分账失败:" + execute.getMsg());
|
break;
|
}
|
if(1 == status){
|
divisionRecord.setMerOrderId(merOrderId);
|
divisionRecord.setPayTime(new Date());
|
divisionRecord.setState(2);
|
divisionRecordService.updateById(divisionRecord);
|
|
//间隔10秒开始调用确认收货后开始提现
|
new Timer().schedule(new TimerTask() {//确认收货和提现
|
@Override
|
public void run() {
|
confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
|
}
|
}, 60000);
|
}
|
}else{
|
System.err.println("司机提现分账处理异常 :" + execute.getMsg());
|
return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
|
}
|
amount -= surplusDividedAmount;
|
}
|
}
|
return ResultUtil.success();
|
}
|
|
|
|
public ResultUtil fenzhang(Driver driver, RechargeRecord rechargeRecord, CashWithdrawal cashWithdrawal, Integer sourceType, Double amount){
|
DivisionRecord divisionRecord = new DivisionRecord();
|
divisionRecord.setUserType(1);
|
divisionRecord.setUserId(driver.getId());
|
divisionRecord.setOrderId(rechargeRecord.getId().longValue());
|
divisionRecord.setSourceType(sourceType);
|
divisionRecord.setAmount(amount);
|
divisionRecord.setMerchantNumber(driver.getMerchantNumber());
|
divisionRecord.setState(1);
|
divisionRecord.setCreateTime(new Date());
|
divisionRecordService.insert(divisionRecord);
|
|
Complete complete = new Complete();
|
complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
|
complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
|
complete.setParameter1(divisionRecord.getId().toString());
|
//分账方列表
|
List<PamentOrderUser> splitList = new ArrayList<>();
|
PamentOrderUser pamentOrderUser = new PamentOrderUser();
|
pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
|
pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
pamentOrderUser.setSplitType("1");
|
splitList.add(pamentOrderUser);
|
complete.setSplitList(splitList);
|
TrhRequest<Complete> request = new TrhRequest();
|
InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
|
if("0000".equals(execute.getCode())){
|
JSONObject jsonObject = JSON.parseObject(execute.getResult());
|
Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
|
String merOrderId = jsonObject.getString("merOrderId");
|
if(2 == status){
|
System.err.println("司机提现分账失败:" + execute.getMsg());
|
return ResultUtil.error("司机提现分账失败 :" + execute.getMsg());
|
}
|
if(1 == status){
|
divisionRecord.setMerOrderId(merOrderId);
|
divisionRecord.setPayTime(new Date());
|
divisionRecord.setState(2);
|
divisionRecordService.updateById(divisionRecord);
|
|
//间隔10秒开始调用确认收货后开始提现
|
new Timer().schedule(new TimerTask() {//确认收货和提现
|
@Override
|
public void run() {
|
confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
|
}
|
}, 60000);
|
}
|
}else{
|
System.err.println("司机提现分账处理异常 :" + execute.getMsg());
|
return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
|
}
|
return ResultUtil.success();
|
}
|
|
|
|
|
/**
|
* 分账后的确认收货和提现操作
|
* @param driver
|
* @param rechargeRecord
|
* @param divisionRecord
|
* @param cashWithdrawal
|
*/
|
public void confirmReceipt(Driver driver, RechargeRecord rechargeRecord, DivisionRecord divisionRecord, CashWithdrawal cashWithdrawal){
|
Receive receive = new Receive();
|
receive.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
|
receive.setAsynMerOrderId(divisionRecord.getMerOrderId());
|
receive.setRcvAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
List<ReceiveUser> splitList = new ArrayList<>();
|
ReceiveUser receiveUser = new ReceiveUser();
|
receiveUser.setSplitUserId(driver.getMerchantNumber());
|
receiveUser.setRcvSplitAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
splitList.add(receiveUser);
|
receive.setSplitList(splitList);
|
TrhRequest<Receive> request = new TrhRequest();
|
InterfaceResponse execute1 = request.execute(receive, Receive.SERVICE_CODE);//确认收货
|
if("0000".equals(execute1.getCode())){
|
JSONObject jsonObject = JSON.parseObject(execute1.getResult());
|
String merOrderId = jsonObject.getString("merOrderId");
|
if(ToolUtil.isNotEmpty(merOrderId)){
|
new Timer().schedule(new TimerTask() {
|
@Override
|
public void run() {
|
Withdraw withdraw = new Withdraw();
|
withdraw.setUserId(driver.getMerchantNumber());
|
withdraw.setAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
|
withdraw.setOrderName("账户余额提现");
|
withdraw.setRemark("账户余额提现");
|
withdraw.setNotifyUrl(callbackPath + "/base/driver/withdrawCashCallback");
|
withdraw.setParameter1(cashWithdrawal.getId().toString());
|
TrhRequest<Withdraw> request1 = new TrhRequest();
|
InterfaceResponse execute = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现)
|
if("0000".equals(execute.getCode())){
|
JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
|
String merOrderId1 = jsonObject1.getString("merOrderId");
|
Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
|
if(1 == status){
|
cashWithdrawal.setOrderNumber(merOrderId1);
|
cashWithdrawal.setState(2);
|
CashWithdrawalServiceImpl.this.updateById(cashWithdrawal);
|
}
|
if(2 == status){
|
System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
|
}
|
}else{
|
System.err.println("结算接口异常【提现】:" + execute.getMsg());
|
}
|
}
|
}, 60000);
|
}
|
}else{
|
System.err.println("分账确认收货异常【提现】:" + execute1.getMsg());
|
}
|
}
|
|
|
|
|
|
/**
|
* 提现分账的异步回调
|
* @param interfaceResponse
|
*/
|
@Override
|
public void withdrawCashFZCallback(InterfaceResponse interfaceResponse) {
|
if("0000".equals(interfaceResponse.getCode())){
|
JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
|
Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
|
String merOrderId = jsonObject.getString("merOrderId");
|
if(2 == status){
|
System.err.println("司机提现分账失败:" + interfaceResponse.getMsg());
|
return;
|
}
|
if(1 == status){
|
String parameter1 = jsonObject.getString("parameter1");
|
String parameter2 = jsonObject.getString("parameter2");
|
DivisionRecord divisionRecord = divisionRecordService.selectById(parameter1);
|
if(divisionRecord.getState() == 2){
|
return;
|
}
|
divisionRecord.setMerOrderId(merOrderId);
|
divisionRecord.setPayTime(new Date());
|
divisionRecord.setState(2);
|
divisionRecordService.updateById(divisionRecord);
|
Driver driver = driverService.selectById(divisionRecord.getUserId());
|
String[] s = parameter2.split("_");
|
RechargeRecord rechargeRecord = rechargeRecordService.selectById(s[0]);
|
CashWithdrawal cashWithdrawal = this.selectById(s[1]);
|
|
//间隔10秒开始调用确认收货后开始提现
|
new Timer().schedule(new TimerTask() {//确认收货和提现
|
@Override
|
public void run() {
|
confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
|
}
|
}, 60000);
|
}
|
}else{
|
System.err.println("司机提现分账异常:" + interfaceResponse.getMsg());
|
}
|
}
|
|
|
/**
|
* 提现确认收货后的结算回调
|
* @param interfaceResponse
|
*/
|
@Override
|
public void withdrawCashCallback(InterfaceResponse interfaceResponse) {
|
if("0000".equals(interfaceResponse.getCode())){
|
JSONObject jsonObject1 = JSON.parseObject(interfaceResponse.getResult());
|
String merOrderId1 = jsonObject1.getString("merOrderId");
|
Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
|
if(1 == status){
|
String parameter1 = jsonObject1.getString("parameter1");
|
CashWithdrawal cashWithdrawal = this.selectById(parameter1);
|
cashWithdrawal.setOrderNumber(merOrderId1);
|
cashWithdrawal.setState(2);
|
this.updateById(cashWithdrawal);
|
}
|
if(2 == status){
|
System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
|
}
|
}else{
|
System.err.println("结算接口异常【提现】:" + interfaceResponse.getMsg());
|
}
|
}
|
|
|
|
|
}
|