| | |
| | | @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() < money){ |
| | | if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){ |
| | | return ResultUtil.error("余额不足"); |
| | | } |
| | | if(type == 2 && null == driver.getCommission() || driver.getCommission() < money){ |
| | | if(type == 2 && (null == driver.getCommission() || driver.getCommission().compareTo(money) < 0)){ |
| | | return ResultUtil.error("收入余额不足"); |
| | | } |
| | | if(ToolUtil.isEmpty(driver.getMerchantNumber())){ |
| | |
| | | |
| | | |
| | | if(type == 1){//余额提现,调用分账接口 -->确认收货--->提现 |
| | | fenzhang(driver, money, cashWithdrawal, 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{//佣金提现,直接提现到银行卡 |
| | | Withdraw withdraw = new Withdraw(); |
| | | withdraw.setUserId(driver.getMerchantNumber()); |
| | |
| | | divisionRecord.setUserId(driver.getId()); |
| | | divisionRecord.setOrderId(rechargeRecord.getId().longValue()); |
| | | divisionRecord.setSourceType(payType == 1 ? 3 : 2); |
| | | divisionRecord.setAmount(surplusDividedAmount); |
| | | 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()); |
| | |
| | | }, 15000); |
| | | } |
| | | }else{ |
| | | System.err.println("司机提现分账异常:" + execute.getMsg()); |
| | | System.err.println("司机提现分账处理异常 :" + execute.getMsg()); |
| | | return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg()); |
| | | } |
| | | break; |
| | | }else{//不够分账 |
| | | DivisionRecord divisionRecord = new DivisionRecord(); |
| | | divisionRecord.setUserType(1); |
| | |
| | | divisionRecord.setState(1); |
| | | divisionRecord.setCreateTime(new Date()); |
| | | divisionRecordService.insert(divisionRecord); |
| | | |
| | | rechargeRecord.setSurplusDividedAmount(0D); |
| | | rechargeRecordService.updateById(rechargeRecord); |
| | | |
| | | Complete complete = new Complete(); |
| | | complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber()); |
| | |
| | | }, 15000); |
| | | } |
| | | }else{ |
| | | System.err.println("司机提现分账异常:" + execute.getMsg()); |
| | | break; |
| | | System.err.println("司机提现分账处理异常 :" + execute.getMsg()); |
| | | return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg()); |
| | | } |
| | | amount -= surplusDividedAmount; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | 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(String.valueOf(Double.valueOf(amount * 100).intValue())); |
| | | 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); |
| | | } |
| | | }, 15000); |
| | | } |
| | | }else{ |
| | | System.err.println("司机提现分账处理异常 :" + execute.getMsg()); |
| | | return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg()); |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 分账后的确认收货和提现操作 |
| | | * @param driver |