949bf4798368d0fce115993427e03758d4b3c897..052a3249c21c76435e2af5e76036e3c503d12218
昨天 Pu Zhibing
修改bug
052a32 对比 | 目录
昨天 Pu Zhibing
修改bug
110f0a 对比 | 目录
昨天 Pu Zhibing
修改bug
10605a 对比 | 目录
10个文件已修改
6个文件已添加
380 ■■■■ 已修改文件
DriverOKTravel/guns-admin/pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoFencingPolygon.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoJson.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/LocationQuery.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/resources/application.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderLogistics/tOrderLogistics_detail.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tVersionManagement/tVersionManagement_add.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityDiscount2Mapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount1Mapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount2Mapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityDiscount2.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/pom.xml
@@ -226,6 +226,14 @@
            <artifactId>commons-codec</artifactId>
            <version>1.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <build>
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
@@ -16,14 +16,20 @@
import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import com.stylefeng.guns.modular.system.util.SystemException;
import com.stylefeng.guns.modular.system.util.model.GeoFencingPolygon;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -46,9 +52,9 @@
    @Autowired
    private DateUtil dateUtil;
    @Autowired
    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
    private MongoTemplate mongoTemplate;
    @Autowired
    private RedisUtil redisUtil;
@@ -306,12 +312,14 @@
                }
            }
            if(Integer.valueOf(map.get("type").toString()) == 2){//电子围栏
                String gid = map.get("gid").toString();
                List<String> list1 = gdMapElectricFenceUtil.monitorElectricFenc("", lonLat);
                if(list1.contains(gid)){
                String[] split = lonLat.split(",");
                GeoJsonPoint point = new GeoJsonPoint(Double.valueOf(split[0]), Double.valueOf(split[1]));
                Query query = Query.query(Criteria.where("geoJsonPolygon").intersects(point));
                List<GeoFencingPolygon> geoFencingPolygons = mongoTemplate.find(query, GeoFencingPolygon.class);
                List<Integer> s_sites = geoFencingPolygons.stream().map(GeoFencingPolygon::getSiteId).collect(Collectors.toList());
                if(s_sites.contains(siteId)){
                    return true;
                }
                continue;
            }
        }
        return false;
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoFencingPolygon.java
New file
@@ -0,0 +1,35 @@
package com.stylefeng.guns.modular.system.util.model;
import lombok.Data;
import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
/**
 * 地理围栏-多边形
 * @author zhibing.pu
 * @date 2023/4/29 23:53
 */
@Data
@Document(collection = "geo_fencing")
public class GeoFencingPolygon implements Serializable {
    private static final long serialVersionUID = 4508868382007529971L;
    private String id;
    /**
     * 站点id
     */
    private Integer siteId;
    /**
     * 站点名称
     */
    private String name;
    /**
     * 多边形经纬度
     */
    @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE)
    private GeoJsonPolygon geoJsonPolygon;
}
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoJson.java
New file
@@ -0,0 +1,9 @@
package com.stylefeng.guns.modular.system.util.model;
import lombok.Data;
@Data
public class GeoJson {
    private String type;
    private Double[] coordinates;
}
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/LocationQuery.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.util.model;
import lombok.Data;
@Data
public class LocationQuery {
    /**
     * 当前经纬度[xxx,xxx]
     **/
    private Double[] coordinates;
    /**
     * 距离,如:200,500,1,3,5,10,20
     **/
    private Double distance;
    /**
     * 距离单位,如:m,km
     **/
    private String unit;
    /**
     * 位置类型:1-景点,2-加油站,3-酒店
     **/
    private Integer type;
}
DriverOKTravel/guns-admin/src/main/resources/application.yml
@@ -102,7 +102,12 @@
juhe: #聚合数据
  appKey: c4b903ff5624f661d0af962ef8b3f424 #
---
spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/admin
---
jiguang:
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
@@ -434,9 +434,23 @@
    @ResponseBody
    @PostMapping("/getAllOrder")
    public Object getAllOrder(){
        List<TOrderTaxi> tOrderTaxis = tOrderTaxiService.selectList(new EntityWrapper<TOrderTaxi>().eq("isDelete", 1));
        List<TOrderPrivateCar> tOrderTaxis = itOrderPrivateCarService.selectList(new EntityWrapper<TOrderPrivateCar>().eq("isDelete", 1).in("state", Arrays.asList(6, 7, 8, 9)));
        List<TOrderCrossCity> tOrderTaxis1 = itOrderCrossCityService.selectList(new EntityWrapper<TOrderCrossCity>().eq("isDelete", 1).in("state", Arrays.asList(6, 7, 8, 9)));
        List<TOrderLogistics> tOrderTaxis2 = itOrderLogisticsService.selectList(new EntityWrapper<TOrderLogistics>().eq("isDelete", 1).in("state", Arrays.asList(6)));
        List list = new ArrayList<>();
        for(TOrderTaxi t : tOrderTaxis){
        for(TOrderPrivateCar t : tOrderTaxis){
            Map<String, Object> map = new HashMap<>();
            map.put("lon", t.getStartLon());
            map.put("lat", t.getStartLat());
            list.add(map);
        }
        for(TOrderCrossCity t : tOrderTaxis1){
            Map<String, Object> map = new HashMap<>();
            map.put("lon", t.getStartLon());
            map.put("lat", t.getStartLat());
            list.add(map);
        }
        for(TOrderLogistics t : tOrderTaxis2){
            Map<String, Object> map = new HashMap<>();
            map.put("lon", t.getStartLon());
            map.put("lat", t.getStartLat());
ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderLogistics/tOrderLogistics_detail.html
@@ -23,7 +23,7 @@
                    <#label id="orderNum" name="订单编号" value="${item.orderNum}"/>
                    <#label id="travelTimeStr" name="乘车时间" value="${item.travelTimeStr}"/>
                    <#label id="userPhone" name="下单用户手机号" value="${item.userPhone}"/>
                    <#label id="passengersPhone" name="收货人手机号" value="${item.passengersPhone}"/>
                    <#label id="passengersPhone" name="收货人手机号" value="${item.recipientPhone}"/>
                    <#label id="endAddress" name="终点" value="${item.endAddress}"/>
                    <#label id="car" name="接单车辆" value="${item.car}"/>
                    <#label id="cargoNumber" name="物品数量" value="${item.cargoNumber}"/>
ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html
@@ -3,6 +3,7 @@
    <div class="ibox-content">
        <div class="form-horizontal" id="siteInfoForm">
            <input type="hidden" id="id" name="id" value="${item.id}">
            <input type="hidden" id="locationList1" name="locationList1" value='${locationList1}'>
            <div class="row">
                <div class="col-sm-12">
                    <div class="">
ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tVersionManagement/tVersionManagement_add.html
@@ -9,10 +9,10 @@
                    <div class="form-group">
                        <label class="col-sm-3 control-label">端口类型:</label>
                        <div class="col-sm-9"  style="display: flex;align-items: center;">
                            <div class="radio radio-info radio-inline">
                                <input type="radio" id="type1" value="1" name="type" checked="" >
                                <label for="type1"> 用户端 </label>
                            </div>
<!--                            <div class="radio radio-info radio-inline">-->
<!--                                <input type="radio" id="type1" value="1" name="type" checked="" >-->
<!--                                <label for="type1"> 用户端 </label>-->
<!--                            </div>-->
                            <div class="radio radio-success radio-inline">
                                <input type="radio" id="type2" value="2" name="type" >
                                <label for="type2"> 司机端 </label>
ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js
@@ -1,15 +1,59 @@
var map = new AMap.Map('container',{
    resizeEnable: true,
    zoom:10
    zoom:15
});
setCenterCoordinate();
function setCenterCoordinate() {
    var locationsStr = $("#locationList1").val();
    if ("" != locationsStr && null != locationsStr) {
        var locations = JSON.parse(locationsStr);
        var gid = locations[0].coordinate;
        var path = convertData(gid);
        var center = path[0];
        map.setCenter(center)
    }
}
function setElectricFence() {
    var locationsStr = $("#locationList1").val();
    if ("" != locationsStr && null != locationsStr) {
        var locations = JSON.parse(locationsStr);
        for (let i = 0; i < locations.length; i++) {
            console.log(locations[i])
            var gid = locations[i].coordinate
            if (gid == null || gid == "") {
                continue;
            }
            var path = convertData(gid)
            var polygon = new AMap.Polygon({
                path: path,
                strokeWeight: 1,
                fillOpacity: 0.4,
                fillColor: '#00b0ff',
                strokeColor: '#80d8ff'
            });
            map.add(polygon);
        }
    }
}
function convertData(data) {
    var coordinates = data.split(';');
    var path = [];
    for (var i = 0; i < coordinates.length; i++) {
        var coordinate = coordinates[i].split(',');
        var lng = parseFloat(coordinate[0]);
        var lat = parseFloat(coordinate[1]);
        path.push([lng, lat]);
    }
    return path;
}
var value = "";
map.getCity(
    callback=function (result) {
        value = result.city;
        drawBounds();
    }
        callback=function (result) {
            value = result.city;
            drawBounds();
        }
);
@@ -28,7 +72,7 @@
mouseTool.on('draw',function(e){
    overlays.push(e.obj);
    console.log(e.obj.getPath());
    switch (name) {
        case 'polyline':{//折线图
            var polyline = e.obj.getPath();
@@ -51,6 +95,10 @@
        case 'circle':{//圆形
            var center = e.obj.getCenter();
            var radius = e.obj.getRadius();
            if(radius > 5000){
                Feng.error("创建电子围栏失败,圆半径不能大于5000米");
                return;
            }
            coordinate += center.lng + ',' + center.lat + ';' + radius + "_";
            objs.circle.push(e.obj);
            break;
@@ -66,7 +114,7 @@
    if(value == ''){
        value = '北京市';
    }
    //加载行政区划插件
    if(!district){
        //实例化DistrictSearch
@@ -216,7 +264,7 @@
        return;
    }
    coordinate = coordinate.substring(0, coordinate.length - 1);
}
function editAll() {
@@ -229,15 +277,15 @@
        polyEditor.on('addnode', function(event) {
            // log.info('触发事件:addnode')
        })
        polyEditor.on('adjust', function(event) {
            // log.info('触发事件:adjust')
        })
        polyEditor.on('removenode', function(event) {
            // log.info('触发事件:removenode')
        })
        polyEditor.on('end', function(e) {
            var polyline = e.target.getPath();
            getCoordinate(polyline);
@@ -245,24 +293,24 @@
        editors.push(polyEditor);
        polyEditor.open();
    }
    //多边形
    for(var i in objs.polygon){
        var polygon = objs.polygon[i];
        var polyEditor = new AMap.PolyEditor(map, polygon)
        polyEditor.on('addnode', function(event) {
            // log.info('触发事件:addnode')
        })
        polyEditor.on('adjust', function(event) {
            // log.info('触发事件:adjust')
        })
        polyEditor.on('removenode', function(event) {
            // log.info('触发事件:removenode')
        })
        polyEditor.on('end', function(e) {
            var polygon = e.target.getPath();
            getCoordinate(polygon);
@@ -270,17 +318,17 @@
        editors.push(polyEditor);
        polyEditor.open();
    }
    //矩形
    for(var i in objs.rectangle){
        var rectangle = objs.rectangle[i];
        var rectangleEditor = new AMap.RectangleEditor(map, rectangle)
        rectangleEditor.on('adjust', function(event) {
            // log.info('触发事件:adjust')
        })
        rectangleEditor.on('end', function(e) {
            var polygon = e.target.getPath();
            getCoordinate(polygon);
@@ -288,20 +336,24 @@
        editors.push(rectangleEditor);
        rectangleEditor.open();
    }
    //圆形
    for(var i in objs.circle){
        var circle = objs.circle[i];
        var circleEditor = new AMap.CircleEditor(map, circle)
        circleEditor.on('move', function(event) {
            // log.info('触发事件:move')
        })
        circleEditor.on('adjust', function(e) {
            var radius = e.target.getRadius();
            if(radius > 5000){
                Feng.error("创建电子围栏失败,圆半径不能大于5000米");
                return;
            }
        })
        circleEditor.on('end', function(e) {
            var center = e.target.getCenter();
            var radius = e.target.getRadius();
@@ -318,4 +370,7 @@
        var editor = editors[i];
        editor.close();
    }
}
}
$(function () {
    setElectricFence()
})
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -68,6 +68,9 @@
    @Resource
    private UserActivityDiscount1Mapper userActivityDiscount1Mapper;
    @Resource
    private UserActivityDiscount2Mapper userActivityDiscount2Mapper;
    @Resource
    private SysIntegralMapper sysIntegralMapper;
@@ -302,9 +305,9 @@
        }
        //计算折扣
        UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId());
        UserActivityDiscount2 query2 = userActivityDiscount2Mapper.query(orderCrossCity.getLineId());
        if(null != query2){
            Double special = query2.getSpecial();
            Double special = query2.getDiscount();
            orderCrossCity.setDiscount(special);
            double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
            if(orderMoney.compareTo(v) > 0){
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityDiscount2Mapper.java
New file
@@ -0,0 +1,16 @@
package com.stylefeng.guns.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.UserActivityDiscount2;
import org.apache.ibatis.annotations.Param;
/**
 * @author zhibing.pu
 * @Date 2025/5/21 10:31
 */
public interface UserActivityDiscount2Mapper extends BaseMapper<UserActivityDiscount2>{
    UserActivityDiscount2 query(@Param("lineId") Integer lineId);
}
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount1Mapper.xml
@@ -27,6 +27,6 @@
        a.`enable` as `enable`
        from t_user_activity_discount1 a
        left join t_user_activity b on (a.userActivityId = b.id)
        where now() between a.startTime and a.endTime and b.`status` = 3 and b.companyId = #{companyId} order by b.insertTime desc limit 0,1
        where now() between a.startTime and a.endTime and a.enable = 2 and b.`status` = 3 and b.companyId = #{companyId} order by b.insertTime desc limit 0,1
    </select>
</mapper>
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount2Mapper.xml
New file
@@ -0,0 +1,13 @@
<?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.UserActivityDiscount2Mapper">
    <select id="query" resultType="com.stylefeng.guns.modular.system.model.UserActivityDiscount2">
        select a.* from t_user_activity_discount2 a
        left join t_user_activity b on (a.userActivityId = b.id)
        where a.lineId = #{lineId} and now() between a.startTime and a.endTime and a.enable = 2 and b.`status` = 3  order by b.insertTime desc limit 1
    </select>
</mapper>
UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityDiscount2.java
New file
@@ -0,0 +1,108 @@
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_user_activity_discount2")
public class UserActivityDiscount2 {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 活动id
     */
    @TableField("userActivityId")
    private Integer userActivityId;
    /**
     * 跨城线路id
     */
    @TableField("lineId")
    private Integer lineId;
    /**
     * 折扣(8.5)
     */
    @TableField("discount")
    private Double discount;
    /**
     * 活动有效开始时间
     */
    @TableField("startTime")
    private Date startTime;
    /**
     * 活动有效结束时间
     */
    @TableField("endTime")
    private Date endTime;
    /**
     * 是否启用(1=不启用,2=启用)
     */
    @TableField("enable")
    private Integer enable;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserActivityId() {
        return userActivityId;
    }
    public void setUserActivityId(Integer userActivityId) {
        this.userActivityId = userActivityId;
    }
    public Integer getLineId() {
        return lineId;
    }
    public void setLineId(Integer lineId) {
        this.lineId = lineId;
    }
    public Double getDiscount() {
        return discount;
    }
    public void setDiscount(Double discount) {
        this.discount = discount;
    }
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public Integer getEnable() {
        return enable;
    }
    public void setEnable(Integer enable) {
        this.enable = enable;
    }
}