Pu Zhibing
2025-02-11 51b190f22aa8751bd9fbe5229ab5546facdef632
修改订单问题和定时任务bug
19个文件已修改
3个文件已删除
979 ■■■■ 已修改文件
DriverIGOTravel/guns-admin/pom.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/SchedulerUtil.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/resources/application-produce.yml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/src/main/resources/quartz.properties 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCarController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCouponRecordServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRedPacketRecordServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/report/couponStatisticsInfo.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tCar/tCar_info.js 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverIGOTravel/guns-admin/pom.xml
@@ -301,13 +301,8 @@
        </dependency>
        <!--任务调度框架-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.5</version>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
    
        <!--Google ODRD-->
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java
@@ -1,21 +1,13 @@
package com.stylefeng.guns;
import com.stylefeng.guns.core.util.DateUtil;
import com.stylefeng.guns.modular.system.util.GDFalconUtil;
import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil;
import com.stylefeng.guns.modular.system.util.quartz.SchedulerUtil;
import org.apache.http.client.HttpClient;
import org.apache.http.config.SocketConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
@@ -26,10 +18,6 @@
import org.springframework.web.client.RestTemplate;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.TimeZone;
@@ -50,7 +38,7 @@
    public static void main(String[] args) {
        SpringApplication.run(GunsApplication.class, args);
        //启动定时任务调度器
        QuartzUtil.start(GunsApplication.class.getClassLoader().getResourceAsStream("quartz.properties"));
//        QuartzUtil.start(GunsApplication.class.getClassLoader().getResourceAsStream("quartz.properties"));
        logger.info("GunsApplication is success!");
    }
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -10,7 +10,6 @@
import com.stylefeng.guns.modular.smallLogistics.model.OrderLogisticsSpread;
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService;
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
@@ -19,39 +18,30 @@
import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil;
import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil;
import com.stylefeng.guns.modular.system.util.GoogleMap.ReverseGeocodeVo;
import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils;
import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil;
import com.stylefeng.guns.modular.system.util.quartz.jobs.OrderTimeOutJob;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import org.apache.shiro.util.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.quartz.JobDataMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
public class OrderLogisticsServiceImpl extends ServiceImpl<OrderLogisticsMapper, OrderLogistics> implements IOrderLogisticsService {
    
    Logger log = LoggerFactory.getLogger(this.getClass());
    @Resource
    private OrderLogisticsMapper orderLogisticsMapper;
    
@@ -142,6 +132,9 @@
    
    @Autowired
    private IOrderPositionService orderPositionService;
    @Resource
    private QuartzUtil quartzUtil;
@@ -300,9 +293,17 @@
            jobDataMap.put("timeOut", timeOut);
            jobDataMap.put("driverTimeout", driverTimeout);
            jobDataMap.put("describe", language == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
            QuartzUtil.addSimpleQuartzTask(
                    new OrderTimeOutJob().buildQuartzJob("1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
                    , new Date(timeOut), timeOut, 0);
//            QuartzUtil.addSimpleQuartzTask(
//                    new OrderTimeOutJob().buildQuartzJob("1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
//                    , new Date(timeOut), timeOut, 0);
            try {
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap
                        , new Date(timeOut), timeOut, 0);
            } catch (SchedulerException e) {
                throw new RuntimeException(e);
            }
    
            //超时循环提醒
            jobDataMap = new JobDataMap();
@@ -314,9 +315,16 @@
            jobDataMap.put("timeOut", orderLogistics.getEstimateArriveTime().getTime());
            jobDataMap.put("driverTimeout", driverTimeout);
            jobDataMap.put("describe", "");
            QuartzUtil.addSimpleQuartzTask(
                    new OrderTimeOutJob().buildQuartzJob("3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
                    , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
//            QuartzUtil.addSimpleQuartzTask(
//                    new OrderTimeOutJob().buildQuartzJob("3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
//                    , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
            try {
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap
                        , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
            } catch (SchedulerException e) {
                throw new RuntimeException(e);
            }
        }
        
        
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -123,6 +123,9 @@
    
    @Resource
    private IOrderCancelService orderCancelService;
    @Resource
    private QuartzUtil quartzUtil;
@@ -356,8 +359,10 @@
                jobDataMap.put("timeOut", timeOut);
                jobDataMap.put("driverTimeout", driverTimeout);
                jobDataMap.put("describe", language == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                QuartzUtil.addSimpleQuartzTask(
                        new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                QuartzUtil.addSimpleQuartzTask(
//                        new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                        , new Date(timeOut), timeOut, 0);
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                        , new Date(timeOut), timeOut, 0);
    
                //超时循环提醒
@@ -370,8 +375,11 @@
                jobDataMap.put("timeOut", orderPrivateCar.getEstimateArriveTime().getTime());
                jobDataMap.put("driverTimeout", 0);
                jobDataMap.put("describe", "");
                QuartzUtil.addSimpleQuartzTask(
                        new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                QuartzUtil.addSimpleQuartzTask(
//                        new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                        , orderPrivateCar.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                        , orderPrivateCar.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
            }else{
                //超时时间
@@ -386,10 +394,11 @@
                jobDataMap.put("timeOut", timeOut);
                jobDataMap.put("driverTimeout", driverTimeout);
                jobDataMap.put("describe", language == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                QuartzUtil.addSimpleQuartzTask(
                        new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                QuartzUtil.addSimpleQuartzTask(
//                        new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                        , new Date(timeOut), timeOut, 0);
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                        , new Date(timeOut), timeOut, 0);
                
                UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
                
@@ -407,8 +416,10 @@
                jobDataMap.put("describe", language == 1 ? "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName())  + ",请准时!" :
                        language == 2 ? "You are going to pick up " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " at " + sdf.format(orderPrivateCar.getTravelTime()) + ", please be on time. " :
                                "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure.");
                QuartzUtil.addSimpleQuartzTask(
                        new OrderTimeOutJob().buildQuartzJob("2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                QuartzUtil.addSimpleQuartzTask(
//                        new OrderTimeOutJob().buildQuartzJob("2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                        , new Date(travelTime), travelTime, 0);
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                        , new Date(travelTime), travelTime, 0);
    
                //预约单出发循环提醒
@@ -423,8 +434,10 @@
                jobDataMap.put("describe", language == 1 ? "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName())  + ",请准时!" :
                        language == 2 ? "You are going to pick up " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " at " + sdf.format(orderPrivateCar.getTravelTime()) + ", please be on time. " :
                                "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure.");
                QuartzUtil.addSimpleQuartzTask(
                        new OrderTimeOutJob().buildQuartzJob("2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                QuartzUtil.addSimpleQuartzTask(
//                        new OrderTimeOutJob().buildQuartzJob("2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                        , new Date(travelTime + reminderRules.getReserveNext() * 60000), reminderRules.getReserveNext() * 60000, -1);
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                        , new Date(travelTime + reminderRules.getReserveNext() * 60000), reminderRules.getReserveNext() * 60000, -1);
    
                //超时循环提醒
@@ -437,8 +450,10 @@
                jobDataMap.put("timeOut", orderPrivateCar.getTravelTime().getTime());
                jobDataMap.put("driverTimeout", 0);
                jobDataMap.put("describe", "");
                QuartzUtil.addSimpleQuartzTask(
                        new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                QuartzUtil.addSimpleQuartzTask(
//                        new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                        , orderPrivateCar.getTravelTime(), reminderRules.getCar() * 60000, -1);
                quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class,"3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                        , orderPrivateCar.getTravelTime(), reminderRules.getCar() * 60000, -1);
            }
        }
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
@@ -248,4 +248,9 @@
     * 使用google获取司机的最新位置信息
     */
    void getDriverNowPosition();
    /**
     * 结束google订单状态
     */
    void overGoogleOrder();
}
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -112,6 +112,9 @@
    
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private ICarService carService;
@@ -1292,6 +1295,126 @@
            }
        }
    }
    /**
     * 结束google订单状态
     */
    @Override
    public void overGoogleOrder() {
        List<OrderPrivateCar> privateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().isNotNull("tripId")
                .eq("isover", 0).in("state", Arrays.asList(7, 8, 9, 10)).eq("isDelete", 1));
        for (OrderPrivateCar privateCar : privateCars) {
            Integer state = privateCar.getState();
            String tripId = privateCar.getTripId();
            String trip = fleetEngineUtil.getTrip(tripId);
            if(ToolUtil.isNotEmpty(trip)){
                JSONObject jsonObject = JSON.parseObject(trip);
                String tripStatus = jsonObject.getString("tripStatus");
                Car car = carService.selectById(privateCar.getCarId());
                if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                            if(updateTrip){
                                privateCar.setIsover(1);
                                orderPrivateCarService.updateById(privateCar);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }else{
                        privateCar.setIsover(1);
                        orderPrivateCarService.updateById(privateCar);
                    }
                }
                if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                            if(updateTrip){
                                privateCar.setIsover(1);
                                orderPrivateCarService.updateById(privateCar);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }else{
                        privateCar.setIsover(1);
                        orderPrivateCarService.updateById(privateCar);
                    }
                }
            }
        }
        List<OrderLogistics> orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().isNotNull("tripId")
                .eq("isover", 0).in("state", Arrays.asList(7, 8, 9, 10)).eq("isDelete", 1));
        for (OrderLogistics orderLogistics : orderLogisticsList) {
            Integer state = orderLogistics.getState();
            String tripId = orderLogistics.getTripId();
            String trip = fleetEngineUtil.getTrip(tripId);
            if(ToolUtil.isNotEmpty(trip)){
                JSONObject jsonObject = JSON.parseObject(trip);
                String tripStatus = jsonObject.getString("tripStatus");
                Car car = carService.selectById(orderLogistics.getCarId());
                if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                            if(updateTrip){
                                orderLogistics.setIsover(1);
                                orderLogisticsService.updateById(orderLogistics);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }else{
                        orderLogistics.setIsover(1);
                        orderLogisticsService.updateById(orderLogistics);
                    }
                }
                if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null);
                            if(updateTrip){
                                orderLogistics.setIsover(1);
                                orderLogisticsService.updateById(orderLogistics);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }else{
                        orderLogistics.setIsover(1);
                        orderLogisticsService.updateById(orderLogistics);
                    }
                }
            }
        }
    }
}
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -9,10 +9,8 @@
import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
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.specialTrain.server.impl.OrderPrivateCarServiceImpl;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
@@ -126,6 +124,9 @@
    
    @Resource
    private CarModelMapper carModelMapper;
    @Resource
    private QuartzUtil quartzUtil;
@@ -362,10 +363,10 @@
                    
                    
                    //删除定时任务
                    QuartzUtil.deleteQuartzTask("1_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    QuartzUtil.deleteQuartzTask("2_1_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    QuartzUtil.deleteQuartzTask("2_2_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    QuartzUtil.deleteQuartzTask("3_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("1_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("2_1_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("2_2_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("3_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
        
                    /**
                     * 超时用户取消不收费的提醒
@@ -400,8 +401,10 @@
                            jobDataMap.put("timeOut", timeOut);
                            jobDataMap.put("driverTimeout", driverTimeout);
                            jobDataMap.put("describe", language1 == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language1 == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                            QuartzUtil.addSimpleQuartzTask(
                                    new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                            QuartzUtil.addSimpleQuartzTask(
//                                    new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                                    , new Date(timeOut), timeOut, 0);
                            quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                    , new Date(timeOut), timeOut, 0);
                
                            //超时循环提醒
@@ -414,8 +417,10 @@
                            jobDataMap.put("timeOut", orderPrivateCar.getEstimateArriveTime().getTime());
                            jobDataMap.put("driverTimeout", 0);
                            jobDataMap.put("describe", "");
                            QuartzUtil.addSimpleQuartzTask(
                                    new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                            QuartzUtil.addSimpleQuartzTask(
//                                    new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                                    , orderPrivateCar.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
                            quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                    , orderPrivateCar.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
                        }else{
                            //超时时间
@@ -430,8 +435,10 @@
                            jobDataMap.put("timeOut", timeOut);
                            jobDataMap.put("driverTimeout", driverTimeout);
                            jobDataMap.put("describe", language1 == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language1 == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                            QuartzUtil.addSimpleQuartzTask(
                                    new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                            QuartzUtil.addSimpleQuartzTask(
//                                    new OrderTimeOutJob().buildQuartzJob("1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                                    , new Date(timeOut), timeOut, 0);
                            quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                    , new Date(timeOut), timeOut, 0);
                
                
@@ -451,8 +458,10 @@
                            jobDataMap.put("describe", language1 == 1 ? "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName())  + ",请准时!" :
                                    language1 == 2 ? "You are going to pick up " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " at " + sdf.format(orderPrivateCar.getTravelTime()) + ", please be on time. " :
                                            "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure.");
                            QuartzUtil.addSimpleQuartzTask(
                                    new OrderTimeOutJob().buildQuartzJob("2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                            QuartzUtil.addSimpleQuartzTask(
//                                    new OrderTimeOutJob().buildQuartzJob("2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                                    , new Date(travelTime), travelTime, 0);
                            quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                    , new Date(travelTime), travelTime, 0);
                
                            //预约单出发循环提醒
@@ -467,8 +476,10 @@
                            jobDataMap.put("describe", language1 == 1 ? "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName())  + ",请准时!" :
                                    language1 == 2 ? "You are going to pick up " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " at " + sdf.format(orderPrivateCar.getTravelTime()) + ", please be on time. " :
                                            "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure.");
                            QuartzUtil.addSimpleQuartzTask(
                                    new OrderTimeOutJob().buildQuartzJob("2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                            QuartzUtil.addSimpleQuartzTask(
//                                    new OrderTimeOutJob().buildQuartzJob("2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                                    , new Date(travelTime + reminderRules.getReserveNext() * 60000), reminderRules.getReserveNext() * 60000, -1);
                            quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                    , new Date(travelTime + reminderRules.getReserveNext() * 60000), reminderRules.getReserveNext() * 60000, -1);
                
                            //超时循环提醒
@@ -481,8 +492,10 @@
                            jobDataMap.put("timeOut", orderPrivateCar.getTravelTime().getTime());
                            jobDataMap.put("driverTimeout", 0);
                            jobDataMap.put("describe", "");
                            QuartzUtil.addSimpleQuartzTask(
                                    new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                            QuartzUtil.addSimpleQuartzTask(
//                                    new OrderTimeOutJob().buildQuartzJob("3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap)
//                                    , orderPrivateCar.getTravelTime(), reminderRules.getCar() * 60000, -1);
                            quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "3_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                    , orderPrivateCar.getTravelTime(), reminderRules.getCar() * 60000, -1);
                        }
                    }
@@ -661,10 +674,10 @@
                    
        
                    //删除定时任务
                    QuartzUtil.deleteQuartzTask("1_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    QuartzUtil.deleteQuartzTask("2_1_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    QuartzUtil.deleteQuartzTask("2_2_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    QuartzUtil.deleteQuartzTask("3_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("1_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("2_1_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("2_2_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                    quartzUtil.deleteQuartzTask("3_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
        
                    /**
                     * 超时用户取消不收费的提醒
@@ -693,8 +706,10 @@
                        jobDataMap.put("timeOut", timeOut);
                        jobDataMap.put("driverTimeout", driverTimeout);
                        jobDataMap.put("describe", language1 == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language1 == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                        QuartzUtil.addSimpleQuartzTask(
                                new OrderTimeOutJob().buildQuartzJob("1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
//                        QuartzUtil.addSimpleQuartzTask(
//                                new OrderTimeOutJob().buildQuartzJob("1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
//                                , new Date(timeOut), timeOut, 0);
                        quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap
                                , new Date(timeOut), timeOut, 0);
            
                        //超时循环提醒
@@ -707,8 +722,10 @@
                        jobDataMap.put("timeOut", orderLogistics.getEstimateArriveTime().getTime());
                        jobDataMap.put("driverTimeout", driverTimeout);
                        jobDataMap.put("describe", "");
                        QuartzUtil.addSimpleQuartzTask(
                                new OrderTimeOutJob().buildQuartzJob("3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
//                        QuartzUtil.addSimpleQuartzTask(
//                                new OrderTimeOutJob().buildQuartzJob("3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap)
//                                , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
                        quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap
                                , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
                    }
                    
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -67,6 +67,8 @@
            orderService.taskMidAxbUnBindSend();
            //处理司机连续不接单的情况
            driverOnlineService.deductionDuration1();
            //处理google订单状态
            orderService.overGoogleOrder();
        } catch (Exception e) {
            e.printStackTrace();
        }
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java
@@ -1,12 +1,12 @@
package com.stylefeng.guns.modular.system.util.quartz;
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzEnum;
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzJob;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -18,29 +18,11 @@
 * @Date 2024/3/20 11:12
 */
@Slf4j
@Component
public class QuartzUtil {
    /**
     * 构建调度器
     */
    public static Scheduler scheduler;
    
    /**
     * 启动调度器
     * @param propertiesStream 配置文件流
     * @return
     */
    public static void start(InputStream propertiesStream){
        if(null == scheduler){
            scheduler = SchedulerUtil.getScheduler(propertiesStream);
        }
        try {
            scheduler.start();
            log.info(QuartzEnum.SCHEDULER_START_SUCCESS.getValue());
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
    @Autowired
    private Scheduler scheduler;
    
    
    
@@ -48,40 +30,50 @@
    
    /**
     * 添加普通定时任务
     * @param quartzJob 任务类
     * @param startTime 任务开始执行时间,为空则立即执行
     * @param intervalInMilliseconds 执行间隔毫秒数
     * @param repeatCount 重复执行次数,-1表示永远执行
     * @throws SchedulerException
     */
    public static void addSimpleQuartzTask(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException {
        if(null == scheduler){
            log.error("请先加载任务调取器");
    public void addSimpleQuartzTask(Class<? extends Job> clazz, String job_name, String group_name, JobDataMap jobDataMap, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException {
        JobKey jobKey = JobKey.jobKey(job_name, group_name);
        if(scheduler.checkExists(jobKey)){
            log.error("[添加定时任务]已存在该作业,jobkey为:{}", jobKey);
            return;
        }
        JobDetail jobDetail = getJobDetail(quartzJob);
        Trigger simpleTrigger = getSimpleTrigger(quartzJob, startTime, intervalInMilliseconds, repeatCount);
        scheduler.scheduleJob(jobDetail, simpleTrigger);
        log.info(QuartzEnum.ADD_SIMPLE_TRIGGER_SUCCESS.getValue());
        // 构建 Job
        JobDetail job = JobBuilder.newJob(clazz)
                .setJobData(jobDataMap)
                .withIdentity(jobKey).build();
        // 构建 Trigger
        Trigger trigger = getSimpleTrigger(job_name, group_name, startTime, intervalInMilliseconds, repeatCount);
        // 启动调度器
        scheduler.scheduleJob(job, trigger);
        scheduler.start();
    }
    
    
    
    /**
     * 添加Cron表达式的定时任务
     * @param quartzJob 任务类
     * @param cron cron表达式
     * @throws SchedulerException
     */
    public static void addCronQuartzTask(QuartzJob quartzJob, String cron) throws SchedulerException {
        if(null == scheduler){
            log.error("请先加载任务调取器");
    public void addCronQuartzTask(Class<? extends Job> clazz, String job_name, String group_name, JobDataMap jobDataMap, String cron) throws SchedulerException {
        JobKey jobKey = JobKey.jobKey(job_name, group_name);
        if(scheduler.checkExists(jobKey)){
            log.error("[添加定时任务]已存在该作业,jobkey为:{}", jobKey);
            return;
        }
        JobDetail jobDetail = getJobDetail(quartzJob);
        Trigger cronTrigger = getCronTrigger(quartzJob, cron);
        scheduler.scheduleJob(jobDetail, cronTrigger);
        log.info(QuartzEnum.ADD_CRON_TRIGGER_SUCCESS.getValue());
        // 构建 Job
        JobDetail job = JobBuilder.newJob(clazz)
                .setJobData(jobDataMap)
                .withIdentity(jobKey).build();
        // 构建 Trigger
        Trigger trigger = getCronTrigger(job_name, group_name, cron);
        // 启动调度器
        scheduler.scheduleJob(job, trigger);
        scheduler.start();
    }
    
    
@@ -91,7 +83,7 @@
     * @param group 任务分组
     * @return
     */
    public static boolean deleteQuartzTask(String name, String group){
    public boolean deleteQuartzTask(String name, String group){
        JobKey jobKey = new JobKey(name, group);
        boolean b = false;
        try {
@@ -107,7 +99,7 @@
     * @param jobKey
     * @return
     */
    public static boolean deleteQuartzTask(JobKey jobKey){
    public boolean deleteQuartzTask(JobKey jobKey){
        boolean b = false;
        try {
            b = scheduler.deleteJob(jobKey);
@@ -122,7 +114,7 @@
     * @param group 分组名称
     * @return
     */
    public static boolean deleteGroupQuartzTask(String group){
    public boolean deleteGroupQuartzTask(String group){
        try {
            GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(group);
            Set<JobKey> jobKeys = scheduler.getJobKeys(groupMatcher);
@@ -143,7 +135,7 @@
     * 清空所有定时任务
     * @return
     */
    public static boolean deleteAllQuartzTask(){
    public boolean deleteAllQuartzTask(){
        try {
            List<String> jobGroupNames = scheduler.getJobGroupNames();
            for (String jobGroupName : jobGroupNames) {
@@ -167,19 +159,16 @@
    
    /**
     * 构建任务描述JobDetail对象
     * @param quartzJob 任务对象
     * @return
     */
    private static JobDetail getJobDetail(QuartzJob quartzJob){
        String name = quartzJob.getName();
        String group = quartzJob.getGroup();
        if(null == name || "".equals(name)){
            name = QuartzEnum.JOB_NAME.getValue();
    private JobDetail getJobDetail(Job job, String job_name, String group_name){
        if(null == job_name || "".equals(job_name)){
            job_name = QuartzEnum.JOB_NAME.getValue();
        }
        if(null == group || "".equals(group)){
            group = QuartzEnum.DEFAULT_GROUP.getValue();
        if(null == group_name || "".equals(group_name)){
            group_name = QuartzEnum.DEFAULT_GROUP.getValue();
        }
        return getJobDetail(quartzJob, name, group, quartzJob.getJobDataMap());
        return getJobDetail(job, job_name, group_name, null);
    }
    
    
@@ -192,7 +181,7 @@
     * @param jobDataMap 自定义参数
     * @return
     */
    private static JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){
    private JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){
        JobDetail jobDetail = JobBuilder.newJob(job.getClass())
                .withIdentity(job_name, group_name)
                .setJobData(jobDataMap)
@@ -203,20 +192,17 @@
    
    /**
     * 构建Trigger执行器
     * @param quartzJob 任务类
     * @param startTime 任务开始执行时间,为空则立即执行
     * @param intervalInMilliseconds 执行间隔毫秒数
     * @param repeatCount 重读执行次数,-1表示永远执行
     * @return
     */
    private static Trigger getSimpleTrigger(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount){
        String name = quartzJob.getName();
        String group = quartzJob.getGroup();
        if(null == name || "".equals(name)){
            name = QuartzEnum.JOB_NAME.getValue();
    private static Trigger getSimpleTrigger(String job_name, String group_name, Date startTime, long intervalInMilliseconds, int repeatCount){
        if(null == job_name || "".equals(job_name)){
            job_name = QuartzEnum.JOB_NAME.getValue();
        }
        if(null == group || "".equals(group)){
            group = QuartzEnum.DEFAULT_GROUP.getValue();
        if(null == group_name || "".equals(group_name)){
            group_name = QuartzEnum.DEFAULT_GROUP.getValue();
        }
        TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger();
        if(null == startTime){
@@ -226,7 +212,7 @@
        }
        
        SimpleTrigger trigger = triggerTriggerBuilder
                .withIdentity(name, group)
                .withIdentity(job_name, group_name)
                .withSchedule(
                        SimpleScheduleBuilder
                                .simpleSchedule()
@@ -239,22 +225,19 @@
    
    /**
     * 构建cronExpression表达式执行器
     * @param quartzJob 任务类
     * @param cron cron表达式
     * @return
     */
    private static Trigger getCronTrigger(QuartzJob quartzJob, String cron) {
        String name = quartzJob.getName();
        String group = quartzJob.getGroup();
        if(null == name || "".equals(name)){
            name = QuartzEnum.JOB_NAME.getValue();
    private static Trigger getCronTrigger(String job_name, String group_name, String cron) {
        if(null == job_name || "".equals(job_name)){
            job_name = QuartzEnum.JOB_NAME.getValue();
        }
        if(null == group || "".equals(group)){
            group = QuartzEnum.DEFAULT_GROUP.getValue();
        if(null == group_name || "".equals(group_name)){
            group_name = QuartzEnum.DEFAULT_GROUP.getValue();
        }
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .startNow()
                .withIdentity(name, group)
                .withIdentity(job_name, group_name)
                .withSchedule(
                        CronScheduleBuilder.cronSchedule(cron)
                ).build();
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/SchedulerUtil.java
File was deleted
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java
@@ -8,15 +8,11 @@
import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
import com.stylefeng.guns.modular.system.dao.UserInfoMapper;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.User;
import com.stylefeng.guns.modular.system.model.UserInfo;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.service.IUserService;
import com.stylefeng.guns.modular.system.util.PushUtil;
import com.stylefeng.guns.modular.system.util.TextToSpeechUtil;
import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil;
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzEnum;
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzJob;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.stereotype.Component;
@@ -31,6 +27,7 @@
import java.util.Timer;
import java.util.TimerTask;
/**
 * 订单司机超时提醒任务
 * @author zhibing.pu
@@ -38,7 +35,7 @@
 */
@Slf4j
@Component
public class OrderTimeOutJob extends QuartzJob {
public class OrderTimeOutJob implements Job {
    
    @Resource
    private PushUtil pushUtil;
@@ -51,47 +48,14 @@
    @Resource
    private UserInfoMapper userInfoMapper;
    
    @Override
    public QuartzJob buildQuartzJob() {
        return buildQuartzJob(QuartzEnum.JOB_NAME.getValue());
    }
    @Override
    public QuartzJob buildQuartzJob(String name) {
        return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue());
    }
    @Override
    public QuartzJob buildQuartzJob(String name, String group) {
        return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue(), null);
    }
    @Override
    public QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap) {
        QuartzJob job = new OrderTimeOutJob();
        if(ToolUtil.isNotEmpty(name)){
            job.setName(name);
        }else{
            job.setName(QuartzEnum.JOB_NAME.getValue());
        }
        if(ToolUtil.isNotEmpty(group)){
            job.setGroup(group);
        }else{
            job.setGroup(QuartzEnum.DEFAULT_GROUP.getValue());
        }
        if(null != jobDataMap){
            job.setJobDataMap(jobDataMap);
        }
        return job;
    }
    @Resource
    private QuartzUtil quartzUtil;
    
    /**
     * 执行的业务逻辑
     * @param jobExecutionContext 定时任务上下文对象
     */
    @Override
    public void run(JobExecutionContext jobExecutionContext) {
        JobDetail jobDetail = jobExecutionContext.getJobDetail();
        JobDataMap jobDataMap = jobDetail.getJobDataMap();
@@ -151,7 +115,7 @@
            List<Integer> list = Arrays.asList(4, 5, 6, 7, 8, 9, 10, 11, 12);
            if(1 == timeOutType && list.contains(orderPrivateCar.getState())){
                JobKey key = jobExecutionContext.getJobDetail().getKey();
                boolean b = QuartzUtil.deleteQuartzTask(key);
                boolean b = quartzUtil.deleteQuartzTask(key);
                if(!b){
                    log.error("定时任务关闭失败:" + key.toString());
                }
@@ -159,7 +123,7 @@
            }
            if(2 == timeOutType && (System.currentTimeMillis() >= timeOut || list.contains(orderPrivateCar.getState()))){
                JobKey key = jobExecutionContext.getJobDetail().getKey();
                boolean b = QuartzUtil.deleteQuartzTask(key);
                boolean b = quartzUtil.deleteQuartzTask(key);
                if(!b){
                    log.error("定时任务关闭失败:" + key.toString());
                }
@@ -169,7 +133,7 @@
            //结束超时循环提醒定时
            if(3 == timeOutType && list.contains(orderPrivateCar.getState())){
                JobKey key = jobExecutionContext.getJobDetail().getKey();
                boolean b = QuartzUtil.deleteQuartzTask(key);
                boolean b = quartzUtil.deleteQuartzTask(key);
                if(!b){
                    log.error("定时任务关闭失败:" + key.toString());
                }
@@ -183,7 +147,7 @@
            List<Integer> list = Arrays.asList(4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
            if(1 == timeOutType && list.contains(orderLogistics.getState())){
                JobKey key = jobExecutionContext.getJobDetail().getKey();
                boolean b = QuartzUtil.deleteQuartzTask(key);
                boolean b = quartzUtil.deleteQuartzTask(key);
                if(!b){
                    log.error("定时任务关闭失败:" + key.toString());
                }
@@ -192,7 +156,7 @@
            //结束超时循环提醒定时
            if(3 == timeOutType && list.contains(orderLogistics.getState())){
                JobKey key = jobExecutionContext.getJobDetail().getKey();
                boolean b = QuartzUtil.deleteQuartzTask(key);
                boolean b = quartzUtil.deleteQuartzTask(key);
                if(!b){
                    log.error("定时任务关闭失败:" + key.toString());
                }
@@ -236,44 +200,12 @@
    }
    
    
    /**
     * 初始化任务对象
     * @return
     */
    public static QuartzJob init(){
        return new OrderTimeOutJob().buildQuartzJob();
    }
    /**
     * 初始化任务对象
     * @param name
     * @return
     */
    public static QuartzJob init(String name){
        return new OrderTimeOutJob().buildQuartzJob(name);
    @Override
    public void execute(JobExecutionContext jobExecutionContext){
        run(jobExecutionContext);
    }
    
    
    
    /**
     * 初始化任务对象
     * @param name
     * @param group
     * @return
     */
    public static QuartzJob init(String name, String group){
        return new OrderTimeOutJob().buildQuartzJob(name, group);
    }
    
    /**
     * 初始化任务对象
     * @param name
     * @param group
     * @return
     */
    public static QuartzJob init(String name, String group, JobDataMap jobDataMap){
        return new OrderTimeOutJob().buildQuartzJob(name, group, jobDataMap);
    }
}
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java
File was deleted
DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml
@@ -124,4 +124,37 @@
---
share:
  url: https://igo.i-go.group/share/share/pages/changeStyle/changeStyle.html
  url: https://igo.i-go.group/share/share/pages/changeStyle/changeStyle.html
---
spring:
  quartz:
    job-store-type: jdbc
    jdbc:
      initialize-schema: embedded
    properties:
      org:
        quartz:
          scheduler:
            # 调度器实例名称
            instanceName: QuartzScheduler
            # 分布式节点ID自动生成
            instanceId: AUTO
          jobStore:
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            # 表前缀
            tablePrefix: qrtz_
            # 是否开启集群
            isClustered: false
            # 数据源别名(自定义)
            dataSource: myDS
            # 分布式节点有效性检查时间间隔(毫秒)
            clusterCheckinInterval: 10000
            useProperties: false
          # 线程池配置
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
DriverIGOTravel/guns-admin/src/main/resources/application-produce.yml
@@ -126,4 +126,39 @@
---
share:
  url: https://igo.i-go.group/share/share/pages/changeStyle/changeStyle.html
  url: https://igo.i-go.group/share/share/pages/changeStyle/changeStyle.html
---
spring:
  quartz:
    job-store-type: jdbc
    jdbc:
      initialize-schema: embedded
    properties:
      org:
        quartz:
          scheduler:
            # 调度器实例名称
            instanceName: QuartzScheduler
            # 分布式节点ID自动生成
            instanceId: AUTO
          jobStore:
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            # 表前缀
            tablePrefix: qrtz_
            # 是否开启集群
            isClustered: false
            # 数据源别名(自定义)
            dataSource: myDS
            # 分布式节点有效性检查时间间隔(毫秒)
            clusterCheckinInterval: 10000
            useProperties: false
          # 线程池配置
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
DriverIGOTravel/guns-admin/src/main/resources/quartz.properties
File was deleted
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCarController.java
@@ -98,11 +98,15 @@
    public String index() {
        return PREFIX + "tCar.html";
    }
    @RequestMapping("auth")
    public String auth() {
        return PREFIX + "tCarAuth.html";
    }
    /**
     * 跳转到添加车辆管理
     */
@@ -248,6 +252,8 @@
        model.addAttribute("color", state);
        return PREFIX + "tCar_edit.html";
    }
    @RequestMapping("/tCar_auth/{tCarId}")
    public String tCarAuth(@PathVariable Integer tCarId, Model model) {
        TCar tCar = tCarService.selectById(tCarId);
@@ -289,6 +295,7 @@
        return PREFIX + "tCar_auth.html";
    }
    /**
     * 跳转到保险列表页
     * @param carId
@@ -597,6 +604,8 @@
        tCarService.updateById(tCar);
        return SUCCESS_TIP;
    }
    @RequestMapping(value = "/updateAuth")
    @ResponseBody
    public Object updateAuth(TCar tCar,String zcModel,String xjModel,@RequestParam String serverBox) {
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml
@@ -684,7 +684,10 @@
        sum(aa.czcUseMoney) as czcUseMoney,
        sum(aa.kcNum) as kcNum,
        sum(aa.kcUseNum) as kcUseNum,
        sum(aa.kcUseMoney) as kcUseMoney
        sum(aa.kcUseMoney) as kcUseMoney,
        sum(aa.xjNum) as xjNum,
        sum(aa.xjUseNum) as xjUseNum,
        sum(aa.xjUseMoney) as xjUseMoney
        from (
            select
            DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s') as time,
@@ -703,7 +706,10 @@
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -740,7 +746,10 @@
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -778,7 +787,10 @@
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -815,7 +827,10 @@
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -852,7 +867,10 @@
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -889,7 +907,10 @@
            sum(a.money) as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -926,7 +947,10 @@
            0 as czcUseMoney,
            count(a.id) as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney
            0 as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -963,7 +987,10 @@
            0 as czcUseMoney,
            0 as kcNum,
            count(a.id) as kcUseNum,
            sum(a.money) as kcUseMoney
            sum(a.money) as kcUseMoney,
            0 as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
@@ -980,6 +1007,86 @@
                and c.companyId = #{companyId}
            </if>
            GROUP BY DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s'),a.userId
            union all
            select
            DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s') as time,
            a.userId as userId,
            d.nickName as userName,
            d.phone as phone,
            0 as amount,
            0 as tyNum,
            0 as tyUseNum,
            0 as tyUseMoney,
            0 as zcNum,
            0 as zcUseNum,
            0 as zcUseMoney,
            0 as czcNum,
            0 as czcUseNum,
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney,
            count(a.id) as xjNum,
            0 as xjUseNum,
            0 as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
            left join t_user d on (a.userId = d.id)
            left join t_payment_record e on (a.paymentRecordId = e.id)
            where a.activityType = 4 and a.couponUseType = 4
            <if test="null != name and '' != name">
                and c.`name` like CONCAT('%', #{name}, '%')
            </if>
            <if test="null != start and '' != start and null != end and '' != end">
                and DATE_FORMAT(a.insertTime, '%Y-%m-%d') between #{start} and #{end}
            </if>
            <if test="null != companyId">
                and c.companyId = #{companyId}
            </if>
            GROUP BY DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s'),a.userId
            union all
            select
            DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s') as time,
            a.userId as userId,
            d.nickName as userName,
            d.phone as phone,
            0 as amount,
            0 as tyNum,
            0 as tyUseNum,
            0 as tyUseMoney,
            0 as zcNum,
            0 as zcUseNum,
            0 as zcUseMoney,
            0 as czcNum,
            0 as czcUseNum,
            0 as czcUseMoney,
            0 as kcNum,
            0 as kcUseNum,
            0 as kcUseMoney,
            0 as xjNum,
            count(a.id) as xjUseNum,
            sum(a.money) as xjUseMoney
            from t_user_coupon_record a
            left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
            left join t_user_activity c on (b.userActivityId = c.id)
            left join t_user d on (a.userId = d.id)
            left join t_payment_record e on (a.paymentRecordId = e.id)
            where a.activityType = 4 and a.couponUseType = 4 and a.state = 2
            <if test="null != name and '' != name">
                and c.`name` like CONCAT('%', #{name}, '%')
            </if>
            <if test="null != start and '' != start and null != end and '' != end">
                and DATE_FORMAT(a.insertTime, '%Y-%m-%d') between #{start} and #{end}
            </if>
            <if test="null != companyId">
                and c.companyId = #{companyId}
            </if>
            GROUP BY DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s'),a.userId
        ) as aa GROUP BY aa.time,aa.userId order by aa.time desc
        <if test="null != offset and null != limit">
            limit #{offset}, #{limit}
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCouponRecordServiceImpl.java
@@ -389,15 +389,12 @@
        list.add("通用券领取总数");
        list.add("通用券使用总数");
        list.add("通用券使用总金额");
        list.add("专车券领取总数");
        list.add("专车券使用总数");
        list.add("专车券使用总金额");
        list.add("出租车券领取总数");
        list.add("出租车券使用总数");
        list.add("出租车券使用总金额");
        list.add("跨城券领取总数");
        list.add("跨城券使用总数");
        list.add("跨城券使用总金额");
        list.add("打车券领取总数");
        list.add("打车券使用总数");
        list.add("打车券使用总金额");
        list.add("包裹券领取总数");
        list.add("包裹券使用总数");
        list.add("包裹券使用总金额");
        lists.add(list);
        List<List<List<String>>> lists1 = new ArrayList<>();
@@ -414,12 +411,9 @@
            list2.add(null != map.get("zcNum") ? map.get("zcNum").toString() : "");
            list2.add(null != map.get("zcUseNum") ? map.get("zcUseNum").toString() : "");
            list2.add(null != map.get("zcUseMoney") ? map.get("zcUseMoney").toString() : "");
            list2.add(null != map.get("czcNum") ? map.get("czcNum").toString() : "");
            list2.add(null != map.get("czcUseNum") ? map.get("czcUseNum").toString() : "");
            list2.add(null != map.get("czcUseMoney") ? map.get("czcUseMoney").toString() : "");
            list2.add(null != map.get("kcNum") ? map.get("kcNum").toString() : "");
            list2.add(null != map.get("kcUseNum") ? map.get("kcUseNum").toString() : "");
            list2.add(null != map.get("kcUseMoney") ? map.get("kcUseMoney").toString() : "");
            list2.add(null != map.get("xjNum") ? map.get("xjNum").toString() : "");
            list2.add(null != map.get("xjUseNum") ? map.get("xjUseNum").toString() : "");
            list2.add(null != map.get("xjUseMoney") ? map.get("xjUseMoney").toString() : "");
            lists2.add(list2);
        }
        lists1.add(lists2);
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRedPacketRecordServiceImpl.java
@@ -228,9 +228,6 @@
        list.add("领取人");
        list.add("领取人电话");
        list.add("领取金额");
        list.add("到期时间");
        list.add("状态");
        list.add("使用时间");
        lists.add(list);
        List<List<List<String>>> lists1 = new ArrayList<>();
@@ -241,9 +238,6 @@
            list2.add(null != map.get("name") ? map.get("name").toString() : "");
            list2.add(null != map.get("phone") ? map.get("phone").toString() : "");
            list2.add(null != map.get("money") ? map.get("money").toString() : "");
            list2.add(null != map.get("expirationTime") ? map.get("expirationTime").toString() : "");
            list2.add(null != map.get("state") ? map.get("state").toString() : "");
            list2.add(null != map.get("endTime") ? map.get("endTime").toString() : "");
            lists2.add(list2);
        }
        lists1.add(lists2);
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/report/couponStatisticsInfo.js
@@ -81,9 +81,6 @@
                {title: '领取人', field: 'name', visible: true, align: 'center', valign: 'middle'},
                {title: '领取人电话', field: 'phone', visible: true, align: 'center', valign: 'middle'},
                {title: '领取金额', field: 'money', visible: true, align: 'center', valign: 'middle'},
                {title: '到期时间', field: 'expirationTime', visible: true, align: 'center', valign: 'middle'},
                {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle'},
                {title: '使用时间', field: 'endTime', visible: true, align: 'center', valign: 'middle'}
            ]
        var table = new BSTable(CouponStatisticsInfo.id, '/report/queryRedEnvelopesInfo', defaultColunms);
        table.setPaginationType("server");
@@ -116,9 +113,12 @@
                {title: '通用券领取总数', field: 'tyNum', visible: true, align: 'center', valign: 'middle'},
                {title: '通用券使用总数', field: 'tyUseNum', visible: true, align: 'center', valign: 'middle'},
                {title: '通用券使用总金额', field: 'tyUseMoney', visible: true, align: 'center', valign: 'middle'},
                {title: '专车券领取总数', field: 'zcNum', visible: true, align: 'center', valign: 'middle'},
                {title: '专车券使用总数', field: 'zcUseNum', visible: true, align: 'center', valign: 'middle'},
                {title: '专车券使用总金额', field: 'zcUseMoney', visible: true, align: 'center', valign: 'middle'},
                {title: '打车券领取总数', field: 'zcNum', visible: true, align: 'center', valign: 'middle'},
                {title: '打车券使用总数', field: 'zcUseNum', visible: true, align: 'center', valign: 'middle'},
                {title: '打车券使用总金额', field: 'zcUseMoney', visible: true, align: 'center', valign: 'middle'},
                {title: '包裹券领取总数', field: 'xjNum', visible: true, align: 'center', valign: 'middle'},
                {title: '包裹券使用总数', field: 'xjUseNum', visible: true, align: 'center', valign: 'middle'},
                {title: '包裹券使用总金额', field: 'xjUseMoney', visible: true, align: 'center', valign: 'middle'},
            ]
        var table = new BSTable(CouponStatisticsInfo.id, '/report/queryCouponRegisterInfo1', defaultColunms);
        table.setPaginationType("server");
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tCar/tCar_info.js
@@ -481,17 +481,18 @@
            Feng.info("请选择服务模式");
            return;
        }
        var zcModel = $("#zcModel").val();
        if ("" == zcModel){
            Feng.info("请选择专车车型");
            return;
        }
        var xjModel = $("#xjModel").val();
        if ("" == xjModel){
            Feng.info("请选择市内小件物流车型");
            return;
        }
    }
    var zcModel = $("#zcModel").val();
    if ("" == zcModel){
        Feng.info("请选择专车车型");
        return;
    }
    var xjModel = $("#xjModel").val();
    if ("" == xjModel){
        Feng.info("请选择市内小件物流车型");
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tCar/updateAuth", function(data){
        Feng.success("操作成功!");
UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
@@ -6,6 +6,7 @@
import com.google.code.kaptcha.Constants;
import com.stylefeng.guns.core.common.constant.JwtConstants;
import com.stylefeng.guns.core.common.exception.InvalidKaptchaException;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.core.support.HttpKit;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.model.BankCard;
@@ -89,6 +90,8 @@
    
    @Autowired
    private FleetEngineUtil fleetEngineUtil;
    private String salt = "&a.s";
@@ -1421,4 +1424,21 @@
            throw new RuntimeException(e);
        }
    }
    @PostMapping("/base/user/delUserInfo")
    public ResultUtil delUserInfo(String username, String password){
        UserInfo userInfo = userInfoService.selectOne(new EntityWrapper<UserInfo>().eq("phone", username)
                .ne("flag", 3));
        if(null == userInfo){
            return ResultUtil.error("Invalid account");
        }
        if(!ShiroKit.md5(password, salt).equals(userInfo.getPassWord())){
            return ResultUtil.error("Wrong password");
        }
        userInfo.setFlag(3);
        userInfoService.updateById(userInfo);
        return ResultUtil.success();
    }
}