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/system/service/IAppOperationLogService.java              |   14 ++
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppOperationLogServiceImpl.java      |   29 +++++
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppOperationLogMapper.xml             |    5 +
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppOperationLog.java                        |   78 +++++++++++++++
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  155 +++++++++++++++++++++---------
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppOperationLogMapper.java                    |    7 +
 6 files changed, 241 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
diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppOperationLogMapper.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppOperationLogMapper.java
new file mode 100644
index 0000000..26d7f14
--- /dev/null
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppOperationLogMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.AppOperationLog;
+
+public interface AppOperationLogMapper extends BaseMapper<AppOperationLog> {
+}
diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppOperationLogMapper.xml b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppOperationLogMapper.xml
new file mode 100644
index 0000000..85b188b
--- /dev/null
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppOperationLogMapper.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.AppOperationLogMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppOperationLog.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppOperationLog.java
new file mode 100644
index 0000000..410c9d2
--- /dev/null
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppOperationLog.java
@@ -0,0 +1,78 @@
+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 java.util.Date;
+
+@TableName("t_app_operation_log")
+public class AppOperationLog {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 用户类型
+     */
+    @TableField("userType")
+    private Integer userType;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 操作日志
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 操作时间
+     */
+    @TableField("createTime")
+    private Date createTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppOperationLogService.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppOperationLogService.java
new file mode 100644
index 0000000..954b446
--- /dev/null
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppOperationLogService.java
@@ -0,0 +1,14 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.AppOperationLog;
+
+public interface IAppOperationLogService extends IService<AppOperationLog> {
+
+    /**
+     * 添加日志记录
+     * @param userId
+     * @param content
+     */
+    void addAppOperationLog(Integer userId, String content);
+}
diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppOperationLogServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppOperationLogServiceImpl.java
new file mode 100644
index 0000000..f4e58d5
--- /dev/null
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppOperationLogServiceImpl.java
@@ -0,0 +1,29 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.AppOperationLogMapper;
+import com.stylefeng.guns.modular.system.model.AppOperationLog;
+import com.stylefeng.guns.modular.system.service.IAppOperationLogService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+public class AppOperationLogServiceImpl extends ServiceImpl<AppOperationLogMapper, AppOperationLog> implements IAppOperationLogService {
+
+
+    /**
+     * 添加日志记录
+     * @param userId
+     * @param content
+     */
+    @Override
+    public void addAppOperationLog(Integer userId, String content) {
+        AppOperationLog appOperationLog = new AppOperationLog();
+        appOperationLog.setUserId(userId);
+        appOperationLog.setUserType(1);
+        appOperationLog.setContent(content);
+        appOperationLog.setCreateTime(new Date());
+        this.insert(appOperationLog);
+    }
+}

--
Gitblit v1.7.1