From 8b09fbc19a96b57bf1d0e4d7c79b51a76aeca554 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 28 三月 2025 19:57:56 +0800
Subject: [PATCH] 修改bug

---
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java |  477 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 440 insertions(+), 37 deletions(-)

diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
index d43c54e..15f6f87 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
@@ -3,24 +3,34 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.CarModelMapper;
 import com.stylefeng.guns.modular.system.dao.SettlementRecordMapper;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
-import com.stylefeng.guns.modular.system.util.DateUtil;
-import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.*;
+import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil;
 import com.stylefeng.guns.modular.system.util.Tingg.TinggPayUtil;
 import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
 import com.stylefeng.guns.modular.system.warpper.QueryHistoricalSettlement;
 import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmount;
 import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmountDetails;
+import org.apache.shiro.util.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author zhibing.pu
@@ -46,6 +56,30 @@
 
     @Value("${callbackPath}")
     private String callbackPath;//支付回调网关地址
+    
+    @Resource
+    private IBalanceUsageRecordService balanceUsageRecordService;
+    
+    @Resource
+    private IDriverWorkService driverWorkService;
+    
+    @Autowired
+    private PushUtil pushUtil;
+    
+    @Autowired
+    private RedisUtil redisUtil;
+    
+    @Autowired
+    private ICarService carService;
+    
+    @Autowired
+    private FleetEngineUtil fleetEngineUtil;
+    
+    @Resource
+    private CarModelMapper carModelMapper;
+    
+    @Resource
+    private IIncomeService incomeService;
 
 
 
@@ -57,11 +91,31 @@
     @Override
     public QuerySettlementAmount querySettlementAmount(Integer language, Integer driverId) {
         QuerySettlementAmount querySettlementAmount = new QuerySettlementAmount();
-        SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1));
-        if(null != settlementRecord){
-            querySettlementAmount.setType(settlementRecord.getType());
-            querySettlementAmount.setAmount(settlementRecord.getPayMoney());
-            List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("settlementRecordId", settlementRecord.getId()).orderBy("createTime desc"));
+        SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null);
+        if(null != settlementAllocation) {
+            JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
+            Integer type = jsonObject.getInteger("type");
+            querySettlementAmount.setType(type);
+            //所有未支付的主表数据
+            List<SettlementRecord> settlementRecords = this.selectList(new EntityWrapper<SettlementRecord>().eq("driverId", driverId)
+                    .eq("paymentStatus", 1));
+            double sum = settlementRecords.stream().mapToDouble(SettlementRecord::getPayMoney).sum();
+            
+            //所有未生成主表数据的明细
+            List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId)
+                    .isNull("settlementRecordId"));
+            double sum1 = settlementDetailList.stream().mapToDouble(SettlementDetail::getPrice).sum();
+            //显示的金额
+            querySettlementAmount.setAmount(new BigDecimal(sum).add(new BigDecimal(sum1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+    
+            List<Integer> collect = settlementRecords.stream().map(SettlementRecord::getId).collect(Collectors.toList());
+            Wrapper<SettlementDetail> wrapper = new EntityWrapper<SettlementDetail>();
+            if(collect.size() > 0){
+                wrapper.eq("driverId", driverId).in("settlementRecordId", collect).or().eq("driverId", driverId).isNull("settlementRecordId");
+            }else{
+                wrapper.eq("driverId", driverId).isNull("settlementRecordId");
+            }
+            settlementDetailList = settlementDetailService.selectList(wrapper.orderBy("createTime desc"));
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
             List<QuerySettlementAmountDetails> list = new ArrayList<>();
             settlementDetailList.forEach(s -> {
@@ -88,17 +142,50 @@
      * @return
      */
     @Override
+    @Transactional
     public ResultUtil paymentSettlementAmount(Integer driverId, Integer payType, Integer bankCardId, Integer language) throws Exception {
         Driver driver1 = driverService.selectById(driverId);
-        SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1));
-        if(null == settlementRecord){
-            return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No need to make payments for the time being" : "Pas besoin d’effectuer de paiements pour le moment");
+        QuerySettlementAmount querySettlementAmount = querySettlementAmount(language, driverId);
+        if(querySettlementAmount.getAmount() == 0){
+            return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No payment is required" : "Aucun paiement n’est requis");
         }
-        Double payMoney = settlementRecord.getPayMoney();
+    
+        Double payMoney = 0D;
+        //主动生成结算主数据
+        SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null);
+        if(null == settlementAllocation){
+            JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
+            Integer type = jsonObject.getInteger("type");
+    
+            //所以未生成主表的明细数据
+            List<SettlementDetail> settlementDetails = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId)
+                    .isNull("settlementRecordId"));
+            double sum = settlementDetails.stream().mapToDouble(SettlementDetail::getPrice).sum();
+            if(sum > 0){
+                SettlementRecord settlementRecord = new SettlementRecord();
+                settlementRecord.setDay(new Date());
+                settlementRecord.setDriverId(driverId);
+                settlementRecord.setType(type);
+                settlementRecord.setPaymentStatus(1);
+                settlementRecord.setPayMoney(new BigDecimal(sum).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+                settlementRecord.setInsertTime(new Date());
+                this.insert(settlementRecord);
+        
+                settlementDetails.forEach(s -> {
+                    s.setSettlementRecordId(settlementRecord.getId());
+                });
+                settlementDetailService.updateBatchById(settlementDetails);
+            }
+        }
+        List<SettlementRecord> settlementRecords = this.selectList(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1));
+        payMoney = settlementRecords.stream().mapToDouble(SettlementRecord::getPayMoney).sum();
+        if(payMoney == 0){
+            return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No payment is required" : "Aucun paiement n’est requis");
+        }
         ResultUtil resultUtil = ResultUtil.success("");
         if(payType == 1){//手机支付
             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
-            String merchantTransactionId = sdf.format(new Date()) + language + settlementRecord.getId();
+            String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1.getId();
             CheckoutRequest checkoutRequest = new CheckoutRequest();
             checkoutRequest.setMsisdn(Long.valueOf(driver1.getPhone()));
             checkoutRequest.setCustomerEmail(driver1.getEmail());
@@ -108,10 +195,10 @@
             checkoutRequest.setRequestAmount(payMoney);
             checkoutRequest.setMerchantTransactionId(merchantTransactionId);
             checkoutRequest.setRequestDescription("Settlement cost");
-            checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/querySettlementAmount");
+            checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/paymentSettlementAmountCallback");
             checkoutRequest.setPendingRedirectUrl("");
-            checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html");
-            checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
+            checkoutRequest.setSuccessRedirectUrl("https://igo.i-go.group/payMoney/pages/success.html");
+            checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/payMoney/pages/fail.html");
             resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
 
             if(resultUtil.getCode()!=200){
@@ -122,7 +209,7 @@
         if(payType == 2){//银行卡支付
             BankCard bankCard = bankCardService.selectById(bankCardId);
             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
-            String merchantTransactionId = sdf.format(new Date()) + language + settlementRecord.getId();
+            String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1.getId();
             CheckoutRequest checkoutRequest = new CheckoutRequest();
             checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode()));
             checkoutRequest.setCustomerEmail(driver1.getEmail());
@@ -132,10 +219,10 @@
             checkoutRequest.setRequestAmount(payMoney);
             checkoutRequest.setMerchantTransactionId(merchantTransactionId);
             checkoutRequest.setRequestDescription("Settlement cost");
-            checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/querySettlementAmount");
+            checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/paymentSettlementAmountCallback");
             checkoutRequest.setPendingRedirectUrl("");
-            checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html");
-            checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
+            checkoutRequest.setSuccessRedirectUrl("https://igo.i-go.group/payMoney/pages/success.html");
+            checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/payMoney/pages/fail.html");
             resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
 
             if(resultUtil.getCode()!=200){
@@ -150,23 +237,63 @@
 
             Double laveActivityMoney = driver1.getLaveActivityMoney();
             Double laveBusinessMoney = driver1.getLaveBusinessMoney();
-            if(laveBusinessMoney.compareTo(payMoney) < 0){
-                driver1.setLaveBusinessMoney(0D);
-                BigDecimal m = new BigDecimal(payMoney).subtract(new BigDecimal(laveBusinessMoney));
-                driver1.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(m).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-            }else{
-                driver1.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+    
+            for (SettlementRecord settlementRecord : settlementRecords) {
+                Double payMoney1 = settlementRecord.getPayMoney();
+                if(laveActivityMoney >= payMoney1){
+                    settlementRecord.setPayMoney(payMoney1);
+                    settlementRecord.setPaymentStatus(2);
+                    settlementRecord.setPayType(payType);
+                    settlementRecord.setBalanceType(1);
+                    settlementRecord.setPayTime(new Date());
+                    this.updateById(settlementRecord);
+                    balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 1, payMoney1, settlementRecord.getType() + 2);
+                    laveActivityMoney = new BigDecimal(laveActivityMoney).subtract(new BigDecimal(payMoney1)).doubleValue();
+                }else{
+                    if(laveActivityMoney > 0){
+                        settlementRecord.setPayMoney(laveActivityMoney);
+                        settlementRecord.setPaymentStatus(2);
+                        settlementRecord.setPayType(payType);
+                        settlementRecord.setBalanceType(1);
+                        settlementRecord.setPayTime(new Date());
+                        this.updateById(settlementRecord);
+                        balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 1, laveActivityMoney, settlementRecord.getType() + 2);
+                        laveActivityMoney = 0D;
+                        payMoney1 = new BigDecimal(payMoney1).subtract(new BigDecimal(laveActivityMoney)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+    
+                        SettlementRecord settlementRecord1 = new SettlementRecord();
+                        BeanUtils.copyProperties(settlementRecord, settlementRecord1);
+                        settlementRecord1.setId(null);
+                        settlementRecord1.setPayMoney(payMoney1);
+                        settlementRecord1.setPaymentStatus(2);
+                        settlementRecord1.setPayType(payType);
+                        settlementRecord1.setBalanceType(1);
+                        settlementRecord1.setPayTime(new Date());
+                        this.insert(settlementRecord1);
+    
+                        balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, payMoney1, settlementRecord.getType() + 2);
+                        laveBusinessMoney = new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+                    }else{
+                        settlementRecord.setPaymentStatus(2);
+                        settlementRecord.setPayType(payType);
+                        settlementRecord.setPayMoney(payMoney1);
+                        settlementRecord.setBalanceType(2);
+                        settlementRecord.setPayTime(new Date());
+                        this.updateById(settlementRecord);
+                        balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, payMoney1, settlementRecord.getType() + 2);
+                        laveBusinessMoney = new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+                    }
+                }
             }
-            driver1.setBalance(new BigDecimal(driver1.getBalance()).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-
-            //添加交易明细
-            transactionDetailsService.saveData(driverId, "线下结算", payMoney, 2, 1, 2, null, null);
+            driver1.setLaveBusinessMoney(laveBusinessMoney);
+            driver1.setLaveActivityMoney(laveActivityMoney);
+            driver1.setBalance(new BigDecimal(laveBusinessMoney).add(new BigDecimal(laveActivityMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
             driverService.updateById(driver1);
-
-            settlementRecord.setPaymentStatus(2);
-            settlementRecord.setPayType(payType);
-            settlementRecord.setPayTime(new Date());
-            this.updateById(settlementRecord);
+            //添加司机结算的平台收入记录
+            incomeService.saveData(1, 1, 8, driver1.getId(), null, payMoney);
+            //添加交易明细
+            transactionDetailsService.saveData(driverId, "支付结算费用", payMoney, 2, 1, 2, null, null);
+            
             return ResultUtil.success("");
         }
         return resultUtil;
@@ -179,9 +306,40 @@
      * @return
      */
     @Override
-    public List<QueryHistoricalSettlement> queryHistoricalSettlement(Integer driverId, Integer pageNum, Integer size) {
+    public List<QueryHistoricalSettlement> queryHistoricalSettlement(Integer language, Integer driverId, Integer pageNum, Integer size) {
         pageNum = (pageNum - 1) * size;
-        return this.baseMapper.queryHistoricalSettlement(driverId, pageNum, size);
+        List<Map<String, Object>> list = this.baseMapper.queryHistoricalSettlement(driverId, pageNum, size);
+        Double aDouble = this.baseMapper.queryHistoricalSettlementTotal(driverId);
+        List<QueryHistoricalSettlement> datas = new ArrayList<>();
+        for (Map<String, Object> map : list) {
+            QueryHistoricalSettlement queryHistoricalSettlement = new QueryHistoricalSettlement();
+            if(null != map.get("createTime")){
+                queryHistoricalSettlement.setCreateTime(DateUtil.conversionFormat(language, map.get("createTime").toString()));
+            }
+            if(null != map.get("price")){
+                queryHistoricalSettlement.setPrice(Double.valueOf(map.get("price").toString()));
+            }
+            if(null != map.get("type")){
+                queryHistoricalSettlement.setType(Integer.valueOf(map.get("type").toString()));
+            }
+            if(null != map.get("payType")){
+                switch (map.get("payType").toString()){
+                    case "1":
+                        queryHistoricalSettlement.setPayType(language == 1 ? "手机支付" : language == 2 ? "Mobile Money" : "Paiement mobile");
+                        break;
+                    case "2":
+                        queryHistoricalSettlement.setPayType(language == 1 ? "线上支付" : language == 2 ? "Bank Card" : "Carte bancaire");
+                        break;
+                    default:
+                        Integer balanceType = Integer.valueOf(map.get("balanceType").toString());
+                        queryHistoricalSettlement.setPayType(language == 1 ? "余额支付(" + (balanceType == 1 ? "奖励" : "收入") + ")" : language == 2 ? "Wallet (" + (balanceType == 1 ? "Reward" : "Income") + ")" : "Portefeuille (" + (balanceType == 1 ? "Récompense" : "Revenu") + ")");
+                        break;
+                }
+            }
+            queryHistoricalSettlement.setTotalPrice(aDouble);
+            datas.add(queryHistoricalSettlement);
+        }
+        return datas;
     }
 
 
@@ -209,11 +367,109 @@
         w = w == 1 ? 7 : w - 1;
         int d = today.get(Calendar.DAY_OF_MONTH);
         if(null != settlementAllocation){
-            List<Map<String, Object>> list = settlementDetailService.queryGroupDriver();
             JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
             Integer type = jsonObject.getInteger("type");
             Integer day = jsonObject.getInteger("day");
+            if(type == 1){//日结算
+                List<Map<String, Object>> list = settlementDetailService.queryGroupDriver();
+                for (Map<String, Object> map : list) {
+                    Integer driverId = Integer.valueOf(map.get("driverId").toString());
+                    Double price = Double.valueOf(map.get("price").toString());
+        
+                    SettlementRecord settlementRecord = new SettlementRecord();
+                    settlementRecord.setDay(new Date());
+                    settlementRecord.setDriverId(driverId);
+                    settlementRecord.setType(1);
+                    settlementRecord.setPaymentStatus(1);
+                    settlementRecord.setPayMoney(price);
+                    settlementRecord.setInsertTime(new Date());
+                    this.insert(settlementRecord);
+        
+                    List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId).isNull("settlementRecordId"));
+                    settlementDetailList.forEach(s -> {
+                        s.setSettlementRecordId(settlementRecord.getId());
+                    });
+                    if(settlementDetailList.size() > 0){
+                        settlementDetailService.updateBatchById(settlementDetailList);
+                    }
+    
+                    //强制司机下班
+                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>()
+                            .eq("driverId", driverId).eq("state", 1));
+                    if(null != driverWork){
+                        driverWork.setEndTime(new Date());
+                        driverWork.setState(2);
+                        driverWorkService.updateById(driverWork);
+                        Driver driver = driverService.selectById(driverId);
+                        driver.setState(1);
+                        driverService.updateById(driver);
+                        Car car = carService.selectById(driver.getCarId());
+                        if(!StringUtils.hasLength(car.getVehicleId())){
+                            car.setVehicleId(UUIDUtil.getRandomCode());
+                            carService.updateById(car);
+                        }
+    
+                        //司机下班,修改谷歌上的车辆信息
+                        new Thread(()->{
+                            try {
+                                CarModel carModel = carModelMapper.selectById(car.getCarModelId());
+                                String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId());
+                                if(ToolUtil.isEmpty(vehicles)){
+                                    boolean createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!createVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(createVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                    
+                                    boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!updateVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(updateVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                }else{
+                                    boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!updateVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(updateVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }).start();
+                        
+                    }
+                }
+            }
             if(type == 2 && w == day){//周结算
+                List<Map<String, Object>> list = settlementDetailService.queryGroupDriver();
                 for (Map<String, Object> map : list) {
                     Integer driverId = Integer.valueOf(map.get("driverId").toString());
                     Double price = Double.valueOf(map.get("price").toString());
@@ -234,9 +490,83 @@
                     if(settlementDetailList.size() > 0){
                         settlementDetailService.updateBatchById(settlementDetailList);
                     }
+    
+                    //强制司机下班
+                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>()
+                            .eq("driverId", driverId).eq("state", 1));
+                    if(null != driverWork){
+                        driverWork.setEndTime(new Date());
+                        driverWork.setState(2);
+                        driverWorkService.updateById(driverWork);
+                        Driver driver = driverService.selectById(driverId);
+                        driver.setState(1);
+                        driverService.updateById(driver);
+                        Car car = carService.selectById(driver.getCarId());
+                        if(!StringUtils.hasLength(car.getVehicleId())){
+                            car.setVehicleId(UUIDUtil.getRandomCode());
+                            carService.updateById(car);
+                        }
+    
+                        //司机下班,修改谷歌上的车辆信息
+                        new Thread(()->{
+                            try {
+                                CarModel carModel = carModelMapper.selectById(car.getCarModelId());
+                                String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId());
+                                if(ToolUtil.isEmpty(vehicles)){
+                                    boolean createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!createVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(createVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                    
+                                    boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!updateVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(updateVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                }else{
+                                    boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!updateVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(updateVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }).start();
+                    }
                 }
             }
             if(type == 3 && d == day){//月结算
+                List<Map<String, Object>> list = settlementDetailService.queryGroupDriver();
                 for (Map<String, Object> map : list) {
                     Integer driverId = Integer.valueOf(map.get("driverId").toString());
                     Double price = Double.valueOf(map.get("price").toString());
@@ -257,6 +587,79 @@
                     if(settlementDetailList.size() > 0){
                         settlementDetailService.updateBatchById(settlementDetailList);
                     }
+    
+                    //强制司机下班
+                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>()
+                            .eq("driverId", driverId).eq("state", 1));
+                    if(null != driverWork){
+                        driverWork.setEndTime(new Date());
+                        driverWork.setState(2);
+                        driverWorkService.updateById(driverWork);
+                        Driver driver = driverService.selectById(driverId);
+                        driver.setState(1);
+                        driverService.updateById(driver);
+                        Car car = carService.selectById(driver.getCarId());
+                        if(!StringUtils.hasLength(car.getVehicleId())){
+                            car.setVehicleId(UUIDUtil.getRandomCode());
+                            carService.updateById(car);
+                        }
+    
+                        //司机下班,修改谷歌上的车辆信息
+                        new Thread(()->{
+                            try {
+                                CarModel carModel = carModelMapper.selectById(car.getCarModelId());
+                                String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId());
+                                if(ToolUtil.isEmpty(vehicles)){
+                                    boolean createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!createVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(createVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                    
+                                    boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!updateVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(updateVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                }else{
+                                    boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                    if(!updateVehicles){
+                                        for (int i = 0; i < 5; i++) {
+                                            updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
+                                            if(updateVehicles){
+                                                break;
+                                            }
+                                            try {
+                                                Thread.sleep(5000L);
+                                            } catch (InterruptedException e) {
+                                                throw new RuntimeException(e);
+                                            }
+                                        }
+                                    }
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }).start();
+                    }
                 }
             }
         }

--
Gitblit v1.7.1