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/model/DivisionRecord.java | 1 user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java | 2 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java | 3 user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java | 171 +++++---- user/guns-admin/src/main/resources/redis.properties | 18 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java | 7 user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java | 13 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java | 844 ++++++++++++++++++++++++++++++++++------------ user/guns-admin/src/main/resources/application.yml | 12 9 files changed, 729 insertions(+), 342 deletions(-) diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java index 7447cdc..f039b71 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java @@ -332,19 +332,6 @@ } else {//验签失败业务处理逻辑 System.err.println("支付回调验签失败"); } - -// Map<String, String> map = payMoneyUtil.weixinpayCallback(request); -// if(null != map){ -// String out_trade_no = map.get("out_trade_no"); -// String transaction_id = map.get("transaction_id"); -// String result = map.get("result"); -// String orderId = out_trade_no.substring(17); -// appUserService.rechargeBalanceCallback(out_trade_no, transaction_id); -// PrintWriter out = response.getWriter(); -// out.print(result); -// out.flush(); -// out.close(); -// } }catch (Exception e){ e.printStackTrace(); } diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java index b21d6a9..4fcd34e 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java @@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.supersavedriving.user.core.common.annotion.ServiceLog; import com.supersavedriving.user.core.util.ToolUtil; -import com.supersavedriving.user.modular.system.model.AppUser; -import com.supersavedriving.user.modular.system.model.Driver; -import com.supersavedriving.user.modular.system.model.Order; -import com.supersavedriving.user.modular.system.model.Revenue; +import com.supersavedriving.user.modular.system.model.*; import com.supersavedriving.user.modular.system.service.*; import com.supersavedriving.user.modular.system.util.MallBook.model.InterfaceResponse; import com.supersavedriving.user.modular.system.util.MallBook.model.Receive; @@ -22,10 +19,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -59,6 +53,9 @@ @Autowired private IDriverService driverService; + + @Autowired + private IRechargeRecordService rechargeRecordService; @@ -386,22 +383,6 @@ } else {//验签失败业务处理逻辑 System.err.println("支付回调验签失败"); } - - -// Map<String, String> map = payMoneyUtil.weixinpayCallback(request); -// if(null != map){ -// String out_trade_no = map.get("out_trade_no"); -// String transaction_id = map.get("transaction_id"); -// String result = map.get("result"); -// String orderId = out_trade_no.substring(17); -// ResultUtil resultUtil = orderService.orderPayCallback(orderId, transaction_id); -// if(resultUtil.getCode() == 10000){ -// PrintWriter out = response.getWriter(); -// out.print(result); -// out.flush(); -// out.close(); -// } -// } }catch (Exception e){ e.printStackTrace(); } @@ -409,69 +390,99 @@ /** - * 异步分账回调 + * 转账回调 + * @param execute + * @param response */ @ResponseBody - @PostMapping("/base/order/ledgerCallback") - public void ledgerCallback(HttpServletRequest request, HttpServletResponse response){ - try{ - String code = request.getParameter("code"); - String version = request.getParameter("version"); - String msg = request.getParameter("msg"); - String date = request.getParameter("date"); - String result = request.getParameter("result"); - String sign = request.getParameter("sign"); - InterfaceResponse interfaceResponse = new InterfaceResponse(); - interfaceResponse.setCode(code); - interfaceResponse.setVersion(version); - interfaceResponse.setMsg(msg); - interfaceResponse.setDate(date); - interfaceResponse.setResult(result); - interfaceResponse.setSign(sign); - // 验签 - boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign()); - if (verify) {//验签成功业务处理逻辑 - JSONObject jsonObject = JSON.parseObject(result); - String merOrderId = jsonObject.getString("merOrderId"); - String orderId = jsonObject.getString("parameter1"); - //确认收货 - new Timer().schedule(new TimerTask() { - @Override - public void run() { - Order order = orderService.selectById(orderId); - List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("userType", 2).eq("orderId", order.getId())); - Receive receive = new Receive();//确认收货 - receive.setOriginalMerOrderId(merOrderId); - receive.setRcvAmount(String.valueOf(order.getPayMoney() * 100)); - List<ReceiveUser> splitList = new ArrayList<>(); - for (Revenue revenue : revenues) { - Driver driver = driverService.selectById(revenue.getUserId()); - ReceiveUser receiveUser = new ReceiveUser(); - receiveUser.setSplitUserId(driver.getMerchantNumber()); - receiveUser.setRcvSplitAmount(revenue.getAmount().toString()); - splitList.add(receiveUser); - } - receive.setSplitList(splitList); - TrhRequest<Receive> request1 = new TrhRequest(); - InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE); - if(!"0000".equals(execute.getCode())){ - System.err.println("确认收货" + execute.getMsg()); - } - JSONObject jsonObject = JSON.parseObject(execute.getResult()); - String status = jsonObject.getString("status"); - if("2".equals(status)){ - System.err.println("确认收货失败"); - } - if("0".equals(status)){ - System.err.println("确认收货处理中"); - } - } - }, 30000); + @PostMapping("/base/order/zhaunzhangCallback") + public void zhaunzhangCallback(@RequestBody InterfaceResponse execute, HttpServletResponse response){ + try { + 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; + } + String parameter1 = jsonObject.getString("parameter1"); + RechargeRecord rechargeRecord = rechargeRecordService.selectById(parameter1); + + response.setStatus(200); PrintWriter out = response.getWriter(); out.print("OK"); out.flush(); out.close(); + }else{ + System.err.println("转账失败:" + execute.getMsg()); + return; + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + + /** + * 异步分账回调 + */ + @ResponseBody + @PostMapping("/base/order/ledgerCallback") + public void ledgerCallback(@RequestBody InterfaceResponse execute, HttpServletResponse response){ + try{ + // 验签 + boolean verify = RSASignature.validate(execute.content(), execute.getSign()); + if (verify) {//验签成功业务处理逻辑 + if("0000".equals(execute.getCode())){ + JSONObject jsonObject = JSON.parseObject(execute.getResult()); + Integer status = jsonObject.getInteger("status"); + if(2 == status){ + System.err.println("异步分账回调异常"); + return; + } + String merOrderId = jsonObject.getString("merOrderId"); + String orderId = jsonObject.getString("parameter1"); + //确认收货 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Order order = orderService.selectById(orderId); + List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("userType", 2).eq("orderId", order.getId())); + Receive receive = new Receive();//确认收货 + receive.setOriginalMerOrderId(merOrderId); + receive.setRcvAmount(String.valueOf(order.getPayMoney() * 100)); + List<ReceiveUser> splitList = new ArrayList<>(); + for (Revenue revenue : revenues) { + Driver driver = driverService.selectById(revenue.getUserId()); + ReceiveUser receiveUser = new ReceiveUser(); + receiveUser.setSplitUserId(driver.getMerchantNumber()); + receiveUser.setRcvSplitAmount(revenue.getAmount().toString()); + splitList.add(receiveUser); + } + receive.setSplitList(splitList); + TrhRequest<Receive> request1 = new TrhRequest(); + InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE); + if(!"0000".equals(execute.getCode())){ + System.err.println("确认收货" + execute.getMsg()); + } + JSONObject jsonObject = JSON.parseObject(execute.getResult()); + String status = jsonObject.getString("status"); + if("2".equals(status)){ + System.err.println("确认收货失败"); + } + if("0".equals(status)){ + System.err.println("确认收货处理中"); + } + } + }, 15000); + response.setStatus(200); + PrintWriter out = response.getWriter(); + out.print("OK"); + out.flush(); + out.close(); + } } else {//验签失败业务处理逻辑 System.err.println("支付回调验签失败"); } diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/DivisionRecord.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/DivisionRecord.java index bac85da..701236b 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/DivisionRecord.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/DivisionRecord.java @@ -9,6 +9,7 @@ import java.util.Date; /** + * 分账记录 * @author zhibing.pu * @date 2023/5/6 15:54 */ diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java index 35f1aee..59e5620 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java @@ -317,8 +317,6 @@ rechargeRecord.setPayStatus(1); rechargeRecord.setPayType(1); rechargeRecordService.insert(rechargeRecord); -// ResultUtil weixinpay = payMoneyUtil.weixinpay("余额充值", "", out_trade_no, amount.toString(), "/base/appUser/rechargeBalanceCallback", "JSAPI", appUser.getOpenid()); -// return weixinpay; PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setBizOrderId(out_trade_no); @@ -335,7 +333,7 @@ paymentOrderGood.setGoodsName("账户充值"); goodsDetail.add(paymentOrderGood); paymentOrder.setGoodsDetail(goodsDetail); - paymentOrder.setFrontUrl(""); + paymentOrder.setFrontUrl(callbackPath + "/base/appUser/rechargeBalanceCallback"); paymentOrder.setNotifyUrl(callbackPath + "/base/appUser/rechargeBalanceCallback"); paymentOrder.setParameter1(out_trade_no); @@ -349,6 +347,7 @@ if("2".equals(status)){ return ResultUtil.error("失败"); } + String merOrderId = jsonObject.getString("merOrderId"); String payCode = jsonObject.getString("payCode"); if(ToolUtil.isNotEmpty(payCode)){ new Thread(new Runnable() { @@ -365,7 +364,7 @@ return; } QueryOrder queryOrder = new QueryOrder(); - queryOrder.setOriginalMerOrderId(out_trade_no); + queryOrder.setOriginalMerOrderId(merOrderId); queryOrder.setQueryType("1"); TrhRequest<QueryOrder> request = new TrhRequest(); InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE); diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java index cb78e30..7e7ab9c 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java @@ -65,8 +65,9 @@ // 构造query对象 Query query = Query.query(Criteria.where("location").withinSphere(circle)); List<Location> locations = mongoTemplate.find(query, Location.class); -// System.err.println("附近空闲司机" + JSON.toJSONString(locations)); List<Integer> collect = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + List<Driver> drivers = this.selectList(new EntityWrapper<Driver>().in("id", collect).eq("approvalStatus", 2).eq("serverStatus", 1).eq("status", 1)); + collect = drivers.stream().map(Driver::getId).collect(Collectors.toList()); List<DriverWork> driverWorks = driverWorkService.selectList(new EntityWrapper<DriverWork>().in("driverId", collect).eq("status", 1)); for (DriverWork driverWork : driverWorks) { String value = redisUtil.getValue("DRIVER" + driverWork.getDriverId()); 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 diff --git a/user/guns-admin/src/main/resources/application.yml b/user/guns-admin/src/main/resources/application.yml index 0dc6722..5f2d5d0 100644 --- a/user/guns-admin/src/main/resources/application.yml +++ b/user/guns-admin/src/main/resources/application.yml @@ -13,8 +13,8 @@ application: name: user-server profiles: -# active: dev - active: produce + active: dev +# active: produce mvc: static-path-pattern: /static/** view: @@ -55,8 +55,8 @@ datasource: url: jdbc:mysql://127.0.0.1:3306/super_save_driving?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai username: root - password: f4OfRjqoN3jSiNGiUoiNsQdOBtCOKYRj -# password: 123456 +# password: f4OfRjqoN3jSiNGiUoiNsQdOBtCOKYRj + password: 123456 db-name: guns #用来搜集数据库的所有表 filters: wall,mergeStat @@ -130,8 +130,8 @@ spring: data: mongodb: - uri: mongodb://root:CEtyLdKjPk0yeHNo@127.0.0.1:27017/admin -# uri: mongodb://127.0.0.1:27017/admin +# uri: mongodb://root:CEtyLdKjPk0yeHNo@127.0.0.1:27017/admin + uri: mongodb://127.0.0.1:27017/admin # mallbook 调起接口参数配置 diff --git a/user/guns-admin/src/main/resources/redis.properties b/user/guns-admin/src/main/resources/redis.properties index 726be87..8386340 100644 --- a/user/guns-admin/src/main/resources/redis.properties +++ b/user/guns-admin/src/main/resources/redis.properties @@ -2,19 +2,19 @@ # Redis���ݿ�������Ĭ��Ϊ0�� spring.redis.database=0 -# Redis��������ַ -spring.redis.host=127.0.0.1 -# Redis���������Ӷ˿� -spring.redis.port=16379 -# Redis�������������루Ĭ��Ϊ�գ� -spring.redis.password=cKsEeyffDXG5PzNg8CIbrWxFluXrCprZ - ## Redis��������ַ #spring.redis.host=127.0.0.1 ## Redis���������Ӷ˿� -#spring.redis.port=6379 +#spring.redis.port=16379 ## Redis�������������루Ĭ��Ϊ�գ� -#spring.redis.password=123456 +#spring.redis.password=cKsEeyffDXG5PzNg8CIbrWxFluXrCprZ + +# Redis��������ַ +spring.redis.host=127.0.0.1 +# Redis���������Ӷ˿� +spring.redis.port=6379 +# Redis�������������루Ĭ��Ϊ�գ� +spring.redis.password=123456 # ���ӳ������������ʹ�ø�ֵ��ʾû�����ƣ� spring.redis.jedis.pool.max-active=1024 diff --git a/user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java b/user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java index 0208971..2ed8b32 100644 --- a/user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java +++ b/user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java @@ -13,7 +13,7 @@ public class GunsApplicationTest { - public void +// public void -- Gitblit v1.7.1