Pu Zhibing
2 天以前 07f3f658025af654ecdda9005ebbaf9575569207
添加订单日志记录
1个文件已修改
5个文件已添加
288 ■■■■ 已修改文件
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppOperationLogMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppOperationLogMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppOperationLog.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppOperationLogService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppOperationLogServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AppOperationLogMapper.java
New file
@@ -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> {
}
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AppOperationLogMapper.xml
New file
@@ -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>
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AppOperationLog.java
New file
@@ -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;
    }
}
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAppOperationLogService.java
New file
@@ -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);
}
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppOperationLogServiceImpl.java
New file
@@ -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);
    }
}