| | |
| | | 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.AccountChangeDetail; |
| | | import com.supersavedriving.driver.modular.system.model.CashWithdrawal; |
| | | import com.supersavedriving.driver.modular.system.model.Driver; |
| | | import com.supersavedriving.driver.modular.system.service.IAccountChangeDetailService; |
| | | import com.supersavedriving.driver.modular.system.service.ICashWithdrawalService; |
| | | import com.supersavedriving.driver.modular.system.service.IDriverService; |
| | | 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.PayMoneyUtil; |
| | | import com.supersavedriving.driver.modular.system.util.ResultUtil; |
| | | import com.supersavedriving.driver.modular.system.util.UUIDUtil; |
| | | 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.Date; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | |
| | | @Autowired |
| | | private IAccountChangeDetailService accountChangeDetailService; |
| | | |
| | | @Autowired |
| | | private IRechargeRecordService rechargeRecordService; |
| | | |
| | | @Autowired |
| | | private IDivisionRecordService divisionRecordService; |
| | | |
| | | @Value("${callbackPath}") |
| | | private String callbackPath; |
| | | |
| | | |
| | | |
| | | |
| | |
| | | /** |
| | | * 司机提现操作 |
| | | * @param driverId |
| | | * @param type |
| | | * @param bankId |
| | | * @param money |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public ResultUtil withdrawCash(Integer driverId, Integer type, Double money) throws Exception { |
| | | 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() < money)){ |
| | | return ResultUtil.error("账户余额不足"); |
| | | if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){ |
| | | return ResultUtil.error("余额不足"); |
| | | } |
| | | if(type == 2 && (null == driver.getCommission() || driver.getCommission() < money)){ |
| | | 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(3)); |
| | | cashWithdrawal.setBusinessType(type == 1 ? 12 : 11); |
| | | 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()); |
| | |
| | | |
| | | //增加记录 |
| | | AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); |
| | | accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); |
| | | 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(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); |
| | | driver.setBalance(driver.getBalance() - money); |
| | | accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); |
| | | accountChangeDetail.setExplain("账户余额提现"); |
| | | 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()); |
| | | } |
| | | if(type == 2){ |
| | | accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); |
| | | driver.setCommission(driver.getCommission() - money); |
| | | accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); |
| | | accountChangeDetail.setExplain("佣金余额提现"); |
| | | } |
| | | accountChangeDetail.setExplain(type == 1 ? "账户余额提现" : "佣金余额提现"); |
| | | driverService.updateById(driver); |
| | | accountChangeDetailService.saveData(accountChangeDetail); |
| | | |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | String outDetailNo = sdf.format(new Date()) + cashWithdrawal.getId(); |
| | | String s = payMoneyUtil.weixinTransferMoney(outDetailNo, money, driver.getOpenid(), driver.getName(), "【超省新代驾】提现付款!"); |
| | | if(ToolUtil.isEmpty(s)){ |
| | | return ResultUtil.error("提现异常,请联系管理员"); |
| | | 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); |
| | | cashWithdrawal.setOrderNumber(s); |
| | | this.updateById(cashWithdrawal); |
| | | 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()); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |