puzhibing
2023-06-02 e0faebd41278c2e9389a26f39b2bfff63d68103d
更新部分代码
9个文件已修改
1071 ■■■■■ 已修改文件
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java 171 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/DivisionRecord.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java 844 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/application.yml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/redis.properties 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
        }
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("支付回调验签失败");
            }
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
 */
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);
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());
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
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 调起接口参数配置
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
user/guns-admin/src/test/java/com/supersavedriving/user/GunsApplicationTest.java
@@ -13,7 +13,7 @@
public class GunsApplicationTest {
    public void
//    public void