DriverIGOTravel/guns-admin/pom.xml
@@ -13,7 +13,7 @@ <name>guns-admin</name> <description>guns 的spring boot版本</description> <packaging>war</packaging> <packaging>jar</packaging> <dependencies> @@ -268,45 +268,58 @@ <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> DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java
@@ -40,9 +40,6 @@ public static void main(String[] args) { SpringApplication.run(GunsApplication.class, args); logger.info("GunsApplication is success!"); GDFalconUtil gdFalconUtil = new GDFalconUtil(); gdFalconUtil.init();//初始化猎鹰服务 } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -231,6 +231,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 driverService.registeredDriver(phoneOperator, phone, code, password, uid, type, userType, language); }catch (Exception e){ e.printStackTrace(); @@ -266,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 driverService.registeredDriver(phoneOperator, phone, code, password, uid, type, userType, language); }catch (Exception e){ @@ -784,6 +812,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 driverService.updatePhone(phoneOperator, phone, code, uid, language); }catch (Exception e){ e.printStackTrace(); DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/SettlementRecordController.java
New file @@ -0,0 +1,187 @@ package com.stylefeng.guns.modular.api; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.model.SettlementRecord; import com.stylefeng.guns.modular.system.service.IDriverService; import com.stylefeng.guns.modular.system.service.ISettlementRecordService; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackRequest; import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackResponse; import com.stylefeng.guns.modular.system.util.Tingg.model.Payments; import com.stylefeng.guns.modular.system.util.UUIDUtil; import com.stylefeng.guns.modular.system.warpper.QueryHistoricalSettlement; import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmount; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.List; /** * @author zhibing.pu * @Date 2023/8/17 9:39 */ @RestController @RequestMapping("") public class SettlementRecordController { @Autowired private ISettlementRecordService settlementRecordService; @Autowired private IDriverService driverService; @ResponseBody @PostMapping("/api/settlementRecord/querySettlementAmount") @ApiOperation(value = "获取个人中心待结算金额和明细", tags = {"司机端-个人中心"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<QuerySettlementAmount> querySettlementAmount(HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } QuerySettlementAmount querySettlementAmount = settlementRecordService.querySettlementAmount(uid); return ResultUtil.success(querySettlementAmount); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/settlementRecord/paymentSettlementAmount") @ApiOperation(value = "支付结算费用", tags = {"司机端-个人中心"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "支付方式(1=手机支付,2=银行卡支付,3=余额)", name = "payType", required = true, dataType = "int"), @ApiImplicitParam(value = "银行卡id", name = "bankCardId", required = false, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil paymentSettlementAmount(Integer payType, Integer bankCardId, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return settlementRecordService.paymentSettlementAmount(uid, payType, bankCardId, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/settlementRecord/queryHistoricalSettlement") @ApiOperation(value = "获取结算历史记录", tags = {"司机端-个人中心"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"), @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<List<QueryHistoricalSettlement>> queryHistoricalSettlement(Integer pageNum, Integer size, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } List<QueryHistoricalSettlement> queryHistoricalSettlements = settlementRecordService.queryHistoricalSettlement(uid, pageNum, size); return ResultUtil.success(queryHistoricalSettlements); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/settlementRecord/needToSettle") @ApiOperation(value = "判断司机是否需要结算费用", tags = {"司机端-首页"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<Boolean> needToSettle(HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } boolean b = settlementRecordService.needToSettle(uid); return ResultUtil.success(b); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 结算线上支付回调 * @param callbackRequest * @return */ @ResponseBody @PostMapping("/base/settlementRecord/querySettlementAmount") public CallbackResponse paymentSettlementAmountCallback(@RequestBody CallbackRequest callbackRequest){ CallbackResponse callbackResponse = new CallbackResponse(); try { /** * 指示服务是否成功或付费的总体请求代码。。 * 177-部分付费请求 * 178-表明请求已全额支付 * 179-表示请求已部分支付但已过期。 * 129-请求已过期,未付款。 * 180.商户拒绝请求 * 183-商户接受请求,我们可以结算资金 * 188-商户收到请求。 */ String request_status_code = callbackRequest.getRequest_status_code(); String out_trade_no = callbackRequest.getMerchant_transaction_id(); if("177".equals(request_status_code) || "178".equals(request_status_code)){ Payments payments = callbackRequest.getPayments().get(0); String order_id = payments.getPayer_transaction_id(); if(ToolUtil.isNotEmpty(out_trade_no)){ Integer language = Integer.valueOf(out_trade_no.substring(17, 18)); Integer id = Integer.valueOf(out_trade_no.substring(18)); SettlementRecord settlementRecord = settlementRecordService.selectById(id); settlementRecord.setPaymentStatus(2); settlementRecord.setPayTime(new Date()); settlementRecord.setCode(order_id); settlementRecordService.updateById(settlementRecord); callbackResponse.setCheckout_request_id(order_id); callbackResponse.setMerchant_transaction_id(out_trade_no); callbackResponse.setStatus_code("183"); callbackResponse.setStatus_description("Payment processed successfully"); callbackResponse.setReceipt_number(UUIDUtil.getRandomCode(16)); } }else{ callbackResponse.setCheckout_request_id(UUIDUtil.getRandomCode(16)); callbackResponse.setMerchant_transaction_id(out_trade_no); callbackResponse.setStatus_code("180"); callbackResponse.setStatus_description("means payment rejected."); callbackResponse.setReceipt_number(UUIDUtil.getRandomCode(16)); } }catch (Exception e){ e.printStackTrace(); } return callbackResponse; } } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -13,19 +13,25 @@ import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; @@ -251,6 +257,399 @@ pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState()); } }).start(); if(state == 6){ UserInfo userInfo = userInfoMapper.selectById(orderLogistics.getUserId()); if(orderLogistics.getPayType() == 1){ 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 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"); 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("Mobile"); 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"); 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("Mobile"); 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"); 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()); //开始生成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); } } if(orderLogistics.getPayType() == 2){ 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 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"); 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("Bank card"); 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"); 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("Carte bancaire"); 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"); 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()); //开始生成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); } } if(orderLogistics.getPayType() == 3){ 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 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"); 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 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"); 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 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"); 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()); //开始生成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); } } } return ResultUtil.success(); } @@ -420,7 +819,7 @@ UserInfo userInfo = userInfoMapper.selectById(orderLogistics.getUserId()); if(ToolUtil.isNotEmpty(userInfo.getEmail())){ String path = templatePath + "index.html"; String path = templatePath + "driver/index.html"; Document document = Jsoup.parse(new File(path), "UTF-8"); if(1 == language){ document.getElementById("english").remove(); DriverIGOTravel/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 9:27 */ public interface SettlementAllocationMapper extends BaseMapper<SettlementAllocation> { } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementDetailMapper.java
New file @@ -0,0 +1,21 @@ package com.stylefeng.guns.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.stylefeng.guns.modular.system.model.SettlementDetail; import java.util.List; import java.util.Map; /** * @author zhibing.pu * @Date 2023/8/17 9:28 */ public interface SettlementDetailMapper extends BaseMapper<SettlementDetail> { /** * 获取汇总分组数据 * @return */ List<Map<String, Object>> queryGroupDriver(); } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java
New file @@ -0,0 +1,24 @@ package com.stylefeng.guns.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.stylefeng.guns.modular.system.model.SettlementRecord; import com.stylefeng.guns.modular.system.warpper.QueryHistoricalSettlement; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @author zhibing.pu * @Date 2023/8/17 9:34 */ public interface SettlementRecordMapper extends BaseMapper<SettlementRecord> { /** * 获取结算历史 * @param driverId * @return */ List<QueryHistoricalSettlement> queryHistoricalSettlement(@Param("driverId") Integer driverId, @Param("pageNum") Integer pageNum, @Param("size") Integer size); } DriverIGOTravel/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> DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementDetailMapper.xml
New file @@ -0,0 +1,22 @@ <?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="orderId" property="orderId"/> <result column="orderType" property="orderType"/> <result column="driverId" property="driverId"/> <result column="price" property="price"/> <result column="createTime" property="createTime"/> </resultMap> <select id="queryGroupDriver" resultType="map"> select driverId, sum(price) as price from t_settlement_detail where settlementRecordId is null group by driverId </select> </mapper> DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml
New file @@ -0,0 +1,26 @@ <?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> <select id="queryHistoricalSettlement" resultType="com.stylefeng.guns.modular.system.warpper.QueryHistoricalSettlement"> select DATE_FORMAT(`day`, '%Y/%m/%d') as createTime, payMoney as price, `type` from t_settlement_record where driverId = #{driverId} and paymentStatus = 2 order by insertTime desc limit #{pageNum}, #{size} </select> </mapper> DriverIGOTravel/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; } DriverIGOTravel/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; } DriverIGOTravel/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; } DriverIGOTravel/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 9:37 */ public interface ISettlementAllocationService extends IService<SettlementAllocation> { } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementDetailService.java
New file @@ -0,0 +1,20 @@ package com.stylefeng.guns.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.stylefeng.guns.modular.system.model.SettlementDetail; import java.util.List; import java.util.Map; /** * @author zhibing.pu * @Date 2023/8/17 9:36 */ public interface ISettlementDetailService extends IService<SettlementDetail>{ /** * 获取汇总分组数据 * @return */ List<Map<String, Object>> queryGroupDriver(); } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java
New file @@ -0,0 +1,56 @@ package com.stylefeng.guns.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.stylefeng.guns.modular.system.model.SettlementRecord; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.warpper.QueryHistoricalSettlement; import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmount; import java.util.List; /** * @author zhibing.pu * @Date 2023/8/17 9:36 */ public interface ISettlementRecordService extends IService<SettlementRecord> { /** * 获取待结算金额和明细 * @param driverId * @return */ QuerySettlementAmount querySettlementAmount(Integer driverId); /** * 支付待结算 * @param driverId * @param payType * @return */ ResultUtil paymentSettlementAmount(Integer driverId, Integer payType, Integer bankCardId, Integer language) throws Exception; /** * 获取司机历史结算记录 * @param driverId * @return */ List<QueryHistoricalSettlement> queryHistoricalSettlement(Integer driverId, Integer pageNum, Integer size); /** * 是否需要结算 * @param driverId * @return * @throws Exception */ boolean needToSettle(Integer driverId) throws Exception; /** * 定时任务生成结算数据 */ void taskSettlement(); } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -201,7 +201,7 @@ //发送验证码短信 redisUtil.setStrValue(email, authCode, 5 * 60);//设置五分钟过期 String path = templatePath + "index.html"; String path = templatePath + "driver/index.html"; Document document = Jsoup.parse(new File(path), "UTF-8"); if(1 == language){ document.getElementById("english").remove(); @@ -307,7 +307,7 @@ driverMapper.updateById(driver); if(ToolUtil.isNotEmpty(driver.getEmail())){ String path = templatePath + "index.html"; String path = templatePath + "driver/index.html"; Document document = Jsoup.parse(new File(path), "UTF-8"); if(1 == language){ document.getElementById("english").remove(); @@ -424,12 +424,9 @@ return ResultUtil.success(loginWarpper); } driver1 = driverMapper.queryByPhone(phone); if(null != driver1){ LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver1.getId()); return ResultUtil.success(loginWarpper); return ResultUtil.error(language == 1 ? "账号已存在" : language == 2 ? "Account already exists" : "Le compte existe déjà"); } Driver driver = new Driver(); driver.setAccount(phone); @@ -479,7 +476,7 @@ Driver driver = this.selectById(uid); driver.setLastName(registeredWarpper.getLastName()); driver.setFirstName(registeredWarpper.getFirstName()); driver.setSex(registeredWarpper.getSex()); // driver.setSex(registeredWarpper.getSex()); driver.setIdCard(registeredWarpper.getIdCard()); driver.setBirthday(registeredWarpper.getBirthday()); @@ -513,11 +510,11 @@ driver.setPlaceOfPractice(language == 1 ? city1.getChineseName() : language == 2 ? city1.getEnglishName() : city1.getFrenchName()); Calendar calendar = Calendar.getInstance(); calendar.setTime(registeredWarpper.getGetDriverLicenseDate()); // calendar.setTime(registeredWarpper.getGetDriverLicenseDate()); Calendar now = Calendar.getInstance(); now.setTime(new Date()); driver.setDriverAge(now.get(Calendar.YEAR) - calendar.get(Calendar.YEAR)); driver.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate()); // driver.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate()); driver.setDriveCardImgUrl1(registeredWarpper.getDriveCardImgUrl()); driver.setDriveCardImgUrl2(registeredWarpper.getDriveCardImgUrl2()); driver.setEmail(registeredWarpper.getEmail()); @@ -545,7 +542,7 @@ } if(ToolUtil.isNotEmpty(driver.getEmail())){ String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if(1 == language){ document1.getElementById("english").remove(); @@ -624,7 +621,7 @@ driverMapper.updateById(driver); if(ToolUtil.isNotEmpty(driver.getEmail())){ String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if(1 == language){ document1.getElementById("english").remove(); @@ -770,24 +767,24 @@ int size = this.queryMyActivity(uid, new Date(), language).size(); map.put("activity", size); //获取司机待支付的现金支付订单推送司机支付 new Thread(new Runnable() { @Override public void run() { List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("driverId", uid).eq("payType", 4) .eq("driverPay", 1).eq("isDelete", 1)); if(orderPrivateCars.size() > 0){ OrderPrivateCar orderPrivateCar = orderPrivateCars.get(0); pushUtil.pushOfflinePayment(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1); return; } List<OrderLogistics> orderLogistics = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().eq("driverId", uid).eq("payType", 4) .eq("isDelete", 1).eq("driverPay", 1)); if(orderLogistics.size() > 0){ OrderLogistics orderLogistics1 = orderLogistics.get(0); pushUtil.pushOfflinePayment(2, orderLogistics1.getDriverId(), orderLogistics1.getId(), orderLogistics1.getType()); } } }).start(); // new Thread(new Runnable() { // @Override // public void run() { // List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("driverId", uid).eq("payType", 4) // .eq("driverPay", 1).eq("isDelete", 1)); // if(orderPrivateCars.size() > 0){ // OrderPrivateCar orderPrivateCar = orderPrivateCars.get(0); // pushUtil.pushOfflinePayment(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1); // return; // } // List<OrderLogistics> orderLogistics = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().eq("driverId", uid).eq("payType", 4) // .eq("isDelete", 1).eq("driverPay", 1)); // if(orderLogistics.size() > 0){ // OrderLogistics orderLogistics1 = orderLogistics.get(0); // pushUtil.pushOfflinePayment(2, orderLogistics1.getDriverId(), orderLogistics1.getId(), orderLogistics1.getType()); // } // } // }).start(); return map; } @@ -1091,7 +1088,7 @@ driver.setPassword(ShiroKit.md5(password, salt)); this.updateById(driver); if(ToolUtil.isNotEmpty(driver.getEmail())){ String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if(1 == language){ document1.getElementById("english").remove(); @@ -1388,7 +1385,7 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if (1 == language) { document1.getElementById("english").remove(); @@ -1469,7 +1466,7 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if (1 == language) { document1.getElementById("english").remove(); @@ -1551,7 +1548,7 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if (1 == language) { document1.getElementById("english").remove(); @@ -1633,7 +1630,7 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if (1 == language) { document1.getElementById("english").remove(); @@ -1737,7 +1734,7 @@ if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if (1 == language) { document1.getElementById("english").remove(); @@ -1821,7 +1818,7 @@ incomeService.saveData(2, dah.getDriverId(), 1, dao.getId(), null, dah.getMoney()); if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "index.html"; String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); if (1 == language) { document1.getElementById("english").remove(); DriverIGOTravel/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 9:38 */ @Service public class SettlementAllocationServiceImpl extends ServiceImpl<SettlementAllocationMapper, SettlementAllocation> implements ISettlementAllocationService { } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementDetailServiceImpl.java
New file @@ -0,0 +1,28 @@ 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; import java.util.List; import java.util.Map; /** * @author zhibing.pu * @Date 2023/8/17 9:37 */ @Service public class SettlementDetailServiceImpl extends ServiceImpl<SettlementDetailMapper, SettlementDetail> implements ISettlementDetailService { /** * 获取汇总分组数据 * @return */ @Override public List<Map<String, Object>> queryGroupDriver() { return this.baseMapper.queryGroupDriver(); } } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
New file @@ -0,0 +1,263 @@ package com.stylefeng.guns.modular.system.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.modular.system.dao.SettlementRecordMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.Tingg.TinggPayUtil; import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest; import com.stylefeng.guns.modular.system.warpper.QueryHistoricalSettlement; import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmount; import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmountDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; /** * @author zhibing.pu * @Date 2023/8/17 9:36 */ @Service public class SettlementRecordServiceImpl extends ServiceImpl<SettlementRecordMapper, SettlementRecord> implements ISettlementRecordService { @Autowired private ISettlementDetailService settlementDetailService; @Autowired private IDriverService driverService; @Autowired private IBankCardService bankCardService; @Autowired private ITransactionDetailsService transactionDetailsService; @Autowired private ISettlementAllocationService settlementAllocationService; @Value("${callbackPath}") private String callbackPath;//支付回调网关地址 /** * 获取待结算金额和明细 * @param driverId * @return */ @Override public QuerySettlementAmount querySettlementAmount(Integer driverId) { QuerySettlementAmount querySettlementAmount = new QuerySettlementAmount(); SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1)); if(null != settlementRecord){ querySettlementAmount.setType(settlementRecord.getType()); querySettlementAmount.setAmount(settlementRecord.getPayMoney()); List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("settlementRecordId", settlementRecord.getId()).orderBy("createTime desc")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); List<QuerySettlementAmountDetails> list = new ArrayList<>(); settlementDetailList.forEach(s -> { QuerySettlementAmountDetails querySettlementAmountDetails = new QuerySettlementAmountDetails(); querySettlementAmountDetails.setOrderMoney(s.getOrderMoney()); querySettlementAmountDetails.setPayMoney(s.getPrice()); querySettlementAmountDetails.setOrderTime(sdf.format(s.getCreateTime())); list.add(querySettlementAmountDetails); }); querySettlementAmount.setList(list); }else{ querySettlementAmount.setType(2); querySettlementAmount.setAmount(0D); querySettlementAmount.setList(new ArrayList<>()); } return querySettlementAmount; } /** * 支付待结算 * @param driverId * @param payType * @return */ @Override public ResultUtil paymentSettlementAmount(Integer driverId, Integer payType, Integer bankCardId, Integer language) throws Exception { Driver driver1 = driverService.selectById(driverId); SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1)); if(null == settlementRecord){ return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No need to pay" : "Pas besoin de payer"); } Double payMoney = settlementRecord.getPayMoney(); ResultUtil resultUtil = ResultUtil.success(""); if(payType == 1){//手机支付 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String merchantTransactionId = sdf.format(new Date()) + language + settlementRecord.getId(); CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(driver1.getPhone())); checkoutRequest.setCustomerEmail(driver1.getEmail()); checkoutRequest.setAccountNumber(driver1.getPhone()); checkoutRequest.setCustomerFirstName(driver1.getFirstName()); checkoutRequest.setCustomerLastName(driver1.getLastName()); checkoutRequest.setRequestAmount(payMoney); checkoutRequest.setMerchantTransactionId(merchantTransactionId); checkoutRequest.setRequestDescription("Settlement cost"); checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/querySettlementAmount"); checkoutRequest.setPendingRedirectUrl(""); checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html"); checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html"); resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); if(resultUtil.getCode()!=200){ resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Paiement échoué", ""); } return resultUtil; } if(payType == 2){//银行卡支付 BankCard bankCard = bankCardService.selectById(bankCardId); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String merchantTransactionId = sdf.format(new Date()) + language + settlementRecord.getId(); CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode())); checkoutRequest.setCustomerEmail(driver1.getEmail()); checkoutRequest.setAccountNumber(bankCard.getCode()); checkoutRequest.setCustomerFirstName(bankCard.getFirstName()); checkoutRequest.setCustomerLastName(bankCard.getLastName()); checkoutRequest.setRequestAmount(payMoney); checkoutRequest.setMerchantTransactionId(merchantTransactionId); checkoutRequest.setRequestDescription("Settlement cost"); checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/querySettlementAmount"); checkoutRequest.setPendingRedirectUrl(""); checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html"); checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html"); resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); if(resultUtil.getCode()!=200){ resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Paiement échoué", ""); } return resultUtil; } if(payType == 3){//余额支付 if(driver1.getBalance() == null || driver1.getBalance() < payMoney){ return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient account balance" : "Solde de compte insuffisant", ""); } Double laveActivityMoney = driver1.getLaveActivityMoney(); Double laveBusinessMoney = driver1.getLaveBusinessMoney(); if(laveBusinessMoney.compareTo(payMoney) < 0){ driver1.setLaveBusinessMoney(0D); BigDecimal m = new BigDecimal(payMoney).subtract(new BigDecimal(laveBusinessMoney)); driver1.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(m).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); }else{ driver1.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); } driver1.setBalance(new BigDecimal(driver1.getBalance()).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); //添加交易明细 transactionDetailsService.saveData(driverId, "线下结算", payMoney, 2, 1, 2, null, null); driverService.updateById(driver1); settlementRecord.setPaymentStatus(2); settlementRecord.setPayType(payType); settlementRecord.setPayTime(new Date()); this.updateById(settlementRecord); return ResultUtil.success(""); } return resultUtil; } /** * 获取司机结算历史记录 * @param driverId * @return */ @Override public List<QueryHistoricalSettlement> queryHistoricalSettlement(Integer driverId, Integer pageNum, Integer size) { pageNum = (pageNum - 1) * size; return this.baseMapper.queryHistoricalSettlement(driverId, pageNum, size); } /** * 是否需要结算 * @param driverId * @return * @throws Exception */ @Override public boolean needToSettle(Integer driverId) throws Exception { SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1)); return null == settlementRecord ? false : true; } /** * 定时任务生成结算数据 */ @Override public void taskSettlement() { SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null); Calendar today = Calendar.getInstance(); int w = today.get(Calendar.DAY_OF_WEEK); w = w == 1 ? 7 : w - 1; int d = today.get(Calendar.DAY_OF_MONTH); if(null != settlementAllocation){ List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); Integer type = jsonObject.getInteger("type"); Integer day = jsonObject.getInteger("day"); if(type == 2 && w == day){//周结算 for (Map<String, Object> map : list) { Integer driverId = Integer.valueOf(map.get("driverId").toString()); Double price = Double.valueOf(map.get("price").toString()); SettlementRecord settlementRecord = new SettlementRecord(); settlementRecord.setDay(new Date()); settlementRecord.setDriverId(driverId); settlementRecord.setType(2); settlementRecord.setPaymentStatus(1); settlementRecord.setPayMoney(price); settlementRecord.setInsertTime(new Date()); this.insert(settlementRecord); List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId).isNull("settlementRecordId")); settlementDetailList.forEach(s -> { s.setSettlementRecordId(settlementRecord.getId()); }); if(settlementDetailList.size() > 0){ settlementDetailService.updateBatchById(settlementDetailList); } } } if(type == 3 && d == day){//月结算 for (Map<String, Object> map : list) { Integer driverId = Integer.valueOf(map.get("driverId").toString()); Double price = Double.valueOf(map.get("price").toString()); SettlementRecord settlementRecord = new SettlementRecord(); settlementRecord.setDay(new Date()); settlementRecord.setDriverId(driverId); settlementRecord.setType(3); settlementRecord.setPaymentStatus(1); settlementRecord.setPayMoney(price); settlementRecord.setInsertTime(new Date()); this.insert(settlementRecord); List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId).isNull("settlementRecordId")); settlementDetailList.forEach(s -> { s.setSettlementRecordId(settlementRecord.getId()); }); if(settlementDetailList.size() > 0){ settlementDetailService.updateBatchById(settlementDetailList); } } } } } } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
@@ -54,8 +54,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 不进行保存 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -2,6 +2,7 @@ import com.stylefeng.guns.modular.system.service.IDriverService; import com.stylefeng.guns.modular.system.service.IOrderService; import com.stylefeng.guns.modular.system.service.ISettlementRecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -24,6 +25,9 @@ @Autowired private JGPushUtil jgPushUtil; @Autowired private ISettlementRecordService settlementRecordService; public Set<Integer> driverIds = new HashSet<>();//存储需要提醒司机预约单的司机id @@ -78,6 +82,8 @@ try { //生成当天的司机活动 driverService.addTodayActivity(); //处理所有司机待结算数据 settlementRecordService.taskSettlement(); }catch (Exception e){ e.printStackTrace(); } DriverIGOTravel/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(); } } DriverIGOTravel/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(); } } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QueryHistoricalSettlement.java
New file @@ -0,0 +1,20 @@ package com.stylefeng.guns.modular.system.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2023/8/17 12:39 */ @Data @ApiModel public class QueryHistoricalSettlement { @ApiModelProperty("结算日期") private String createTime; @ApiModelProperty("结算金额") private Double price; @ApiModelProperty("结算周期(1=日结算,2=周结算,3=月结算)") private Integer type; } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QuerySettlementAmount.java
New file @@ -0,0 +1,22 @@ package com.stylefeng.guns.modular.system.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2023/8/17 9:41 */ @Data @ApiModel public class QuerySettlementAmount { @ApiModelProperty("标题类型(1=日结算,2=周结算,3=月结算)") private Integer type; @ApiModelProperty("总待支付金额") private Double amount; @ApiModelProperty("明细列表") private List<QuerySettlementAmountDetails> list; } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QuerySettlementAmountDetails.java
New file @@ -0,0 +1,20 @@ package com.stylefeng.guns.modular.system.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2023/8/17 9:42 */ @Data @ApiModel public class QuerySettlementAmountDetails { @ApiModelProperty("订单日期") private String orderTime; @ApiModelProperty("订单金额") private Double orderMoney; @ApiModelProperty("应付金额") private Double payMoney; } DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RegisteredWarpper.java
@@ -15,8 +15,6 @@ private String lastName; @ApiModelProperty("名") private String firstName; @ApiModelProperty("性别(1=男,2=女)") private Integer sex; @ApiModelProperty("生日") private Date birthday; @ApiModelProperty("居住地") @@ -29,8 +27,6 @@ private String idCardImgUrl1; @ApiModelProperty("身份证背面照") private String idCardImgUrl2; @ApiModelProperty("初次领取驾驶证日期") private Date getDriverLicenseDate; @ApiModelProperty("服务模式(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)多个以逗号分隔") private String type; @ApiModelProperty("邮件") @@ -77,14 +73,6 @@ this.firstName = firstName; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public String getDriverContactAddress() { return driverContactAddress; } @@ -123,14 +111,6 @@ public void setIdCardImgUrl2(String idCardImgUrl2) { this.idCardImgUrl2 = idCardImgUrl2; } public Date getGetDriverLicenseDate() { return getDriverLicenseDate; } public void setGetDriverLicenseDate(Date getDriverLicenseDate) { this.getDriverLicenseDate = getDriverLicenseDate; } public String getType() { @@ -194,13 +174,11 @@ return "RegisteredWarpper{" + "phone='" + phone + '\'' + ", password='" + password + '\'' + ", sex=" + sex + ", driverContactAddress='" + driverContactAddress + '\'' + ", driverContactAddress_='" + driverContactAddress_ + '\'' + ", idCard='" + idCard + '\'' + ", idCardImgUrl1='" + idCardImgUrl1 + '\'' + ", idCardImgUrl2='" + idCardImgUrl2 + '\'' + ", getDriverLicenseDate=" + getDriverLicenseDate + ", type='" + type + '\'' + ", email='" + email + '\'' + ", placeOfPracticeId=" + placeOfPracticeId + DriverIGOTravel/guns-admin/src/main/resources/application.yml
@@ -127,16 +127,16 @@ 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中可方便更改 template-path: /usr/local/nginx/html/mailbox/driver/ from: i-gotech@i-go.group # 发送方邮件,配在yml中可方便更改 template-path: /usr/local/nginx/html/mailbox/ ---