From 4f75e746dc006f487a1a7de8e14c497148911b0e Mon Sep 17 00:00:00 2001
From: guyue <1721849008@qq.com>
Date: 星期六, 16 八月 2025 00:30:09 +0800
Subject: [PATCH] 抢单以及转派

---
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java |  313 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 273 insertions(+), 40 deletions(-)

diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
index 72261a4..67090e1 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -1,7 +1,11 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.api.OrderController;
+import com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper;
+import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
 import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
 import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
 import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
@@ -9,6 +13,7 @@
 import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService;
 import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
 import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.dao.CarModelMapper;
 import com.stylefeng.guns.modular.system.dao.DispatchMapper;
 import com.stylefeng.guns.modular.system.dao.ReassignMapper;
 import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
@@ -23,6 +28,9 @@
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -84,6 +92,20 @@
     @Value("${callbackPath}")
     private String callbackPath;
 
+    @Autowired
+    private IReassignService reassignService;
+
+    @Resource
+    private LineShiftDriverMapper lineShiftDriverMapper;
+
+    @Autowired
+    private OrderController orderController;
+
+    @Resource
+    private CarModelMapper carModelMapper;
+
+    @Autowired
+    private ICarService carService;
 
 
     /**
@@ -242,7 +264,7 @@
      * @throws Exception
      */
     @Override
-    public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type) throws Exception {
+    public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type,Integer newDriverId) throws Exception {
         type = null == type ? 2 : type;//现目前微信只支持小程序支付
         String content = reassign.getRemark();
         if(ToolUtil.isNotEmpty(content)){
@@ -285,12 +307,14 @@
             ids += reassign.getId() + ",";
         }
         ids = ids.substring(0, ids.length() - 1);
-        systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
 
-        //开始支付
-        if(null != reassign.getPayType()){
-            if(reassign.getPayType() == 1){//微信支付
-                String[] split1 = ids.split(",");
+
+        if(newDriverId == null) {
+            systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
+            //开始支付
+            if (null != reassign.getPayType()) {
+                if (reassign.getPayType() == 1) {//微信支付
+                    String[] split1 = ids.split(",");
 //                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
 //                if(map.get("code").equals("200")){
 //                    for(String id : split1){
@@ -300,9 +324,9 @@
 //                }else{
 //                    resultUtil = ResultUtil.error(map.get("msg"), "");
 //                }
-            }
-            if(reassign.getPayType() == 2){//支付宝
-                String[] split1 = ids.split(",");
+                }
+                if (reassign.getPayType() == 2) {//支付宝
+                    String[] split1 = ids.split(",");
 //                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, "");
 //                if(map.get("code").equals("200")){
 //                    for(String id : split1){
@@ -312,49 +336,258 @@
 //                }else{
 //                    resultUtil = ResultUtil.error(map.get("msg"), "");
 //                }
+                }
+                if (reassign.getPayType() == 3) {//余额
+                    for (String id : split) {
+                        Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
+                        query.setState(2);
+                        query.setPayTime(new Date());
+                        reassignMapper.updateById(query);
+                        //添加交易明细
+                        transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
+                    }
+                    Double balance = driver.getBalance();
+                    if (null == balance || balance < totalMoney) {
+                        throw new SystemException("账户余额不足");
+                    }
+                    driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
+
+
+                    //修改改派通知状态
+                    for (String id : split) {
+                        OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
+                        orderCrossCity.setOldState(orderCrossCity.getState());
+                        orderCrossCity.setState(11);
+                        orderCrossCity.setReassignNotice(2);
+                        orderCrossCityService.updateById(orderCrossCity);
+
+                        //添加已收入明细
+                        incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
+                    }
+                    systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
+                    //开始推送调度单
+                    Map<String, String> map = new HashMap<>();
+                    map.put("orderId", reassign.getOrderId().toString());
+                    map.put("orderType", reassign.getOrderType().toString());
+                    List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
+                    for (Dispatch dispatch : dispatches) {
+                        jgPushUtil.push(2, "有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
+                    }
+                }
             }
-            if(reassign.getPayType() == 3){//余额
-                for(String id : split){
-                    Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
-                    query.setState(2);
-                    query.setPayTime(new Date());
-                    reassignMapper.updateById(query);
-                    //添加交易明细
-                    transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
+        }else {
+            //开始支付
+            if (null != reassign.getPayType()) {
+                if (reassign.getPayType() == 1) {//微信支付
+                    String[] split1 = ids.split(",");
+//                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
+//                if(map.get("code").equals("200")){
+//                    for(String id : split1){
+//                        paymentRecordService.saveData(1, uid, 2, Integer.valueOf(id), 3, 1, aDouble, map.get("order_id"), 1);//添加预支付数据
+//                    }
+//                    resultUtil = ResultUtil.success(map.get("data"));
+//                }else{
+//                    resultUtil = ResultUtil.error(map.get("msg"), "");
+//                }
                 }
-                Double balance = driver.getBalance();
-                if(null == balance || balance < totalMoney){
-                    throw new SystemException("账户余额不足");
+                if (reassign.getPayType() == 2) {//支付宝
+                    String[] split1 = ids.split(",");
+//                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, "");
+//                if(map.get("code").equals("200")){
+//                    for(String id : split1){
+//                        paymentRecordService.saveData(1, uid, 2, Integer.valueOf(id), 3, 2, aDouble, map.get("order_id"), 1);//添加预支付数据
+//                    }
+//                    resultUtil = ResultUtil.success(map.get("data"));
+//                }else{
+//                    resultUtil = ResultUtil.error(map.get("msg"), "");
+//                }
                 }
-                driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
+                if (reassign.getPayType() == 3) {//余额
+                    for (String id : split) {
+                        Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
+                        query.setState(2);
+                        query.setPayTime(new Date());
+                        reassignMapper.updateById(query);
+                        //添加交易明细
+                        transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
+                    }
+                    Double balance = driver.getBalance();
+                    if (null == balance || balance < totalMoney) {
+                        throw new SystemException("账户余额不足");
+                    }
+                    driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
 
 
-                //修改改派通知状态
-                for(String id : split){
-                    OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
-                    orderCrossCity.setOldState(orderCrossCity.getState());
-                    orderCrossCity.setState(11);
-                    orderCrossCity.setReassignNotice(2);
-                    orderCrossCityService.updateById(orderCrossCity);
+                    //修改改派通知状态
+                    for (String id : split) {
+                        OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
+                        orderCrossCity.setOldState(orderCrossCity.getState());
+                        orderCrossCity.setState(11);
+                        orderCrossCity.setReassignNotice(2);
+                        orderCrossCityService.updateById(orderCrossCity);
 
-                    //添加已收入明细
-                    incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
-                }
-                systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
-                //开始推送调度单
-                Map<String, String> map = new HashMap<>();
-                map.put("orderId", reassign.getOrderId().toString());
-                map.put("orderType", reassign.getOrderType().toString());
-                List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
-                for(Dispatch dispatch : dispatches){
-                    jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
+                        //添加已收入明细
+                        incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
+                    }
+                    systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
+                    //开始推送调度单
+//                    Map<String, String> map = new HashMap<>();
+//                    map.put("orderId", reassign.getOrderId().toString());
+//                    map.put("orderType", reassign.getOrderType().toString());
+//                    List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
+//                    for (Dispatch dispatch : dispatches) {
+//                        jgPushUtil.push(2, "有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
+//                    }
+
+                    //将所有改派单都给新的司机
+                    String[] split1 = ids.split(",");
+                    for (String s : split1) {
+                        selectCrossDriver(Integer.valueOf(s), newDriverId);
+                    }
+
+
                 }
             }
         }
         return resultUtil;
     }
+    /**
+     * 跨城出行订单改派司机
+     */
 
+    public Object selectCrossDriver(@RequestParam Integer reassign, @RequestParam Integer driverId) {
+        //修改原司机信息
+        //修改订单
+        Reassign tReassign = reassignService.selectById(reassign);
+        OrderCrossCity tOrderCrossCity = orderCrossCityService.selectById(tReassign.getOrderId());
+        Driver oldDriver = driverService.selectById(tReassign.getOriginalDriverId());
+        LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(tOrderCrossCity.getLineShiftDriverId());
+        lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
+                lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber());
+        String seat = "";
+        String[] split = tOrderCrossCity.getSeatNumber().split(",");
+        for(String s : split){
+            seat += s + ",";
+        }
+        seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
+
+        //总和大于总座位数的情况
+        if(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
+            seat = "";
+            for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
+                seat += i + ",";
+            }
+            seat = seat.substring(0, seat.length() - 1);
+        }
+        lineShiftDriver.setLaveSeatNumber(seat);
+        lineShiftDriverMapper.updateById(lineShiftDriver);
+        if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
+            oldDriver.setState(2);
+            driverService.updateById(oldDriver);
+        }
+
+        //修改新司机数据
+        List<LineShiftDriver> query = lineShiftDriverMapper.queryByDriver(lineShiftDriver.getLineShiftId(), driverId, tOrderCrossCity.getTravelTime());
+        LineShiftDriver lineShiftDriver1 = null;
+
+        if(query.size() == 0){
+//            return ResultUtil.error("司机没有预约班次");
+            CarModel carModel = carModelMapper.selectById(carService.selectById(driverService.selectById(driverId).getCarId()).getCarModelId());
+
+            LineShiftDriver lineShiftDriver0 = new LineShiftDriver();
+            lineShiftDriver0.setLineShiftId(lineShiftDriver.getLineShiftId());
+            lineShiftDriver0.setDriverId(driverId);
+            lineShiftDriver0.setDay(lineShiftDriver.getDay());
+            lineShiftDriver0.setTotalSeat(carModel.getSeat() - 1);
+            lineShiftDriver0.setLaveSeat(carModel.getSeat() - 1);
+            lineShiftDriver0.setInserTime(new Date());
+            String seatNumber = "";
+            for(int i = 1; i < carModel.getSeat(); i++){
+                seatNumber += i + ",";
+            }
+            lineShiftDriver0.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1));
+
+            Integer insert = lineShiftDriverMapper.insert(lineShiftDriver0);
+            lineShiftDriver1 = lineShiftDriver0;
+
+        }else {
+             lineShiftDriver1 = query.get(0);
+
+        }
+        if(lineShiftDriver1.getLaveSeat() < tOrderCrossCity.getPeopleNumber()){
+            return ResultUtil.runErr("司机车辆剩余座位数不足");
+        }
+        lineShiftDriver1.setLaveSeat(lineShiftDriver1.getLaveSeat() - tOrderCrossCity.getPeopleNumber());
+        String[] split1 = lineShiftDriver1.getLaveSeatNumber().split(",");
+        String seat1 = "";//使用
+        String seat2 = "";//未使用
+        for(int i = 0; i < tOrderCrossCity.getPeopleNumber(); i++){
+            seat1 += split1[i] + ",";
+        }
+        for(int i = tOrderCrossCity.getPeopleNumber(); i < split1.length; i++){
+            seat2 += split1[i] + ",";
+        }
+        lineShiftDriver1.setLaveSeatNumber(seat2);
+        lineShiftDriverMapper.updateById(lineShiftDriver1);
+        Driver driver = driverService.selectById(driverId);
+//        if(driver.getState() == 1){
+//            return ResultUtil.error("司机还未上班呢");
+//        }
+//        if(driver.getState() == 2){
+//            driver.setState(3);
+//        }
+
+        //修改订单数据
+        tOrderCrossCity.setDriverId(driverId);
+        tOrderCrossCity.setCarId(driver.getCarId());
+        tOrderCrossCity.setSeatNumber(seat1);
+        tOrderCrossCity.setState(tOrderCrossCity.getOldState());
+        tOrderCrossCity.setLineShiftDriverId(lineShiftDriver1.getId());
+        tOrderCrossCity.setOldState(null);
+        tOrderCrossCity.setIsReassign(2);
+        try {
+            tOrderCrossCity.setOrderNum(orderCrossCityService.getOrderNum(driverId, tOrderCrossCity.getLineShiftDriverId()));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        orderCrossCityService.updateAllColumnById(tOrderCrossCity);
+
+        //修改专车改派订单
+        tReassign.setNowDriverId(driverId);
+        tReassign.setNowCarId(driver.getCarId());
+        tReassign.setState(3);
+        tReassign.setCompleteTime(new Date());
+        reassignService.updateById(tReassign);
+
+        //修改收入明细,转给新司机(因为是先支付金额)
+        List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", oldDriver.getId()).eq("type", 2).eq("incomeId", tReassign.getOrderId()).eq("orderType", 3));
+        if(incomes.size() > 0){
+            Income income = incomes.get(0);
+            income.setObjectId(driverId);
+            incomeService.updateById(income);
+
+            oldDriver.setBusinessMoney(oldDriver.getBusinessMoney() - income.getMoney());
+            oldDriver.setLaveBusinessMoney(oldDriver.getLaveBusinessMoney() - income.getMoney());
+            oldDriver.setBalance(oldDriver.getBalance()-income.getMoney());
+
+            driver.setBusinessMoney(driver.getBusinessMoney() + income.getMoney());
+            driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() + income.getMoney());
+            driver.setBalance(driver.getBalance()+income.getMoney());
+
+        }
+        driverService.updateById(oldDriver);
+        driverService.updateById(driver);
+        //增加推送
+//        Map<String,String> map = new HashMap<>();
+//        map.put("orderId", tOrderCrossCity.getId().toString());
+//        map.put("orderType", "3");
+        String result = orderController.pushOrderState(tOrderCrossCity.getId(), 3);
+//        String result = HttpRequestUtil.postRequest(PushURL.order_push_url, map);
+        System.out.println("跨城出行改派:【orderId="+tOrderCrossCity.getId().toString()+"】,调用接口:"+result);
+        return result;
+    }
 
 
 

--
Gitblit v1.7.1