From ddcef762ff4a159e132c68dfec512c60a68a53e6 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 01 十二月 2023 18:21:24 +0800
Subject: [PATCH] 更新接口

---
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java |  694 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 592 insertions(+), 102 deletions(-)

diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 2fd68d8..f677fb2 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -20,6 +20,7 @@
 import com.stylefeng.guns.modular.system.util.GoogleMap.AddressComponentsVo;
 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.warpper.*;
 import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
@@ -37,6 +38,9 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -143,6 +147,13 @@
 
     private String salt = "SA;d5#";
 
+    @Autowired
+    private SMSUtil smsUtil;
+
+
+    @Autowired
+    private TEmailService emailService;
+
 
     @Override
     public Integer getAppOpenInfo(Integer type) {
@@ -162,6 +173,21 @@
      */
     @Override
     public ResultUtil queryCaptcha(String phone, Integer type, Integer language) throws Exception {
+        if(type == 3){
+            Driver driver1 = driverMapper.queryByPhone(phone);
+            if(null != driver1){
+                if(driver1.getAuthState() == 1){
+                    return ResultUtil.error(language == 1 ? "该司机正在审核中" : language == 2 ? "The driver is being reviewed." : "Le chauffeur est en cours d’examen.");
+                }
+                if(driver1.getAuthState() == 2){
+                    return ResultUtil.error(language == 1 ? "该司机已存在" : language == 2 ? "The driver is already existent." : "Le chauffeur existe déjà.");
+                }
+                if(driver1.getAuthState() == 3){
+                    return ResultUtil.error(language == 1 ? "该司机账号已被冻结" : language == 2 ? "Driver account is frozen." : "Le compte du chauffeur est gelé.");
+                }
+            }
+        }
+
         Random random = new Random();
         StringBuffer sb = new StringBuffer();
         for(int i = 0; i < 4; i++){
@@ -183,7 +209,7 @@
                 sms = "Votre code de vérification est: " + authCode + ". Ce code est valide pendant 5 minutes. Ne le divulguez pas aux autres!";
                 break;
         }
-        SMSUtil.sendTwilioMessage("+" + phone, sms);
+        smsUtil.sendCellulantMessage(phone, sms);
         System.out.println(sms);
         return ResultUtil.success();
     }
@@ -201,7 +227,7 @@
         //发送验证码短信
         redisUtil.setStrValue(email, authCode, 5 * 60);//设置五分钟过期
 
-        String path = templatePath + "index.html";
+        String path = templatePath + "driver/index.html";
         Document document = Jsoup.parse(new File(path), "UTF-8");
         if(1 == language){
             document.getElementById("english").remove();
@@ -271,10 +297,10 @@
     @Override
     public boolean checkCaptcha(String email, String phone, String code) throws Exception {
         Object value = redisUtil.getValue(ToolUtil.isNotEmpty(email) ? email : phone);
+        redisUtil.remove(ToolUtil.isNotEmpty(email) ? email : phone);
         if("1246".equals(code)){
             return true;
         }
-
         if(null != value && code.equals(String.valueOf(value))){
             return true;
         }else{
@@ -307,7 +333,7 @@
                 driverMapper.updateById(driver);
 
                 if(ToolUtil.isNotEmpty(driver.getEmail())){
-                    String path = templatePath + "index.html";
+                    String path = templatePath + "driver/index.html";
                     Document document = Jsoup.parse(new File(path), "UTF-8");
                     if(1 == language){
                         document.getElementById("english").remove();
@@ -364,6 +390,49 @@
                         invite2_content.text("Vous avez invité avec succès un conducteur à s’inscrire à i-go pour recevoir une récompense GHS " + bigDecimal.doubleValue() + ". Veuillez vérifier");
                     }
                     EmailUtil.send(driver.getEmail(), language == 1 ? "邀请奖励" : language == 2 ? "invitation bonus" : "prime d'invitation",  document.html());
+                    String randomString = ToolUtil.getRandomString(10);
+                    //开始生成pdf收据和html收据
+                    File file = new File("/usr/local/nginx/html/files/html/");
+                    if(!file.exists()){
+                        file.mkdirs();
+                    }
+                    file = new File("/usr/local/nginx/html/files/html/invitation_" + randomString + ".html");
+                    if(!file.exists()){
+                        file.createNewFile();
+                    }
+                    FileWriter fileWriter = new FileWriter(file);
+                    fileWriter.write(document.html());
+                    fileWriter.flush();
+                    fileWriter.close();
+                    FileInputStream fileInputStream = new FileInputStream(file);
+                    File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                    if(!file1.exists()){
+                        file1.mkdirs();
+                    }
+                    file1 = new File("/usr/local/nginx/html/files/pdf/invitation_" + randomString + ".pdf");
+                    if(!file1.exists()){
+                        file1.createNewFile();
+                    }
+                    FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                    HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                    String link ="http://182.160.16.251:81/files/html/invitation_" + randomString + ".html";
+                    TEmail tEmail = new TEmail();
+                    tEmail.setLink(link);
+                    tEmail.setUserId(driver.getId());
+                    tEmail.setType(2);
+                    tEmail.setName(language == 1 ? "邀请奖励" : language == 2 ? "invitation bonus" : "prime d'invitation");
+                    tEmail.setCreateTime(new Date());
+                    int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                    String week = EmailUtil.getWeek(language, i);
+                    tEmail.setWeek(week);
+                    boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                    if(am){
+                        tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                    }else {
+                        tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                    }
+                    emailService.insert(tEmail);
                 }
 
             }
@@ -412,7 +481,7 @@
     public ResultUtil<LoginWarpper> registeredDriver(String phoneOperator, String phone, String code, String password,Integer uid,Integer uType, Integer language) throws Exception {
         boolean b = this.checkCaptcha("", phone, code);
         if(!b){
-            return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid captcha" : "Code de vérification invalide");
+            return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid CAPTCHA" : "CAPTCHA non valide");
         }
 
         Driver driver1 = driverMapper.queryByPhone_(phone, 4);//获取审核不通过的数据
@@ -423,7 +492,6 @@
             loginWarpper.setId(driver1.getId());
             return ResultUtil.success(loginWarpper);
         }
-
 
         driver1 = driverMapper.queryByPhone(phone);
         if(null != driver1){
@@ -487,7 +555,7 @@
         String[] city = new String[]{city1.getEnglishName()};
         Company query = companyCityService.query(city);
         if(null == query){
-            return ResultUtil.error(language == 1 ? "选择从业地暂未开通业务" : language == 2 ? "The selected place of employment has not yet opened business" : "Choisir un lieu de pratique pas encore ouvert");
+            return ResultUtil.error(language == 1 ? "选择从业地暂未开通业务" : language == 2 ? "Not yet to commence business at the workplace selected." : "N’a pas encore commencé ses activités sur le lieu de travail sélectionné.");
         }
         if(null != query){
             switch (query.getType()){
@@ -513,13 +581,14 @@
         driver.setPlaceOfPractice(language == 1 ? city1.getChineseName() : language == 2 ? city1.getEnglishName() : city1.getFrenchName());
 
         Calendar calendar = Calendar.getInstance();
-        calendar.setTime(registeredWarpper.getGetDriverLicenseDate());
+//        calendar.setTime(registeredWarpper.getGetDriverLicenseDate());
         Calendar now = Calendar.getInstance();
         now.setTime(new Date());
         driver.setDriverAge(now.get(Calendar.YEAR) - calendar.get(Calendar.YEAR));
-        driver.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate());
+//        driver.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate());
         driver.setDriveCardImgUrl1(registeredWarpper.getDriveCardImgUrl());
         driver.setDriveCardImgUrl2(registeredWarpper.getDriveCardImgUrl2());
+        driver.setDriveCard(registeredWarpper.getDriveCard());
         driver.setEmail(registeredWarpper.getEmail());
 
         this.updateById(driver);
@@ -545,7 +614,7 @@
         }
 
         if(ToolUtil.isNotEmpty(driver.getEmail())){
-            String path1 = templatePath + "index.html";
+            String path1 = templatePath + "driver/index.html";
             Document document1 = Jsoup.parse(new File(path1), "UTF-8");
             if(1 == language){
                 document1.getElementById("english").remove();
@@ -596,6 +665,49 @@
                 settle2_user.text("Bonjour " + driver.getFirstName() + "" + driver.getLastName() + ",");
             }
             EmailUtil.send(driver.getEmail(), language == 1 ? "注册成功" : language == 2 ? "registration success" : "succès de l'inscription",  document1.html());
+            String randomString = ToolUtil.getRandomString(10);
+            //开始生成pdf收据和html收据
+            File file = new File("/usr/local/nginx/html/files/html/");
+            if(!file.exists()){
+                file.mkdirs();
+            }
+            file = new File("/usr/local/nginx/html/files/html/registration_" + randomString + ".html");
+            if(!file.exists()){
+                file.createNewFile();
+            }
+            FileWriter fileWriter = new FileWriter(file);
+            fileWriter.write(document1.html());
+            fileWriter.flush();
+            fileWriter.close();
+            FileInputStream fileInputStream = new FileInputStream(file);
+            File file1 = new File("/usr/local/nginx/html/files/pdf/");
+            if(!file1.exists()){
+                file1.mkdirs();
+            }
+            file1 = new File("/usr/local/nginx/html/files/pdf/registration_" + randomString + ".pdf");
+            if(!file1.exists()){
+                file1.createNewFile();
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(file1);
+            HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+            String link ="http://182.160.16.251:81/files/html/registration_" + randomString + ".html";
+            TEmail tEmail = new TEmail();
+            tEmail.setLink(link);
+            tEmail.setUserId(driver.getId());
+            tEmail.setType(2);
+            tEmail.setName(language == 1 ? "注册成功" : language == 2 ? "registration success" : "succès de l'inscription");
+            tEmail.setCreateTime(new Date());
+            int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+            String week = EmailUtil.getWeek(language, i);
+            tEmail.setWeek(week);
+            boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+            if(am){
+                tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+            }else {
+                tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+            }
+            emailService.insert(tEmail);
         }
 
         return ResultUtil.success();
@@ -614,17 +726,17 @@
     public ResultUtil resetPassword(String phone, String code, String password, Integer language) throws Exception {
         boolean b = this.checkCaptcha("", phone, code);
         if(!b){
-            return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid captcha" : "Code de vérification invalide");
+            return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid CAPTCHA" : "CAPTCHA non valide");
         }
         Driver driver = driverMapper.queryByPhone(phone);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "电话号码未注册" : language == 2 ? "The phone number is not registered" : "Numéro de téléphone non enregistré");
+            return ResultUtil.error(language == 1 ? "电话号码未注册" : language == 2 ? "Mobile phone number was not registered." : "Le numéro de téléphone portable n’a pas été enregistré.");
         }
         driver.setPassword(ShiroKit.md5(password, salt));
         driverMapper.updateById(driver);
 
         if(ToolUtil.isNotEmpty(driver.getEmail())){
-            String path1 = templatePath + "index.html";
+            String path1 = templatePath + "driver/index.html";
             Document document1 = Jsoup.parse(new File(path1), "UTF-8");
             if(1 == language){
                 document1.getElementById("english").remove();
@@ -675,6 +787,49 @@
                 pass2_user.text("Bonjour " + driver.getFirstName() + "" + driver.getLastName() + ",");
             }
             EmailUtil.send(driver.getEmail(), language == 1 ? "重置密码" : language == 2 ? "reset Password" : "réinitialiser le mot de passe",  document1.html());
+            String randomString = ToolUtil.getRandomString(10);
+            //开始生成pdf收据和html收据
+            File file = new File("/usr/local/nginx/html/files/html/");
+            if(!file.exists()){
+                file.mkdirs();
+            }
+            file = new File("/usr/local/nginx/html/files/html/reset_" + randomString + ".html");
+            if(!file.exists()){
+                file.createNewFile();
+            }
+            FileWriter fileWriter = new FileWriter(file);
+            fileWriter.write(document1.html());
+            fileWriter.flush();
+            fileWriter.close();
+            FileInputStream fileInputStream = new FileInputStream(file);
+            File file1 = new File("/usr/local/nginx/html/files/pdf/");
+            if(!file1.exists()){
+                file1.mkdirs();
+            }
+            file1 = new File("/usr/local/nginx/html/files/pdf/reset_" + randomString + ".pdf");
+            if(!file1.exists()){
+                file1.createNewFile();
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(file1);
+            HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+            String link ="http://182.160.16.251:81/files/html/reset_" + randomString + ".html";
+            TEmail tEmail = new TEmail();
+            tEmail.setLink(link);
+            tEmail.setUserId(driver.getId());
+            tEmail.setType(2);
+            tEmail.setName(language == 1 ? "重置密码" : language == 2 ? "reset Password" : "réinitialiser le mot de passe");
+            tEmail.setCreateTime(new Date());
+            int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+            String week = EmailUtil.getWeek(language, i);
+            tEmail.setWeek(week);
+            boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+            if(am){
+                tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+            }else {
+                tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+            }
+            emailService.insert(tEmail);
         }
 
         smsrecordService.saveData(6, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
@@ -722,16 +877,16 @@
     public ResultUtil<LoginWarpper> driverLogin(String phone, String password, Integer language) throws Exception {
         Driver driver = driverMapper.queryByPhone(phone);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账号未注册" : language == 2 ? "Account not registered" : "Compte non enregistré");
+            return ResultUtil.error(language == 1 ? "账号未注册" : language == 2 ? "Account unregistered" : "Compte non enregistré");
         }
         if(driver.getAuthState() == 1){
-            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "The account is under review, please wait patiently" : "Le compte est en cours d’examen, veuillez patienter");
+            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "Account is being reviewed, please wait." : "Le compte est en cours d’examen, veuillez patienter.");
         }
         if(driver.getAuthState() == 3){
-            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "The account has been frozen. Please contact the administrator" : "Le compte a été bloqué, veuillez contacter l’administrateur");
+            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "Account is frozen,please contact admin." : "Le compte est gelé, veuillez contacter l’administrateur.");
         }
         if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){
-            return ResultUtil.error(language == 1 ? "密码错误" : language == 2 ? "Password error" : "Mot de passe incorrect");
+            return ResultUtil.error(language == 1 ? "密码错误" : language == 2 ? "Wrong password" : "Mot de passe erroné");
         }
 
         String value = redisUtil.getValue("DEVICE_" + driver.getId());
@@ -770,24 +925,24 @@
         int size = this.queryMyActivity(uid, new Date(), language).size();
         map.put("activity", size);
         //获取司机待支付的现金支付订单推送司机支付
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("driverId", uid).eq("payType", 4)
-                        .eq("driverPay", 1).eq("isDelete", 1));
-                if(orderPrivateCars.size() > 0){
-                    OrderPrivateCar orderPrivateCar = orderPrivateCars.get(0);
-                    pushUtil.pushOfflinePayment(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1);
-                    return;
-                }
-                List<OrderLogistics> orderLogistics = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().eq("driverId", uid).eq("payType", 4)
-                        .eq("isDelete", 1).eq("driverPay", 1));
-                if(orderLogistics.size() > 0){
-                    OrderLogistics orderLogistics1 = orderLogistics.get(0);
-                    pushUtil.pushOfflinePayment(2, orderLogistics1.getDriverId(), orderLogistics1.getId(), orderLogistics1.getType());
-                }
-            }
-        }).start();
+//        new Thread(new Runnable() {
+//            @Override
+//            public void run() {
+//                List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("driverId", uid).eq("payType", 4)
+//                        .eq("driverPay", 1).eq("isDelete", 1));
+//                if(orderPrivateCars.size() > 0){
+//                    OrderPrivateCar orderPrivateCar = orderPrivateCars.get(0);
+//                    pushUtil.pushOfflinePayment(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1);
+//                    return;
+//                }
+//                List<OrderLogistics> orderLogistics = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().eq("driverId", uid).eq("payType", 4)
+//                        .eq("isDelete", 1).eq("driverPay", 1));
+//                if(orderLogistics.size() > 0){
+//                    OrderLogistics orderLogistics1 = orderLogistics.get(0);
+//                    pushUtil.pushOfflinePayment(2, orderLogistics1.getDriverId(), orderLogistics1.getId(), orderLogistics1.getType());
+//                }
+//            }
+//        }).start();
         return map;
     }
 
@@ -850,20 +1005,20 @@
             }
             //判断是否存在审核中的资料
             if(driver.getAuthState()==1){
-                return ResultUtil.error(language == 1 ? "资料审核中,不能出车" : language == 2 ? "Data review, can't get out of the car" : "Données en cours de vérification, pas de voiture disponible");
+                return ResultUtil.error(language == 1 ? "资料审核中,不能出车" : language == 2 ? "Data is being reviewed, unable to drive." : "Les données sont en cours d’examen, il est impossible de conduire.");
             }
             if(driver.getAuthState()==4){
-                return ResultUtil.error(language == 1 ? "请完善资料后再出车" : language == 2 ? "Please complete the information before leaving the car" : "Veuillez compléter vos données avant de sortir");
+                return ResultUtil.error(language == 1 ? "请完善资料后再出车" : language == 2 ? "Please complete data before driving." : "Veuillez compléter les données avant de conduire.");
             }
             Car car = carService.selectById(driver.getCarId());
             if(car==null){
-                return ResultUtil.error(language == 1 ? "请完善资料后再出车" : language == 2 ? "Please complete the information before leaving the car" : "Veuillez compléter vos données avant de sortir");
+                return ResultUtil.error(language == 1 ? "请完善资料后再出车" : language == 2 ? "Please complete data before driving." : "Veuillez compléter les données avant de conduire.");
             }
             if(car.getAuthState()==1){
-                return ResultUtil.error(language == 1 ? "资料审核中,不能出车" : language == 2 ? "Data review, can't get out of the car" : "Données en cours de vérification, pas de voiture disponible");
+                return ResultUtil.error(language == 1 ? "资料审核中,不能出车" : language == 2 ? "Data is being reviewed, unable to drive." : "Les données sont en cours d’examen, il est impossible de conduire.");
             }
             if(car.getAuthState()==4){
-                return ResultUtil.error(language == 1 ? "请完善资料后再出车" : language == 2 ? "Please complete the information before leaving the car" : "Veuillez compléter vos données avant de sortir");
+                return ResultUtil.error(language == 1 ? "请完善资料后再出车" : language == 2 ? "Please complete data before driving." : "Veuillez compléter les données avant de conduire.");
             }
             driverWork = new DriverWork();
             driverWork.setState(1);
@@ -955,9 +1110,9 @@
     public Map<String, Object> queryHomeNum(Integer uid, Integer language) throws Exception {
         Map<String, Object> map = new HashMap<>();
         //出租车
-        List<Map<String, Object>> list = orderTaxiService.queryOrderList(1, uid);
+        List<Map<String, Object>> list = orderTaxiService.queryOrderList(language, 1, uid);
         map.put("service", list.size());//服务中
-        list = orderTaxiService.queryOrderList(2, uid);
+        list = orderTaxiService.queryOrderList(language, 2, uid);
         map.put("reservation", list.size());//预约
         List<Map<String, Object>> list1 = orderLogisticsService.queryOrderList(uid, language);
         map.put("small", list1.size());//小件
@@ -982,7 +1137,7 @@
             baseWarpper.setId(d.getType());
             switch (d.getType()){
                 case 1:
-                    baseWarpper.setName(language == 1 ? "打车" : language == 2 ? "Ride" : "Course ");
+                    baseWarpper.setName(language == 1 ? "打车" : language == 2 ? "Ride" : "Course");
                     break;
                 case 2:
                     baseWarpper.setName(language == 1 ? "出租车" : language == 2 ? "taxi" : "taxi");
@@ -991,7 +1146,7 @@
                     baseWarpper.setName(language == 1 ? "跨城出行" : language == 2 ? "Cross-town travel" : "Se déplacer à travers la ville");
                     break;
                 case 4:
-                    baseWarpper.setName(language == 1 ? "包裹" : language == 2 ? "Package" : "Paquet");
+                    baseWarpper.setName(language == 1 ? "包裹" : language == 2 ? "Package" : "Livraison");
                     break;
                 case 5:
                     baseWarpper.setName(language == 1 ? "跨城小件物流" : language == 2 ? "Cross-city small parts logistics" : "Logistique des petites pièces à travers la ville");
@@ -1017,8 +1172,14 @@
      * @throws Exception
      */
     @Override
-    public Map<String, Object> queryInfo(Integer uid) throws Exception {
+    public Map<String, Object> queryInfo(Integer language, Integer uid) throws Exception {
         Map<String, Object> map  = driverMapper.queryInfo(uid);
+        String birthday = map.get("birthday").toString();
+        map.put("birthday", DateUtil.conversionFormat(language, birthday));
+        String networkCarlssueDate = map.get("networkCarlssueDate").toString();
+        map.put("networkCarlssueDate", DateUtil.conversionFormat(language, networkCarlssueDate));
+        String getDriverLicenseDate = map.get("getDriverLicenseDate").toString();
+        map.put("getDriverLicenseDate", DateUtil.conversionFormat(language, getDriverLicenseDate));
         if(ToolUtil.isEmpty(map.get("qrCode"))){
             //获取小程序二维码
             Driver driver = new Driver();
@@ -1043,11 +1204,11 @@
     public ResultUtil updatePhone(String phoneOperator, String phone, String code, Integer uid, Integer language) throws Exception {
         Driver driver = driverMapper.queryByPhone(phone);
         if(null != driver){
-            return ResultUtil.error(language == 1 ? "电话号码已被注册" : language == 2 ? "he phone number is registered" : "Le numéro de téléphone a été enregistré");
+            return ResultUtil.error(language == 1 ? "电话号码已被注册" : language == 2 ? "Mobile phone number has been registered." : "Le numéro de téléphone portable a été enregistré.");
         }
         boolean b = this.checkCaptcha("", phone, code);
         if(!b){
-            return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid captcha" : "Code de vérification invalide");
+            return ResultUtil.error(language == 1 ? "验证码无效" : language == 2 ? "Invalid CAPTCHA" : "CAPTCHA non valide");
         }
         Driver driver1 = this.selectById(uid);
         driver1.setAccount(phone);
@@ -1091,7 +1252,7 @@
         driver.setPassword(ShiroKit.md5(password, salt));
         this.updateById(driver);
         if(ToolUtil.isNotEmpty(driver.getEmail())){
-            String path1 = templatePath + "index.html";
+            String path1 = templatePath + "driver/index.html";
             Document document1 = Jsoup.parse(new File(path1), "UTF-8");
             if(1 == language){
                 document1.getElementById("english").remove();
@@ -1125,7 +1286,7 @@
                 Element pass1_user = document1.getElementById("pass1_user");
                 pass1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ",");
             }
-            if(2 == language){
+            if(3 == language){
                 document1.getElementById("chinese").remove();
                 document1.getElementById("english").remove();
                 document1.getElementById("invite2").remove();
@@ -1142,6 +1303,49 @@
                 pass2_user.text("Bonjour " + driver.getFirstName() + "" + driver.getLastName() + ",");
             }
             EmailUtil.send(driver.getEmail(), language == 1 ? "重置密码" : language == 2 ? "reset Password" : "réinitialiser le mot de passe",  document1.html());
+            String randomString = ToolUtil.getRandomString(10);
+            //开始生成pdf收据和html收据
+            File file = new File("/usr/local/nginx/html/files/html/");
+            if(!file.exists()){
+                file.mkdirs();
+            }
+            file = new File("/usr/local/nginx/html/files/html/reset_" + randomString + ".html");
+            if(!file.exists()){
+                file.createNewFile();
+            }
+            FileWriter fileWriter = new FileWriter(file);
+            fileWriter.write(document1.html());
+            fileWriter.flush();
+            fileWriter.close();
+            FileInputStream fileInputStream = new FileInputStream(file);
+            File file1 = new File("/usr/local/nginx/html/files/pdf/");
+            if(!file1.exists()){
+                file1.mkdirs();
+            }
+            file1 = new File("/usr/local/nginx/html/files/pdf/reset_" + randomString + ".pdf");
+            if(!file1.exists()){
+                file1.createNewFile();
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(file1);
+            HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+            String link ="http://182.160.16.251:81/files/html/reset_" + randomString + ".html";
+            TEmail tEmail = new TEmail();
+            tEmail.setLink(link);
+            tEmail.setUserId(driver.getId());
+            tEmail.setType(2);
+            tEmail.setName(language == 1 ? "重置密码" : language == 2 ? "reset Password" : "réinitialiser le mot de passe");
+            tEmail.setCreateTime(new Date());
+            int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+            String week = EmailUtil.getWeek(language, i);
+            tEmail.setWeek(week);
+            boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+            if(am){
+                tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+            }else {
+                tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+            }
+            emailService.insert(tEmail);
         }
     }
 
@@ -1157,21 +1361,24 @@
     public ResultUtil replaceCar(Integer carId, Integer uid, Integer language) throws Exception {
         Driver driver = this.selectById(uid);
         if(driver.getState() == 3){
-            return ResultUtil.error(language == 1 ? "还在服务中,不能更换" : language == 2 ? "It is still in service and cannot be replaced" : "Toujours en service, non échangeable");
+            return ResultUtil.error(language == 1 ? "还在服务中,不能更换" : language == 2 ? "On trip, unable to change." : "En service, il est impossible de se changer.");
         }
         Car car = carService.selectById(carId);
         if(null == car){
             return ResultUtil.error(language == 1 ? "车辆无效" : language == 2 ? "Invalid vehicle" : "Véhicule non valide");
         }
         if(car.getAuthState() == 1){
-            return ResultUtil.error(language == 1 ? "车辆正在审核中" : language == 2 ? "The vehicle is under review" : "Véhicule en révision");
+            return ResultUtil.error(language == 1 ? "车辆正在审核中" : language == 2 ? "Vehicle is being reviewed." : "Le véhicule est en cours d’examen.");
         }
         if(car.getAuthState() == 3){
-            return ResultUtil.error(language == 1 ? "车辆已冻结" : language == 2 ? "Vehicle frozen" : "Le véhicule a été gelé");
+            return ResultUtil.error(language == 1 ? "车辆已冻结" : language == 2 ? "Vehicle is frozen." : "Le véhicule est gelé.");
+        }
+        if(car.getAuthState() == 4){
+            return ResultUtil.error(language == 1 ? "车辆审核不通过" : language == 2 ? "Vehicle is not verified and qualified." : "Le véhicule n’est pas vérifié ni qualifié.");
         }
         boolean idle = carService.idle(carId);
         if(!idle){
-            return ResultUtil.error(language == 1 ? "车辆已被绑定了" : language == 2 ? "The vehicle has been bound" : "e véhicule a été lié");
+            return ResultUtil.error(language == 1 ? "车辆已被绑定了" : language == 2 ? "Vehicle has been bound." : "Le véhicule a été connecté.");
         }
         driver.setCarId(carId);
         this.updateById(driver);
@@ -1243,8 +1450,8 @@
      * @throws Exception
      */
     @Override
-    public List<Map<String, Object>> queryPenalties(Integer pageNum, Integer size, Integer uid) throws Exception {
-        List<Map<String, Object>> list = reassignService.queryList(uid, pageNum, size);
+    public List<Map<String, Object>> queryPenalties(Integer language, Integer pageNum, Integer size, Integer uid) throws Exception {
+        List<Map<String, Object>> list = reassignService.queryList(language, uid, pageNum, size);
         return list;
     }
 
@@ -1258,8 +1465,8 @@
      * @throws Exception
      */
     @Override
-    public List<Map<String, Object>> queryActivityIncome(Integer uid, Integer pageNum, Integer size) throws Exception {
-        List<Map<String, Object>> query = incomeService.query(2, uid, 1, pageNum, size);
+    public List<Map<String, Object>> queryActivityIncome(Integer language, Integer uid, Integer pageNum, Integer size) throws Exception {
+        List<Map<String, Object>> query = incomeService.query(language,2, uid, 1, pageNum, size);
         return query;
     }
 
@@ -1273,8 +1480,8 @@
      * @throws Exception
      */
     @Override
-    public List<Map<String, Object>> queryTotalRevenue(Integer uid, Integer pageNum, Integer size) throws Exception {
-        List<Map<String, Object>> query = incomeService.query(2, uid, 2, pageNum, size);
+    public List<Map<String, Object>> queryTotalRevenue(Integer language, Integer uid, Integer pageNum, Integer size) throws Exception {
+        List<Map<String, Object>> query = incomeService.query(language, 2, uid, 2, pageNum, size);
         return query;
     }
 
@@ -1290,51 +1497,61 @@
         List<ActivityWarpper> list = new ArrayList<>();
         Map<String, Date> date = dateUtil.getStartAndEndDate(time);
         List<DriverActivityHistory> driverActivityHistories = driverActivityHistoryMapper.queryList(uid, null, null, date.get("startTime"), date.get("endTime"));
+
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
         for(DriverActivityHistory dah : driverActivityHistories){
             ActivityWarpper activityWarpper = new ActivityWarpper();
             switch (dah.getType()){
                 case 1://邀请司机注册
                     DriverActivityRegistered driverActivityRegistered = driverActivityRegisteredMapper.selectById(dah.getActivityId());
                     activityWarpper.setId(driverActivityRegistered.getId());
-                    activityWarpper.setContent("邀请司机注册奖励" + driverActivityRegistered.getMoney() + "元");
+                    activityWarpper.setContent(language == 1 ? "邀请司机注册奖励" + driverActivityRegistered.getMoney() + "元" :
+                            language == 2 ? "Invitation driver registration reward " + driverActivityRegistered.getMoney() + " yuan" :
+                                    "Invitation pilote inscription récompense " + driverActivityRegistered.getMoney() + " yuan");
                     break;
                 case 2://邀请用户注册
                     DriverActivityRegistered driverActivityRegistered1 = driverActivityRegisteredMapper.selectById(dah.getActivityId());
                     activityWarpper.setId(driverActivityRegistered1.getId());
-                    activityWarpper.setContent("邀请用户注册奖励" + driverActivityRegistered1.getMoney() + "元");
+                    activityWarpper.setContent(language == 1 ? "邀请用户注册奖励" + driverActivityRegistered1.getMoney() + "元" :
+                            language == 2 ? "Invite users to register and reward " + driverActivityRegistered1.getMoney() + " yuan" :
+                                    "Bonus de " + driverActivityRegistered1.getMoney() + " $pour les utilisateurs invités à s’inscrire");
                     break;
                 case 3://累计在线
                     DriverActivityOnline driverActivityOnline = driverActivityOnlineMapper.selectById(dah.getActivityId());
                     activityWarpper.setId(driverActivityOnline.getId());
-                    StringBuffer sb = new StringBuffer("今日");
-                    DriverWork driverWork = driverWorkMapper.queryNewWork(uid, driverActivityOnline.getType(), 1);
+                    StringBuffer sb = new StringBuffer(language == 1 ? "今日" :
+                            language == 2 ? " today " : " aujourd’hui ");
+                    DriverOnline query = driverOnlineMapper.query(uid, sdf1.format(new Date()), 0);
                     Integer hour = 0;
-                    if(null != driverWork){
-                        hour = Long.valueOf((System.currentTimeMillis() - driverWork.getStartTime().getTime()) / 3600000).intValue();
+                    if(null != query){
+                        hour = Long.valueOf(query.getDuration() / 3600).intValue();
                     }
                     switch (driverActivityOnline.getType()){
                         case 1:
-                            sb.append(language == 1 ? "打车" : language == 2 ? "Ride" : "Rouler");
+                            sb.append(language == 1 ? "打车" : language == 2 ? "Ride" : "Course");
                             break;
                         case 2:
                             sb.append("出租车");
-
-                            break;
+                            continue;
                         case 3:
                             sb.append("城际出行");
-                            break;
+                            continue;
                         case 4:
-                            sb.append(language == 1 ? "包裹" : language == 2 ? "Package" : "Paquet");
+                            sb.append(language == 1 ? "包裹" : language == 2 ? "Package" : "Livraison");
                             break;
                     }
-                    String str = "累计在线" +driverActivityOnline.getOnline() + "小时奖励" +driverActivityOnline.getMoney() + "元";
+                    String str = language == 1 ? "累计在线" +driverActivityOnline.getOnline() + "小时奖励" +driverActivityOnline.getMoney() + "元" :
+                            language == 2 ? " RMB " + driverActivityOnline.getMoney() + " will be awarded for " + driverActivityOnline.getOnline() + " hours online" :
+                                    " Bonus de " + driverActivityOnline.getMoney() + " $pour " + driverActivityOnline.getOnline() + " heures cumulées en ligne";
                     activityWarpper.setContent(sb.append(str).toString());
                     activityWarpper.setCarryOut((dah.getCarryOut() == 2 || hour > driverActivityOnline.getOnline()) ? driverActivityOnline.getOnline() + "/" +driverActivityOnline.getOnline() : hour + "/" + driverActivityOnline.getOnline());
                     break;
                 case 4://订单量
                     DriverActivityOrder driverActivityOrder = driverActivityOrderMapper.selectById(dah.getActivityId());
                     activityWarpper.setId(driverActivityOrder.getId());
-                    activityWarpper.setContent("今日" + driverActivityOrder.getStart() + "-" + driverActivityOrder.getEnd() + "累计接单" + driverActivityOrder.getOrderNum() + "单奖励" + driverActivityOrder.getMoney() + "元");
+                    activityWarpper.setContent(language == 1 ? "今日" + driverActivityOrder.getStart() + "-" + driverActivityOrder.getEnd() + "累计接单" + driverActivityOrder.getOrderNum() + "单奖励" + driverActivityOrder.getMoney() + "元" :
+                            language == 2 ? "From " + driverActivityOrder.getStart() + " to " + driverActivityOrder.getEnd() + " today, a total of " + driverActivityOrder.getOrderNum() + " orders will be awarded " + driverActivityOrder.getMoney() + " yuan" :
+                                    "De " + driverActivityOrder.getStart() + " à " + driverActivityOrder.getEnd() + " aujourd’hui, un total de " + driverActivityOrder.getOrderNum() + " commandes recevront " + driverActivityOrder.getMoney() + " yuans");
                     SimpleDateFormat sdf = new SimpleDateFormat("H:m");
                     Date start = sdf.parse(driverActivityOrder.getStart());
                     Date end = sdf.parse(driverActivityOrder.getEnd());
@@ -1388,7 +1605,7 @@
                     driverActivityHistoryMapper.insert(driverActivityHistory);
 
                     if(ToolUtil.isNotEmpty(driver.getEmail())) {
-                        String path1 = templatePath + "index.html";
+                        String path1 = templatePath + "driver/index.html";
                         Document document1 = Jsoup.parse(new File(path1), "UTF-8");
                         if (1 == language) {
                             document1.getElementById("english").remove();
@@ -1432,7 +1649,7 @@
                         }
                         if (3 == language) {
                             document1.getElementById("chinese").remove();
-                            document1.getElementById("french").remove();
+                            document1.getElementById("english").remove();
                             document1.getElementById("invite2").remove();
                             document1.getElementById("user2").remove();
                             document1.getElementById("settle2").remove();
@@ -1451,6 +1668,49 @@
                             rewardToday2_content.text("Invitez les conducteurs à s’inscrire et à recevoir des récompenses. Notez que cet événement est limité dans le temps, veuillez consulter la plateforme I-GO pour plus de détails.");
                         }
                         EmailUtil.send(driver.getEmail(), language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui", document1.html());
+                        String randomString = ToolUtil.getRandomString(10);
+                        //开始生成pdf收据和html收据
+                        File file = new File("/usr/local/nginx/html/files/html/");
+                        if(!file.exists()){
+                            file.mkdirs();
+                        }
+                        file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html");
+                        if(!file.exists()){
+                            file.createNewFile();
+                        }
+                        FileWriter fileWriter = new FileWriter(file);
+                        fileWriter.write(document1.html());
+                        fileWriter.flush();
+                        fileWriter.close();
+                        FileInputStream fileInputStream = new FileInputStream(file);
+                        File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                        if(!file1.exists()){
+                            file1.mkdirs();
+                        }
+                        file1 = new File("/usr/local/nginx/html/files/pdf/activity_" + randomString + ".pdf");
+                        if(!file1.exists()){
+                            file1.createNewFile();
+                        }
+                        FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                        HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                        String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html";
+                        TEmail tEmail = new TEmail();
+                        tEmail.setLink(link);
+                        tEmail.setUserId(driver.getId());
+                        tEmail.setType(2);
+                        tEmail.setName(language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui");
+                        tEmail.setCreateTime(new Date());
+                        int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                        String week = EmailUtil.getWeek(language, i);
+                        tEmail.setWeek(week);
+                        boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                        if(am){
+                            tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                        }else {
+                            tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                        }
+                        emailService.insert(tEmail);
                     }
                 }
             }
@@ -1469,7 +1729,7 @@
                     driverActivityHistoryMapper.insert(driverActivityHistory);
 
                     if(ToolUtil.isNotEmpty(driver.getEmail())) {
-                        String path1 = templatePath + "index.html";
+                        String path1 = templatePath + "driver/index.html";
                         Document document1 = Jsoup.parse(new File(path1), "UTF-8");
                         if (1 == language) {
                             document1.getElementById("english").remove();
@@ -1532,6 +1792,49 @@
                             rewardToday2_content.text("Invitez les conducteurs à s’inscrire et à recevoir des récompenses. Notez que cet événement est limité dans le temps, veuillez consulter la plateforme I-GO pour plus de détails.");
                         }
                         EmailUtil.send(driver.getEmail(), language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui", document1.html());
+                        String randomString = ToolUtil.getRandomString(10);
+                        //开始生成pdf收据和html收据
+                        File file = new File("/usr/local/nginx/html/files/html/");
+                        if(!file.exists()){
+                            file.mkdirs();
+                        }
+                        file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html");
+                        if(!file.exists()){
+                            file.createNewFile();
+                        }
+                        FileWriter fileWriter = new FileWriter(file);
+                        fileWriter.write(document1.html());
+                        fileWriter.flush();
+                        fileWriter.close();
+                        FileInputStream fileInputStream = new FileInputStream(file);
+                        File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                        if(!file1.exists()){
+                            file1.mkdirs();
+                        }
+                        file1 = new File("/usr/local/nginx/html/files/pdf/activity_" + randomString + ".pdf");
+                        if(!file1.exists()){
+                            file1.createNewFile();
+                        }
+                        FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                        HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                        String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html";
+                        TEmail tEmail = new TEmail();
+                        tEmail.setLink(link);
+                        tEmail.setUserId(driver.getId());
+                        tEmail.setType(2);
+                        tEmail.setName(language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui");
+                        tEmail.setCreateTime(new Date());
+                        int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                        String week = EmailUtil.getWeek(language, i);
+                        tEmail.setWeek(week);
+                        boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                        if(am){
+                            tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                        }else {
+                            tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                        }
+                        emailService.insert(tEmail);
                     }
                 }
             }
@@ -1551,7 +1854,7 @@
                     driverActivityHistoryMapper.insert(driverActivityHistory);
 
                     if(ToolUtil.isNotEmpty(driver.getEmail())) {
-                        String path1 = templatePath + "index.html";
+                        String path1 = templatePath + "driver/index.html";
                         Document document1 = Jsoup.parse(new File(path1), "UTF-8");
                         if (1 == language) {
                             document1.getElementById("english").remove();
@@ -1614,6 +1917,49 @@
                             rewardToday2_content.text("Accumulé en ligne " + driverActivityOnline.getOnline() + " heures aujourd’hui pour obtenir des récompenses d’événement. Notez que cet événement est limité dans le temps, veuillez consulter la plateforme I-GO pour plus de détails.");
                         }
                         EmailUtil.send(driver.getEmail(), language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui", document1.html());
+                        String randomString = ToolUtil.getRandomString(10);
+                        //开始生成pdf收据和html收据
+                        File file = new File("/usr/local/nginx/html/files/html/");
+                        if(!file.exists()){
+                            file.mkdirs();
+                        }
+                        file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html");
+                        if(!file.exists()){
+                            file.createNewFile();
+                        }
+                        FileWriter fileWriter = new FileWriter(file);
+                        fileWriter.write(document1.html());
+                        fileWriter.flush();
+                        fileWriter.close();
+                        FileInputStream fileInputStream = new FileInputStream(file);
+                        File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                        if(!file1.exists()){
+                            file1.mkdirs();
+                        }
+                        file1 = new File("/usr/local/nginx/html/files/pdf/activity_" + randomString + ".pdf");
+                        if(!file1.exists()){
+                            file1.createNewFile();
+                        }
+                        FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                        HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                        String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html";
+                        TEmail tEmail = new TEmail();
+                        tEmail.setLink(link);
+                        tEmail.setUserId(driver.getId());
+                        tEmail.setType(2);
+                        tEmail.setName(language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui");
+                        tEmail.setCreateTime(new Date());
+                        int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                        String week = EmailUtil.getWeek(language, i);
+                        tEmail.setWeek(week);
+                        boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                        if(am){
+                            tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                        }else {
+                            tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                        }
+                        emailService.insert(tEmail);
                     }
                 }
             }
@@ -1633,7 +1979,7 @@
                     driverActivityHistoryMapper.insert(driverActivityHistory);
 
                     if(ToolUtil.isNotEmpty(driver.getEmail())) {
-                        String path1 = templatePath + "index.html";
+                        String path1 = templatePath + "driver/index.html";
                         Document document1 = Jsoup.parse(new File(path1), "UTF-8");
                         if (1 == language) {
                             document1.getElementById("english").remove();
@@ -1696,6 +2042,49 @@
                             rewardToday2_content.text("Effectuez " + driverActivityOrder.getOrderNum() + " commandes au total aujourd’hui pour obtenir des récompenses d’événement. Notez que cet événement est limité dans le temps, veuillez consulter la plateforme I-GO pour plus de détails.");
                         }
                         EmailUtil.send(driver.getEmail(), language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui", document1.html());
+                        String randomString = ToolUtil.getRandomString(10);
+                        //开始生成pdf收据和html收据
+                        File file = new File("/usr/local/nginx/html/files/html/");
+                        if(!file.exists()){
+                            file.mkdirs();
+                        }
+                        file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html");
+                        if(!file.exists()){
+                            file.createNewFile();
+                        }
+                        FileWriter fileWriter = new FileWriter(file);
+                        fileWriter.write(document1.html());
+                        fileWriter.flush();
+                        fileWriter.close();
+                        FileInputStream fileInputStream = new FileInputStream(file);
+                        File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                        if(!file1.exists()){
+                            file1.mkdirs();
+                        }
+                        file1 = new File("/usr/local/nginx/html/files/pdf/activity_" + randomString + ".pdf");
+                        if(!file1.exists()){
+                            file1.createNewFile();
+                        }
+                        FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                        HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                        String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html";
+                        TEmail tEmail = new TEmail();
+                        tEmail.setLink(link);
+                        tEmail.setUserId(driver.getId());
+                        tEmail.setType(2);
+                        tEmail.setName(language == 1 ? "今日活动" : language == 2 ? "today's activity" : "l'événement d'aujourd'hui");
+                        tEmail.setCreateTime(new Date());
+                        int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                        String week = EmailUtil.getWeek(language, i);
+                        tEmail.setWeek(week);
+                        boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                        if(am){
+                            tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                        }else {
+                            tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                        }
+                        emailService.insert(tEmail);
                     }
                 }
             }
@@ -1710,13 +2099,16 @@
     @Override
     public void taskMinute() throws Exception {
         Map<String, Date> date = dateUtil.getStartAndEndDate(new Date());
-        Integer language = 1;
+        Integer language = 2;
         //在线时长
         List<DriverActivityHistory> list = driverActivityHistoryMapper.queryList(null, 3, 1, date.get("startTime"), date.get("endTime"));
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         for(DriverActivityHistory dah : list){
             DriverActivityOnline dao = driverActivityOnlineMapper.selectById(dah.getActivityId());
-            Long duration = Long.valueOf(dao.getOnline() * 60 * 60 * 1000);
+            if(null == dao){
+                continue;
+            }
+            Long duration = Long.valueOf(dao.getOnline() * 3600);
             List<DriverOnline> driverOnlines = driverOnlineMapper.queryList(sdf.format(new Date()), duration);
             for (DriverOnline driverOnline : driverOnlines) {
                 if(dah.getDriverId().compareTo(driverOnline.getDriverId()) == 0){
@@ -1737,7 +2129,7 @@
 
 
                     if(ToolUtil.isNotEmpty(driver.getEmail())) {
-                        String path1 = templatePath + "index.html";
+                        String path1 = templatePath + "driver/index.html";
                         Document document1 = Jsoup.parse(new File(path1), "UTF-8");
                         if (1 == language) {
                             document1.getElementById("english").remove();
@@ -1794,6 +2186,49 @@
                             reward2_content.text("Accumulé en ligne pendant " + dao.getOnline() + " heure aujourd’hui, obtenez la récompense GHS " + dah.getMoney() + ", s’il vous plaît vérifier");
                         }
                         EmailUtil.send(driver.getEmail(), language == 1 ? "在线时长奖励" : language == 2 ? "Online Time Rewards" : "Récompenses de temps en ligne", document1.html());
+                        String randomString = ToolUtil.getRandomString(10);
+                        //开始生成pdf收据和html收据
+                        File file = new File("/usr/local/nginx/html/files/html/");
+                        if(!file.exists()){
+                            file.mkdirs();
+                        }
+                        file = new File("/usr/local/nginx/html/files/html/rewards_" + randomString + ".html");
+                        if(!file.exists()){
+                            file.createNewFile();
+                        }
+                        FileWriter fileWriter = new FileWriter(file);
+                        fileWriter.write(document1.html());
+                        fileWriter.flush();
+                        fileWriter.close();
+                        FileInputStream fileInputStream = new FileInputStream(file);
+                        File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                        if(!file1.exists()){
+                            file1.mkdirs();
+                        }
+                        file1 = new File("/usr/local/nginx/html/files/pdf/rewards_" + randomString + ".pdf");
+                        if(!file1.exists()){
+                            file1.createNewFile();
+                        }
+                        FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                        HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                        String link ="http://182.160.16.251:81/files/html/rewards_" + randomString + ".html";
+                        TEmail tEmail = new TEmail();
+                        tEmail.setLink(link);
+                        tEmail.setUserId(driver.getId());
+                        tEmail.setType(2);
+                        tEmail.setName(language == 1 ? "在线时长奖励" : language == 2 ? "Online Time Rewards" : "Récompenses de temps en ligne");
+                        tEmail.setCreateTime(new Date());
+                        int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                        String week = EmailUtil.getWeek(language, i);
+                        tEmail.setWeek(week);
+                        boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                        if(am){
+                            tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                        }else {
+                            tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                        }
+                        emailService.insert(tEmail);
                     }
                 }
             }
@@ -1821,7 +2256,7 @@
                 incomeService.saveData(2, dah.getDriverId(), 1, dao.getId(), null, dah.getMoney());
 
                 if(ToolUtil.isNotEmpty(driver.getEmail())) {
-                    String path1 = templatePath + "index.html";
+                    String path1 = templatePath + "driver/index.html";
                     Document document1 = Jsoup.parse(new File(path1), "UTF-8");
                     if (1 == language) {
                         document1.getElementById("english").remove();
@@ -1877,7 +2312,51 @@
                         Element reward2_content = document1.getElementById("reward2_content");
                         reward2_content.text("Un total de " + dao.getOrderNum() + " commandes ont été reçues aujourd’hui, et la récompense GHS " + dah.getMoney() + " sera décernée, s’il vous plaît vérifier");
                     }
+
                     EmailUtil.send(driver.getEmail(), language == 1 ? "累计接单奖励" : language == 2 ? "Cumulative Order Rewards" : "Récompenses de commande cumulées", document1.html());
+                    String randomString = ToolUtil.getRandomString(10);
+                    //开始生成pdf收据和html收据
+                    File file = new File("/usr/local/nginx/html/files/html/");
+                    if(!file.exists()){
+                        file.mkdirs();
+                    }
+                    file = new File("/usr/local/nginx/html/files/html/rewards_" + randomString + ".html");
+                    if(!file.exists()){
+                        file.createNewFile();
+                    }
+                    FileWriter fileWriter = new FileWriter(file);
+                    fileWriter.write(document1.html());
+                    fileWriter.flush();
+                    fileWriter.close();
+                    FileInputStream fileInputStream = new FileInputStream(file);
+                    File file1 = new File("/usr/local/nginx/html/files/pdf/");
+                    if(!file1.exists()){
+                        file1.mkdirs();
+                    }
+                    file1 = new File("/usr/local/nginx/html/files/pdf/rewards_" + randomString + ".pdf");
+                    if(!file1.exists()){
+                        file1.createNewFile();
+                    }
+                    FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                    HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
+
+                    String link ="http://182.160.16.251:81/files/html/rewards_" + randomString + ".html";
+                    TEmail tEmail = new TEmail();
+                    tEmail.setLink(link);
+                    tEmail.setUserId(driver.getId());
+                    tEmail.setType(2);
+                    tEmail.setName(language == 1 ? "累计接单奖励" : language == 2 ? "Cumulative Order Rewards" : "Récompenses de commande cumulées");
+                    tEmail.setCreateTime(new Date());
+                    int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
+                    String week = EmailUtil.getWeek(language, i);
+                    tEmail.setWeek(week);
+                    boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
+                    if(am){
+                        tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
+                    }else {
+                        tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
+                    }
+                    emailService.insert(tEmail);
                 }
             }
         }
@@ -1892,13 +2371,13 @@
     public ResultUtil loginByJobNumber(String jobNum, Integer language) {
         Driver driver = driverMapper.queryByJobNum(jobNum);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账号未注册,请先注册账号" : language == 2 ? "Account is not registered, please register an account first" : "Le compte n’est pas enregistré. Veuillez d’abord créer un compte");
+            return ResultUtil.error(language == 1 ? "账号未注册,请先注册账号" : language == 2 ? "Account unregistered, please register account first." : "Compte non enregistré, veuillez d’abord enregistrer le compte.");
         }
         if(driver.getAuthState() == 1){
-            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "The account is under review, please wait patiently" : "Le compte est en cours d’examen, veuillez patienter");
+            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "Account is being reviewed, please wait." : "Le compte est en cours d’examen, veuillez patienter.");
         }
         if(driver.getAuthState() == 3){
-            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "The account has been frozen. Please contact the administrator" : "Le compte a été bloqué, veuillez contacter l’administrateur");
+            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "Account is frozen,please contact admin." : "Le compte est gelé, veuillez contacter l’administrateur.");
         }
         List<DriverService> list = driverServiceMapper.queryMyBusiness(driver.getId());
         boolean b = true;
@@ -1909,7 +2388,7 @@
             }
         }
         if(b){
-            return ResultUtil.error(language == 1 ? "没有出租车业务权限" : language == 2 ? "No taxi service authority" : "Pas d’accès aux affaires de taxi");
+            return ResultUtil.error(language == 1 ? "没有出租车业务权限" : language == 2 ? "No clearance for ride service" : "Pas d’autorisation pour le service de course");
         }
 
         //开始自动设置接单类型,出车类型,上班状态
@@ -1990,13 +2469,13 @@
     public ResultUtil loginByIdentification(String identification, Integer language) throws Exception {
         Driver driver = driverMapper.queryByIdentification(identification);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账号未注册,请先注册账号" : language == 2 ? "Account is not registered, please register an account first" : "Le compte n’est pas enregistré. Veuillez d’abord créer un compte");
+            return ResultUtil.error(language == 1 ? "账号未注册,请先注册账号" : language == 2 ? "Account unregistered, please register account first." : "Compte non enregistré, veuillez d’abord enregistrer le compte.");
         }
         if(driver.getAuthState() == 1){
-            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "The account is under review, please wait patiently" : "Le compte est en cours d’examen, veuillez patienter");
+            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "Account is being reviewed, please wait." : "Le compte est en cours d’examen, veuillez patienter.");
         }
         if(driver.getAuthState() == 3){
-            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "The account has been frozen. Please contact the administrator" : "Le compte a été bloqué, veuillez contacter l’administrateur");
+            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "Account is frozen,please contact admin." : "Le compte est gelé, veuillez contacter l’administrateur.");
         }
         List<DriverService> list = driverServiceMapper.queryMyBusiness(driver.getId());
         boolean b = true;
@@ -2007,7 +2486,7 @@
             }
         }
         if(b){
-            return ResultUtil.error(language == 1 ? "没有出租车业务权限" : language == 2 ? "No taxi service authority" : "Pas d’accès aux affaires de taxi");
+            return ResultUtil.error(language == 1 ? "没有出租车业务权限" : language == 2 ? "No clearance for ride service" : "Pas d’autorisation pour le service de course");
         }
 
         //开始自动设置接单类型,出车类型,上班状态
@@ -2076,13 +2555,13 @@
     public ResultUtil loginByTaxiAptitudeCard(String taxiAptitudeCard, Integer language) throws Exception {
         Driver driver = driverMapper.queryByTaxiAptitudeCard(taxiAptitudeCard);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账号未注册,请先注册账号" : language == 2 ? "Account is not registered, please register an account first" : "Le compte n’est pas enregistré. Veuillez d’abord créer un compte");
+            return ResultUtil.error(language == 1 ? "账号未注册,请先注册账号" : language == 2 ? "Account unregistered, please register account first." : "Compte non enregistré, veuillez d’abord enregistrer le compte.");
         }
         if(driver.getAuthState() == 1){
-            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "The account is under review, please wait patiently" : "Le compte est en cours d’examen, veuillez patienter");
+            return ResultUtil.error(language == 1 ? "账号正在审核中,请耐心等待" : language == 2 ? "Account is being reviewed, please wait." : "Le compte est en cours d’examen, veuillez patienter.");
         }
         if(driver.getAuthState() == 3){
-            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "The account has been frozen. Please contact the administrator" : "Le compte a été bloqué, veuillez contacter l’administrateur");
+            return ResultUtil.error(language == 1 ? "账号已被冻结,请联系管理员" : language == 2 ? "Account is frozen,please contact admin." : "Le compte est gelé, veuillez contacter l’administrateur.");
         }
         List<DriverService> list = driverServiceMapper.queryMyBusiness(driver.getId());
         boolean b = true;
@@ -2093,7 +2572,7 @@
             }
         }
         if(b){
-            return ResultUtil.error(language == 1 ? "没有出租车业务权限" : language == 2 ? "No taxi service authority" : "Pas d’accès aux affaires de taxi");
+            return ResultUtil.error(language == 1 ? "没有出租车业务权限" : language == 2 ? "No clearance for ride service" : "Pas d’autorisation pour le service de course");
         }
 
         //开始自动设置接单类型,出车类型,上班状态
@@ -2182,10 +2661,10 @@
     public ResultUtil verificationPassword(String password, Integer driverId, Integer language) throws Exception {
         Driver driver = this.selectById(driverId);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账户无效,请重新登录" : language == 2 ? "Account is invalid, please login again" : "Compte invalide, veuillez vous reconnecter");
+            return ResultUtil.error(language == 1 ? "账户无效,请重新登录" : language == 2 ? "Invalid account, please log in again." : "Compte invalide, veuillez vous connecter à nouveau.");
         }
         if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){
-            return ResultUtil.error(language == 1 ? "密码错误" : language == 2 ? "Password error" : "Mot de passe incorrect");
+            return ResultUtil.error(language == 1 ? "密码错误" : language == 2 ? "Wrong password" : "Mot de passe erroné");
         }
         return ResultUtil.success();
     }
@@ -2201,7 +2680,7 @@
     public ResultUtil setWithdrawPassword(String withdrawPassword, Integer driverId, Integer language) throws Exception {
         Driver driver = this.selectById(driverId);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账户无效,请重新登录" : language == 2 ? "Account is invalid, please login again" : "Compte invalide, veuillez vous reconnecter");
+            return ResultUtil.error(language == 1 ? "账户无效,请重新登录" : language == 2 ? "Invalid account, please log in again." : "Compte invalide, veuillez vous connecter à nouveau.");
         }
         driver.setWithdrawPassword(ShiroKit.md5(withdrawPassword, salt));
         this.updateById(driver);
@@ -2220,13 +2699,13 @@
     public ResultUtil verificationWithdrawPassword(String withdrawPassword, Integer driverId, Integer language) throws Exception {
         Driver driver = this.selectById(driverId);
         if(null == driver){
-            return ResultUtil.error(language == 1 ? "账户无效,请重新登录" : language == 2 ? "Account is invalid, please login again" : "Compte invalide, veuillez vous reconnecter");
+            return ResultUtil.error(language == 1 ? "账户无效,请重新登录" : language == 2 ? "Invalid account, please log in again." : "Compte invalide, veuillez vous connecter à nouveau.");
         }
         if(null == driver.getWithdrawPassword()){
-            return ResultUtil.error(language == 1 ? "请先设置提现密码" : language == 2 ? "Please set the withdrawal password first" : "Veuillez d’abord définir un mot de passe de retrait");
+            return ResultUtil.error(language == 1 ? "请先设置提现密码" : language == 2 ? "Please set withdrawal password first." : "Veuillez d’abord définir le mot de passe de retrait.");
         }
         if(!driver.getWithdrawPassword().equals(ShiroKit.md5(withdrawPassword, salt))){
-            return ResultUtil.error(language == 1 ? "密码错误" : language == 2 ? "Password error" : "Mot de passe incorrect");
+            return ResultUtil.error(language == 1 ? "密码错误" : language == 2 ? "Wrong password" : "Mot de passe erroné");
         }
         return ResultUtil.success();
     }
@@ -2262,14 +2741,24 @@
      * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
      */
     @Override
-    public List<Map<String,Object>> queryMyInviteList(Integer type,Integer uid, Integer pageNum, Integer size) throws Exception {
+    public List<Map<String,Object>> queryMyInviteList(Integer language, Integer type,Integer uid, Integer pageNum, Integer size) throws Exception {
         pageNum = (pageNum - 1) * size;
         if(type==1){
             //乘客表uType为2表示是司机邀请的
-            return userInfoMapper.queryMyInviteUserList(2,uid,pageNum,size);
+            List<Map<String, Object>> list = userInfoMapper.queryMyInviteUserList(2, uid, pageNum, size);
+            for (Map<String, Object> map : list) {
+                String insertTime = map.get("insertTime").toString();
+                map.put("insertTime", DateUtil.conversionFormat(language, insertTime));
+            }
+            return list;
         }else if(type==2){
             //司机表uType为2表示是司机邀请的
-            return driverMapper.queryMyInviteDriverList(2,uid, pageNum, size);
+            List<Map<String, Object>> list = driverMapper.queryMyInviteDriverList(2, uid, pageNum, size);
+            for (Map<String, Object> map : list) {
+                String insertTime = map.get("insertTime").toString();
+                map.put("insertTime", DateUtil.conversionFormat(language, insertTime));
+            }
+            return list;
         }
         return null;
 
@@ -2332,6 +2821,7 @@
             redisUtil.remove("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存
             redisUtil.remove("DRIVER_" + id);//清除存储的token
         }
+
     }
 
     @Override

--
Gitblit v1.7.1