| | |
| | | |
| | | @ApiModelProperty(value = "场站名称编码") |
| | | private String stationNameOrNumber; |
| | | @ApiModelProperty(value = "点位经纬度") |
| | | private String pointLonAndLat; |
| | | |
| | | @ApiModelProperty(value = "场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效") |
| | | private Integer status; |
| | |
| | | |
| | | import cn.afterturn.easypoi.excel.ExcelExportUtil; |
| | | import cn.afterturn.easypoi.excel.entity.ExportParams; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.xiaopeng.api.dto.map.XpPointExportExcelQuery; |
| | | import com.xiaopeng.api.dto.operation.PointAddDto; |
| | | import com.xiaopeng.api.dto.operation.PointUpdateDto; |
| | |
| | | |
| | | @ApiOperation(value = "获取所有运营中的区域", response = XpElectronicFenceArea.class) |
| | | @PostMapping("/listElectronicFenceArea") |
| | | public R<List<XpElectronicFenceArea>> listElectronicFenceArea(@RequestParam String cityCode) { |
| | | public R<List<XpElectronicFenceArea>> listElectronicFenceArea(@RequestParam(required = false) String cityCode) { |
| | | // 获取所有启用的电子围栏 |
| | | List<XpElectronicFence> electronicFences = xpElectronicFenceService.lambdaQuery() |
| | | .eq(XpElectronicFence::getStatus, 2) |
| | | .eq(XpElectronicFence::getCityCode, cityCode) |
| | | .list(); |
| | | |
| | | LambdaQueryChainWrapper<XpElectronicFence> eq = xpElectronicFenceService.lambdaQuery() |
| | | .eq(XpElectronicFence::getStatus, 2); |
| | | if(StrUtil.isNotBlank(cityCode)){ |
| | | eq.eq(XpElectronicFence::getCityCode, cityCode); |
| | | } |
| | | |
| | | List<XpElectronicFence> electronicFences = xpElectronicFenceService.list(eq); |
| | | List<Long> electronicFenceIds = electronicFences.stream().map(XpElectronicFence::getId).collect(Collectors.toList()); |
| | | if (electronicFenceIds.isEmpty()) { |
| | | return R.ok(new ArrayList<XpElectronicFenceArea>()); |
| | |
| | | |
| | | PageInfo<XpStation> pageList(XpStationQuery query); |
| | | |
| | | boolean isPolygonInPolygon(String innerFencePoints, String outerFencePoints); |
| | | |
| | | void validate(XpStationVo dto); |
| | | |
| | | @Transactional |
| | |
| | | import org.redisson.api.RedissonClient; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | |
| | | private XpElectronicFenceMapper xpElectronicFenceMapper; |
| | | |
| | | @Resource |
| | | @Lazy |
| | | private XpStationService xpStationService; |
| | | |
| | | @Resource |
| | |
| | | continue; |
| | | } |
| | | String downloadUrl =""; |
| | | try { |
| | | downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); |
| | | log.info("downloadUrl:{}", downloadUrl); |
| | | } catch (UnsupportedEncodingException e) { |
| | | log.error("获取图片下载地址失败", e); |
| | | } |
| | | // try { todo 20260422 yyy暂时注释 |
| | | // downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); |
| | | // log.info("downloadUrl:{}", downloadUrl); |
| | | // } catch (UnsupportedEncodingException e) { |
| | | // log.error("获取图片下载地址失败", e); |
| | | // } |
| | | jsonObject.put("url", downloadUrl); |
| | | } |
| | | log.info("jsonArray:{}", jsonArray); |
| | |
| | | import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType; |
| | | import org.apache.shardingsphere.transaction.core.TransactionType; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | | import org.springframework.data.mongodb.core.geo.GeoJsonPolygon; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | |
| | | private GDMapGeocodingUtil gdMapGeocodingUtil; |
| | | @Autowired |
| | | private XpRegionMapper xpRegionMapper; |
| | | @Lazy |
| | | @Resource |
| | | private XpPointService xpPointService; |
| | | |
| | |
| | | * @param outerFencePoints 外部围栏点位字符串(参考围栏),格式为 "lng1_lat1,lng2_lat2,..." |
| | | * @return 是否在内 true在内 false不在 |
| | | */ |
| | | @Override |
| | | public boolean isPolygonInPolygon(String innerFencePoints, String outerFencePoints) { |
| | | if (innerFencePoints == null || innerFencePoints.trim().isEmpty() |
| | | || outerFencePoints == null || outerFencePoints.trim().isEmpty()) { |
| | |
| | | return R.ok(xpOpenCityService.citiesList()); |
| | | } |
| | | |
| | | @ApiOperation(value = "获取开通城市启用列表",tags = {"管理后台-开通城市-获取启用的数据"},response = XpOpenCityVo.class) |
| | | @GetMapping("/api/v1/openCity/findLstEnable") |
| | | public R<XpOpenCityVo> openCityFindList() { |
| | | return R.ok(xpOpenCityService.citiesList()); |
| | | } |
| | | /** |
| | | * 获取开通城市列表(管理后台使用) |
| | | * 用于路线规划配置的新增和编辑 |
| | |
| | | |
| | | /** |
| | | * 5秒执行一次 |
| | | * 播单 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ?") |
| | | public void taskOrder() { |
| | |
| | | @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataTypeClass = Long.class), |
| | | @ApiImplicitParam(name = "orderType", value = "订单类型(1=用户单,2=测试单)", required = true, dataTypeClass = Integer.class) |
| | | }) |
| | | public R<List<XpVehicle>> listAvailableVehicles(@RequestParam Long orderId, Integer orderType) { |
| | | List<XpVehicle> list = xpVehicleService.listAvailableVehicles(orderId, orderType); |
| | | public R<List<XpVehicleVO>> listAvailableVehicles(@RequestParam Long orderId, Integer orderType, String plateNumber, String fleetName) { |
| | | List<XpVehicleVO> list = xpVehicleService.listAvailableVehicles(orderId, orderType,plateNumber,fleetName); |
| | | return R.ok(list); |
| | | } |
| | | |
| | |
| | | */ |
| | | List<XpVehicleVO> pageList(@Param("pageInfo") PageInfo<XpVehicleVO> pageInfo, @Param("query") VehicleMapQuery query); |
| | | |
| | | List<XpVehicleVO> findList(@Param("query") VehicleMapQuery query); |
| | | |
| | | /** |
| | | * 在库车辆管理分页查询 |
| | | * |
| | |
| | | private String plateNumber; |
| | | @ApiModelProperty(value = "运营状态 1运营中 2维修中 3已收车 4车辆异常") |
| | | private String status; |
| | | @ApiModelProperty(value = "运营状态 1运营中 2维修中 3已收车 4车辆异常") |
| | | private Integer operatingStatus; |
| | | @ApiModelProperty(value = "车辆接单状态 1接单中 0空闲") |
| | | private Integer state; |
| | | @ApiModelProperty(value = "围栏id") |
| | | private String electronicId; |
| | | |
| | |
| | | private Long operationsUserId; |
| | | @ApiModelProperty(value = "车辆id集合 前端忽略") |
| | | private List<Long> vehicleIds; |
| | | |
| | | @ApiModelProperty(value = "车辆类型 1=在库 2=运营") |
| | | private Integer vehicleType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "车队名称") |
| | | private String fleetName; |
| | | } |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.util.*; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<XpVehicle> listAvailableVehicles(Long orderId, Integer orderType) { |
| | | public List<XpVehicleVO> listAvailableVehicles(Long orderId, Integer orderType, String plateNumber, String fleetName) { |
| | | // 1. 通过订单ID查询订单信息,获取区域ID |
| | | Long areaId = null; |
| | | |
| | |
| | | } |
| | | |
| | | // 3. 根据围栏ID查询车辆列表 (operatingStatus=1 且 state=0) |
| | | LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(XpVehicle::getElectronicId, electronicId) |
| | | .eq(XpVehicle::getOperatingStatus, 1) |
| | | .eq(XpVehicle::getVehicleType, 2) |
| | | .eq(XpVehicle::getState, 0); |
| | | VehicleMapQuery query = new VehicleMapQuery(); |
| | | query.setState(0); |
| | | query.setVehicleType(2); |
| | | query.setOperatingStatus(1); |
| | | query.setElectronicId(electronicId.toString()); |
| | | query.setFleetName(fleetName); |
| | | query.setPlateNumber(plateNumber); |
| | | |
| | | // 排序:按电量降序、入库时间降序 |
| | | wrapper.orderByDesc(XpVehicle::getCurrentElectricity) |
| | | .orderByDesc(XpVehicle::getWarehousingTime); |
| | | List<XpVehicle> list = this.list(wrapper); |
| | | List<XpVehicleVO> list = baseMapper.findList(query); |
| | | //获取车的位置 和订单的位置 并计算 距离 和 时间 |
| | | if(!list.isEmpty()){ |
| | | for (XpVehicle xpVehicle : list) { |
| | |
| | | ORDER BY create_time DESC |
| | | </select> |
| | | |
| | | |
| | | <select id="findList" resultType="com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO"> |
| | | SELECT a.* |
| | | FROM xp_vehicle as a |
| | | <where> a.is_deleted = 0 |
| | | <if test="query.vehicleType != null and query.vehicleType != ''"> |
| | | AND a.vehicle_type = #{query.vehicleType} |
| | | </if> |
| | | <if test="query.plateNumber != null and query.plateNumber != ''"> |
| | | AND a.plate_number LIKE CONCAT('%', #{query.plateNumber}, '%') |
| | | </if> |
| | | <!-- 运营状态 1运营中 2维修中 3已收车 4车辆异常 --> |
| | | <if test="query.operatingStatus != null and query.operatingStatus != ''"> |
| | | AND a.operating_status = #{query.operatingStatus} |
| | | </if> |
| | | <!-- 车辆接单状态 1接单中 0空闲 --> |
| | | <if test="query.state != null and query.state != ''"> |
| | | AND a.state = #{query.state} |
| | | </if> |
| | | <if test="query.statusList != null and query.statusList.size()>0"> |
| | | AND a.operating_status in |
| | | <foreach item="item" collection="query.statusList" separator="," open="(" close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | <if test="query.electronicId != null and query.electronicId != ''"> |
| | | AND a.electronic_id #{query.electronicId} |
| | | </if> |
| | | <if test="query.electronicIdList != null and query.electronicIdList.size()>0"> |
| | | AND a.electronic_id in |
| | | <foreach item="item" collection="query.electronicIdList" separator="," open="(" close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | <if test="query.vehicleIds != null and query.vehicleIds.size()>0"> |
| | | AND a.id in |
| | | <foreach item="item" collection="query.vehicleIds" separator="," open="(" close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | <if test="query.fleetName != null and query.fleetName != ''"> |
| | | AND EXISTS ( |
| | | SELECT 1 FROM xp_fleet_vehicle xfv |
| | | LEFT JOIN xp_fleet xf ON xfv.fleet_id = xf.id |
| | | WHERE xfv.vehicle_id = a.id |
| | | AND xf.fleet_name LIKE CONCAT('%', #{query.fleetName}, '%') |
| | | ) |
| | | </if> |
| | | </where> |
| | | ORDER BY a.current_electricity DESC,a.warehousing_time desc |
| | | </select> |
| | | |
| | | <!-- 在库车辆管理分页查询条件 --> |
| | | <sql id="Vehicle_Page_Where"> |
| | | AND vehicle_type = 1 |