“mitao”
2026-04-17 f9e7f674ffdddce23aab0335f7430d75ec0c4482
Merge remote-tracking branch 'origin/1.0' into 1.0
1个文件已添加
11个文件已修改
226 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/WeatherDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpTradingStrategy.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpWhitelist.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/AdcPushAsyncConfig.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpMapController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/XpTradingStrategyEditDTO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/vo/XpTradingStrategyDetailVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpWhitelistController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistAddDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistEditDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/WeatherDTO.java
New file
@@ -0,0 +1,33 @@
package com.xiaopeng.api.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.util.List;
@Data
@ApiModel("根据ip获取点位")
public class WeatherDTO {
    int status;
    //返回状态说明,10000代表正确
    int infocode;
    List<Lives> lives;
    static class Lives {
        String province;
        String city;
        String adcode;
        String weather;
        String temperature;
        String winddirection;
        String windpower;
        String humidity;
        String reporttime;
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpTradingStrategy.java
@@ -11,6 +11,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.Min;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@@ -37,11 +38,22 @@
    @ApiModelProperty(value = "用户每日取消订单数")
    private Integer cancleCount;
    @ApiModelProperty(value = "单个订单可修改目的地次数")
    private Integer amendCountPerOrder;
    @ApiModelProperty(value = "乘客端首页安全中心是否开启")
    private Boolean showSecurityCenter;
    //
    @ApiModelProperty(value = "豁免金额")
    private BigDecimal exemptionAmount;
    @ApiModelProperty(value = "是否长期有效 1=是 0=否")
    private Boolean isLongValid;
    @ApiModelProperty(value = "豁免城市")
    private String cityCode;
    @ApiModelProperty(value = "豁免开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -54,6 +66,8 @@
    @ApiModelProperty(value = "豁免角色 逗号分割 0=全部 1=新客 2=老客 3=流失召回 4=媒体")
    private String exemptionRole;
    //
    @ApiModelProperty(value = "免密授权金额")
    private BigDecimal passwordFreeAmount;
@@ -61,27 +75,35 @@
    private BigDecimal prepaidLimit;
    @ApiModelProperty(value = "一轮推单距离")
    @Min(0)
    private Double onePushDistance;
    @ApiModelProperty(value = "一轮推单时间")
    @Min(0)
    private Integer onePushTime;
    @ApiModelProperty(value = "二轮推单距离")
    @Min(0)
    private Double twoPushDistance;
    @ApiModelProperty(value = "二轮推单时间")
    @Min(0)
    private Integer twoPushTime;
    @ApiModelProperty(value = "三轮推单距离")
    @Min(0)
    private Double threePushDistance;
    @ApiModelProperty(value = "三轮推单时间")
    @Min(0)
    private Integer threePushTime;
    @ApiModelProperty(value = "四轮推单距离")
    @Min(0)
    private Double fourPushDistance;
    @ApiModelProperty(value = "四轮推单时间")
    @Min(0)
    private Integer fourPushTime;
    @ApiModelProperty(value = "五轮推单距离")
@@ -123,4 +145,9 @@
    @ApiModelProperty(value = "电量权重")
    private Integer weightElectricity;
    @ApiModelProperty(value = "路线时效,单位:秒")
    private Integer MaxStandingTiming;
    @ApiModelProperty(value = "触发步行导航的最小距离")
    private Integer walkingGuideDistance;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpWhitelist.java
@@ -1,17 +1,18 @@
package com.xiaopeng.api.model.operation;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.common.core.web.domain.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.Min;
import java.time.LocalDate;
/**
 * <p>
@@ -49,4 +50,18 @@
    @ApiModelProperty(value = "来源 1=添加 2=邀请码")
    private Integer whitelistSource;
    @ApiModelProperty(value = "有限期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expireTime;
    @ApiModelProperty(value = "最大下单数量")
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
    public Boolean getStatus() {
        if (LocalDate.now().isAfter(expireTime)) {
            return false;
        }
        return status;
    }
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/AdcPushAsyncConfig.java
@@ -1,5 +1,8 @@
package com.xiaopeng.map.config;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@@ -26,4 +29,12 @@
        executor.initialize();
        return executor;
    }
    @Bean
    public ObjectMapper om() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpMapController.java
@@ -1,41 +1,44 @@
package com.xiaopeng.map.controller;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.xiaopeng.api.dto.WeatherDTO;
import com.xiaopeng.api.dto.map.HistoryPointDto;
import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.map.PointByIpVo;
import com.xiaopeng.api.vo.map.XpDistanceAndDurationVo;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.map.mangodb.model.GeoPoint;
import com.xiaopeng.map.mangodb.service.XpGeoFencingPolygonService;
import com.xiaopeng.map.utils.AmapWalkingRouteUtil;
import com.xiaopeng.map.utils.GDMapGeocodingUtil;
import com.xiaopeng.map.utils.mangoUtils.MongoGeoFenceUtil;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
@Slf4j
@RestController
@@ -191,4 +194,32 @@
        return R.ok(pointByIpVo);
    }
    @Value("${map.urls.weather:https://restapi.amap.com/v3/weather/weatherInfo?key=%s&city=%s}")
    String WEATHER_URL;
    @Autowired
    ObjectMapper om;
    @Value("${map.apikey:66ae577f63898dae3016d599fda57221}")
    String key;
    @ApiOperation(value = "获取天气信息", tags = {"内部-调价"})
    @GetMapping("/logan/inner/weatherInfo")
    public R<WeatherDTO> weather(@RequestParam String city) throws IOException {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet httpGet = new HttpGet(String.format(WEATHER_URL, key, city));
            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String resp = EntityUtils.toString(entity, StandardCharsets.UTF_8);
                    System.out.println(resp);
                    return R.ok(om.readValue(resp, WeatherDTO.class));
                }
                return R.fail("获取天气信息失败");
            }
        }
    }
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/XpTradingStrategyEditDTO.java
@@ -117,4 +117,19 @@
    @ApiModelProperty(value = "关联城市列表")
    @Valid
    private List<XpTradingStrategyCity> cityList;
    @ApiModelProperty(value = "单个订单可修改目的地次数")
    private Integer amendCountPerOrder;
    @ApiModelProperty(value = "乘客端首页安全中心是否开启")
    private Boolean showSecurityCenter;
    @ApiModelProperty(value = "豁免城市")
    private String cityCode;
    @ApiModelProperty(value = "路线时效,单位:秒")
    private Integer MaxStandingTiming;
    @ApiModelProperty(value = "触发步行导航的最小距离")
    private Integer walkingGuideDistance;
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/vo/XpTradingStrategyDetailVO.java
@@ -124,4 +124,20 @@
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "单个订单可修改目的地次数")
    private Integer amendCountPerOrder;
    @ApiModelProperty(value = "乘客端首页安全中心是否开启")
    private Boolean showSecurityCenter;
    @ApiModelProperty(value = "豁免城市")
    private String cityCode;
    @ApiModelProperty(value = "路线时效,单位:秒")
    private Integer MaxStandingTiming;
    @ApiModelProperty(value = "触发步行导航的最小距离")
    private Integer walkingGuideDistance;
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpWhitelistController.java
@@ -6,8 +6,6 @@
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.core.util.PhoneUtil;
import com.xiaopeng.api.model.account.SysUser;
import com.xiaopeng.api.model.operation.XpWhitelist;
import com.xiaopeng.api.model.operation.XpWhitelistOperlog;
@@ -34,7 +32,6 @@
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -48,18 +45,10 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -127,6 +116,11 @@
            return R.fail("请输入账号");
        }
        SysUser sysUser = tokenService.getLoginUser().getSysUser();
        if (dto.getExpireTime() != null && dto.getExpireTime().isBefore(LocalDate.now())) {
            return R.fail("有效期不能早于当前日期");
        }
        XpWhitelist xpWhitelist = new XpWhitelist();
        BeanUtils.copyProperties(dto, xpWhitelist);
        xpWhitelist.setUpdateBy(tokenService.getLoginUser().getSysUser().getNickName());
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistAddDto.java
@@ -1,11 +1,14 @@
package com.xiaopeng.operation.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
@Data
@ApiModel(value = "白名单新增DTO")
@@ -18,4 +21,13 @@
    @ApiModelProperty(value = "优先派单 1=是 0=否", required = true)
    @NotNull(message = "优先派单不能为空")
    private Boolean isPriorityDispatch;
    @ApiModelProperty(value = "有限期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expireTime;
    @ApiModelProperty(value = "最大下单数量")
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistEditDto.java
@@ -1,11 +1,14 @@
package com.xiaopeng.operation.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
@Data
@ApiModel(value = "白名单编辑DTO")
@@ -28,5 +31,11 @@
    @NotNull(message = "状态不能为空")
    private Boolean status;
    @ApiModelProperty(value = "有限期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expireTime;
    @ApiModelProperty(value = "最大下单数量")
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
@@ -23,6 +23,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@@ -73,6 +74,10 @@
            return R.fail("所有帐号添加失败,请检查帐号格式或唯一性");
        }
        if (dto.getExpireTime() != null && dto.getExpireTime().isBefore(LocalDate.now())) {
            return R.fail("有效期不能早于当前日期");
        }
        int sampleLimitPerReason = 20;
        int totalCount = accounts.size();
        Map<String, Long> reasonCountMap = new HashMap<>();
@@ -116,6 +121,8 @@
            xpWhitelist.setIsPriorityDispatch(dto.getIsPriorityDispatch());
            xpWhitelist.setWhitelistSource(1);
            xpWhitelist.setCreateBy(sysUser.getNickName());
            xpWhitelist.setExpireTime(dto.getExpireTime());
            xpWhitelist.setMaxOrderNum(dto.getMaxOrderNum());
            addList.add(xpWhitelist);
        }
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java
@@ -44,9 +44,9 @@
    @PostConstruct
    void setupObjectMapper() {
        // 允许对象忽略json中不存在的属性
        om = new ObjectMapper();
        om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        om.registerModule(new JavaTimeModule());
        om = new ObjectMapper();
    }
    // ==================== 连接生命周期 ====================