From 79d97c39f1d118824f91467feb9f4a55717fd0c0 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 26 七月 2024 14:03:41 +0800 Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/IgoTravel into 2.0 --- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringUtils.java | 41 ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java | 66 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java | 656 +++++- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java | 132 + UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java | 27 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedEnvelopePaymentSettingsServiceImpl.java | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysOvertimeMapper.java | 11 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 50 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java | 17 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java | 21 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 11 UserIGOTravel/guns-admin/src/main/resources/application-dev.yml | 12 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java | 21 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java | 60 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml | 1 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverOnlineController.java | 2 ZuulIGOTravel/src/main/java/com/sinata/zuul/util/NettyStartListener.java | 14 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml | 239 -- UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java | 13 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java | 3 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java | 8 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml | 3 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml | 4 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/PaymentRecordMapper.xml | 24 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml | 90 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml | 5 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java | 12 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml | 132 - DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 274 ++ DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BalanceUsageRecordMapper.xml | 4 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java | 24 ZuulIGOTravel/src/main/java/com/sinata/zuul/ZuulApplication.java | 10 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java | 2 ManagementIGOTravel/guns-admin/src/main/resources/application-produce.yml | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml | 9 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml | 71 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java | 33 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java | 9 UserIGOTravel/guns-admin/src/main/resources/application-produce.yml | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml | 7 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QueryHistoricalSettlement.java | 2 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml | 21 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysOvertime.java | 46 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java | 66 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysOvertimeServiceImpl.java | 15 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java | 4 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml | 132 - DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java | 28 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java | 6 UserIGOTravel/guns-admin/pom.xml | 17 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java | 4 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java | 27 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java | 163 + UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java | 85 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java | 9 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml | 2 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java | 2 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java | 13 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java | 16 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java | 15 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java | 18 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 525 +++- UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java | 60 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java | 7 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java | 85 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysOvertimeMapper.xml | 6 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java | 10 ZuulIGOTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java | 26 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java | 1088 +++++----- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java | 7 ZuulIGOTravel/pom.xml | 4 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java | 34 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java | 2 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml | 2 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java | 21 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java | 66 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java | 20 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml | 568 ----- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java | 12 DriverIGOTravel/guns-admin/pom.xml | 25 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/RedEnvelopeController.java | 4 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 12 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysOvertimeService.java | 11 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java | 192 + DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityOnlineMapper.xml | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java | 106 89 files changed, 3,365 insertions(+), 2,351 deletions(-) diff --git a/DriverIGOTravel/guns-admin/pom.xml b/DriverIGOTravel/guns-admin/pom.xml index fb326c6..db60a84 100644 --- a/DriverIGOTravel/guns-admin/pom.xml +++ b/DriverIGOTravel/guns-admin/pom.xml @@ -14,6 +14,19 @@ <description>guns 的spring boot版本</description> <packaging>jar</packaging> + + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>com.google.cloud</groupId> + <artifactId>libraries-bom</artifactId> + <version>26.42.0</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> <dependencies> @@ -303,7 +316,19 @@ <artifactId>fleetengine-auth</artifactId> <version>1.11.0</version> </dependency> + + <dependency> + <groupId>com.google.cloud</groupId> + <artifactId>google-cloud-texttospeech</artifactId> + </dependency> + + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-all</artifactId> + </dependency> </dependencies> + + <build> diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java index dd1bdba..1667eb0 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java @@ -49,22 +49,16 @@ public static void main(String[] args) { SpringApplication.run(GunsApplication.class, args); - - try { - //启动定时任务调度器 - QuartzUtil.start(GunsApplication.class.getClassLoader().getResourceAsStream("quartz.properties")); - } catch (SchedulerException e) { - throw new RuntimeException(e); - } - + //启动定时任务调度器 + QuartzUtil.start(GunsApplication.class.getClassLoader().getResourceAsStream("quartz.properties")); logger.info("GunsApplication is success!"); } -// @PostConstruct -// void started() { -// TimeZone.setDefault(TimeZone.getTimeZone("GMT+0")); -// } + @PostConstruct + void started() { + TimeZone.setDefault(TimeZone.getTimeZone("GMT+0")); + } @Bean //SpringCloud内部服务质检使用服务名调用 diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java index 5b51032..02d52a4 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java @@ -12,11 +12,8 @@ import com.stylefeng.guns.modular.system.dao.DriverActivityHistoryMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; -import com.stylefeng.guns.modular.system.util.ALiSendSms; -import com.stylefeng.guns.modular.system.util.DateUtil; -import com.stylefeng.guns.modular.system.util.EmailUtil; +import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil; -import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.warpper.*; import com.stylefeng.guns.modular.system.warpper.BalanceUsageRecord; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; @@ -32,6 +29,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; @@ -1210,6 +1208,9 @@ switch (Integer.valueOf(String.valueOf(null != map.get("orderType") ? map.get("orderType") : 0))){ case 1: OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(map.get("incomeId").toString()); + if(null == orderPrivateCar){ + continue; + } baseWarpper.setName(language == 1 ? (orderPrivateCar.getCancelMidway() == 0 ? "" : "【途中取消】") + "打车" : language == 2 ? (orderPrivateCar.getCancelMidway() == 0 ? "" : "【Cancelled during the trip】") + "Ride" : (orderPrivateCar.getCancelMidway() == 0 ? "" : "【Annulé en cours de voyage】") + "Course"); break; case 2: @@ -1220,6 +1221,9 @@ break; case 4: OrderLogistics orderLogistics = orderLogisticsService.selectById(map.get("incomeId").toString()); + if(null == orderLogistics){ + continue; + } baseWarpper.setName(language == 1 ? (orderLogistics.getCancelMidway() == 0 ? "" : "【途中取消】") + "包裹" : language == 2 ? (orderLogistics.getCancelMidway() == 0 ? "" : "【Cancelled during the trip】") + "Delivery" : (orderLogistics.getCancelMidway() == 0 ? "" : "【Annulé en cours de voyage】") + "Livraison"); break; case 5: @@ -1242,6 +1246,9 @@ break; case 2: OrderTaxi orderTaxi = orderTaxiService.selectById(map.get("incomeId").toString()); + if(null == orderTaxi){ + continue; + } List<Income> incomes1 = incomeService.queryData(1, null, 2, orderTaxi.getId(), 2); map1.put("travelMoney", orderTaxi != null ? orderTaxi.getTravelMoney() : 0);//行程费 map1.put("parkMoney", orderTaxi != null ? orderTaxi.getParkMoney() : 0);//停车费 @@ -1251,6 +1258,9 @@ break; case 3: OrderCrossCity orderCrossCity = orderCrossCityService.selectById(map.get("incomeId").toString()); + if(null == orderCrossCity){ + continue; + } List<Income> incomes2 = incomeService.queryData(1, null, 2, orderCrossCity.getId(), 3); map1.put("travelMoney", orderCrossCity != null ? orderCrossCity.getOrderMoney() : 0);//行程费 map1.put("parkMoney", 0);//停车费 @@ -1260,6 +1270,9 @@ break; case 4: OrderLogistics orderLogistics = orderLogisticsService.selectById(map.get("incomeId").toString()); + if(null == orderLogistics){ + continue; + } List<Income> incomes3 = incomeService.queryData(1, null, 2, orderLogistics.getId(), 4); map1.put("parkMoney", orderLogistics != null ? orderLogistics.getParkMoney() : 0);//停车费 map1.put("tipMoney", 0);//小费 @@ -1268,6 +1281,9 @@ break; case 5: OrderLogistics orderLogistics1 = orderLogisticsService.selectById(map.get("incomeId").toString()); + if(null == orderLogistics1){ + continue; + } List<Income> incomes4 = incomeService.queryData(1, null, 2, orderLogistics1.getId(), 5); map1.put("travelMoney", orderLogistics1 != null ? orderLogistics1.getOrderMoney() : 0);//行程费 map1.put("parkMoney", 0);//停车费 @@ -1298,7 +1314,10 @@ break; } baseWarpper.setName(language == 1 ? "取消订单费用" : language == 2 ? "Cancellation fee" : "Frais d'annulation"); - baseWarpper.setData(new Object()); + List<Income> incomes = incomeService.queryData(1, 1, 3, Integer.valueOf(map.get("incomeId").toString()), Integer.valueOf(map.get("orderType").toString())); + Map<String, Object> map1 = new HashMap<>(); + map1.put("rakeMoney", incomes.size() > 0 ? incomes.get(0).getMoney() : 0);//抽成 + baseWarpper.setData(map1); } if("5".equals(type)){ switch (Integer.valueOf(String.valueOf(null != map.get("orderType") ? map.get("orderType") : 0))){ @@ -1732,20 +1751,70 @@ @PostMapping("/api/driver/getFleetEngineAuth") @ApiOperation(value = "获取google地图授权token", tags = {"司机端-个人中心"}, notes = "") @ApiImplicitParams({ + @ApiImplicitParam(value = "车辆id", name = "vehicleId", required = true, dataType = "string"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) - public ResultUtil<Map<String, Object>> getFleetEngineAuth(HttpServletRequest request){ + public ResultUtil<Map<String, Object>> getFleetEngineAuth(String vehicleId, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } - Map<String, Object> s = fleetEngineUtil.fleetEngineAuth(2, uid); + Map<String, Object> s = fleetEngineUtil.fleetEngineAuth(2, vehicleId); return ResultUtil.success(s); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } - + + + + @ResponseBody + @PostMapping("/api/driver/textToSpeech") + @ApiOperation(value = "获取语音播报文件地址", tags = {"司机端-个人中心"}, notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(value = "语言", name = "languageCode", required = true, dataType = "string"), + @ApiImplicitParam(value = "内容", name = "text", required = true, dataType = "string"), + @ApiImplicitParam(value = "文件名称", name = "fileName", required = true, dataType = "string"), + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResultUtil textToSpeech(String languageCode, String text, String fileName){ + try { + String s = TextToSpeechUtil.create(languageCode, text, fileName + ".mp3"); + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/" + fileName + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + return ResultUtil.success(s); + } catch (Exception e) { + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + + + /** + * 手动添加当日活动 + */ + @ResponseBody + @GetMapping("/base/driver/addTodayActivity") + public void addTodayActivity(){ + try { + driverService.addTodayActivity(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverOnlineController.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverOnlineController.java index e48e703..e94d641 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverOnlineController.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverOnlineController.java @@ -27,7 +27,7 @@ @PostMapping("/addDriverOnline") public String addDriverOnline(Integer driverId){ try { - driverOnlineService.addDriverOnline(driverId); + driverOnlineService.addDriverOnline1(driverId); return JSON.toJSONString(ResultUtil.success()); }catch (Exception e){ e.printStackTrace(); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java index 6b7464a..ce2343c 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java @@ -30,6 +30,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -837,6 +839,15 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil updateEndAddress(Integer orderId, Integer orderType, Integer status){ + if(null == orderId){ + return ResultUtil.error("订单id不能为空"); + } + if(null == orderType){ + return ResultUtil.error("订单类型不能为空"); + } + if(null == status){ + return ResultUtil.error("状态不能为空"); + } switch (orderType){ case 1: orderPrivateCarService.updateEndAddress(orderId, status); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java index 487a7f3..ee642f6 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java @@ -33,7 +33,7 @@ * @param driverId * @return */ - List<Map<String, Object>> queryOrderList(@Param("driverId") Integer driverId, + List<Map<String, Object>> queryOrderList(@Param("state") Integer state, @Param("driverId") Integer driverId, @Param("language") Integer language); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml index 4cee274..88b9159 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml @@ -72,7 +72,13 @@ a.isFrozen, a.priceDifference, a.tripId, - DATE_FORMAT(a.snatchOrderTime, '%Y-%m-%d %H:%i:%s') as snatchOrderTime + a.companyId, + DATE_FORMAT(a.snatchOrderTime, '%Y-%m-%d %H:%i:%s') as snatchOrderTime, + a.cancelMidway, + a.remark, + DATE_FORMAT(a.estimateArriveTime, '%Y-%m-%d %H:%i:%s') as estimateArriveTime, + a.estimateArriveMileage, + 1 as orderType from t_order_logistics a left join t_user b on (a.userId = b.id) left join t_order_cancel c on (a.id = c.orderId and c.orderType = a.type and c.state = 2) @@ -81,23 +87,44 @@ <select id="queryOrderList" resultType="map"> - select - id as id, - type as type, - if(#{language} = 1, '包裹', if(#{language} = 2, 'Delivery', 'Livraison')) as `name`, - DATE_FORMAT(travelTime, '%Y-%m-%d %H:%i:%s') as `time`, - startAddress as startAddress, - endAddress as endAddress, - state as state, - CONCAT(recipient, '-', recipientPhone) as `user`, - CONCAT(if(#{language} = 1, if(cargoType = 1, '普通货物 x ', '贵重货物 x '), if(#{language} = 2, if(cargoType = 1, 'General cargo x ', 'Valuable cargo x '), if(cargoType = 1, 'Pour marchandises générales x ', 'Marchandises de valeur x '))), cargoNumber) as cargoNumber, - driverId as driverId, - isFrozen - from t_order_logistics where 1 = 1 - <if test="null != driverId"> - and driverId = #{driverId} + <if test="1 == state"> + select + id as id, + type as type, + if(#{language} = 1, '包裹', if(#{language} = 2, 'Delivery', 'Livraison')) as `name`, + DATE_FORMAT(travelTime, '%Y-%m-%d %H:%i:%s') as `time`, + startAddress as startAddress, + endAddress as endAddress, + state as state, + CONCAT(recipient, '-', recipientPhone) as `user`, + CONCAT(if(#{language} = 1, if(cargoType = 1, '普通货物 x ', '贵重货物 x '), if(#{language} = 2, if(cargoType = 1, 'General cargo x ', 'Valuable cargo x '), if(cargoType = 1, 'Pour marchandises générales x ', 'Marchandises de valeur x '))), cargoNumber) as cargoNumber, + driverId as driverId, + isFrozen + from t_order_logistics where 1 = 1 + <if test="null != driverId"> + and driverId = #{driverId} + </if> + and (state in (3, 4, 5, 6, 11) or (state = 2 and (UNIX_TIMESTAMP(travelTime) - UNIX_TIMESTAMP(now())) < 1800)) </if> - and state in (2, 3, 4, 5, 8, 11,12) + <if test="2 == state"> + select + id as id, + type as type, + if(#{language} = 1, '包裹', if(#{language} = 2, 'Delivery', 'Livraison')) as `name`, + DATE_FORMAT(travelTime, '%Y-%m-%d %H:%i:%s') as `time`, + startAddress as startAddress, + endAddress as endAddress, + state as state, + CONCAT(recipient, '-', recipientPhone) as `user`, + CONCAT(if(#{language} = 1, if(cargoType = 1, '普通货物 x ', '贵重货物 x '), if(#{language} = 2, if(cargoType = 1, 'General cargo x ', 'Valuable cargo x '), if(cargoType = 1, 'Pour marchandises générales x ', 'Marchandises de valeur x '))), cargoNumber) as cargoNumber, + driverId as driverId, + isFrozen + from t_order_logistics where 1 = 1 + <if test="null != driverId"> + and driverId = #{driverId} + </if> + and state = 2 and (UNIX_TIMESTAMP(travelTime) - UNIX_TIMESTAMP(now())) >= 1800 + </if> </select> @@ -118,19 +145,17 @@ UNIX_TIMESTAMP(travelTime) as travelTime, remark as remark, driverPay, - cancelMidway + cancelMidway, + isFrozen from t_order_logistics where driverId = #{uid} - <if test="state == 1"> - and state not in (1, 7) - </if> <if test="state == 2"> - and state = 8 + and state = 7 </if> <if test="state == 3"> and state = 10 </if> <if test="state == 4"> - and state in (6, 9) + and state in (8, 9) </if> order by insertTime desc </select> diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java index f913628..9c19474 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java @@ -425,4 +425,24 @@ */ @TableField("tripId") private String tripId; + /** + * 司机预估到达预约单时间 + */ + @TableField("estimateArriveTime") + private Date estimateArriveTime; + /** + * 司机预估距离预约点距离(米) + */ + @TableField("estimateArriveMileage") + private Long estimateArriveMileage; + /** + * 去往起点的路程数(米) + */ + @TableField("toStartPointMileage") + private Double toStartPointMileage; + /** + * 起步分钟 + */ + @TableField("startDuration") + private Integer startDuration; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java index 04c3478..e897491 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java @@ -79,7 +79,7 @@ * @return * @throws Exception */ - List<Map<String, Object>> queryOrderList(Integer driverId, Integer language) throws Exception; + List<Map<String, Object>> queryOrderList(Integer state, Integer driverId, Integer language) throws Exception; @@ -159,5 +159,11 @@ ResultUtil confirmFees(Integer language, Integer orderId, Integer type, Double parkingFee, Double crossingFee) throws Exception; - + /** + * 计算已服务的实时里程 + * @param orderId + * @param lon + * @param lat + */ + boolean calculateMileage(Integer orderId, String lon, String lat) throws Exception; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java index 16025aa..78ab33c 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java @@ -15,7 +15,9 @@ 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.GoogleMap.DistancematrixVo; import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil; +import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil; import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils; import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil; import com.stylefeng.guns.modular.system.util.quartz.jobs.OrderTimeOutJob; @@ -26,6 +28,8 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.quartz.JobDataMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -44,6 +48,8 @@ @Service public class OrderLogisticsServiceImpl extends ServiceImpl<OrderLogisticsMapper, OrderLogistics> implements IOrderLogisticsService { + + Logger log = LoggerFactory.getLogger(this.getClass()); @Resource private OrderLogisticsMapper orderLogisticsMapper; @@ -123,6 +129,15 @@ @Autowired private ICarService carService; + + @Autowired + private ISysOvertimeService sysOvertimeService; + + @Resource + private ICancleOrderService cancleOrderService; + + @Autowired + private IOrderPositionService orderPositionService; @@ -173,45 +188,88 @@ if(!StringUtils.hasLength(orderLogistics.getTripId())){ orderLogistics.setTripId(UUIDUtil.getRandomCode()); } + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if(ToolUtil.isNotEmpty(value)) { + String[] split = value.split(","); + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); + //超时时间 + long timeOut = System.currentTimeMillis() + (distancematrix.getDuration() * 1000); + orderLogistics.setEstimateArriveTime(new Date(timeOut)); + orderLogistics.setEstimateArriveMileage(distancematrix.getDistance()); + } this.updateById(orderLogistics); //修改司机为服务中 driver.setState(3); driverService.updateById(driver); + /** + * 超时用户取消不收费的提醒 + * 即时单:预估到达预约点时间 + 配置不收费的时间 > 当前时间 (只弹一次) + * + * 超时用户取消订单后需要弹给司机提醒弹框,超时时间 = 当前时间 - 行程时间 - 配置不收费的时间 + * + * 定时提醒弹框 + * 司机只要开始超时且还未到达预约点,则需要定时提醒 + */ + //添加定时任务(普通任务) - ReminderRules reminderRules = reminderRulesService.selectOne(new EntityWrapper<ReminderRules>().eq("companyId", driver.getCompanyId())); + SysOvertime reminderRules = sysOvertimeService.selectOne(new EntityWrapper<SysOvertime>().eq("companyId", driver.getCompanyId())); if(null != reminderRules){ - JSONObject jsonObject = JSON.parseObject(reminderRules.getContent()); - long packageTimeoutReminderInterval = jsonObject.getInteger("packageTimeoutReminderInterval") * 60000L; - long m = (System.currentTimeMillis() - orderLogistics.getSnatchOrderTime().getTime()) / 60000; + CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", driver.getCompanyId())); + Integer driverTimeout = JSON.parseObject(cancleOrder.getContent()).getInteger("driverTimeout"); + //超时时间 + long timeOut = orderLogistics.getEstimateArriveTime().getTime() + (driverTimeout * 60 * 1000); + //乘客取消不收费提醒 JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 1); jobDataMap.put("orderId", orderLogistics.getId()); jobDataMap.put("orderType", 4); - jobDataMap.put("describe", language == 1 ? "您的包裹订单已超时" + m + "分钟,请抓紧!" : language == 2 ? "Your delivery order is overdue for " + m + " minute(s), please go faster." : "Votre commande de livraison est en retard depuis " + m + " minute(s), veuillez aller plus vite."); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", timeOut); + jobDataMap.put("describe", language == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer"); QuartzUtil.addSimpleQuartzTask( new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap) - , new Date(packageTimeoutReminderInterval), packageTimeoutReminderInterval, -1); + , new Date(timeOut), timeOut, 0); + + //超时循环提醒 + jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 3); + jobDataMap.put("orderId", orderLogistics.getId()); + jobDataMap.put("orderType", 4); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", orderLogistics.getEstimateArriveTime().getTime()); + jobDataMap.put("describe", ""); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap) + , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1); } - Car car = carService.selectById(orderLogistics.getCarId()); - if(!StringUtils.hasLength(car.getVehicleId())){ - car.setVehicleId(UUIDUtil.getRandomCode()); - carService.updateById(car); - } - String trip = fleetEngineUtil.getTrip(orderLogistics.getTripId()); - if(ToolUtil.isEmpty(trip)){ - String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); - if(ToolUtil.isEmpty(vehicles)){ - CarModel carModel = carModelMapper.selectById(car.getCarModelId()); - fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + new Thread(()->{ + try { + Car car = carService.selectById(orderLogistics.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carService.updateById(car); + } + String trip = fleetEngineUtil.getTrip(orderLogistics.getTripId()); + if(ToolUtil.isEmpty(trip)){ + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + } + fleetEngineUtil.createTrip(car.getVehicleId(), 1, orderLogistics.getTripId(), + orderLogistics.getStartLat().toString(), orderLogistics.getStartLon().toString(), orderLogistics.getEndLat().toString(), orderLogistics.getEndLon().toString()); + }else{ + //开始修改行程数据 + fleetEngineUtil.updateTrip(null, car.getVehicleId(), null, orderLogistics.getTripId(), null, null, null, null); + } + }catch (Exception e){ + e.printStackTrace(); } - fleetEngineUtil.createTrip(car.getVehicleId(), 1, orderLogistics.getTripId(), - orderLogistics.getStartLat().toString(), orderLogistics.getStartLon().toString(), orderLogistics.getEndLat().toString(), orderLogistics.getEndLon().toString()); - }else{ - //开始修改行程数据 - fleetEngineUtil.updateTrip(null, car.getVehicleId(), null, orderLogistics.getTripId(), null, null, null, null); - } + }).start(); //推送相关代码------------------start---------------- new Thread(new Runnable() { @@ -322,9 +380,16 @@ this.updateById(orderLogistics); Driver driver = driverService.selectById(orderLogistics.getDriverId()); - Car car = carMapper.selectById(driver.getCarId()); - //修改行程数据 - fleetEngineUtil.updateTrip(tripStatus, car.getVehicleId(), null, orderLogistics.getTripId(), null, null, null, null); + String finalTripStatus = tripStatus; + new Thread(()->{ + Car car = carMapper.selectById(driver.getCarId()); + //修改行程数据 + try { + fleetEngineUtil.updateTrip(finalTripStatus, car.getVehicleId(), null, orderLogistics.getTripId(), null, null, null, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }).start(); // TODO: 2020/6/5 推送状态 new Thread(new Runnable() { @@ -377,8 +442,8 @@ } @Override - public List<Map<String, Object>> queryOrderList(Integer driverId, Integer language) throws Exception { - List<Map<String, Object>> list = orderLogisticsMapper.queryOrderList(driverId, language); + public List<Map<String, Object>> queryOrderList(Integer state, Integer driverId, Integer language) throws Exception { + List<Map<String, Object>> list = orderLogisticsMapper.queryOrderList(state, driverId, language); for (Map<String, Object> map : list) { if(null != map.get("time")){ String time = map.get("time").toString(); @@ -632,6 +697,14 @@ orderLogistics.setEndLon(Double.valueOf(orderLogistics.getDestinationLon())); orderLogistics.setEndLat(Double.valueOf(orderLogistics.getDestinationLat())); orderLogistics.setEndAddress(orderLogistics.getDestination()); + //修改google地图行程终点 + try { + fleetEngineUtil.updateTrip(null, null, null, orderLogistics.getTripId(), + null, null, orderLogistics.getEndLat().toString(), orderLogistics.getEndLon().toString()); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } } orderLogistics.setDestinationLon(""); orderLogistics.setDestination(""); @@ -650,7 +723,7 @@ @Override public Map<String, Object> queryMoneyInfo(Integer orderId) throws Exception { OrderLogistics orderLogistics = this.selectById(orderId); - if(orderLogistics.getState() == 5){//服务中的时候获取实时费用数据 + if(orderLogistics.getState() == 6){//服务中的时候获取实时费用数据 this.setMoney(orderLogistics, 0D, 0D); } @@ -828,6 +901,7 @@ amount = num25 + (d1 * num26) + (t1 * num27) + (w1 * num7) + yt1 + yt2 + yt3; orderLogistics.setStartMileage(num2); orderLogistics.setStartMoney(num25);//起步价 + orderLogistics.setStartDuration((int)(num3.doubleValue())); orderLogistics.setMileageKilometers(new BigDecimal(d1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); orderLogistics.setMileageMoney(new BigDecimal(d1 * num26).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//里程费 orderLogistics.setDuration(new BigDecimal(t1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -843,8 +917,6 @@ orderLogistics.setDiscount(0D);//优惠抵扣 orderLogistics.setPayMoney(0D);//支付金额 orderLogistics.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - return orderLogistics; } @@ -867,6 +939,7 @@ amount = num1 + (d1 * num4) + (t1 * num5) + (w1 * num7) + yt1 + yt2 + yt3; orderLogistics.setStartMileage(num2); orderLogistics.setStartMoney(num1);//起步价 + orderLogistics.setStartDuration((int)(num3.doubleValue())); orderLogistics.setMileageKilometers(new BigDecimal(d1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); orderLogistics.setMileageMoney(new BigDecimal(d1 * num4).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//里程费 orderLogistics.setDuration(new BigDecimal(t1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -900,6 +973,9 @@ @Override public ResultUtil confirmFees(Integer language, Integer orderId, Integer type, Double parkingFee, Double crossingFee) throws Exception { OrderLogistics orderLogistics = this.selectById(orderId); + if(6 != orderLogistics.getState()){ + return ResultUtil.error("操作异常,请刷新订单"); + } if(orderLogistics.getArriveTime()==null){ orderLogistics.setArriveTime(orderLogistics.getStartServiceTime()); } @@ -978,6 +1054,60 @@ pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 4, finalOrderTaxi.getState()); } }).start(); + + //上报google + OrderLogistics finalOrderLogistics = orderLogistics; + new Thread(()->{ + try { + fleetEngineUtil.reportBillableEvent(finalOrderLogistics.getTripId()); + log.warn("上报时间:{},tripid:{},created_at:{},completed_at:{}", System.currentTimeMillis(), finalOrderLogistics.getTripId(), + finalOrderLogistics.getInsertTime().getTime(), finalOrderLogistics.getEndServiceTime().getTime()); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); return ResultUtil.success(); } + + + /** + * 计算已服务的实时里程 + * @param orderId + * @param lon + * @param lat + */ + @Override + public boolean calculateMileage(Integer orderId, String lon, String lat) throws Exception { + OrderLogistics orderLogistics = this.selectById(orderId); + OrderPosition orderPosition = orderPositionService.queryNew(orderId, 4); + String now = lon + "," + lat; + String old = null; + if(null != orderPosition){ + old = orderPosition.getLon() + "," + orderPosition.getLat(); + }else{ + orderLogistics.setToStartPointMileage(0D); + orderLogistics.setMileage(0D); + this.updateById(orderLogistics); + return true;//第一条数据不作处理,直接存储 + } + + Map<String, Double> distance = GeodesyUtil.getDistance(now, old); + if(null != distance){ + Double distance1 = distance.get("WGS84"); + if(distance1 > 50 && orderLogistics.getState() < 5){//大于50米表示在移动 + orderLogistics.setToStartPointMileage(new BigDecimal(orderLogistics.getToStartPointMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + this.updateById(orderLogistics); + return true; + } + if(distance1 > 50 && orderLogistics.getState()==5){//大于50米表示在移动 + orderLogistics.setMileage(new BigDecimal(orderLogistics.getMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + this.updateById(orderLogistics); + return true; + } + return false; + }else{ + System.err.println("调用高德计算距离出错"); + } + return false; + } } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml index 98cedf2..37acf95 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml @@ -110,26 +110,7 @@ <if test="null != driverId"> and driverId = #{driverId} </if> - and state = 2 and (UNIX_TIMESTAMP(travelTime) - UNIX_TIMESTAMP(now())) < 1800 - - UNION ALL - - select - id as id, - (1) as type, - if(#{language} = 1, '打车', if(#{language} = 2 , 'Ride', 'Course')) as `name`, - DATE_FORMAT(travelTime, '%Y-%m-%d %H:%i:%s') as time, - startAddress as startAddress, - endAddress as endAddress, - state as state, - orderType as reservation, - driverId as driverId, - isFrozen - from t_order_private_car where 1 = 1 - <if test="null != driverId"> - and driverId = #{driverId} - </if> - and state in (3, 4, 5, 6, 11) + and (state in (3, 4, 5, 6, 11) or (state = 2 and (UNIX_TIMESTAMP(travelTime) - UNIX_TIMESTAMP(now())) < 1800)) </if> <if test="state == 2"> select @@ -170,7 +151,7 @@ remark as remark, driverPay, cancelMidway, - as settleAccounts + isFrozen from t_order_private_car where driverId = #{driverId} <if test="state == 1"> @@ -254,7 +235,12 @@ a.driverPay, a.isFrozen, a.tripId, - DATE_FORMAT(a.snatchOrderTime, '%Y-%m-%d %H:%i:%s') as snatchOrderTime + a.companyId, + DATE_FORMAT(a.snatchOrderTime, '%Y-%m-%d %H:%i:%s') as snatchOrderTime, + a.cancelMidway, + DATE_FORMAT(a.estimateArriveTime, '%Y-%m-%d %H:%i:%s') as estimateArriveTime, + a.estimateArriveMileage, + a.orderType from t_order_private_car a left join t_user b on (a.userId = b.id) left join t_order_cancel c on (a.id = c.orderId and c.orderType = 1 and c.state = 2) @@ -262,155 +248,13 @@ </select> - <select id="taskMidAxbUnBindSend" resultType="OrderPrivateCar"> - select - id as id, - `type` as `type`, - userId as userId, - serverCarModelId as serverCarModelId, - driverId as driverId, - carId as carId, - orderNum as orderNum, - placementLon as placementLon, - placementLat as placementLat, - placementAddress as placementAddress, - startLon as startLon, - startLat as startLat, - startAddress as startAddress, - endLon as endLon, - endLat as endLat, - endAddress as endAddress, - boardingLon as boardingLon, - boardingLat as boardingLat, - boardingAddress as boardingAddress, - boardingTime as boardingTime, - getoffLon as getoffLon, - getoffLat as getoffLat, - getoffAddress as getoffAddress, - getoffTime as getoffTime, - mileage as mileage, - payManner as payManner, - payType as payType, - orderMoney as orderMoney, - startMileage as startMileage, - startMoney as startMoney, - mileageKilometers as mileageKilometers, - mileageMoney as mileageMoney, - duration as duration, - durationMoney as durationMoney, - wait as wait, - waitMoney as waitMoney, - longDistance as longDistance, - longDistanceMoney as longDistanceMoney, - parkMoney as parkMoney, - roadTollMoney as roadTollMoney, - redPacketMoney as redPacketMoney, - couponMoney as couponMoney, - redPacketId as redPacketId, - couponId as couponId, - discount as discount, - discountMoney as discountMoney, - activityId as activityId, - companyId as companyId, - payMoney as payMoney, - substitute as substitute, - passengers as passengers, - passengersPhone as passengersPhone, - state as state, - insertTime as insertTime, - travelTime as travelTime, - snatchOrderTime as snatchOrderTime, - setOutTime as setOutTime, - arriveTime as arriveTime, - startServiceTime as startServiceTime, - endServiceTime as endServiceTime, - orderType as orderType, - orderSource as orderSource, - invoiceId as invoiceId, - isReassign as isReassign, - reassignNotice as reassignNotice, - trackId as trackId, - isDelete as isDelete, - oldState as oldState, - telX as telX, - bindId as bindId - from t_order_private_car where (state in (8, 9) and telX != '' and telX is not null and (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(endServiceTime)) > 1800) or (state = 10 and telX != '' and telX is not null) + <select id="taskMidAxbUnBindSend" resultType="com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar"> + select * from t_order_private_car where (state in (8, 9) and telX != '' and telX is not null and (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(endServiceTime)) > 1800) or (state = 10 and telX != '' and telX is not null) </select> - <select id="queryByState" resultType="OrderPrivateCar"> - select - id as id, - `type` as `type`, - userId as userId, - serverCarModelId as serverCarModelId, - driverId as driverId, - carId as carId, - orderNum as orderNum, - placementLon as placementLon, - placementLat as placementLat, - placementAddress as placementAddress, - startLon as startLon, - startLat as startLat, - startAddress as startAddress, - endLon as endLon, - endLat as endLat, - endAddress as endAddress, - boardingLon as boardingLon, - boardingLat as boardingLat, - boardingAddress as boardingAddress, - boardingTime as boardingTime, - getoffLon as getoffLon, - getoffLat as getoffLat, - getoffAddress as getoffAddress, - getoffTime as getoffTime, - mileage as mileage, - payManner as payManner, - payType as payType, - orderMoney as orderMoney, - startMileage as startMileage, - startMoney as startMoney, - mileageKilometers as mileageKilometers, - mileageMoney as mileageMoney, - duration as duration, - durationMoney as durationMoney, - wait as wait, - waitMoney as waitMoney, - longDistance as longDistance, - longDistanceMoney as longDistanceMoney, - parkMoney as parkMoney, - roadTollMoney as roadTollMoney, - redPacketMoney as redPacketMoney, - couponMoney as couponMoney, - redPacketId as redPacketId, - couponId as couponId, - discount as discount, - discountMoney as discountMoney, - activityId as activityId, - companyId as companyId, - payMoney as payMoney, - substitute as substitute, - passengers as passengers, - passengersPhone as passengersPhone, - state as state, - insertTime as insertTime, - travelTime as travelTime, - snatchOrderTime as snatchOrderTime, - setOutTime as setOutTime, - arriveTime as arriveTime, - startServiceTime as startServiceTime, - endServiceTime as endServiceTime, - orderType as orderType, - orderSource as orderSource, - invoiceId as invoiceId, - isReassign as isReassign, - reassignNotice as reassignNotice, - trackId as trackId, - isDelete as isDelete, - oldState as oldState, - telX as telX, - bindId as bindId - from t_order_private_car where isDelete = 1 and userId = #{uid} + <select id="queryByState" resultType="com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar"> + select * from t_order_private_car where isDelete = 1 and userId = #{uid} <if test="null != orderType"> and orderType = #{orderType} </if> @@ -426,63 +270,8 @@ </select> - <select id="query" resultType="OrderPrivateCar"> - select - id as id, - userId as userId, - driverId as driverId, - carId as carId, - orderNum as orderNum, - placementLon as placementLon, - placementLat as placementLat, - placementAddress as placementAddress, - startLon as startLon, - startLat as startLat, - startAddress as startAddress, - endLon as endLon, - endLat as endLat, - endAddress as endAddress, - boardingLon as boardingLon, - boardingLat as boardingLat, - boardingAddress as boardingAddress, - boardingTime as boardingTime, - getoffLon as getoffLon, - getoffLat as getoffLat, - getoffAddress as getoffAddress, - getoffTime as getoffTime, - mileage as mileage, - payManner as payManner, - payType as payType, - orderMoney as orderMoney, - parkMoney as parkMoney, - roadTollMoney as roadTollMoney, - redPacketMoney as redPacketMoney, - couponMoney as couponMoney, - redPacketId as redPacketId, - couponId as couponId, - discount as discount, - discountMoney as discountMoney, - activityId as activityId, - companyId as companyId, - payMoney as payMoney, - substitute as substitute, - passengers as passengers, - passengersPhone as passengersPhone, - state as state, - insertTime as insertTime, - travelTime as travelTime, - snatchOrderTime as snatchOrderTime, - setOutTime as setOutTime, - arriveTime as arriveTime, - startServiceTime as startServiceTime, - endServiceTime as endServiceTime, - orderType as orderType, - orderSource as orderSource, - invoiceId as invoiceId, - isReassign as isReassign, - trackId as trackId, - orderType as reservation - from t_order_private_car where 1 = 1 + <select id="query" resultType="com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar"> + select * from t_order_private_car where 1 = 1 <if test="null != state"> and state in <foreach collection="state" item="item" index="index" open="(" separator="," close=")"> diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java index 4f33543..d3560f5 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java @@ -147,6 +147,11 @@ @TableField("getoffTime") private Date getoffTime; /** + * 去往起点的路程数(米) + */ + @TableField("toStartPointMileage") + private Double toStartPointMileage; + /** * 行驶里程数(米) */ @TableField("mileage") @@ -251,7 +256,7 @@ * 红包id */ @TableField("redPacketId") - private Integer redPacketId; + private String redPacketId; /** * 优惠券id */ @@ -447,4 +452,14 @@ */ @TableField("tripId") private String tripId; + /** + * 司机预估到达预约单时间 + */ + @TableField("estimateArriveTime") + private Date estimateArriveTime; + /** + * 司机预估距离预约点距离(米) + */ + @TableField("estimateArriveMileage") + private Long estimateArriveMileage; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 299f2be..c7c6c56 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -15,13 +15,17 @@ 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.GoogleMap.DistancematrixVo; import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil; +import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil; import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil; import com.stylefeng.guns.modular.system.util.quartz.jobs.OrderTimeOutJob; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.apache.shiro.util.StringUtils; import org.quartz.JobDataMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -39,6 +43,8 @@ @Service public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService { + + Logger log = LoggerFactory.getLogger(this.getClass()); @Resource private OrderPrivateCarMapper orderPrivateCarMapper; @@ -97,7 +103,7 @@ private String filePath; @Autowired - private IReminderRulesService reminderRulesService; + private ISysOvertimeService sysOvertimeService; @Autowired private FleetEngineUtil fleetEngineUtil; @@ -107,6 +113,12 @@ @Autowired private ICarService carService; + + @Resource + private ICancleOrderService cancleOrderService; + + @Resource + private RedisUtil redisUtil; @@ -219,6 +231,18 @@ if(!StringUtils.hasLength(orderPrivateCar.getTripId())){ orderPrivateCar.setTripId(UUIDUtil.getRandomCode()); } + + if(orderPrivateCar.getOrderType() == 1){ + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if(ToolUtil.isNotEmpty(value)) { + String[] split = value.split(","); + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); + //超时时间 + long timeOut = System.currentTimeMillis() + (distancematrix.getDuration() * 1000); + orderPrivateCar.setEstimateArriveTime(new Date(timeOut)); + orderPrivateCar.setEstimateArriveMileage(distancematrix.getDistance()); + } + } this.updateById(orderPrivateCar); //如果是预约单,则不修改司机为服务中 @@ -227,68 +251,145 @@ driver.setState(3); driverService.updateById(driver); } - - - //添加定时任务(普通任务) - ReminderRules reminderRules = reminderRulesService.selectOne(new EntityWrapper<ReminderRules>().eq("companyId", driver.getCompanyId())); - if(null != reminderRules){ - JSONObject jsonObject = JSON.parseObject(reminderRules.getContent()); - //预约单 - if(orderPrivateCar.getOrderType() == 1){ - long specialCarTimeoutReminderInterval = jsonObject.getInteger("specialCarTimeoutReminderInterval") * 60000L; - long m = (System.currentTimeMillis() - orderPrivateCar.getSnatchOrderTime().getTime()) / 60000; - JobDataMap jobDataMap = new JobDataMap(); - jobDataMap.put("driverId", uid); - jobDataMap.put("orderId", orderPrivateCar.getId()); - jobDataMap.put("orderType", 1); - jobDataMap.put("describe", language == 1 ? "您的打车订单已超时" + m + "分钟,请抓紧!" : language == 2 ? "Your ride order is overdue for " + m + " minute(s), please go faster." : "Votre commande de course est en retard depuis " + m + " minute(s), veuillez aller plus vite."); - QuartzUtil.addSimpleQuartzTask( - new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) - , new Date(specialCarTimeoutReminderInterval), specialCarTimeoutReminderInterval, -1); - }else{ - UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId()); - JSONObject reservationOrder = jsonObject.getJSONObject("reservationOrder"); - long appointmentReminder = reservationOrder.getInteger("appointmentReminder") * 60000L; - long appointmentTimeoutReminderInterval = reservationOrder.getInteger("appointmentTimeoutReminderInterval") * 60000L; - SimpleDateFormat sdf = new SimpleDateFormat(""); - JobDataMap jobDataMap = new JobDataMap(); - jobDataMap.put("driverId", uid); - jobDataMap.put("orderId", orderPrivateCar.getId()); - jobDataMap.put("orderType", 1); - jobDataMap.put("describe", "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + userInfo.getFirstName() + " " + userInfo.getLastName() + ",请准时!"); - QuartzUtil.addSimpleQuartzTask( - new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) - , new Date(appointmentReminder), appointmentReminder, 0); - + + /** + * 超时用户取消不收费的提醒 + * 预约单:行程时间 + 配置不收费的时间 > 当前时间 (只弹一次) + * 即时单:预估到达预约点时间 + 配置不收费的时间 > 当前时间 (只弹一次) + * + * 超时用户取消订单后需要弹给司机提醒弹框,超时时间 = 当前时间 - 行程时间 - 配置不收费的时间 + * + * 定时提醒弹框 + * 司机只要开始超时且还未到达预约点,则需要定时提醒 + * + * 预约单需要提前xx分钟提醒司机需要接乘客,过后每隔xx分钟提醒一次。超时后停止提醒 + */ + + //添加定时任务(普通任务) + SysOvertime reminderRules = sysOvertimeService.selectOne(new EntityWrapper<SysOvertime>().eq("companyId", driver.getCompanyId())); + if(null != reminderRules){ + CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", driver.getCompanyId())); + Integer driverTimeout = JSON.parseObject(cancleOrder.getContent()).getInteger("driverTimeout"); + + //即时单 + if(orderPrivateCar.getOrderType() == 1){ + //超时时间 + long timeOut = orderPrivateCar.getEstimateArriveTime().getTime() + (driverTimeout * 60 * 1000); + //乘客取消不收费提醒 + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 1); + jobDataMap.put("orderId", orderPrivateCar.getId()); + jobDataMap.put("orderType", 1); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", timeOut); + jobDataMap.put("describe", language == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer"); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) + , new Date(timeOut), timeOut, 0); + + //超时循环提醒 jobDataMap = new JobDataMap(); jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 3); jobDataMap.put("orderId", orderPrivateCar.getId()); jobDataMap.put("orderType", 1); - jobDataMap.put("describe", "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + userInfo.getFirstName() + " " + userInfo.getLastName() + ",请准时!"); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", orderPrivateCar.getEstimateArriveTime().getTime()); + jobDataMap.put("describe", ""); QuartzUtil.addSimpleQuartzTask( new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) - , new Date(appointmentReminder + appointmentTimeoutReminderInterval), appointmentTimeoutReminderInterval, -1); + , orderPrivateCar.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1); + }else{ + //超时时间 + long timeOut = orderPrivateCar.getTravelTime().getTime() + (driverTimeout * 60000); + //乘客取消不收费提醒 + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 1); + jobDataMap.put("orderId", orderPrivateCar.getId()); + jobDataMap.put("orderType", 1); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", timeOut); + jobDataMap.put("describe", language == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer"); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) + , new Date(timeOut), timeOut, 0); + + + UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId()); + + //预约单出发首次提醒 + long travelTime = orderPrivateCar.getTravelTime().getTime() - reminderRules.getReserveTime() * 60000; + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); + jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 2); + jobDataMap.put("orderId", orderPrivateCar.getId()); + jobDataMap.put("orderType", 1); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", timeOut); + jobDataMap.put("describe", language == 1 ? "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + ",请准时!" : + language == 2 ? "You are going to pick up " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " at " + sdf.format(orderPrivateCar.getTravelTime()) + ", please be on time. " : + "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure."); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) + , new Date(travelTime), travelTime, 0); + + //预约单出发循环提醒 + jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 2); + jobDataMap.put("orderId", orderPrivateCar.getId()); + jobDataMap.put("orderType", 1); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", orderPrivateCar.getTravelTime().getTime()); + jobDataMap.put("describe", language == 1 ? "您将于" + sdf.format(orderPrivateCar.getTravelTime()) + "去接" + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + ",请准时!" : + language == 2 ? "You are going to pick up " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " at " + sdf.format(orderPrivateCar.getTravelTime()) + ", please be on time. " : + "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure."); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) + , new Date(travelTime + reminderRules.getReserveNext() * 60000), reminderRules.getReserveNext() * 60000, -1); + + //超时循环提醒 + jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("timeOutType", 3); + jobDataMap.put("orderId", orderPrivateCar.getId()); + jobDataMap.put("orderType", 1); + jobDataMap.put("language", language); + jobDataMap.put("timeOut", orderPrivateCar.getTravelTime().getTime()); + jobDataMap.put("describe", ""); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap) + , orderPrivateCar.getTravelTime(), reminderRules.getCar() * 60000, -1); } } - Car car = carService.selectById(orderPrivateCar.getCarId()); - if(!StringUtils.hasLength(car.getVehicleId())){ - car.setVehicleId(UUIDUtil.getRandomCode()); - carService.updateById(car); - } - String trip = fleetEngineUtil.getTrip(orderPrivateCar.getTripId()); - if(ToolUtil.isEmpty(trip)){ - String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); - if(ToolUtil.isEmpty(vehicles)){ - CarModel carModel = carModelMapper.selectById(car.getCarModelId()); - fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + new Thread(()->{ + try { + Car car = carService.selectById(orderPrivateCar.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carService.updateById(car); + } + String trip = fleetEngineUtil.getTrip(orderPrivateCar.getTripId()); + if(ToolUtil.isEmpty(trip)){ + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + } + fleetEngineUtil.createTrip(car.getVehicleId(), 1, orderPrivateCar.getTripId(), + orderPrivateCar.getStartLat().toString(), orderPrivateCar.getStartLon().toString(), orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); + } + //开始修改行程数据 + fleetEngineUtil.updateTrip(null, car.getVehicleId(), null, orderPrivateCar.getTripId(), null, null, null, null); + }catch (Exception e){ + e.printStackTrace(); } - fleetEngineUtil.createTrip(car.getVehicleId(), 1, orderPrivateCar.getTripId(), - orderPrivateCar.getStartLat().toString(), orderPrivateCar.getStartLon().toString(), orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); - } - //开始修改行程数据 - fleetEngineUtil.updateTrip(null, car.getVehicleId(), null, orderPrivateCar.getTripId(), null, null, null, null); + }).start(); //推送相关代码------------------start---------------- new Thread(new Runnable() { @@ -353,6 +454,7 @@ return ResultUtil.error(language == 1 ? "当前订单不能到达预约地点" : language == 2 ? "The current order cannot arrive at the reservation" : "La commande en cours ne peut pas atteindre le rendez-vous"); } String tripStatus = "UNKNOWN_TRIP_STATUS"; + String audioUrl = ""; switch (state){ case 3://出发前往预约点 orderPrivateCar.setState(3); @@ -401,6 +503,17 @@ out.flush(); out.close(); tripStatus = "ENROUTE_TO_DROPOFF"; + switch (language){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/OnboardReminder-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/OnboardReminder-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/OnboardReminder-FR.mp3"; + break; + } break; case 6://结束服务(专车可以返回继续服务)不修改状态 orderPrivateCar.setState(6); @@ -410,13 +523,31 @@ orderPrivateCar.setGetoffTime(new Date()); orderPrivateCar.setEndServiceTime(new Date()); tripStatus = "COMPLETE"; + switch (language){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/ReachDestination-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/ReachDestination-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/ReachDestination-FR.mp3"; + break; + } break; } this.updateById(orderPrivateCar); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - //修改行程数据 - fleetEngineUtil.updateTrip(tripStatus, null, 1, orderPrivateCar.getTripId(), null, null, null, null); + String finalTripStatus = tripStatus; + new Thread(()->{ + //修改行程数据 + try { + fleetEngineUtil.updateTrip(finalTripStatus, null, 1, orderPrivateCar.getTripId(), null, null, null, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }).start(); // TODO: 2020/6/5 推送状态 OrderPrivateCar finalOrderPrivateCar = orderPrivateCar; @@ -427,7 +558,7 @@ pushUtil.pushOrderState(2, finalOrderPrivateCar.getDriverId(), finalOrderPrivateCar.getId(), 1, finalOrderPrivateCar.getState()); } }).start(); - return ResultUtil.success(); + return ResultUtil.success(audioUrl); } @@ -444,6 +575,9 @@ @Override public ResultUtil confirmFees(Integer language, Integer orderId, Integer type, Double parkingFee, Double crossingFee) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); + if(6 != orderPrivateCar.getState()){ + return ResultUtil.error("操作异常,请刷新订单"); + } if(orderPrivateCar.getArriveTime()==null){ orderPrivateCar.setArriveTime(orderPrivateCar.getStartServiceTime()); } @@ -523,6 +657,18 @@ pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 1, finalOrderTaxi.getState()); } }).start(); + + OrderPrivateCar finalOrderPrivateCar = orderPrivateCar; + new Thread(()->{ + try { + //上报google + fleetEngineUtil.reportBillableEvent(finalOrderPrivateCar.getTripId()); + log.warn("上报时间:{},tripid:{},created_at:{},completed_at:{}", System.currentTimeMillis(), finalOrderPrivateCar.getTripId(), + finalOrderPrivateCar.getInsertTime().getTime(), finalOrderPrivateCar.getEndServiceTime().getTime()); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); return ResultUtil.success(); } @@ -536,7 +682,7 @@ @Override public Map<String, Object> queryMoneyInfo(Integer orderId) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); - if(orderPrivateCar.getState() == 5){//服务中的时候获取实时费用数据 + if(orderPrivateCar.getState() == 6){//服务中的时候获取实时费用数据 this.setMoney(orderPrivateCar, 0D, 0D); } @@ -576,6 +722,7 @@ if(null != orderPosition){ old = orderPosition.getLon() + "," + orderPosition.getLat(); }else{ + orderPrivateCar.setToStartPointMileage(0D); orderPrivateCar.setMileage(0D); this.updateById(orderPrivateCar); return true;//第一条数据不作处理,直接存储 @@ -584,7 +731,12 @@ Map<String, Double> distance = GeodesyUtil.getDistance(now, old); if(null != distance){ Double distance1 = distance.get("WGS84"); - if(distance1 > 50 && orderPrivateCar.getState()==5/* && orderPosition.getInsertTime().getTime()>=orderPrivateCar.getBoardingTime().getTime()*/){//大于50米表示在移动 + if(distance1 > 50 && orderPrivateCar.getState() < 5){//大于50米表示在移动 + orderPrivateCar.setToStartPointMileage(new BigDecimal(orderPrivateCar.getToStartPointMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + this.updateById(orderPrivateCar); + return true; + } + if(distance1 > 50 && orderPrivateCar.getState()==5){//大于50米表示在移动 orderPrivateCar.setMileage(new BigDecimal(orderPrivateCar.getMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); this.updateById(orderPrivateCar); return true; @@ -860,6 +1012,14 @@ orderPrivateCar.setEndLon(Double.valueOf(orderPrivateCar.getDestinationLon())); orderPrivateCar.setEndLat(Double.valueOf(orderPrivateCar.getDestinationLat())); orderPrivateCar.setEndAddress(orderPrivateCar.getDestination()); + //修改google地图行程终点 + try { + fleetEngineUtil.updateTrip(null, null, null, orderPrivateCar.getTripId(), + null, null, orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } } orderPrivateCar.setDestinationLon(""); orderPrivateCar.setDestination(""); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java index 3fc4b48..3f38e43 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java @@ -31,5 +31,6 @@ - List<DriverOnline> queryList(@Param("day") String day, @Param("type") Integer type, @Param("duration") Long duration); + List<DriverOnline> queryList(@Param("day") String day, @Param("type") Integer type, + @Param("driverId") Integer driverId, @Param("duration") Long duration); } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java index b67ad23..f3c7a79 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java @@ -22,4 +22,8 @@ */ List<Map<String, Object>> queryHistoricalSettlement(@Param("driverId") Integer driverId, @Param("pageNum") Integer pageNum, @Param("size") Integer size); + + + + Double queryHistoricalSettlementTotal(@Param("driverId") Integer driverId); } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysOvertimeMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysOvertimeMapper.java new file mode 100644 index 0000000..23e2909 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysOvertimeMapper.java @@ -0,0 +1,11 @@ +package com.stylefeng.guns.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.stylefeng.guns.modular.system.model.SysOvertime; + +/** + * @author zhibing.pu + * @Date 2024/7/17 10:17 + */ +public interface SysOvertimeMapper extends BaseMapper<SysOvertime> { +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BalanceUsageRecordMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BalanceUsageRecordMapper.xml index 694c6de..442a5e3 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BalanceUsageRecordMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BalanceUsageRecordMapper.xml @@ -9,12 +9,12 @@ DATE_FORMAT(createTime, '%Y-%m-%d') as createTime, money, purpose - from t_balance_usage_record type = #{type} and driverId = #{driverId} order by createTime desc limit #{pageNum}, #{size} + from t_balance_usage_record where type = #{type} and driverId = #{driverId} and purpose != 6 order by createTime desc limit #{pageNum}, #{size} </select> <select id="queryBalanceUsageRecordSum" resultType="double"> - select ifnull(sum(money), 0) from t_balance_usage_record where type = #{type} and driverId = #{driverId} + select ifnull(sum(money), 0) from t_balance_usage_record where type = #{type} and driverId = #{driverId} and purpose != 6 </select> </mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityOnlineMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityOnlineMapper.xml index 4dc2c36..f3e8520 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityOnlineMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityOnlineMapper.xml @@ -24,6 +24,6 @@ a.money as money from t_driver_activity_online a left join t_driver_activity b on (a.driverActivityId = b.id) - where (now() between a.startTime and a.endTime) and a.companyId = #{companyId} and b.status = 3 + where (now() between b.startTime and b.endTime) and a.companyId = #{companyId} and b.status = 3 </select> </mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml index 53142ff..f965994 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml @@ -87,151 +87,13 @@ <select id="queryByPhone" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_driver where flag != 3 and authState != 4 and phone = #{phone} </select> <select id="queryAccount" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_driver where flag != 3 and authState != 4 and account = #{account} </select> @@ -239,76 +101,7 @@ <select id="queryByPhone_" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_driver where flag != 3 and authState = #{authState} and phone = #{phone} </select> @@ -402,152 +195,14 @@ <select id="queryByJobNum" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser - from t_driver where flag != 3 and jobNumber = #{jobNum} + select * from t_driver where flag != 3 and jobNumber = #{jobNum} </select> <select id="queryWorkDriver" resultType="Driver"> select - a.id as id, - a.account as account, - a.jobNumber as jobNumber, - a.phoneOperator as phoneOperator, - a.phone as phone, - a.password as password, - a.firstName as firstName, - a.lastName as lastName, - a.sex as sex, - a.idCard as idCard, - a.companyId as companyId, - a.franchiseeId as franchiseeId, - a.headImgUrl as headImgUrl, - a.faceImgUrl as faceImgUrl, - a.idCardImgUrl1 as idCardImgUrl1, - a.idCardImgUrl2 as idCardImgUrl2, - a.placeOfEmployment as placeOfEmployment, - a.birthday as birthday, - a.bankCardNumber as bankCardNumber, - a.driverNationality as driverNationality, - a.driverNation as driverNation, - a.driverMaritalStatus as driverMaritalStatus, - a.driverLanguageLevel as driverLanguageLevel, - a.driverEducation as driverEducation, - a.driverCensus as driverCensus, - a.driverAddress as driverAddress, - a.driverContactAddress as driverContactAddress, - a.driverAge as driverAge, - a.driveCard as driveCard, - a.driveCardImgUrl1 as driveCardImgUrl1, - a.driveCardImgUrl2 as driveCardImgUrl2, - a.driverType as driverType, - a.getDriverLicenseDate as getDriverLicenseDate, - a.driverLicenseOn as driverLicenseOn, - a.driverLicenseOff as driverLicenseOff, - a.taxiDriver as taxiDriver, - a.taxiAptitudeCard as taxiAptitudeCard, - a.networkCarlssueImg as networkCarlssueImg, - a.networkCarlssueOrganization as networkCarlssueOrganization, - a.networkCarlssueDate as networkCarlssueDate, - a.getNetworkCarProofDate as getNetworkCarProofDate, - a.networkCarProofOn as networkCarProofOn, - a.networkCarProofOff as networkCarProofOff, - a.registerDate as registerDate, - a.fullTimeDriver as fullTimeDriver, - a.inDriverBlacklist as inDriverBlacklist, - a.commercialType as commercialType, - a.contractCompany as contractCompany, - a.contractOn as contractOn, - a.contractOff as contractOff, - a.emergencyContact as emergencyContact, - a.emergencyContactPhone as emergencyContactPhone, - a.emergencyContactAddress as emergencyContactAddress, - a.remark as remark, - a.isPlatCar as isPlatCar, - a.carId as carId, - a.authState as authState, - a.state as state, - a.addType as addType, - a.balance as balance, - a.activityMoney as activityMoney, - a.laveActivityMoney as laveActivityMoney, - a.businessMoney as businessMoney, - a.laveBusinessMoney as laveBusinessMoney, - a.flag as flag, - a.insertTime as insertTime, - a.insertUser as insertUser, - a.updateTime as updateTime, - a.updateUser as updateUser + a.* from t_driver a left join t_driver_work b on (a.id = b.driverId) where flag != 3 and b.state = 1 @@ -561,76 +216,7 @@ <select id="queryByCompanyId" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_driver where flag != 3 <choose> <when test="companyId == 1"> @@ -645,76 +231,7 @@ <select id="queryByIdentification" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_driver where flag != 3 and idCard = #{identification} </select> @@ -722,76 +239,7 @@ <select id="queryByTaxiAptitudeCard" resultType="Driver"> - select - id as id, - account as account, - jobNumber as jobNumber, - phoneOperator as phoneOperator, - phone as phone, - password as password, - firstName as firstName, - lastName as lastName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - activityMoney as activityMoney, - laveActivityMoney as laveActivityMoney, - businessMoney as businessMoney, - laveBusinessMoney as laveBusinessMoney, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_driver where flag != 3 and taxiAptitudeCard = #{taxiAptitudeCard} </select> diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml index c4d4597..f45ebbd 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml @@ -47,6 +47,13 @@ `date` as `date`, duration as duration, assessment as assessment - from t_driver_online where DATE_FORMAT(`date`, '%Y-%m-%d') = #{day} and type = #{type} and duration >= #{duration} + from t_driver_online where DATE_FORMAT(`date`, '%Y-%m-%d') = #{day} + <if test="null != driverId"> + and driverId = #{driverId} + </if> + <if test="null != type"> + and type = #{type} + </if> + and duration >= #{duration} </select> </mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml index 13f6083..9b1bb90 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml @@ -20,7 +20,7 @@ incomeId as incomeId, orderType as orderType, money as money, - DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as time, + DATE_FORMAT(insertTime, '%Y-%m-%d') as time, type from t_income where money > 0 <if test="null != userType"> diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml index 8f7e3e8..d37ef5f 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml @@ -25,4 +25,11 @@ balanceType from t_settlement_record where driverId = #{driverId} and paymentStatus = 2 order by insertTime desc limit #{pageNum}, #{size} </select> + + + <select id="queryHistoricalSettlementTotal" resultType="double"> + select + ifnull(sum(payMoney), 0) as price + from t_settlement_record where driverId = #{driverId} and paymentStatus = 2 group by driverId + </select> </mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysOvertimeMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysOvertimeMapper.xml new file mode 100644 index 0000000..e70107a --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysOvertimeMapper.xml @@ -0,0 +1,6 @@ +<?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.SysOvertimeMapper"> + + +</mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml index 8353e70..1ef67d2 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml @@ -39,70 +39,14 @@ <select id="queryByPhone" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - CONCAT(firstName, ' ', lastName) as name, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 and phone = #{phone} </select> <select id="queryByOpenid" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - CONCAT(firstName, ' ', lastName) as name, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 <if test="null != openid"> and openId = #{openid} @@ -111,35 +55,7 @@ <select id="queryByOpenid2" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - CONCAT(firstName, ' ', lastName) as name, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 <if test="null != openid"> and appletsOpenId = #{openid} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml index e047d34..a867f3b 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml @@ -25,7 +25,7 @@ <select id="queryWithdrawal" resultType="map"> select id as id, - DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as insertTime, + DATE_FORMAT(insertTime, '%Y-%m-%d') as insertTime, money as money, ('手机提现') as name, remark as remark, @@ -46,6 +46,6 @@ select ifnull(sum(money), 0) as money from t_pub_withdrawal - where flag != 3 and userType = #{userType} and userId = #{uid} and type = #{type} + where flag != 3 and userType = #{userType} and userId = #{uid} and type = #{type} and state = 2 </select> </mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java index 19ad35c..b469cb4 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java @@ -37,7 +37,7 @@ * 在线小时数 */ @TableField("online") - private Integer online; + private Double online; /** * 奖励金额 */ @@ -88,11 +88,11 @@ this.type = type; } - public Integer getOnline() { + public Double getOnline() { return online; } - public void setOnline(Integer online) { + public void setOnline(Double online) { this.online = online; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java index 3d9dff7..010c317 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java @@ -44,6 +44,11 @@ */ @TableField("assessment") private Integer assessment; + /** + * 添加时间 + */ + @TableField("insertTime") + private Date insertTime; public Integer getId() { return id; @@ -92,7 +97,15 @@ public void setAssessment(Integer assessment) { this.assessment = assessment; } - + + public Date getInsertTime() { + return insertTime; + } + + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + @Override public String toString() { return "DriverOnline{" + diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysOvertime.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysOvertime.java new file mode 100644 index 0000000..18bc291 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysOvertime.java @@ -0,0 +1,46 @@ +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 2024/7/17 10:15 + */ +@Data +@TableName("t_sys_overtime") +public class SysOvertime { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 打车订单每隔xx分钟提醒一次 + */ + @TableField("car") + private Integer car; + /** + * 包裹订单每隔xx分钟提醒一次 + */ + @TableField("packageTime") + private Integer packageTime; + /** + * 预约订单 在预定时间前x分钟首次提醒 + */ + @TableField("reserveTime") + private Integer reserveTime; + /** + * 预约订单每隔xx分钟提醒一次 + */ + @TableField("reserveNext") + private Integer reserveNext; + /** + * 公司id + */ + @TableField("companyId") + private Integer companyId; +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java index 5756c30..1208545 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java @@ -14,6 +14,9 @@ * @throws Exception */ void addDriverOnline(Integer driverId) throws Exception; + + + void addDriverOnline1(Integer driverId) throws Exception; /** @@ -31,4 +34,10 @@ * 定时检测司机是否连续接单 */ void deductionDuration(); + + + /** + * 定时检测司机是否连续接单 + */ + void deductionDuration1(); } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysOvertimeService.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysOvertimeService.java new file mode 100644 index 0000000..c5e68ad --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISysOvertimeService.java @@ -0,0 +1,11 @@ +package com.stylefeng.guns.modular.system.service; + +import com.baomidou.mybatisplus.service.IService; +import com.stylefeng.guns.modular.system.model.SysOvertime; + +/** + * @author zhibing.pu + * @Date 2024/7/17 10:18 + */ +public interface ISysOvertimeService extends IService<SysOvertime> { +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java index f88985a..92203ba 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java @@ -1,5 +1,7 @@ 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.core.util.ToolUtil; @@ -17,14 +19,16 @@ import com.stylefeng.guns.modular.system.service.IDriverWorkService; import com.stylefeng.guns.modular.system.util.PushUtil; import com.stylefeng.guns.modular.system.util.RedisUtil; +import com.stylefeng.guns.modular.system.util.TextToSpeechUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service @@ -142,8 +146,32 @@ redisUtil.setStrValue("ONLINE_" + ty + "_" + driverId, String.valueOf(now / 1000));//存入秒 } } - - + + + @Override + public void addDriverOnline1(Integer driverId) throws Exception { + DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("state", 1)); + if(null == driverWork){//非上班状态不记录 + return; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List<DriverActivityHistory> driverActivityHistories = driverActivityHistoryMapper.selectList(new EntityWrapper<DriverActivityHistory>().eq("driverId", driverId) + .eq("type", 3).eq("carryOut", 1).last(" and day = '" + sdf.format(new Date()) + "'")); + //生成每个活动从开始上班到当前时间的时长记录 + for (DriverActivityHistory driverActivityHistory : driverActivityHistories) { + String value = redisUtil.getValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId()); + if(ToolUtil.isNotEmpty(value)){ + JSONObject jsonObject = JSON.parseObject(value); + Long startTime = jsonObject.getLong("startTime"); + long time = System.currentTimeMillis() - startTime; + redisUtil.setStrValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId(), "{\"startTime\":" + startTime + ", \"time\":" + time + "}"); + }else{ + long time = System.currentTimeMillis() - driverWork.getStartTime().getTime(); + redisUtil.setStrValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId(), "{\"startTime\":" + driverWork.getStartTime().getTime() + ", \"time\":" + time + "}"); + } + } + } + /** * 获取给定日期范围的在线时长 * @param driverId @@ -194,13 +222,13 @@ mm = snatchOrderTime.getTime(); } OrderLogistics orderLogistics = orderLogisticsService.selectOne(new EntityWrapper<OrderLogistics>().eq("driverId", driverId).eq("isDelete", 1).ne("state", 10)); - if(null != orderLogistics && snatchOrderTime.before(orderLogistics.getSnatchOrderTime())){ + if(null != orderLogistics && (null == snatchOrderTime || snatchOrderTime.before(orderLogistics.getSnatchOrderTime()))){ mm = orderLogistics.getSnatchOrderTime().getTime(); } //超时不接单,直接将之前的在线时长清零 //推送司机下班提醒 - if(mm >= m){ + if((System.currentTimeMillis() - mm) >= m){ this.deleteById(driverOnline.getId()); driverWork.setState(2); driverWork.setEndTime(new Date()); @@ -209,13 +237,130 @@ driver.setState(1); driverService.updateById(driver); Integer language = driver.getLanguage(); - pushUtil.pushOffline(driverOnline.getDriverId(), 2, language == 1 ? "您已连续" + driverActivityOnline.getOfflineTime() + "小时未接单,系统将强制更改您的状态为:下班" : + + String msg = language == 1 ? "您已连续" + driverActivityOnline.getOfflineTime() + "小时未接单,系统将强制更改您的状态为:下班" : language == 2 ? "You have not been accepting orders for " + driverActivityOnline.getOfflineTime() + " hour(s) System will change your state to Off-work" : - "Vous n’acceptez pas de commandes depuis " + driverActivityOnline.getOfflineTime() + " heure(s) Le système changera votre état en Hors travail"); + "Vous n’acceptez pas de commandes depuis " + driverActivityOnline.getOfflineTime() + " heure(s) Le système changera votre état en Hors travail"; + String audioUrl = null; + try { + audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", msg, "OffLine" + driver.getId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + Map<String, String> map = new HashMap<>(); + map.put("msg", msg); + map.put("audioUrl", audioUrl); + pushUtil.pushOffline(driverOnline.getDriverId(), 2, map); + + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/OffLine" + driver.getId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); } } } + + + @Override + public void deductionDuration1() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List<DriverActivityHistory> driverActivityHistories = driverActivityHistoryMapper.selectList(new EntityWrapper<DriverActivityHistory>() + .eq("type", 3).eq("carryOut", 1).last(" and day = '" + sdf.format(new Date()) + "'")); + for (DriverActivityHistory driverActivityHistory : driverActivityHistories) { + DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverActivityHistory.getDriverId()).eq("state", 1)); + if(null == driverWork){ + continue; + } + DriverActivityOnline driverActivityOnline = driverActivityOnlineMapper.selectById(driverActivityHistory.getActivityId()); + //在线连续xx小时不接单,司机下线,时长不计入总累计时长 + int m = Double.valueOf(driverActivityOnline.getOfflineTime() * 60).intValue(); + String value = redisUtil.getValue("driverActivity_" + driverActivityHistory.getDriverId() + "_" + driverActivityHistory.getId()); + if(ToolUtil.isEmpty(value)){ + continue; + } + JSONObject jsonObject = JSON.parseObject(value); + //开始记录时长的时间开始时间戳 + Long startTime = jsonObject.getLong("startTime"); + //在线时长累计 + Long time = jsonObject.getLong("time") / 60000; + int count1 = orderPrivateCarService.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", driverActivityHistory.getDriverId()) + .eq("isDelete", 1).ne("state", 10).last(" and UNIX_TIMESTAMP(snatchOrderTime) > " + (startTime) / 1000)); + int count2 = orderLogisticsService.selectCount(new EntityWrapper<OrderLogistics>().eq("driverId", driverActivityHistory.getDriverId()) + .eq("isDelete", 1).ne("state", 10).last(" and UNIX_TIMESTAMP(snatchOrderTime) > " + (startTime) / 1000)); + + Driver driver = driverService.selectById(driverWork.getDriverId()); + //阶段时间累计时长超过设定时长且没有接单,不计入累计总时长(司机服务中不下班) + if(m <= time && count1 + count2 == 0 && driver.getState() != 3){ + //司机下班,清空当前阶段的累计时长 + driverWork.setState(2); + driverWork.setEndTime(new Date()); + driverWorkService.updateById(driverWork); + driver.setState(1); + driverService.updateById(driver); + redisUtil.remove("driverActivity_" + driverActivityHistory.getDriverId() + "_" + driverActivityHistory.getId()); + Integer language = driver.getLanguage(); + + String msg = language == 1 ? "您已连续" + driverActivityOnline.getOfflineTime() + "小时未接单,系统将强制更改您的状态为:下班" : + language == 2 ? "You have not been accepting orders for " + driverActivityOnline.getOfflineTime() + " hour(s) System will change your state to Off-work" : + "Vous n’acceptez pas de commandes depuis " + driverActivityOnline.getOfflineTime() + " heure(s) Le système changera votre état en Hors travail"; + String audioUrl = null; + try { + audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", msg, "OffLine" + driver.getId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + Map<String, String> map = new HashMap<>(); + map.put("msg", msg); + map.put("audioUrl", audioUrl); + pushUtil.pushOffline(driverWork.getDriverId(), 2, map); + + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/OffLine" + driver.getId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + } + //阶段时间累计有新的订单,计入累计总时长,重置新的开始统计时间戳 + if(m <= time && count1 + count2 > 0){ + DriverOnline driverOnline = this.selectOne(new EntityWrapper<DriverOnline>().eq("DATE_FORMAT(date, '%Y-%m-%d')", sdf.format(new Date())) + .eq("driverId", driverActivityHistory.getDriverId())); + if(null == driverOnline){ + driverOnline = new DriverOnline(); + driverOnline.setDriverId(driverActivityHistory.getDriverId()); + driverOnline.setDate(new Date()); + driverOnline.setDuration(time * 60); + driverOnline.setInsertTime(new Date()); + this.insert(driverOnline); + }else{ + driverOnline.setDuration(driverOnline.getDuration() + (time * 60)); + this.updateById(driverOnline); + } + redisUtil.setStrValue("driverActivity_" + driverActivityHistory.getDriverId() + "_" + driverActivityHistory.getId(), "{\"startTime\":" + System.currentTimeMillis() + ", \"time\":" + 0 + "}"); + } + } + } } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java index bf33bed..f37df73 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java @@ -39,10 +39,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileWriter; +import java.io.*; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @@ -1103,6 +1100,9 @@ //司机登录,添加谷歌上的车辆信息 Car car = carService.selectById(driver.getCarId()); + if(null == car){ + return ResultUtil.error(language == 1 ? "登录失败,请先绑定车辆" : language == 2 ? "Login failed, please bind the vehicle first" : "La connexion a échoué, veuillez d’abord lier le véhicule"); + } if(!StringUtils.hasLength(car.getVehicleId())){ car.setVehicleId(UUIDUtil.getRandomCode()); carService.updateById(car); @@ -1187,6 +1187,7 @@ DriverWork driverWork = driverWorkMapper.queryNewWork(uid, null, 1); Driver driver = this.selectById(uid); Car car = carService.selectById(driver.getCarId()); + String audioUrl = ""; if(null != driverWork){//作下班操作 //检测是否有未完成的订单 List<Map<String, Object>> list = orderService.queryOrderList(1, 1, 10, uid, language); @@ -1210,6 +1211,17 @@ fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); }else{ fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + } + switch (language){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/AfterWork-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/AfterWork-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/AfterWork-FR.mp3"; + break; } }else{ LoginWarpper loginWarpper = new LoginWarpper(); @@ -1259,9 +1271,21 @@ }else{ fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); } + + switch (language){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/AtWork-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/AtWork-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/AtWork-FR.mp3"; + break; + } } this.updateById(driver); - return ResultUtil.success(); + return ResultUtil.success(audioUrl); } @@ -1346,7 +1370,7 @@ map.put("service", list.size());//服务中 list = orderTaxiService.queryOrderList(language, 2, uid); map.put("reservation", list.size());//预约 - List<Map<String, Object>> list1 = orderLogisticsService.queryOrderList(uid, language); + List<Map<String, Object>> list1 = orderLogisticsService.queryOrderList(1, uid, language); map.put("small", list1.size());//小件 int size = this.queryMyActivity(uid, new Date(), language).size(); map.put("activity", size);//活动 @@ -1362,12 +1386,12 @@ */ @Override public List<BaseWarpper> queryMyBusiness(Integer uid, Integer language) throws Exception { - List<DriverService> list = driverServiceMapper.queryMyBusiness(uid); + List<Integer> list = Arrays.asList(1, 4); List<BaseWarpper> maps = new ArrayList<>(); - for (DriverService d : list){ + for (Integer d : list){ BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setId(d.getType()); - switch (d.getType()){ + baseWarpper.setId(d); + switch (d){ case 1: baseWarpper.setName(language == 1 ? "打车" : language == 2 ? "Ride" : "Course"); break; @@ -1840,104 +1864,115 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { - String path1 = templatePath + "driver/index.html"; - Document document1 = Jsoup.parse(new File(path1), "UTF-8"); - if (1 == language) { - document1.getElementById("english").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite").remove(); - document1.getElementById("user").remove(); - document1.getElementById("settle").remove(); - document1.getElementById("pass").remove(); - document1.getElementById("email").remove(); - document1.getElementById("bill").remove(); - document1.getElementById("reward").remove(); - document1.getElementById("driverAudit").remove(); - document1.getElementById("carAudit").remove(); - - document1.getElementsByTag("title").get(0).text("邀请司机奖励(活动)"); - Element rewardToday_user = document1.getElementById("rewardToday_user"); - rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday_award = document1.getElementById("rewardToday_award"); - rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); - Element rewardToday_content = document1.getElementById("rewardToday_content"); - rewardToday_content.text("邀请司机注册即可获得奖励。\n注意此活动是有时间限制的,详情请查看I-GO平台。"); - } - if (2 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite1").remove(); - document1.getElementById("user1").remove(); - document1.getElementById("settle1").remove(); - document1.getElementById("pass1").remove(); - document1.getElementById("email1").remove(); - document1.getElementById("bill1").remove(); - document1.getElementById("reward1").remove(); - document1.getElementById("driverAudit1").remove(); - document1.getElementById("carAudit1").remove(); - - document1.getElementsByTag("title").get(0).text("Invite drivers and earn"); - Element rewardToday1_user = document1.getElementById("rewardToday1_user"); - rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday1_award = document1.getElementById("rewardToday1_award"); - rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); - Element rewardToday1_content = document1.getElementById("rewardToday1_content"); - rewardToday1_content.text("Get a bonus on I-GO today.\nInvite drivers to register to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); - } - if (3 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("english").remove(); - document1.getElementById("invite2").remove(); - document1.getElementById("user2").remove(); - document1.getElementById("settle2").remove(); - document1.getElementById("pass2").remove(); - document1.getElementById("email2").remove(); - document1.getElementById("bill2").remove(); - document1.getElementById("reward2").remove(); - document1.getElementById("driverAudit2").remove(); - document1.getElementById("carAudit2").remove(); - - document1.getElementsByTag("title").get(0).text("Invitez des chauffeurs et gagnez de l’argent"); - Element rewardToday2_user = document1.getElementById("rewardToday2_user"); - rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday2_award = document1.getElementById("rewardToday2_award"); - rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); - Element rewardToday2_content = document1.getElementById("rewardToday2_content"); - rewardToday2_content.text("Obtenez un bonus sur I-GO dès aujourd’hui.\nInvitez les chauffeurs à s’inscrire pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); - } - EmailUtil.send(driver.getEmail(), language == 1 ? "邀请司机奖励(活动)" : language == 2 ? "Invite drivers and earn" : "Invitez des chauffeurs et gagnez de l’argent", document1.html()); - String randomString = ToolUtil.getRandomString(10); - //开始生成pdf收据和html收据 - File file = new File("/usr/local/nginx/html/files/html/"); - if(!file.exists()){ - file.mkdirs(); - } - file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); - if(!file.exists()){ - file.createNewFile(); - } - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(document1.html()); - fileWriter.flush(); - fileWriter.close(); - - String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; - TEmail tEmail = new TEmail(); - tEmail.setLink(link); - tEmail.setUserId(driver.getId()); - tEmail.setType(2); - tEmail.setName(language == 1 ? "邀请司机奖励(活动)" : language == 2 ? "Invite drivers and earn" : "Invitez des chauffeurs et gagnez de l’argent"); - tEmail.setCreateTime(new Date()); - int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; - String week = EmailUtil.getWeek(language, i); - tEmail.setWeek(week); - boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); - if(am){ - tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); - }else { - tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); - } - emailService.insert(tEmail); + new Thread(() -> { + try { + String path1 = templatePath + "driver/index.html"; + Document document1 = null; + try { + document1 = Jsoup.parse(new File(path1), "UTF-8"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (1 == language) { + document1.getElementById("english").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite").remove(); + document1.getElementById("user").remove(); + document1.getElementById("settle").remove(); + document1.getElementById("pass").remove(); + document1.getElementById("email").remove(); + document1.getElementById("bill").remove(); + document1.getElementById("reward").remove(); + document1.getElementById("driverAudit").remove(); + document1.getElementById("carAudit").remove(); + + document1.getElementsByTag("title").get(0).text("邀请司机奖励(活动)"); + Element rewardToday_user = document1.getElementById("rewardToday_user"); + rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday_award = document1.getElementById("rewardToday_award"); + rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); + Element rewardToday_content = document1.getElementById("rewardToday_content"); + rewardToday_content.text("邀请司机注册即可获得奖励。\n注意此活动是有时间限制的,详情请查看I-GO平台。"); + } + if (2 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite1").remove(); + document1.getElementById("user1").remove(); + document1.getElementById("settle1").remove(); + document1.getElementById("pass1").remove(); + document1.getElementById("email1").remove(); + document1.getElementById("bill1").remove(); + document1.getElementById("reward1").remove(); + document1.getElementById("driverAudit1").remove(); + document1.getElementById("carAudit1").remove(); + + document1.getElementsByTag("title").get(0).text("Invite drivers and earn"); + Element rewardToday1_user = document1.getElementById("rewardToday1_user"); + rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday1_award = document1.getElementById("rewardToday1_award"); + rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); + Element rewardToday1_content = document1.getElementById("rewardToday1_content"); + rewardToday1_content.text("Get a bonus on I-GO today.\nInvite drivers to register to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); + } + if (3 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("english").remove(); + document1.getElementById("invite2").remove(); + document1.getElementById("user2").remove(); + document1.getElementById("settle2").remove(); + document1.getElementById("pass2").remove(); + document1.getElementById("email2").remove(); + document1.getElementById("bill2").remove(); + document1.getElementById("reward2").remove(); + document1.getElementById("driverAudit2").remove(); + document1.getElementById("carAudit2").remove(); + + document1.getElementsByTag("title").get(0).text("Invitez des chauffeurs et gagnez de l’argent"); + Element rewardToday2_user = document1.getElementById("rewardToday2_user"); + rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday2_award = document1.getElementById("rewardToday2_award"); + rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); + Element rewardToday2_content = document1.getElementById("rewardToday2_content"); + rewardToday2_content.text("Obtenez un bonus sur I-GO dès aujourd’hui.\nInvitez les chauffeurs à s’inscrire pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); + } + EmailUtil.send(driver.getEmail(), language == 1 ? "邀请司机奖励(活动)" : language == 2 ? "Invite drivers and earn" : "Invitez des chauffeurs et gagnez de l’argent", document1.html()); + String randomString = ToolUtil.getRandomString(10); + //开始生成pdf收据和html收据 + File file = new File("/usr/local/nginx/html/files/html/"); + if(!file.exists()){ + file.mkdirs(); + } + file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); + if(!file.exists()){ + file.createNewFile(); + } + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(document1.html()); + fileWriter.flush(); + fileWriter.close(); + + String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; + TEmail tEmail = new TEmail(); + tEmail.setLink(link); + tEmail.setUserId(driver.getId()); + tEmail.setType(2); + tEmail.setName(language == 1 ? "邀请司机奖励(活动)" : language == 2 ? "Invite drivers and earn" : "Invitez des chauffeurs et gagnez de l’argent"); + tEmail.setCreateTime(new Date()); + int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; + String week = EmailUtil.getWeek(language, i); + tEmail.setWeek(week); + boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); + if(am){ + tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); + }else { + tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); + } + emailService.insert(tEmail); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); } } } @@ -1956,104 +1991,110 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { - String path1 = templatePath + "driver/index.html"; - Document document1 = Jsoup.parse(new File(path1), "UTF-8"); - if (1 == language) { - document1.getElementById("english").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite").remove(); - document1.getElementById("user").remove(); - document1.getElementById("settle").remove(); - document1.getElementById("pass").remove(); - document1.getElementById("email").remove(); - document1.getElementById("bill").remove(); - document1.getElementById("reward").remove(); - document1.getElementById("driverAudit").remove(); - document1.getElementById("carAudit").remove(); - - document1.getElementsByTag("title").get(0).text("邀请用户奖励(活动)"); - Element rewardToday_user = document1.getElementById("rewardToday_user"); - rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday_award = document1.getElementById("rewardToday_award"); - rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); - Element rewardToday_content = document1.getElementById("rewardToday_content"); - rewardToday_content.text("邀请用户注册即可获得奖励。\n 注意此活动是有时间限制的,详情请查看I-GO平台。"); - } - if (2 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite1").remove(); - document1.getElementById("user1").remove(); - document1.getElementById("settle1").remove(); - document1.getElementById("pass1").remove(); - document1.getElementById("email1").remove(); - document1.getElementById("bill1").remove(); - document1.getElementById("reward1").remove(); - document1.getElementById("driverAudit1").remove(); - document1.getElementById("carAudit1").remove(); - - document1.getElementsByTag("title").get(0).text("Invite users and earn"); - Element rewardToday1_user = document1.getElementById("rewardToday1_user"); - rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday1_award = document1.getElementById("rewardToday1_award"); - rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); - Element rewardToday1_content = document1.getElementById("rewardToday1_content"); - rewardToday1_content.text("Get a bonus on I-GO today.\nInvite users to register to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); - } - if (3 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("english").remove(); - document1.getElementById("invite2").remove(); - document1.getElementById("user2").remove(); - document1.getElementById("settle2").remove(); - document1.getElementById("pass2").remove(); - document1.getElementById("email2").remove(); - document1.getElementById("bill2").remove(); - document1.getElementById("reward2").remove(); - document1.getElementById("driverAudit2").remove(); - document1.getElementById("carAudit2").remove(); - - document1.getElementsByTag("title").get(0).text("Invitez des utilisateurs et gagnez de l’argent"); - Element rewardToday2_user = document1.getElementById("rewardToday2_user"); - rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday2_award = document1.getElementById("rewardToday2_award"); - rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); - Element rewardToday2_content = document1.getElementById("rewardToday2_content"); - rewardToday2_content.text("Obtenez un bonus sur I-GO dès aujourd’hui.\nInvitez les utilisateurs à s’inscrire pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); - } - EmailUtil.send(driver.getEmail(), language == 1 ? "邀请用户奖励(活动)" : language == 2 ? "Invite users and earn" : "Invitez des utilisateurs et gagnez de l’argent", document1.html()); - String randomString = ToolUtil.getRandomString(10); - //开始生成pdf收据和html收据 - File file = new File("/usr/local/nginx/html/files/html/"); - if(!file.exists()){ - file.mkdirs(); - } - file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); - if(!file.exists()){ - file.createNewFile(); - } - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(document1.html()); - fileWriter.flush(); - fileWriter.close(); - - String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; - TEmail tEmail = new TEmail(); - tEmail.setLink(link); - tEmail.setUserId(driver.getId()); - tEmail.setType(2); - tEmail.setName(language == 1 ? "邀请用户奖励(活动)" : language == 2 ? "Invite users and earn" : "Invitez des utilisateurs et gagnez de l’argent"); - tEmail.setCreateTime(new Date()); - int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; - String week = EmailUtil.getWeek(language, i); - tEmail.setWeek(week); - boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); - if(am){ - tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); - }else { - tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); - } - emailService.insert(tEmail); + new Thread(() -> { + try { + String path1 = templatePath + "driver/index.html"; + Document document1 = Jsoup.parse(new File(path1), "UTF-8"); + if (1 == language) { + document1.getElementById("english").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite").remove(); + document1.getElementById("user").remove(); + document1.getElementById("settle").remove(); + document1.getElementById("pass").remove(); + document1.getElementById("email").remove(); + document1.getElementById("bill").remove(); + document1.getElementById("reward").remove(); + document1.getElementById("driverAudit").remove(); + document1.getElementById("carAudit").remove(); + + document1.getElementsByTag("title").get(0).text("邀请用户奖励(活动)"); + Element rewardToday_user = document1.getElementById("rewardToday_user"); + rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday_award = document1.getElementById("rewardToday_award"); + rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); + Element rewardToday_content = document1.getElementById("rewardToday_content"); + rewardToday_content.text("邀请用户注册即可获得奖励。\n 注意此活动是有时间限制的,详情请查看I-GO平台。"); + } + if (2 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite1").remove(); + document1.getElementById("user1").remove(); + document1.getElementById("settle1").remove(); + document1.getElementById("pass1").remove(); + document1.getElementById("email1").remove(); + document1.getElementById("bill1").remove(); + document1.getElementById("reward1").remove(); + document1.getElementById("driverAudit1").remove(); + document1.getElementById("carAudit1").remove(); + + document1.getElementsByTag("title").get(0).text("Invite users and earn"); + Element rewardToday1_user = document1.getElementById("rewardToday1_user"); + rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday1_award = document1.getElementById("rewardToday1_award"); + rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); + Element rewardToday1_content = document1.getElementById("rewardToday1_content"); + rewardToday1_content.text("Get a bonus on I-GO today.\nInvite users to register to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); + } + if (3 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("english").remove(); + document1.getElementById("invite2").remove(); + document1.getElementById("user2").remove(); + document1.getElementById("settle2").remove(); + document1.getElementById("pass2").remove(); + document1.getElementById("email2").remove(); + document1.getElementById("bill2").remove(); + document1.getElementById("reward2").remove(); + document1.getElementById("driverAudit2").remove(); + document1.getElementById("carAudit2").remove(); + + document1.getElementsByTag("title").get(0).text("Invitez des utilisateurs et gagnez de l’argent"); + Element rewardToday2_user = document1.getElementById("rewardToday2_user"); + rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday2_award = document1.getElementById("rewardToday2_award"); + rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); + Element rewardToday2_content = document1.getElementById("rewardToday2_content"); + rewardToday2_content.text("Obtenez un bonus sur I-GO dès aujourd’hui.\nInvitez les utilisateurs à s’inscrire pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); + } + EmailUtil.send(driver.getEmail(), language == 1 ? "邀请用户奖励(活动)" : language == 2 ? "Invite users and earn" : "Invitez des utilisateurs et gagnez de l’argent", document1.html()); + String randomString = ToolUtil.getRandomString(10); + //开始生成pdf收据和html收据 + File file = new File("/usr/local/nginx/html/files/html/"); + if(!file.exists()){ + file.mkdirs(); + } + file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); + if(!file.exists()){ + file.createNewFile(); + } + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(document1.html()); + fileWriter.flush(); + fileWriter.close(); + + String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; + TEmail tEmail = new TEmail(); + tEmail.setLink(link); + tEmail.setUserId(driver.getId()); + tEmail.setType(2); + tEmail.setName(language == 1 ? "邀请用户奖励(活动)" : language == 2 ? "Invite users and earn" : "Invitez des utilisateurs et gagnez de l’argent"); + tEmail.setCreateTime(new Date()); + int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; + String week = EmailUtil.getWeek(language, i); + tEmail.setWeek(week); + boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); + if(am){ + tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); + }else { + tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); + } + emailService.insert(tEmail); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); } } } @@ -2073,104 +2114,110 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { - String path1 = templatePath + "driver/index.html"; - Document document1 = Jsoup.parse(new File(path1), "UTF-8"); - if (1 == language) { - document1.getElementById("english").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite").remove(); - document1.getElementById("user").remove(); - document1.getElementById("settle").remove(); - document1.getElementById("pass").remove(); - document1.getElementById("email").remove(); - document1.getElementById("bill").remove(); - document1.getElementById("reward").remove(); - document1.getElementById("driverAudit").remove(); - document1.getElementById("carAudit").remove(); - - document1.getElementsByTag("title").get(0).text("在线时长奖励(活动)"); - Element rewardToday_user = document1.getElementById("rewardToday_user"); - rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday_award = document1.getElementById("rewardToday_award"); - rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); - Element rewardToday_content = document1.getElementById("rewardToday_content"); - rewardToday_content.text("今日累计在线" + driverActivityOnline.getOnline() + "小时即可活动奖励。\n 注意此活动是有时间限制的,详情请查看I-GO平台。"); - } - if (2 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite1").remove(); - document1.getElementById("user1").remove(); - document1.getElementById("settle1").remove(); - document1.getElementById("pass1").remove(); - document1.getElementById("email1").remove(); - document1.getElementById("bill1").remove(); - document1.getElementById("reward1").remove(); - document1.getElementById("driverAudit1").remove(); - document1.getElementById("carAudit1").remove(); - - document1.getElementsByTag("title").get(0).text("Online-duration reward activity"); - Element rewardToday1_user = document1.getElementById("rewardToday1_user"); - rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday1_award = document1.getElementById("rewardToday1_award"); - rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); - Element rewardToday1_content = document1.getElementById("rewardToday1_content"); - rewardToday1_content.text("Get a bonus for driving on I-GO today.\nStay online for " + driverActivityOnline.getOnline() + " hours to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); - } - if (3 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("english").remove(); - document1.getElementById("invite2").remove(); - document1.getElementById("user2").remove(); - document1.getElementById("settle2").remove(); - document1.getElementById("pass2").remove(); - document1.getElementById("email2").remove(); - document1.getElementById("bill2").remove(); - document1.getElementById("reward2").remove(); - document1.getElementById("driverAudit2").remove(); - document1.getElementById("carAudit2").remove(); - - document1.getElementsByTag("title").get(0).text("Activité de récompense en ligne"); - Element rewardToday2_user = document1.getElementById("rewardToday2_user"); - rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday2_award = document1.getElementById("rewardToday2_award"); - rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); - Element rewardToday2_content = document1.getElementById("rewardToday2_content"); - rewardToday2_content.text("Obtenez un bonus pour conduire sur I-GO dès aujourd’hui.\nRestez en ligne pendant " + driverActivityOnline.getOnline() + " heures pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); - } - EmailUtil.send(driver.getEmail(), language == 1 ? "在线时长奖励(活动)" : language == 2 ? "Online-duration reward activity" : "Activité de récompense en ligne", document1.html()); - String randomString = ToolUtil.getRandomString(10); - //开始生成pdf收据和html收据 - File file = new File("/usr/local/nginx/html/files/html/"); - if(!file.exists()){ - file.mkdirs(); - } - file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); - if(!file.exists()){ - file.createNewFile(); - } - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(document1.html()); - fileWriter.flush(); - fileWriter.close(); - - String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; - TEmail tEmail = new TEmail(); - tEmail.setLink(link); - tEmail.setUserId(driver.getId()); - tEmail.setType(2); - tEmail.setName(language == 1 ? "在线时长奖励(活动)" : language == 2 ? "Online-duration reward activity" : "Activité de récompense en ligne"); - tEmail.setCreateTime(new Date()); - int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; - String week = EmailUtil.getWeek(language, i); - tEmail.setWeek(week); - boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); - if(am){ - tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); - }else { - tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); - } - emailService.insert(tEmail); + new Thread(() -> { + try { + String path1 = templatePath + "driver/index.html"; + Document document1 = Jsoup.parse(new File(path1), "UTF-8"); + if (1 == language) { + document1.getElementById("english").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite").remove(); + document1.getElementById("user").remove(); + document1.getElementById("settle").remove(); + document1.getElementById("pass").remove(); + document1.getElementById("email").remove(); + document1.getElementById("bill").remove(); + document1.getElementById("reward").remove(); + document1.getElementById("driverAudit").remove(); + document1.getElementById("carAudit").remove(); + + document1.getElementsByTag("title").get(0).text("在线时长奖励(活动)"); + Element rewardToday_user = document1.getElementById("rewardToday_user"); + rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday_award = document1.getElementById("rewardToday_award"); + rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); + Element rewardToday_content = document1.getElementById("rewardToday_content"); + rewardToday_content.text("今日累计在线" + driverActivityOnline.getOnline() + "小时即可活动奖励。\n 注意此活动是有时间限制的,详情请查看I-GO平台。"); + } + if (2 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite1").remove(); + document1.getElementById("user1").remove(); + document1.getElementById("settle1").remove(); + document1.getElementById("pass1").remove(); + document1.getElementById("email1").remove(); + document1.getElementById("bill1").remove(); + document1.getElementById("reward1").remove(); + document1.getElementById("driverAudit1").remove(); + document1.getElementById("carAudit1").remove(); + + document1.getElementsByTag("title").get(0).text("Online-duration reward activity"); + Element rewardToday1_user = document1.getElementById("rewardToday1_user"); + rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday1_award = document1.getElementById("rewardToday1_award"); + rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); + Element rewardToday1_content = document1.getElementById("rewardToday1_content"); + rewardToday1_content.text("Get a bonus for driving on I-GO today.\nStay online for " + driverActivityOnline.getOnline() + " hours to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); + } + if (3 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("english").remove(); + document1.getElementById("invite2").remove(); + document1.getElementById("user2").remove(); + document1.getElementById("settle2").remove(); + document1.getElementById("pass2").remove(); + document1.getElementById("email2").remove(); + document1.getElementById("bill2").remove(); + document1.getElementById("reward2").remove(); + document1.getElementById("driverAudit2").remove(); + document1.getElementById("carAudit2").remove(); + + document1.getElementsByTag("title").get(0).text("Activité de récompense en ligne"); + Element rewardToday2_user = document1.getElementById("rewardToday2_user"); + rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday2_award = document1.getElementById("rewardToday2_award"); + rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); + Element rewardToday2_content = document1.getElementById("rewardToday2_content"); + rewardToday2_content.text("Obtenez un bonus pour conduire sur I-GO dès aujourd’hui.\nRestez en ligne pendant " + driverActivityOnline.getOnline() + " heures pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); + } + EmailUtil.send(driver.getEmail(), language == 1 ? "在线时长奖励(活动)" : language == 2 ? "Online-duration reward activity" : "Activité de récompense en ligne", document1.html()); + String randomString = ToolUtil.getRandomString(10); + //开始生成pdf收据和html收据 + File file = new File("/usr/local/nginx/html/files/html/"); + if(!file.exists()){ + file.mkdirs(); + } + file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); + if(!file.exists()){ + file.createNewFile(); + } + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(document1.html()); + fileWriter.flush(); + fileWriter.close(); + + String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; + TEmail tEmail = new TEmail(); + tEmail.setLink(link); + tEmail.setUserId(driver.getId()); + tEmail.setType(2); + tEmail.setName(language == 1 ? "在线时长奖励(活动)" : language == 2 ? "Online-duration reward activity" : "Activité de récompense en ligne"); + tEmail.setCreateTime(new Date()); + int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; + String week = EmailUtil.getWeek(language, i); + tEmail.setWeek(week); + boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); + if(am){ + tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); + }else { + tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); + } + emailService.insert(tEmail); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); } } } @@ -2190,104 +2237,110 @@ driverActivityHistoryMapper.insert(driverActivityHistory); if(ToolUtil.isNotEmpty(driver.getEmail())) { - String path1 = templatePath + "driver/index.html"; - Document document1 = Jsoup.parse(new File(path1), "UTF-8"); - if (1 == language) { - document1.getElementById("english").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite").remove(); - document1.getElementById("user").remove(); - document1.getElementById("settle").remove(); - document1.getElementById("pass").remove(); - document1.getElementById("email").remove(); - document1.getElementById("bill").remove(); - document1.getElementById("reward").remove(); - document1.getElementById("driverAudit").remove(); - document1.getElementById("carAudit").remove(); - - document1.getElementsByTag("title").get(0).text("累计接单奖励(活动)"); - Element rewardToday_user = document1.getElementById("rewardToday_user"); - rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday_award = document1.getElementById("rewardToday_award"); - rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); - Element rewardToday_content = document1.getElementById("rewardToday_content"); - rewardToday_content.text("今日累计完成" + driverActivityOrder.getOrderNum() + "单即可活动奖励。\n 注意此活动是有时间限制的,详情请查看I-GO平台。"); - } - if (2 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite1").remove(); - document1.getElementById("user1").remove(); - document1.getElementById("settle1").remove(); - document1.getElementById("pass1").remove(); - document1.getElementById("email1").remove(); - document1.getElementById("bill1").remove(); - document1.getElementById("reward1").remove(); - document1.getElementById("driverAudit1").remove(); - document1.getElementById("carAudit1").remove(); - - document1.getElementsByTag("title").get(0).text("Cumulative order activity"); - Element rewardToday1_user = document1.getElementById("rewardToday1_user"); - rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday1_award = document1.getElementById("rewardToday1_award"); - rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); - Element rewardToday1_content = document1.getElementById("rewardToday1_content"); - rewardToday1_content.text("Get a bonus for driving on I-GO today.\nStay online and complete " + driverActivityOrder.getOrderNum() + " trips to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); - } - if (3 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("english").remove(); - document1.getElementById("invite2").remove(); - document1.getElementById("user2").remove(); - document1.getElementById("settle2").remove(); - document1.getElementById("pass2").remove(); - document1.getElementById("email2").remove(); - document1.getElementById("bill2").remove(); - document1.getElementById("reward2").remove(); - document1.getElementById("driverAudit2").remove(); - document1.getElementById("carAudit2").remove(); - - document1.getElementsByTag("title").get(0).text("Activité cumulée des commandes"); - Element rewardToday2_user = document1.getElementById("rewardToday2_user"); - rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element rewardToday2_award = document1.getElementById("rewardToday2_award"); - rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); - Element rewardToday2_content = document1.getElementById("rewardToday2_content"); - rewardToday2_content.text("Obtenez un bonus pour conduire sur I-GO dès aujourd’hui.\nRestez en ligne et effectuez " + driverActivityOrder.getOrderNum() + " trajets pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); - } - EmailUtil.send(driver.getEmail(), language == 1 ? "累计接单奖励(活动)" : language == 2 ? "Cumulative order activity" : "Activité cumulée des commandes", document1.html()); - String randomString = ToolUtil.getRandomString(10); - //开始生成pdf收据和html收据 - File file = new File("/usr/local/nginx/html/files/html/"); - if(!file.exists()){ - file.mkdirs(); - } - file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); - if(!file.exists()){ - file.createNewFile(); - } - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(document1.html()); - fileWriter.flush(); - fileWriter.close(); - - String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; - TEmail tEmail = new TEmail(); - tEmail.setLink(link); - tEmail.setUserId(driver.getId()); - tEmail.setType(2); - tEmail.setName(language == 1 ? "累计接单奖励(活动)" : language == 2 ? "Cumulative order activity" : "Activité cumulée des commandes"); - tEmail.setCreateTime(new Date()); - int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; - String week = EmailUtil.getWeek(language, i); - tEmail.setWeek(week); - boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); - if(am){ - tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); - }else { - tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); - } - emailService.insert(tEmail); + new Thread(() -> { + try { + String path1 = templatePath + "driver/index.html"; + Document document1 = Jsoup.parse(new File(path1), "UTF-8"); + if (1 == language) { + document1.getElementById("english").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite").remove(); + document1.getElementById("user").remove(); + document1.getElementById("settle").remove(); + document1.getElementById("pass").remove(); + document1.getElementById("email").remove(); + document1.getElementById("bill").remove(); + document1.getElementById("reward").remove(); + document1.getElementById("driverAudit").remove(); + document1.getElementById("carAudit").remove(); + + document1.getElementsByTag("title").get(0).text("累计接单奖励(活动)"); + Element rewardToday_user = document1.getElementById("rewardToday_user"); + rewardToday_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday_award = document1.getElementById("rewardToday_award"); + rewardToday_award.text("奖金 GHS" + driverActivityHistory.getMoney()); + Element rewardToday_content = document1.getElementById("rewardToday_content"); + rewardToday_content.text("今日累计完成" + driverActivityOrder.getOrderNum() + "单即可活动奖励。\n 注意此活动是有时间限制的,详情请查看I-GO平台。"); + } + if (2 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite1").remove(); + document1.getElementById("user1").remove(); + document1.getElementById("settle1").remove(); + document1.getElementById("pass1").remove(); + document1.getElementById("email1").remove(); + document1.getElementById("bill1").remove(); + document1.getElementById("reward1").remove(); + document1.getElementById("driverAudit1").remove(); + document1.getElementById("carAudit1").remove(); + + document1.getElementsByTag("title").get(0).text("Cumulative order activity"); + Element rewardToday1_user = document1.getElementById("rewardToday1_user"); + rewardToday1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday1_award = document1.getElementById("rewardToday1_award"); + rewardToday1_award.text("GHS " + driverActivityHistory.getMoney() + " BONUS"); + Element rewardToday1_content = document1.getElementById("rewardToday1_content"); + rewardToday1_content.text("Get a bonus for driving on I-GO today.\nStay online and complete " + driverActivityOrder.getOrderNum() + " trips to get the bonus.\nNote that this is a limited-time offer. Check your app for more details."); + } + if (3 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("english").remove(); + document1.getElementById("invite2").remove(); + document1.getElementById("user2").remove(); + document1.getElementById("settle2").remove(); + document1.getElementById("pass2").remove(); + document1.getElementById("email2").remove(); + document1.getElementById("bill2").remove(); + document1.getElementById("reward2").remove(); + document1.getElementById("driverAudit2").remove(); + document1.getElementById("carAudit2").remove(); + + document1.getElementsByTag("title").get(0).text("Activité cumulée des commandes"); + Element rewardToday2_user = document1.getElementById("rewardToday2_user"); + rewardToday2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element rewardToday2_award = document1.getElementById("rewardToday2_award"); + rewardToday2_award.text("Bonus GHS " + driverActivityHistory.getMoney()); + Element rewardToday2_content = document1.getElementById("rewardToday2_content"); + rewardToday2_content.text("Obtenez un bonus pour conduire sur I-GO dès aujourd’hui.\nRestez en ligne et effectuez " + driverActivityOrder.getOrderNum() + " trajets pour obtenir le bonus.\nNotez qu’il s’agit d’une offre d’une durée limitée. Consultez votre application pour plus de détails."); + } + EmailUtil.send(driver.getEmail(), language == 1 ? "累计接单奖励(活动)" : language == 2 ? "Cumulative order activity" : "Activité cumulée des commandes", document1.html()); + String randomString = ToolUtil.getRandomString(10); + //开始生成pdf收据和html收据 + File file = new File("/usr/local/nginx/html/files/html/"); + if(!file.exists()){ + file.mkdirs(); + } + file = new File("/usr/local/nginx/html/files/html/activity_" + randomString + ".html"); + if(!file.exists()){ + file.createNewFile(); + } + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(document1.html()); + fileWriter.flush(); + fileWriter.close(); + + String link ="http://182.160.16.251:81/files/html/activity_" + randomString + ".html"; + TEmail tEmail = new TEmail(); + tEmail.setLink(link); + tEmail.setUserId(driver.getId()); + tEmail.setType(2); + tEmail.setName(language == 1 ? "累计接单奖励(活动)" : language == 2 ? "Cumulative order activity" : "Activité cumulée des commandes"); + tEmail.setCreateTime(new Date()); + int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; + String week = EmailUtil.getWeek(language, i); + tEmail.setWeek(week); + boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); + if(am){ + tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); + }else { + tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); + } + emailService.insert(tEmail); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); } } } @@ -2302,7 +2355,6 @@ @Override public void taskMinute() throws Exception { Map<String, Date> date = dateUtil.getStartAndEndDate(new Date()); - Integer language = 2; //在线时长 List<DriverActivityHistory> list = driverActivityHistoryMapper.queryList(null, 3, 1, date.get("startTime"), date.get("endTime")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @@ -2311,120 +2363,121 @@ if(null == dao){ continue; } - Long duration = Long.valueOf(dao.getOnline() * 3600); - List<DriverOnline> driverOnlines = driverOnlineMapper.queryList(sdf.format(new Date()), dao.getType(), duration); - for (DriverOnline driverOnline : driverOnlines) { - if(dah.getDriverId().compareTo(driverOnline.getDriverId()) == 0){ - dah.setCarryOut(2);//完成状态 - driverActivityHistoryMapper.updateById(dah); - //修改余额 - Driver driver = this.selectById(dah.getDriverId()); - driver.setActivityMoney(new BigDecimal(null != driver.getActivityMoney() ? driver.getActivityMoney() : 0) - .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveActivityMoney(new BigDecimal(null != driver.getLaveActivityMoney() ? driver.getLaveActivityMoney() : 0) - .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0) - .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - this.updateById(driver); - - //添加收入记录 - incomeService.saveData(2, driverOnline.getDriverId(), 1, dah.getId(), null, dah.getMoney()); - - - if(ToolUtil.isNotEmpty(driver.getEmail())) { - String path1 = templatePath + "driver/index.html"; - Document document1 = Jsoup.parse(new File(path1), "UTF-8"); - if (1 == language) { - document1.getElementById("english").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite").remove(); - document1.getElementById("user").remove(); - document1.getElementById("settle").remove(); - document1.getElementById("pass").remove(); - document1.getElementById("email").remove(); - document1.getElementById("bill").remove(); - document1.getElementById("rewardToday").remove(); - document1.getElementById("driverAudit").remove(); - document1.getElementById("carAudit").remove(); - - document1.getElementsByTag("title").get(0).text("司机奖励通知"); - Element reward_user = document1.getElementById("reward_user"); - reward_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element reward_content = document1.getElementById("reward_content"); - reward_content.text("今日累计在线" + dao.getOnline() + "小时,获得奖励GHS" + dah.getMoney() + ",请查收。\n详情请查看I-GO平台。"); - } - if (2 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("french").remove(); - document1.getElementById("invite1").remove(); - document1.getElementById("user1").remove(); - document1.getElementById("settle1").remove(); - document1.getElementById("pass1").remove(); - document1.getElementById("email1").remove(); - document1.getElementById("bill1").remove(); - document1.getElementById("rewardToday1").remove(); - document1.getElementById("driverAudit1").remove(); - document1.getElementById("carAudit1").remove(); - - document1.getElementsByTag("title").get(0).text("Reward-driver notice"); - Element reward1_user = document1.getElementById("reward1_user"); - reward1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element reward1_content = document1.getElementById("reward1_content"); - reward1_content.text("You stayed online for " + dao.getOnline() + " hours today, and got a bonus of GHS" + dah.getMoney() + ", please check.\nCheck your app for more details."); - } - if (3 == language) { - document1.getElementById("chinese").remove(); - document1.getElementById("english").remove(); - document1.getElementById("invite2").remove(); - document1.getElementById("user2").remove(); - document1.getElementById("settle2").remove(); - document1.getElementById("pass2").remove(); - document1.getElementById("email2").remove(); - document1.getElementById("bill2").remove(); - document1.getElementById("rewardToday2").remove(); - document1.getElementById("driverAudit2").remove(); - document1.getElementById("carAudit2").remove(); - - document1.getElementsByTag("title").get(0).text("Avis de chauffeur de récompense"); - Element reward2_user = document1.getElementById("reward2_user"); - reward2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); - Element reward2_content = document1.getElementById("reward2_content"); - reward2_content.text("Vous êtes resté en ligne pendant " + dao.getOnline() + " heures aujourd’hui et avez obtenu un bonus de GHS" + dah.getMoney() + ", veuillez vérifier.\nConsultez votre application pour plus de détails."); - } - EmailUtil.send(driver.getEmail(), language == 1 ? "司机奖励通知" : language == 2 ? "Reward-driver notice" : "Avis de chauffeur de récompense", document1.html()); - String randomString = ToolUtil.getRandomString(10); - //开始生成pdf收据和html收据 - File file = new File("/usr/local/nginx/html/files/html/"); - if(!file.exists()){ - file.mkdirs(); - } - file = new File("/usr/local/nginx/html/files/html/rewards_" + randomString + ".html"); - if(!file.exists()){ - file.createNewFile(); - } - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(document1.html()); - fileWriter.flush(); - fileWriter.close(); - - String link ="http://182.160.16.251:81/files/html/rewards_" + randomString + ".html"; - TEmail tEmail = new TEmail(); - tEmail.setLink(link); - tEmail.setUserId(driver.getId()); - tEmail.setType(2); - tEmail.setName(language == 1 ? "司机奖励通知" : language == 2 ? "Reward-driver notice" : "Avis de chauffeur de récompense"); - tEmail.setCreateTime(new Date()); - int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; - String week = EmailUtil.getWeek(language, i); - tEmail.setWeek(week); - boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); - if(am){ - tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); - }else { - tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); - } - emailService.insert(tEmail); + Long duration = Double.valueOf(dao.getOnline() * 3600).longValue(); + List<DriverOnline> driverOnlines = driverOnlineMapper.queryList(sdf.format(new Date()), null, dah.getDriverId(), duration); + if(driverOnlines.size() > 0){ + dah.setCarryOut(2);//完成状态 + driverActivityHistoryMapper.updateById(dah); + + redisUtil.remove("driverActivity_" + dah.getDriverId() + "_" + dah.getId()); + + //修改余额 + Driver driver = this.selectById(dah.getDriverId()); + driver.setActivityMoney(new BigDecimal(null != driver.getActivityMoney() ? driver.getActivityMoney() : 0) + .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveActivityMoney(new BigDecimal(null != driver.getLaveActivityMoney() ? driver.getLaveActivityMoney() : 0) + .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0) + .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + this.updateById(driver); + + //添加收入记录 + incomeService.saveData(2, dah.getDriverId(), 1, dah.getId(), null, dah.getMoney()); + + Integer language = driver.getLanguage(); + if(ToolUtil.isNotEmpty(driver.getEmail())) { + String path1 = templatePath + "driver/index.html"; + Document document1 = Jsoup.parse(new File(path1), "UTF-8"); + if (1 == language) { + document1.getElementById("english").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite").remove(); + document1.getElementById("user").remove(); + document1.getElementById("settle").remove(); + document1.getElementById("pass").remove(); + document1.getElementById("email").remove(); + document1.getElementById("bill").remove(); + document1.getElementById("rewardToday").remove(); + document1.getElementById("driverAudit").remove(); + document1.getElementById("carAudit").remove(); + + document1.getElementsByTag("title").get(0).text("司机奖励通知"); + Element reward_user = document1.getElementById("reward_user"); + reward_user.text("您好 " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element reward_content = document1.getElementById("reward_content"); + reward_content.text("今日累计在线" + dao.getOnline() + "小时,获得奖励GHS" + dah.getMoney() + ",请查收。\n详情请查看I-GO平台。"); } + if (2 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("french").remove(); + document1.getElementById("invite1").remove(); + document1.getElementById("user1").remove(); + document1.getElementById("settle1").remove(); + document1.getElementById("pass1").remove(); + document1.getElementById("email1").remove(); + document1.getElementById("bill1").remove(); + document1.getElementById("rewardToday1").remove(); + document1.getElementById("driverAudit1").remove(); + document1.getElementById("carAudit1").remove(); + + document1.getElementsByTag("title").get(0).text("Reward-driver notice"); + Element reward1_user = document1.getElementById("reward1_user"); + reward1_user.text("Hello " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element reward1_content = document1.getElementById("reward1_content"); + reward1_content.text("You stayed online for " + dao.getOnline() + " hours today, and got a bonus of GHS" + dah.getMoney() + ", please check.\nCheck your app for more details."); + } + if (3 == language) { + document1.getElementById("chinese").remove(); + document1.getElementById("english").remove(); + document1.getElementById("invite2").remove(); + document1.getElementById("user2").remove(); + document1.getElementById("settle2").remove(); + document1.getElementById("pass2").remove(); + document1.getElementById("email2").remove(); + document1.getElementById("bill2").remove(); + document1.getElementById("rewardToday2").remove(); + document1.getElementById("driverAudit2").remove(); + document1.getElementById("carAudit2").remove(); + + document1.getElementsByTag("title").get(0).text("Avis de chauffeur de récompense"); + Element reward2_user = document1.getElementById("reward2_user"); + reward2_user.text("Cher(ère) " + driver.getFirstName() + "" + driver.getLastName() + ","); + Element reward2_content = document1.getElementById("reward2_content"); + reward2_content.text("Vous êtes resté en ligne pendant " + dao.getOnline() + " heures aujourd’hui et avez obtenu un bonus de GHS" + dah.getMoney() + ", veuillez vérifier.\nConsultez votre application pour plus de détails."); + } + EmailUtil.send(driver.getEmail(), language == 1 ? "司机奖励通知" : language == 2 ? "Reward-driver notice" : "Avis de chauffeur de récompense", document1.html()); + String randomString = ToolUtil.getRandomString(10); + //开始生成pdf收据和html收据 + File file = new File("/usr/local/nginx/html/files/html/"); + if(!file.exists()){ + file.mkdirs(); + } + file = new File("/usr/local/nginx/html/files/html/rewards_" + randomString + ".html"); + if(!file.exists()){ + file.createNewFile(); + } + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(document1.html()); + fileWriter.flush(); + fileWriter.close(); + + String link ="http://182.160.16.251:81/files/html/rewards_" + randomString + ".html"; + TEmail tEmail = new TEmail(); + tEmail.setLink(link); + tEmail.setUserId(driver.getId()); + tEmail.setType(2); + tEmail.setName(language == 1 ? "司机奖励通知" : language == 2 ? "Reward-driver notice" : "Avis de chauffeur de récompense"); + tEmail.setCreateTime(new Date()); + int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; + String week = EmailUtil.getWeek(language, i); + tEmail.setWeek(week); + boolean am = cn.hutool.core.date.DateUtil.isAM(new Date()); + if(am){ + tEmail.setAmOrPm(language==1?"上午":language==2?"morning":"matin"); + }else { + tEmail.setAmOrPm(language==1?"下午":language==2?"afternoon":"après-midi"); + } + emailService.insert(tEmail); } } } @@ -2449,7 +2502,8 @@ //添加收入记录 incomeService.saveData(2, dah.getDriverId(), 1, dah.getId(), null, dah.getMoney()); - + + Integer language = driver.getLanguage(); if(ToolUtil.isNotEmpty(driver.getEmail())) { String path1 = templatePath + "driver/index.html"; Document document1 = Jsoup.parse(new File(path1), "UTF-8"); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java index 6319cf5..3449240 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java @@ -1,5 +1,7 @@ package com.stylefeng.guns.modular.system.service.impl; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.CharsetUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.service.impl.ServiceImpl; @@ -53,14 +55,10 @@ file.createNewFile(); } //写入相应的文件 - PrintWriter out = new PrintWriter(new FileWriter(file)); orderPositions.add(orderPosition); System.err.println("存储新数据:" + JSON.toJSONString(orderPositions)); - out.write(JSON.toJSONString(orderPositions)); - out.flush(); - out.close(); + FileUtil.writeUtf8String(JSON.toJSONString(orderPositions), file); } - } @@ -93,18 +91,11 @@ return new ArrayList<>(); } //读取文件(字符流) - BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); - //循环取出数据 - String str = null; - StringBuffer sb = new StringBuffer(); - while ((str = in.readLine()) != null) { - sb.append(str); - } + String s = FileUtil.readString(file, CharsetUtil.CHARSET_UTF_8); List<OrderPosition> list = new ArrayList<>(); - if(ToolUtil.isNotEmpty(sb.toString())){ - list = JSONArray.parseArray(sb.toString(), OrderPosition.class); + if(ToolUtil.isNotEmpty(s)){ + list = JSONArray.parseArray(s, OrderPosition.class); } - System.err.println("坐标:" + sb); return list; } } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java index d63347f..838c5be 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java @@ -133,7 +133,7 @@ // List<Map<String, Object>> list2 = orderCrossCityService.queryOrderList(state, uid); // datas.addAll(list2); //小件物流 - List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(uid, language); + List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(state, uid, language); datas.addAll(list3); //分页 @@ -173,7 +173,7 @@ List<Map<String, Object>> list2 = orderCrossCityService.queryOrderList(language, state, uid); datas.addAll(list2); }else{//小件物流 - List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(uid, language); + List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(state, uid, language); datas.addAll(list3); } @@ -211,11 +211,11 @@ List<Map<String, Object>> list1 = orderPrivateCarService.queryMyAllOrder(state, uid, language); for (Map<String, Object> map : list1) { Integer id = Integer.valueOf(map.get("id").toString()); - map.put("settleAccounts", 1); + map.put("settleAccounts", 0); SettlementDetail settlementDetail = settlementDetailService.selectOne(new EntityWrapper<SettlementDetail>().eq("orderId", id).eq("orderType", 1)); if(null != settlementDetail){ SettlementRecord settlementRecord = settlementRecordService.selectById(settlementDetail.getSettlementRecordId()); - map.put("settleAccounts", settlementRecord.getPaymentStatus() == 1 ? 0 : 1); + map.put("settleAccounts", null == settlementRecord || settlementRecord.getPaymentStatus() == 1 ? 0 : 1); } } datas.addAll(list1); @@ -226,11 +226,11 @@ List<Map<String, Object>> list3 = orderLogisticsService.queryMyAllOrder(state, uid, language); for (Map<String, Object> map : list3) { Integer id = Integer.valueOf(map.get("id").toString()); - map.put("settleAccounts", 1); + map.put("settleAccounts", 0); SettlementDetail settlementDetail = settlementDetailService.selectOne(new EntityWrapper<SettlementDetail>().eq("orderId", id).eq("orderType", 4)); if(null != settlementDetail){ SettlementRecord settlementRecord = settlementRecordService.selectById(settlementDetail.getSettlementRecordId()); - map.put("settleAccounts", settlementRecord.getPaymentStatus() == 1 ? 0 : 1); + map.put("settleAccounts", null == settlementRecord || settlementRecord.getPaymentStatus() == 1 ? 0 : 1); } } datas.addAll(list3); @@ -527,7 +527,19 @@ } CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", companyId)); JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); - map.put("timeOutCancel", jsonObject.getIntValue("driverTimeout")); + int driverTimeout = jsonObject.getIntValue("driverTimeout"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Integer type = Integer.valueOf(map.get("orderType").toString()); + if(type == 2){ + String travelTime = map.get("travelTime").toString(); + long time = System.currentTimeMillis() - sdf.parse(travelTime).getTime() - (driverTimeout * 60000); + map.put("timeOutCancel", Double.valueOf(time / 60000).intValue()); + }else{ + String estimateArriveTime = map.get("estimateArriveTime").toString(); + long time = System.currentTimeMillis() - sdf.parse(estimateArriveTime).getTime() - (driverTimeout * 60000); + map.put("timeOutCancel", Double.valueOf(time / 60000).intValue()); + } return map; } @@ -735,7 +747,7 @@ case 3://城际 return orderCrossCityService.calculateMileage(orderPosition); case 4:// - break; + return orderLogisticsService.calculateMileage(orderPosition.getOrderId(), orderPosition.getLon(), orderPosition.getLat()); case 5: break; case 6: diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java index dc8cfd9..7d4bfa7 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java @@ -22,6 +22,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; @@ -156,9 +157,10 @@ Double laveActivityMoney = driver1.getLaveActivityMoney(); Double laveBusinessMoney = driver1.getLaveBusinessMoney(); - if(laveActivityMoney.compareTo(payMoney) < 0){ + //活动余额小于结算金额 + if(null != laveActivityMoney && 0 < laveActivityMoney && laveActivityMoney.compareTo(payMoney) < 0){ driver1.setLaveActivityMoney(0D); - BigDecimal m = new BigDecimal(payMoney).subtract(new BigDecimal(laveActivityMoney)); + BigDecimal m = new BigDecimal(payMoney).subtract(new BigDecimal(laveActivityMoney)).setScale(2, RoundingMode.HALF_EVEN); driver1.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(m).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); settlementRecord.setPayMoney(laveActivityMoney); settlementRecord.setPaymentStatus(2); @@ -175,8 +177,9 @@ settlementRecord1.setPayMoney(m.doubleValue()); settlementRecord1.setBalanceType(2); this.insert(settlementRecord1); - - }else{ + } + //活动余额大于结算金额 + if(null != laveActivityMoney && 0 < laveActivityMoney && laveActivityMoney.compareTo(payMoney) >= 0){ driver1.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); settlementRecord.setPaymentStatus(2); settlementRecord.setPayType(payType); @@ -185,6 +188,17 @@ this.updateById(settlementRecord); balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 1, payMoney, settlementRecord.getType() + 2); } + if(null == laveActivityMoney || 0 == laveActivityMoney){ + driver1.setLaveActivityMoney(0D); + driver1.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + settlementRecord.setPaymentStatus(2); + settlementRecord.setPayType(payType); + settlementRecord.setBalanceType(1); + settlementRecord.setPayTime(new Date()); + this.updateById(settlementRecord); + balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, payMoney, settlementRecord.getType() + 2); + } + driver1.setBalance(new BigDecimal(driver1.getBalance()).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); //添加交易明细 @@ -205,6 +219,7 @@ public List<QueryHistoricalSettlement> queryHistoricalSettlement(Integer language, Integer driverId, Integer pageNum, Integer size) { pageNum = (pageNum - 1) * size; List<Map<String, Object>> list = this.baseMapper.queryHistoricalSettlement(driverId, pageNum, size); + Double aDouble = this.baseMapper.queryHistoricalSettlementTotal(driverId); List<QueryHistoricalSettlement> datas = new ArrayList<>(); for (Map<String, Object> map : list) { QueryHistoricalSettlement queryHistoricalSettlement = new QueryHistoricalSettlement(); @@ -231,6 +246,7 @@ break; } } + queryHistoricalSettlement.setTotalPrice(aDouble); datas.add(queryHistoricalSettlement); } return datas; @@ -261,11 +277,11 @@ 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){//周结算 + List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); for (Map<String, Object> map : list) { Integer driverId = Integer.valueOf(map.get("driverId").toString()); Double price = Double.valueOf(map.get("price").toString()); @@ -289,6 +305,7 @@ } } if(type == 3 && d == day){//月结算 + List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); for (Map<String, Object> map : list) { Integer driverId = Integer.valueOf(map.get("driverId").toString()); Double price = Double.valueOf(map.get("price").toString()); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysOvertimeServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysOvertimeServiceImpl.java new file mode 100644 index 0000000..3cc3123 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SysOvertimeServiceImpl.java @@ -0,0 +1,15 @@ +package com.stylefeng.guns.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.stylefeng.guns.modular.system.dao.SysOvertimeMapper; +import com.stylefeng.guns.modular.system.model.SysOvertime; +import com.stylefeng.guns.modular.system.service.ISysOvertimeService; +import org.springframework.stereotype.Service; + +/** + * @author zhibing.pu + * @Date 2024/7/17 10:18 + */ +@Service +public class SysOvertimeServiceImpl extends ServiceImpl<SysOvertimeMapper, SysOvertime> implements ISysOvertimeService { +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java index a2e6cc0..f3dba7d 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java @@ -47,7 +47,7 @@ * @throws Exception */ @Override - public ResultUtil withdrawal(Double money, Integer uid, Integer type, String remark, Integer language) throws Exception { + public synchronized ResultUtil withdrawal(Double money, Integer uid, Integer type, String remark, Integer language) throws Exception { if(money.compareTo(0D) <= 0){ return ResultUtil.error(language == 1 ? "提现金额必须大于0" : language == 2 ? "Withdrawal amount must be greater than zero." : "Le montant du retrait doit être supérieur à zéro."); } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java index 4be7b9f..c1fbf66 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java @@ -12,6 +12,7 @@ import com.google.fleetengine.auth.token.VehicleClaims; import com.google.fleetengine.auth.token.factory.signer.*; import com.stylefeng.guns.modular.system.util.RedisUtil; +import com.stylefeng.guns.modular.system.util.UUIDUtil; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,13 +34,27 @@ static Logger logger = LoggerFactory.getLogger(FleetEngineUtil.class); - private final String SERVICE_ACCOUNT = "odrd2024@i-go-odrd-testing.iam.gserviceaccount.com"; + private final String SERVICE_ACCOUNT = "odrd-fleetengine-ondemandadmin@i-go-odrd-testing.iam.gserviceaccount.com"; - private final String privateKeyId = "0a9a480fafb6469c0c1b2fa6dbdf6d4bebe1ebed"; + private final String DRIVER_ACCOUNT = "odrd-fleetengine-driversdkuser@i-go-odrd-testing.iam.gserviceaccount.com"; - private final String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDXZoPEFZeZb0C7DXzpPsloB+rQVQAJuR+z4T9uRCz33gBsIqrz1s5Iwd8vXYKKWzukMdXkwqR4WapI/4GtcpbJkRK93mKXvEE3sDz27BnRrZL4gHeECVpFy0egw29sqFM/x/cpst0goqq4/f3ZFGtQGIhSEEHMySQgTbZDIhXMIls1etRsM4K2bTXeMPn89ablPBdbKtTAJy1EI+ZLKbxnl9StyqBam+d+UsfVmNG19MsNbSzCKc+QPnPXb7dj9KxJ/2whog8w15qXQdJHAMeHZyNlqE0zVP7G1VdWo6Q4QtzmENANxBpJIEbAqY2sq3BZSqDd5XS9Dr9BR4XzQqQnAgMBAAECggEABFABAj4eph1vxVYRBH2TpvDGFU3uW7VBPjwp7JzntLAN8eNoPlqmEDP16y6D/HMmfftpAI3TvWA3+ZEPkiX6nVDyW6sGCodyP0QuJEob1HKHFYntzGtHhGg1KCOacLey6TYbJJmUtcsduQXGkocOPaLXNvjzr2mY2zthTDzJ6HzjDo3d2x/O+lUVlNjubTFydgU9bQP8zS389GgZkO/YebK9+qPRBXv1R2fmj0rhpLqC03jL/mUMKi5tW628OiJGdvzLXlAGyJ9CtVDjfrwUgLf8ML+3yfdmv7yFeWuJ2NEgQxKACixHM05qkCW2bOkPIi9+wb1BbVvMdYL+GCPvmQKBgQD/DZ8zpWfNAkl8h8NI0E7sPdN6wgGfPpaC8VpOE3EM2eEijkZZT6XjfxXjMv1vXg1UoeYVscPb99Ux6u2gq+ZJj6+IstNIObXgvrqNxKPw6OO2xCb6UmA4rQ74xe4d1KLN+C1zepgFYgU4ejungWzuPVL7x8xjdyBAvqgPqP1IbQKBgQDYMzXs2QcWr9tVwq1O3D/H6qX2DvelAj7j0vuXGtop1/aJW7bPlGJd9NGim8dnXLVSFyRteuVl4epa/C9h50g3FM/lFMl9lmp1HwpDeiSJYAGRH8cnPJjN/IV3cRl5qN8KUQE2a3BRP+6IPHJiF1Bc1vj08nTMsWmN+K6VcAzqYwKBgGGJ7RNMM0kkkcPtC5LCDxyrfD/bB9HFlrvW3ykyqC44+K9FZ8PqAM/inxU3P9KiTkjKbXpodDWgLskbResHMld5erC1arWZVGPxrNhgli2gcs1HcHyUmjWygSJEV47S7bwFKCScgpy0Yri5jiy+A1GM5Dpjq1dyjEQWZaEviEV1AoGBALoKn023l/T60QgkZNQmjS/wCG4LhSjWHN4ZMOxfa/pz369lX5OSwW7OfBKscFPOoC0Kwwr+pSYd2HgA6Jkb17WmUBt13skWRXeRhVh5Y7VfCxohuVNXPrqKoSMeDOj22y9ac2ur2lPgateLBHbKTxoE1uiZNs7pn8ZOh5UKfeK3AoGBAKjklIbZ05nvM/mzdPk9JfCFJ6SaQqeaQcU9AoLEQdOzIrrI660Ignn4hOzLSYac0GxytYTQzDt5xDHKBYqJfem7IqxkIj9hSnIZFnUxp6+VfBhXdWHGn+GDTQa1iDvfpy/h6Gr4NL+p/EoA17qtUqOlYxJ1Dkbaw3SqUtkbuv2G"; + private final String CONSUMER_ACCOUNT = "odrd-fleetengine-consumersdkus@i-go-odrd-testing.iam.gserviceaccount.com"; + + private final String serverPrivateKeyId = "254e18eefa9fdcca64d5899cdcd793d466c47c7d"; + + private final String serverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCfbNAWnukqLKIxItqmSABxsH5glySEHJ2gfL5KsRF0M02e0Z8/KNKZkoh7I6bOMt1fEtttFaWOeq70IdI2WAd5wVazL3upvl5FW4P08ly33LklfGyLljlJ7ChPny9x6OjAaiS0yD9fh7NWti7rZKU7gzcGL8HddNYXgXV5OajvoG3TGdu52WTxce9AUzU6gLPboz/RbGqrdrmgVJVb0EPlhTJf/NSsaiW4NoL8SEzf/pJGYBmqJs97mXwCHTY4avaC+CP/zz9yS8AQEJlApbVT6lSOhYoR0hNOBj5B886EZOssjubO6hQaiwRnGrV2RdpHynqA1iekfGpUGEtWTsqjAgMBAAECggEALyPbMd0iP8y71sCiG4nty7Au5ju62e+mMkbAc9CAwzXKTVxZdLEK+MsJ3TNxBsami47FYC+G6SbgpaJ8iIImD7v5+XjgXZRDRsnlLmAdx2YWPv3YELxGS1PvpX+B5XJDpGWeXfBaQNKc1lZ/cC4t53eIpSUo82UxSvkGNea1S8lR6vIByhNyCQOvLG4yqaxUy0hZi0kge37XrjYMGS+BivBBnDiVlBPLBVbrNBxOf31Lzz+XX0iwXX7Zl2jN759oe0xQyuIGWUSj8xBDIF8nNaJrla7rWVml3sZJh6/3r1Acj0mhZtE0ZMu5hiPGiIXgb1ng30j3dMP4yVPhXrpAtQKBgQDaU01VnHsnHxc0DQHE2vEOPGmPxVS0/JAssePAEUmKEueUogGef91YY+Vm/ItbhLwGjbytnXxe88zRAdB1u07efZ83ey93TrGl2CJUzLHIcgb+Q1tT642rqlfl+q8ep86hcZ+63pDiIPt2Z+HkbKIR0SWf5LIH4flquQOTQufXXQKBgQC674qDsjOJepZjMMN6PkVMcWBYDNmXHnqa5Oto0rZM745UulbXqEFGuBOsXPU7O33Kfz1vbtoluubKZi5B6cFNnPypE2SCfvdObHq4FuTuKPV6lN93SyhZchmSEXEs0PU4cGDRt+RRqQcjft1Wigiy4Y1y1SInCtcaP1hLejEJ/wKBgFAhvwKrGnBzctrB42JTUaJ9/eis7rg28tvUttjp/2nUIndlNt7r41vr3mj8TFHc1/43y4aVhO584THdTpvHkd0LkoKUjglmMsHCIGercZ02bOap5j1Y+XiGXxij995yjN6oi43U3qyAmosM+dYTITEU6JBVKhrGj/rhyTQlnF5pAoGBAKFGmo0mR/pbDbYD0xH6+VSLGCC+7VbIT+SkjUjBSdA0eOo2XUfvfGmj1C1HgbcZi1wRzJH/5CrbBdQmtc/d+QyZ3Q2NkpBXM8uwIWwDLH0gTzDzkZvc9rG8k70GWUrd+EI6Cf3FFjExj9wazqCjs/+IQr2Ijc97NbsKXYW4pOhHAoGAKf5wYk+cn0cVTsyAom0UbGD5Uijqh5732MeqFYs2Rcwx0OErJZo68COSFFF40hJmmIKn7p3qycIyd1FcYlXN1l4s8mEWTGTInRE0OlBU0+jLtIV9pwNgffpbPYcrWZU6s6YVeJ2nDwl+aD+4QvN0rkPTfho9kjgeyF3PW0I2u4E="; + + private final String driverPrivateKeyId = "859e85fb3aa4d18b4afaac3e24e8f65700da5cc9"; + + private final String driverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmzL1BqSH+Zh9Fct5mXqe5sYOMTnJtOJhwKXnjjo2tNPXv4alzUHz8Vbj6nMar5u5IuKRZMeRBlhoRSFrLm+J1+sfvpH8N4wsnG7hDANknqWzdsk9a68qMHxNQF3hFzs9+KKrR1LAG8e9ytMfliN0kX+xls4uPZDPu1Q39K6V9KXrH/GrMA56i3TtWi7Hmakt5YTELeGjhx4nGrfuQLFFovs1Z9uJtf7E8R95+65StrOAmbJNf7VciEqwBpWYlU5VeyLXMg/oHwnTv2cjdcFozyDrlUHbDmtTiVeBBsYFVLyAsDGfl1p6eiVTiBBuo56YSYLWfaLgYvTyEcZ9jBQsfAgMBAAECggEAQzbTuObX3PT3+vtb5XKVMf33XY2rDJo2y1PbWzhxnO9vf3e22dIAW4qLnOmaIWFQeht1lr/FFCzRWk+Gzu+FJTemY8osrMLmFp9T9CQeXZ4nUXruAVxs5WQMW0Tp4W+CK3tlwmJrgJDzhYyV1Mf/HQ5Oa3kbbu/ZAY/3MCLrb/ClJQvD2rZSDdzAkNMQm8P2hsE71+rH7mI2hHrSCHl2OIp2A64QT8HjtyRc5yHZtTp6ZST1ge9SSIsT0ZfmXKtKF7yGEIPtKNU+oLrGyK5P30xBWJ/bwb3PEz2MZcPvz31+B2+UvZMm7OTkqfcRwEztAf8Ckiuo4im2BRYbVmd9OQKBgQDd0MeLxR+Qtv12bVA0bHtagFEq36THgWG7IM1/1vS4Cl9sveKSOS8A6oKLy624fGE7PKcuTTIzkVA81GXtWBQ9Coq/4TmllQkFTH7pz9C2PNHSCychPwNNV8qUx3lE3d4DOjGKgoVFD4l90AO7lOvmLTSc3pDpr+jSjUH4lqGrbQKBgQDAgXBmpXfCTxwqkBzGwxX+hwJen9qSkCM47qnQ1L4NnXPL6s0EN6rQ3FnFemGIzBUGJ2tajntkKlUu5DzsQeoBGu/SaSwgqD+1UQDcUyo+retmqZ+QYbpeyd3l53bLJJuJNsfak0X76Ft6hrm4julx6RGlmboQyx4kZWbhx4YNOwKBgEG9/2aNpi1eDwFqpLrk7CqGnYf3gP8gebbcoguhyiZB7MZuARkVmbjLyKVmWLa1JpxH/cTbXGWsS/u7d/pAgL8WwMjeGBfbdDD92x+xWEqq/AUlCRPxeSkTPBech3TBzWtndAd5Z8ZwNG/1lyWhnck63L0huhGI8Zh2BXeILaKBAoGAKK3xq69BvGztPc1QV2w4RJ4RER/kl14gI1LDzd52/veL1cabZk3BKfu2eLWg0MCXnMJNvEgpqQQNFiii+yX+phckIKma6pfDRrSEYwqr/azQ9tPXZTJRqOAtpPyhrNHikD9kQjsm6dGzKxQ3QNnqWOjwkrcGi6/wga5v7Dw2hqsCgYEA2T/kSNQ9dqpVBAkfi2J50hqnfFESPjKeirJJZllqhVqsiV0ly8a8Fz8SjGqTzrq+UErko+QmtSlo5h3Uq9Ln+0CwYfrUL+74q2zLHdS0DpY3QsGTEDJXTxCyy9kO26X2UsM3Ez3YUAkdMwdpVz0uVZtinv2735QZOBxoVQV2kQ8="; + + private final String consumerPrivateKeyId = "40acf82cbd5250de2f5123caff40738bdd403b08"; + + private final String consumerPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDSwtbSBFgIXna6mWeKFWCK31NXUJH6uGduR1XrODGRedrqrTgr0BdNg8PDo6/zh/T+K0Svor6kgqpwnl9soOdn73oC4Nu+Ad7EiKa38j650jlZdLAr4hR0Ou9Kcnv45x/94auUO8jBz844cu24swLKiPsK9OnX65wVlKRfhhkGFuS/4OI76CmE7NqZDqPOW16o8tBO5TsgPVNkglFAU73fTp0kcHoLauT9QOB0+yZi39mnNXyU+2cL3Ylp5oaQCJpyssDRUqz/EiHa7FxUUgzCadG00+ePf5iYSnZKQRKWoOIawFvcCfcHx8GAl8Nn+79HtVQHB9hLsQ5+jqcdfKPfAgMBAAECggEAE9Ufz912xzrUY1TCKH1Ae3Dub732Lqihmv/9dsfv6ieUURcBvSW0u6eViVhi20DE7hH2QazH0cU18qkEg71UaTRgv9qW8vdMFiRhw9d4zZWZrfBMD6UTlahiEhhZ0B83pHVS5v0FNC+w0SEHe6Tks1hWfz5yrs3N/z3ghdihjC/5i1jeBoHXs1262SMazuwNGHblLApGPG+86taeFtbDI+31TKvZ8nomZHkEVFnARRUoBBcIwowRMqNfwlpcJhlz6kDWnoD08kHJ2zzJokozu7Lim+Ugt/MWwUOcA0hgq2QdymZFpkRkDl7tZmJtwTfTirjbGlpnPHVXEc1bWM7ocQKBgQD0LJ8e7JXf6bVFngq0jSJNKK7XDHYg0KhHXMApF59xxi29hdHXWPzgRJ45KkoUJc7MITpIJLXfCmi1XyDMf9m8lIf/oaqhJ7idYi7iAAPOJkdnHbSt0lebyjBWzCQ6OgS4NfF1+LEibTzRqiFs5K8EAyPYAVSTrpWoguoWtTzIGQKBgQDc9/I2PS+91Eb5RvuidTNsDqZJliTJQFlBjlDViFo3+l1N7jDFYwPBR/Tv4TVM5p9Zb+/Lo9X1pjDbm8QriTR4V+4HaLXkcCnmOsdSRInFUW4UIafwLX5ifjgfyaWgdKdn2UP1Lu/1qBN6GU1xjSfBQ6N3UqQiKkNPb7tuPJGqtwKBgQCQ4hU8vTclGMC14VQK1B/BVt1/vuYtDIJ9bZycBWdXlDc52LitpiDOVgjodJ5mHBT77M9vVVERWlTNIfgNP+OL0TptRZlAbJhP0p1s/oNDhFUj6211InVXfH54UkNAxYJdZ6yxynIYsma/JcsVmQ/8Ony/Q/LSempVBfEurjW1qQKBgQCQWPjFLdtOKqnildg0HFPnNvqx/38waPTluk5b76LgBpGFIyCBEVmWnacIPRpQjidyiYkggnp26oXoMC1KM2svYmGAPYr1G8CDQcqLl3JYkAVU6VeHsnBpbwLC4TttQkdJs8iNFohy9cUjcfwBPbDGs6TJghbuqqUl81uBe9e8qQKBgQDZm8T2KB34J7HAc5A+vqkmAo7mQLZg51OrzB1KnDU86pSAf0o3eSvfDUT6dpU9fRuZ1XYnbPnpoJwjFH3m4u9gqKF3PtVYfZyJrEqYwmhB9z6vd+dcsUlXM0fi37bGZkKBD0JGGt5OljM1qJG15x/LYfC/nwOmqWoOhNPCst2Z7w=="; private final String provider = "i-go-odrd-testing"; + + private final static String key = "AIzaSyCG6PsfkaCEc94VK2vIAZk1YYKvOS_Ewts"; @Autowired private RedisUtil redisUtil; @@ -54,24 +69,24 @@ * @param type 0=服务端,1=乘客,2=司机 * @return */ - public Map<String, Object> fleetEngineAuth(int type, Integer id){ + public Map<String, Object> fleetEngineAuth(int type, String id){ try { //谷歌云服务器使用这部分代码 // AuthTokenMinter minter = AuthTokenMinter.builder() // //服务端签名 -// .setServerSigner(DefaultServiceAccountSigner.create()) +// .setServerSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) // //司机端签名 -// .setDriverSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) +// .setDriverSigner(ImpersonatedSigner.create(DRIVER_ACCOUNT)) // //乘客端签名 -// .setConsumerSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) +// .setConsumerSigner(ImpersonatedSigner.create(CONSUMER_ACCOUNT)) // .build(); AuthTokenMinter minter = AuthTokenMinter.builder() //服务端签名 - .setServerSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setServerSigner(LocalSigner.create(SERVICE_ACCOUNT, serverPrivateKeyId, serverPrivateKey)) //司机端签名 - .setDriverSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setDriverSigner(LocalSigner.create(DRIVER_ACCOUNT, driverPrivateKeyId, driverPrivateKey)) //乘客端签名 - .setConsumerSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setConsumerSigner(LocalSigner.create(CONSUMER_ACCOUNT, consumerPrivateKeyId, consumerPrivateKey)) .build(); String jwt = ""; @@ -82,12 +97,12 @@ expirationTimestamp = serverToken.expirationTimestamp().getTime(); } if(1 == type){ - FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create("I-GO-USER" + id)); + FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create(id)); jwt = consumerToken.jwt(); expirationTimestamp = consumerToken.expirationTimestamp().getTime(); } if(2 == type){ - FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create("I-GO-CAR" + id)); + FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create(id)); jwt = driverToken.jwt(); expirationTimestamp = driverToken.expirationTimestamp().getTime(); } @@ -161,6 +176,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return createVehicles(maximumCapacity, licensePlate, id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -254,6 +274,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return updateVehicles(vehicleState, maximumCapacity, licensePlate, id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -310,6 +335,11 @@ return ""; } if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return getVehicles(id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -434,6 +464,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return createTrip(vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -648,6 +683,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -802,6 +842,11 @@ return ""; } if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return getTrip(tripId); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -891,4 +936,41 @@ return response.body(); } + + + /** + * 上报google可结算订单 + * @param tripId 行程id + * @return + */ + public boolean reportBillableEvent(String tripId) throws Exception { + String billableEventId = UUIDUtil.getRandomCode(); + String url = "https://mobilitybilling.googleapis.com/v1:reportBillableEvent?regionCode=GH&key=" + key + "&billableEventId=" + billableEventId; + HttpRequest post = HttpUtil.createPost(url); + Map<String, String> headers = new HashMap<>(); + headers.put("Authorization", "Bearer " + getToken()); + headers.put("Content-Type", "application/json"); + post.addHeaders(headers); + JSONObject body = new JSONObject(); + body.put("related_ids", "[\"" + tripId + "\"]"); + post.body(body.toJSONString()); + + + + + + + + + + + //上线客户测试和上线运营开放 +// HttpResponse response = post.execute(); +// if(200 != response.getStatus()){ +// logger.error(response.body()); +// throw new Exception(response.body()); +// } + return true; + } + } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java index 9fe8e77..314fc90 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java @@ -580,19 +580,23 @@ * 司机超时推送 * @param type * @param uid - * @param orderId - * @param orderType - * @param describe + * @param timeOutType 超时类型(1=用户可免费取消提醒,2=预约单接单提醒,3=超时循环提醒) + * @param orderId 订单id + * @param orderType 订单类型(1=打车,4=包裹) + * @param describe 展示内容 + * @param audioUrl 语音播报音频地址 */ - public void pushOrderTimeOut(Integer type, Integer uid, Integer orderId, Integer orderType, String describe){ + public void pushOrderTimeOut(Integer type, Integer uid, Integer timeOutType, Integer orderId, Integer orderType, String describe, String audioUrl){ JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 200); jsonObject.put("msg", "SUCCESS"); jsonObject.put("method", "ORDER_TIME_OUT"); Map<String, Object> map = new HashMap<>(); + map.put("timeOutType", timeOutType); map.put("orderId", orderId); map.put("orderType", orderType); map.put("describe", describe); + map.put("audioUrl", audioUrl); jsonObject.put("data", map); //调用推送 diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringUtils.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringUtils.java new file mode 100644 index 0000000..68250bc --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringUtils.java @@ -0,0 +1,41 @@ +package com.stylefeng.guns.modular.system.util; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2024/7/18 9:33 + */ +@Component +public class SpringUtils implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringUtils.applicationContext = applicationContext; + } + + //获取applicationContext + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + public static <T> T getBean(String beanName) { + if(applicationContext.containsBean(beanName)){ + return (T) applicationContext.getBean(beanName); + }else{ + return null; + } + } + + //通过class获取Bean. + public static <T> T getBean(Class<T> clazz) { + return getApplicationContext().getBean(clazz); + } +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java index f22157b..3aa88da 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java @@ -39,10 +39,7 @@ private IDriverOnlineService driverOnlineService; - public static void main(String[] args) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd"); - System.err.println(sdf.format(new Date())); - } + /** @@ -58,7 +55,7 @@ //处理结束订单后30分钟解绑小号功能 orderService.taskMidAxbUnBindSend(); //处理司机连续不接单的情况 - driverOnlineService.deductionDuration(); + driverOnlineService.deductionDuration1(); } catch (Exception e) { e.printStackTrace(); } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java new file mode 100644 index 0000000..4e277fe --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java @@ -0,0 +1,60 @@ +package com.stylefeng.guns.modular.system.util; + +import com.google.cloud.texttospeech.v1.*; +import com.google.protobuf.ByteString; + +import java.io.FileOutputStream; +import java.io.OutputStream; + +/** + * Google语音合成工具 + * @author zhibing.pu + * @Date 2024/7/11 9:09 + */ +public class TextToSpeechUtil { + + + /** + * 合成音频文件 + * @param languageCode 语言编号 + * @param text 合成文本 + * @param fileName 音频文件名称 + * @throws Exception + */ + public static String create(String languageCode, String text, String fileName) throws Exception { + // Instantiates a client + try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) { + // Set the text input to be synthesized + SynthesisInput input = SynthesisInput.newBuilder().setText(text).build(); + + // Build the voice request, select the language code ("en-US") and the ssml voice gender + // ("neutral") + VoiceSelectionParams voice = + VoiceSelectionParams.newBuilder() + .setLanguageCode(languageCode) + .setSsmlGender(SsmlVoiceGender.MALE) + .build(); + + // Select the type of audio file you want returned + AudioConfig audioConfig = + AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build(); + + // Perform the text-to-speech request on the text input with the selected voice parameters and + // audio file type + SynthesizeSpeechResponse response = + textToSpeechClient.synthesizeSpeech(input, voice, audioConfig); + + // Get the audio contents from the response + ByteString audioContents = response.getAudioContent(); + + // Write the response to the output file. + try (OutputStream out = new FileOutputStream("/usr/local/nginx/html/files/audio/" + fileName)) { + out.write(audioContents.toByteArray()); + return "http://182.160.16.251:81/files/audio/" + fileName; + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } + } +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java index 0234df5..8d9a039 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java @@ -30,12 +30,16 @@ * @param propertiesStream 配置文件流 * @return */ - public static void start(InputStream propertiesStream) throws SchedulerException { + public static void start(InputStream propertiesStream){ if(null == scheduler){ scheduler = SchedulerUtil.getScheduler(propertiesStream); } - scheduler.start(); - log.info(QuartzEnum.SCHEDULER_START_SUCCESS.getValue()); + try { + scheduler.start(); + log.info(QuartzEnum.SCHEDULER_START_SUCCESS.getValue()); + } catch (SchedulerException e) { + e.printStackTrace(); + } } @@ -191,7 +195,7 @@ private static JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){ JobDetail jobDetail = JobBuilder.newJob(job.getClass()) .withIdentity(job_name, group_name) - .usingJobData(jobDataMap) + .setJobData(jobDataMap) .build(); return jobDetail; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java index fa413e4..eac6496 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java @@ -1,20 +1,26 @@ package com.stylefeng.guns.modular.system.util.quartz.jobs; +import com.alibaba.fastjson.JSON; +import com.stylefeng.guns.core.util.ToolUtil; 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.util.PushUtil; +import com.stylefeng.guns.modular.system.util.TextToSpeechUtil; import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil; +import com.stylefeng.guns.modular.system.util.quartz.model.QuartzEnum; import com.stylefeng.guns.modular.system.util.quartz.model.QuartzJob; import lombok.extern.slf4j.Slf4j; -import org.quartz.JobDataMap; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.JobKey; +import org.quartz.*; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; /** * 订单司机超时提醒任务 @@ -36,22 +42,36 @@ @Override public QuartzJob buildQuartzJob() { - return super.buildQuartzJob(); + return buildQuartzJob(QuartzEnum.JOB_NAME.getValue()); } @Override public QuartzJob buildQuartzJob(String name) { - return super.buildQuartzJob(name); + return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue()); } @Override public QuartzJob buildQuartzJob(String name, String group) { - return super.buildQuartzJob(name, group); + return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue(), null); } @Override public QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap) { - return super.buildQuartzJob(name, group, jobDataMap); + QuartzJob job = new OrderTimeOutJob(); + if(ToolUtil.isNotEmpty(name)){ + job.setName(name); + }else{ + job.setName(QuartzEnum.JOB_NAME.getValue()); + } + if(ToolUtil.isNotEmpty(group)){ + job.setGroup(group); + }else{ + job.setGroup(QuartzEnum.DEFAULT_GROUP.getValue()); + } + if(null != jobDataMap){ + job.setJobDataMap(jobDataMap); + } + return job; } /** @@ -60,14 +80,41 @@ */ @Override public void run(JobExecutionContext jobExecutionContext) { - JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); - Integer driverId = jobDataMap.getIntegerFromString("driverId"); - Integer orderId = jobDataMap.getIntegerFromString("orderId"); - Integer orderType = jobDataMap.getIntegerFromString("orderType"); + JobDetail jobDetail = jobExecutionContext.getJobDetail(); + JobDataMap jobDataMap = jobDetail.getJobDataMap(); + String name = jobDetail.getKey().getName(); + log.info("执行{}定时任务逻辑 JobDataMap:{}", name, JSON.toJSONString(jobDataMap)); + Integer timeOutType = jobDataMap.getIntValue("timeOutType"); + Integer driverId = jobDataMap.getIntValue("driverId"); + Integer orderId = jobDataMap.getIntValue("orderId"); + Integer orderType = jobDataMap.getIntValue("orderType"); + Integer language = jobDataMap.getIntValue("language"); + long timeOut = jobDataMap.getLongValue("timeOut"); String describe = jobDataMap.getString("describe"); + if(3 == timeOutType){ + Integer m = Double.valueOf((System.currentTimeMillis() - timeOut) / 60000).intValue(); + if(orderType == 1){ + if(0 == m){ + describe = language == 1 ? "您的打车订单已超时,请抓紧!" : language == 2 ? "Your ride order is overdue, please go faster." : "Votre commande de course est en retard, veuillez aller plus vite."; + }else{ + describe = language == 1 ? "您的打车订单已超时" + m + "分钟,请抓紧!" : language == 2 ? "Your ride order is overdue for " + m + " minute(s), please go faster." : "Votre commande de course est en retard depuis " + m + " minute(s), veuillez aller plus vite."; + } + } + if(orderType == 4){ + if(0 == m){ + describe = language == 1 ? "您的包裹订单已超时,请抓紧!" : language == 2 ? "Your delivery order is overdue, please go faster." : "Votre commande de Delivery est en retard, veuillez aller plus vite."; + }else{ + describe = language == 1 ? "您的包裹订单已超时" + m + "分钟,请抓紧!" : language == 2 ? "Your delivery order is overdue for " + m + " minute(s), please go faster." : "Votre commande de Delivery est en retard depuis " + m + " minute(s), veuillez aller plus vite."; + } + } + } + + if(1 == orderType){ + //结束预约单出发循环提醒定时 OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); - if(2 != orderPrivateCar.getState()){ + List<Integer> list = Arrays.asList(4, 5, 6, 7, 8, 9, 10, 11, 12); + if(1 == timeOutType && list.contains(orderPrivateCar.getState())){ JobKey key = jobExecutionContext.getJobDetail().getKey(); boolean b = QuartzUtil.deleteQuartzTask(key); if(!b){ @@ -75,10 +122,40 @@ } return; } + if(2 == timeOutType && (System.currentTimeMillis() >= timeOut || list.contains(orderPrivateCar.getState()))){ + JobKey key = jobExecutionContext.getJobDetail().getKey(); + boolean b = QuartzUtil.deleteQuartzTask(key); + if(!b){ + log.error("定时任务关闭失败:" + key.toString()); + } + return; + } + + //结束超时循环提醒定时 + if(3 == timeOutType && list.contains(orderPrivateCar.getState())){ + JobKey key = jobExecutionContext.getJobDetail().getKey(); + boolean b = QuartzUtil.deleteQuartzTask(key); + if(!b){ + log.error("定时任务关闭失败:" + key.toString()); + } + return; + } + + } if(4 == orderType){ OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); - if(2 != orderLogistics.getState()){ + List<Integer> list = Arrays.asList(4, 5, 6, 7, 8, 9, 10, 11, 12, 13); + if(1 == timeOutType && list.contains(orderLogistics.getState())){ + JobKey key = jobExecutionContext.getJobDetail().getKey(); + boolean b = QuartzUtil.deleteQuartzTask(key); + if(!b){ + log.error("定时任务关闭失败:" + key.toString()); + } + return; + } + //结束超时循环提醒定时 + if(3 == timeOutType && list.contains(orderLogistics.getState())){ JobKey key = jobExecutionContext.getJobDetail().getKey(); boolean b = QuartzUtil.deleteQuartzTask(key); if(!b){ @@ -87,7 +164,32 @@ return; } } - pushUtil.pushOrderTimeOut(2, driverId, orderId, orderType, describe); + + String audioUrl = null; + try { + audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", describe, "orderTimeOut" + driverId + "_" + timeOutType + ".mp3"); + } catch (Exception e) { + e.printStackTrace(); + } + + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/orderTimeOut" + driverId + "_" + timeOutType + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + + log.info("开始推送提醒-{}:orderId={};orderType={};timeOutType={};describe={};audioUrl={}", System.currentTimeMillis(), orderId, orderType, timeOutType, describe, audioUrl); + pushUtil.pushOrderTimeOut(2, driverId, timeOutType, orderId, orderType, describe, audioUrl); } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java index b43f938..9ec7b7a 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java @@ -1,13 +1,16 @@ package com.stylefeng.guns.modular.system.util.quartz.model; +import com.alibaba.fastjson.JSON; import com.stylefeng.guns.core.util.ToolUtil; +import com.stylefeng.guns.modular.system.util.SpringUtils; import lombok.Data; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.quartz.Job; -import org.quartz.JobDataMap; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; +import org.quartz.*; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; /** * quartz任务类 @@ -20,17 +23,14 @@ /** * 任务名称 */ - @Getter private String name; /** * 任务分组 */ - @Getter private String group; /** * 自定义参数 */ - @Getter private JobDataMap jobDataMap; @@ -38,9 +38,7 @@ * 构建QuartzJob对象 * @return */ - public QuartzJob buildQuartzJob() { - return buildQuartzJob(QuartzEnum.JOB_NAME.getValue()); - } + public abstract QuartzJob buildQuartzJob(); @@ -49,9 +47,7 @@ * @param name 任务名称 * @return */ - public QuartzJob buildQuartzJob(String name) { - return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue()); - } + public abstract QuartzJob buildQuartzJob(String name); @@ -61,9 +57,7 @@ * @param group 任务分组名称 * @return */ - public QuartzJob buildQuartzJob(String name, String group) { - return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue(), null); - } + public abstract QuartzJob buildQuartzJob(String name, String group); /** * 构建QuartzJob对象 @@ -72,20 +66,7 @@ * @param jobDataMap 自定义参数 * @return */ - public QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap) { - if(ToolUtil.isNotEmpty(name)){ - this.name = name; - }else{ - this.name = QuartzEnum.JOB_NAME.getValue(); - } - if(ToolUtil.isNotEmpty(group)){ - this.group = group; - }else{ - this.group = QuartzEnum.DEFAULT_GROUP.getValue(); - } - this.jobDataMap = jobDataMap; - return this; - } + public abstract QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap); /** * 需要执行的任务的业务逻辑方法 @@ -93,16 +74,19 @@ */ public abstract void run(JobExecutionContext jobExecutionContext); - /** - * 执行器执行任务调用的方式 - * @param jobExecutionContext 定时任务上下文对象 - * @throws JobExecutionException - */ - @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - String name = jobExecutionContext.getJobDetail().getKey().getName(); - log.info(name + " scheduled task start!"); - run(jobExecutionContext); - } + @Override + public void execute(JobExecutionContext jobExecutionContext){ + JobDetail jobDetail = jobExecutionContext.getJobDetail(); + String name = jobDetail.getKey().getName(); + log.info(name + " scheduled task start!\nJobDataMap:{}", JSON.toJSONString(jobDetail.getJobDataMap())); + try { + Class jobClass = jobDetail.getJobClass(); + Method run = jobClass.getMethod("run", JobExecutionContext.class); + Object o = SpringUtils.getBean(jobClass); + Object invoke = run.invoke(o, jobExecutionContext); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java index e299a92..caf4c2e 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java @@ -1,5 +1,6 @@ package com.stylefeng.guns.modular.system.warpper; +import com.baomidou.mybatisplus.annotations.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -49,6 +50,8 @@ private Double orderMoney; @ApiModelProperty(value = "支付方式(1=OK平台支付(线上支付),2=其他方式支付(线下支付))", example = "1") private Integer payManner; + @ApiModelProperty("小件物流差价") + private Double priceDifference; @ApiModelProperty("支付金额") private Double payMoney; @ApiModelProperty("是否是改派单(1=否,2=是)") @@ -94,9 +97,13 @@ private Integer isFrozen; @ApiModelProperty("超时取消时间") private Integer timeOutCancel; + @ApiModelProperty("超时语音文件地址") + private String audioUrl; @ApiModelProperty("接单时间") private String snatchOrderTime; private String tripId; + @ApiModelProperty("中途取消(0=否,1=是)") + private Integer cancelMidway; public Integer getStartDuration() { return startDuration; @@ -458,6 +465,30 @@ this.tripId = tripId; } + public Integer getCancelMidway() { + return cancelMidway; + } + + public void setCancelMidway(Integer cancelMidway) { + this.cancelMidway = cancelMidway; + } + + public String getAudioUrl() { + return audioUrl; + } + + public void setAudioUrl(String audioUrl) { + this.audioUrl = audioUrl; + } + + public Double getPriceDifference() { + return priceDifference; + } + + public void setPriceDifference(Double priceDifference) { + this.priceDifference = priceDifference; + } + @Override public String toString() { return "OrderInfoWarpper{" + @@ -547,6 +578,9 @@ orderInfoWarpper.setSnatchOrderTime(null != map.get("snatchOrderTime") ? map.get("snatchOrderTime").toString() : ""); orderInfoWarpper.setUserPhone(null != map.get("userPhone") ? map.get("userPhone").toString() : ""); orderInfoWarpper.setTripId(null != map.get("tripId") ? map.get("tripId").toString() : ""); + orderInfoWarpper.setCancelMidway(null != map.get("cancelMidway") ? Integer.valueOf(map.get("cancelMidway").toString()) : 0); + orderInfoWarpper.setAudioUrl(null != map.get("audioUrl") ? map.get("audioUrl").toString() : ""); + orderInfoWarpper.setPriceDifference(null != map.get("priceDifference") ? Double.valueOf(map.get("priceDifference").toString()) : 0); } return orderInfoWarpper; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QueryHistoricalSettlement.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QueryHistoricalSettlement.java index 6d1fa04..2ef32d7 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QueryHistoricalSettlement.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/QueryHistoricalSettlement.java @@ -15,6 +15,8 @@ private String createTime; @ApiModelProperty("结算金额") private Double price; + @ApiModelProperty("结算总金额") + private Double totalPrice; @ApiModelProperty("结算周期(1=日结算,2=周结算,3=月结算)") private Integer type; @ApiModelProperty("支付方式") diff --git a/ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java b/ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java index 4be7b9f..d36bbd7 100644 --- a/ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java +++ b/ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java @@ -33,11 +33,23 @@ static Logger logger = LoggerFactory.getLogger(FleetEngineUtil.class); - private final String SERVICE_ACCOUNT = "odrd2024@i-go-odrd-testing.iam.gserviceaccount.com"; + private final String SERVICE_ACCOUNT = "odrd-fleetengine-ondemandadmin@i-go-odrd-testing.iam.gserviceaccount.com"; - private final String privateKeyId = "0a9a480fafb6469c0c1b2fa6dbdf6d4bebe1ebed"; + private final String DRIVER_ACCOUNT = "odrd-fleetengine-driversdkuser@i-go-odrd-testing.iam.gserviceaccount.com"; - private final String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDXZoPEFZeZb0C7DXzpPsloB+rQVQAJuR+z4T9uRCz33gBsIqrz1s5Iwd8vXYKKWzukMdXkwqR4WapI/4GtcpbJkRK93mKXvEE3sDz27BnRrZL4gHeECVpFy0egw29sqFM/x/cpst0goqq4/f3ZFGtQGIhSEEHMySQgTbZDIhXMIls1etRsM4K2bTXeMPn89ablPBdbKtTAJy1EI+ZLKbxnl9StyqBam+d+UsfVmNG19MsNbSzCKc+QPnPXb7dj9KxJ/2whog8w15qXQdJHAMeHZyNlqE0zVP7G1VdWo6Q4QtzmENANxBpJIEbAqY2sq3BZSqDd5XS9Dr9BR4XzQqQnAgMBAAECggEABFABAj4eph1vxVYRBH2TpvDGFU3uW7VBPjwp7JzntLAN8eNoPlqmEDP16y6D/HMmfftpAI3TvWA3+ZEPkiX6nVDyW6sGCodyP0QuJEob1HKHFYntzGtHhGg1KCOacLey6TYbJJmUtcsduQXGkocOPaLXNvjzr2mY2zthTDzJ6HzjDo3d2x/O+lUVlNjubTFydgU9bQP8zS389GgZkO/YebK9+qPRBXv1R2fmj0rhpLqC03jL/mUMKi5tW628OiJGdvzLXlAGyJ9CtVDjfrwUgLf8ML+3yfdmv7yFeWuJ2NEgQxKACixHM05qkCW2bOkPIi9+wb1BbVvMdYL+GCPvmQKBgQD/DZ8zpWfNAkl8h8NI0E7sPdN6wgGfPpaC8VpOE3EM2eEijkZZT6XjfxXjMv1vXg1UoeYVscPb99Ux6u2gq+ZJj6+IstNIObXgvrqNxKPw6OO2xCb6UmA4rQ74xe4d1KLN+C1zepgFYgU4ejungWzuPVL7x8xjdyBAvqgPqP1IbQKBgQDYMzXs2QcWr9tVwq1O3D/H6qX2DvelAj7j0vuXGtop1/aJW7bPlGJd9NGim8dnXLVSFyRteuVl4epa/C9h50g3FM/lFMl9lmp1HwpDeiSJYAGRH8cnPJjN/IV3cRl5qN8KUQE2a3BRP+6IPHJiF1Bc1vj08nTMsWmN+K6VcAzqYwKBgGGJ7RNMM0kkkcPtC5LCDxyrfD/bB9HFlrvW3ykyqC44+K9FZ8PqAM/inxU3P9KiTkjKbXpodDWgLskbResHMld5erC1arWZVGPxrNhgli2gcs1HcHyUmjWygSJEV47S7bwFKCScgpy0Yri5jiy+A1GM5Dpjq1dyjEQWZaEviEV1AoGBALoKn023l/T60QgkZNQmjS/wCG4LhSjWHN4ZMOxfa/pz369lX5OSwW7OfBKscFPOoC0Kwwr+pSYd2HgA6Jkb17WmUBt13skWRXeRhVh5Y7VfCxohuVNXPrqKoSMeDOj22y9ac2ur2lPgateLBHbKTxoE1uiZNs7pn8ZOh5UKfeK3AoGBAKjklIbZ05nvM/mzdPk9JfCFJ6SaQqeaQcU9AoLEQdOzIrrI660Ignn4hOzLSYac0GxytYTQzDt5xDHKBYqJfem7IqxkIj9hSnIZFnUxp6+VfBhXdWHGn+GDTQa1iDvfpy/h6Gr4NL+p/EoA17qtUqOlYxJ1Dkbaw3SqUtkbuv2G"; + private final String CONSUMER_ACCOUNT = "odrd-fleetengine-consumersdkus@i-go-odrd-testing.iam.gserviceaccount.com"; + + private final String serverPrivateKeyId = "254e18eefa9fdcca64d5899cdcd793d466c47c7d"; + + private final String serverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCfbNAWnukqLKIxItqmSABxsH5glySEHJ2gfL5KsRF0M02e0Z8/KNKZkoh7I6bOMt1fEtttFaWOeq70IdI2WAd5wVazL3upvl5FW4P08ly33LklfGyLljlJ7ChPny9x6OjAaiS0yD9fh7NWti7rZKU7gzcGL8HddNYXgXV5OajvoG3TGdu52WTxce9AUzU6gLPboz/RbGqrdrmgVJVb0EPlhTJf/NSsaiW4NoL8SEzf/pJGYBmqJs97mXwCHTY4avaC+CP/zz9yS8AQEJlApbVT6lSOhYoR0hNOBj5B886EZOssjubO6hQaiwRnGrV2RdpHynqA1iekfGpUGEtWTsqjAgMBAAECggEALyPbMd0iP8y71sCiG4nty7Au5ju62e+mMkbAc9CAwzXKTVxZdLEK+MsJ3TNxBsami47FYC+G6SbgpaJ8iIImD7v5+XjgXZRDRsnlLmAdx2YWPv3YELxGS1PvpX+B5XJDpGWeXfBaQNKc1lZ/cC4t53eIpSUo82UxSvkGNea1S8lR6vIByhNyCQOvLG4yqaxUy0hZi0kge37XrjYMGS+BivBBnDiVlBPLBVbrNBxOf31Lzz+XX0iwXX7Zl2jN759oe0xQyuIGWUSj8xBDIF8nNaJrla7rWVml3sZJh6/3r1Acj0mhZtE0ZMu5hiPGiIXgb1ng30j3dMP4yVPhXrpAtQKBgQDaU01VnHsnHxc0DQHE2vEOPGmPxVS0/JAssePAEUmKEueUogGef91YY+Vm/ItbhLwGjbytnXxe88zRAdB1u07efZ83ey93TrGl2CJUzLHIcgb+Q1tT642rqlfl+q8ep86hcZ+63pDiIPt2Z+HkbKIR0SWf5LIH4flquQOTQufXXQKBgQC674qDsjOJepZjMMN6PkVMcWBYDNmXHnqa5Oto0rZM745UulbXqEFGuBOsXPU7O33Kfz1vbtoluubKZi5B6cFNnPypE2SCfvdObHq4FuTuKPV6lN93SyhZchmSEXEs0PU4cGDRt+RRqQcjft1Wigiy4Y1y1SInCtcaP1hLejEJ/wKBgFAhvwKrGnBzctrB42JTUaJ9/eis7rg28tvUttjp/2nUIndlNt7r41vr3mj8TFHc1/43y4aVhO584THdTpvHkd0LkoKUjglmMsHCIGercZ02bOap5j1Y+XiGXxij995yjN6oi43U3qyAmosM+dYTITEU6JBVKhrGj/rhyTQlnF5pAoGBAKFGmo0mR/pbDbYD0xH6+VSLGCC+7VbIT+SkjUjBSdA0eOo2XUfvfGmj1C1HgbcZi1wRzJH/5CrbBdQmtc/d+QyZ3Q2NkpBXM8uwIWwDLH0gTzDzkZvc9rG8k70GWUrd+EI6Cf3FFjExj9wazqCjs/+IQr2Ijc97NbsKXYW4pOhHAoGAKf5wYk+cn0cVTsyAom0UbGD5Uijqh5732MeqFYs2Rcwx0OErJZo68COSFFF40hJmmIKn7p3qycIyd1FcYlXN1l4s8mEWTGTInRE0OlBU0+jLtIV9pwNgffpbPYcrWZU6s6YVeJ2nDwl+aD+4QvN0rkPTfho9kjgeyF3PW0I2u4E="; + + private final String driverPrivateKeyId = "859e85fb3aa4d18b4afaac3e24e8f65700da5cc9"; + + private final String driverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmzL1BqSH+Zh9Fct5mXqe5sYOMTnJtOJhwKXnjjo2tNPXv4alzUHz8Vbj6nMar5u5IuKRZMeRBlhoRSFrLm+J1+sfvpH8N4wsnG7hDANknqWzdsk9a68qMHxNQF3hFzs9+KKrR1LAG8e9ytMfliN0kX+xls4uPZDPu1Q39K6V9KXrH/GrMA56i3TtWi7Hmakt5YTELeGjhx4nGrfuQLFFovs1Z9uJtf7E8R95+65StrOAmbJNf7VciEqwBpWYlU5VeyLXMg/oHwnTv2cjdcFozyDrlUHbDmtTiVeBBsYFVLyAsDGfl1p6eiVTiBBuo56YSYLWfaLgYvTyEcZ9jBQsfAgMBAAECggEAQzbTuObX3PT3+vtb5XKVMf33XY2rDJo2y1PbWzhxnO9vf3e22dIAW4qLnOmaIWFQeht1lr/FFCzRWk+Gzu+FJTemY8osrMLmFp9T9CQeXZ4nUXruAVxs5WQMW0Tp4W+CK3tlwmJrgJDzhYyV1Mf/HQ5Oa3kbbu/ZAY/3MCLrb/ClJQvD2rZSDdzAkNMQm8P2hsE71+rH7mI2hHrSCHl2OIp2A64QT8HjtyRc5yHZtTp6ZST1ge9SSIsT0ZfmXKtKF7yGEIPtKNU+oLrGyK5P30xBWJ/bwb3PEz2MZcPvz31+B2+UvZMm7OTkqfcRwEztAf8Ckiuo4im2BRYbVmd9OQKBgQDd0MeLxR+Qtv12bVA0bHtagFEq36THgWG7IM1/1vS4Cl9sveKSOS8A6oKLy624fGE7PKcuTTIzkVA81GXtWBQ9Coq/4TmllQkFTH7pz9C2PNHSCychPwNNV8qUx3lE3d4DOjGKgoVFD4l90AO7lOvmLTSc3pDpr+jSjUH4lqGrbQKBgQDAgXBmpXfCTxwqkBzGwxX+hwJen9qSkCM47qnQ1L4NnXPL6s0EN6rQ3FnFemGIzBUGJ2tajntkKlUu5DzsQeoBGu/SaSwgqD+1UQDcUyo+retmqZ+QYbpeyd3l53bLJJuJNsfak0X76Ft6hrm4julx6RGlmboQyx4kZWbhx4YNOwKBgEG9/2aNpi1eDwFqpLrk7CqGnYf3gP8gebbcoguhyiZB7MZuARkVmbjLyKVmWLa1JpxH/cTbXGWsS/u7d/pAgL8WwMjeGBfbdDD92x+xWEqq/AUlCRPxeSkTPBech3TBzWtndAd5Z8ZwNG/1lyWhnck63L0huhGI8Zh2BXeILaKBAoGAKK3xq69BvGztPc1QV2w4RJ4RER/kl14gI1LDzd52/veL1cabZk3BKfu2eLWg0MCXnMJNvEgpqQQNFiii+yX+phckIKma6pfDRrSEYwqr/azQ9tPXZTJRqOAtpPyhrNHikD9kQjsm6dGzKxQ3QNnqWOjwkrcGi6/wga5v7Dw2hqsCgYEA2T/kSNQ9dqpVBAkfi2J50hqnfFESPjKeirJJZllqhVqsiV0ly8a8Fz8SjGqTzrq+UErko+QmtSlo5h3Uq9Ln+0CwYfrUL+74q2zLHdS0DpY3QsGTEDJXTxCyy9kO26X2UsM3Ez3YUAkdMwdpVz0uVZtinv2735QZOBxoVQV2kQ8="; + + private final String consumerPrivateKeyId = "40acf82cbd5250de2f5123caff40738bdd403b08"; + + private final String consumerPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDSwtbSBFgIXna6mWeKFWCK31NXUJH6uGduR1XrODGRedrqrTgr0BdNg8PDo6/zh/T+K0Svor6kgqpwnl9soOdn73oC4Nu+Ad7EiKa38j650jlZdLAr4hR0Ou9Kcnv45x/94auUO8jBz844cu24swLKiPsK9OnX65wVlKRfhhkGFuS/4OI76CmE7NqZDqPOW16o8tBO5TsgPVNkglFAU73fTp0kcHoLauT9QOB0+yZi39mnNXyU+2cL3Ylp5oaQCJpyssDRUqz/EiHa7FxUUgzCadG00+ePf5iYSnZKQRKWoOIawFvcCfcHx8GAl8Nn+79HtVQHB9hLsQ5+jqcdfKPfAgMBAAECggEAE9Ufz912xzrUY1TCKH1Ae3Dub732Lqihmv/9dsfv6ieUURcBvSW0u6eViVhi20DE7hH2QazH0cU18qkEg71UaTRgv9qW8vdMFiRhw9d4zZWZrfBMD6UTlahiEhhZ0B83pHVS5v0FNC+w0SEHe6Tks1hWfz5yrs3N/z3ghdihjC/5i1jeBoHXs1262SMazuwNGHblLApGPG+86taeFtbDI+31TKvZ8nomZHkEVFnARRUoBBcIwowRMqNfwlpcJhlz6kDWnoD08kHJ2zzJokozu7Lim+Ugt/MWwUOcA0hgq2QdymZFpkRkDl7tZmJtwTfTirjbGlpnPHVXEc1bWM7ocQKBgQD0LJ8e7JXf6bVFngq0jSJNKK7XDHYg0KhHXMApF59xxi29hdHXWPzgRJ45KkoUJc7MITpIJLXfCmi1XyDMf9m8lIf/oaqhJ7idYi7iAAPOJkdnHbSt0lebyjBWzCQ6OgS4NfF1+LEibTzRqiFs5K8EAyPYAVSTrpWoguoWtTzIGQKBgQDc9/I2PS+91Eb5RvuidTNsDqZJliTJQFlBjlDViFo3+l1N7jDFYwPBR/Tv4TVM5p9Zb+/Lo9X1pjDbm8QriTR4V+4HaLXkcCnmOsdSRInFUW4UIafwLX5ifjgfyaWgdKdn2UP1Lu/1qBN6GU1xjSfBQ6N3UqQiKkNPb7tuPJGqtwKBgQCQ4hU8vTclGMC14VQK1B/BVt1/vuYtDIJ9bZycBWdXlDc52LitpiDOVgjodJ5mHBT77M9vVVERWlTNIfgNP+OL0TptRZlAbJhP0p1s/oNDhFUj6211InVXfH54UkNAxYJdZ6yxynIYsma/JcsVmQ/8Ony/Q/LSempVBfEurjW1qQKBgQCQWPjFLdtOKqnildg0HFPnNvqx/38waPTluk5b76LgBpGFIyCBEVmWnacIPRpQjidyiYkggnp26oXoMC1KM2svYmGAPYr1G8CDQcqLl3JYkAVU6VeHsnBpbwLC4TttQkdJs8iNFohy9cUjcfwBPbDGs6TJghbuqqUl81uBe9e8qQKBgQDZm8T2KB34J7HAc5A+vqkmAo7mQLZg51OrzB1KnDU86pSAf0o3eSvfDUT6dpU9fRuZ1XYnbPnpoJwjFH3m4u9gqKF3PtVYfZyJrEqYwmhB9z6vd+dcsUlXM0fi37bGZkKBD0JGGt5OljM1qJG15x/LYfC/nwOmqWoOhNPCst2Z7w=="; private final String provider = "i-go-odrd-testing"; @@ -54,24 +66,24 @@ * @param type 0=服务端,1=乘客,2=司机 * @return */ - public Map<String, Object> fleetEngineAuth(int type, Integer id){ + public Map<String, Object> fleetEngineAuth(int type, String id){ try { //谷歌云服务器使用这部分代码 // AuthTokenMinter minter = AuthTokenMinter.builder() // //服务端签名 -// .setServerSigner(DefaultServiceAccountSigner.create()) +// .setServerSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) // //司机端签名 -// .setDriverSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) +// .setDriverSigner(ImpersonatedSigner.create(DRIVER_ACCOUNT)) // //乘客端签名 -// .setConsumerSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) +// .setConsumerSigner(ImpersonatedSigner.create(CONSUMER_ACCOUNT)) // .build(); AuthTokenMinter minter = AuthTokenMinter.builder() //服务端签名 - .setServerSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setServerSigner(LocalSigner.create(SERVICE_ACCOUNT, serverPrivateKeyId, serverPrivateKey)) //司机端签名 - .setDriverSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setDriverSigner(LocalSigner.create(DRIVER_ACCOUNT, driverPrivateKeyId, driverPrivateKey)) //乘客端签名 - .setConsumerSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setConsumerSigner(LocalSigner.create(CONSUMER_ACCOUNT, consumerPrivateKeyId, consumerPrivateKey)) .build(); String jwt = ""; @@ -82,12 +94,12 @@ expirationTimestamp = serverToken.expirationTimestamp().getTime(); } if(1 == type){ - FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create("I-GO-USER" + id)); + FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create(id)); jwt = consumerToken.jwt(); expirationTimestamp = consumerToken.expirationTimestamp().getTime(); } if(2 == type){ - FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create("I-GO-CAR" + id)); + FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create(id)); jwt = driverToken.jwt(); expirationTimestamp = driverToken.expirationTimestamp().getTime(); } @@ -161,6 +173,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return createVehicles(maximumCapacity, licensePlate, id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -254,6 +271,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return updateVehicles(vehicleState, maximumCapacity, licensePlate, id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -310,6 +332,11 @@ return ""; } if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return getVehicles(id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -434,6 +461,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return createTrip(vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -648,6 +680,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -802,6 +839,11 @@ return ""; } if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return getTrip(tripId); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); diff --git a/ManagementIGOTravel/guns-admin/src/main/resources/application-produce.yml b/ManagementIGOTravel/guns-admin/src/main/resources/application-produce.yml index 355f361..29e17d7 100644 --- a/ManagementIGOTravel/guns-admin/src/main/resources/application-produce.yml +++ b/ManagementIGOTravel/guns-admin/src/main/resources/application-produce.yml @@ -41,7 +41,7 @@ spring: datasource: - url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0 + url: jdbc:mysql://127.0.0.1:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0 username: root password: HjKbXilb9zajmXbl db-name: guns #用来搜集数据库的所有表 diff --git a/UserIGOTravel/guns-admin/pom.xml b/UserIGOTravel/guns-admin/pom.xml index 3ca1bae..9584c88 100644 --- a/UserIGOTravel/guns-admin/pom.xml +++ b/UserIGOTravel/guns-admin/pom.xml @@ -14,7 +14,17 @@ <description>guns 的spring boot版本</description> <packaging>jar</packaging> - + <dependencyManagement> + <dependencies> + <dependency> + <groupId>com.google.cloud</groupId> + <artifactId>libraries-bom</artifactId> + <version>26.42.0</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> @@ -266,6 +276,11 @@ <artifactId>fleetengine-auth</artifactId> <version>1.11.0</version> </dependency> + + <dependency> + <groupId>com.google.cloud</groupId> + <artifactId>google-cloud-texttospeech</artifactId> + </dependency> </dependencies> diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java index ac8d73c..bea5eec 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java @@ -43,10 +43,10 @@ } -// @PostConstruct -// void started() { -// TimeZone.setDefault(TimeZone.getTimeZone("GMT+0")); -// } + @PostConstruct + void started() { + TimeZone.setDefault(TimeZone.getTimeZone("GMT+0")); + } /** diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java index fbb3eb7..a334df0 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java @@ -11,6 +11,7 @@ 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.dao.UserActivityDiscount1Mapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; @@ -30,6 +31,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -105,6 +107,9 @@ @Autowired private IUserRedPacketRecordService userRedPacketRecordService; + + @Resource + private UserActivityDiscount1Mapper userActivityDiscount1Mapper; /** * 获取正在进行中的订单 @@ -663,7 +668,7 @@ userId = orderPrivateCar.getUserId(); state = orderPrivateCar.getState(); if(null != driverId){ - pushUtil.pushOrderState(2, driverId, id, orderType, state, 0); + pushUtil.pushOrderState(2, driverId, id, orderType, state, 0, ""); } break; case 2: @@ -672,7 +677,7 @@ userId = orderTaxi.getUserId(); state = orderTaxi.getState(); if(null != driverId){ - pushUtil.pushOrderState(2, driverId, id, orderType, state, 0); + pushUtil.pushOrderState(2, driverId, id, orderType, state, 0, ""); } break; case 3: @@ -683,7 +688,7 @@ if(orderCrossCity.getPayMoney() == null && state == 10){//支付的情况才推送取消 break; }else{ - pushUtil.pushOrderState(2, driverId, id, orderType, state, 0); + pushUtil.pushOrderState(2, driverId, id, orderType, state, 0, ""); } break; case 4: @@ -694,7 +699,7 @@ if(orderLogistics.getPayMoney() == null && state == 10){//支付的情况才推送取消 break; }else{ - pushUtil.pushOrderState(2, driverId, id, orderType, state, 0); + pushUtil.pushOrderState(2, driverId, id, orderType, state, 0, ""); } break; case 5: @@ -705,11 +710,11 @@ if(orderLogistics1.getPayMoney() == null && state == 10){//支付的情况才推送取消 break; }else{ - pushUtil.pushOrderState(2, driverId, id, orderType, state, 0); + pushUtil.pushOrderState(2, driverId, id, orderType, state, 0, ""); } break; } - pushUtil.pushOrderState(1, userId, id, orderType, state, 0); + pushUtil.pushOrderState(1, userId, id, orderType, state, 0, ""); return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); @@ -1053,7 +1058,21 @@ case 1: map = orderPrivateCarService.queryBalance(orderId, uid); OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); - payMoney = orderPrivateCar.getPayMoney(); + payMoney = orderPrivateCar.getOrderMoney(); + UserActivityDiscount1 query = userActivityDiscount1Mapper.query(orderPrivateCar.getCompanyId()); + if(null != query){ + Integer orderNum=orderPrivateCarService.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query.getId()).last(" and to_days(getoffTime) = to_days(now())")); + if(query.getDistance()*1000>orderPrivateCar.getMileage() && query.getOrderNum()>orderNum){ + Double special = query.getSpecial(); + orderPrivateCar.setDiscount(special); + Double orderMoney = orderPrivateCar.getOrderMoney(); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if(orderMoney.compareTo(v) > 0){ + payMoney = v; + } + } + + } break; // case 2: // map = orderTaxiService.queryBalance(orderId, uid); @@ -1064,7 +1083,20 @@ case 4: map = orderLogisticsService.queryBalance(orderId, uid); OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); - payMoney = orderLogistics.getPayMoney(); + payMoney = orderLogistics.getOrderMoney(); + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderLogistics.getCompanyId()); + if(null != query2){ + Integer orderNum=orderLogisticsService.selectCount(new EntityWrapper<OrderLogistics>().eq("userId",orderLogistics.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); + if(query2.getDistance()*1000>orderLogistics.getMileage() && query2.getOrderNum()>orderNum){ + Double special = query2.getLogistics(); + orderLogistics.setDiscount(special); + Double orderMoney = orderLogistics.getOrderMoney(); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if(orderMoney.compareTo(v) > 0){ + payMoney = v; + } + } + } break; // case 5: // map = orderLogisticsService.queryBalance(orderId, uid); @@ -1077,7 +1109,7 @@ map.put("deductionAmount", 0D); }else{ Double deductionAmount = new BigDecimal(payMoney).multiply(redEnvelopePaymentSettings.getDeductionRatio().divide(new BigDecimal(100))).doubleValue(); - map.put("deductionAmount", deductionAmount); + map.put("deductionAmount", aDouble.compareTo(deductionAmount) >= 0 ? deductionAmount : aDouble); } return ResultUtil.success(map); }catch (Exception e){ diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/RedEnvelopeController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/RedEnvelopeController.java index aeff81d..5f733f0 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/RedEnvelopeController.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/RedEnvelopeController.java @@ -74,7 +74,7 @@ @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<MyRedEnvelope>> queryMyRedEnvelope(Integer pageNum, Integer size, HttpServletRequest request){ + public ResultUtil<List<MyRedEnvelope>> queryMyRedEnvelope(Integer pageNum, Integer size, Integer language, HttpServletRequest request){ try { Integer uid = userInfoService.getUserIdFormRedis(request); if(null == uid){ @@ -92,7 +92,7 @@ MyRedEnvelope baseWarpper = new MyRedEnvelope(); baseWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0); baseWarpper.setAmount(null != map.get("money") ? Double.valueOf(String.valueOf(map.get("money"))) : 0); - baseWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : ""); + baseWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : (language == 1 ? "指定发放" : language == 2 ? "Designated distribution" : "Distribution désignée")); baseWarpper.setContent(null != map.get("insertTime") ? String.valueOf(map.get("insertTime")) : ""); baseWarpper.setTotalAmount(sum); baseWarpper.setRemainingAmount(sum1); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java index ee0750b..2fc2388 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java @@ -1341,20 +1341,47 @@ @PostMapping("/api/user/getFleetEngineAuth") @ApiOperation(value = "获取google地图授权token", tags = {"用户端-个人中心"}, notes = "") @ApiImplicitParams({ + @ApiImplicitParam(value = "行程id", name = "tripId", required = true, dataType = "string"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) - public ResultUtil<Map<String, Object>> getFleetEngineAuth(HttpServletRequest request){ + public ResultUtil<Map<String, Object>> getFleetEngineAuth(String tripId, HttpServletRequest request){ try { Integer uid = userInfoService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } - Map<String, Object> s = fleetEngineUtil.fleetEngineAuth(1, uid); + Map<String, Object> s = fleetEngineUtil.fleetEngineAuth(1, tripId); return ResultUtil.success(s); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } - + + + @ResponseBody + @PostMapping("/base/user/textToSpeech") + public String textToSpeech(String languageCode, String text, String fileName){ + try { + String s = TextToSpeechUtil.create(languageCode, text, fileName + ".mp3"); + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/" + fileName + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + return s; + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java index 776556e..a9dffee 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java @@ -378,8 +378,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0, ""); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0, ""); } }).start(); @@ -451,8 +451,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0, ""); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0, ""); } }).start(); @@ -1674,7 +1674,7 @@ if(bo){ continue; } - pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); + pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime(), ""); } } @@ -1745,7 +1745,7 @@ } - pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); + pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime(), ""); } } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java index c1ed62c..c7d6e74 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java @@ -1,16 +1,22 @@ package com.stylefeng.guns.modular.smallLogistics.controller; +import com.stylefeng.guns.core.util.ToolUtil; 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.system.model.Driver; import com.stylefeng.guns.modular.system.model.Region; import com.stylefeng.guns.modular.system.model.UserRedPacketRecord; +import com.stylefeng.guns.modular.system.service.IDriverService; +import com.stylefeng.guns.modular.system.service.IDriverServiceService; import com.stylefeng.guns.modular.system.service.IUserInfoService; import com.stylefeng.guns.modular.system.util.GoogleMap.DistancematrixVo; import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil; import com.stylefeng.guns.modular.system.util.PushUtil; +import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.system.util.ResultUtil; +import com.stylefeng.guns.modular.system.util.TextToSpeechUtil; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import com.stylefeng.guns.modular.system.warpper.OrderTimeInfo; import io.swagger.annotations.Api; @@ -24,12 +30,10 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 小件物流控制器 @@ -45,6 +49,18 @@ private IUserInfoService userInfoService; @Autowired private PushUtil pushUtil; + + @Autowired + private IDriverService driverService; + + @Autowired + private RedisUtil redisUtil; + + + + + + /** @@ -315,7 +331,8 @@ if(null != orderLogistics.getStartServiceTime()){ orderTimeInfo.setStartServiceTime(sdf.format(orderLogistics.getStartServiceTime())); } - long time = System.currentTimeMillis() - orderLogistics.getSnatchOrderTime().getTime() / 60000; + //分钟 + long time = (System.currentTimeMillis() - orderLogistics.getSnatchOrderTime().getTime()) / 60000; int h = Double.valueOf(time / 60).intValue(); long m = time % 60; @@ -333,6 +350,22 @@ Long distance = distancematrix.getDistance(); orderTimeInfo.setAllMileage(Double.valueOf(distance / 1000)); orderTimeInfo.setMileage(orderLogistics.getMileage() / 1000); + String value = redisUtil.getValue("DRIVER" + orderLogistics.getDriverId()); + if(ToolUtil.isNotEmpty(value)){ + String[] split = value.split(","); + distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(split[1]), Double.valueOf(split[0]), orderLogistics.getEndLat(), orderLogistics.getEndLon()); + //分钟 + Long duration = distancematrix.getDuration() / 60; + h = Double.valueOf(duration / 60).intValue(); + m = duration % 60; + String remainingTime = ""; + if(0 == h){ + remainingTime = language == 1 ? m + "分钟" : language == 2 ? m + "-minute" : m + "-minute"; + }else{ + remainingTime = language == 1 ? h + "小时" + m + "分钟" : language == 2 ? h + "-hour" + m + "-minute" : h + "-hour" + m + "-minute"; + } + orderTimeInfo.setRemainingTime(remainingTime); + } return ResultUtil.success(orderTimeInfo); }catch (Exception e){ e.printStackTrace(); @@ -353,11 +386,49 @@ }) public ResultUtil confirmDifferencePrice(Integer orderId, Double difference, Integer status){ OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); - if(1 == status){ + if(2 == status){ orderLogistics.setPriceDifference(difference); orderLogisticsService.updateById(orderLogistics); } - pushUtil.pushPayDifference(2, orderLogistics.getDriverId(), orderId, 4, difference, status); + String audioUrl = ""; + if(3 == status){ + Driver driver = driverService.selectById(orderLogistics.getDriverId()); + Integer language = driver.getLanguage(); + String text = ""; + switch (language){ + case 1: + text = "您的包裹订单申请补差价 GSH " + difference + " 已被用户拒绝,请重新与用户协商"; + break; + case 2: + text = "Your delivery order,Request difference GSH " + difference + " was rejected, please renegotiate with the subscriber"; + break; + case 3: + text = "Votre commande de livraison,Demande de différence GSH " + difference + " a été rejeté, veuillez renégocier avec l’abonné"; + break; + + } + try { + audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", text, "difference" + driver.getId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/difference" + driver.getId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + } + pushUtil.pushPayDifference(2, orderLogistics.getDriverId(), orderId, 4, difference, status, audioUrl); return ResultUtil.success(); } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java index 48ee7ff..b0bad4a 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.mapper.BaseMapper; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; +import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import org.apache.ibatis.annotations.Param; import java.util.Date; @@ -73,4 +74,16 @@ * @return */ List<Map<String, Object>> queryRedEnvelope(@Param("uid") Integer uid); + + + /** + * 根据状态数据订单数据 + * @param uid + * @param orderType + * @param state + * @return + * @throws Exception + */ + List<OrderLogistics> queryByState(@Param("uid") Integer uid, @Param("orderType") Integer orderType, + @Param("type") Integer type, @Param("state") Integer...state) ; } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml index 2e6eabe..f32ab2b 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/mapping/OrderLogisticsMapper.xml @@ -161,7 +161,8 @@ ifnull(discountMoney, 0) as discountMoney, (select price from t_order_logistics_spread where orderLogisticsId = a.id) as differenceMoney, cancelMidway, - tripId + tripId, + remark from t_order_logistics as a where userId = #{uid} and isDelete = 1 order by insertTime desc limit #{pageNum}, #{size} </select> @@ -305,4 +306,22 @@ UNIX_TIMESTAMP(insertTime) as insertTime from t_order_logistics where userId = #{uid} and state in (8, 9) and redPacketId is not null </select> + + + <select id="queryByState" resultType="OrderLogistics"> + select * + from t_order_logistics where isDelete = 1 and isFrozen = 1 and userId = #{uid} + <if test="null != orderType"> + and orderType = #{orderType} + </if> + <if test="null != state"> + and state in + <foreach collection="state" item="item" index="index" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + <if test="null != type"> + and `type` = #{type} + </if> + </select> </mapper> \ No newline at end of file diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java index 0287f8c..aa488f1 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java @@ -287,7 +287,7 @@ @TableField("payMoney") private Double payMoney; /** - * 状态(1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=改派中,12=已支付差价,13=取消待支付) + * 状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付,13=补差价) */ @TableField("state") private Integer state; @@ -426,4 +426,29 @@ */ @TableField("tripId") private String tripId; + /** + * 预估里程 + */ + @TableField("estimatedMileage") + private Double estimatedMileage; + /** + * 司机预估到达预约单时间 + */ + @TableField("estimateArriveTime") + private Date estimateArriveTime; + /** + * 司机预估距离预约点距离(米) + */ + @TableField("estimateArriveMileage") + private Long estimateArriveMileage; + /** + * 去往起点的路程数(米) + */ + @TableField("toStartPointMileage") + private Double toStartPointMileage; + /** + * 起步分钟 + */ + @TableField("startDuration") + private Integer startDuration; } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java index e9457ac..ae4c770 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java @@ -5,6 +5,8 @@ import com.stylefeng.guns.modular.system.model.Region; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; +import com.stylefeng.guns.modular.system.warpper.EndPushWarpper; +import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper; import org.apache.ibatis.annotations.Param; import javax.servlet.http.HttpServletRequest; @@ -305,4 +307,23 @@ * @throws Exception */ List<Map<String, Object>> queryRedEnvelope(Integer language, Integer uid) throws Exception; + + + + /** + * 获取服务中的订单数据 + * @param uid + * @return + * @throws Exception + */ + OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception; + + + /** + * 获取下单推送完后没有司机下单的提醒 + * @param uid + * @return + * @throws Exception + */ + EndPushWarpper queryEndPush(Integer uid) throws Exception; } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java index 5ade0de..cc9ef4f 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java @@ -30,6 +30,8 @@ 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.system.warpper.EndPushWarpper; +import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.model.PaymentRecord; import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; @@ -51,10 +53,7 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileWriter; +import java.io.*; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; @@ -208,6 +207,10 @@ @Autowired private ICarService carService; + + + @Value("${filePath}") + private String filePath; @@ -556,7 +559,42 @@ if(bo){ continue; } - pushUtil.pushOrderState(2, driver.getId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), pushOrder.getPushTime()); + String text = ""; + Integer language1 = driver.getLanguage(); + switch (language1){ + case 1: + text = "收到新的包裹订单,从" + orderLogistics.getStartAddress() + "出发,全程约" + orderLogistics.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new delivery order, starting from " + orderLogistics.getStartAddress() + ", the whole journey is about " + orderLogistics.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de livraison, à partir de " + orderLogistics.getStartAddress() + ", le trajet complet est d’environ " + orderLogistics.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderLogistics.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderLogistics.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + pushUtil.pushOrderState(2, driver.getId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), pushOrder.getPushTime(), audioUrl); } } Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 @@ -647,6 +685,7 @@ orderLogistics.setInsertTime(new Date()); orderLogistics.setTravelTime(new Date()); orderLogistics.setOrderSource(orderSource); + orderLogistics.setRemark(remark); if(orderSource == 2){//扫码下单 Driver driver = driverService.selectById(driverId); if(null == driver){ @@ -684,7 +723,15 @@ CarService query1 = carServiceMapper.query(1, driver.getCarId()); orderLogistics.setServerCarModelId(query1.getServerCarModelId()); orderLogistics.setSnatchOrderTime(new Date()); - + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if(ToolUtil.isNotEmpty(value)) { + String[] split = value.split(","); + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); + //超时时间 + long timeOut = System.currentTimeMillis() + (distancematrix.getDuration() * 1000); + orderLogistics.setEstimateArriveTime(new Date(timeOut)); + orderLogistics.setEstimateArriveMileage(distancematrix.getDistance()); + } driver.setState(3); driverService.updateById(driver); } @@ -692,37 +739,82 @@ orderLogistics.setIsReassign(1); orderLogistics.setIsDelete(1); orderLogistics.setTripId(UUIDUtil.getRandomCode()); + DistancematrixVo distancematrix1 = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), orderLogistics.getEndLat(), orderLogistics.getEndLon()); + Long distance1 = distancematrix1.getDistance(); + orderLogistics.setEstimatedMileage(new BigDecimal(distance1).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); this.insert(orderLogistics); - - String vehicleId = null; - if(null != orderLogistics.getDriverId()){ - Driver driver = driverService.selectById(orderLogistics.getDriverId()); - Car car = carMapper.selectById(driver.getCarId()); - if(!StringUtils.hasLength(car.getVehicleId())){ - car.setVehicleId(UUIDUtil.getRandomCode()); - carMapper.updateById(car); - } - //查询车辆信息,没有则创建信息 - String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); - if(ToolUtil.isEmpty(vehicles)){ - CarModel carModel = carModelMapper.selectById(car.getCarModelId()); - fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); - fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); - } + new Thread(() -> { + try { + String vehicleId = null; + if(null != orderLogistics.getDriverId()){ + Driver driver = driverService.selectById(orderLogistics.getDriverId()); + Car car = carMapper.selectById(driver.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carMapper.updateById(car); + } + //查询车辆信息,没有则创建信息 + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + } - } - //创建行程数据 - fleetEngineUtil.createTrip(vehicleId, 1, orderLogistics.getTripId(), - orderLogistics.getStartLat().toString(), orderLogistics.getStartLon().toString(), orderLogistics.getEndLat().toString(), orderLogistics.getEndLon().toString()); + } + //创建行程数据 + fleetEngineUtil.createTrip(vehicleId, 1, orderLogistics.getTripId(), + orderLogistics.getStartLat().toString(), orderLogistics.getStartLon().toString(), orderLogistics.getEndLat().toString(), orderLogistics.getEndLon().toString()); + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); if(orderSource == 2){//扫码下单 + Driver driver = driverService.selectById(orderLogistics.getDriverId()); + String text = ""; + Integer language1 = driver.getLanguage(); + switch (language1){ + case 1: + text = "收到新的包裹订单,从" + orderLogistics.getStartAddress() + "出发,全程约" + orderLogistics.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new delivery order, starting from " + orderLogistics.getStartAddress() + ", the whole journey is about " + orderLogistics.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de livraison, à partir de " + orderLogistics.getStartAddress() + ", le trajet complet est d’environ " + orderLogistics.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderLogistics.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderLogistics.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + String finalAudioUrl = audioUrl; new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, uid, orderLogistics.getId(), 4, 2, 0); - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, 2, 0); + pushUtil.pushOrderState(1, uid, orderLogistics.getId(), 4, 2, 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, 2, 0, finalAudioUrl); } }).start(); } @@ -793,12 +885,48 @@ dr.setState(3); driverService.updateById(dr); this.updateById(orderLogistics); - + + String text = ""; + Integer language1 = dr.getLanguage(); + switch (language1){ + case 1: + text = "收到新的包裹订单,从" + orderLogistics.getStartAddress() + "出发,全程约" + orderLogistics.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new delivery order, starting from " + orderLogistics.getStartAddress() + ", the whole journey is about " + orderLogistics.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de livraison, à partir de " + orderLogistics.getStartAddress() + ", le trajet complet est d’environ " + orderLogistics.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderLogistics.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderLogistics.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + String finalAudioUrl = audioUrl; new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, uid, orderLogistics.getId(), 4, 2, 0); - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, 2, 0); + pushUtil.pushOrderState(1, uid, orderLogistics.getId(), 4, 2, 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, 2, 0, finalAudioUrl); } }).start(); } @@ -861,9 +989,22 @@ } UserInfo userInfo = userInfoService.selectById(uid); ResultUtil resultUtil = ResultUtil.success(""); - //折扣 - if(null != orderLogistics.getActivityId()){ - orderMoney = orderMoney - orderLogistics.getDiscountMoney(); + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderLogistics.getCompanyId()); + if(null != query2){ + Integer orderNum=this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId",orderLogistics.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); + if(query2.getDistance()*1000>orderLogistics.getMileage() && query2.getOrderNum()>orderNum){ + Double special = query2.getLogistics(); + if(null != special){ + orderLogistics.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if(orderMoney.compareTo(v) > 0){ + orderLogistics.setDiscountMoney(orderMoney - v); + orderLogistics.setActivityId(query2.getId()); + orderMoney = v; + } + } + } } //计算优惠券 @@ -901,11 +1042,12 @@ Double total = userRedPacketRecordService.queryRemainingAmount(uid); List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid) .eq("state", 1).eq("companyId", orderLogistics.getCompanyId()).gt("remainingAmount", 0).orderBy("insertTime", false)); - if(total.compareTo(orderMoney) >= 0){ - BigDecimal deductionRatio = redEnvelopePaymentSettings.getDeductionRatio(); - BigDecimal multiply = new BigDecimal(orderMoney).multiply(deductionRatio.divide(new BigDecimal(100))); - orderLogistics.setRedPacketMoney(multiply.doubleValue()); - orderMoney = orderMoney - multiply.doubleValue(); + + BigDecimal deductionRatio = redEnvelopePaymentSettings.getDeductionRatio(); + BigDecimal multiply1 = new BigDecimal(orderMoney).multiply(deductionRatio.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_EVEN); + if(total.compareTo(multiply1.doubleValue()) >= 0){ + orderLogistics.setRedPacketMoney(multiply1.doubleValue()); + orderMoney = orderMoney - multiply1.doubleValue(); //获取红包id JSONArray jsonArray = new JSONArray(); @@ -913,14 +1055,19 @@ JSONObject jsonObject = new JSONObject(); jsonObject.put("id", userRedPacketRecord.getId()); BigDecimal remainingAmount = new BigDecimal(userRedPacketRecord.getRemainingAmount()); - if(multiply.compareTo(remainingAmount) >= 0){ - multiply = multiply.subtract(remainingAmount); + if(multiply1.compareTo(remainingAmount) >= 0){ + userRedPacketRecord.setRemainingAmount(0D); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecord.setState(2); + multiply1 = multiply1.subtract(remainingAmount).setScale(2, RoundingMode.HALF_EVEN); jsonObject.put("money", remainingAmount); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); }else{ - userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).doubleValue()); - jsonObject.put("money", multiply); + userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply1).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + jsonObject.put("money", multiply1); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); break; } } @@ -936,13 +1083,18 @@ jsonObject.put("id", userRedPacketRecord.getId()); BigDecimal remainingAmount = new BigDecimal(userRedPacketRecord.getRemainingAmount()); if(multiply.compareTo(remainingAmount) >= 0){ - multiply = multiply.subtract(remainingAmount); + userRedPacketRecord.setRemainingAmount(0D); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecord.setState(2); + multiply = multiply.subtract(remainingAmount).setScale(2, RoundingMode.HALF_EVEN); jsonObject.put("money", remainingAmount); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); }else{ - userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).doubleValue()); + userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); jsonObject.put("money", multiply); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); break; } } @@ -1021,21 +1173,6 @@ userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); } - if(null != orderLogistics.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderLogistics.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } - } //添加交易明细 transactionDetailsService.saveData(uid, "包裹下单支付", orderMoney, 2, 1, 1, 4, orderId); @@ -1044,7 +1181,6 @@ orderLogistics.setState(8); orderLogistics.setPayType(3); orderLogistics.setPayMoney(orderMoney); - orderLogistics.setOrderMoney(orderLogistics.getOrderMoney()+orderLogistics.getFreeMoney().doubleValue()); //处理优惠券和红包 if(null != userCouponRecord){ @@ -1096,7 +1232,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); } }).start(); @@ -1392,11 +1529,10 @@ transactionDetailsService.saveData(uid, "包裹下单支付", orderMoney, 2, 1, 1, 4, orderId); userInfoService.updateById(userInfo); - orderLogistics.setState(1);//小件物流先支付后司机抢单 + orderLogistics.setState(8);//小件物流先支付后司机抢单 orderLogistics.setDriverPay(1); orderLogistics.setPayType(4); orderLogistics.setPayMoney(orderMoney); - orderLogistics.setOrderMoney(orderLogistics.getOrderMoney()+orderLogistics.getFreeMoney().doubleValue()); //处理优惠券和红包 if(null != userCouponRecord){ @@ -1412,19 +1548,6 @@ driverService.updateById(driver); } if(null != orderLogistics.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderLogistics.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } Double money = orderLogistics.getRedPacketMoney(); incomeService.saveData(2, orderLogistics.getDriverId(), 7, orderLogistics.getId(), 4, money); driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -1522,7 +1645,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); pushUtil.pushOfflinePayment(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4); } }).start(); @@ -1919,8 +2043,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); } }).start(); @@ -1977,8 +2101,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); } }).start(); @@ -2018,21 +2142,6 @@ userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); } - if(null != orderLogistics.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderLogistics.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } - } query.setState(2); query.setCode(order_id); @@ -2042,7 +2151,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); } }).start(); @@ -2395,8 +2505,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0, ""); } }).start(); @@ -2453,10 +2563,34 @@ map.put("receipt", ""); } if(state == 7){ - Double discountMoney = Double.valueOf(map.get("discountMoney").toString()); + Double discountMoney = 0D; + OrderLogistics orderLogistics = this.selectById(orderId); + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(Integer.valueOf(String.valueOf(map.get("companyId")))); + if(null != query2){ + Integer orderNum=this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId",orderLogistics.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); + if(query2.getDistance()*1000>orderLogistics.getMileage() && query2.getOrderNum()>orderNum){ + Double special = query2.getLogistics(); + Double orderMoney = orderLogistics.getOrderMoney(); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if(orderMoney.compareTo(v) > 0){ + discountMoney = orderMoney - v; + } + } + + } Double orderMoney = Double.valueOf(map.get("orderMoney").toString()); map.put("orderMoney", orderMoney - discountMoney); } + + OrderLogistics orderLogistics = this.selectById(orderId); + long timeOutCancel = 0L; + if(null != orderLogistics.getEstimateArriveTime()){ + CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", orderLogistics.getCompanyId())); + JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); + int driverTimeout = jsonObject.getIntValue("driverTimeout") * 60000; + timeOutCancel = orderLogistics.getEstimateArriveTime().getTime() + driverTimeout; + } + map.put("timeOutCancel", timeOutCancel); } return maps; } @@ -2554,22 +2688,38 @@ integer = orderCancelService.saveData(id, 4, reason, remark, null, amount, 1, 1, uid); } this.deleteTask(id);//删除定时任务 - + + + //修改司机为空闲 + Driver driver = driverService.selectById(orderLogistics.getDriverId()); new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0); + Integer language1 = driver.getLanguage(); + String audioUrl = ""; + switch (language1){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-FR.mp3"; + break; + } + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0, ""); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, orderLogistics.getState() == 12 ? orderLogistics.getState() : 10, 0, audioUrl); } }).start(); - - //修改司机为空闲 - Driver driver = driverService.selectById(orderLogistics.getDriverId()); driver.setState(2); driverService.updateById(driver); } - //修改行程信息 - fleetEngineUtil.updateTrip("CANCELED", null, null, orderLogistics.getTripId(), null, null, null, null); + if(orderLogistics.getState() == 10 || orderLogistics.getState() == 12){ + //修改行程信息 + fleetEngineUtil.updateTrip("CANCELED", null, null, orderLogistics.getTripId(), null, null, null, null); + } //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功取消包裹订单,谢谢使用!" : language == 2 ? "You've cancelled the delivery order successfully, thank you for using I-GO " @@ -2671,7 +2821,7 @@ if(null != query2){ Integer orderNum=this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId",orderLogistics.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); if(query2.getDistance()*1000>orderLogistics.getMileage() && query2.getOrderNum()>orderNum){ - Double special = query2.getSpecial(); + Double special = query2.getLogistics(); orderLogistics.setDiscount(special); Double orderMoney = orderLogistics.getOrderMoney(); double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); @@ -2682,15 +2832,17 @@ } } - Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString()); - map.put("startCity", geocode.get("city")); - geocode = gdMapGeocodingUtil.geocode(map.get("endLon").toString(), map.get("endLat").toString()); - map.put("endCity", geocode.get("city")); +// Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString()); +// map.put("startCity", geocode.get("city")); +// geocode = gdMapGeocodingUtil.geocode(map.get("endLon").toString(), map.get("endLat").toString()); +// map.put("endCity", geocode.get("city")); +// GoogleMapUtil.getReverseGeocode() + String driverId = redisUtil.getValue("DEVICE_" + map.get("driverId")); map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); map.put("orderType", orderLogistics.getType()); - if(state == 6){ + if(state == 8){ map.put("receipt", "http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html"); }else{ map.put("receipt", ""); @@ -2699,9 +2851,14 @@ if(null != map.get("driverId")){ companyId = Integer.valueOf(String.valueOf(map.get("companyId"))); } - CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", companyId)); - JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); - map.put("timeOutCancel", jsonObject.getIntValue("driverTimeout")); + map.put("timeOutCancel", 0); + if(null != orderLogistics.getEstimateArriveTime()){ + CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", companyId)); + JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); + int driverTimeout = jsonObject.getIntValue("driverTimeout"); + long timeOutCancel = orderLogistics.getEstimateArriveTime().getTime() + driverTimeout; + map.put("timeOutCancel", timeOutCancel); + } return map; } @@ -2714,8 +2871,19 @@ @Override public List<Map<String, Object>> queryCoupon(Integer language, Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { OrderLogistics orderLogistics = this.selectById(orderId); - List<Map<String, Object>> list = userCouponRecordService.queryCoupon(language, uid, orderLogistics.getCompanyId(), 1, 4, orderLogistics.getOrderMoney() - orderLogistics.getDiscountMoney(), pageNum, size); - List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(language, uid, orderLogistics.getCompanyId(), 1, 0, orderLogistics.getOrderMoney() - orderLogistics.getDiscountMoney(), pageNum, size); + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderLogistics.getCompanyId()); + double v = orderLogistics.getOrderMoney(); + if(null != query2){ + Integer orderNum=this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId",orderLogistics.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); + if(query2.getDistance()*1000>orderLogistics.getMileage() && query2.getOrderNum()>orderNum){ + Double special = query2.getLogistics(); + orderLogistics.setDiscount(special); + Double orderMoney = orderLogistics.getOrderMoney(); + v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + } + } + List<Map<String, Object>> list = userCouponRecordService.queryCoupon(language, uid, orderLogistics.getCompanyId(), 1, 4, v, pageNum, size); + List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(language, uid, orderLogistics.getCompanyId(), 1, 0, v, pageNum, size); list.addAll(list1); return list; } @@ -2745,25 +2913,26 @@ JSONObject object = JSON.parseObject(query.getContent()); long t = object.getInteger("driverTimeout") * 60000L; //司机超时未到达起点,免费取消 - if(orderLogistics.getState() < 3 && orderLogistics.getSnatchOrderTime().getTime() + t < System.currentTimeMillis()){ + if(orderLogistics.getState() <= 3 && orderLogistics.getEstimateArriveTime().getTime() + t <= System.currentTimeMillis()){ baseWarpper.setAmount(amount); return ResultUtil.success(baseWarpper); } - JSONObject order = object.getJSONObject("order"); - long m = order.getInteger("orderAcceptanceTime") * 60000L; - //超过免费时间,计算费用 - if(orderLogistics.getSnatchOrderTime().getTime() + m < System.currentTimeMillis()){ - BigDecimal money = order.getBigDecimal("money"); - if(null != orderLogistics.getSetOutTime()){ + //非服务中且未超时 + if(orderLogistics.getState() != 5){ + JSONObject order = object.getJSONObject("order"); + long m = order.getInteger("orderAcceptanceTime") * 60000L; + //超过免费时间,且没有超时,计算费用 + if(orderLogistics.getSnatchOrderTime().getTime() + m < System.currentTimeMillis() && orderLogistics.getEstimateArriveTime().getTime() + t > System.currentTimeMillis()){ + BigDecimal money = order.getBigDecimal("money"); //里程费 - BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderLogistics.getMileage() / 1000)); + BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderLogistics.getToStartPointMileage() / 1000)); //时长费 - int s = Double.valueOf((System.currentTimeMillis() - orderLogistics.getSetOutTime().getTime()) / 60000).intValue(); + int s = Double.valueOf((System.currentTimeMillis() - orderLogistics.getSnatchOrderTime().getTime()) / 60000).intValue(); BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); money = money.add(durationFee).add(mileageFee); + amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } - amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } baseWarpper.setAmount(amount); return ResultUtil.success(baseWarpper); @@ -2901,18 +3070,35 @@ orderCancelService.updateById(orderCancel); if(null != orderLogistics.getDriverId()){ - BigDecimal c =new BigDecimal(amount);//司机收入 - incomeService.saveData(2, orderLogistics.getDriverId(), 3, 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); + //添加已收入明细 + Company company = companyService.selectById(orderLogistics.getCompanyId()); + Double speMoney = company.getSameLogisticsMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(amount).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + d = new BigDecimal(amount).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(amount).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderLogistics.getCompanyId(), 3, orderLogistics.getId(), 4, d.doubleValue()); + if(c.doubleValue() > 0){ + incomeService.saveData(2, orderLogistics.getDriverId(), 3, 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); + } this.deleteTask(id);//删除定时任务 - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0, ""); + }else{ + incomeService.saveData(1, orderLogistics.getCompanyId(), 3, orderLogistics.getId(), 4, amount.doubleValue()); } - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0, ""); //添加消息 @@ -2962,21 +3148,38 @@ query1.setState(2); orderCancelService.updateById(query1); } - - + + Double amount = query.getAmount(); if(null != orderLogistics.getDriverId()){ - BigDecimal c =new BigDecimal(query.getAmount());//司机收入 - incomeService.saveData(2, orderLogistics.getDriverId(), 3, 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); + //添加已收入明细 + Company company = companyService.selectById(orderLogistics.getCompanyId()); + Double speMoney = company.getSameLogisticsMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(amount).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + d = new BigDecimal(amount).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(amount).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderLogistics.getCompanyId(), 3, orderLogistics.getId(), 4, d.doubleValue()); + if(c.doubleValue() > 0){ + incomeService.saveData(2, orderLogistics.getDriverId(), 3, 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); + } this.deleteTask(orderLogistics.getId());//删除定时任务 - pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0); + pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0, ""); + }else{ + incomeService.saveData(1, orderLogistics.getCompanyId(), 3, orderLogistics.getId(), 4, amount.doubleValue()); } - pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0); + pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), 4, orderLogistics.getState(), 0, ""); //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2 @@ -3003,7 +3206,22 @@ orderLogistics.setDestinationLat(endLat); orderLogistics.setDestinationLon(endLon); this.updateById(orderLogistics); - pushUtil.pushModifyAddress(2, orderLogistics.getDriverId(), orderId, 1, 1); + + Driver driver = driverService.selectById(orderLogistics.getDriverId()); + Integer language1 = driver.getLanguage(); + String audioUrl = ""; + switch (language1){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-FR.mp3"; + break; + } + pushUtil.pushModifyAddress(2, orderLogistics.getDriverId(), orderId, 4, 1, audioUrl); }else{ orderLogistics.setEndAddress(endAddress); orderLogistics.setEndLat(Double.valueOf(endLat)); @@ -3045,9 +3263,6 @@ UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); userRedPacketRecord.setMoney(money); userRedPacketRecord.setRemainingAmount(money); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); userRedPacketRecord.setInsertTime(new Date()); userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); userRedPacketRecord.setState(0); @@ -3180,4 +3395,139 @@ } return list; } + + + /** + * 获取服务中的订单数据 + * @param uid + * @return + * @throws Exception + */ + @Override + public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { + OrderLogistics orderLogistics = this.selectById(orderId); + //计算预计距离和剩余时间 + String value = redisUtil.getValue("DRIVER" + orderLogistics.getDriverId()); + String d = "0"; + String t = "0"; + if(null == value || "".equals(value)){ + System.err.println("司机没有上传位置信息"); + + //调用获取轨迹中的数据 + File file = new File(filePath + orderId + "_4.txt"); + if(file.exists()){ + //读取文件(字符流) + BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); + //循环取出数据 + String str = null; + StringBuffer sb = new StringBuffer(); + while ((str = in.readLine()) != null) { + sb.append(str); + } + List<OrderPosition> list = JSONArray.parseArray(sb.toString(), OrderPosition.class); + if(list.size() > 0){ + OrderPosition orderPosition = list.get(list.size() - 1); + value = orderPosition.getLon() + "," + orderPosition.getLat(); + } + } + } + + String lnt = "0"; + String lat = "0"; + if(ToolUtil.isNotEmpty(value)){ + lnt = value.split(",")[0]; + lat = value.split(",")[1]; + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), Double.valueOf(lat), Double.valueOf(lnt)); + + if(null == distancematrix){ + System.err.println("查询距离出错了"); + }else if(distancematrix.getDistance() == 0){ + System.err.println("未获取到有效的距离"); + }else{ + d = new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distancematrix.getDuration()).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + } + + OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); + orderServerWarpper.setOrderId(orderLogistics.getId()); + orderServerWarpper.setOrderType(4); + orderServerWarpper.setState(orderLogistics.getState()); + orderServerWarpper.setLon(lnt); + orderServerWarpper.setLat(lat); + orderServerWarpper.setReassignNotice(orderLogistics.getReassignNotice()); + if(orderLogistics.getState() == 2 || orderLogistics.getState() == 3){//前往预约地 + orderServerWarpper.setReservationMileage(d); + orderServerWarpper.setReservationTime(t); + orderServerWarpper.setServedMileage("0"); + orderServerWarpper.setServedTime("0"); + orderServerWarpper.setLaveMileage("0"); + orderServerWarpper.setLaveTime("0"); + } + if(orderLogistics.getState() == 5 || orderLogistics.getState() == 6){//服务中 + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(lat), Double.valueOf(lnt), orderLogistics.getEndLat(), orderLogistics.getEndLon()); + if(null == distancematrix){ + System.err.println("查询距离出错了"); + }else if(distancematrix.getDistance() == 0){ + System.err.println("未获取到有效的距离"); + }else{ + d = new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distancematrix.getDuration()).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage("0"); + orderServerWarpper.setReservationTime("0"); + orderServerWarpper.setServedMileage(String.valueOf((null == orderLogistics.getMileage() ? 0 : orderLogistics.getMileage()) / 1000)); + orderServerWarpper.setServedTime("0"); + if(null != orderLogistics.getStartServiceTime()){ + orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderLogistics.getStartServiceTime().getTime()) / 60000).intValue() + ""); + } + orderServerWarpper.setLaveMileage(d); + orderServerWarpper.setLaveTime(t); + } + File file = new File(filePath + orderId + "_4.txt"); + if(file.exists()){ + //读取文件(字符流) + BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); + //循环取出数据 + String str = null; + StringBuffer sb = new StringBuffer(); + while ((str = in.readLine()) != null) { + sb.append(str); + } + List<OrderPosition> list = JSONArray.parseArray(sb.toString(), OrderPosition.class); + orderServerWarpper.setOrderPositionList(JSONObject.toJSONString(list)); + } + return orderServerWarpper; + } + + + /** + * 获取下单推送完后没有司机接单的提醒 + * @return + * @throws Exception + */ + @Override + public EndPushWarpper queryEndPush(Integer uid) throws Exception { + List<OrderLogistics> list = orderLogisticsMapper.queryByState(uid, null, null, 1); + EndPushWarpper endPushWarpper = new EndPushWarpper(); + if(list.size() > 0){ + OrderLogistics orderPrivateCar = list.get(0); + if(!orderIds.contains(orderPrivateCar.getId())){ + endPushWarpper.setOrderId(orderPrivateCar.getId()); + endPushWarpper.setOrderType(4); + endPushWarpper.setState(1); + List<PushOrder> querys = pushOrderService.querys(null, 2, orderPrivateCar.getCompanyId());//获取需要推送的次数 + int time = 0; + for(int i = 1; i <= querys.size(); i++){ + PushOrder pushOrder = pushOrderService.querys(i, 2, orderPrivateCar.getCompanyId()).get(0); + time += pushOrder.getPushTime() * 1000; + } + //当前时间减去推单总时间大于下单时间 + if((System.currentTimeMillis() - time) > orderPrivateCar.getInsertTime().getTime()){ + endPushWarpper.setState(2); + } + } + } + return endPushWarpper; + } } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml index 75870fa..3feb865 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml @@ -347,7 +347,8 @@ oldState as oldState, isFrozen, cancelMidway, - tripId + tripId, + remark from t_order_private_car where userId = #{uid} and isDelete = 1 order by insertTime desc limit #{pageNum}, #{size} </select> diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java index 0a0a36e..e9ea27b 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java @@ -147,6 +147,11 @@ @TableField("getoffTime") private Date getoffTime; /** + * 去往起点的路程数(米) + */ + @TableField("toStartPointMileage") + private Double toStartPointMileage; + /** * 行驶里程数(米) */ @TableField("mileage") @@ -415,5 +420,19 @@ */ @TableField("tripId") private String tripId; - + /** + * 预估里程 + */ + @TableField("estimatedMileage") + private Double estimatedMileage; + /** + * 司机预估到达预约单时间 + */ + @TableField("estimateArriveTime") + private Date estimateArriveTime; + /** + * 司机预估距离预约点距离(米) + */ + @TableField("estimateArriveMileage") + private Long estimateArriveMileage; } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 0d97fbf..d27b374 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -252,12 +252,12 @@ return ResultUtil.error(language == 1 ? "有未完成的订单" : language == 2 ? "Uncompleted order(s)" : "Commande(s) non complétée(s)"); } - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); if(orderPrivateCars.size() > 0 && reservation == 2){ return ResultUtil.error(language == 1 ? "有未完成的订单" : language == 2 ? "Uncompleted order(s)" : "Commande(s) non complétée(s)"); } - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7,12); + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7, 12); if(orderPrivateCars.size() > 0){ BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setState(7); @@ -348,7 +348,17 @@ CarService query1 = carServiceMapper.query(1, driver.getCarId()); orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); orderPrivateCar.setSnatchOrderTime(new Date()); - + if(orderPrivateCar.getOrderType() == 1){ + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if(ToolUtil.isNotEmpty(value)) { + String[] split = value.split(","); + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); + //超时时间 + long timeOut = System.currentTimeMillis() + (distancematrix.getDuration() * 1000); + orderPrivateCar.setEstimateArriveTime(new Date(timeOut)); + orderPrivateCar.setEstimateArriveMileage(distancematrix.getDistance()); + } + } driver.setState(3); driverService.updateById(driver); } @@ -356,37 +366,82 @@ orderPrivateCar.setIsReassign(1); orderPrivateCar.setIsDelete(1); orderPrivateCar.setTripId(UUIDUtil.getRandomCode()); + DistancematrixVo distancematrix1 = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), orderPrivateCar.getEndLat(), orderPrivateCar.getEndLon()); + Long distance1 = distancematrix1.getDistance(); + orderPrivateCar.setEstimatedMileage(new BigDecimal(distance1).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); this.insert(orderPrivateCar); - String vehicleId = null; - if(null != orderPrivateCar.getDriverId()){ - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - Car car = carMapper.selectById(driver.getCarId()); - if(!StringUtils.hasLength(car.getVehicleId())){ - car.setVehicleId(UUIDUtil.getRandomCode()); - carMapper.updateById(car); + new Thread(() -> { + try { + String vehicleId = null; + if(null != orderPrivateCar.getDriverId()){ + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + Car car = carMapper.selectById(driver.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carMapper.updateById(car); + } + //查询车辆信息,没有则创建信息 + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + } + } + //创建行程数据 + fleetEngineUtil.createTrip(vehicleId, 1, orderPrivateCar.getTripId(), + orderPrivateCar.getStartLat().toString(), orderPrivateCar.getStartLon().toString(), orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); + }catch (Exception e){ + e.printStackTrace(); } - //查询车辆信息,没有则创建信息 - String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); - if(ToolUtil.isEmpty(vehicles)){ - CarModel carModel = carModelMapper.selectById(car.getCarModelId()); - fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); - fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); - } - - } - //创建行程数据 - fleetEngineUtil.createTrip(vehicleId, 1, orderPrivateCar.getTripId(), - orderPrivateCar.getStartLat().toString(), orderPrivateCar.getStartLon().toString(), orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); + }).start(); if(orderSource == 2){//扫码下单 + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + Integer language1 = driver.getLanguage(); + String text = ""; + switch (language1){ + case 1: + text = "收到新的打车订单,从" + orderPrivateCar.getStartAddress() + "出发,全程约" + orderPrivateCar.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new ride order, starting from " + orderPrivateCar.getStartAddress() + ", the whole journey is about " + orderPrivateCar.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + String finalAudioUrl = audioUrl; new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0, finalAudioUrl); } }).start(); } @@ -457,12 +512,49 @@ dr.setState(3); driverService.updateById(dr); this.updateById(orderPrivateCar); - + + Integer language1 = dr.getLanguage(); + String text = ""; + switch (language1){ + case 1: + text = "收到新的打车订单,从" + orderPrivateCar.getStartAddress() + "出发,全程约" + orderPrivateCar.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new ride order, starting from " + orderPrivateCar.getStartAddress() + ", the whole journey is about " + orderPrivateCar.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + + String finalAudioUrl = audioUrl; new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0, finalAudioUrl); } }).start(); } @@ -577,46 +669,53 @@ JSONObject object = JSON.parseObject(query.getContent()); long t = object.getInteger("driverTimeout") * 60000L; //司机超时未到达起点,免费取消 - if(orderPrivateCar.getState() < 3 && orderPrivateCar.getSnatchOrderTime().getTime() + t < System.currentTimeMillis()){ - baseWarpper.setAmount(amount); - return ResultUtil.success(baseWarpper); - } - //普通单 - if(1 == orderPrivateCar.getOrderType()){ - JSONObject order = object.getJSONObject("order"); - long m = order.getInteger("orderAcceptanceTime") * 60000L; - //超过免费时间,计算费用 - if(orderPrivateCar.getSnatchOrderTime().getTime() + m < System.currentTimeMillis()){ - BigDecimal money = order.getBigDecimal("money"); - if(null != orderPrivateCar.getSetOutTime()){ - //里程费 - BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getMileage() / 1000)); - //时长费 - int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSetOutTime().getTime()) / 60000).intValue(); - BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); - money = money.add(durationFee).add(mileageFee); - } - amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if(orderPrivateCar.getOrderType() == 1){ + if(orderPrivateCar.getState() <= 3 && orderPrivateCar.getEstimateArriveTime().getTime() + t <= System.currentTimeMillis()){ + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); + } + }else{ + if(orderPrivateCar.getState() <= 3 && orderPrivateCar.getTravelTime().getTime() + t <= System.currentTimeMillis()){ + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); } } - //预约单 - if(2 == orderPrivateCar.getOrderType()){ - JSONObject order = object.getJSONObject("reservationOrder"); - long m = order.getInteger("orderAcceptanceTime") * 60000L; - //超过免费时间,计算费用 - if(System.currentTimeMillis() + m > orderPrivateCar.getTravelTime().getTime()){ - BigDecimal money = order.getBigDecimal("money"); - if(null != orderPrivateCar.getSetOutTime()){ + + //非服务中且未超时 + if(orderPrivateCar.getState() != 5){ + //普通单 + if(1 == orderPrivateCar.getOrderType()){ + JSONObject order = object.getJSONObject("order"); + long m = order.getInteger("orderAcceptanceTime") * 60000L; + //超过免费时间,且没有超时,计算费用 + if(orderPrivateCar.getSnatchOrderTime().getTime() + m < System.currentTimeMillis() && orderPrivateCar.getEstimateArriveTime().getTime() + t > System.currentTimeMillis()){ + BigDecimal money = order.getBigDecimal("money"); //里程费 - BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getMileage() / 1000)); + BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getToStartPointMileage() / 1000)); //时长费 - int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSetOutTime().getTime()) / 60000).intValue(); + int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSnatchOrderTime().getTime()) / 60000).intValue(); + BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); + money = money.add(durationFee).add(mileageFee); + amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + } + } + //预约单 + if(2 == orderPrivateCar.getOrderType()){ + JSONObject order = object.getJSONObject("reservationOrder"); + long m = order.getInteger("orderAcceptanceTime") * 60000L; + //超过免费时间,且没有超时,计算费用 + if(System.currentTimeMillis() + m > orderPrivateCar.getTravelTime().getTime() && orderPrivateCar.getTravelTime().getTime() + t > System.currentTimeMillis()){ + BigDecimal money = order.getBigDecimal("money"); + //里程费 + BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getToStartPointMileage() / 1000)); + //时长费 + int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSnatchOrderTime().getTime()) / 60000).intValue(); BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); //预定费用 BigDecimal reservationFee = order.getBigDecimal("reservationFee"); money = money.add(durationFee).add(mileageFee).add(reservationFee); + amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } - amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } } baseWarpper.setAmount(amount); @@ -708,25 +807,40 @@ integer = orderCancelService.saveData(id, 1, reason, remark, null, amount, 1, 1, uid); } this.deleteTask(id);//删除定时任务 - + //修改司机为空闲 + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + Integer language1 = driver.getLanguage(); + String audioUrl = ""; + switch (language1){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-FR.mp3"; + break; + } + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState() == 12 ? orderPrivateCar.getState() : 10, 0, audioUrl); System.err.println("推送取消操作---------------------"); } }).start(); - //修改司机为空闲 - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setState(2); driverService.updateById(driver); } //修改行程信息 - fleetEngineUtil.updateTrip("CANCELED", null, null, orderPrivateCar.getTripId(), null, null, null, null); + if(orderPrivateCar.getState() == 10 || orderPrivateCar.getState() == 12){ + fleetEngineUtil.updateTrip("CANCELED", null, null, orderPrivateCar.getTripId(), null, null, null, null); + } - //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功取消出行订单,谢谢使用!" : language == 2 ? "You've cancelled the ride order successfully, thank you for using I-GO " : "Vous avez annulé la commande de course avec succès, merci d’utiliser I-GO", orderPrivateCar.getUserId(), 1); Map<String, Object> map = new HashMap<>(); @@ -762,6 +876,9 @@ } Double amount = queryCancleAmount(id, language).getData().getAmount(); + if(orderPrivateCar.getState() == 12){ + amount = orderCancel.getMoney(); + } if(0 < amount){ if(payType == 1){//手机支付 orderCancel.setPayType(1); @@ -841,18 +958,35 @@ orderCancelService.updateById(orderCancel); if(null != orderPrivateCar.getDriverId()){ - BigDecimal c =new BigDecimal(amount);//司机收入 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(amount).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + d = new BigDecimal(amount).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(amount).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, d.doubleValue()); + if(c.doubleValue() > 0){ + incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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); + } this.deleteTask(id);//删除定时任务 - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + }else{ + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, amount.doubleValue()); } - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2 @@ -902,7 +1036,44 @@ if(bo){ continue; } - pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); + + String text = ""; + Integer language = driver.getLanguage(); + switch (language){ + case 1: + text = "收到新的打车订单,从" + orderPrivateCar.getStartAddress() + "出发,全程约" + orderPrivateCar.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new ride order, starting from " + orderPrivateCar.getStartAddress() + ", the whole journey is about " + orderPrivateCar.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + + pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime(), audioUrl); } } Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 @@ -1021,12 +1192,14 @@ Integer orderNum=this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); if(query2.getDistance()*1000>orderPrivateCar.getMileage() && query2.getOrderNum()>orderNum){ Double special = query2.getSpecial(); - orderPrivateCar.setDiscount(special); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderPrivateCar.setDiscountMoney(orderMoney - v); - orderPrivateCar.setActivityId(query2.getId()); - orderMoney = v; + if(null != special){ + orderPrivateCar.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if(orderMoney.compareTo(v) > 0){ + orderPrivateCar.setDiscountMoney(orderMoney - v); + orderPrivateCar.setActivityId(query2.getId()); + orderMoney = v; + } } } } @@ -1060,17 +1233,18 @@ orderMoney=new BigDecimal(orderMoney).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); //计算红包 - if(null != redDeduction && 1 == redDeduction){ + if(null != redDeduction && 1 == redDeduction && null == orderPrivateCar.getRedPacketId()){ RedEnvelopePaymentSettings redEnvelopePaymentSettings = redEnvelopePaymentSettingsService.getRedEnvelopePaymentSettings(); if(null != redEnvelopePaymentSettings){ Double total = userRedPacketRecordService.queryRemainingAmount(uid); List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid) .eq("state", 1).eq("companyId", orderPrivateCar.getCompanyId()).gt("remainingAmount", 0).orderBy("insertTime", false)); - if(total.compareTo(orderMoney) >= 0){ - BigDecimal deductionRatio = redEnvelopePaymentSettings.getDeductionRatio(); - BigDecimal multiply = new BigDecimal(orderMoney).multiply(deductionRatio.divide(new BigDecimal(100))); - orderPrivateCar.setRedPacketMoney(multiply.doubleValue()); - orderMoney = orderMoney - multiply.doubleValue(); + + BigDecimal deductionRatio = redEnvelopePaymentSettings.getDeductionRatio(); + BigDecimal multiply1 = new BigDecimal(orderMoney).multiply(deductionRatio.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_EVEN); + if(total.compareTo(multiply1.doubleValue()) >= 0){ + orderPrivateCar.setRedPacketMoney(multiply1.doubleValue()); + orderMoney = orderMoney - multiply1.doubleValue(); //获取红包id JSONArray jsonArray = new JSONArray(); @@ -1078,14 +1252,19 @@ JSONObject jsonObject = new JSONObject(); jsonObject.put("id", userRedPacketRecord.getId()); BigDecimal remainingAmount = new BigDecimal(userRedPacketRecord.getRemainingAmount()); - if(multiply.compareTo(remainingAmount) >= 0){ - multiply = multiply.subtract(remainingAmount); + if(multiply1.compareTo(remainingAmount) >= 0){ + userRedPacketRecord.setRemainingAmount(0D); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecord.setState(2); + multiply1 = multiply1.subtract(remainingAmount).setScale(2, RoundingMode.HALF_EVEN); jsonObject.put("money", remainingAmount); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); }else{ - userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).doubleValue()); - jsonObject.put("money", multiply); + userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply1).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + jsonObject.put("money", multiply1); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); break; } } @@ -1101,13 +1280,18 @@ jsonObject.put("id", userRedPacketRecord.getId()); BigDecimal remainingAmount = new BigDecimal(userRedPacketRecord.getRemainingAmount()); if(multiply.compareTo(remainingAmount) >= 0){ - multiply = multiply.subtract(remainingAmount); + userRedPacketRecord.setRemainingAmount(0D); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecord.setState(2); + multiply = multiply.subtract(remainingAmount).setScale(2, RoundingMode.HALF_EVEN); jsonObject.put("money", remainingAmount); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); }else{ - userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).doubleValue()); + userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); jsonObject.put("money", multiply); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); break; } } @@ -1184,28 +1368,12 @@ orderPrivateCar.setState(8); orderPrivateCar.setPayType(3); orderPrivateCar.setPayMoney(orderMoney); - orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); //处理优惠券和红包 if(null != userCouponRecord){ userCouponRecord.setState(2); userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); - } - if(null != orderPrivateCar.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } } if(orderPrivateCar.getIsplatPay()==1){ @@ -1512,8 +1680,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); } }).start(); @@ -1535,7 +1703,6 @@ orderPrivateCar.setPayType(4); orderPrivateCar.setDriverPay(2); orderPrivateCar.setPayMoney(orderMoney); - orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); @@ -1552,20 +1719,8 @@ driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driverService.updateById(driver); } + if(null != orderPrivateCar.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } Double money = orderPrivateCar.getRedPacketMoney(); incomeService.saveData(2, orderPrivateCar.getDriverId(), 7, orderPrivateCar.getId(), 1, money); driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -1623,22 +1778,22 @@ if(null != settlementAllocation){ JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); Double maxPrice = jsonObject.getDouble("maxPrice"); - Integer type1 = jsonObject.getInteger("type"); - if(1 == type1){ + if(null != 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 = settlementRecordService.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", orderPrivateCar.getDriverId()) - .eq("type", type1).eq("paymentStatus", 1).last(" and day = DATE_FORMAT(now(), '%Y-%m-%d')")); + .eq("type", 1).eq("paymentStatus", 1).last(" and day = DATE_FORMAT(now(), '%Y-%m-%d')")); if(null == settlementRecord){ settlementRecord = new SettlementRecord(); settlementRecord.setDay(new Date()); settlementRecord.setDriverId(orderPrivateCar.getDriverId()); - settlementRecord.setType(type1); + settlementRecord.setType(1); settlementRecord.setPaymentStatus(1); settlementRecord.setPayMoney(total.doubleValue()); settlementRecord.setInsertTime(new Date()); @@ -1936,8 +2091,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); pushUtil.pushOfflinePayment(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1); } }).start(); @@ -1983,9 +2138,6 @@ UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); userRedPacketRecord.setMoney(money); userRedPacketRecord.setRemainingAmount(money); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); userRedPacketRecord.setInsertTime(new Date()); userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); userRedPacketRecord.setState(0); @@ -2135,20 +2287,38 @@ query1.setState(2); orderCancelService.updateById(query1); } - + + Double amount = query.getAmount(); if(null != orderPrivateCar.getDriverId()){ - BigDecimal c =new BigDecimal(query.getAmount());//司机收入 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(amount).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + d = new BigDecimal(amount).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(amount).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, d.doubleValue()); + if(c.doubleValue() > 0){ + incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, 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); + } this.deleteTask(orderPrivateCar.getId());//删除定时任务 - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + }else{ + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, amount.doubleValue()); } - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2 @@ -2184,22 +2354,6 @@ userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); } - if(null != orderPrivateCar.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - } - userRedPacketRecord.setEndTime(new Date()); - userRedPacketRecordService.updateById(userRedPacketRecord); - } - } - query.setState(2); query.setCode(order_id); @@ -2508,8 +2662,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); } }).start(); @@ -2549,6 +2703,20 @@ }else{ map.put("receipt", ""); } + + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); + long timeOutCancel = 0L; + if(null != orderPrivateCar.getEstimateArriveTime()){ + CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", orderPrivateCar.getCompanyId())); + JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); + int driverTimeout = jsonObject.getIntValue("driverTimeout") * 60000; + if(orderPrivateCar.getOrderType() == 1){ + timeOutCancel = orderPrivateCar.getEstimateArriveTime().getTime() + driverTimeout; + }else{ + timeOutCancel = orderPrivateCar.getTravelTime().getTime() + driverTimeout; + } + } + map.put("timeOutCancel", timeOutCancel); } return maps; } @@ -2571,13 +2739,13 @@ @Override public Map<String, Object> queryOrderInfo(Integer language, Integer orderId) throws Exception { Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId); + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); if(null != map.get("travelTime")){ String travelTime = map.get("travelTime").toString(); map.put("travelTime", DateUtil.conversionFormat1(language, travelTime)); } 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); } @@ -2589,7 +2757,6 @@ map.put("couponMoney", null); } if(Integer.valueOf(String.valueOf(map.get("state"))) == 7){ - OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(Integer.valueOf(String.valueOf(map.get("companyId")))); if(null != query2){ Integer orderNum=this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); @@ -2618,9 +2785,22 @@ if(null != map.get("driverId")){ companyId = Integer.valueOf(String.valueOf(map.get("companyId"))); } + + long timeOutCancel = 0L; + long driverTimeOut = 0L; CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", companyId)); JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); - map.put("timeOutCancel", jsonObject.getIntValue("driverTimeout")); + int driverTimeout = jsonObject.getIntValue("driverTimeout") * 60000; + if(orderPrivateCar.getOrderType() == 1 && null != orderPrivateCar.getEstimateArriveTime()){ + timeOutCancel = orderPrivateCar.getEstimateArriveTime().getTime() + driverTimeout; + driverTimeOut = orderPrivateCar.getEstimateArriveTime().getTime(); + }else{ + timeOutCancel = orderPrivateCar.getTravelTime().getTime() + driverTimeout; + driverTimeOut = orderPrivateCar.getTravelTime().getTime(); + } + + map.put("timeOutCancel", timeOutCancel); + map.put("driverTimeOut", driverTimeOut); return map; } @@ -2804,7 +2984,22 @@ orderPrivateCar.setDestinationLat(endLat); orderPrivateCar.setDestinationLon(endLon); this.updateById(orderPrivateCar); - pushUtil.pushModifyAddress(2, orderPrivateCar.getDriverId(), orderId, 1, 1); + + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + Integer language1 = driver.getLanguage(); + String audioUrl = ""; + switch (language1){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-FR.mp3"; + break; + } + pushUtil.pushModifyAddress(2, orderPrivateCar.getDriverId(), orderId, 1, 1, audioUrl); }else{ orderPrivateCar.setEndAddress(endAddress); orderPrivateCar.setEndLat(Double.valueOf(endLat)); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml index 2a45c08..c67ecda 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml @@ -84,71 +84,7 @@ <select id="queryIdleDriver" resultType="Driver"> select - id as id, - account as account, - jobNumber as jobNumber, - phone as phone, - phoneOperator as phoneOperator, - password as password, - lastName as lastName, - firstName as firstName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + * from t_driver where flag != 3 and state = 2 and authState = 2 <if test="null != companyId"> @@ -175,71 +111,7 @@ <select id="queryIdleDriver_" resultType="Driver"> select * from ( select - id as id, - account as account, - jobNumber as jobNumber, - phone as phone, - phoneOperator as phoneOperator, - password as password, - lastName as lastName, - firstName as firstName, - sex as sex, - idCard as idCard, - companyId as companyId, - franchiseeId as franchiseeId, - headImgUrl as headImgUrl, - faceImgUrl as faceImgUrl, - idCardImgUrl1 as idCardImgUrl1, - idCardImgUrl2 as idCardImgUrl2, - placeOfEmployment as placeOfEmployment, - birthday as birthday, - bankCardNumber as bankCardNumber, - driverNationality as driverNationality, - driverNation as driverNation, - driverMaritalStatus as driverMaritalStatus, - driverLanguageLevel as driverLanguageLevel, - driverEducation as driverEducation, - driverCensus as driverCensus, - driverAddress as driverAddress, - driverContactAddress as driverContactAddress, - driverAge as driverAge, - driveCard as driveCard, - driveCardImgUrl1 as driveCardImgUrl1, - driveCardImgUrl2 as driveCardImgUrl2, - driverType as driverType, - getDriverLicenseDate as getDriverLicenseDate, - driverLicenseOn as driverLicenseOn, - driverLicenseOff as driverLicenseOff, - taxiDriver as taxiDriver, - taxiAptitudeCard as taxiAptitudeCard, - networkCarlssueImg as networkCarlssueImg, - networkCarlssueOrganization as networkCarlssueOrganization, - networkCarlssueDate as networkCarlssueDate, - getNetworkCarProofDate as getNetworkCarProofDate, - networkCarProofOn as networkCarProofOn, - networkCarProofOff as networkCarProofOff, - registerDate as registerDate, - fullTimeDriver as fullTimeDriver, - inDriverBlacklist as inDriverBlacklist, - commercialType as commercialType, - contractCompany as contractCompany, - contractOn as contractOn, - contractOff as contractOff, - emergencyContact as emergencyContact, - emergencyContactPhone as emergencyContactPhone, - emergencyContactAddress as emergencyContactAddress, - remark as remark, - isPlatCar as isPlatCar, - carId as carId, - authState as authState, - state as state, - addType as addType, - balance as balance, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + * from t_driver where flag != 3 and state = 2 and authState = 2 <if test="null != companyId"> diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml index 90270d6..0c52a1d 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml @@ -13,7 +13,7 @@ - <select id="queryPhones" resultType="Phone"> + <select id="queryPhones" resultType="com.stylefeng.guns.modular.system.model.Phone"> select id as id, type as type, diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml index 5aec125..70268ae 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml @@ -15,7 +15,7 @@ select id as id, content as content - from t_system_price where companyId = #{companyId} + from t_system_price where companyId = #{companyId} and state = 1 <if test="null != type"> and `type` = #{type} </if> diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml index 7789d90..17def54 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml @@ -28,7 +28,6 @@ b.startMoney as startMoney, b.endMoney as endMoney, b.companyId as companyId, - b.effective as effective, a.totalPrice as totalPrice, a.lavePrice as lavePrice from t_user_activity_redenvelope a diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml index 035e8c7..9b33913 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml @@ -47,113 +47,20 @@ </select> <select id="queryByPhone" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phoneOperator as phoneOperator, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - email, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - lastName as lastName, - firstName as firstName, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 and phone = #{phone} </select> <select id="queryByEmail" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phoneOperator as phoneOperator, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - email, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - lastName as lastName, - firstName as firstName, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 and email = #{email} </select> <select id="queryByOpenid" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phoneOperator as phoneOperator, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - email, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - lastName as lastName, - firstName as firstName, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 <if test="null != openid"> and openId = #{openid} @@ -162,38 +69,7 @@ <select id="queryByOpenid2" resultType="UserInfo"> - select - id as id, - registIp as registIp, - registAreaCode as registAreaCode, - phoneOperator as phoneOperator, - phone as phone, - nickName as nickName, - avatar as avatar, - birthday as birthday, - sex as sex, - email, - emergencyContact as emergencyContact, - emergencyContactNumber as emergencyContactNumber, - isAuth as isAuth, - lastName as lastName, - firstName as firstName, - idCard as idCard, - idCardFront as idCardFront, - idCardReverse as idCardReverse, - consumption as consumption, - balance as balance, - integral as integral, - passWord as passWord, - openId as openId, - appletsOpenId as appletsOpenId, - unionid as unionid, - state as state, - flag as flag, - insertTime as insertTime, - insertUser as insertUser, - updateTime as updateTime, - updateUser as updateUser + select * from t_user where flag != 3 <if test="null != openid"> and appletsOpenId = #{openid} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml index 085f5cb..c479923 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml @@ -56,7 +56,6 @@ select id as id, money as money, - expirationTime as expirationTime, insertTime as insertTime, companyId as companyId, state as state, @@ -93,7 +92,7 @@ from t_user_red_packet_record a left join t_user_activity_redenvelope b on (a.redPacketActivityId = b.id) left join t_user_activity c on (b.userActivityId = c.id) - where a.state = 1 + where a.state != 0 <if test="null != uid"> and a.userId = #{uid} </if> @@ -105,6 +104,6 @@ <select id="queryRemainingAmount" resultType="double"> - select ifnull(sum(remainingAmount), 0) from t_user_red_packet_record where userId = #{uid} + select ifnull(sum(remainingAmount), 0) from t_user_red_packet_record where userId = #{uid} and state = 1 </select> </mapper> \ No newline at end of file diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml index a027e24..ae22602 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml @@ -24,7 +24,7 @@ <select id="queryWithdrawal" resultType="map"> select id as id, - DATE_FORMAT(insertTime, '%Y-%m-%d') as insertTime, + DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i:%s') as insertTime, money as money, ('银行卡提现') as name, code, diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java index cae211e..b6b55f9 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java @@ -85,7 +85,7 @@ List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId); List<Driver> list = new ArrayList<>(); for(Driver driver : drivers){ - String value = redisUtil.getValue("DRIVER" + String.valueOf(driver.getId())); + String value = redisUtil.getValue("DRIVER" + driver.getId()); if(null != value){ DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(lat, lon, Double.parseDouble(value.split(",")[1]), Double.parseDouble(value.split(",")[0])); if(null != distancematrix){ diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java index d7cf23d..1c847f9 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java @@ -1,6 +1,7 @@ package com.stylefeng.guns.modular.system.service.impl; import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; +import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.service.INettyService; import com.stylefeng.guns.modular.system.util.ResultUtil; @@ -26,6 +27,12 @@ @Autowired private IOrderCrossCityService orderCrossCityService; + + @Autowired + private IOrderLogisticsService orderLogisticsService; + + + /** @@ -43,6 +50,9 @@ break; case 2: endPushWarpper = orderTaxiService.queryEndPush(uid); + break; + case 4: + endPushWarpper = orderLogisticsService.queryEndPush(uid); break; } return ResultUtil.success(endPushWarpper); @@ -70,6 +80,9 @@ case 3: orderServerWarpper = orderCrossCityService.queryOrderServer(orderId, uid);//出租车 break; + case 4: + orderServerWarpper = orderLogisticsService.queryOrderServer(orderId, uid);//专车 + break; } return ResultUtil.success(orderServerWarpper); } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedEnvelopePaymentSettingsServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedEnvelopePaymentSettingsServiceImpl.java index 823e33a..03dc6c5 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedEnvelopePaymentSettingsServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedEnvelopePaymentSettingsServiceImpl.java @@ -22,7 +22,7 @@ public RedEnvelopePaymentSettings getRedEnvelopePaymentSettings() { RedEnvelopePaymentSettings redEnvelopePaymentSettings = this.selectOne(new EntityWrapper<RedEnvelopePaymentSettings>() .eq("status", 1) - .last(" and now() >= effectiveDate order by effectiveDate desc limit 0, 1")); + .last(" and now() >= effectiveDate order by effectiveDate desc,insertTime desc limit 0, 1")); return redEnvelopePaymentSettings; } } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java index 1b66f4e..7404f7e 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java @@ -94,7 +94,7 @@ long duration = distancematrix.getDuration();//时间(秒) long duration_ = Long.valueOf(duration).longValue(); - List<ServerCarModelWarpper> price = this.getPrice(query.getId(), distance1_, duration_, 0, 1); + List<ServerCarModelWarpper> price = this.getPrice(query.getId(), distance1_, duration_, 0, type); if(price.size() == 0){ return ResultUtil.error(language == 1 ? "未获取到可服务的车型" : language == 2 ? "Not obtaining available vehicle-type" : "Ne pas obtenir le type de véhicule disponible", new ArrayList<>()); } @@ -133,7 +133,7 @@ } //开始根据不同的方式计算金额 double amount = 0; - if(type == 1){//专车 + if(type == 1 || type == 4){//专车 JSONObject jsonObject = JSON.parseObject(query1.get("content").toString()); Double num1 = jsonObject.getDouble("num1");//起步价(元) Double num2 = jsonObject.getDouble("num2");//起步公里(公里) diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java index 734d668..d3e9327 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java @@ -49,7 +49,7 @@ * @throws Exception */ @Override - public ResultUtil withdrawal(Double money, Integer uid, String remark, Integer language) throws Exception { + public synchronized ResultUtil withdrawal(Double money, Integer uid, String remark, Integer language) throws Exception { language = userInfoService.queryLanguage(uid, language); if(money.compareTo(0D) <= 0){ return ResultUtil.error(language == 1 ? "提现金额必须大于0" : language == 2 ? "Withdrawal amount must be greater than zero." : "Le montant du retrait doit être supérieur à zéro."); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java index 4be7b9f..d250980 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java @@ -33,11 +33,23 @@ static Logger logger = LoggerFactory.getLogger(FleetEngineUtil.class); - private final String SERVICE_ACCOUNT = "odrd2024@i-go-odrd-testing.iam.gserviceaccount.com"; + private final String SERVICE_ACCOUNT = "odrd-fleetengine-ondemandadmin@i-go-odrd-testing.iam.gserviceaccount.com"; - private final String privateKeyId = "0a9a480fafb6469c0c1b2fa6dbdf6d4bebe1ebed"; + private final String DRIVER_ACCOUNT = "odrd-fleetengine-driversdkuser@i-go-odrd-testing.iam.gserviceaccount.com"; - private final String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDXZoPEFZeZb0C7DXzpPsloB+rQVQAJuR+z4T9uRCz33gBsIqrz1s5Iwd8vXYKKWzukMdXkwqR4WapI/4GtcpbJkRK93mKXvEE3sDz27BnRrZL4gHeECVpFy0egw29sqFM/x/cpst0goqq4/f3ZFGtQGIhSEEHMySQgTbZDIhXMIls1etRsM4K2bTXeMPn89ablPBdbKtTAJy1EI+ZLKbxnl9StyqBam+d+UsfVmNG19MsNbSzCKc+QPnPXb7dj9KxJ/2whog8w15qXQdJHAMeHZyNlqE0zVP7G1VdWo6Q4QtzmENANxBpJIEbAqY2sq3BZSqDd5XS9Dr9BR4XzQqQnAgMBAAECggEABFABAj4eph1vxVYRBH2TpvDGFU3uW7VBPjwp7JzntLAN8eNoPlqmEDP16y6D/HMmfftpAI3TvWA3+ZEPkiX6nVDyW6sGCodyP0QuJEob1HKHFYntzGtHhGg1KCOacLey6TYbJJmUtcsduQXGkocOPaLXNvjzr2mY2zthTDzJ6HzjDo3d2x/O+lUVlNjubTFydgU9bQP8zS389GgZkO/YebK9+qPRBXv1R2fmj0rhpLqC03jL/mUMKi5tW628OiJGdvzLXlAGyJ9CtVDjfrwUgLf8ML+3yfdmv7yFeWuJ2NEgQxKACixHM05qkCW2bOkPIi9+wb1BbVvMdYL+GCPvmQKBgQD/DZ8zpWfNAkl8h8NI0E7sPdN6wgGfPpaC8VpOE3EM2eEijkZZT6XjfxXjMv1vXg1UoeYVscPb99Ux6u2gq+ZJj6+IstNIObXgvrqNxKPw6OO2xCb6UmA4rQ74xe4d1KLN+C1zepgFYgU4ejungWzuPVL7x8xjdyBAvqgPqP1IbQKBgQDYMzXs2QcWr9tVwq1O3D/H6qX2DvelAj7j0vuXGtop1/aJW7bPlGJd9NGim8dnXLVSFyRteuVl4epa/C9h50g3FM/lFMl9lmp1HwpDeiSJYAGRH8cnPJjN/IV3cRl5qN8KUQE2a3BRP+6IPHJiF1Bc1vj08nTMsWmN+K6VcAzqYwKBgGGJ7RNMM0kkkcPtC5LCDxyrfD/bB9HFlrvW3ykyqC44+K9FZ8PqAM/inxU3P9KiTkjKbXpodDWgLskbResHMld5erC1arWZVGPxrNhgli2gcs1HcHyUmjWygSJEV47S7bwFKCScgpy0Yri5jiy+A1GM5Dpjq1dyjEQWZaEviEV1AoGBALoKn023l/T60QgkZNQmjS/wCG4LhSjWHN4ZMOxfa/pz369lX5OSwW7OfBKscFPOoC0Kwwr+pSYd2HgA6Jkb17WmUBt13skWRXeRhVh5Y7VfCxohuVNXPrqKoSMeDOj22y9ac2ur2lPgateLBHbKTxoE1uiZNs7pn8ZOh5UKfeK3AoGBAKjklIbZ05nvM/mzdPk9JfCFJ6SaQqeaQcU9AoLEQdOzIrrI660Ignn4hOzLSYac0GxytYTQzDt5xDHKBYqJfem7IqxkIj9hSnIZFnUxp6+VfBhXdWHGn+GDTQa1iDvfpy/h6Gr4NL+p/EoA17qtUqOlYxJ1Dkbaw3SqUtkbuv2G"; + private final String CONSUMER_ACCOUNT = "odrd-fleetengine-consumersdkus@i-go-odrd-testing.iam.gserviceaccount.com"; + + private final String serverPrivateKeyId = "254e18eefa9fdcca64d5899cdcd793d466c47c7d"; + + private final String serverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCfbNAWnukqLKIxItqmSABxsH5glySEHJ2gfL5KsRF0M02e0Z8/KNKZkoh7I6bOMt1fEtttFaWOeq70IdI2WAd5wVazL3upvl5FW4P08ly33LklfGyLljlJ7ChPny9x6OjAaiS0yD9fh7NWti7rZKU7gzcGL8HddNYXgXV5OajvoG3TGdu52WTxce9AUzU6gLPboz/RbGqrdrmgVJVb0EPlhTJf/NSsaiW4NoL8SEzf/pJGYBmqJs97mXwCHTY4avaC+CP/zz9yS8AQEJlApbVT6lSOhYoR0hNOBj5B886EZOssjubO6hQaiwRnGrV2RdpHynqA1iekfGpUGEtWTsqjAgMBAAECggEALyPbMd0iP8y71sCiG4nty7Au5ju62e+mMkbAc9CAwzXKTVxZdLEK+MsJ3TNxBsami47FYC+G6SbgpaJ8iIImD7v5+XjgXZRDRsnlLmAdx2YWPv3YELxGS1PvpX+B5XJDpGWeXfBaQNKc1lZ/cC4t53eIpSUo82UxSvkGNea1S8lR6vIByhNyCQOvLG4yqaxUy0hZi0kge37XrjYMGS+BivBBnDiVlBPLBVbrNBxOf31Lzz+XX0iwXX7Zl2jN759oe0xQyuIGWUSj8xBDIF8nNaJrla7rWVml3sZJh6/3r1Acj0mhZtE0ZMu5hiPGiIXgb1ng30j3dMP4yVPhXrpAtQKBgQDaU01VnHsnHxc0DQHE2vEOPGmPxVS0/JAssePAEUmKEueUogGef91YY+Vm/ItbhLwGjbytnXxe88zRAdB1u07efZ83ey93TrGl2CJUzLHIcgb+Q1tT642rqlfl+q8ep86hcZ+63pDiIPt2Z+HkbKIR0SWf5LIH4flquQOTQufXXQKBgQC674qDsjOJepZjMMN6PkVMcWBYDNmXHnqa5Oto0rZM745UulbXqEFGuBOsXPU7O33Kfz1vbtoluubKZi5B6cFNnPypE2SCfvdObHq4FuTuKPV6lN93SyhZchmSEXEs0PU4cGDRt+RRqQcjft1Wigiy4Y1y1SInCtcaP1hLejEJ/wKBgFAhvwKrGnBzctrB42JTUaJ9/eis7rg28tvUttjp/2nUIndlNt7r41vr3mj8TFHc1/43y4aVhO584THdTpvHkd0LkoKUjglmMsHCIGercZ02bOap5j1Y+XiGXxij995yjN6oi43U3qyAmosM+dYTITEU6JBVKhrGj/rhyTQlnF5pAoGBAKFGmo0mR/pbDbYD0xH6+VSLGCC+7VbIT+SkjUjBSdA0eOo2XUfvfGmj1C1HgbcZi1wRzJH/5CrbBdQmtc/d+QyZ3Q2NkpBXM8uwIWwDLH0gTzDzkZvc9rG8k70GWUrd+EI6Cf3FFjExj9wazqCjs/+IQr2Ijc97NbsKXYW4pOhHAoGAKf5wYk+cn0cVTsyAom0UbGD5Uijqh5732MeqFYs2Rcwx0OErJZo68COSFFF40hJmmIKn7p3qycIyd1FcYlXN1l4s8mEWTGTInRE0OlBU0+jLtIV9pwNgffpbPYcrWZU6s6YVeJ2nDwl+aD+4QvN0rkPTfho9kjgeyF3PW0I2u4E="; + + private final String driverPrivateKeyId = "859e85fb3aa4d18b4afaac3e24e8f65700da5cc9"; + + private final String driverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmzL1BqSH+Zh9Fct5mXqe5sYOMTnJtOJhwKXnjjo2tNPXv4alzUHz8Vbj6nMar5u5IuKRZMeRBlhoRSFrLm+J1+sfvpH8N4wsnG7hDANknqWzdsk9a68qMHxNQF3hFzs9+KKrR1LAG8e9ytMfliN0kX+xls4uPZDPu1Q39K6V9KXrH/GrMA56i3TtWi7Hmakt5YTELeGjhx4nGrfuQLFFovs1Z9uJtf7E8R95+65StrOAmbJNf7VciEqwBpWYlU5VeyLXMg/oHwnTv2cjdcFozyDrlUHbDmtTiVeBBsYFVLyAsDGfl1p6eiVTiBBuo56YSYLWfaLgYvTyEcZ9jBQsfAgMBAAECggEAQzbTuObX3PT3+vtb5XKVMf33XY2rDJo2y1PbWzhxnO9vf3e22dIAW4qLnOmaIWFQeht1lr/FFCzRWk+Gzu+FJTemY8osrMLmFp9T9CQeXZ4nUXruAVxs5WQMW0Tp4W+CK3tlwmJrgJDzhYyV1Mf/HQ5Oa3kbbu/ZAY/3MCLrb/ClJQvD2rZSDdzAkNMQm8P2hsE71+rH7mI2hHrSCHl2OIp2A64QT8HjtyRc5yHZtTp6ZST1ge9SSIsT0ZfmXKtKF7yGEIPtKNU+oLrGyK5P30xBWJ/bwb3PEz2MZcPvz31+B2+UvZMm7OTkqfcRwEztAf8Ckiuo4im2BRYbVmd9OQKBgQDd0MeLxR+Qtv12bVA0bHtagFEq36THgWG7IM1/1vS4Cl9sveKSOS8A6oKLy624fGE7PKcuTTIzkVA81GXtWBQ9Coq/4TmllQkFTH7pz9C2PNHSCychPwNNV8qUx3lE3d4DOjGKgoVFD4l90AO7lOvmLTSc3pDpr+jSjUH4lqGrbQKBgQDAgXBmpXfCTxwqkBzGwxX+hwJen9qSkCM47qnQ1L4NnXPL6s0EN6rQ3FnFemGIzBUGJ2tajntkKlUu5DzsQeoBGu/SaSwgqD+1UQDcUyo+retmqZ+QYbpeyd3l53bLJJuJNsfak0X76Ft6hrm4julx6RGlmboQyx4kZWbhx4YNOwKBgEG9/2aNpi1eDwFqpLrk7CqGnYf3gP8gebbcoguhyiZB7MZuARkVmbjLyKVmWLa1JpxH/cTbXGWsS/u7d/pAgL8WwMjeGBfbdDD92x+xWEqq/AUlCRPxeSkTPBech3TBzWtndAd5Z8ZwNG/1lyWhnck63L0huhGI8Zh2BXeILaKBAoGAKK3xq69BvGztPc1QV2w4RJ4RER/kl14gI1LDzd52/veL1cabZk3BKfu2eLWg0MCXnMJNvEgpqQQNFiii+yX+phckIKma6pfDRrSEYwqr/azQ9tPXZTJRqOAtpPyhrNHikD9kQjsm6dGzKxQ3QNnqWOjwkrcGi6/wga5v7Dw2hqsCgYEA2T/kSNQ9dqpVBAkfi2J50hqnfFESPjKeirJJZllqhVqsiV0ly8a8Fz8SjGqTzrq+UErko+QmtSlo5h3Uq9Ln+0CwYfrUL+74q2zLHdS0DpY3QsGTEDJXTxCyy9kO26X2UsM3Ez3YUAkdMwdpVz0uVZtinv2735QZOBxoVQV2kQ8="; + + private final String consumerPrivateKeyId = "40acf82cbd5250de2f5123caff40738bdd403b08"; + + private final String consumerPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDSwtbSBFgIXna6mWeKFWCK31NXUJH6uGduR1XrODGRedrqrTgr0BdNg8PDo6/zh/T+K0Svor6kgqpwnl9soOdn73oC4Nu+Ad7EiKa38j650jlZdLAr4hR0Ou9Kcnv45x/94auUO8jBz844cu24swLKiPsK9OnX65wVlKRfhhkGFuS/4OI76CmE7NqZDqPOW16o8tBO5TsgPVNkglFAU73fTp0kcHoLauT9QOB0+yZi39mnNXyU+2cL3Ylp5oaQCJpyssDRUqz/EiHa7FxUUgzCadG00+ePf5iYSnZKQRKWoOIawFvcCfcHx8GAl8Nn+79HtVQHB9hLsQ5+jqcdfKPfAgMBAAECggEAE9Ufz912xzrUY1TCKH1Ae3Dub732Lqihmv/9dsfv6ieUURcBvSW0u6eViVhi20DE7hH2QazH0cU18qkEg71UaTRgv9qW8vdMFiRhw9d4zZWZrfBMD6UTlahiEhhZ0B83pHVS5v0FNC+w0SEHe6Tks1hWfz5yrs3N/z3ghdihjC/5i1jeBoHXs1262SMazuwNGHblLApGPG+86taeFtbDI+31TKvZ8nomZHkEVFnARRUoBBcIwowRMqNfwlpcJhlz6kDWnoD08kHJ2zzJokozu7Lim+Ugt/MWwUOcA0hgq2QdymZFpkRkDl7tZmJtwTfTirjbGlpnPHVXEc1bWM7ocQKBgQD0LJ8e7JXf6bVFngq0jSJNKK7XDHYg0KhHXMApF59xxi29hdHXWPzgRJ45KkoUJc7MITpIJLXfCmi1XyDMf9m8lIf/oaqhJ7idYi7iAAPOJkdnHbSt0lebyjBWzCQ6OgS4NfF1+LEibTzRqiFs5K8EAyPYAVSTrpWoguoWtTzIGQKBgQDc9/I2PS+91Eb5RvuidTNsDqZJliTJQFlBjlDViFo3+l1N7jDFYwPBR/Tv4TVM5p9Zb+/Lo9X1pjDbm8QriTR4V+4HaLXkcCnmOsdSRInFUW4UIafwLX5ifjgfyaWgdKdn2UP1Lu/1qBN6GU1xjSfBQ6N3UqQiKkNPb7tuPJGqtwKBgQCQ4hU8vTclGMC14VQK1B/BVt1/vuYtDIJ9bZycBWdXlDc52LitpiDOVgjodJ5mHBT77M9vVVERWlTNIfgNP+OL0TptRZlAbJhP0p1s/oNDhFUj6211InVXfH54UkNAxYJdZ6yxynIYsma/JcsVmQ/8Ony/Q/LSempVBfEurjW1qQKBgQCQWPjFLdtOKqnildg0HFPnNvqx/38waPTluk5b76LgBpGFIyCBEVmWnacIPRpQjidyiYkggnp26oXoMC1KM2svYmGAPYr1G8CDQcqLl3JYkAVU6VeHsnBpbwLC4TttQkdJs8iNFohy9cUjcfwBPbDGs6TJghbuqqUl81uBe9e8qQKBgQDZm8T2KB34J7HAc5A+vqkmAo7mQLZg51OrzB1KnDU86pSAf0o3eSvfDUT6dpU9fRuZ1XYnbPnpoJwjFH3m4u9gqKF3PtVYfZyJrEqYwmhB9z6vd+dcsUlXM0fi37bGZkKBD0JGGt5OljM1qJG15x/LYfC/nwOmqWoOhNPCst2Z7w=="; private final String provider = "i-go-odrd-testing"; @@ -54,24 +66,24 @@ * @param type 0=服务端,1=乘客,2=司机 * @return */ - public Map<String, Object> fleetEngineAuth(int type, Integer id){ + public Map<String, Object> fleetEngineAuth(int type, String id){ try { //谷歌云服务器使用这部分代码 // AuthTokenMinter minter = AuthTokenMinter.builder() // //服务端签名 -// .setServerSigner(DefaultServiceAccountSigner.create()) +// .setServerSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) // //司机端签名 -// .setDriverSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) +// .setDriverSigner(ImpersonatedSigner.create(DRIVER_ACCOUNT)) // //乘客端签名 -// .setConsumerSigner(ImpersonatedSigner.create(SERVICE_ACCOUNT)) +// .setConsumerSigner(ImpersonatedSigner.create(CONSUMER_ACCOUNT)) // .build(); AuthTokenMinter minter = AuthTokenMinter.builder() //服务端签名 - .setServerSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setServerSigner(LocalSigner.create(SERVICE_ACCOUNT, serverPrivateKeyId, serverPrivateKey)) //司机端签名 - .setDriverSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setDriverSigner(LocalSigner.create(DRIVER_ACCOUNT, driverPrivateKeyId, driverPrivateKey)) //乘客端签名 - .setConsumerSigner(LocalSigner.create(SERVICE_ACCOUNT, privateKeyId, privateKey)) + .setConsumerSigner(LocalSigner.create(CONSUMER_ACCOUNT, consumerPrivateKeyId, consumerPrivateKey)) .build(); String jwt = ""; @@ -82,12 +94,12 @@ expirationTimestamp = serverToken.expirationTimestamp().getTime(); } if(1 == type){ - FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create("I-GO-USER" + id)); + FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create(id)); jwt = consumerToken.jwt(); expirationTimestamp = consumerToken.expirationTimestamp().getTime(); } if(2 == type){ - FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create("I-GO-CAR" + id)); + FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create(id)); jwt = driverToken.jwt(); expirationTimestamp = driverToken.expirationTimestamp().getTime(); } @@ -161,6 +173,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return createVehicles(maximumCapacity, licensePlate, id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -254,6 +271,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return updateVehicles(vehicleState, maximumCapacity, licensePlate, id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -310,6 +332,11 @@ return ""; } if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return getVehicles(id); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -434,6 +461,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return createTrip(vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -648,6 +680,11 @@ if(null != error){ Integer code = error.getInteger("code"); if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); @@ -802,6 +839,11 @@ return ""; } if(code == 401){ + String status = error.getString("status"); + if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){ + redisUtil.remove("google_token"); + return getTrip(tripId); + } String reason = error.getJSONArray("details").getJSONObject(0).getString("reason"); if(reason.equals("ACCESS_TOKEN_EXPIRED")){ redisUtil.remove("google_token"); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java index 419d55f..613241c 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java @@ -61,7 +61,7 @@ * @param orderType 订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车) * @param state 订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付) */ - public void pushOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state, Integer time){ + public void pushOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state, Integer time, String audioUrl){ JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 200); jsonObject.put("msg", "SUCCESS"); @@ -71,6 +71,7 @@ map.put("orderType", orderType); map.put("state", state); map.put("time", time); + map.put("audioUrl", audioUrl); jsonObject.put("data", map); //调用推送 @@ -173,7 +174,7 @@ * @param orderType * @param status 1=申请,2=同意,3=拒绝 */ - public void pushModifyAddress(Integer type, Integer uid, Integer orderId, Integer orderType, Integer status){ + public void pushModifyAddress(Integer type, Integer uid, Integer orderId, Integer orderType, Integer status, String audioUrl){ JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 200); jsonObject.put("msg", "SUCCESS"); @@ -182,6 +183,7 @@ map.put("orderId", orderId); map.put("orderType", orderType); map.put("status", status); + map.put("audioUrl", audioUrl); jsonObject.put("data", map); //调用推送 @@ -496,7 +498,7 @@ * @param money * @param status 1=申请,2=同意,3=拒绝 */ - public void pushPayDifference(Integer type, Integer uid, Integer orderId, Integer orderType, Double money, Integer status){ + public void pushPayDifference(Integer type, Integer uid, Integer orderId, Integer orderType, Double money, Integer status, String audioUrl){ JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 200); jsonObject.put("msg", "SUCCESS"); @@ -506,6 +508,7 @@ map.put("orderType", orderType); map.put("money", money); map.put("status", status); + map.put("audioUrl", audioUrl); jsonObject.put("data", map); //调用推送 diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java new file mode 100644 index 0000000..4e277fe --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TextToSpeechUtil.java @@ -0,0 +1,60 @@ +package com.stylefeng.guns.modular.system.util; + +import com.google.cloud.texttospeech.v1.*; +import com.google.protobuf.ByteString; + +import java.io.FileOutputStream; +import java.io.OutputStream; + +/** + * Google语音合成工具 + * @author zhibing.pu + * @Date 2024/7/11 9:09 + */ +public class TextToSpeechUtil { + + + /** + * 合成音频文件 + * @param languageCode 语言编号 + * @param text 合成文本 + * @param fileName 音频文件名称 + * @throws Exception + */ + public static String create(String languageCode, String text, String fileName) throws Exception { + // Instantiates a client + try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) { + // Set the text input to be synthesized + SynthesisInput input = SynthesisInput.newBuilder().setText(text).build(); + + // Build the voice request, select the language code ("en-US") and the ssml voice gender + // ("neutral") + VoiceSelectionParams voice = + VoiceSelectionParams.newBuilder() + .setLanguageCode(languageCode) + .setSsmlGender(SsmlVoiceGender.MALE) + .build(); + + // Select the type of audio file you want returned + AudioConfig audioConfig = + AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build(); + + // Perform the text-to-speech request on the text input with the selected voice parameters and + // audio file type + SynthesizeSpeechResponse response = + textToSpeechClient.synthesizeSpeech(input, voice, audioConfig); + + // Get the audio contents from the response + ByteString audioContents = response.getAudioContent(); + + // Write the response to the output file. + try (OutputStream out = new FileOutputStream("/usr/local/nginx/html/files/audio/" + fileName)) { + out.write(audioContents.toByteArray()); + return "http://182.160.16.251:81/files/audio/" + fileName; + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java index d63c7ae..549f90a 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java @@ -144,8 +144,10 @@ private Integer isFrozen; @ApiModelProperty("司机接单时间") private String snatchOrderTime; + @ApiModelProperty("司机超时时间") + private Long driverTimeOut; @ApiModelProperty("超时取消时间") - private Integer timeOutCancel; + private Long timeOutCancel; private String tripId; private List<OrderPosition> orderPositionList; @@ -217,7 +219,8 @@ orderInfoWarpper.setPayType(null != map.get("payType") ? Integer.valueOf(map.get("payType").toString()) : 4); orderInfoWarpper.setReceipt(null != map.get("receipt") ? map.get("receipt").toString() : ""); orderInfoWarpper.setIsFrozen(null != map.get("isFrozen") ? Integer.valueOf(map.get("isFrozen").toString()) : 1); - orderInfoWarpper.setTimeOutCancel(null != map.get("timeOutCancel") ? Integer.valueOf(map.get("timeOutCancel").toString()) : 0); + orderInfoWarpper.setTimeOutCancel(null != map.get("timeOutCancel") ? Long.valueOf(map.get("timeOutCancel").toString()) : 0L); + orderInfoWarpper.setDriverTimeOut(null != map.get("driverTimeOut") ? Long.valueOf(map.get("driverTimeOut").toString()) : 0L); orderInfoWarpper.setSnatchOrderTime(null != map.get("snatchOrderTime") ? map.get("snatchOrderTime").toString() : ""); orderInfoWarpper.setPriceDifference(null != map.get("priceDifference") ? Double.valueOf(map.get("priceDifference").toString()) : 0); orderInfoWarpper.setTripId(null != map.get("tripId") ? map.get("tripId").toString() : ""); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java index 5e603ab..932adcd 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java @@ -56,6 +56,10 @@ private Integer isFrozen; @ApiModelProperty("中途取消(0=否,1=是)") private Integer cancelMidway; + @ApiModelProperty("备注") + private String remark; + @ApiModelProperty("超时取消时间") + private Long timeOutCancel; private String tripId; @@ -210,7 +214,15 @@ public void setReceipt(String receipt) { this.receipt = receipt; } - + + public Long getTimeOutCancel() { + return timeOutCancel; + } + + public void setTimeOutCancel(Long timeOutCancel) { + this.timeOutCancel = timeOutCancel; + } + @Override public String toString() { return "OrderWarpper{" + @@ -260,6 +272,8 @@ orderWarpper.setIsFrozen(null != map.get("isFrozen") ? Integer.valueOf(String.valueOf(map.get("isFrozen"))) : 1); orderWarpper.setCancelMidway(null != map.get("cancelMidway") ? Integer.valueOf(String.valueOf(map.get("cancelMidway"))) : 0); orderWarpper.setTripId(null != map.get("tripId") ? String.valueOf(map.get("tripId")) : ""); + orderWarpper.setRemark(null != map.get("remark") ? String.valueOf(map.get("remark")) : ""); + orderWarpper.setTimeOutCancel(null != map.get("timeOutCancel") ? Long.valueOf(String.valueOf(map.get("timeOutCancel"))) : 0); list.add(orderWarpper); } } @@ -291,6 +305,14 @@ this.tripId = tripId; } + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + @Override public int compareTo(Object o) { if (o instanceof OrderWarpper) { diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/PaymentRecordMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/PaymentRecordMapper.xml index c2eb4da..d38d246 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/PaymentRecordMapper.xml +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/PaymentRecordMapper.xml @@ -56,17 +56,17 @@ <select id="queryRechargeRecord" resultType="java.util.Map"> SELECT - id as id, - category as category, - userId as userId, - `type` as `type`, - orderId as orderId, - orderType as orderType, - payType as payType, - amount as amount, - code as code, - `state` as state, - DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as insertTime + id as id, + category as category, + userId as userId, + `type` as `type`, + orderId as orderId, + orderType as orderType, + payType as payType, + amount as amount, + code as code, + `state` as state, + DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as insertTime FROM t_payment_record WHERE category = 2 AND userId = #{uid} AND `type` = 1 ORDER BY insertTime DESC @@ -74,7 +74,7 @@ </select> <select id="queryRechargeMoneySum" resultType="java.lang.Double"> - SELECT SUM(amount) + SELECT ifnull(SUM(amount), 0) FROM t_payment_record WHERE category = 2 AND userId = #{uid} AND `type` = 1 AND `state` = 2 </select> diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java index f43310a..7acf651 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java @@ -294,7 +294,7 @@ public void run() { if(orderTaxi.getState() == 2){ //推送司机订单状态 - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); } } @@ -746,8 +746,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); } }).start(); @@ -800,8 +800,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); } }).start(); return ResultUtil.success(); @@ -1206,8 +1206,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0, ""); } }).start(); @@ -1324,7 +1324,7 @@ if(bo){ continue; } - pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); + pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime(), ""); } } Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 diff --git a/UserIGOTravel/guns-admin/src/main/resources/application-dev.yml b/UserIGOTravel/guns-admin/src/main/resources/application-dev.yml index 6e6b448..d9ebae9 100644 --- a/UserIGOTravel/guns-admin/src/main/resources/application-dev.yml +++ b/UserIGOTravel/guns-admin/src/main/resources/application-dev.yml @@ -47,11 +47,19 @@ base-package: com.stylefeng.guns.modular +#spring: +# datasource: +# url: jdbc:mysql://127.0.0.1:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0 +# username: root +# password: 123456 +# db-name: guns #用来搜集数据库的所有表 +# filters: wall,mergeStat + spring: datasource: - url: jdbc:mysql://127.0.0.1:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0 + url: jdbc:mysql://182.160.16.251:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0 username: root - password: 123456 + password: HjKbXilb9zajmXbl db-name: guns #用来搜集数据库的所有表 filters: wall,mergeStat diff --git a/UserIGOTravel/guns-admin/src/main/resources/application-produce.yml b/UserIGOTravel/guns-admin/src/main/resources/application-produce.yml index a70ac14..8da1d0f 100644 --- a/UserIGOTravel/guns-admin/src/main/resources/application-produce.yml +++ b/UserIGOTravel/guns-admin/src/main/resources/application-produce.yml @@ -129,3 +129,5 @@ template-path: /usr/local/nginx/html/mailbox/ --- + +audioPath: /usr/local/nginx/html/files/audio diff --git a/ZuulIGOTravel/pom.xml b/ZuulIGOTravel/pom.xml index 1a82774..a70e075 100644 --- a/ZuulIGOTravel/pom.xml +++ b/ZuulIGOTravel/pom.xml @@ -10,11 +10,11 @@ </parent> <groupId>com.sinata</groupId> <artifactId>zuul</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>1.0.0</version> <name>zuul</name> <description>Zuul project for Spring Boot</description> - <packaging>war</packaging> + <packaging>jar</packaging> <properties> <java.version>1.8</java.version> diff --git a/ZuulIGOTravel/src/main/java/com/sinata/zuul/ZuulApplication.java b/ZuulIGOTravel/src/main/java/com/sinata/zuul/ZuulApplication.java index 12279f3..6adb275 100644 --- a/ZuulIGOTravel/src/main/java/com/sinata/zuul/ZuulApplication.java +++ b/ZuulIGOTravel/src/main/java/com/sinata/zuul/ZuulApplication.java @@ -37,7 +37,7 @@ @EnableZuulProxy//开启网关服务 @EnableDiscoveryClient//开启eureka客户端的消费者 @SpringBootApplication -public class ZuulApplication extends SpringBootServletInitializer { +public class ZuulApplication /*extends SpringBootServletInitializer*/ { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); @@ -132,8 +132,8 @@ } } - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { - return builder.sources(ZuulApplication.class); - } +// @Override +// protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { +// return builder.sources(ZuulApplication.class); +// } } diff --git a/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/NettyStartListener.java b/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/NettyStartListener.java index 95e0147..bebc5ba 100644 --- a/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/NettyStartListener.java +++ b/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/NettyStartListener.java @@ -20,13 +20,13 @@ Thread thread = new Thread(new Runnable() { @Override public void run() { - NettyServer nettyServer = new NettyServer(); - nettyServer.bind(); - - NettyServer0 nettyServer0 = new NettyServer0(); - nettyServer0.bind(); - - TimeZone.setDefault(TimeZone.getTimeZone("GMT+0")); +// NettyServer nettyServer = new NettyServer(); +// nettyServer.bind(); +// +// NettyServer0 nettyServer0 = new NettyServer0(); +// nettyServer0.bind(); +// +// TimeZone.setDefault(TimeZone.getTimeZone("GMT+0")); } }); thread.start(); diff --git a/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java b/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java index 0ddae06..6119873 100644 --- a/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java +++ b/ZuulIGOTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java @@ -90,10 +90,10 @@ Integer type = jsonCon.getInteger("type"); String token = jsonCon.getString("token"); String userId1 = jsonCon.getString("userId"); + Integer language = jsonCon.getInteger("language"); String device = jsonCon.getString("device"); String version = jsonCon.getString("version"); if(StringUtil.isNotEmpty(userId1)){ - //判断用户或者司机长连接 if(type==1){ //确保账号在单个设备上登录 @@ -105,7 +105,7 @@ msg_.put("msg", "SUCCESS"); msg_.put("method", "OFFLINE"); msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 + sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 TimerTask timerTask = new TimerTask() { @Override public void run() { @@ -125,8 +125,17 @@ if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("USER_" + userId1, token); } + + //设置语言环境 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + headers.set("Authorization", "Bearer " + token); + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("language", language); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String w = internalRestTemplate.postForObject("http://user-server/api/user/editLanguage",requestEntity , String.class); } - + }else{ //添加司机在线 HttpHeaders headers = new HttpHeaders(); @@ -154,7 +163,7 @@ msg_.put("msg", "SUCCESS"); msg_.put("method", "OFFLINE"); msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 + sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 TimerTask timerTask = new TimerTask() { @Override public void run() { @@ -175,6 +184,15 @@ if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("DRIVER_" + userId1, token); } + + //设置语言环境 + headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + headers.set("Authorization", "Bearer " + token); + params = new LinkedMultiValueMap<>(); + params.add("language", language); + requestEntity = new HttpEntity<>(params, headers); + w = internalRestTemplate.postForObject("http://driver-server/api/driver/editLanguage",requestEntity , String.class); } -- Gitblit v1.7.1