From 07f3f658025af654ecdda9005ebbaf9575569207 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期五, 10 十月 2025 15:15:29 +0800 Subject: [PATCH] 添加订单日志记录 --- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 155 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 108 insertions(+), 47 deletions(-) diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index bc09638..9d5fbdb 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -195,6 +195,9 @@ @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; + @Autowired + private IAppOperationLogService appOperationLogService; + /** @@ -215,9 +218,9 @@ * @throws Exception */ @Override - public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, - String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, - BigDecimal estimatedPrice,String cityCode,Integer carIndex) throws Exception { + public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, + String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, + BigDecimal estimatedPrice, String cityCode, Integer carIndex) throws Exception { long timeMillis = System.currentTimeMillis(); //如果出行时间大于当前10分钟则默认为预约单 if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ @@ -364,6 +367,9 @@ orderPrivateCar.setEstimatedPrice(data.getAmount()); orderPrivateCar.setPayMethod(0); this.insert(orderPrivateCar); + + appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); + BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setId(orderPrivateCar.getId()); baseWarpper.setState(orderPrivateCar.getState()); @@ -376,7 +382,7 @@ orderPrivateCar.setIsDelete(1); orderPrivateCar.setPayMethod(1); this.insert(orderPrivateCar); - + appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); if(orderSource == 2){//扫码下单 new Thread(new Runnable() { @Override @@ -410,58 +416,102 @@ if(drivers.size() > 0) {//有司机,直接指派给司机 Driver dr = null; if (drivers.size() > 1) { - List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机 - for (int i = 0; i < assignOrder.getPeople(); i++) { - Driver driver = null; - int m = 0; - int index = 0; - // 查询预约单 - List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); - List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); - for (int j = 0; j < drivers.size(); j++) { - Driver driver1 = drivers.get(j); - if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { - continue; - } - // 判断该司机是否有30分钟内预约单 - long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && - DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); - if (count > 0) { - continue; - } - String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); - if (null != value) { - Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLat() + "," + orderPrivateCar.getStartLon(), value); - int d = distance1.get("WGS84").intValue(); - if ((0 == m && null == driver) || (d < m)) { - driver = drivers.get(j); - m = d; - index = j; - } + List<Driver> ds = new ArrayList<>(); + double dis = assignOrder.getDistance() * 1000; + // 查询预约单 + List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); + List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); + for (int j = 0; j < drivers.size(); j++) { + Driver driver1 = drivers.get(j); + driver1.setDistance(0D); + if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver1.getId())) { + continue; + } + // 判断该司机是否有30分钟内预约单 + long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && + DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); + if (count > 0) { + continue; + } + String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); + if (null != value) { + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1); + double d = Double.parseDouble(distance.get("distance")); + if(dis >= d){ + driver1.setDistance(d); + ds.add(driver1); } } - ds.add(driver); - drivers.remove(index); } - //再根据直线距离最短的司机中找出行驶距离最短的司机 - Integer m = 0; - for (Driver driver : ds) { - String value = redisUtil.getValue("DRIVER" + driver.getId()); - if (null != value) { - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); - int distance1 = Integer.parseInt(distance.get("distance")); - if ((0 == m && null == dr) || (distance1 < m.intValue())) { - dr = driver; - m = distance1; + if(!ds.isEmpty()){ + ds.sort(new Comparator<Driver>() { + @Override + public int compare(Driver o1, Driver o2) { + return o1.getDistance().compareTo(o2.getDistance()); } - } + }); + appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(ds) + "\"}"); + dr = ds.get(0); } + + + + + + +// for (int i = 0; i < assignOrder.getPeople(); i++) { +// Driver driver = null; +// int m = 0; +// int index = 0; +// // 查询预约单 +// List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); +// List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); +// for (int j = 0; j < drivers.size(); j++) { +// Driver driver1 = drivers.get(j); +// if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { +// continue; +// } +// // 判断该司机是否有30分钟内预约单 +// long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && +// DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); +// if (count > 0) { +// continue; +// } +// String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); +// if (null != value) { +// Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1); +// int d = Integer.parseInt(distance.get("distance")); +// if ((0 == m && null == driver) || (d < m)) { +// driver = drivers.get(j); +// m = d; +// index = j; +// } +// } +// } +// ds.add(driver); +// drivers.remove(index); +// } +// +// //再根据直线距离最短的司机中找出行驶距离最短的司机 +// Integer m = 0; +// for (Driver driver : ds) { +// String value = redisUtil.getValue("DRIVER" + driver.getId()); +// if (null != value) { +// Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); +// int distance1 = Integer.parseInt(distance.get("distance")); +// if ((0 == m && null == dr) || (distance1 < m.intValue())) { +// dr = driver; +// m = distance1; +// } +// } +// } } else { List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); if (orderPrivateCarss.size() == 0) { dr = drivers.get(0); } + appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(dr) + "\"}"); } if (Objects.nonNull(dr)) { @@ -985,6 +1035,7 @@ } } } + appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); this.deleteTask(id);//删除定时任务 new Thread(new Runnable() { @@ -1220,6 +1271,8 @@ double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + + appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单,第" + i +"轮,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(list) + "\"}"); for(Driver driver : list){//开始进行推送 // 判断该司机是否有30分钟内预约单 long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId()) @@ -1252,9 +1305,12 @@ pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); orderIds.remove(orderPrivateCar.getId()); + // 第三轮取消订单 orderPrivateCar.setState(10); orderPrivateCarMapper.updateById(orderPrivateCar); + + appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单结束,无司机接单,自动取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); // 添加站内信 systemNoticeService.addSystemNotice(1, "当前区域未能及时为您匹配到合适车辆。为避免耽误您的行程,系统已自动取消订单,建议您稍后重新尝试。", orderPrivateCar.getUserId(), 1); @@ -1492,6 +1548,7 @@ resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId()); if(resultUtil.getCode()==200){ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, null, 1, code);//添加预支付数据 + appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户支付订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); new Thread(()->{ int num = 1; int wait = 0; @@ -1696,7 +1753,8 @@ } this.updateAllColumnById(orderPrivateCar); - + appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (payType == 1 ? "微信" : payType == 2 ? "支付宝" : "余额") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" + + ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); new Thread(new Runnable() { @Override public void run() { @@ -1932,7 +1990,6 @@ // 判断先付还是后付 if(orderPrivateCar.getPayMethod() == 0){ - if (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0 ) { orderPrivateCar.setState(8); orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+query.getAmount()); @@ -2001,6 +2058,10 @@ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney()); } } + + appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (type == 1 ? "微信" : "支付宝") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" + + ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 new Thread(new Runnable() { @Override -- Gitblit v1.7.1