From 2e366b939271b6ea338641f8a72d1bcd2182dbe7 Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期五, 19 四月 2024 17:56:18 +0800 Subject: [PATCH] 新增加功能 --- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java | 134 +++ DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReminderRulesService.java | 11 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java | 26 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 9 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReminderRulesServiceImpl.java | 15 DriverIGOTravel/guns-admin/src/main/resources/quartz.properties | 39 + DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml | 2 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/GunsApplication.java | 15 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java | 44 + DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReminderRulesMapper.xml | 5 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/IOrderLogisticsService.java | 23 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzEnum.java | 46 + DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java | 6 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/dao/OrderLogisticsMapper.java | 9 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 78 + DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 5 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/model/OrderLogistics.java | 111 ++ DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/SchedulerUtil.java | 35 + DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java | 261 +++++++ DriverIGOTravel/guns-admin/pom.xml | 10 DriverIGOTravel/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/smallLogistics/dao/mapping/OrderLogisticsMapper.xml | 3 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReminderRules.java | 32 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReminderRulesMapper.java | 11 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java | 872 +++++++++++------------- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java | 108 +++ DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java | 163 ---- 27 files changed, 1,370 insertions(+), 719 deletions(-) diff --git a/DriverIGOTravel/guns-admin/pom.xml b/DriverIGOTravel/guns-admin/pom.xml index 3114238..3368502 100644 --- a/DriverIGOTravel/guns-admin/pom.xml +++ b/DriverIGOTravel/guns-admin/pom.xml @@ -286,6 +286,16 @@ <artifactId>font-asian</artifactId> <version>7.1.13</version> </dependency> + <!--任务调度框架--> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz</artifactId> + </dependency> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>0.9.5.5</version> + </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 df5efb7..dd1bdba 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 @@ -2,10 +2,13 @@ import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.modular.system.util.GDFalconUtil; +import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil; +import com.stylefeng.guns.modular.system.util.quartz.SchedulerUtil; import org.apache.http.client.HttpClient; import org.apache.http.config.SocketConfig; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.quartz.SchedulerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +26,10 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.TimeZone; @@ -42,6 +49,14 @@ 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); + } + logger.info("GunsApplication is success!"); } 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 fe58c9a..73d18a6 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 @@ -439,7 +439,7 @@ @ApiOperation(value = "司机确认费用", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), - @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际)", name = "orderType", required = true, dataType = "int"), + @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=同城小件物流)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "支付方式(1=OK平台收款,2=其他方式收款)", name = "type", required = true, dataType = "int"), @ApiImplicitParam(value = "行程费用(出租车必传)", name = "travelFee", required = false, dataType = "double"), @ApiImplicitParam(value = "停车费", name = "parkingFee", required = false, dataType = "double"), @@ -656,7 +656,7 @@ @ApiOperation(value = "手动确认订单完成", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), - @ApiImplicitParam(value = "订单类型(1=专车,2=出租车)", name = "orderType", required = true, dataType = "int"), + @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,4=同城小件物流)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil completeOrder(Integer orderId, Integer orderType, Integer language){ @@ -672,10 +672,10 @@ @ResponseBody @PostMapping("/api/order/queryMoneyInfo") - @ApiOperation(value = "获取订单费用明细", tags = {"司机端-服务中"}, notes = "") + @ApiOperation(value = "获取订单费用明细【2.0】", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), - @ApiImplicitParam(value = "订单类型(1=专车)", name = "orderType", required = true, dataType = "int"), + @ApiImplicitParam(value = "订单类型(1=专车,4=同城小件物流)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<MoneyInfoWarpper> queryMoneyInfo(Integer orderId, Integer orderType){ @@ -688,6 +688,7 @@ } } + @ResponseBody @PostMapping("/api/order/fillInPickUpCode") @ApiOperation(value = "验证小件物流取件码", tags = {"司机端-服务中"}, notes = "") diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java index 0a3e8df..fba275b 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java @@ -247,6 +247,7 @@ orderCrossCity.setState(3); orderCrossCity.setSetOutTime(new Date()); systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderCrossCity.getUserId()); + pushUtil.pushDriverPosition(orderCrossCity.getId(), 3);//主动推送司机定位 break; case 4://到达预约点,等待客户上车 orderCrossCity.setState(4); @@ -260,8 +261,6 @@ orderCrossCity.setBoardingTime(new Date()); orderCrossCity.setState(5); orderCrossCity.setStartServiceTime(new Date()); - - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3);//主动推送司机定位 break; case 6://结束服务 orderCrossCity.setGetoffLon(lon); @@ -615,7 +614,6 @@ public void run() { pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState()); pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState()); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); } }).start(); @@ -752,7 +750,6 @@ public void run() { pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState()); pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState()); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); } }).start(); 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 77e168c..487a7f3 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 @@ -54,5 +54,12 @@ * @return */ List<OrderLogistics> query(@Param("state") List<Integer> state, @Param("driverId") Integer driverId); - + + + /** + * 获取费用明细 + * @param orderId + * @return + */ + Map<String, Object> queryMoneyInfo(@Param("orderId") Integer orderId); } 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 e966048..755ad1d 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 @@ -133,7 +133,8 @@ if(c.userType = 1, '用户', '平台') as cancelUser, (select isSpecialCar from t_sys_reformist where companyId = a.companyId) as reassign, a.driverPay, - a.isFrozen + a.isFrozen, + a.priceDifference 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) 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 e21686a..3c65c27 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 @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.enums.IdType; import lombok.Data; +import java.math.BigDecimal; import java.util.Date; /** @@ -40,6 +41,11 @@ */ @TableField("carId") private Integer carId; + /** + * 服务车型id + */ + @TableField("serverCarModelId") + private Integer serverCarModelId; /** * 订单号 */ @@ -181,15 +187,65 @@ @TableField("orderMoney") private Double orderMoney; /** - * 行程费 + * 起步里程 */ - @TableField("travelMoney") - private Double travelMoney; + @TableField("startMileage") + private Double startMileage; /** - * 小费 + * 起步价 */ - @TableField("tipMoney") - private Double tipMoney; + @TableField("startMoney") + private Double startMoney; + /** + * 里程公里 + */ + @TableField("mileageKilometers") + private Double mileageKilometers; + /** + * 里程费 + */ + @TableField("mileageMoney") + private Double mileageMoney; + /** + * 时长分钟 + */ + @TableField("duration") + private Double duration; + /** + * 时长费 + */ + @TableField("durationMoney") + private Double durationMoney; + /** + * 等待分钟 + */ + @TableField("wait") + private Double wait; + /** + * 等待费 + */ + @TableField("waitMoney") + private Double waitMoney; + /** + * 远途公里 + */ + @TableField("longDistance") + private Double longDistance; + /** + * 远途费 + */ + @TableField("longDistanceMoney") + private Double longDistanceMoney; + /** + * 停车费 + */ + @TableField("parkMoney") + private Double parkMoney; + /** + * 过路费 + */ + @TableField("roadTollMoney") + private Double roadTollMoney; /** * 红包抵扣金额 */ @@ -204,7 +260,7 @@ * 红包id */ @TableField("redPacketId") - private Integer redPacketId; + private String redPacketId; /** * 优惠券id */ @@ -236,7 +292,7 @@ @TableField("payMoney") private Double payMoney; /** - * 状态(1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=改派中,12=已支付差价) + * 状态(1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=改派中,12=已支付差价,13=取消待支付) */ @TableField("state") private Integer state; @@ -297,12 +353,6 @@ @TableField("isDelete") private Integer isDelete; /** - * 该派前的订单状态 - * @return - */ - @TableField("oldState") - private Integer oldState; - /** * 移动小号 * @return */ @@ -338,6 +388,12 @@ @TableField("driverPay") private Integer driverPay; /** + * 改派之前的订单状态 + * @return + */ + @TableField("oldState") + private Integer oldState; + /** * 修改目的地经度 */ @TableField("destinationLon") @@ -352,6 +408,31 @@ */ @TableField("destination") private String destination; - + private Integer isplatPay; + /** + * 是否首单免费1否,2是 + * @return + */ + @TableField("isFree") + private Integer isFree; + private BigDecimal freeMoney; + /** + * 补差价金额 + */ + @TableField("priceDifference") + private Double priceDifference; + private Integer startDuration; + /** + * 收费方式(1=普通,2=夜间,3=高峰) + */ + private Integer moneyType; + /** + * 收费方式时间段 + */ + private String moneyTime; + + private Date smsTime; + + private Integer smsNumber; } 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 2418b70..04c3478 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 @@ -137,4 +137,27 @@ * @param status */ void updateEndAddress(Integer orderId, Integer status); + + + /** + * 获取费用明细 + * @param orderId + * @return + * @throws Exception + */ + Map<String, Object> queryMoneyInfo(Integer orderId) throws Exception; + + /** + * 确认费用操作 + * @param orderId + * @param type + * @param parkingFee + * @param crossingFee + * @return + * @throws Exception + */ + ResultUtil confirmFees(Integer language, Integer orderId, Integer type, Double parkingFee, Double crossingFee) 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 a361f5e..9c0cb83 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 @@ -13,16 +13,20 @@ import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.system.dao.CarMapper; import com.stylefeng.guns.modular.system.dao.RegionMapper; +import com.stylefeng.guns.modular.system.dao.SystemPriceMapper; import com.stylefeng.guns.modular.system.dao.UserInfoMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils; +import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil; +import com.stylefeng.guns.modular.system.util.quartz.jobs.OrderTimeOutJob; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; +import org.quartz.JobDataMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -105,6 +109,12 @@ @Autowired private IOrderEvaluateService orderEvaluateService; + + @Autowired + private IReminderRulesService reminderRulesService; + + @Resource + private SystemPriceMapper systemPriceMapper; @@ -152,58 +162,34 @@ orderLogistics.setState(2); orderLogistics.setSnatchOrderTime(new Date()); - //调用高德创建轨迹 -// String s = gdFalconUtil.selectTerminal(driver.getPhone()); -// String track = gdFalconUtil.createTrack(s); -// orderLogistics.setTrackId(track); - - //调用移动的小号接口 -// Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); -// Region region = regionMapper.query(geocode.get("districtCode")); -// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderLogistics.getRecipientPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); -// if(String.valueOf(map.get("code")).equals("200")){ -// orderLogistics.setTelX(map.get("telX")); -// orderLogistics.setBindId(map.get("bindId")); -// } - this.updateById(orderLogistics); - - //添加已收入明细 - Company company = companyService.selectById(driver.getCompanyId()); - Double speMoney = orderLogistics.getType() == 4 ? company.getSameLogisticsMoney() : company.getCrossLogisticsMoney(); - BigDecimal d = null;//企业收入 - BigDecimal c = null;//司机收入 - if(company.getIsSpeFixedOrProportional() == 2){//固定 - d = new BigDecimal(speMoney); - c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + + + //todo 待翻译 + //添加定时任务(普通任务) + ReminderRules reminderRules = reminderRulesService.selectOne(new EntityWrapper<ReminderRules>().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; + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("driverId", uid); + jobDataMap.put("orderId", orderLogistics.getId()); + jobDataMap.put("orderType", 4); + jobDataMap.put("describe", "您的打车订单已超时" + m + "分钟,请抓紧!"); + QuartzUtil.addSimpleQuartzTask( + new OrderTimeOutJob().buildQuartzJob(UUIDUtil.getRandomCode(5) + "_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap) + , new Date(packageTimeoutReminderInterval), packageTimeoutReminderInterval, -1); } - if(company.getIsSpeFixedOrProportional() == 1){//比例 - Double price = orderLogistics.getTravelMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); - c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); - } -// incomeService.saveData(1, orderLogistics.getCompanyId(), 2, orderLogistics.getId(), orderLogistics.getType(), d.doubleValue()); -// incomeService.saveData(2, orderLogistics.getDriverId(), 2, orderLogistics.getId(), orderLogistics.getType(), c.doubleValue()); - 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); - - - + + + //推送相关代码------------------start---------------- new Thread(new Runnable() { @Override public void run() { pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState()); pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState()); - } - }).start(); - - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushDriverPosition(orderId, orderLogistics.getType()); } }).start(); @@ -275,6 +261,7 @@ orderLogistics.setState(3); orderLogistics.setSetOutTime(new Date()); systemNoticeService.addSystemNotice(1, language == 1 ? "司机已出发,请耐心等待" : language == 2 ? "The driver is on the way, please wait." : "Le chauffeur est en route. Veuillez patienter.", orderLogistics.getUserId()); + pushUtil.pushDriverPosition(orderId, 4); break; case 4://到达预约点,等待客户上车 orderLogistics.setState(4); @@ -288,152 +275,18 @@ orderLogistics.setBoardingTime(new Date()); orderLogistics.setState(5); orderLogistics.setStartServiceTime(new Date()); - - pushUtil.pushDriverPosition(orderLogistics.getId(), orderLogistics.getType());//主动推送司机定位 break; - case 6://结束服务(专车可以返回继续服务)不修改状态 + case 6://结束服务 orderLogistics.setGetoffLon(lon); orderLogistics.setGetoffLat(lat); orderLogistics.setGetoffAddress(address); orderLogistics.setGetoffTime(new Date()); orderLogistics.setEndServiceTime(new Date()); orderLogistics.setState(6); - - if(orderLogistics.getPayType() != 4){ - //添加已收入明细 - Company company = companyService.selectById(orderLogistics.getCompanyId()); - Double speMoney = company.getSameLogisticsMoney(); - BigDecimal d = null;//企业收入 - BigDecimal c = null;//司机收入 - if(company.getIsSameLogisticsFixedOrProportional() == 2){//固定 - d = new BigDecimal(speMoney); - c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 - } - if(company.getIsSameLogisticsFixedOrProportional() == 1){//比例 - Double price = orderLogistics.getOrderMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); - c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); - } - - incomeService.saveData(1, orderLogistics.getCompanyId(), 2, orderLogistics.getId(), 4, d.doubleValue()); - incomeService.saveData(2, orderLogistics.getDriverId(), 2, orderLogistics.getId(), 4, c.doubleValue()); - Driver driver = driverService.selectById(orderLogistics.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - } - - if (orderLogistics.getPayType()==4||!orderLogisticsId.isEmpty()){ - double sum = 0; - if (orderLogistics.getPayType()==4){ - sum= orderLogistics.getOrderMoney(); - } - - if (!orderLogisticsId.isEmpty()){ - for (OrderLogisticsSpread orderLogisticsSpread : orderLogisticsId) { - sum = sum +orderLogisticsSpread.getPrice(); - } - } - - Driver driver = driverService.selectById(orderLogistics.getDriverId()); - if(null != orderLogistics.getCouponMoney() && 0 < orderLogistics.getCouponMoney()){ - Double money = orderLogistics.getCouponMoney(); - incomeService.saveData(2, orderLogistics.getDriverId(), 5, orderLogistics.getId(), orderLogistics.getType(), money); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - 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 != orderLogistics.getDiscountMoney() && 0 < orderLogistics.getDiscountMoney()){ - Double money = orderLogistics.getDiscountMoney(); - incomeService.saveData(2, orderLogistics.getDriverId(), 6, orderLogistics.getId(), orderLogistics.getType(), money); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - 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 != orderLogistics.getRedPacketMoney() && 0 < orderLogistics.getRedPacketMoney()){ - Double money = orderLogistics.getRedPacketMoney(); - incomeService.saveData(2, orderLogistics.getDriverId(), 7, orderLogistics.getId(), orderLogistics.getType(), money); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).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.getIsSameLogisticsFixedOrProportional() == 2){//固定 - d = new BigDecimal(speMoney); - c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 - } - if(company.getIsSameLogisticsFixedOrProportional() == 1){//比例 - Double price = orderLogistics.getOrderMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); - c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); - } - //记录司机待结算金额 - if(d.compareTo(new BigDecimal(0)) > 0){ - SettlementDetail settlementDetail = new SettlementDetail(); - settlementDetail.setOrderId(orderId); - settlementDetail.setOrderType(4); - settlementDetail.setDriverId(orderLogistics.getDriverId()); - settlementDetail.setOrderMoney(sum); - settlementDetail.setPrice(d.doubleValue()); - settlementDetail.setCreateTime(new Date()); - settlementDetailService.insert(settlementDetail); - - SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null); - if(null != settlementAllocation){ - JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); - Double maxPrice = jsonObject.getDouble("maxPrice"); - Integer type = jsonObject.getInteger("type"); - if(type == 1){ - List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", orderLogistics.getDriverId()).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", orderLogistics.getDriverId()) - .eq("type", type).eq("paymentStatus", 1).last(" and day = DATE_FORMAT(now(), '%Y-%m-%d')")); - if(null == settlementRecord){ - settlementRecord = new SettlementRecord(); - settlementRecord.setDay(new Date()); - settlementRecord.setDriverId(orderLogistics.getDriverId()); - settlementRecord.setType(type); - settlementRecord.setPaymentStatus(1); - settlementRecord.setPayMoney(total.doubleValue()); - settlementRecord.setInsertTime(new Date()); - settlementRecordService.insert(settlementRecord); - }else{ - settlementRecord.setPayMoney(total.doubleValue()); - settlementRecordService.updateById(settlementRecord); - } - for (SettlementDetail detail : settlementDetailList) { - detail.setSettlementRecordId(settlementRecord.getId()); - settlementDetailService.updateById(detail); - } - } - } - } - } - } - break; } this.updateById(orderLogistics); - - if(6 == state && ToolUtil.isNotEmpty(pickUpCode)){ - fillInPickUpCode(orderId, pickUpCode, language); - } - - + // TODO: 2020/6/5 推送状态 new Thread(new Runnable() { @Override @@ -442,283 +295,7 @@ pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState()); } }).start(); - - - if(state == 6){ - UserInfo userInfo = userInfoMapper.selectById(orderLogistics.getUserId()); - language = userInfo.getLanguage(); - String payTypeChinese = ""; - String payTypeEnglish = ""; - String payTypeFrench = ""; - if(orderLogistics.getPayType() == 1){ - payTypeChinese = "手机支付"; - payTypeEnglish = "Mobile money"; - payTypeFrench = "Argent mobile"; - } - if(orderLogistics.getPayType() == 2){ - payTypeChinese = "银行卡支付"; - payTypeEnglish = "Bank card"; - payTypeFrench = "Carte bancaire"; - } - if(orderLogistics.getPayType() == 3){ - payTypeChinese = "余额支付"; - payTypeEnglish = "I-GO Wallet"; - payTypeFrench = "Portefeuille I-GO"; - } - if(orderLogistics.getPayType() == 3){ - payTypeChinese = "现金"; - payTypeEnglish = "Cash"; - payTypeFrench = "En espèces"; - } - - if(ToolUtil.isNotEmpty(userInfo.getEmail())){ - String path = templatePath + "user/receiptLogistics.html"; - Document document = Jsoup.parse(new File(path), "UTF-8"); - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - Driver driver = driverService.selectById(orderLogistics.getDriverId()); - Car car = carMapper.selectById(orderLogistics.getCarId()); - Double aDouble = 0D; - if(null != orderLogistics.getDriverId()){ - aDouble = orderEvaluateService.queryDriverScore(orderLogistics.getDriverId()); - } - if(1 == language){ - document.getElementById("english").remove(); - document.getElementById("french").remove(); - document.getElementsByTag("title").get(0).text("I-GO电子收据"); - Element title_chinese = document.getElementById("title_chinese"); - title_chinese.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",您在I-GO此订单消费GHS " + orderLogistics.getPayMoney()); - Element xcf_chinese = document.getElementById("xcf_chinese"); - xcf_chinese.text("GHS " + new BigDecimal(orderLogistics.getOrderMoney()).setScale(2, RoundingMode.HALF_EVEN)); - if(null != orderLogistics.getCouponMoney() && orderLogistics.getCouponMoney() > 0){ - Element yhq_chinese = document.getElementById("yhq_chinese"); - yhq_chinese.text("GHS -" + new BigDecimal(orderLogistics.getCouponMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element yhq_chinese_div = document.getElementById("yhq_chinese_div"); - yhq_chinese_div.remove(); - } - if(null != orderLogistics.getDiscountMoney() && orderLogistics.getDiscountMoney() > 0){ - Element zk_chinese = document.getElementById("zk_chinese"); - zk_chinese.text("GHS -" + new BigDecimal(orderLogistics.getDiscountMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element zk_chinese_div = document.getElementById("zk_chinese_div"); - zk_chinese_div.remove(); - } - if(null != orderLogistics.getRedPacketMoney() && orderLogistics.getRedPacketMoney() > 0){ - Element hb_chinese = document.getElementById("hb_chinese"); - hb_chinese.text("GHS -" + new BigDecimal(orderLogistics.getRedPacketMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element hb_chinese_div = document.getElementById("hb_chinese_div"); - hb_chinese_div.remove(); - } - Element xj_chinese = document.getElementById("xj_chinese"); - xj_chinese.text("GHS " + new BigDecimal(orderLogistics.getPayMoney()).setScale(2, RoundingMode.HALF_EVEN)); - Element pay_type_chinese = document.getElementById("pay_type_chinese"); - pay_type_chinese.text(payTypeChinese); - Element pay_money_chinese = document.getElementById("pay_money_chinese"); - pay_money_chinese.text("GHS " + new BigDecimal(orderLogistics.getPayMoney()).setScale(2, RoundingMode.HALF_EVEN)); - Element pdf_chinese = document.getElementById("pdf_chinese"); - pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4"); - Element lost_item_chinese = document.getElementById("lost_item_chinese"); - lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4"); -// Element track_chinese = document.getElementById("track_chinese"); -// track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html"); - Element pay_time_chinese = document.getElementById("pay_time_chinese"); - pay_time_chinese.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime()))); - Elements driver_chinese = document.getElementsByClass("driver_chinese"); - for (int i = 0; i < driver_chinese.size(); i++) { - Element element = driver_chinese.get(i); - element.text(" " + driver.getFirstName() + "." + driver.getLastName()); - } - Element cp_chinese = document.getElementById("cp_chinese"); - cp_chinese.text("车牌:" + car.getCarLicensePlate()); - Element pf_chinese = document.getElementById("pf_chinese"); - pf_chinese.text("司机评分:" + aDouble); - Element start_address_chinese = document.getElementById("start_address_chinese"); - start_address_chinese.text(orderLogistics.getStartAddress()); - Element end_address_chinese = document.getElementById("end_address_chinese"); - end_address_chinese.text(orderLogistics.getEndAddress()); - Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId())); - Element server_tel_chinese = document.getElementById("server_tel_chinese"); - server_tel_chinese.attr("href", "tel:" + (null != phone ? phone.getPhone() : "")); - } - if(2 == language){ - document.getElementById("chinese").remove(); - document.getElementById("french").remove(); - document.getElementsByTag("title").get(0).text("Receipt"); - Element title_english = document.getElementById("title_english"); - title_english.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",You spent GHS " + orderLogistics.getPayMoney() + " on the trip "); - Element xcf_english = document.getElementById("xcf_english"); - xcf_english.text("GHS " + new BigDecimal(orderLogistics.getOrderMoney()).setScale(2, RoundingMode.HALF_EVEN)); - if(null != orderLogistics.getCouponMoney() && orderLogistics.getCouponMoney() > 0){ - Element yhq_english = document.getElementById("yhq_english"); - yhq_english.text("GHS -" + new BigDecimal(orderLogistics.getCouponMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element yhq_english_div = document.getElementById("yhq_english_div"); - yhq_english_div.remove(); - } - if(null != orderLogistics.getDiscountMoney() && orderLogistics.getDiscountMoney() > 0){ - Element zk_english = document.getElementById("zk_english"); - zk_english.text("GHS -" + new BigDecimal(orderLogistics.getDiscountMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element zk_english_div = document.getElementById("zk_english_div"); - zk_english_div.remove(); - } - if(null != orderLogistics.getRedPacketMoney() && orderLogistics.getRedPacketMoney() > 0){ - Element hb_english = document.getElementById("hb_english"); - hb_english.text("GHS -" + new BigDecimal(orderLogistics.getRedPacketMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element hb_english_div = document.getElementById("hb_english_div"); - hb_english_div.remove(); - } - Element xj_english = document.getElementById("xj_english"); - xj_english.text("GHS " + new BigDecimal(orderLogistics.getPayMoney()).setScale(2, RoundingMode.HALF_EVEN)); - Element pay_type_english = document.getElementById("pay_type_english"); - pay_type_english.text(payTypeEnglish); - Element pay_money_english = document.getElementById("pay_money_english"); - pay_money_english.text("GHS " + new BigDecimal(orderLogistics.getPayMoney()).setScale(2, RoundingMode.HALF_EVEN)); - Element pdf_english = document.getElementById("pdf_english"); - pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4"); - Element lost_item_english = document.getElementById("lost_item_english"); - lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4"); -// Element track_english = document.getElementById("track_english"); -// track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html"); - Element pay_time_english = document.getElementById("pay_time_english"); - pay_time_english.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime()))); - Elements driver_english = document.getElementsByClass("driver_english"); - for (int i = 0; i < driver_english.size(); i++) { - Element element = driver_english.get(i); - element.text(" " + driver.getFirstName() + "." + driver.getLastName()); - } - Element cp_english = document.getElementById("cp_english"); - cp_english.text("Number Plate:" + car.getCarLicensePlate()); - Element pf_english = document.getElementById("pf_english"); - pf_english.text("Driver Rating:" + aDouble); - Element start_address_english = document.getElementById("start_address_english"); - start_address_english.text(orderLogistics.getStartAddress()); - Element end_address_english = document.getElementById("end_address_english"); - end_address_english.text(orderLogistics.getEndAddress()); - Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId())); - Element server_tel_english = document.getElementById("server_tel_english"); - server_tel_english.attr("href", "tel:" + (null != phone ? phone.getPhone() : "")); - } - if(3 == language){ - document.getElementById("chinese").remove(); - document.getElementById("english").remove(); - document.getElementsByTag("title").get(0).text("Reçu"); - Element title_french = document.getElementById("title_french"); - title_french.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",Vous consommez GHS " + orderLogistics.getPayMoney() + " sur votre commande i-go1 le "); - Element xcf_french = document.getElementById("xcf_french"); - xcf_french.text("GHS " + new BigDecimal(orderLogistics.getOrderMoney()).setScale(2, RoundingMode.HALF_EVEN)); - if(null != orderLogistics.getCouponMoney() && orderLogistics.getCouponMoney() > 0){ - Element yhq_french = document.getElementById("yhq_french"); - yhq_french.text("GHS -" + new BigDecimal(orderLogistics.getCouponMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element yhq_french_div = document.getElementById("yhq_french_div"); - yhq_french_div.remove(); - } - if(null != orderLogistics.getDiscountMoney() && orderLogistics.getDiscountMoney() > 0){ - Element zk_french = document.getElementById("zk_french"); - zk_french.text("GHS -" + new BigDecimal(orderLogistics.getDiscountMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element zk_french_div = document.getElementById("zk_french_div"); - zk_french_div.remove(); - } - if(null != orderLogistics.getRedPacketMoney() && orderLogistics.getRedPacketMoney() > 0){ - Element hb_french = document.getElementById("hb_french"); - hb_french.text("GHS -" + new BigDecimal(orderLogistics.getRedPacketMoney()).setScale(2, RoundingMode.HALF_EVEN)); - }else{ - Element hb_french_div = document.getElementById("hb_french_div"); - hb_french_div.remove(); - } - Element xj_french = document.getElementById("xj_french"); - xj_french.text("GHS " + new BigDecimal(orderLogistics.getPayMoney()).setScale(2, RoundingMode.HALF_EVEN)); - Element pay_type_french = document.getElementById("pay_type_french"); - pay_type_french.text(payTypeFrench); - Element pay_money_french = document.getElementById("pay_money_french"); - pay_money_french.text("GHS " + new BigDecimal(orderLogistics.getPayMoney()).setScale(2, RoundingMode.HALF_EVEN)); - Element pdf_french = document.getElementById("pdf_french"); - pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4"); - Element lost_item_french = document.getElementById("lost_item_french"); - lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4"); -// Element track_french = document.getElementById("track_french"); -// track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html"); - Element pay_time_french = document.getElementById("pay_time_french"); - pay_time_french.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime()))); - Elements driver_french = document.getElementsByClass("driver_french"); - for (int i = 0; i < driver_french.size(); i++) { - Element element = driver_french.get(i); - element.text(" " + driver.getFirstName() + "." + driver.getLastName()); - } - Element cp_french = document.getElementById("cp_french"); - cp_french.text("Plaque: GS " + car.getCarLicensePlate()); - Element pf_french = document.getElementById("pf_french"); - pf_french.text("Note du chauffeur: " + aDouble); - Element start_address_french = document.getElementById("start_address_french"); - start_address_french.text(orderLogistics.getStartAddress()); - Element end_address_french = document.getElementById("end_address_french"); - end_address_french.text(orderLogistics.getEndAddress()); - Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId())); - Element server_tel_french = document.getElementById("server_tel_french"); - server_tel_french.attr("href", "tel:" + (null != phone ? phone.getPhone() : "")); - } - - EmailUtil.send(userInfo.getEmail(), language == 1 ? "I-GO电子收据" : language == 2 ? "Receipt" : "Reçu", document.html()); - - //开始生成pdf收据和html收据 - File file = new File("/usr/local/nginx/html/files/html/"); - if(!file.exists()){ - file.mkdirs(); - } - file = new File("/usr/local/nginx/html/files/html/parcel_receipt_" + orderId + ".html"); - if(!file.exists()){ - file.createNewFile(); - } - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(document.html()); - fileWriter.flush(); - fileWriter.close(); - - File file1 = new File("/usr/local/nginx/html/files/pdf/"); - if(!file1.exists()){ - file1.mkdirs(); - } - file1 = new File("/usr/local/nginx/html/files/pdf/parcel_receipt_" + orderId + ".pdf"); - if(!file1.exists()){ - file1.createNewFile(); - } - try{ - FileOutputStream fileOutputStream = new FileOutputStream(file1); - HtmlToPdfUtils.convertToPdf("/usr/local/nginx/html/files/html/parcel_receipt_" + orderId + ".html", "I-GO", fileOutputStream); - }catch (Exception e){ - e.printStackTrace(); - System.out.println("html转pdf异常"); - } - - String link ="http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html"; - TEmail tEmail = new TEmail(); - tEmail.setLink(link); - tEmail.setUserId(userInfo.getId()); - tEmail.setType(1); - tEmail.setName(language == 1 ? "I-GO电子收据" : language == 2 ? "Receipt" : "Reçu"); - tEmail.setOrderId(orderId); - 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); - } - - - - } - + return ResultUtil.success(); } @@ -751,29 +328,12 @@ */ @Override public ResultUtil makeUpTheDifference(Integer orderId, Double difference, Integer language) throws Exception { - OrderLogisticsSpread query = orderLogisticsSpreadService.query(orderId); OrderLogistics orderLogistics = this.selectById(orderId); - if(orderLogistics.getState() != 4 && orderLogistics.getState() != 8){ + if(orderLogistics.getState() != 4){ return ResultUtil.error(language == 1 ? "不允许设置差价" : language == 2 ? "To set price difference is not allowed." : "Il n’est pas permis de définir une différence de prix."); } - if(query != null){ - query.setPrice(difference); - orderLogisticsSpreadService.updateById(query); - return ResultUtil.success(); - } - OrderLogisticsSpread orderLogisticsSpread = new OrderLogisticsSpread(); - orderLogisticsSpread.setOrderLogisticsId(orderId); - orderLogisticsSpread.setPrice(difference); - orderLogisticsSpreadService.insert(orderLogisticsSpread); - orderLogistics.setState(8); - this.updateById(orderLogistics); - - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushPayDifference(1, orderLogistics.getUserId(), orderId, orderLogistics.getType(), difference); - } - }).start(); + //推送给乘客,需要乘客确认后再加 + pushUtil.pushPayDifference(1, orderLogistics.getUserId(), orderId, orderLogistics.getType(), difference, 1); return ResultUtil.success(); } @@ -869,13 +429,6 @@ public void run() { pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState()); pushUtil.pushOrderState(2, orderLogistics.getDriverId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState()); - } - }).start(); - - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushDriverPosition(orderId, orderLogistics.getType()); } }).start(); @@ -1047,4 +600,355 @@ this.updateById(orderLogistics); pushUtil.pushModifyAddress(1, orderLogistics.getUserId(), orderId, 4, status); } + + + /** + * 获取费用明细 + * @param orderId + * @return + * @throws Exception + */ + @Override + public Map<String, Object> queryMoneyInfo(Integer orderId) throws Exception { + OrderLogistics orderLogistics = this.selectById(orderId); + if(orderLogistics.getState() == 5){//服务中的时候获取实时费用数据 + this.setMoney(orderLogistics, 0D, 0D); + } + + Map<String, Object> map = new HashMap<>(); + map.put("orderMoney", orderLogistics.getOrderMoney());//订单金额 + map.put("startMileage", orderLogistics.getStartMileage());//起步价 + map.put("startMoney", orderLogistics.getStartMoney());//起步价 + map.put("mileageKilometers", orderLogistics.getMileageKilometers());//里程费 + map.put("mileageMoney", orderLogistics.getMileageMoney());//里程费 + map.put("duration", orderLogistics.getDuration());//时长费 + map.put("durationMoney", orderLogistics.getDurationMoney());//时长费 + map.put("wait", orderLogistics.getWait());//等待费 + map.put("waitMoney", orderLogistics.getWaitMoney());//等待费 + map.put("longDistance", orderLogistics.getLongDistance());//远途费 + map.put("longDistanceMoney", orderLogistics.getLongDistanceMoney());//远途费 + map.put("parkMoney", orderLogistics.getParkMoney());//停车费 + map.put("roadTollMoney", orderLogistics.getRoadTollMoney());//过路费 + map.put("redPacketMoney", orderLogistics.getRedPacketMoney());//红包抵扣金额 + map.put("couponMoney", orderLogistics.getCouponMoney());//优惠券抵扣金额 + map.put("discountMoney", orderLogistics.getDiscountMoney());//折扣抵扣金额 + map.put("discount", orderLogistics.getDiscount());//折扣 + map.put("priceDifference", orderLogistics.getPriceDifference());//补差价 + return map; + } + + + + /** + * 计算价格 + * @param orderLogistics + * @param parkingFee + * @param crossingFee + * @return + * @throws Exception + */ + public OrderLogistics setMoney(OrderLogistics orderLogistics, Double parkingFee, Double crossingFee) throws Exception { + Map<String, Object> query1 = systemPriceMapper.query(orderLogistics.getCompanyId(), 4, orderLogistics.getServerCarModelId()); + //开始根据不同的方式计算金额 + double amount = 0; + JSONObject jsonObject = JSON.parseObject(query1.get("content").toString()); + Double num1 = jsonObject.getDouble("num1");//起步价(元) + Double num2 = jsonObject.getDouble("num2");//起步公里(公里) + Double num3 = jsonObject.getDouble("num3");//起步时间(分钟) + Double num4 = jsonObject.getDouble("num4");//里程费(元) + Double num5 = jsonObject.getDouble("num5");//时长费(分钟) + Double num6 = jsonObject.getDouble("num6");//等待费(分钟) + Double num7 = jsonObject.getDouble("num7");//等待费(元) + Double num8 = jsonObject.getDouble("num8");//远途费(公里) + Double num9 = jsonObject.getDouble("num9");//远途费(公里) + Double num10 = jsonObject.getDouble("num10");//远途费(元) + Double num11 = jsonObject.getDouble("num11");//远途费(公里) + Double num12 = jsonObject.getDouble("num12");//远途费(公里) + Double num13 = jsonObject.getDouble("num13");//远途费(元) + Double num14 = jsonObject.getDouble("num14");//远途费(公里) + Double num15 = jsonObject.getDouble("num15");//远途费(元) +// String num16 = jsonObject.getString("num16");//夜间费(开始时间) +// Double num17 = jsonObject.getDouble("num17");//夜间费(元) +// Double num18 = jsonObject.getDouble("num18");//夜间费(元) +// Double num19 = jsonObject.getDouble("num19");//夜间费(元) +// Double num20 = jsonObject.getDouble("num20");//夜间费(元) +// Double num21 = jsonObject.getDouble("num21");//夜间费(元) +// Double num22 = jsonObject.getDouble("num22");//夜间费(元) + String num23 = jsonObject.getString("num23");//高峰费(开始时间) + String num24 = jsonObject.getString("num24");//高峰费(开始时间) + Double num25 = jsonObject.getDouble("num25");//高峰费(元) + Double num26 = jsonObject.getDouble("num26");//高峰费(元) + Double num27 = jsonObject.getDouble("num27");//高峰费(元) + Double num28 = jsonObject.getDouble("num28");//高峰费(元) + Double num29 = jsonObject.getDouble("num29");//高峰费(元) + Double num30 = jsonObject.getDouble("num30");//高峰费(元) + + Date date = new Date(); + double d = (null == orderLogistics.getMileage() ? 0D : orderLogistics.getMileage()) / 1000;//实际公里 + double t = ((orderLogistics.getEndServiceTime().getTime() - orderLogistics.getStartServiceTime().getTime()) / 60000) + 1;//实际时间(不满一分钟按一分钟算) + double w = ((orderLogistics.getStartServiceTime().getTime() - orderLogistics.getArriveTime().getTime()) / 60000) + 1;//等待分钟(不满一分钟按一分钟算) + double d1 = (d - num2) < 0 ? 0 : d - num2;//超出起步里程的公里 + double t1 = (t - num3) < 0 ? 0 : new BigDecimal(t - num3).setScale(0, BigDecimal.ROUND_UP).doubleValue();//超过起步分钟数的时间 + double w1 = (w - num6) < 0 ? 0 : new BigDecimal(w - num6).setScale(0, BigDecimal.ROUND_UP).doubleValue();//超出等待时间的时间 + double yt1 = 0;//远途1段 + double yt2 = 0;//远途2段 + double yt3 = 0;//远途3段 + + + //夜间服务处理逻辑 +// if(ToolUtil.isNotEmpty(num16)){ +// Calendar s = Calendar.getInstance(); +// s.setTime(date); +// s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[0].split(":")[0])); +// s.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[0].split(":")[1])); +// +// Calendar e = Calendar.getInstance(); +// e.setTime(date); +// e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[1].split(":")[0])); +// e.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[1].split(":")[1])); +// +// if(date.getTime() > s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){ +// if(d > num8.doubleValue() && d <= num9.doubleValue()){ +// yt1 = num20 * (d - num8); +// } +// if(d > num9.doubleValue()){ +// yt1 = num20 * (num9 - num8); +// } +// if(d > num11.doubleValue() && d <= num12.doubleValue()){ +// yt2 = num21 * (d - num11); +// } +// if(d > num12.doubleValue()){ +// yt2 = num21 * (num12 - num11); +// } +// if(d > num14.doubleValue()){ +// yt3 = num22 * (d - num14); +// } +// amount = num17 + (d1 * num18) + (t1 * num19) + (w1 * num7) + yt1 + yt2 + yt3; +// orderLogistics.setStartMileage(num2); +// orderLogistics.setStartMoney(num17);//起步价 +// orderLogistics.setStartDuration((int)(num3.doubleValue())); +// orderLogistics.setMileageKilometers(new BigDecimal(d1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// orderLogistics.setMileageMoney(new BigDecimal(d1 * num18).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//里程费 +// orderLogistics.setDuration(new BigDecimal(t1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// orderLogistics.setDurationMoney(new BigDecimal(t1 * num19).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//时长费 +// orderLogistics.setWait(new BigDecimal(w1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// orderLogistics.setWaitMoney(new BigDecimal(w1 * num7).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//等待费 +// orderLogistics.setLongDistance(new BigDecimal((d > num8) ? d - num8 : 0).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// orderLogistics.setLongDistanceMoney(new BigDecimal(yt1 + yt2 + yt3).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//远途费 +// orderLogistics.setParkMoney(parkingFee);//停车费 +// orderLogistics.setRoadTollMoney(crossingFee);//过路费 +// orderLogistics.setRedPacketMoney(0D);//红包抵扣 +// orderLogistics.setCouponMoney(0D);//优惠券抵扣 +// orderLogistics.setDiscount(0D);//优惠抵扣 +// orderLogistics.setPayMoney(0D);//支付金额 +// orderLogistics.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// orderLogistics.setMoneyType(2); +// orderLogistics.setMoneyTime(num16); +// return orderLogistics; +// } +// } + + + //高峰时段处理逻辑 + Calendar s1 = Calendar.getInstance(); + s1.setTime(date); + s1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[0].split(":")[0])); + s1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[0].split(":")[1])); + + Calendar e1 = Calendar.getInstance(); + e1.setTime(date); + e1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[1].split(":")[0])); + e1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[1].split(":")[1])); + + Calendar s2 = Calendar.getInstance(); + s2.setTime(date); + s2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[0].split(":")[0])); + s2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[0].split(":")[1])); + + Calendar e2 = Calendar.getInstance(); + e2.setTime(date); + e2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[1].split(":")[0])); + e2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[1].split(":")[1])); + + if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())){ + if(d > num8.doubleValue() && d <= num9.doubleValue()){ + yt1 = num28 * (d - num8); + } + if(d > num9.doubleValue()){ + yt1 = num28 * (num9 - num8); + } + if(d > num11.doubleValue() && d <= num12.doubleValue()){ + yt2 = num29 * (d - num11); + } + if(d > num12.doubleValue()){ + yt2 = num29 * (num12 - num11); + } + if(d > num14.doubleValue()){ + yt3 = num30 * (d - num14); + } + amount = num25 + (d1 * num26) + (t1 * num27) + (w1 * num7) + yt1 + yt2 + yt3; + orderLogistics.setStartMileage(num2); + orderLogistics.setStartDuration((int)(num3.doubleValue())); + orderLogistics.setStartMoney(num25);//起步价 + 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()); + orderLogistics.setDurationMoney(new BigDecimal(t1 * num27).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//时长费 + orderLogistics.setWait(new BigDecimal(w1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + orderLogistics.setWaitMoney(new BigDecimal(w1 * num7).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//等待费 + orderLogistics.setLongDistance(new BigDecimal((d > num8) ? d - num8 : 0).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + orderLogistics.setLongDistanceMoney(new BigDecimal(yt1 + yt2 + yt3).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//远途费 + orderLogistics.setParkMoney(parkingFee);//停车费 + orderLogistics.setRoadTollMoney(crossingFee);//过路费 + orderLogistics.setRedPacketMoney(0D);//红包抵扣 + orderLogistics.setCouponMoney(0D);//优惠券抵扣 + orderLogistics.setDiscount(0D);//优惠抵扣 + orderLogistics.setPayMoney(0D);//支付金额 + orderLogistics.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + orderLogistics.setMoneyType(3); + if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis())){ + orderLogistics.setMoneyTime(num23); + }else{ + orderLogistics.setMoneyTime(num24); + } + + return orderLogistics; + } + + //其他时间段的计算 + if(d > num8.doubleValue() && d <= num9.doubleValue()){ + yt1 = num10 * (d - num8); + } + if(d > num9.doubleValue()){ + yt1 = num10 * (num9 - num8); + } + if(d > num11.doubleValue() && d <= num12.doubleValue()){ + yt2 = num13 * (d - num11); + } + if(d > num12.doubleValue()){ + yt2 = num13 * (num12 - num11); + } + if(d > num14.doubleValue()){ + yt3 = num15 * (d - num14); + } + amount = num1 + (d1 * num4) + (t1 * num5) + (w1 * num7) + yt1 + yt2 + yt3; + orderLogistics.setStartMileage(num2); + orderLogistics.setStartDuration((int)(num3.doubleValue())); + orderLogistics.setStartMoney(num1);//起步价 + 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()); + orderLogistics.setDurationMoney(new BigDecimal(t1 * num5).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//时长费 + orderLogistics.setWait(new BigDecimal(w1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + orderLogistics.setWaitMoney(new BigDecimal(w1 * num7).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//等待费 + orderLogistics.setLongDistance(new BigDecimal((d > num8) ? d - num8 : 0).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + orderLogistics.setLongDistanceMoney(new BigDecimal(yt1 + yt2 + yt3).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//远途费 + orderLogistics.setParkMoney(parkingFee);//停车费 + orderLogistics.setRoadTollMoney(crossingFee);//过路费 + orderLogistics.setRedPacketMoney(0D);//红包抵扣 + orderLogistics.setCouponMoney(0D);//优惠券抵扣 + orderLogistics.setDiscount(0D);//优惠抵扣 + orderLogistics.setPayMoney(0D);//支付金额 + orderLogistics.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + orderLogistics.setMoneyType(1); + return orderLogistics; + } + + + + /** + * 确认费用操作 + * @param orderId + * @param type + * @param parkingFee + * @param crossingFee + * @return + * @throws Exception + */ + @Override + public ResultUtil confirmFees(Integer language, Integer orderId, Integer type, Double parkingFee, Double crossingFee) throws Exception { + OrderLogistics orderLogistics = this.selectById(orderId); + if(orderLogistics.getArriveTime()==null){ + orderLogistics.setArriveTime(orderLogistics.getStartServiceTime()); + } + orderLogistics = this.setMoney(orderLogistics, 0D, 0D);//计算费用 + orderLogistics.setPayManner(type); + orderLogistics.setParkMoney(null == parkingFee ? 0D : parkingFee); + orderLogistics.setRoadTollMoney(null == crossingFee ? 0D : crossingFee); + orderLogistics.setOrderMoney(orderLogistics.getOrderMoney() + orderLogistics.getParkMoney() + orderLogistics.getRoadTollMoney() + orderLogistics.getPriceDifference()); + //判断是否首单免费-免费直接完成 + Integer orderNumber = this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId",orderLogistics.getUserId()).last("and (state=8 or state=9)")); + + if(orderNumber<=0){//判断是否是首单 + //判断是否免单 + UserInfo userInfo = userInfoMapper.selectById(orderLogistics.getUserId()); + if(userInfo.getFreeMoney().doubleValue()>0d){ + if(orderLogistics.getOrderMoney()<=userInfo.getFreeMoney().doubleValue()){ + orderLogistics.setState(8); + orderLogistics.setIsFree(2); + //添加已收入明细 + Company company = companyService.selectById(orderLogistics.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderLogistics.getStartMoney() + orderLogistics.getMileageMoney() + orderLogistics.getWaitMoney() + orderLogistics.getDurationMoney() + orderLogistics.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(orderLogistics.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderLogistics.getCompanyId(), 2, orderLogistics.getId(), 4, d.doubleValue()); + incomeService.saveData(2, orderLogistics.getDriverId(), 2, orderLogistics.getId(), 4, c.doubleValue()); + Driver driver = driverService.selectById(orderLogistics.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + }else{ + orderLogistics.setState(7); + orderLogistics.setOrderMoney(orderLogistics.getOrderMoney()-userInfo.getFreeMoney().doubleValue()); + orderLogistics.setFreeMoney(userInfo.getFreeMoney()); + + } + + }else{ + orderLogistics.setState(7); + } + + }else{ + orderLogistics.setState(7); + } + + Map<String, String> map = chinaMobileUtil.midAxbUnBindSend(orderLogistics.getBindId(),orderLogistics.getTelX()); + if(String.valueOf(map.get("code")).equals("200")){ + orderLogistics.setTelX(""); + orderLogistics.setBindId(""); + } + this.updateById(orderLogistics); + + + pushUtil.removeTask(orderId, 4);//删除定时任务,结束推送数据 + systemNoticeService.addSystemNotice(1, language == 1 ? "司机已结束本次行程,谢谢使用" : language == 2 ? + "The driver has finished the trip,thank you for using I-GO" : "Le chauffeur a terminé le trajet, merci d'utiliser I-GO", orderLogistics.getUserId()); + + //回滚司机状态为空闲 + Driver driver = driverService.selectById(orderLogistics.getDriverId()); + driver.setState(2); + driverService.updateById(driver); + + OrderLogistics finalOrderTaxi = orderLogistics; + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, finalOrderTaxi.getUserId(), finalOrderTaxi.getId(), 4, finalOrderTaxi.getState()); + pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 4, finalOrderTaxi.getState()); + } + }).start(); + return ResultUtil.success(); + } } 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 3758186..8df6b19 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 @@ -14,8 +14,11 @@ 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.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.quartz.JobDataMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -27,6 +30,7 @@ import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.*; @@ -88,6 +92,9 @@ @Value("${filePath}") private String filePath; + + @Autowired + private IReminderRulesService reminderRulesService; @@ -197,21 +204,6 @@ driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); orderPrivateCar.setState(2); orderPrivateCar.setSnatchOrderTime(new Date()); - - //调用高德创建轨迹 -// String s = gdFalconUtil.selectTerminal(driver.getPhone()); -// String track = gdFalconUtil.createTrack(s); -// orderPrivateCar.setTrackId(track); - - //调用移动的小号接口 - /*Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); - Region region = regionMapper.query(geocode.get("districtCode"));*/ -// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), null); -// if(String.valueOf(map.get("code")).equals("200")){ -// orderPrivateCar.setTelX(map.get("telX")); -// orderPrivateCar.setBindId(map.get("bindId")); -// } -// System.out.println(map); this.updateById(orderPrivateCar); //如果是预约单,则不修改司机为服务中 @@ -220,7 +212,52 @@ driver.setState(3); driverService.updateById(driver); } - + + + //todo 待翻译 + //添加定时任务(普通任务) + 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", "您的打车订单已超时" + m + "分钟,请抓紧!"); + 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); + + + 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 + appointmentTimeoutReminderInterval), appointmentTimeoutReminderInterval, -1); + } + } + //推送相关代码------------------start---------------- new Thread(new Runnable() { @Override @@ -233,12 +270,6 @@ } }).start(); - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushDriverPosition(orderId, 1); - } - }).start(); systemNoticeService.addSystemNotice(2, language == 1 ? "您已成功抢得打车订单,请及时联系客户!" : language == 2 ? "You have grabbed the ride order, please contact the client timely." @@ -294,6 +325,7 @@ orderPrivateCar.setState(3); orderPrivateCar.setSetOutTime(new Date()); systemNoticeService.addSystemNotice(1, language == 1 ? "司机已出发,请耐心等待" : language == 2 ? "The driver is on the way, please wait." : "Le chauffeur est en route. Veuillez patienter.", orderPrivateCar.getUserId()); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);//主动推送司机定位 break; case 4://到达预约点,等待客户上车 orderPrivateCar.setState(4); @@ -309,8 +341,6 @@ orderPrivateCar.setBoardingTime(new Date()); orderPrivateCar.setState(5); orderPrivateCar.setStartServiceTime(new Date()); - - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);//主动推送司机定位 OrderPosition orderPosition = new OrderPosition(); orderPosition.setOrderId(orderId); diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReminderRulesMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReminderRulesMapper.java new file mode 100644 index 0000000..375d138 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ReminderRulesMapper.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.ReminderRules; + +/** + * @author zhibing.pu + * @Date 2024/4/18 16:10 + */ +public interface ReminderRulesMapper extends BaseMapper<ReminderRules> { +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReminderRulesMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReminderRulesMapper.xml new file mode 100644 index 0000000..84772d9 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ReminderRulesMapper.xml @@ -0,0 +1,5 @@ +<?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.ReminderRulesMapper"> + +</mapper> \ No newline at end of file diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReminderRules.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReminderRules.java new file mode 100644 index 0000000..010ff3e --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ReminderRules.java @@ -0,0 +1,32 @@ +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/4/18 16:09 + */ +@Data +@TableName("t_sys_reminder_rules") +public class ReminderRules { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 企业id + */ + @TableField("companyId") + private Integer companyId; + /** + * 配置规则 + */ + @TableField("content") + private String content; +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReminderRulesService.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReminderRulesService.java new file mode 100644 index 0000000..61def40 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReminderRulesService.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.ReminderRules; + +/** + * @author zhibing.pu + * @Date 2024/4/18 16:11 + */ +public interface IReminderRulesService extends IService<ReminderRules> { +} 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 d35c434..8cbe308 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 @@ -584,7 +584,7 @@ case 3://城际(没有此流程) break; case 4:// - break; + return orderLogisticsService.confirmFees(language, orderId, type, parkingFee, crossingFee); case 5: break; case 6: @@ -675,7 +675,7 @@ case 3://城际(没有此流程) return null; case 4:// - break; + return orderLogisticsService.queryOrderInfo(language, orderId); case 5: break; case 6: @@ -980,6 +980,26 @@ redisUtil.setStrValue("VEHICLE", jsonArray.toJSONString()); } break; + case 4: + OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); + if(orderLogistics.getState() == 8 || orderLogistics.getState() == 9){ + return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés."); + } + if(orderLogistics.getState() != 7){ + return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande."); + } + orderLogistics.setPayManner(2);//其他方式支付 + orderLogistics.setRedPacketMoney(0D); + orderLogistics.setCouponMoney(0D); + orderLogistics.setDiscount(0D); + orderLogistics.setDiscountMoney(0D); + orderLogistics.setPayMoney(orderLogistics.getOrderMoney()); + orderLogistics.setState(8); + orderLogisticsService.updateById(orderLogistics); + userId = orderLogistics.getUserId(); + driverId = orderLogistics.getDriverId(); + state = orderLogistics.getState(); + break; } @@ -1011,6 +1031,8 @@ return orderPrivateCarService.queryMoneyInfo(orderId); case 2: break; + case 4: + return orderLogisticsService.queryMoneyInfo(orderId); } return null; } diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReminderRulesServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReminderRulesServiceImpl.java new file mode 100644 index 0000000..cbb6387 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReminderRulesServiceImpl.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.ReminderRulesMapper; +import com.stylefeng.guns.modular.system.model.ReminderRules; +import com.stylefeng.guns.modular.system.service.IReminderRulesService; +import org.springframework.stereotype.Service; + +/** + * @author zhibing.pu + * @Date 2024/4/18 16:12 + */ +@Service +public class ReminderRulesServiceImpl extends ServiceImpl<ReminderRulesMapper, ReminderRules> implements IReminderRulesService { +} 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 a1ccc37..187a24e 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 @@ -47,9 +47,6 @@ private IOrderTaxiService orderTaxiService; @Autowired - private GDMapElectricFenceUtil gdMapElectricFenceUtil; - - @Autowired private IOrderPrivateCarService orderPrivateCarService; @Autowired @@ -495,8 +492,9 @@ * @param orderId * @param orderType * @param money + * @param status 1=申请,2=同意,3=拒绝 */ - public void pushPayDifference(Integer type, Integer uid, Integer orderId, Integer orderType, Double money){ + public void pushPayDifference(Integer type, Integer uid, Integer orderId, Integer orderType, Double money, Integer status){ JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 200); jsonObject.put("msg", "SUCCESS"); @@ -505,6 +503,7 @@ map.put("orderId", orderId); map.put("orderType", orderType); map.put("money", money); + map.put("status", status); jsonObject.put("data", map); //调用推送 @@ -575,4 +574,41 @@ System.err.println(jsonObject1.getString("msg")); } } + + + /** + * 司机超时推送 + * @param type + * @param uid + * @param orderId + * @param orderType + * @param describe + */ + public void pushOrderTimeOut(Integer type, Integer uid, Integer orderId, Integer orderType, String describe){ + 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("orderId", orderId); + map.put("orderType", orderType); + map.put("describe", describe); + jsonObject.put("data", map); + + //调用推送 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("msg", jsonObject.toJSONString()); + params.add("id", String.valueOf(uid)); + params.add("type", String.valueOf(type)); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class); + JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); + if(jsonObject1.getIntValue("code") != 200){ + System.err.println(jsonObject1.getString("msg")); + } + } } 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 new file mode 100644 index 0000000..0234df5 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java @@ -0,0 +1,261 @@ +package com.stylefeng.guns.modular.system.util.quartz; + +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.*; +import org.quartz.impl.matchers.GroupMatcher; + +import java.io.InputStream; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * quartz任务调度工具类 + * @author zhibing.pu + * @Date 2024/3/20 11:12 + */ +@Slf4j +public class QuartzUtil { + /** + * 构建调度器 + */ + public static Scheduler scheduler; + + + /** + * 启动调度器 + * @param propertiesStream 配置文件流 + * @return + */ + public static void start(InputStream propertiesStream) throws SchedulerException { + if(null == scheduler){ + scheduler = SchedulerUtil.getScheduler(propertiesStream); + } + scheduler.start(); + log.info(QuartzEnum.SCHEDULER_START_SUCCESS.getValue()); + } + + + + + + /** + * 添加普通定时任务 + * @param quartzJob 任务类 + * @param startTime 任务开始执行时间,为空则立即执行 + * @param intervalInMilliseconds 执行间隔毫秒数 + * @param repeatCount 重复执行次数,-1表示永远执行 + * @throws SchedulerException + */ + public static void addSimpleQuartzTask(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException { + if(null == scheduler){ + log.error("请先加载任务调取器"); + return; + } + JobDetail jobDetail = getJobDetail(quartzJob); + Trigger simpleTrigger = getSimpleTrigger(quartzJob, startTime, intervalInMilliseconds, repeatCount); + scheduler.scheduleJob(jobDetail, simpleTrigger); + log.info(QuartzEnum.ADD_SIMPLE_TRIGGER_SUCCESS.getValue()); + } + + + + /** + * 添加Cron表达式的定时任务 + * @param quartzJob 任务类 + * @param cron cron表达式 + * @throws SchedulerException + */ + public static void addCronQuartzTask(QuartzJob quartzJob, String cron) throws SchedulerException { + if(null == scheduler){ + log.error("请先加载任务调取器"); + return; + } + JobDetail jobDetail = getJobDetail(quartzJob); + Trigger cronTrigger = getCronTrigger(quartzJob, cron); + scheduler.scheduleJob(jobDetail, cronTrigger); + log.info(QuartzEnum.ADD_CRON_TRIGGER_SUCCESS.getValue()); + } + + + /** + * 删除任务 + * @param name 任务名称 + * @param group 任务分组 + * @return + */ + public static boolean deleteQuartzTask(String name, String group){ + JobKey jobKey = new JobKey(name, group); + boolean b = false; + try { + b = scheduler.deleteJob(jobKey); + } catch (SchedulerException e) { + throw new RuntimeException(e); + } + return b; + } + + /** + * 删除任务 + * @param jobKey + * @return + */ + public static boolean deleteQuartzTask(JobKey jobKey){ + boolean b = false; + try { + b = scheduler.deleteJob(jobKey); + } catch (SchedulerException e) { + throw new RuntimeException(e); + } + return b; + } + + /** + * 删除分组下的所有定时任务 + * @param group 分组名称 + * @return + */ + public static boolean deleteGroupQuartzTask(String group){ + try { + GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(group); + Set<JobKey> jobKeys = scheduler.getJobKeys(groupMatcher); + boolean b = scheduler.deleteJobs(jobKeys.stream().collect(Collectors.toList())); + if(!b){ + return false; + } + }catch (Exception e){ + e.printStackTrace(); + return false; + } + return true; + } + + + + /** + * 清空所有定时任务 + * @return + */ + public static boolean deleteAllQuartzTask(){ + try { + List<String> jobGroupNames = scheduler.getJobGroupNames(); + for (String jobGroupName : jobGroupNames) { + GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(jobGroupName); + Set<JobKey> jobKeys = scheduler.getJobKeys(groupMatcher); + boolean b = scheduler.deleteJobs(jobKeys.stream().collect(Collectors.toList())); + if(!b){ + return false; + } + } + }catch (Exception e){ + e.printStackTrace(); + return false; + } + return true; + } + + + + + + /** + * 构建任务描述JobDetail对象 + * @param quartzJob 任务对象 + * @return + */ + private static JobDetail getJobDetail(QuartzJob quartzJob){ + String name = quartzJob.getName(); + String group = quartzJob.getGroup(); + if(null == name || "".equals(name)){ + name = QuartzEnum.JOB_NAME.getValue(); + } + if(null == group || "".equals(group)){ + group = QuartzEnum.DEFAULT_GROUP.getValue(); + } + return getJobDetail(quartzJob, name, group, quartzJob.getJobDataMap()); + } + + + + /** + * 构建任务描述JobDetail对象 + * @param job 任务类 + * @param job_name 任务名称 + * @param group_name 任务分组名称 + * @param jobDataMap 自定义参数 + * @return + */ + 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) + .build(); + return jobDetail; + } + + + /** + * 构建Trigger执行器 + * @param quartzJob 任务类 + * @param startTime 任务开始执行时间,为空则立即执行 + * @param intervalInMilliseconds 执行间隔毫秒数 + * @param repeatCount 重读执行次数,-1表示永远执行 + * @return + */ + private static Trigger getSimpleTrigger(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount){ + String name = quartzJob.getName(); + String group = quartzJob.getGroup(); + if(null == name || "".equals(name)){ + name = QuartzEnum.JOB_NAME.getValue(); + } + if(null == group || "".equals(group)){ + group = QuartzEnum.DEFAULT_GROUP.getValue(); + } + TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger(); + if(null == startTime){ + triggerTriggerBuilder.startNow(); + }else{ + triggerTriggerBuilder.startAt(startTime); + } + + SimpleTrigger trigger = triggerTriggerBuilder + .withIdentity(name, group) + .withSchedule( + SimpleScheduleBuilder + .simpleSchedule() + .withIntervalInMilliseconds(intervalInMilliseconds) + .withRepeatCount(repeatCount) + ).build(); + return trigger; + } + + + /** + * 构建cronExpression表达式执行器 + * @param quartzJob 任务类 + * @param cron cron表达式 + * @return + */ + private static Trigger getCronTrigger(QuartzJob quartzJob, String cron) { + String name = quartzJob.getName(); + String group = quartzJob.getGroup(); + if(null == name || "".equals(name)){ + name = QuartzEnum.JOB_NAME.getValue(); + } + if(null == group || "".equals(group)){ + group = QuartzEnum.DEFAULT_GROUP.getValue(); + } + CronTrigger trigger = TriggerBuilder.newTrigger() + .startNow() + .withIdentity(name, group) + .withSchedule( + CronScheduleBuilder.cronSchedule(cron) + ).build(); + return trigger; + } + + +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/SchedulerUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/SchedulerUtil.java new file mode 100644 index 0000000..95f666b --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/SchedulerUtil.java @@ -0,0 +1,35 @@ +package com.stylefeng.guns.modular.system.util.quartz; + +import org.quartz.Scheduler; +import org.quartz.impl.StdSchedulerFactory; + +import java.io.InputStream; + +/** + * @author zhibing.pu + * @Date 2024/3/20 10:56 + */ +public class SchedulerUtil { + + + /** + * 获取调度器 + * 加载自定义配置文件 + * @param propertiesStream 配置文件流 + * @return + */ + public static Scheduler getScheduler(InputStream propertiesStream) { + try { + StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory(); + if(null == propertiesStream){ + stdSchedulerFactory.initialize("quartz.properties"); + }else{ + stdSchedulerFactory.initialize(propertiesStream); + } + return stdSchedulerFactory.getScheduler(); + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } +} 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 new file mode 100644 index 0000000..fa413e4 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/jobs/OrderTimeOutJob.java @@ -0,0 +1,134 @@ +package com.stylefeng.guns.modular.system.util.quartz.jobs; + +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.quartz.QuartzUtil; +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.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 订单司机超时提醒任务 + * @author zhibing.pu + * @Date 2024/4/18 15:19 + */ +@Slf4j +@Component +public class OrderTimeOutJob extends QuartzJob { + + @Resource + private PushUtil pushUtil; + @Resource + private IOrderPrivateCarService orderPrivateCarService; + @Resource + private IOrderLogisticsService orderLogisticsService; + + + + @Override + public QuartzJob buildQuartzJob() { + return super.buildQuartzJob(); + } + + @Override + public QuartzJob buildQuartzJob(String name) { + return super.buildQuartzJob(name); + } + + @Override + public QuartzJob buildQuartzJob(String name, String group) { + return super.buildQuartzJob(name, group); + } + + @Override + public QuartzJob buildQuartzJob(String name, String group, JobDataMap jobDataMap) { + return super.buildQuartzJob(name, group, jobDataMap); + } + + /** + * 执行的业务逻辑 + * @param jobExecutionContext 定时任务上下文对象 + */ + @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"); + String describe = jobDataMap.getString("describe"); + if(1 == orderType){ + OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); + if(2 != 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()){ + JobKey key = jobExecutionContext.getJobDetail().getKey(); + boolean b = QuartzUtil.deleteQuartzTask(key); + if(!b){ + log.error("定时任务关闭失败:" + key.toString()); + } + return; + } + } + pushUtil.pushOrderTimeOut(2, driverId, orderId, orderType, describe); + } + + + /** + * 初始化任务对象 + * @return + */ + public static QuartzJob init(){ + return new OrderTimeOutJob().buildQuartzJob(); + } + + /** + * 初始化任务对象 + * @param name + * @return + */ + public static QuartzJob init(String name){ + return new OrderTimeOutJob().buildQuartzJob(name); + } + + + + /** + * 初始化任务对象 + * @param name + * @param group + * @return + */ + public static QuartzJob init(String name, String group){ + return new OrderTimeOutJob().buildQuartzJob(name, group); + } + + + + /** + * 初始化任务对象 + * @param name + * @param group + * @return + */ + public static QuartzJob init(String name, String group, JobDataMap jobDataMap){ + return new OrderTimeOutJob().buildQuartzJob(name, group, jobDataMap); + } +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzEnum.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzEnum.java new file mode 100644 index 0000000..e8d10de --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzEnum.java @@ -0,0 +1,46 @@ +package com.stylefeng.guns.modular.system.util.quartz.model; + +/** + * + * quartz枚举常量 + * @author zhibing.pu + * @Date 2024/3/20 11:20 + */ +public enum QuartzEnum { + /** + * 任务名称 + */ + JOB_NAME("quartz_job"), + /** + * 任务分组 + */ + DEFAULT_GROUP("quartz_group"), + /** + * quartz任务调度器启动成功 + */ + SCHEDULER_START_SUCCESS("Quartz Scheduler start success!"), + /** + * 任务添加到调度器成功 + */ + ADD_SIMPLE_TRIGGER_SUCCESS("add Quartz SimpleTrigger success!"), + /** + * 任务添加到调度器成功 + */ + ADD_CRON_TRIGGER_SUCCESS("add Quartz CronTrigger success!") + ; + + + QuartzEnum(String value) { + this.value = value; + } + + private String value; + + public String getValue() { + return value; + } + + private void setValue(String value) { + this.value = value; + } +} 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 new file mode 100644 index 0000000..b43f938 --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/model/QuartzJob.java @@ -0,0 +1,108 @@ +package com.stylefeng.guns.modular.system.util.quartz.model; + +import com.stylefeng.guns.core.util.ToolUtil; +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; + +/** + * quartz任务类 + * @author zhibing.pu + * @Date 2024/3/20 11:14 + */ +@Slf4j +@Data +public abstract class QuartzJob implements Job { + /** + * 任务名称 + */ + @Getter + private String name; + /** + * 任务分组 + */ + @Getter + private String group; + /** + * 自定义参数 + */ + @Getter + private JobDataMap jobDataMap; + + + /** + * 构建QuartzJob对象 + * @return + */ + public QuartzJob buildQuartzJob() { + return buildQuartzJob(QuartzEnum.JOB_NAME.getValue()); + } + + + + /** + * 构建QuartzJob对象 + * @param name 任务名称 + * @return + */ + public QuartzJob buildQuartzJob(String name) { + return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue()); + } + + + + /** + * 构建QuartzJob对象 + * @param name 任务名称 + * @param group 任务分组名称 + * @return + */ + public QuartzJob buildQuartzJob(String name, String group) { + return buildQuartzJob(name, QuartzEnum.DEFAULT_GROUP.getValue(), null); + } + + /** + * 构建QuartzJob对象 + * @param name 任务名称 + * @param group 任务分组名称 + * @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; + } + + /** + * 需要执行的任务的业务逻辑方法 + * @param jobExecutionContext 定时任务上下文对象 + */ + 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); + } + +} diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java index 0d2618f..f3abe79 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java @@ -2,12 +2,14 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import java.util.Map; /** * 费用明细 */ +@Data @ApiModel("费用明细") public class MoneyInfoWarpper { @ApiModelProperty("订单总金额") @@ -44,164 +46,8 @@ private Double discountMoney; @ApiModelProperty("折扣") private Double discount; - - public Double getOrderMoney() { - return orderMoney; - } - - public void setOrderMoney(Double orderMoney) { - this.orderMoney = orderMoney; - } - - public Double getStartMoney() { - return startMoney; - } - - public void setStartMoney(Double startMoney) { - this.startMoney = startMoney; - } - - public Double getMileageMoney() { - return mileageMoney; - } - - public void setMileageMoney(Double mileageMoney) { - this.mileageMoney = mileageMoney; - } - - public Double getDurationMoney() { - return durationMoney; - } - - public void setDurationMoney(Double durationMoney) { - this.durationMoney = durationMoney; - } - - public Double getWaitMoney() { - return waitMoney; - } - - public void setWaitMoney(Double waitMoney) { - this.waitMoney = waitMoney; - } - - public Double getLongDistanceMoney() { - return longDistanceMoney; - } - - public void setLongDistanceMoney(Double longDistanceMoney) { - this.longDistanceMoney = longDistanceMoney; - } - - public Double getParkMoney() { - return parkMoney; - } - - public void setParkMoney(Double parkMoney) { - this.parkMoney = parkMoney; - } - - public Double getRoadTollMoney() { - return roadTollMoney; - } - - public void setRoadTollMoney(Double roadTollMoney) { - this.roadTollMoney = roadTollMoney; - } - - public Double getRedPacketMoney() { - return redPacketMoney; - } - - public void setRedPacketMoney(Double redPacketMoney) { - this.redPacketMoney = redPacketMoney; - } - - public Double getCouponMoney() { - return couponMoney; - } - - public void setCouponMoney(Double couponMoney) { - this.couponMoney = couponMoney; - } - - public Double getDiscountMoney() { - return discountMoney; - } - - public void setDiscountMoney(Double discountMoney) { - this.discountMoney = discountMoney; - } - - public Double getDiscount() { - return discount; - } - - public void setDiscount(Double discount) { - this.discount = discount; - } - - public Double getMileage() { - return mileage; - } - - public void setMileage(Double mileage) { - this.mileage = mileage; - } - - public Double getDuration() { - return duration; - } - - public void setDuration(Double duration) { - this.duration = duration; - } - - public Double getWait() { - return wait; - } - - public void setWait(Double wait) { - this.wait = wait; - } - - public Double getLongDistance() { - return longDistance; - } - - public void setLongDistance(Double longDistance) { - this.longDistance = longDistance; - } - - public Double getStartMileage() { - return startMileage; - } - - public void setStartMileage(Double startMileage) { - this.startMileage = startMileage; - } - - @Override - public String toString() { - return "MoneyInfoWarpper{" + - "orderMoney=" + orderMoney + - ", startMoney=" + startMoney + - ", mileageMoney=" + mileageMoney + - ", mileage=" + mileage + - ", durationMoney=" + durationMoney + - ", duration=" + duration + - ", waitMoney=" + waitMoney + - ", wait=" + wait + - ", longDistanceMoney=" + longDistanceMoney + - ", longDistance=" + longDistance + - ", parkMoney=" + parkMoney + - ", roadTollMoney=" + roadTollMoney + - ", redPacketMoney=" + redPacketMoney + - ", couponMoney=" + couponMoney + - ", discountMoney=" + discountMoney + - ", discount=" + discount + - '}'; - } + @ApiModelProperty("补差价") + private Double priceDifference; public static MoneyInfoWarpper getMoneyInfoWarpper(Map<String, Object> map){ MoneyInfoWarpper moneyInfoWarpper = new MoneyInfoWarpper(); @@ -223,6 +69,7 @@ moneyInfoWarpper.setCouponMoney(null != map.get("couponMoney") ? Double.valueOf(map.get("couponMoney").toString()) : 0D); moneyInfoWarpper.setDiscountMoney(null != map.get("discountMoney") ? Double.valueOf(map.get("discountMoney").toString()) : 0D); moneyInfoWarpper.setDiscount(null != map.get("discount") ? Double.valueOf(map.get("discount").toString()) : 0D); + moneyInfoWarpper.setPriceDifference(null != map.get("priceDifference") ? Double.valueOf(map.get("priceDifference").toString()) : 0D); } return moneyInfoWarpper; } 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 f251de8..5cc1be0 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,12 +1,9 @@ package com.stylefeng.guns.modular.system.warpper; -import com.stylefeng.guns.modular.system.model.OrderPosition; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.ArrayList; -import java.util.List; import java.util.Map; @ApiModel("订单详情22") @@ -55,7 +52,6 @@ private Integer payManner; @ApiModelProperty("支付金额") private Double payMoney; - @ApiModelProperty("是否是改派单(1=否,2=是)") private Integer isReassign; @ApiModelProperty("高德猎鹰轨迹id(订单开始后需要上传坐标到指定轨迹中)") @@ -90,10 +86,8 @@ private String userName; @ApiModelProperty("司机支付状态【现金支付需要司机代支付】(1=待支付,2=已支付)") private Integer driverPay; - @ApiModelProperty("轨迹") private String orderPositionList; - private Integer startDuration; @ApiModelProperty("是否冻结(1=否,2=是)") private Integer isFrozen; diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java index 07be5fc..2bdf04d 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java @@ -230,12 +230,6 @@ } }).start(); - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushDriverPosition(orderId, 2); - } - }).start(); systemNoticeService.addSystemNotice(2, "您已成功抢得出租车订单,请及时联系客户!", orderTaxi.getDriverId()); systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getLastName().substring(0, 1) + "师傅,请保持电话畅通!", orderTaxi.getUserId()); @@ -315,13 +309,6 @@ } }).start(); - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushDriverPosition(orderId, 2); - } - }).start(); - systemNoticeService.addSystemNotice(2, "您已成功抢得出租车订单,请及时联系客户!", orderTaxi.getDriverId()); systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getLastName().substring(0, 1) + "师傅,请保持电话畅通!", orderTaxi.getUserId()); @@ -372,6 +359,7 @@ orderTaxi.setState(3); orderTaxi.setSetOutTime(new Date()); systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderTaxi.getUserId()); + pushUtil.pushDriverPosition(orderTaxi.getId(), 2);//主动推送司机定位 break; case 4://到达预约点,等待客户上车 orderTaxi.setState(4); @@ -385,8 +373,6 @@ orderTaxi.setBoardingTime(new Date()); orderTaxi.setState(5); orderTaxi.setStartServiceTime(new Date()); - - pushUtil.pushDriverPosition(orderTaxi.getId(), 2);//主动推送司机定位 break; case 6://结束服务 orderTaxi.setGetoffLon(lon); diff --git a/DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml b/DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml index b5cb567..73b28b2 100644 --- a/DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml +++ b/DriverIGOTravel/guns-admin/src/main/resources/application-dev.yml @@ -42,7 +42,7 @@ --- spring: datasource: - url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 db-name: guns #用来搜集数据库的所有表 diff --git a/DriverIGOTravel/guns-admin/src/main/resources/quartz.properties b/DriverIGOTravel/guns-admin/src/main/resources/quartz.properties new file mode 100644 index 0000000..475e51c --- /dev/null +++ b/DriverIGOTravel/guns-admin/src/main/resources/quartz.properties @@ -0,0 +1,39 @@ +# Default Properties file for use by StdSchedulerFactory +# to create a Quartz Scheduler Instance, if a different +# properties file is not explicitly specified. +# +# 调度器的配置 +# 实例名称,在集群环境中区分实例 +org.quartz.scheduler.instanceName=MyScheduler +# 自动生成实例id,在集群环境中区分实例 +org.quartz.scheduler.instanceId=AUTO +org.quartz.scheduler.rmi.export=false +org.quartz.scheduler.rmi.proxy=false +org.quartz.scheduler.wrapJobExecutionInUserTransaction=false + +# 线程池的配置 +# 线程实现类 +org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +# 线程总数量 +org.quartz.threadPool.threadCount=10 +org.quartz.threadPool.threadPriority=5 +org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true +# misfire阈值设置 +org.quartz.jobStore.misfireThreshold=60000 + +# 任务存储配置 +## 内存存储 +#org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore +# 数据库存储 +org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +# 驱动委托类 +org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate +# 数据表名前缀 +org.quartz.jobStore.tablePrefix=qrtz_ +# 数据源配置 +org.quartz.jobStore.dataSource=myDS +org.quartz.dataSource.myDS.driver=com.mysql.cj.jdbc.Driver +org.quartz.dataSource.myDS.URL=jdbc:mysql://127.0.0.1:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0 +org.quartz.dataSource.myDS.user=root +org.quartz.dataSource.myDS.password=123456 +org.quartz.dataSource.myDS.maxConnections=10 -- Gitblit v1.7.1