From e0faebd41278c2e9389a26f39b2bfff63d68103d Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 02 六月 2023 23:36:08 +0800 Subject: [PATCH] 更新部分代码 --- user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java | 844 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 616 insertions(+), 228 deletions(-) diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java index 82dae7f..5e7ddfb 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java @@ -104,6 +104,9 @@ @Autowired private IDivisionRecordService divisionRecordService; + @Autowired + private IRechargeRecordService rechargeRecordService; + @Value("${wx.appletsAppid}") private String appletsAppid; @@ -905,7 +908,7 @@ paymentOrderGood.setGoodsName("服务费"); goodsDetail.add(paymentOrderGood); paymentOrder.setGoodsDetail(goodsDetail); - paymentOrder.setFrontUrl(""); + paymentOrder.setFrontUrl(callbackPath + "/base/order/orderPayCallback"); paymentOrder.setNotifyUrl(callbackPath + "/base/order/orderPayCallback"); paymentOrder.setParameter1(order.getId().toString()); @@ -922,25 +925,56 @@ if("0".equals(status)){ return ResultUtil.error("处理中"); } + String merOrderId = jsonObject.getString("merOrderId"); String payCode = jsonObject.getString("payCode"); this.updateById(order); - new Thread(new Runnable() { - @Override - public void run() { - QueryOrder queryOrder = new QueryOrder(); - /** - * 原请求订单号(必填) 字段长度最长:32位 - */ - queryOrder.setOriginalMerOrderId("202108310351001"); - /** - * 1:支付查询 2:退款查询 3:确认收货查询 4:结算查询 5:充值查询 6:转账查询 7:异步分账查询(必填) 字段长度最长:1位 - */ - queryOrder.setQueryType("1"); - TrhRequest<QueryOrder> request = new TrhRequest(); - request.execute(queryOrder, QueryOrder.SERVICE_CODE); - } - }).start(); + if(ToolUtil.isNotEmpty(payCode)){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Order order1 = OrderServiceImpl.this.selectById(order.getId()); + if(order1.getState() != 107){ + return; + } + QueryOrder queryOrder = new QueryOrder(); + queryOrder.setOriginalMerOrderId(merOrderId); + queryOrder.setQueryType("1"); + TrhRequest<QueryOrder> request = new TrhRequest(); + InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE); + if("0000".equals(execute1.getCode())){ + JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); + String status1 = jsonObject1.getString("status"); + if("0".equals(status1)){//待处理 + Thread.sleep(wait); + num++; + } + if("1".equals(status1)){//成功 + String merOrderId = jsonObject1.getString("merOrderId"); + ResultUtil resultUtil = orderPayCallback(order1.getId().toString(), merOrderId); + + break; + } + if("2".equals(status1) || 10 == num){//失败 + break; + } + }else{ + Thread.sleep(wait); + num++; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } return ResultUtil.success(payCode); } @@ -1068,7 +1102,6 @@ if(0 < payMoney){//还需要调起微信支付 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String out_trade_no = sdf.format(new Date()) + order.getId(); -// ResultUtil weixinpay = payMoneyUtil.weixinpay("代驾服务费", "", out_trade_no, payMoney.toString(), "/base/order/orderPayCallback", "JSAPI", appUser.getOpenid()); PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setBizOrderId(out_trade_no); @@ -1085,9 +1118,10 @@ paymentOrderGood.setGoodsName("服务费"); goodsDetail.add(paymentOrderGood); paymentOrder.setGoodsDetail(goodsDetail); - paymentOrder.setFrontUrl(""); + paymentOrder.setFrontUrl(callbackPath + "/base/order/orderPayCallback"); paymentOrder.setNotifyUrl(callbackPath + "/base/order/orderPayCallback"); paymentOrder.setParameter1(order.getId().toString()); + paymentOrder.setParameter2(payMoney.toString()); TrhRequest<PaymentOrder> request = new TrhRequest(); InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE); @@ -1102,87 +1136,67 @@ if("0".equals(status)){ return ResultUtil.error("处理中"); } + String merOrderId = jsonObject.getString("merOrderId"); String payCode = jsonObject.getString("payCode"); this.updateById(order); + + if(ToolUtil.isNotEmpty(payCode)){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Order order1 = OrderServiceImpl.this.selectById(order.getId()); + if(order1.getState() != 107){ + return; + } + QueryOrder queryOrder = new QueryOrder(); + queryOrder.setOriginalMerOrderId(merOrderId); + queryOrder.setQueryType("1"); + TrhRequest<QueryOrder> request = new TrhRequest(); + InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE); + if("0000".equals(execute1.getCode())){ + JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); + String status1 = jsonObject1.getString("status"); + if("0".equals(status1)){//待处理 + Thread.sleep(wait); + num++; + } + if("1".equals(status1)){//成功 + String merOrderId = jsonObject1.getString("merOrderId"); + ResultUtil resultUtil = orderPayCallback(order1.getId().toString(), merOrderId); + + break; + } + if("2".equals(status1) || 10 == num){//失败 + Double m = accountChangeDetail.getOldData() - accountChangeDetail.getNewData(); + AppUser appUser1 = appUserService.selectById(order1.getUserId()); + appUser1.setAccountBalance(appUser1.getAccountBalance() + m); + appUserService.updateById(appUser1) + accountChangeDetailService.deleteById(accountChangeDetail.getId()); + break; + } + }else{ + Thread.sleep(wait); + num++; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + + + return ResultUtil.success(payCode); - // TODO: 2023/5/18 取消支付后需要处理优惠券数据回退 -// -// -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// int num = 1; -// int wait = 0; -// while (num <= 10){ -// int min = 5000; -// wait += (min * num); -// Order order1 = OrderServiceImpl.this.selectById(order.getId()); -// if(order1.getState() != 107){ -// return; -// } -// -// /** -// * SUCCESS--支付成功 -// * REFUND--转入退款 -// * NOTPAY--未支付 -// * CLOSED--已关闭 -// * REVOKED--已撤销(刷卡支付) -// * USERPAYING--用户支付中 -// * PAYERROR--支付失败(其他原因,如银行返回失败) -// * ACCEPT--已接收,等待扣款 -// */ -// ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(out_trade_no, ""); -// if(resultUtil.getCode() == 200){ -// Map<String, String> map = resultUtil.getData(); -// String trade_type = map.get("trade_type"); -// String trade_state = map.get("trade_state"); -// String transaction_id = map.get("transaction_id"); -// if("REFUND".equals(trade_state) || "NOTPAY".equals(trade_state) || "CLOSED".equals(trade_state) || "REVOKED".equals(trade_state) || "PAYERROR".equals(trade_state)){ -// AccountChangeDetail accountChangeDetail1 = accountChangeDetailService.selectById(accountChangeDetail.getId()); -// AppUser appUser1 = appUserService.selectById(accountChangeDetail1.getUserId()); -// Double b = accountChangeDetail1.getOldData() - accountChangeDetail1.getNewData(); -// appUser1.setAccountBalance(appUser1.getAccountBalance() + b); -// appUserService.updateById(appUser1); -// -// accountChangeDetailService.deleteById(accountChangeDetail.getId()); -// return; -// } -// if("SUCCESS".equals(trade_state)){ -// order1.setPayTime(new Date()); -// order1.setState(108); -// order1.setOrderNo(transaction_id); -// OrderServiceImpl.this.updateById(order1); -// -// //处理抽成及收入 -// saveCommission(order1); -// return; -// } -// if("USERPAYING".equals(trade_state) || "ACCEPT".equals(trade_state)){ -// Thread.sleep(wait); -// num++; -// } -// }else{ -// Thread.sleep(wait); -// num++; -// } -// if(10 == num){ -// AccountChangeDetail accountChangeDetail1 = accountChangeDetailService.selectById(accountChangeDetail.getId()); -// AppUser appUser1 = appUserService.selectById(accountChangeDetail1.getUserId()); -// Double b = accountChangeDetail1.getOldData() - accountChangeDetail1.getNewData(); -// appUser1.setAccountBalance(appUser1.getAccountBalance() + b); -// appUserService.updateById(appUser1); -// -// accountChangeDetailService.deleteById(accountChangeDetail.getId()); -// } -// } -// }catch (Exception e){ -// e.printStackTrace(); -// } -// } -// }).start(); -// return weixinpay; + } // order.setPayTime(new Date()); // this.updateById(order); @@ -1218,135 +1232,6 @@ pushOrderInfoWarpper.setState(order.getState()); pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper); } - - //支付成功---->异步分账----->10s钟后再进行确认收货 - //确认收货后才能进行提现(结算接口) - //异步分账 - List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("orderId", order.getId())); - Complete complete = new Complete(); - complete.setOriginalMerOrderId(transaction_id); - complete.setNotifyUrl(callbackPath + "/base/order/ledgerCallback"); - List<PamentOrderUser> splitList = new ArrayList<>(); - for (Revenue revenue : revenues) { - if(revenue.getUserType() == 2){//司机 - Driver driver = driverService.selectById(revenue.getUserId()); - PamentOrderUser pamentOrderUser = new PamentOrderUser(); - pamentOrderUser.setSplitUserId(driver.getMerchantNumber()); - pamentOrderUser.setSplitAmount(revenue.getAmount().toString()); - pamentOrderUser.setSplitType("2"); - splitList.add(pamentOrderUser); - - DivisionRecord divisionRecord = new DivisionRecord(); - divisionRecord.setUserType(1); - divisionRecord.setUserId(revenue.getUserId()); - divisionRecord.setOrderId(order.getId()); - divisionRecord.setMerOrderId(transaction_id); - divisionRecord.setSourceType(1); - divisionRecord.setAmount(revenue.getAmount()); - divisionRecord.setMerchantNumber(driver.getMerchantNumber()); - divisionRecord.setState(1); - divisionRecord.setCreateTime(new Date()); - divisionRecordService.insert(divisionRecord); - } - if(revenue.getUserType() == 3){//代理商 - Agent agent = agentService.selectById(revenue.getUserId()); - PamentOrderUser pamentOrderUser = new PamentOrderUser(); - pamentOrderUser.setSplitUserId(agent.getMerchantNumber()); - pamentOrderUser.setSplitAmount(revenue.getAmount().toString()); - pamentOrderUser.setSplitType("2"); - splitList.add(pamentOrderUser); - - DivisionRecord divisionRecord = new DivisionRecord(); - divisionRecord.setUserType(2); - divisionRecord.setUserId(revenue.getUserId()); - divisionRecord.setOrderId(order.getId()); - divisionRecord.setMerOrderId(transaction_id); - divisionRecord.setSourceType(1); - divisionRecord.setAmount(revenue.getAmount()); - divisionRecord.setMerchantNumber(agent.getMerchantNumber()); - divisionRecord.setState(1); - divisionRecord.setCreateTime(new Date()); - divisionRecordService.insert(divisionRecord); - } - - } - complete.setSplitList(splitList); - TrhRequest<Complete> request = new TrhRequest(); - InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE); - if(!"0000".equals(execute.getCode())){ - return ResultUtil.error(execute.getMsg()); - } - JSONObject jsonObject = JSON.parseObject(execute.getResult()); - String status = jsonObject.getString("status"); - if("2".equals(status)){ - return ResultUtil.error("失败"); - } - if("0".equals(status)){ - return ResultUtil.error("处理中"); - } - - //使用优惠券的情况,通过转账接口将优惠券的收入转到司机电子账簿 - if(null != order.getCouponId()){ - List<PlatformRechargeRecord> platformRechargeRecords = platformRechargeRecordService.selectList(new EntityWrapper<PlatformRechargeRecord>().eq("state", 2).last(" and balance > 0 order by payTime")); - Double discountedPrice = order.getDiscountedPrice(); - Driver driver = driverService.selectById(order.getDriverId()); - - UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId()); - Coupon coupon = couponService.selectById(userToCoupon.getCouponId()); - AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); - accountChangeDetail.setUserType(2); - accountChangeDetail.setUserId(order.getDriverId()); - accountChangeDetail.setCreateTime(new Date()); - accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); - accountChangeDetail.setType(1); - accountChangeDetail.setChangeType(7); - accountChangeDetail.setOrderId(order.getId()); - accountChangeDetail.setExplain("优惠券收入"); - driver.setCouponBalance(driver.getCouponBalance() + coupon.getCouponPreferentialAmount()); - accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); - driverService.updateById(driver); - accountChangeDetailService.insert(accountChangeDetail); - - - for (PlatformRechargeRecord platformRechargeRecord : platformRechargeRecords) { - if(discountedPrice == 0){ - break; - } - - if(platformRechargeRecord.getBalance().compareTo(discountedPrice) >= 0){ - discountedPrice = 0D; - platformRechargeRecord.setBalance(platformRechargeRecord.getBalance() - discountedPrice); - platformRechargeRecordService.updateById(platformRechargeRecord); - }else{ - - } - - Transfer transfer = new Transfer(); - transfer.setDepositMerOrderId("6831518911582834611"); - transfer.setToUserId(driver.getMerchantNumber()); - transfer.setAmount(discountedPrice.toString()); - transfer.setOrderName(""); - transfer.setNotifyUrl(""); - transfer.setParameter1(order.getId().toString()); - - TrhRequest<Transfer> request1 = new TrhRequest(); - InterfaceResponse execute1 = request1.execute(transfer, Transfer.SERVICE_CODE); - if(!"0000".equals(execute1.getCode())){ - return ResultUtil.error(execute1.getMsg()); - } - JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); - String status1 = jsonObject1.getString("status"); - if("2".equals(status1)){ - return ResultUtil.error("失败"); - } - if("0".equals(status1)){ - return ResultUtil.error("处理中"); - } - } - } - - return ResultUtil.success(); } @@ -1443,7 +1328,7 @@ //司机分佣和司机推荐用户首单奖励都在平台的抽佣中扣除,剩余的为平台抽佣。 Driver driver = driverService.selectById(order.getDriverId()); AppUser appUser = appUserService.selectById(order.getUserId()); - Double payMoney = order.getPayMoney(); + Double payMoney = order.getPayMoney();//todo 司机订单收入归并到佣金中一起提现 SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3)); if(null != systemConfig){ JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); @@ -1485,6 +1370,30 @@ revenue.setAmount(num1); revenue.setCreateTime(new Date()); revenueService.insert(revenue); + + //补贴中分账 + Double num1_ = num1; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num1_) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num1_, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num1_); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num1_ -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } } num3 = (num3 >= num1 ? num3 - num1 : 0); } @@ -1523,6 +1432,31 @@ accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); + + //补贴中分账 + Double num5_ = num5; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num5_) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num5_, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num5_); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num5_ -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + num3 = (num3 >= num5 ? num3 - num5 : 0); } num6 = (num3 >= num6 ? num6 : num3); @@ -1549,6 +1483,32 @@ accountChangeDetail.setNewData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission()); driverService.updateById(driver2); accountChangeDetailService.saveData(accountChangeDetail); + + //补贴中分账 + Double num6_ = num6; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num6_) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), num6_, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num6_); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num6_ -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + + num3 = (num3 >= num6 ? num3 - num6 : 0); } num7 = (num3 >= num7 ? num7 : num3); @@ -1575,6 +1535,31 @@ accountChangeDetail.setNewData(driver3.getBalance() + driver3.getBackgroundBalance() + driver3.getCouponBalance() + driver3.getCommission()); driverService.updateById(driver3); accountChangeDetailService.saveData(accountChangeDetail); + + //补贴中分账 + Double num7_ = num7; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num7_) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), num7_, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num7_); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num7_ -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + num3 = (num3 >= num7 ? num3 - num7 : 0); } }else{ @@ -1604,6 +1589,31 @@ accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); + + //补贴中分账 + Double num3_1 = num3_; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num3_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num3_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num3_1 -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + num3 = (num3 >= num3_ ? num3 - num3_ : 0); } num4 = (num3 >= num4 ? num4 : num3); @@ -1630,6 +1640,31 @@ accountChangeDetail.setNewData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission()); driverService.updateById(driver2); accountChangeDetailService.saveData(accountChangeDetail); + + //补贴中分账 + Double num4_1 = num4; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num4_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), num4_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num4_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num4_1 -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + num3 = (num3 >= num4 ? num3 - num4 : 0); } } @@ -1659,6 +1694,31 @@ accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); + + //补贴中分账 + Double num2_1 = num2_; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num2_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num2_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num2_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num2_1 -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + num3 = (num3 >= num2_ ? num3 - num2_ : 0); } } @@ -1673,6 +1733,32 @@ revenue.setAmount(num3); revenue.setCreateTime(new Date()); revenueService.insert(revenue); + + Agent agent = agentService.selectById(driver.getAgentId()); + Double num3_1 = num3; + + //补贴中分账 + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num3_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), num3_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + num3_1 -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } } } } @@ -1683,7 +1769,7 @@ revenue.setUserType(2); revenue.setUserId(driver.getId()); revenue.setOrderId(order.getId()); - revenue.setAmount(payMoney + order.getDiscountedPrice()); + revenue.setAmount(payMoney + order.getDiscountedPrice() + order.getDiscountAmount()); revenue.setCreateTime(new Date()); revenueService.insert(revenue); @@ -1697,17 +1783,319 @@ accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); accountChangeDetail.setExplain("订单收入"); accountChangeDetail.setCreateTime(new Date()); - driver.setBalance(driver.getBalance() + payMoney); + driver.setCommission(driver.getCommission() + payMoney + order.getDiscountedPrice() + order.getDiscountAmount()); if(null != order.getCouponId()){ driver.setCouponBalance(driver.getCouponBalance() + order.getDiscountedPrice()); + //补贴中分账 + Double discountedPrice = order.getDiscountedPrice(); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(order.getDiscountedPrice()) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + discountedPrice -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + + } + if(null != order.getDiscountAmount() && 0 < order.getDiscountAmount()){ + driver.setCouponBalance(driver.getCouponBalance() + order.getDiscountAmount()); + //补贴中分账 + Double discountedPrice = order.getDiscountAmount(); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(order.getDiscountAmount()) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + discountedPrice -= surplusDividedAmount; + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } } accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); driverService.updateById(driver); accountChangeDetailService.saveData(accountChangeDetail); + + //支付成功---->异步分账----->10s钟后再进行确认收货 + //确认收货后才能进行提现(结算接口) + //异步分账 + + if(order.getPayType() == 1){//微信支付 + //分账司机收入 + fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), payMoney, 1); + + if(payMoney.compareTo(order.getPayMoney()) < 0){//司机获取部分需将剩余的分给平台 + Double money = order.getPayMoney() - payMoney + order.getDiscountedPrice(); + fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), money, 1); + } + } + if(order.getPayType() == 2){//余额支付(使用用户的充值数据分账) + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId()) + .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(payMoney) >= 0){ + //分账司机收入 + ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), payMoney, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - payMoney); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + payMoney -= surplusDividedAmount; + ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + + + + if(payMoney.compareTo(order.getPayMoney()) < 0){//司机获取部分需将剩余的分给平台 + Double money = order.getPayMoney() - payMoney; + + List<RechargeRecord> rechargeRecords1 = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId()) + .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords1) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(money) >= 0){ + //分账司机收入 + ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), money, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + payMoney -= surplusDividedAmount; + ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + } + } + + if(order.getPayType() == 4){//微信+余额(使用用户的充值数据分账) + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId()) + .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(payMoney) >= 0){ + //分账司机收入 + ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), payMoney, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - payMoney); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + payMoney -= surplusDividedAmount; + ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + + + + if(payMoney.compareTo(order.getPayMoney()) < 0){//司机获取部分需将剩余的分给平台 + Double money = order.getPayMoney() - payMoney; + + List<RechargeRecord> rechargeRecords1 = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId()) + .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords1) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(money) >= 0){ + //分账司机收入 + ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), money, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + payMoney -= surplusDividedAmount; + ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + }else{ + break; + } + } + } + } + } + + } /** + * 分账操作 + * @param amount + */ + public ResultUtil fengzhang(Integer userType, Integer id, String merchantNumber, Long orderId, String merOrderId, Double amount, Integer sourceType){ + DivisionRecord divisionRecord = new DivisionRecord(); + divisionRecord.setUserType(userType); + divisionRecord.setUserId(id); + divisionRecord.setOrderId(orderId); + divisionRecord.setSourceType(sourceType); + divisionRecord.setAmount(amount); + divisionRecord.setMerchantNumber(merchantNumber); + divisionRecord.setState(1); + divisionRecord.setCreateTime(new Date()); + divisionRecordService.insert(divisionRecord); + + Complete complete = new Complete(); + complete.setOriginalMerOrderId(merOrderId); + complete.setNotifyUrl(callbackPath + "/base/order/ledgerCallback"); + complete.setParameter1(divisionRecord.getId().toString()); + //分账方列表 + List<PamentOrderUser> splitList = new ArrayList<>(); + PamentOrderUser pamentOrderUser = new PamentOrderUser(); + pamentOrderUser.setSplitUserId(merchantNumber); + pamentOrderUser.setSplitAmount(amount.toString()); + 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 merOrderId1 = jsonObject.getString("merOrderId"); + if(2 == status){ + System.err.println("订单支付成功后的分账处理异常失败"); + return ResultUtil.error("订单支付成功后的分账处理异常失败"); + } + if(1 == status){ + divisionRecord.setMerOrderId(merOrderId1); + divisionRecord.setPayTime(new Date()); + divisionRecord.setState(2); + divisionRecordService.updateById(divisionRecord); + //间隔10秒开始调用确认收货后开始提现 + + new Timer().schedule(new TimerTask() {//确认收货和提现 + @Override + public void run() { + confirmReceipt(merchantNumber, merOrderId, divisionRecord); + } + }, 15000); + return ResultUtil.success(); + } + }else{ + System.err.println("订单支付成功后的分账处理异常 :" + execute.getMsg()); + return ResultUtil.error("订单支付成功后的分账处理异常 :" + execute.getMsg()); + } + return ResultUtil.error("未知异常"); + } + + + + + /** + * 分账后的确认收货 + * @param divisionRecord + */ + public void confirmReceipt(String merchantNumber, String orderNumber, DivisionRecord divisionRecord){ + Receive receive = new Receive(); + receive.setOriginalMerOrderId(orderNumber); + receive.setAsynMerOrderId(divisionRecord.getMerOrderId()); + receive.setRcvAmount(divisionRecord.getAmount().toString()); + List<ReceiveUser> splitList = new ArrayList<>(); + ReceiveUser receiveUser = new ReceiveUser(); + receiveUser.setSplitUserId(merchantNumber); + receiveUser.setRcvSplitAmount(divisionRecord.getAmount().toString()); + 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"); + System.err.println("分账确认收货成功"); + }else{ + System.err.println("分账确认收货异常" + execute1.getMsg()); + } + } + + + /** + * 转账 + * @param id + * @param merOrderId + * @param toUserId + * @param amount + * @param notifyUrl + * @return + */ + public ResultUtil zhaunzhang(Integer id, String merOrderId, String toUserId, Double amount, String notifyUrl){ + Transfer transfer = new Transfer(); + transfer.setDepositMerOrderId(merOrderId); + transfer.setToUserId(toUserId); + transfer.setAmount(String.valueOf(Double.valueOf(amount * 100))); + transfer.setOrderName("补贴"); + transfer.setNotifyUrl(notifyUrl); + transfer.setParameter1(id.toString()); + TrhRequest<Transfer> request = new TrhRequest(); + InterfaceResponse execute = request.execute(transfer, Transfer.SERVICE_CODE); + if("0000".equals(execute.getCode())){ + JSONObject jsonObject = JSON.parseObject(execute.getResult()); + Integer status = jsonObject.getInteger("status");//0:待处理;1:成功;2:失败 + if(2 == status){ + System.err.println("转账失败"); + return ResultUtil.error("转账失败"); + } + return ResultUtil.success(); + }else{ + System.err.println("转账失败:" + execute.getMsg()); + return ResultUtil.error(execute.getMsg()); + } + } + + + + /** * 获取乘客行程 * @param uid * @param pageNum -- Gitblit v1.7.1