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><!– 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart –>--> <!--</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>--> <!--<!–把本地lib里面的jar复制到lib–>--> <!--<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>--> <!--<!– 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 –>--> <!--<failOnMissingWebXml>false</failOnMissingWebXml>--> <!--<!–打包后的项目名–>--> <!--<!–<warName>example</warName>–>--> <!--<!–<webResources>–>--> <!--<!–<resource>–>--> <!--<!–<!–把本地lib里面的jar复制到lib–>–>--> <!--<!–<directory>${project.basedir}/lib</directory>–>--> <!--<!–<targetPath>WEB-INF/lib/</targetPath>–>--> <!--<!–<includes>–>--> <!--<!–<include>**/*.jar</include>–>--> <!--<!–</includes>–>--> <!--<!–</resource>–>--> <!--<!–</webResources>–>--> <!--</configuration>--> <!--</plugin>--> <!--</plugins>--> <resources> <resource> 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(); } } } } 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){ 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; } 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; } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementAllocationMapper.java
New file @@ -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> { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementDetailMapper.java
New file @@ -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> { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java
New file @@ -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> { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementAllocationMapper.xml
New file @@ -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> UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementDetailMapper.xml
New file @@ -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> UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml
New file @@ -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> UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementAllocation.java
New file @@ -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; } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementDetail.java
New file @@ -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; } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java
New file @@ -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; } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICarService.java
New file @@ -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> { } 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); } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementAllocationService.java
New file @@ -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> { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementDetailService.java
New file @@ -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> { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java
New file @@ -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> { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CarServiceImpl.java
New file @@ -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 { } 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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementAllocationServiceImpl.java
New file @@ -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 { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementDetailServiceImpl.java
New file @@ -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 { } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
New file @@ -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 { } 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 不进行保存 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(); } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OBSUploadUtil.java
New file @@ -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; } } 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"); } 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(); } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/HtmlToPdfUtils.java
New file @@ -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(); } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/itextpdf/WaterMarkEventHandler.java
New file @@ -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(); } } 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()); 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); } } 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); 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/ --- 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·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£© 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(); // } // } //}