From 7a9e05846c5e37f7278f242857056d0623532379 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 16 六月 2023 20:17:32 +0800 Subject: [PATCH] 修改bug和功能优化 --- driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java | 104 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 96 insertions(+), 8 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java index 5500602..618cbaf 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java @@ -61,10 +61,10 @@ @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())){ @@ -104,7 +104,30 @@ 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()); @@ -164,11 +187,14 @@ 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()); @@ -208,9 +234,9 @@ }, 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); @@ -222,6 +248,9 @@ divisionRecord.setState(1); divisionRecord.setCreateTime(new Date()); divisionRecordService.insert(divisionRecord); + + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); Complete complete = new Complete(); complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber()); @@ -260,8 +289,8 @@ }, 15000); } }else{ - System.err.println("司机提现分账异常:" + execute.getMsg()); - break; + System.err.println("司机提现分账处理异常 :" + execute.getMsg()); + return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg()); } amount -= surplusDividedAmount; } @@ -270,6 +299,65 @@ } + + 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 -- Gitblit v1.7.1