From 00caef45a8833dc58919e23eb88a3484cfacdaa4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 22 八月 2023 17:53:25 +0800
Subject: [PATCH] 更新

---
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java |  275 ++++-------
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CarServiceImpl.java                   |   15 
 UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java                                          |   19 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementDetailServiceImpl.java      |   15 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SMSUtil.java                                  |    4 
 UserIGOTravel/guns-admin/pom.xml                                                                                            |   68 +-
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementAllocationService.java          |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementDetailService.java              |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java      |   15 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java                        |   70 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java                             |    2 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java              |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/HtmlToPdfUtils.java                  |   53 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java               |   10 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OBSUploadUtil.java                            |   37 +
 UserIGOTravel/guns-admin/src/main/resources/redis.properties                                                                |    2 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java  |  230 +++++++++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java                      |   16 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementDetailMapper.xml             |   16 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementAllocationServiceImpl.java  |   15 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml             |   17 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java                         |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementDetailMapper.java                    |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java                 |   44 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java                          |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/WaterMarkEventHandler.java           |   80 +++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java                             |    2 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICarService.java                           |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementAllocation.java                    |   26 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementDetail.java                        |   58 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java      |   10 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementAllocationMapper.java                |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java                               |  146 ++++++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementAllocationMapper.xml         |   10 
 UserIGOTravel/guns-admin/src/main/resources/application.yml                                                                 |   10 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java                    |   11 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java                                |    5 
 37 files changed, 1,125 insertions(+), 244 deletions(-)

diff --git a/UserIGOTravel/guns-admin/pom.xml b/UserIGOTravel/guns-admin/pom.xml
index 5581d4a..859f017 100644
--- a/UserIGOTravel/guns-admin/pom.xml
+++ b/UserIGOTravel/guns-admin/pom.xml
@@ -13,7 +13,7 @@
     <name>guns-admin</name>
     <description>guns 的spring boot版本</description>
 
-    <packaging>war</packaging>
+    <packaging>jar</packaging>
 
     <dependencies>
         <dependency>
@@ -242,45 +242,57 @@
             <version>1.18.20</version>
             <scope>provided</scope>
         </dependency>
+        <!-- itext7html转pdf  -->
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>html2pdf</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <!-- 中文字体支持 -->
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>font-asian</artifactId>
+            <version>7.1.13</version>
+        </dependency>
     </dependencies>
 
 
     <build>
         <!--打包jar包方式-->
-        <!--<plugins>-->
-            <!--<plugin>-->
-                <!--<groupId>org.springframework.boot</groupId>-->
-                <!--<artifactId>spring-boot-maven-plugin</artifactId>-->
-                <!--<configuration>-->
-                    <!--<fork>true</fork>&lt;!&ndash; 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart &ndash;&gt;-->
-                <!--</configuration>-->
-            <!--</plugin>-->
-        <!--</plugins>-->
-
-        <!--打包war包引入本地jar的打包方式-->
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
-                    <!-- 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 -->
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <!--打包后的项目名-->
-                    <!--<warName>example</warName>-->
-                    <!--<webResources>-->
-                        <!--<resource>-->
-                            <!--&lt;!&ndash;把本地lib里面的jar复制到lib&ndash;&gt;-->
-                            <!--<directory>${project.basedir}/lib</directory>-->
-                            <!--<targetPath>WEB-INF/lib/</targetPath>-->
-                            <!--<includes>-->
-                                <!--<include>**/*.jar</include>-->
-                            <!--</includes>-->
-                        <!--</resource>-->
-                    <!--</webResources>-->
+                    <fork>true</fork><!-- 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
                 </configuration>
             </plugin>
         </plugins>
 
+        <!--打包war包引入本地jar的打包方式-->
+        <!--<plugins>-->
+            <!--<plugin>-->
+                <!--<groupId>org.apache.maven.plugins</groupId>-->
+                <!--<artifactId>maven-war-plugin</artifactId>-->
+                <!--<configuration>-->
+                    <!--&lt;!&ndash; 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 &ndash;&gt;-->
+                    <!--<failOnMissingWebXml>false</failOnMissingWebXml>-->
+                    <!--&lt;!&ndash;打包后的项目名&ndash;&gt;-->
+                    <!--&lt;!&ndash;<warName>example</warName>&ndash;&gt;-->
+                    <!--&lt;!&ndash;<webResources>&ndash;&gt;-->
+                        <!--&lt;!&ndash;<resource>&ndash;&gt;-->
+                            <!--&lt;!&ndash;&lt;!&ndash;把本地lib里面的jar复制到lib&ndash;&gt;&ndash;&gt;-->
+                            <!--&lt;!&ndash;<directory>${project.basedir}/lib</directory>&ndash;&gt;-->
+                            <!--&lt;!&ndash;<targetPath>WEB-INF/lib/</targetPath>&ndash;&gt;-->
+                            <!--&lt;!&ndash;<includes>&ndash;&gt;-->
+                                <!--&lt;!&ndash;<include>**/*.jar</include>&ndash;&gt;-->
+                            <!--&lt;!&ndash;</includes>&ndash;&gt;-->
+                        <!--&lt;!&ndash;</resource>&ndash;&gt;-->
+                    <!--&lt;!&ndash;</webResources>&ndash;&gt;-->
+                <!--</configuration>-->
+            <!--</plugin>-->
+        <!--</plugins>-->
+
 
         <resources>
             <resource>
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
index 744bbb1..e12337e 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
@@ -22,11 +22,16 @@
 import org.jsoup.nodes.Element;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
-import java.io.File;
+import java.io.*;
 import java.math.BigDecimal;
 import java.util.*;
 
@@ -56,6 +61,9 @@
 
     @Autowired
     private IBankCardService bankCardService;
+
+    @Autowired
+    private IOrderService orderService;
 
     @Value("${spring.mail.template-path}")
     private String templatePath;
@@ -272,6 +280,20 @@
             if(phone.indexOf("233") < 0){
                 phone = "233" + phone;
             }
+            switch (phoneOperator){
+                case "MTN":
+                    phoneOperator = "GH-MTN-B2C";
+                    break;
+                case "TIGO":
+                    phoneOperator = "GH-TIGO-B2C";
+                    break;
+                case "VODAFONE":
+                    phoneOperator = "GH-VODAFONE-B2C";
+                    break;
+                case "AIRTEL":
+                    phoneOperator = "GH-AIRTEL-B2C";
+                    break;
+            }
             return userInfoService.captchaLogin(phoneOperator, phone, code, registIp, lat, lng,null,null,null,language);
         }catch (Exception e){
             e.printStackTrace();
@@ -306,6 +328,20 @@
             }
             if(phone.indexOf("233") < 0){
                 phone = "233" + phone;
+            }
+            switch (phoneOperator){
+                case "MTN":
+                    phoneOperator = "GH-MTN-B2C";
+                    break;
+                case "TIGO":
+                    phoneOperator = "GH-TIGO-B2C";
+                    break;
+                case "VODAFONE":
+                    phoneOperator = "GH-VODAFONE-B2C";
+                    break;
+                case "AIRTEL":
+                    phoneOperator = "GH-AIRTEL-B2C";
+                    break;
             }
             return userInfoService.captchaLogin(phoneOperator, phone, code, uid, type, userType, language);
         }catch (Exception e){
@@ -495,6 +531,20 @@
             }
             if(phone.indexOf("233") < 0){
                 phone = "233" + phone;
+            }
+            switch (phoneOperator){
+                case "MTN":
+                    phoneOperator = "GH-MTN-B2C";
+                    break;
+                case "TIGO":
+                    phoneOperator = "GH-TIGO-B2C";
+                    break;
+                case "VODAFONE":
+                    phoneOperator = "GH-VODAFONE-B2C";
+                    break;
+                case "AIRTEL":
+                    phoneOperator = "GH-AIRTEL-B2C";
+                    break;
             }
             return userInfoService.bindingPhone(uid, phoneOperator, phone, code, language);
         }catch (Exception e){
@@ -708,6 +758,20 @@
             }
             if(phone.indexOf("233") < 0){
                 phone = "233" + phone;
+            }
+            switch (phoneOperator){
+                case "MTN":
+                    phoneOperator = "GH-MTN-B2C";
+                    break;
+                case "TIGO":
+                    phoneOperator = "GH-TIGO-B2C";
+                    break;
+                case "VODAFONE":
+                    phoneOperator = "GH-VODAFONE-B2C";
+                    break;
+                case "AIRTEL":
+                    phoneOperator = "GH-AIRTEL-B2C";
+                    break;
             }
             return userInfoService.updatePhone(code, phoneOperator, phone, uid, language);
         }catch (Exception e){
@@ -991,6 +1055,39 @@
     }
 
 
+
+    @ResponseBody
+    @PostMapping("/base/user/queryOrderLicensePlate")
+    @ApiOperation(value = "获取报失也车牌等信息", tags = {"用户端-个人中心"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=跨城出行,4=同城小件物流,5=跨城小件物流)", name = "orderType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
+    })
+    public ResultUtil queryOrderLicensePlate(Integer orderType, Integer orderId){
+        try {
+            Map<String, Object> map = orderService.queryOrderLicensePlate(orderType, orderId);
+            return ResultUtil.success(map);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+
+    @ResponseBody
+    @RequestMapping("/base/user/image")
+    public String image(@RequestPart("file") MultipartFile file) {
+        try {
+            String pictureName = OBSUploadUtil.inputStreamUpload(file);
+            return pictureName;
+        } catch (IOException e1) {
+            return null;
+        }
+    }
+
+
+
     @ResponseBody
     @PostMapping("/api/user/queryBankCardList")
     @ApiOperation(value = "获取银行卡列表【1.1】", tags = {"用户端-个人中心"}, notes = "")
@@ -1081,4 +1178,51 @@
             return ResultUtil.runErr();
         }
     }
+
+
+    /**
+     * 下载pdf
+     * @param orderId
+     * @param orderType
+     * @param response
+     */
+    @ResponseBody
+    @GetMapping("/base/order/uploadReceiptPdf")
+    public void uploadReceiptPdf(Integer orderId, Integer orderType, HttpServletResponse response){
+        FileInputStream fileInputStream = null;
+        ServletOutputStream outputStream = null;
+        try {
+            if(orderType == 1){
+                fileInputStream = new FileInputStream(new File("/usr/local/nginx/html/files/pdf/ride_receipt_" + orderId + ".pdf"));
+            }
+            if(orderType == 4){
+                fileInputStream = new FileInputStream(new File("/usr/local/nginx/html/files/pdf/parcel_receipt_" + orderId + ".pdf"));
+            }
+            BufferedInputStream bf = new BufferedInputStream(fileInputStream);
+            outputStream = response.getOutputStream();
+            response.setContentType(MediaType.APPLICATION_PDF_VALUE);
+            response.setHeader("content-Disposition","attachment;filename=" + (orderId + "_" + orderType + ".pdf"));
+            byte[] b = new byte[bf.available() + 1000];
+            int i;
+            while((i=bf.read(b))!=-1){
+                outputStream.write(b,0, i);
+            }
+            outputStream.flush();
+            outputStream.close();
+            fileInputStream.close();
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            try {
+                if(null != outputStream){
+                    outputStream.close();
+                }
+                if(null != fileInputStream){
+                    fileInputStream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index b78fc67..9734040 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -578,11 +578,11 @@
         //调用移动的小号接口
         Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
         Region region = regionMapper.query(geocode.get("districtCode"));
-        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
-        if(String.valueOf(map.get("code")).equals("200")){
-            orderCrossCity.setTelX(map.get("telX"));
-            orderCrossCity.setBindId(map.get("bindId"));
-        }
+//        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
+//        if(String.valueOf(map.get("code")).equals("200")){
+//            orderCrossCity.setTelX(map.get("telX"));
+//            orderCrossCity.setBindId(map.get("bindId"));
+//        }
         this.insert(orderCrossCity);
 
         if(driver.getState() == 2){
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
index 8e24eca..c244630 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -22,6 +22,7 @@
 import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
 import com.stylefeng.guns.modular.system.util.Tingg.model.PayoutResponse;
 import com.stylefeng.guns.modular.system.util.Tingg.model.Results;
+import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
 import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
 import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
@@ -37,6 +38,9 @@
 
 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;
@@ -560,91 +564,28 @@
             orderLogistics.setPayMoney(orderMoney);
 
 
-
-            if(ToolUtil.isNotEmpty(userInfo.getEmail())){
-                String path = templatePath + "user/receiptLogistics.html";
-                Document document = Jsoup.parse(new File(path), "UTF-8");
-                SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
-                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
-                Driver driver = driverService.selectById(orderLogistics.getDriverId());
-                if(1 == language){
-                    document.getElementById("english").remove();
-                    document.getElementById("french").remove();
-                    Element title_chinese = document.getElementById("title_chinese");
-                    title_chinese.text(sdf2.format(orderLogistics.getTravelTime()) + ",您在I-GO1个订单消费GHS " + orderLogistics.getPayMoney());
-                    Element xcf_chinese = document.getElementById("xcf_chinese");
-                    xcf_chinese.text("GHS " + orderLogistics.getOrderMoney());
-                    Element xj_chinese = document.getElementById("xj_chinese");
-                    xj_chinese.text("GHS " + orderLogistics.getOrderMoney());
-                    Element pay_type_chinese = document.getElementById("pay_type_chinese");
-                    pay_type_chinese.text("余额");
-                    Element pay_money_chinese = document.getElementById("pay_money_chinese");
-                    pay_money_chinese.text("GHS " + orderLogistics.getPayMoney());
-                    Element pay_time_chinese = document.getElementById("pay_time_chinese");
-                    pay_time_chinese.text(sdf1.format(orderLogistics.getTravelTime()));
-                    Elements driver_chinese = document.getElementsByClass("driver_chinese");
-                    for (int i = 0; i < driver_chinese.size(); i++) {
-                        Element element = driver_chinese.get(i);
-                        element.text(driver.getFirstName() + "." + driver.getLastName());
-                    }
-                    Element start_address_chinese = document.getElementById("start_address_chinese");
-                    start_address_chinese.text(orderLogistics.getStartAddress());
-                    Element end_address_chinese = document.getElementById("end_address_chinese");
-                    end_address_chinese.text(orderLogistics.getEndAddress());
-                }
-                if(2 == language){
-                    document.getElementById("chinese").remove();
-                    document.getElementById("french").remove();
-                    Element title_english = document.getElementById("title_english");
-                    title_english.text(sdf2.format(orderLogistics.getTravelTime()) + ",You spent GHS " + orderLogistics.getPayMoney() + " on the trip ");
-                    Element xcf_english = document.getElementById("xcf_english");
-                    xcf_english.text("GHS " + orderLogistics.getOrderMoney());
-                    Element xj_english = document.getElementById("xj_english");
-                    xj_english.text("GHS " + orderLogistics.getOrderMoney());
-                    Element pay_type_english = document.getElementById("pay_type_english");
-                    pay_type_english.text("balance");
-                    Element pay_money_english = document.getElementById("pay_money_english");
-                    pay_money_english.text("GHS " + orderLogistics.getPayMoney());
-                    Element pay_time_english = document.getElementById("pay_time_english");
-                    pay_time_english.text(sdf1.format(orderLogistics.getTravelTime()));
-                    Elements driver_english = document.getElementsByClass("driver_english");
-                    for (int i = 0; i < driver_english.size(); i++) {
-                        Element element = driver_english.get(i);
-                        element.text(driver.getFirstName() + "." + driver.getLastName());
-                    }
-                    Element start_address_english = document.getElementById("start_address_english");
-                    start_address_english.text(orderLogistics.getStartAddress());
-                    Element end_address_english = document.getElementById("end_address_english");
-                    end_address_english.text(orderLogistics.getEndAddress());
-                }
-                if(3 == language){
-                    document.getElementById("chinese").remove();
-                    document.getElementById("english").remove();
-                    Element title_french = document.getElementById("title_french");
-                    title_french.text(sdf2.format(orderLogistics.getTravelTime()) + ",Vous consommez GHS " + orderLogistics.getPayMoney() + " sur votre commande i-go1 le ");
-                    Element xcf_french = document.getElementById("xcf_french");
-                    xcf_french.text("GHS " + orderLogistics.getOrderMoney());
-                    Element xj_french = document.getElementById("xj_french");
-                    xj_french.text("GHS " + orderLogistics.getOrderMoney());
-                    Element pay_type_french = document.getElementById("pay_type_french");
-                    pay_type_french.text("Le solde");
-                    Element pay_money_french = document.getElementById("pay_money_french");
-                    pay_money_french.text("GHS " + orderLogistics.getPayMoney());
-                    Element pay_time_french = document.getElementById("pay_time_french");
-                    pay_time_french.text(sdf1.format(orderLogistics.getTravelTime()));
-                    Elements driver_french = document.getElementsByClass("driver_french");
-                    for (int i = 0; i < driver_french.size(); i++) {
-                        Element element = driver_french.get(i);
-                        element.text(driver.getFirstName() + "." + driver.getLastName());
-                    }
-                    Element start_address_french = document.getElementById("start_address_french");
-                    start_address_french.text(orderLogistics.getStartAddress());
-                    Element end_address_french = document.getElementById("end_address_french");
-                    end_address_french.text(orderLogistics.getEndAddress());
-                }
-
-                EmailUtil.send(userInfo.getEmail(), language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis",  document.html());
+            //添加已收入明细
+            Company company = companyService.selectById(orderLogistics.getCompanyId());
+            Double speMoney = company.getCrossLogisticsMoney();
+            BigDecimal d = null;//企业收入
+            BigDecimal c = null;//司机收入
+            if(company.getIsCrossLogisticsFixedOrProportional() == 2){//固定
+                d = new BigDecimal(speMoney);
+                c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机
             }
+            if(company.getIsSpeFixedOrProportional() == 1){//比例
+                Double price = orderLogistics.getOrderMoney();
+                d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
+                c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            }
+            incomeService.saveData(1, orderLogistics.getCompanyId(), 2, orderLogistics.getId(), 4, d.doubleValue());
+            incomeService.saveData(2, orderLogistics.getDriverId(), 2, orderLogistics.getId(), 4, c.doubleValue());
+            Driver driver = driverService.selectById(orderLogistics.getDriverId());
+            driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            driverService.updateById(driver);
+
 
             // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
             new Thread(new Runnable() {
@@ -675,7 +616,7 @@
             if(ToolUtil.isNotEmpty(userInfo.getEmail())){
                 String path = templatePath + "user/receiptLogistics.html";
                 Document document = Jsoup.parse(new File(path), "UTF-8");
-                SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
+                SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
                 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
                 Driver driver = driverService.selectById(orderLogistics.getDriverId());
                 if(1 == language){
@@ -691,6 +632,12 @@
                     pay_type_chinese.text("现金");
                     Element pay_money_chinese = document.getElementById("pay_money_chinese");
                     pay_money_chinese.text("GHS " + orderLogistics.getPayMoney());
+                    Element pdf_chinese = document.getElementById("pdf_chinese");
+                    pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
+                    Element lost_item_chinese = document.getElementById("lost_item_chinese");
+                    lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
+//                    Element track_chinese = document.getElementById("track_chinese");
+//                    track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                     Element pay_time_chinese = document.getElementById("pay_time_chinese");
                     pay_time_chinese.text(sdf1.format(orderLogistics.getTravelTime()));
                     Elements driver_chinese = document.getElementsByClass("driver_chinese");
@@ -716,6 +663,12 @@
                     pay_type_english.text("cash");
                     Element pay_money_english = document.getElementById("pay_money_english");
                     pay_money_english.text("GHS " + orderLogistics.getPayMoney());
+                    Element pdf_english = document.getElementById("pdf_english");
+                    pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
+                    Element lost_item_english = document.getElementById("lost_item_english");
+                    lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
+//                    Element track_english = document.getElementById("track_english");
+//                    track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                     Element pay_time_english = document.getElementById("pay_time_english");
                     pay_time_english.text(sdf1.format(orderLogistics.getTravelTime()));
                     Elements driver_english = document.getElementsByClass("driver_english");
@@ -741,6 +694,12 @@
                     pay_type_french.text("espèces");
                     Element pay_money_french = document.getElementById("pay_money_french");
                     pay_money_french.text("GHS " + orderLogistics.getPayMoney());
+                    Element pdf_french = document.getElementById("pdf_french");
+                    pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
+                    Element lost_item_french = document.getElementById("lost_item_french");
+                    lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
+//                    Element track_french = document.getElementById("track_french");
+//                    track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                     Element pay_time_french = document.getElementById("pay_time_french");
                     pay_time_french.text(sdf1.format(orderLogistics.getTravelTime()));
                     Elements driver_french = document.getElementsByClass("driver_french");
@@ -755,6 +714,31 @@
                 }
 
                 EmailUtil.send(userInfo.getEmail(), language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis",  document.html());
+
+                //开始生成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/parcel_receipt_" + orderId + ".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/parcel_receipt_" + orderId + ".pdf");
+                if(!file1.exists()){
+                    file1.createNewFile();
+                }
+                FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
             }
 
 
@@ -982,91 +966,27 @@
             query.setCode(order_id);
             paymentRecordService.updateById(query);
 
-            if(ToolUtil.isNotEmpty(userInfo.getEmail())){
-                String path = templatePath + "user/receiptLogistics.html";
-                Document document = Jsoup.parse(new File(path), "UTF-8");
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
-                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
-                Driver driver = driverService.selectById(orderLogistics.getDriverId());
-                if(1 == language){
-                    document.getElementById("english").remove();
-                    document.getElementById("french").remove();
-                    Element title_chinese = document.getElementById("title_chinese");
-                    title_chinese.text(sdf.format(orderLogistics.getTravelTime()) + ",您在I-GO1个订单消费GHS " + orderLogistics.getPayMoney());
-                    Element xcf_chinese = document.getElementById("xcf_chinese");
-                    xcf_chinese.text("GHS " + orderLogistics.getOrderMoney());
-                    Element xj_chinese = document.getElementById("xj_chinese");
-                    xj_chinese.text("GHS " + orderLogistics.getOrderMoney());
-                    Element pay_type_chinese = document.getElementById("pay_type_chinese");
-                    pay_type_chinese.text("余额");
-                    Element pay_money_chinese = document.getElementById("pay_money_chinese");
-                    pay_money_chinese.text("GHS " + orderLogistics.getPayMoney());
-                    Element pay_time_chinese = document.getElementById("pay_time_chinese");
-                    pay_time_chinese.text(sdf1.format(orderLogistics.getTravelTime()));
-                    Elements driver_chinese = document.getElementsByClass("driver_chinese");
-                    for (int i = 0; i < driver_chinese.size(); i++) {
-                        Element element = driver_chinese.get(i);
-                        element.text(driver.getFirstName() + "." + driver.getLastName());
-                    }
-                    Element start_address_chinese = document.getElementById("start_address_chinese");
-                    start_address_chinese.text(orderLogistics.getStartAddress());
-                    Element end_address_chinese = document.getElementById("end_address_chinese");
-                    end_address_chinese.text(orderLogistics.getEndAddress());
-                }
-                if(2 == language){
-                    document.getElementById("chinese").remove();
-                    document.getElementById("french").remove();
-                    Element title_english = document.getElementById("title_english");
-                    title_english.text(sdf.format(orderLogistics.getTravelTime()) + ",You spent GHS " + orderLogistics.getPayMoney() + " on the trip ");
-                    Element xcf_english = document.getElementById("xcf_english");
-                    xcf_english.text("GHS " + orderLogistics.getOrderMoney());
-                    Element xj_english = document.getElementById("xj_english");
-                    xj_english.text("GHS " + orderLogistics.getOrderMoney());
-                    Element pay_type_english = document.getElementById("pay_type_english");
-                    pay_type_english.text("balance");
-                    Element pay_money_english = document.getElementById("pay_money_english");
-                    pay_money_english.text("GHS " + orderLogistics.getPayMoney());
-                    Element pay_time_english = document.getElementById("pay_time_english");
-                    pay_time_english.text(sdf1.format(orderLogistics.getTravelTime()));
-                    Elements driver_english = document.getElementsByClass("driver_english");
-                    for (int i = 0; i < driver_english.size(); i++) {
-                        Element element = driver_english.get(i);
-                        element.text(driver.getFirstName() + "." + driver.getLastName());
-                    }
-                    Element start_address_english = document.getElementById("start_address_english");
-                    start_address_english.text(orderLogistics.getStartAddress());
-                    Element end_address_english = document.getElementById("end_address_english");
-                    end_address_english.text(orderLogistics.getEndAddress());
-                }
-                if(3 == language){
-                    document.getElementById("chinese").remove();
-                    document.getElementById("english").remove();
-                    Element title_french = document.getElementById("title_french");
-                    title_french.text(sdf.format(orderLogistics.getTravelTime()) + ",Vous consommez GHS " + orderLogistics.getPayMoney() + " sur votre commande i-go1 le ");
-                    Element xcf_french = document.getElementById("xcf_french");
-                    xcf_french.text("GHS " + orderLogistics.getOrderMoney());
-                    Element xj_french = document.getElementById("xj_french");
-                    xj_french.text("GHS " + orderLogistics.getOrderMoney());
-                    Element pay_type_french = document.getElementById("pay_type_french");
-                    pay_type_french.text("Le solde");
-                    Element pay_money_french = document.getElementById("pay_money_french");
-                    pay_money_french.text("GHS " + orderLogistics.getPayMoney());
-                    Element pay_time_french = document.getElementById("pay_time_french");
-                    pay_time_french.text(sdf1.format(orderLogistics.getTravelTime()));
-                    Elements driver_french = document.getElementsByClass("driver_french");
-                    for (int i = 0; i < driver_french.size(); i++) {
-                        Element element = driver_french.get(i);
-                        element.text(driver.getFirstName() + "." + driver.getLastName());
-                    }
-                    Element start_address_french = document.getElementById("start_address_french");
-                    start_address_french.text(orderLogistics.getStartAddress());
-                    Element end_address_french = document.getElementById("end_address_french");
-                    end_address_french.text(orderLogistics.getEndAddress());
-                }
-
-                EmailUtil.send(userInfo.getEmail(), language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis",  document.html());
+            //添加已收入明细
+            Company company = companyService.selectById(orderLogistics.getCompanyId());
+            Double speMoney = company.getCrossLogisticsMoney();
+            BigDecimal d = null;//企业收入
+            BigDecimal c = null;//司机收入
+            if(company.getIsCrossLogisticsFixedOrProportional() == 2){//固定
+                d = new BigDecimal(speMoney);
+                c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机
             }
-
+            if(company.getIsSpeFixedOrProportional() == 1){//比例
+                Double price = orderLogistics.getOrderMoney();
+                d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
+                c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            }
+            incomeService.saveData(1, orderLogistics.getCompanyId(), 2, orderLogistics.getId(), 4, d.doubleValue());
+            incomeService.saveData(2, orderLogistics.getDriverId(), 2, orderLogistics.getId(), 4, c.doubleValue());
+            Driver driver = driverService.selectById(orderLogistics.getDriverId());
+            driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            driverService.updateById(driver);
 
 
             // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
@@ -1189,6 +1109,15 @@
     public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size, Integer language) throws Exception {
         pageNum = (pageNum - 1) * size;
         List<Map<String, Object>> maps = orderLogisticsMapper.queryMyOrderList(uid, pageNum, size, language);
+        for (Map<String, Object> map : maps) {
+            Integer orderId = Integer.valueOf(String.valueOf(map.get("orderId")));
+            Integer state = Integer.valueOf(String.valueOf(map.get("state")));
+            if(state == 6){
+                map.put("receipt", "http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html");
+            }else{
+                map.put("receipt", "");
+            }
+        }
         return maps;
     }
 
@@ -1403,12 +1332,13 @@
     @Override
     public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception {
         Map<String, Object> map = orderLogisticsMapper.queryOrderInfo(orderId);
+        Integer state = Integer.valueOf(String.valueOf(map.get("state")));
         OrderLogistics orderLogistics = this.selectById(orderId);
         if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
             orderLogistics.setReassignNotice(0);
             this.updateById(orderLogistics);
         }
-        if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
+        if(state == 11){
             map.put("state", map.get("oldState"));
         }
         Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString());
@@ -1419,6 +1349,11 @@
         String driverId = redisUtil.getValue("DEVICE_" + map.get("driverId"));
         map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
         map.put("orderType", orderLogistics.getType());
+        if(state == 6){
+            map.put("receipt", "http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html");
+        }else{
+            map.put("receipt", "");
+        }
         return map;
     }
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 547000e..e19ea4b 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -24,6 +24,7 @@
 import com.stylefeng.guns.modular.system.util.GoogleMap.ReverseGeocodeVo;
 import com.stylefeng.guns.modular.system.util.Tingg.TinggPayUtil;
 import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
+import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
 import com.stylefeng.guns.modular.system.warpper.EndPushWarpper;
 import com.stylefeng.guns.modular.system.warpper.OrderInfoWarpper;
@@ -50,10 +51,7 @@
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
+import java.io.*;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
@@ -183,6 +181,15 @@
 
     @Value("${spring.mail.template-path}")
     private String templatePath;
+
+    @Autowired
+    private ISettlementDetailService settlementDetailService;
+
+    @Autowired
+    private ISettlementRecordService settlementRecordService;
+
+    @Autowired
+    private ISettlementAllocationService settlementAllocationService;
 
 
 
@@ -828,6 +835,9 @@
         return list;
     }
 
+
+
+
     @Override
     public ResultUtil payPrivateCarOrder(Integer payType, Integer bankCardId, Integer orderId, Integer couponId, Integer type, Integer language) throws Exception {
         OrderPrivateCar orderPrivateCar = this.selectById(orderId);
@@ -1000,7 +1010,7 @@
             if(ToolUtil.isNotEmpty(userInfo.getEmail())){
                 String path = templatePath +  "user/receipt.html";
                 Document document = Jsoup.parse(new File(path), "UTF-8");
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
                 SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
                 Car car = carMapper.selectById(orderPrivateCar.getCarId());
@@ -1023,6 +1033,12 @@
                     pay_type_chinese.text("余额");
                     Element pay_money_chinese = document.getElementById("pay_money_chinese");
                     pay_money_chinese.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_chinese = document.getElementById("pdf_chinese");
+                    pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=1");
+                    Element lost_item_chinese = document.getElementById("lost_item_chinese");
+                    lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=1");
+                    Element track_chinese = document.getElementById("track_chinese");
+                    track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + orderId);
                     Element pay_time_chinese = document.getElementById("pay_time_chinese");
                     pay_time_chinese.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_chinese = document.getElementsByClass("driver_chinese");
@@ -1058,6 +1074,12 @@
                     pay_type_english.text("balance");
                     Element pay_money_english = document.getElementById("pay_money_english");
                     pay_money_english.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_english = document.getElementById("pdf_english");
+                    pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=1");
+                    Element lost_item_english = document.getElementById("lost_item_english");
+                    lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=1");
+                    Element track_english = document.getElementById("track_english");
+                    track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + orderId);
                     Element pay_time_english = document.getElementById("pay_time_english");
                     pay_time_english.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_english = document.getElementsByClass("driver_english");
@@ -1093,6 +1115,12 @@
                     pay_type_french.text("Le solde");
                     Element pay_money_french = document.getElementById("pay_money_french");
                     pay_money_french.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_french = document.getElementById("pdf_french");
+                    pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=1");
+                    Element lost_item_french = document.getElementById("lost_item_french");
+                    lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=1");
+                    Element track_french = document.getElementById("track_french");
+                    track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + orderId);
                     Element pay_time_french = document.getElementById("pay_time_french");
                     pay_time_french.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_french = document.getElementsByClass("driver_french");
@@ -1115,8 +1143,32 @@
                     Element end_address_french = document.getElementById("end_address_french");
                     end_address_french.text(orderPrivateCar.getEndAddress());
                 }
-
                 EmailUtil.send(userInfo.getEmail(), language == 1 ? "打车收据" : language == 2 ? "Ride receipt" : "Reçu de Ride",  document.html());
+
+                //开始生成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/ride_receipt_" + orderId + ".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/ride_receipt_" + orderId + ".pdf");
+                if(!file1.exists()){
+                    file1.createNewFile();
+                }
+                FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
             }
 
 
@@ -1146,7 +1198,7 @@
 
             orderPrivateCar.setState(8);
             orderPrivateCar.setPayType(4);
-            orderPrivateCar.setDriverPay(1);
+            orderPrivateCar.setDriverPay(2);
             orderPrivateCar.setPayMoney(orderMoney);
             orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue());
 
@@ -1176,19 +1228,58 @@
                     d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
                     c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                 }
-                incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
-                incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
+//                incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
+//                incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
                 Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
-                driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
+//                driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+//                driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+//                driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+//                driverService.updateById(driver);
+
+
+                //记录司机待结算金额
+                if(d.compareTo(new BigDecimal(0)) > 0){
+                    SettlementDetail settlementDetail = new SettlementDetail();
+                    settlementDetail.setOrderId(orderId);
+                    settlementDetail.setOrderType(1);
+                    settlementDetail.setDriverId(driver.getId());
+                    settlementDetail.setOrderMoney(orderPrivateCar.getOrderMoney());
+                    settlementDetail.setPrice(d.doubleValue());
+                    settlementDetail.setCreateTime(new Date());
+                    settlementDetailService.insert(settlementDetail);
+
+                    SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null);
+                    if(null != settlementAllocation){
+                        JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
+                        Double maxPrice = jsonObject.getDouble("maxPrice");
+                        List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driver.getId()).isNull("settlementRecordId").last(" and DATE_FORMAT(now(), '%Y-%m-%d') = DATE_FORMAT(createTime, '%Y-%m-%d')"));
+                        BigDecimal total = new BigDecimal(0);
+                        for (SettlementDetail detail : settlementDetailList) {
+                            total = total.add(new BigDecimal(detail.getPrice()));
+                        }
+                        if(maxPrice.compareTo(total.doubleValue()) <= 0){
+                            SettlementRecord settlementRecord = new SettlementRecord();
+                            settlementRecord.setDay(new Date());
+                            settlementRecord.setDriverId(driver.getId());
+                            settlementRecord.setType(1);
+                            settlementRecord.setPaymentStatus(1);
+                            settlementRecord.setPayMoney(total.doubleValue());
+                            settlementRecord.setInsertTime(new Date());
+                            settlementRecordService.insert(settlementRecord);
+
+                            for (SettlementDetail detail : settlementDetailList) {
+                                detail.setSettlementRecordId(settlementRecord.getId());
+                                settlementDetailService.updateById(detail);
+                            }
+                        }
+                    }
+                }
             }
 
             if(ToolUtil.isNotEmpty(userInfo.getEmail())){
                 String path = templatePath +  "user/receipt.html";
                 Document document = Jsoup.parse(new File(path), "UTF-8");
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
                 SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
                 Car car = carMapper.selectById(orderPrivateCar.getCarId());
@@ -1211,6 +1302,12 @@
                     pay_type_chinese.text("现金");
                     Element pay_money_chinese = document.getElementById("pay_money_chinese");
                     pay_money_chinese.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_chinese = document.getElementById("pdf_chinese");
+                    pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=1");
+                    Element lost_item_chinese = document.getElementById("lost_item_chinese");
+                    lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=1");
+                    Element track_chinese = document.getElementById("track_chinese");
+                    track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + orderId);
                     Element pay_time_chinese = document.getElementById("pay_time_chinese");
                     pay_time_chinese.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_chinese = document.getElementsByClass("driver_chinese");
@@ -1246,6 +1343,12 @@
                     pay_type_english.text("Cash");
                     Element pay_money_english = document.getElementById("pay_money_english");
                     pay_money_english.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_english = document.getElementById("pdf_english");
+                    pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=1");
+                    Element lost_item_english = document.getElementById("lost_item_english");
+                    lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=1");
+                    Element track_english = document.getElementById("track_english");
+                    track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + orderId);
                     Element pay_time_english = document.getElementById("pay_time_english");
                     pay_time_english.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_english = document.getElementsByClass("driver_english");
@@ -1281,6 +1384,12 @@
                     pay_type_french.text("espèces");
                     Element pay_money_french = document.getElementById("pay_money_french");
                     pay_money_french.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_french = document.getElementById("pdf_french");
+                    pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=1");
+                    Element lost_item_french = document.getElementById("lost_item_french");
+                    lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=1");
+                    Element track_french = document.getElementById("track_french");
+                    track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + orderId);
                     Element pay_time_french = document.getElementById("pay_time_french");
                     pay_time_french.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_french = document.getElementsByClass("driver_french");
@@ -1305,6 +1414,31 @@
                 }
 
                 EmailUtil.send(userInfo.getEmail(), language == 1 ? "打车收据" : language == 2 ? "Ride receipt" : "Reçu de Ride",  document.html());
+
+                //开始生成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/ride_receipt_" + orderId + ".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/ride_receipt_" + orderId + ".pdf");
+                if(!file1.exists()){
+                    file1.createNewFile();
+                }
+                FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
             }
 
 
@@ -1568,7 +1702,7 @@
             if(ToolUtil.isNotEmpty(userInfo.getEmail())){
                 String path = templatePath +  "user/receipt.html";
                 Document document = Jsoup.parse(new File(path), "UTF-8");
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
                 SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
                 Car car = carMapper.selectById(orderPrivateCar.getCarId());
@@ -1588,9 +1722,15 @@
                     Element xj_chinese = document.getElementById("xj_chinese");
                     xj_chinese.text("GHS " + orderPrivateCar.getOrderMoney());
                     Element pay_type_chinese = document.getElementById("pay_type_chinese");
-                    pay_type_chinese.text("现金");
+                    pay_type_chinese.text(orderPrivateCar.getPayType() == 1 ? "手机" : "银行卡");
                     Element pay_money_chinese = document.getElementById("pay_money_chinese");
                     pay_money_chinese.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_chinese = document.getElementById("pdf_chinese");
+                    pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + id + "&orderType=1");
+                    Element lost_item_chinese = document.getElementById("lost_item_chinese");
+                    lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + id + "&orderType=1");
+                    Element track_chinese = document.getElementById("track_chinese");
+                    track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + id);
                     Element pay_time_chinese = document.getElementById("pay_time_chinese");
                     pay_time_chinese.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_chinese = document.getElementsByClass("driver_chinese");
@@ -1623,9 +1763,15 @@
                     Element xj_english = document.getElementById("xj_english");
                     xj_english.text("GHS " + orderPrivateCar.getOrderMoney());
                     Element pay_type_english = document.getElementById("pay_type_english");
-                    pay_type_english.text("Cash");
+                    pay_type_english.text(orderPrivateCar.getPayType() == 1 ? "Mobile" : "Bank card");
                     Element pay_money_english = document.getElementById("pay_money_english");
                     pay_money_english.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_english = document.getElementById("pdf_english");
+                    pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + id + "&orderType=1");
+                    Element lost_item_english = document.getElementById("lost_item_english");
+                    lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + id + "&orderType=1");
+                    Element track_english = document.getElementById("track_english");
+                    track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + id);
                     Element pay_time_english = document.getElementById("pay_time_english");
                     pay_time_english.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_english = document.getElementsByClass("driver_english");
@@ -1658,9 +1804,15 @@
                     Element xj_french = document.getElementById("xj_french");
                     xj_french.text("GHS " + orderPrivateCar.getOrderMoney());
                     Element pay_type_french = document.getElementById("pay_type_french");
-                    pay_type_french.text("espèces");
+                    pay_type_french.text(orderPrivateCar.getPayType() == 1 ? "Mobile" : "Carte bancaire");
                     Element pay_money_french = document.getElementById("pay_money_french");
                     pay_money_french.text("GHS " + orderPrivateCar.getPayMoney());
+                    Element pdf_french = document.getElementById("pdf_french");
+                    pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + id + "&orderType=1");
+                    Element lost_item_french = document.getElementById("lost_item_french");
+                    lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + id + "&orderType=1");
+                    Element track_french = document.getElementById("track_french");
+                    track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html?orderId=" + id);
                     Element pay_time_french = document.getElementById("pay_time_french");
                     pay_time_french.text(sdf1.format(orderPrivateCar.getEndServiceTime()));
                     Elements driver_french = document.getElementsByClass("driver_french");
@@ -1685,6 +1837,31 @@
                 }
 
                 EmailUtil.send(userInfo.getEmail(), language == 1 ? "打车收据" : language == 2 ? "Ride receipt" : "Reçu de Ride",  document.html());
+
+                //开始生成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/ride_receipt_" + id + ".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/ride_receipt_" + id + ".pdf");
+                if(!file1.exists()){
+                    file1.createNewFile();
+                }
+                FileOutputStream fileOutputStream = new FileOutputStream(file1);
+                HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
             }
 
 
@@ -1715,8 +1892,15 @@
         pageNum = (pageNum - 1) * size;
         List<Map<String, Object>> maps = orderPrivateCarMapper.queryMyOrderList(uid, pageNum, size);
         for(Map<String, Object> map : maps){
-            if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
+            Integer orderId = Integer.valueOf(String.valueOf(map.get("orderId")));
+            Integer state = Integer.valueOf(String.valueOf(map.get("state")));
+            if(state == 11){
                 map.put("state", map.get("oldState"));
+            }
+            if(state == 8 || state == 9){
+                map.put("receipt", "http://182.160.16.251:81/files/html/ride_receipt_" + orderId + ".html");
+            }else{
+                map.put("receipt", "");
             }
         }
         return maps;
@@ -1732,12 +1916,13 @@
     @Override
     public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception {
         Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId);
+        Integer state = Integer.valueOf(String.valueOf(map.get("state")));
         if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
             OrderPrivateCar orderPrivateCar = this.selectById(orderId);
             orderPrivateCar.setReassignNotice(0);
             this.updateById(orderPrivateCar);
         }
-        if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
+        if(state == 11){
             map.put("state", map.get("oldState"));
         }
         if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){
@@ -1765,6 +1950,11 @@
         String driverId = redisUtil.getValue("DEVICE_" + map.get("driverId"));
         map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
         map.put("orderType", 1);
+        if(state == 8 || state == 9){
+            map.put("receipt", "http://182.160.16.251:81/files/html/ride_receipt_" + orderId + ".html");
+        }else{
+            map.put("receipt", "");
+        }
         return map;
     }
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementAllocationMapper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementAllocationMapper.java
new file mode 100644
index 0000000..553b480
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementAllocationMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SettlementAllocation;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 16:24
+ */
+public interface SettlementAllocationMapper extends BaseMapper<SettlementAllocation> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementDetailMapper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementDetailMapper.java
new file mode 100644
index 0000000..8e14086
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementDetailMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SettlementDetail;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 14:02
+ */
+public interface SettlementDetailMapper extends BaseMapper<SettlementDetail> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java
new file mode 100644
index 0000000..9343832
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SettlementRecord;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 14:35
+ */
+public interface SettlementRecordMapper extends BaseMapper<SettlementRecord> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementAllocationMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementAllocationMapper.xml
new file mode 100644
index 0000000..856351c
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementAllocationMapper.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.SettlementAllocationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SettlementAllocation">
+        <id column="id" property="id"/>
+        <result column="content" property="content"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementDetailMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementDetailMapper.xml
new file mode 100644
index 0000000..f568009
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementDetailMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.SettlementDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SettlementDetail">
+        <id column="id" property="id"/>
+        <result column="settlementRecordId" property="settlementRecordId"/>
+        <result column="orderId" property="orderId"/>
+        <result column="orderType" property="orderType"/>
+        <result column="driverId" property="driverId"/>
+        <result column="orderMoney" property="orderMoney"/>
+        <result column="orderMoney" property="orderMoney"/>
+        <result column="createTime" property="createTime"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml
new file mode 100644
index 0000000..8a9be42
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.SettlementRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SettlementRecord">
+        <id column="id" property="id"/>
+        <result column="day" property="day"/>
+        <result column="driverId" property="driverId"/>
+        <result column="type" property="type"/>
+        <result column="paymentStatus" property="paymentStatus"/>
+        <result column="payMoney" property="payMoney"/>
+        <result column="payType" property="payType"/>
+        <result column="code" property="code"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementAllocation.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementAllocation.java
new file mode 100644
index 0000000..031d212
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementAllocation.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 9:26
+ */
+@Data
+@TableName("t_settlement_allocation")
+public class SettlementAllocation {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 配置json
+     */
+    @TableField("content")
+    private String content;
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementDetail.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementDetail.java
new file mode 100644
index 0000000..05b0067
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementDetail.java
@@ -0,0 +1,58 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 9:23
+ */
+@Data
+@TableName("t_settlement_detail")
+public class SettlementDetail {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 结算主表id
+     */
+    @TableField("settlementRecordId")
+    private Integer settlementRecordId;
+    /**
+     * 订单id
+     */
+    @TableField("orderId")
+    private Integer orderId;
+    /**
+     * 订单类型(1=专车,4=同城小件)
+     */
+    @TableField("orderType")
+    private Integer orderType;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 订单金额
+     */
+    @TableField("orderMoney")
+    private Double orderMoney;
+    /**
+     * 结算金额
+     */
+    @TableField("price")
+    private Double price;
+    /**
+     * 添加日期
+     */
+    @TableField("createTime")
+    private Date createTime;
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java
new file mode 100644
index 0000000..b1e2984
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java
@@ -0,0 +1,70 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 9:13
+ */
+@Data
+@TableName("t_settlement_record")
+public class SettlementRecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 结算日期
+     */
+    @TableField("day")
+    private Date day;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 结算周期(1=日结算,2=周结算,3=月结算)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 支付状态(1=待支付,2=已支付)
+     */
+    @TableField("paymentStatus")
+    private Integer paymentStatus;
+    /**
+     * 支付金额
+     */
+    @TableField("payMoney")
+    private Double payMoney;
+    /**
+     * 支付方式(1=手机支付,2=银行卡支付,3=余额支付)
+     */
+    @TableField("payType")
+    private Integer payType;
+    /**
+     * 支付时间
+     */
+    @TableField("payTime")
+    private Date payTime;
+    /**
+     * 支付单号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICarService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICarService.java
new file mode 100644
index 0000000..f15b0c4
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICarService.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Car;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/16 14:35
+ */
+public interface ICarService extends IService<Car> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
index 001598c..208b2d3 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
@@ -3,6 +3,8 @@
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
 
+import java.util.Map;
+
 public interface IOrderService {
 
 
@@ -27,4 +29,13 @@
      * @throws Exception
      */
     ResultUtil weChatPay(Integer orderId, Integer orderType, Integer type, Integer userType, Integer uid, String content, Integer language) throws Exception;
+
+
+    /**
+     * 获取订单车牌信息
+     * @param orderType
+     * @param orderId
+     * @return
+     */
+    Map<String, Object> queryOrderLicensePlate(Integer orderType, Integer orderId);
 }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementAllocationService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementAllocationService.java
new file mode 100644
index 0000000..d299396
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementAllocationService.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.SettlementAllocation;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 16:31
+ */
+public interface ISettlementAllocationService extends IService<SettlementAllocation> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementDetailService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementDetailService.java
new file mode 100644
index 0000000..71466cd
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementDetailService.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.SettlementDetail;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 14:04
+ */
+public interface ISettlementDetailService extends IService<SettlementDetail> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java
new file mode 100644
index 0000000..a20d0c0
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.SettlementRecord;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 14:36
+ */
+public interface ISettlementRecordService extends IService<SettlementRecord> {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CarServiceImpl.java
new file mode 100644
index 0000000..86b4e6a
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CarServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.CarMapper;
+import com.stylefeng.guns.modular.system.model.Car;
+import com.stylefeng.guns.modular.system.service.ICarService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/16 14:36
+ */
+@Service
+public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarService {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
index 5bc94bc..c2a091f 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -2,9 +2,15 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.ToolUtil;
 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.specialTrain.model.OrderPrivateCar;
 import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.model.Car;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.service.ICarService;
 import com.stylefeng.guns.modular.system.service.IOrderService;
 import com.stylefeng.guns.modular.system.service.IUserInfoService;
 import com.stylefeng.guns.modular.system.util.ChinaMobileUtil;
@@ -23,6 +29,7 @@
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.HashMap;
 import java.util.Map;
 
 
@@ -52,6 +59,9 @@
 
     @Autowired
     private IOrderLogisticsService orderLogisticsService;
+
+    @Autowired
+    private ICarService carService;
 
 
     /**
@@ -135,4 +145,38 @@
         }
         return ResultUtil.success();
     }
+
+
+    /**
+     * 获取订单车牌信息
+     * @param orderType
+     * @param orderId
+     * @return
+     */
+    @Override
+    public Map<String, Object> queryOrderLicensePlate(Integer orderType, Integer orderId) {
+        Map<String, Object> map = new HashMap<>();
+        if(orderType == 1){
+            OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+            if(null != orderPrivateCar.getCarId()){
+                Car car = carService.selectById(orderPrivateCar.getCarId());
+                map.put("licensePlate", car.getCarLicensePlate());
+            }
+            map.put("userName", orderPrivateCar.getPassengers());
+            map.put("phone", orderPrivateCar.getPassengersPhone());
+        }
+        if(orderType == 4){
+            OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
+            if(null != orderLogistics.getCarId()){
+                Car car = carService.selectById(orderLogistics.getCarId());
+                map.put("licensePlate", car.getCarLicensePlate());
+            }
+            if(null != orderLogistics.getUserId()){
+                UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId());
+                map.put("userName", ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName());
+                map.put("phone", userInfo.getPhone());
+            }
+        }
+        return map;
+    }
 }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementAllocationServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementAllocationServiceImpl.java
new file mode 100644
index 0000000..ed293c2
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementAllocationServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SettlementAllocationMapper;
+import com.stylefeng.guns.modular.system.model.SettlementAllocation;
+import com.stylefeng.guns.modular.system.service.ISettlementAllocationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 16:31
+ */
+@Service
+public class SettlementAllocationServiceImpl extends ServiceImpl<SettlementAllocationMapper, SettlementAllocation> implements ISettlementAllocationService {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementDetailServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementDetailServiceImpl.java
new file mode 100644
index 0000000..074d1b5
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementDetailServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SettlementDetailMapper;
+import com.stylefeng.guns.modular.system.model.SettlementDetail;
+import com.stylefeng.guns.modular.system.service.ISettlementDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 14:07
+ */
+@Service
+public class SettlementDetailServiceImpl extends ServiceImpl<SettlementDetailMapper, SettlementDetail> implements ISettlementDetailService {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
new file mode 100644
index 0000000..9733b9b
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SettlementRecordMapper;
+import com.stylefeng.guns.modular.system.model.SettlementRecord;
+import com.stylefeng.guns.modular.system.service.ISettlementRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/17 14:36
+ */
+@Service
+public class SettlementRecordServiceImpl extends ServiceImpl<SettlementRecordMapper, SettlementRecord> implements ISettlementRecordService {
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
index 469ef05..bfcfee2 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
@@ -40,7 +40,6 @@
 
     /**
      * 创建邮件内容
-     *
      * @param sentToEmail 接收人邮箱
      * @param subject     设置邮件主题
      * @param content     内容
@@ -53,8 +52,8 @@
         //选择ssl方式
         gmailssl(props);
 
-        final String username = "southwindservice@gmail.com";// gmail 邮箱
-        final String password = "ogsntijmguisoiuk";// Google应用专用密码
+        final String username = "i-gotech@i-go.group";// gmail 邮箱
+        final String password = "mhizkqkhuknbitps";// Google应用专用密码
         // 当做多商户的时候需要使用getInstance, 如果只是一个邮箱发送的话就用getDefaultInstance
         // Session.getDefaultInstance 会将username,password保存在session会话中
         // Session.getInstance 不进行保存
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java
index 2c1f1df..0414146 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java
@@ -40,7 +40,7 @@
      */
     @Override
     public void run(ApplicationArguments args) throws Exception {
-        this.init();
+//        this.init();
     }
 
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OBSUploadUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OBSUploadUtil.java
new file mode 100644
index 0000000..d4d04f8
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OBSUploadUtil.java
@@ -0,0 +1,37 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.obs.services.ObsClient;
+import com.obs.services.model.PutObjectResult;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.UUID;
+
+public class OBSUploadUtil {
+
+    //OSS图片访问域名
+    public static String endPoint = "https://obs.af-south-1.myhuaweicloud.com";
+    public static String accessKey = "RGQE7AADCGJB1TINX14N";
+    public static String accessKeySecret = "oCaIH0CzUB02mTt2gDinMP5SybdrzuBP78UPZd3X";
+    public static String bucketName="i-go";
+
+
+    /**
+     * 流式上传
+     * @param file
+     * @return
+     * @throws IOException
+     */
+    public static String inputStreamUpload(MultipartFile file) throws IOException {
+        // 创建ObsClient实例
+        ObsClient obsClient = new ObsClient(accessKey, accessKeySecret, endPoint);
+        String originalFilename = file.getOriginalFilename();
+        String fileName =  UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length());
+        // 待上传的本地文件路径,需要指定到具体的文件名
+        InputStream content = file.getInputStream();//获得指定文件的输入流
+        PutObjectResult putObjectResult = obsClient.putObject(bucketName, fileName, content);
+        String objectUrl = putObjectResult.getObjectUrl();
+        return objectUrl;
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
index 6ebc7bc..e82b985 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
@@ -780,7 +780,7 @@
 //        PayMoneyUtil payMoneyUtil = new PayMoneyUtil();
 //        payMoneyUtil.weixinpay("测试", "123", "12.5", "");
         PayMoneyUtil payMoneyUtil = new PayMoneyUtil();
-        payMoneyUtil.weixinpay("完成订单", "4861","4861_1_fei","172","/base/wxPayOrderTaxi","JSAPI","o5o4Q5Cwvoxa7m7DciaNZmZauFuM");
+        payMoneyUtil.weixinpay("完成订单", "4861","4861_1_fei","172","/basewxPayOrderTaxi","JSAPI","o5o4Q5Cwvoxa7m7DciaNZmZauFuM");
     }
 
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SMSUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SMSUtil.java
index a57141c..a381833 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SMSUtil.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SMSUtil.java
@@ -283,11 +283,11 @@
         try {
             Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
             Message message = Message.creator(
-                    new PhoneNumber("+233500666666"),
+                    new PhoneNumber("+233570111999"),
                     new PhoneNumber("+16672740015"),
                     "This is the ship that made the Kessel Run in fourteen parsecs?"
             ).create();
-            System.out.println(message.getSid());
+            System.out.println(message.getSid() + "--->" + message.getStatus().toString());
         }catch (Exception e){
             e.printStackTrace();
         }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/HtmlToPdfUtils.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/HtmlToPdfUtils.java
new file mode 100644
index 0000000..e814a8b
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/HtmlToPdfUtils.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.itextpdf;
+
+import com.itextpdf.html2pdf.ConverterProperties;
+import com.itextpdf.html2pdf.HtmlConverter;
+import com.itextpdf.kernel.events.PdfDocumentEvent;
+import com.itextpdf.kernel.font.PdfFont;
+import com.itextpdf.kernel.font.PdfFontFactory;
+import com.itextpdf.kernel.geom.PageSize;
+import com.itextpdf.kernel.pdf.PdfDocument;
+import com.itextpdf.kernel.pdf.PdfWriter;
+import com.itextpdf.layout.font.FontProvider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/14 11:13
+ */
+public class HtmlToPdfUtils {
+
+    public static void convertToPdf(InputStream inputStream, String waterMark, OutputStream outputStream) throws IOException {
+
+        PdfWriter pdfWriter = new PdfWriter(outputStream);
+        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
+        //设置为A4大小
+        pdfDocument.setDefaultPageSize(PageSize.A4);
+        //添加水印
+        pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new WaterMarkEventHandler(waterMark));
+
+        //添加页码
+        //pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE,new PageEventHandler());
+        //添加中文字体支持
+        ConverterProperties properties = new ConverterProperties();
+        FontProvider fontProvider = new FontProvider();
+
+        PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
+        fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");
+
+        //添加自定义字体,例如微软雅黑
+        /*if (StringUtils.isNotBlank(fontPath)){
+            PdfFont microsoft = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, false);
+            fontProvider.addFont(microsoft.getFontProgram(), PdfEncodings.IDENTITY_H);
+        }*/
+
+        properties.setFontProvider(fontProvider);
+        HtmlConverter.convertToPdf(inputStream, pdfDocument, properties);
+
+        pdfWriter.close();
+        pdfDocument.close();
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/WaterMarkEventHandler.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/WaterMarkEventHandler.java
new file mode 100644
index 0000000..95c7aa3
--- /dev/null
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/WaterMarkEventHandler.java
@@ -0,0 +1,80 @@
+package com.stylefeng.guns.modular.system.util.itextpdf;
+
+import com.itextpdf.kernel.colors.WebColors;
+import com.itextpdf.kernel.events.Event;
+import com.itextpdf.kernel.events.IEventHandler;
+import com.itextpdf.kernel.events.PdfDocumentEvent;
+import com.itextpdf.kernel.font.PdfFont;
+import com.itextpdf.kernel.font.PdfFontFactory;
+import com.itextpdf.kernel.geom.Rectangle;
+import com.itextpdf.kernel.pdf.PdfDocument;
+import com.itextpdf.kernel.pdf.PdfPage;
+import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
+import com.itextpdf.layout.Canvas;
+import com.itextpdf.layout.element.Paragraph;
+import com.itextpdf.layout.property.TextAlignment;
+import com.itextpdf.layout.property.VerticalAlignment;
+
+import java.io.IOException;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/14 11:15
+ */
+public class WaterMarkEventHandler implements IEventHandler {
+    /**
+     * 水印内容
+     */
+    private String waterMarkContent;
+
+    /**
+     * 一页中有几列水印
+     */
+    private int waterMarkX;
+
+    /**
+     * 一页中每列有多少水印
+     */
+    private int waterMarkY;
+
+    public WaterMarkEventHandler(String waterMarkContent) {
+        this(waterMarkContent, 5, 5);
+    }
+
+    public WaterMarkEventHandler(String waterMarkContent, int waterMarkX, int waterMarkY) {
+        this.waterMarkContent = waterMarkContent;
+        this.waterMarkX = waterMarkX;
+        this.waterMarkY = waterMarkY;
+    }
+
+    @Override
+    public void handleEvent(Event event) {
+
+        PdfDocumentEvent documentEvent = (PdfDocumentEvent) event;
+        PdfDocument document = documentEvent.getDocument();
+        PdfPage page = documentEvent.getPage();
+        Rectangle pageSize = page.getPageSize();
+
+        PdfFont pdfFont = null;
+        try {
+            pdfFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), document);
+
+        Paragraph waterMark = new Paragraph(waterMarkContent).setOpacity(0.5f);
+        Canvas canvas = new Canvas(pdfCanvas, pageSize)
+                .setFontColor(WebColors.getRGBColor("lightgray"))
+                .setFontSize(16)
+                .setFont(pdfFont);
+
+        for (int i = 0; i < waterMarkX; i++) {
+            for (int j = 0; j < waterMarkY; j++) {
+                canvas.showTextAligned(waterMark, (150 + i * 300), (160 + j * 150), document.getNumberOfPages(), TextAlignment.CENTER, VerticalAlignment.BOTTOM, 120);
+            }
+        }
+        canvas.close();
+    }
+}
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
index d163767..62961dc 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
@@ -127,7 +127,6 @@
     private String cancelRemark;
     @ApiModelProperty("备注")
     private String remark;
-
     @ApiModelProperty("是否首单免费1否,2是")
     private String isFree;
 
@@ -143,6 +142,12 @@
     private String moneyTime;
 
     private Integer startDuration;
+    /**
+     * 收据链接
+     */
+    @ApiModelProperty("收据链接")
+    private String receipt;
+
 
     public Integer getStartDuration() {
         return startDuration;
@@ -658,6 +663,14 @@
         this.payType = payType;
     }
 
+    public String getReceipt() {
+        return receipt;
+    }
+
+    public void setReceipt(String receipt) {
+        this.receipt = receipt;
+    }
+
     @Override
     public String toString() {
         return "OrderInfoWarpper{" +
@@ -785,6 +798,7 @@
             orderInfoWarpper.setMoneyType(null != map.get("moneyType") ? Integer.valueOf(map.get("moneyType").toString()) :1);
             orderInfoWarpper.setMoneyTime(null != map.get("moneyTime") ? map.get("moneyTime").toString() :"");
             orderInfoWarpper.setPayType(null != map.get("payType") ? Integer.valueOf(map.get("payType").toString()) : 4);
+            orderInfoWarpper.setReceipt(null != map.get("receipt") ? map.get("receipt").toString() : "");
         }
         if(orderInfoWarpper.getState()==7){
             orderInfoWarpper.setOrderMoney(orderInfoWarpper.getOrderMoney()-orderInfoWarpper.getDiscountMoney());
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
index 5f5c55b..7d384bd 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
@@ -50,6 +50,8 @@
     @ApiModelProperty("订单类型(1=专车,2=出租车,3=跨城出行,4=同城小件物流,5=跨城小件物流)")
     private Integer orderType;
     private Long insertTime;
+    @ApiModelProperty("收据链接")
+    private String receipt;
 
     public Integer getOrderId() {
         return orderId;
@@ -195,6 +197,14 @@
         this.differenceMoney = differenceMoney;
     }
 
+    public String getReceipt() {
+        return receipt;
+    }
+
+    public void setReceipt(String receipt) {
+        this.receipt = receipt;
+    }
+
     @Override
     public String toString() {
         return "OrderWarpper{" +
@@ -240,6 +250,7 @@
                 orderWarpper.setCarTime(null != map.get("carTime") ? Integer.valueOf(String.valueOf(map.get("carTime"))) : 0);
                 orderWarpper.setServerCarModel(null != map.get("serverCarModel") ? String.valueOf(map.get("serverCarModel")) : "");
                 orderWarpper.setDifferenceMoney(null != map.get("differenceMoney") ? Double.valueOf(map.get("differenceMoney").toString()) : 0D);
+                orderWarpper.setReceipt(null != map.get("receipt") ? String.valueOf(map.get("receipt")) : "");
                 list.add(orderWarpper);
             }
         }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index 57dfd2e..11048c6 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -277,11 +277,11 @@
             //调用移动的小号接口
             Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
             Region region = regionMapper.query(geocode1.get("districtCode"));
-            Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
-            if(String.valueOf(map.get("code")).equals("200")){
-                orderTaxi.setTelX(map.get("telX"));
-                orderTaxi.setBindId(map.get("bindId"));
-            }
+//            Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
+//            if(String.valueOf(map.get("code")).equals("200")){
+//                orderTaxi.setTelX(map.get("telX"));
+//                orderTaxi.setBindId(map.get("bindId"));
+//            }
 
             driver.setState(3);
             driverService.updateById(driver);
diff --git a/UserIGOTravel/guns-admin/src/main/resources/application.yml b/UserIGOTravel/guns-admin/src/main/resources/application.yml
index f133d11..d3cb2fb 100644
--- a/UserIGOTravel/guns-admin/src/main/resources/application.yml
+++ b/UserIGOTravel/guns-admin/src/main/resources/application.yml
@@ -62,11 +62,11 @@
 ################# 测试环境 ###################
 #spring:
 #  datasource:
-#    url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
+#    url: jdbc:mysql://192.168.110.80:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
 #    username: root
 #    password: 123456
 #    db-name: guns #用来搜集数据库的所有表
-#    filters: wall,mergeStat
+#    filters: wall,mergeStat2
 
 #多数据源情况的配置
 guns:
@@ -132,15 +132,15 @@
   mail:
     host: smtp.gmail.com # 配置 smtp 服务器地址
     port: 465 # smtp 服务器的端口
-    username: southwindservice@gmail.com # 配置邮箱用户名(你的邮箱地址)
-    password: ogsntijmguisoiuk # 配置申请到的授权码(刚让复制的授权码)
+    username: i-gotech@i-go.group # 配置邮箱用户名(你的邮箱地址)
+    password: mhizkqkhuknbitps # 配置申请到的授权码(刚让复制的授权码)
     default-encoding: UTF-8 # 配置邮件编码
     properties:
       mail:
         smtp:
           socketFactoryClass: javax.net.ssl.SSLSocketFactory # 配饰 SSL 加密工厂
         debug: true
-    from: southwindservice@gmail.com # 发送方邮件,配在yml中可方便更改
+    from: i-gotech@i-go.group # 发送方邮件,配在yml中可方便更改
     template-path: /usr/local/nginx/html/mailbox/
 
 ---
diff --git a/UserIGOTravel/guns-admin/src/main/resources/redis.properties b/UserIGOTravel/guns-admin/src/main/resources/redis.properties
index bc6b0e9..0bcf744 100644
--- a/UserIGOTravel/guns-admin/src/main/resources/redis.properties
+++ b/UserIGOTravel/guns-admin/src/main/resources/redis.properties
@@ -2,7 +2,7 @@
 # Redis���ݿ�������Ĭ��Ϊ0��
 spring.redis.database=0
 # Redis��������ַ
-spring.redis.host=127.0.0.1
+spring.redis.host=192.168.110.80
 # Redis���������Ӷ˿�
 spring.redis.port=6379
 # Redis�������������루Ĭ��Ϊ�գ�
diff --git a/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
index f66d90d..6a36d48 100644
--- a/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
+++ b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
@@ -1,6 +1,11 @@
 //package com.stylefeng.guns;
 //
 //import com.stylefeng.guns.modular.system.util.Tingg.TinggPayoutUtil;
+//import com.twilio.Twilio;
+//import com.twilio.http.TwilioRestClient;
+//import com.twilio.rest.api.v2010.Account;
+//import com.twilio.rest.api.v2010.account.Message;
+//import com.twilio.type.PhoneNumber;
 //import org.junit.Test;
 //import org.junit.runner.RunWith;
 //import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +26,18 @@
 //
 //    @Test
 //    public void test(){
-//        tinggPayoutUtil.sendPayout("GH-MTN-B2C", "+233277211131", "00007", 1D, "https://10pz685243.zicp.fun/base/IGO/tinggPayoutCallback", "Transfer remittance");
+//        String ACCOUNT_SID = "AC1fd05e898bd59d17ba72db621afca537";
+//        String AUTH_TOKEN = "7cee1a6cb0e2936a9037be577b1ffe57";
+//        try {
+//            Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
+//            Message message = Message.creator(
+//                    new PhoneNumber("+233500666666"),
+//                    new PhoneNumber("+16672740015"),
+//                    "This is the ship that made the Kessel Run in fourteen parsecs?"
+//            ).create();
+//            System.out.println(message.getSid());
+//        }catch (Exception e){
+//            e.printStackTrace();
+//        }
 //    }
 //}

--
Gitblit v1.7.1