From b3b7d3ae4789eb3d4d4bbadccd03d79adb28cb1a Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期四, 25 七月 2024 18:21:09 +0800 Subject: [PATCH] 修改2.0 bug --- UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 525 ++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 360 insertions(+), 165 deletions(-) diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 0d97fbf..d27b374 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -252,12 +252,12 @@ return ResultUtil.error(language == 1 ? "有未完成的订单" : language == 2 ? "Uncompleted order(s)" : "Commande(s) non complétée(s)"); } - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); if(orderPrivateCars.size() > 0 && reservation == 2){ return ResultUtil.error(language == 1 ? "有未完成的订单" : language == 2 ? "Uncompleted order(s)" : "Commande(s) non complétée(s)"); } - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7,12); + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7, 12); if(orderPrivateCars.size() > 0){ BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setState(7); @@ -348,7 +348,17 @@ CarService query1 = carServiceMapper.query(1, driver.getCarId()); orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); orderPrivateCar.setSnatchOrderTime(new Date()); - + if(orderPrivateCar.getOrderType() == 1){ + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if(ToolUtil.isNotEmpty(value)) { + String[] split = value.split(","); + DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); + //超时时间 + long timeOut = System.currentTimeMillis() + (distancematrix.getDuration() * 1000); + orderPrivateCar.setEstimateArriveTime(new Date(timeOut)); + orderPrivateCar.setEstimateArriveMileage(distancematrix.getDistance()); + } + } driver.setState(3); driverService.updateById(driver); } @@ -356,37 +366,82 @@ orderPrivateCar.setIsReassign(1); orderPrivateCar.setIsDelete(1); orderPrivateCar.setTripId(UUIDUtil.getRandomCode()); + DistancematrixVo distancematrix1 = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), orderPrivateCar.getEndLat(), orderPrivateCar.getEndLon()); + Long distance1 = distancematrix1.getDistance(); + orderPrivateCar.setEstimatedMileage(new BigDecimal(distance1).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); this.insert(orderPrivateCar); - String vehicleId = null; - if(null != orderPrivateCar.getDriverId()){ - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - Car car = carMapper.selectById(driver.getCarId()); - if(!StringUtils.hasLength(car.getVehicleId())){ - car.setVehicleId(UUIDUtil.getRandomCode()); - carMapper.updateById(car); + new Thread(() -> { + try { + String vehicleId = null; + if(null != orderPrivateCar.getDriverId()){ + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + Car car = carMapper.selectById(driver.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carMapper.updateById(car); + } + //查询车辆信息,没有则创建信息 + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + } + } + //创建行程数据 + fleetEngineUtil.createTrip(vehicleId, 1, orderPrivateCar.getTripId(), + orderPrivateCar.getStartLat().toString(), orderPrivateCar.getStartLon().toString(), orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); + }catch (Exception e){ + e.printStackTrace(); } - //查询车辆信息,没有则创建信息 - String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); - if(ToolUtil.isEmpty(vehicles)){ - CarModel carModel = carModelMapper.selectById(car.getCarModelId()); - fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); - fleetEngineUtil.updateVehicles("ONLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); - } - - } - //创建行程数据 - fleetEngineUtil.createTrip(vehicleId, 1, orderPrivateCar.getTripId(), - orderPrivateCar.getStartLat().toString(), orderPrivateCar.getStartLon().toString(), orderPrivateCar.getEndLat().toString(), orderPrivateCar.getEndLon().toString()); + }).start(); if(orderSource == 2){//扫码下单 + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + Integer language1 = driver.getLanguage(); + String text = ""; + switch (language1){ + case 1: + text = "收到新的打车订单,从" + orderPrivateCar.getStartAddress() + "出发,全程约" + orderPrivateCar.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new ride order, starting from " + orderPrivateCar.getStartAddress() + ", the whole journey is about " + orderPrivateCar.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + String finalAudioUrl = audioUrl; new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0, finalAudioUrl); } }).start(); } @@ -457,12 +512,49 @@ dr.setState(3); driverService.updateById(dr); this.updateById(orderPrivateCar); - + + Integer language1 = dr.getLanguage(); + String text = ""; + switch (language1){ + case 1: + text = "收到新的打车订单,从" + orderPrivateCar.getStartAddress() + "出发,全程约" + orderPrivateCar.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new ride order, starting from " + orderPrivateCar.getStartAddress() + ", the whole journey is about " + orderPrivateCar.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language1 == 1 ? "cmn-CN" : language1 == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + + String finalAudioUrl = audioUrl; new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0, finalAudioUrl); } }).start(); } @@ -577,46 +669,53 @@ JSONObject object = JSON.parseObject(query.getContent()); long t = object.getInteger("driverTimeout") * 60000L; //司机超时未到达起点,免费取消 - if(orderPrivateCar.getState() < 3 && orderPrivateCar.getSnatchOrderTime().getTime() + t < System.currentTimeMillis()){ - baseWarpper.setAmount(amount); - return ResultUtil.success(baseWarpper); - } - //普通单 - if(1 == orderPrivateCar.getOrderType()){ - JSONObject order = object.getJSONObject("order"); - long m = order.getInteger("orderAcceptanceTime") * 60000L; - //超过免费时间,计算费用 - if(orderPrivateCar.getSnatchOrderTime().getTime() + m < System.currentTimeMillis()){ - BigDecimal money = order.getBigDecimal("money"); - if(null != orderPrivateCar.getSetOutTime()){ - //里程费 - BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getMileage() / 1000)); - //时长费 - int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSetOutTime().getTime()) / 60000).intValue(); - BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); - money = money.add(durationFee).add(mileageFee); - } - amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if(orderPrivateCar.getOrderType() == 1){ + if(orderPrivateCar.getState() <= 3 && orderPrivateCar.getEstimateArriveTime().getTime() + t <= System.currentTimeMillis()){ + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); + } + }else{ + if(orderPrivateCar.getState() <= 3 && orderPrivateCar.getTravelTime().getTime() + t <= System.currentTimeMillis()){ + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); } } - //预约单 - if(2 == orderPrivateCar.getOrderType()){ - JSONObject order = object.getJSONObject("reservationOrder"); - long m = order.getInteger("orderAcceptanceTime") * 60000L; - //超过免费时间,计算费用 - if(System.currentTimeMillis() + m > orderPrivateCar.getTravelTime().getTime()){ - BigDecimal money = order.getBigDecimal("money"); - if(null != orderPrivateCar.getSetOutTime()){ + + //非服务中且未超时 + if(orderPrivateCar.getState() != 5){ + //普通单 + if(1 == orderPrivateCar.getOrderType()){ + JSONObject order = object.getJSONObject("order"); + long m = order.getInteger("orderAcceptanceTime") * 60000L; + //超过免费时间,且没有超时,计算费用 + if(orderPrivateCar.getSnatchOrderTime().getTime() + m < System.currentTimeMillis() && orderPrivateCar.getEstimateArriveTime().getTime() + t > System.currentTimeMillis()){ + BigDecimal money = order.getBigDecimal("money"); //里程费 - BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getMileage() / 1000)); + BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getToStartPointMileage() / 1000)); //时长费 - int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSetOutTime().getTime()) / 60000).intValue(); + int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSnatchOrderTime().getTime()) / 60000).intValue(); + BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); + money = money.add(durationFee).add(mileageFee); + amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + } + } + //预约单 + if(2 == orderPrivateCar.getOrderType()){ + JSONObject order = object.getJSONObject("reservationOrder"); + long m = order.getInteger("orderAcceptanceTime") * 60000L; + //超过免费时间,且没有超时,计算费用 + if(System.currentTimeMillis() + m > orderPrivateCar.getTravelTime().getTime() && orderPrivateCar.getTravelTime().getTime() + t > System.currentTimeMillis()){ + BigDecimal money = order.getBigDecimal("money"); + //里程费 + BigDecimal mileageFee = order.getBigDecimal("mileageFee").multiply(new BigDecimal(orderPrivateCar.getToStartPointMileage() / 1000)); + //时长费 + int s = Double.valueOf((System.currentTimeMillis() - orderPrivateCar.getSnatchOrderTime().getTime()) / 60000).intValue(); BigDecimal durationFee = order.getBigDecimal("durationFee").multiply(new BigDecimal(s)); //预定费用 BigDecimal reservationFee = order.getBigDecimal("reservationFee"); money = money.add(durationFee).add(mileageFee).add(reservationFee); + amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } - amount = money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } } baseWarpper.setAmount(amount); @@ -708,25 +807,40 @@ integer = orderCancelService.saveData(id, 1, reason, remark, null, amount, 1, 1, uid); } this.deleteTask(id);//删除定时任务 - + //修改司机为空闲 + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + Integer language1 = driver.getLanguage(); + String audioUrl = ""; + switch (language1){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/UserCancelledOrder-FR.mp3"; + break; + } + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState() == 12 ? orderPrivateCar.getState() : 10, 0, audioUrl); System.err.println("推送取消操作---------------------"); } }).start(); - //修改司机为空闲 - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setState(2); driverService.updateById(driver); } //修改行程信息 - fleetEngineUtil.updateTrip("CANCELED", null, null, orderPrivateCar.getTripId(), null, null, null, null); + if(orderPrivateCar.getState() == 10 || orderPrivateCar.getState() == 12){ + fleetEngineUtil.updateTrip("CANCELED", null, null, orderPrivateCar.getTripId(), null, null, null, null); + } - //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功取消出行订单,谢谢使用!" : language == 2 ? "You've cancelled the ride order successfully, thank you for using I-GO " : "Vous avez annulé la commande de course avec succès, merci d’utiliser I-GO", orderPrivateCar.getUserId(), 1); Map<String, Object> map = new HashMap<>(); @@ -762,6 +876,9 @@ } Double amount = queryCancleAmount(id, language).getData().getAmount(); + if(orderPrivateCar.getState() == 12){ + amount = orderCancel.getMoney(); + } if(0 < amount){ if(payType == 1){//手机支付 orderCancel.setPayType(1); @@ -841,18 +958,35 @@ orderCancelService.updateById(orderCancel); if(null != orderPrivateCar.getDriverId()){ - BigDecimal c =new BigDecimal(amount);//司机收入 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(amount).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + d = new BigDecimal(amount).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(amount).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, d.doubleValue()); + if(c.doubleValue() > 0){ + incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + } this.deleteTask(id);//删除定时任务 - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + }else{ + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, amount.doubleValue()); } - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2 @@ -902,7 +1036,44 @@ if(bo){ continue; } - pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); + + String text = ""; + Integer language = driver.getLanguage(); + switch (language){ + case 1: + text = "收到新的打车订单,从" + orderPrivateCar.getStartAddress() + "出发,全程约" + orderPrivateCar.getEstimatedMileage() + "公里"; + break; + case 2: + text = "Received a new ride order, starting from " + orderPrivateCar.getStartAddress() + ", the whole journey is about " + orderPrivateCar.getEstimatedMileage() + "kilometre"; + break; + case 3: + text = "J'ai reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage() + "kilométrage"; + break; + + } + String audioUrl = ""; + try { + audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", text, "pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (Exception e) { + throw new RuntimeException(e); + } + //定时任务删除语音文件 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Process process = null; + try { + process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/pushOrder" + orderPrivateCar.getDriverId() + ".mp3"); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } + } + }, 30000); + + pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime(), audioUrl); } } Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 @@ -1021,12 +1192,14 @@ Integer orderNum=this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); if(query2.getDistance()*1000>orderPrivateCar.getMileage() && query2.getOrderNum()>orderNum){ Double special = query2.getSpecial(); - orderPrivateCar.setDiscount(special); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderPrivateCar.setDiscountMoney(orderMoney - v); - orderPrivateCar.setActivityId(query2.getId()); - orderMoney = v; + if(null != special){ + orderPrivateCar.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if(orderMoney.compareTo(v) > 0){ + orderPrivateCar.setDiscountMoney(orderMoney - v); + orderPrivateCar.setActivityId(query2.getId()); + orderMoney = v; + } } } } @@ -1060,17 +1233,18 @@ orderMoney=new BigDecimal(orderMoney).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); //计算红包 - if(null != redDeduction && 1 == redDeduction){ + if(null != redDeduction && 1 == redDeduction && null == orderPrivateCar.getRedPacketId()){ RedEnvelopePaymentSettings redEnvelopePaymentSettings = redEnvelopePaymentSettingsService.getRedEnvelopePaymentSettings(); if(null != redEnvelopePaymentSettings){ Double total = userRedPacketRecordService.queryRemainingAmount(uid); List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid) .eq("state", 1).eq("companyId", orderPrivateCar.getCompanyId()).gt("remainingAmount", 0).orderBy("insertTime", false)); - if(total.compareTo(orderMoney) >= 0){ - BigDecimal deductionRatio = redEnvelopePaymentSettings.getDeductionRatio(); - BigDecimal multiply = new BigDecimal(orderMoney).multiply(deductionRatio.divide(new BigDecimal(100))); - orderPrivateCar.setRedPacketMoney(multiply.doubleValue()); - orderMoney = orderMoney - multiply.doubleValue(); + + BigDecimal deductionRatio = redEnvelopePaymentSettings.getDeductionRatio(); + BigDecimal multiply1 = new BigDecimal(orderMoney).multiply(deductionRatio.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_EVEN); + if(total.compareTo(multiply1.doubleValue()) >= 0){ + orderPrivateCar.setRedPacketMoney(multiply1.doubleValue()); + orderMoney = orderMoney - multiply1.doubleValue(); //获取红包id JSONArray jsonArray = new JSONArray(); @@ -1078,14 +1252,19 @@ JSONObject jsonObject = new JSONObject(); jsonObject.put("id", userRedPacketRecord.getId()); BigDecimal remainingAmount = new BigDecimal(userRedPacketRecord.getRemainingAmount()); - if(multiply.compareTo(remainingAmount) >= 0){ - multiply = multiply.subtract(remainingAmount); + if(multiply1.compareTo(remainingAmount) >= 0){ + userRedPacketRecord.setRemainingAmount(0D); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecord.setState(2); + multiply1 = multiply1.subtract(remainingAmount).setScale(2, RoundingMode.HALF_EVEN); jsonObject.put("money", remainingAmount); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); }else{ - userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).doubleValue()); - jsonObject.put("money", multiply); + userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply1).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + jsonObject.put("money", multiply1); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); break; } } @@ -1101,13 +1280,18 @@ jsonObject.put("id", userRedPacketRecord.getId()); BigDecimal remainingAmount = new BigDecimal(userRedPacketRecord.getRemainingAmount()); if(multiply.compareTo(remainingAmount) >= 0){ - multiply = multiply.subtract(remainingAmount); + userRedPacketRecord.setRemainingAmount(0D); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecord.setState(2); + multiply = multiply.subtract(remainingAmount).setScale(2, RoundingMode.HALF_EVEN); jsonObject.put("money", remainingAmount); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); }else{ - userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).doubleValue()); + userRedPacketRecord.setRemainingAmount(remainingAmount.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); jsonObject.put("money", multiply); jsonArray.add(jsonObject); + userRedPacketRecordService.updateById(userRedPacketRecord); break; } } @@ -1184,28 +1368,12 @@ orderPrivateCar.setState(8); orderPrivateCar.setPayType(3); orderPrivateCar.setPayMoney(orderMoney); - orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); //处理优惠券和红包 if(null != userCouponRecord){ userCouponRecord.setState(2); userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); - } - if(null != orderPrivateCar.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } } if(orderPrivateCar.getIsplatPay()==1){ @@ -1512,8 +1680,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); } }).start(); @@ -1535,7 +1703,6 @@ orderPrivateCar.setPayType(4); orderPrivateCar.setDriverPay(2); orderPrivateCar.setPayMoney(orderMoney); - orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); @@ -1552,20 +1719,8 @@ driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driverService.updateById(driver); } + if(null != orderPrivateCar.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - } - userRedPacketRecordService.updateById(userRedPacketRecord); - } Double money = orderPrivateCar.getRedPacketMoney(); incomeService.saveData(2, orderPrivateCar.getDriverId(), 7, orderPrivateCar.getId(), 1, money); driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -1623,22 +1778,22 @@ if(null != settlementAllocation){ JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); Double maxPrice = jsonObject.getDouble("maxPrice"); - Integer type1 = jsonObject.getInteger("type"); - if(1 == type1){ + if(null != maxPrice){ List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driver.getId()) .isNull("settlementRecordId").last(" and DATE_FORMAT(now(), '%Y-%m-%d') = DATE_FORMAT(createTime, '%Y-%m-%d')")); BigDecimal total = new BigDecimal(0); for (SettlementDetail detail : settlementDetailList) { total = total.add(new BigDecimal(detail.getPrice())); } + //日结算 if(maxPrice.compareTo(total.doubleValue()) <= 0){ SettlementRecord settlementRecord = settlementRecordService.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", orderPrivateCar.getDriverId()) - .eq("type", type1).eq("paymentStatus", 1).last(" and day = DATE_FORMAT(now(), '%Y-%m-%d')")); + .eq("type", 1).eq("paymentStatus", 1).last(" and day = DATE_FORMAT(now(), '%Y-%m-%d')")); if(null == settlementRecord){ settlementRecord = new SettlementRecord(); settlementRecord.setDay(new Date()); settlementRecord.setDriverId(orderPrivateCar.getDriverId()); - settlementRecord.setType(type1); + settlementRecord.setType(1); settlementRecord.setPaymentStatus(1); settlementRecord.setPayMoney(total.doubleValue()); settlementRecord.setInsertTime(new Date()); @@ -1936,8 +2091,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); pushUtil.pushOfflinePayment(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1); } }).start(); @@ -1983,9 +2138,6 @@ UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); userRedPacketRecord.setMoney(money); userRedPacketRecord.setRemainingAmount(money); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); userRedPacketRecord.setInsertTime(new Date()); userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); userRedPacketRecord.setState(0); @@ -2135,20 +2287,38 @@ query1.setState(2); orderCancelService.updateById(query1); } - + + Double amount = query.getAmount(); if(null != orderPrivateCar.getDriverId()){ - BigDecimal c =new BigDecimal(query.getAmount());//司机收入 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(amount).subtract(d);//只有出行金额参与抽成,其余归属司机 + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + d = new BigDecimal(amount).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))); + c = new BigDecimal(amount).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, d.doubleValue()); + if(c.doubleValue() > 0){ + incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + } this.deleteTask(orderPrivateCar.getId());//删除定时任务 - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + }else{ + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, amount.doubleValue()); } - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); //添加消息 systemNoticeService.addSystemNotice(1, language == 1 ? "您已使用余额成功支付取消订单费用,谢谢使用!" : language == 2 @@ -2184,22 +2354,6 @@ userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); } - if(null != orderPrivateCar.getRedPacketId()){ - JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getRedPacketId()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer id1 = jsonObject.getInteger("id"); - Double money = jsonObject.getDouble("money"); - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(id1); - userRedPacketRecord.setRemainingAmount(userRedPacketRecord.getRemainingAmount() - money); - if(0 == userRedPacketRecord.getRemainingAmount()){ - userRedPacketRecord.setState(2); - } - userRedPacketRecord.setEndTime(new Date()); - userRedPacketRecordService.updateById(userRedPacketRecord); - } - } - query.setState(2); query.setCode(order_id); @@ -2508,8 +2662,8 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0, ""); } }).start(); @@ -2549,6 +2703,20 @@ }else{ map.put("receipt", ""); } + + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); + long timeOutCancel = 0L; + if(null != orderPrivateCar.getEstimateArriveTime()){ + CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", orderPrivateCar.getCompanyId())); + JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); + int driverTimeout = jsonObject.getIntValue("driverTimeout") * 60000; + if(orderPrivateCar.getOrderType() == 1){ + timeOutCancel = orderPrivateCar.getEstimateArriveTime().getTime() + driverTimeout; + }else{ + timeOutCancel = orderPrivateCar.getTravelTime().getTime() + driverTimeout; + } + } + map.put("timeOutCancel", timeOutCancel); } return maps; } @@ -2571,13 +2739,13 @@ @Override public Map<String, Object> queryOrderInfo(Integer language, Integer orderId) throws Exception { Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId); + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); if(null != map.get("travelTime")){ String travelTime = map.get("travelTime").toString(); map.put("travelTime", DateUtil.conversionFormat1(language, travelTime)); } Integer state = Integer.valueOf(String.valueOf(map.get("state"))); if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 - OrderPrivateCar orderPrivateCar = this.selectById(orderId); orderPrivateCar.setReassignNotice(0); this.updateById(orderPrivateCar); } @@ -2589,7 +2757,6 @@ map.put("couponMoney", null); } if(Integer.valueOf(String.valueOf(map.get("state"))) == 7){ - OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(Integer.valueOf(String.valueOf(map.get("companyId")))); if(null != query2){ Integer orderNum=this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())")); @@ -2618,9 +2785,22 @@ if(null != map.get("driverId")){ companyId = Integer.valueOf(String.valueOf(map.get("companyId"))); } + + long timeOutCancel = 0L; + long driverTimeOut = 0L; CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", companyId)); JSONObject jsonObject = JSON.parseObject(cancleOrder.getContent()); - map.put("timeOutCancel", jsonObject.getIntValue("driverTimeout")); + int driverTimeout = jsonObject.getIntValue("driverTimeout") * 60000; + if(orderPrivateCar.getOrderType() == 1 && null != orderPrivateCar.getEstimateArriveTime()){ + timeOutCancel = orderPrivateCar.getEstimateArriveTime().getTime() + driverTimeout; + driverTimeOut = orderPrivateCar.getEstimateArriveTime().getTime(); + }else{ + timeOutCancel = orderPrivateCar.getTravelTime().getTime() + driverTimeout; + driverTimeOut = orderPrivateCar.getTravelTime().getTime(); + } + + map.put("timeOutCancel", timeOutCancel); + map.put("driverTimeOut", driverTimeOut); return map; } @@ -2804,7 +2984,22 @@ orderPrivateCar.setDestinationLat(endLat); orderPrivateCar.setDestinationLon(endLon); this.updateById(orderPrivateCar); - pushUtil.pushModifyAddress(2, orderPrivateCar.getDriverId(), orderId, 1, 1); + + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + Integer language1 = driver.getLanguage(); + String audioUrl = ""; + switch (language1){ + case 1: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-CN.mp3"; + break; + case 2: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-EN.mp3"; + break; + case 3: + audioUrl = "http://182.160.16.251:81/files/audio/ChangeAddress-FR.mp3"; + break; + } + pushUtil.pushModifyAddress(2, orderPrivateCar.getDriverId(), orderId, 1, 1, audioUrl); }else{ orderPrivateCar.setEndAddress(endAddress); orderPrivateCar.setEndLat(Double.valueOf(endLat)); -- Gitblit v1.7.1