xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/open_api/BrandInfo.java
New file @@ -0,0 +1,28 @@ package com.xiaopeng.api.dto.open_api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class BrandInfo { @ApiModelProperty(value = "品牌名称") private String brandName; @ApiModelProperty(value = "品牌LOGO") private String logo; @ApiModelProperty(value = "所属分类") private Classification classification; @ApiModelProperty(value = "计价类型") private ChargeType chargeType; @ApiModelProperty(value = "负责人姓名") private String operationsUserName; @ApiModelProperty(value = "负责人-手机号") private String phoneNumber; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/open_api/ChargeType.java
New file @@ -0,0 +1,7 @@ package com.xiaopeng.api.dto.open_api; public enum ChargeType { FIXED_PRICE, TWO_PART_PRICE, REAL_TIME_PRICING } xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/open_api/Classification.java
New file @@ -0,0 +1,19 @@ package com.xiaopeng.api.dto.open_api; public enum Classification { /** * 1. Taxi (出租车) * 2. Premier (专车) * 3. Express (快车) * 4. Hitch (顺风车) * 5. Designated Driver (代驾) * 6. Carpool (拼车) */ Taxi, Premier, Express, Hitch, Carpool, DesignatedDriver, } xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -332,6 +332,7 @@ xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(dto.getVin(), 1)); // TODO[流量接入] 通过设置的URL发送订单和导航路线给运力 } if(null != mqttPublishDto && mqttPublishDto.getCode() == 200){ xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java
@@ -17,6 +17,7 @@ import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @@ -114,7 +115,7 @@ @ApiOperation(value = "巡游打卡统计", tags = {"管理后台-巡游打卡管理"}) @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/statistic") public R<XpCruiseCheckInRecordVO> pageList(@RequestBody XpCruiseCheckInStatisticsQuery query) { public R<XpCruiseCheckInStatisticsVO> pageList(@RequestBody XpCruiseCheckInStatisticsQuery query) { return R.ok(xpCruiseCheckInRecordService.statistics(query)); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpCruiseCheckInRecordMapper.java
@@ -6,6 +6,7 @@ import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -16,7 +17,7 @@ XpCruiseCheckInRecordVO detail(@Param("id")Long id); XpCruiseCheckInRecordVO selectCruiseCheckInStatistics(@Param("userIds") XpCruiseCheckInStatisticsQuery query); XpCruiseCheckInStatisticsVO selectCruiseCheckInStatistics(@Param("query") XpCruiseCheckInStatisticsQuery query); List<XpCruiseCheckInRecordVO> selectCruiseCheckInRecordList(@Param("query") XpCruiseCheckInRecordQuery query); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpCruiseCheckInRecordService.java
@@ -6,6 +6,7 @@ import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO; import java.util.List; @@ -15,7 +16,7 @@ XpCruiseCheckInRecordVO detail(Long id); XpCruiseCheckInRecordVO statistics(XpCruiseCheckInStatisticsQuery query); XpCruiseCheckInStatisticsVO statistics(XpCruiseCheckInStatisticsQuery query); List<XpCruiseCheckInRecordVO> all(XpCruiseCheckInRecordQuery query); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRecordServiceImpl.java
@@ -10,12 +10,15 @@ import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsQuery; import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; @@ -32,19 +35,27 @@ PageInfo<XpCruiseCheckInRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<XpCruiseCheckInRecordVO> list = xpCruiseCheckInRecordMapper.selectCruiseCheckInRecordList(pageInfo, query); pageInfo.setRecords(list); List<Long> ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList()); List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData(); Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity())); list.forEach(record -> { XpOperationsUser user = userMap.get(record.getOperationsUserId()); if (user != null) { record.setOperationsUserId(user.getId()); record.setOperationsUserName(user.getNickName()); record.setPhoneNumber(user.getPhoneNumber()); } }); list = list.stream().map(record -> { XpOperationsUser user = userMap.get(record.getOperationsUserId()); if (user == null) return null; record.setOperationsUserId(user.getId()); record.setOperationsUserName(user.getNickName()); record.setPhoneNumber(user.getPhoneNumber()); if (StringUtils.isNotBlank(query.getOperationsUserName()) && !record.getOperationsUserName().contains(query.getOperationsUserName())) { return null; } if (StringUtils.isNotBlank(query.getPhoneNumber()) && !record.getPhoneNumber().contains(query.getPhoneNumber())) { return null; } return record; }) .filter(Objects::nonNull) .collect(Collectors.toList()); pageInfo.setRecords(list); return pageInfo; } @@ -65,22 +76,10 @@ } @Override public XpCruiseCheckInRecordVO statistics(XpCruiseCheckInStatisticsQuery query) { public XpCruiseCheckInStatisticsVO statistics(XpCruiseCheckInStatisticsQuery query) { XpCruiseCheckInRecordVO vo = xpCruiseCheckInRecordMapper.selectCruiseCheckInStatistics(query); return xpCruiseCheckInRecordMapper.selectCruiseCheckInStatistics(query); List<Long> ids = Collections.singletonList(vo.getOperationsUserId()); List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData(); Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity())); XpOperationsUser user = userMap.get(vo.getOperationsUserId()); if (user != null) { vo.setOperationsUserId(user.getId()); vo.setOperationsUserName(user.getNickName()); vo.setPhoneNumber(user.getPhoneNumber()); } return vo; } @Override @@ -91,14 +90,22 @@ List<Long> ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList()); List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData(); Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity())); list.forEach(record -> { XpOperationsUser user = userMap.get(record.getOperationsUserId()); if (user != null) { record.setOperationsUserId(user.getId()); record.setOperationsUserName(user.getNickName()); record.setPhoneNumber(user.getPhoneNumber()); } }); list = list.stream().map(record -> { XpOperationsUser user = userMap.get(record.getOperationsUserId()); if (user == null) return null; record.setOperationsUserId(user.getId()); record.setOperationsUserName(user.getNickName()); record.setPhoneNumber(user.getPhoneNumber()); if (StringUtils.isNotBlank(query.getOperationsUserName()) && !record.getOperationsUserName().contains(query.getOperationsUserName())) { return null; } if (StringUtils.isNotBlank(query.getPhoneNumber()) && !record.getPhoneNumber().contains(query.getPhoneNumber())) { return null; } return record; }) .filter(Objects::nonNull) .collect(Collectors.toList()); return list; } xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpCruiseCheckInRecordMapper.xml
@@ -30,8 +30,6 @@ SELECT r.id, r.operations_user_id, u.nick_name AS operations_user_name, u.phone_number, r.check_location_id, cl.location_address, r.cruise_check_in_rule_id, @@ -54,17 +52,11 @@ <if test="query.checkInResult != null and query.checkInResult != 3"> AND r.check_in_result = #{query.checkInResult} </if> <if test="query.operationsUserName != null and query.operationsUserName != ''"> AND u.nick_name LIKE CONCAT('%', #{query.operationsUserName}, '%') </if> <if test="query.ruleName != null and query.ruleName != ''"> AND cr.name LIKE CONCAT('%', #{query.ruleName}, '%') </if> <if test="query.locationAddress != null and query.locationAddress != ''"> AND cl.location_address LIKE CONCAT('%', #{query.locationAddress}, '%') </if> <if test="query.phoneNumber != null and query.phoneNumber != ''"> AND u.phone_number = #{query.phoneNumber} </if> <if test="query.startDate != null"> AND DATE(r.check_in_time) >= #{query.startDate} @@ -95,7 +87,7 @@ AND r.is_deleted = '0' </select> <select id="selectCruiseCheckInStatistics" resultMap="CruiseCheckInStatisticsMap"> <select id="selectCruiseCheckInStatistics" resultType="com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO"> SELECT DATE(r.check_in_time) AS date, COUNT(CASE WHEN r.check_in_result = 1 THEN 1 END) AS punctual, @@ -104,7 +96,7 @@ COUNT(CASE WHEN r.field_situation = 2 THEN 1 END) AS traffic FROM xp_cruise_check_in_record r LEFT JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' LEFT JOIN xp_fleet_operations fo ON u.id = fo.operationsUserId LEFT JOIN xp_fleet_operations fo ON r.operations_user_id = fo.operationsUserId LEFT JOIN xp_fleet f ON fo.fleetId = f.id WHERE r.is_deleted = '0' AND r.check_in_time IS NOT NULL xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetController.java
@@ -1,6 +1,9 @@ package com.xiaopeng.vehicleConvoy.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xiaopeng.api.dto.open_api.BrandInfo; import com.xiaopeng.api.feignClient.account.XpOperationsUserClient; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations; import com.xiaopeng.common.core.domain.R; @@ -224,16 +227,28 @@ return R.ok(xpFleetService.list()); } @ApiOperation(value = "品牌信息", tags = {"流量接入-信息录入-品牌展示信息"}) @PostMapping("/api/v1/xp-rt/brand-info") public R<?> JoinUs( @ApiParam(value = "车辆信息", required = true) @RequestBody XpFleet fleet @RequestBody BrandInfo brandInfo ) { //包含接收订单的URL xpFleetService.save(fleet); XpFleet xpFleet = new XpFleet(); XpOperationsUser operationsUser = new XpOperationsUser(); operationsUser.setNickName(brandInfo.getOperationsUserName()); operationsUser.setPhoneNumber(brandInfo.getPhoneNumber()); operationsUser.setDeviceType(1); xpFleet.setFleetName(brandInfo.getBrandName()); // xpFleetService.save(fleet); return R.ok(); } XpOperationsUserClient xpOperationsUserClient; } xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
@@ -1205,9 +1205,14 @@ public R<List<XpVehicleVO>> pushVehiclePosition(@RequestBody VehiclePosition vp) { // 更新到mongodb,用于被分配订单 // 如果是接单中,更新导航路线 return R.ok(); } /** * {@Link OrderStatusEnum} @@ -1221,6 +1226,7 @@ // 前往接驾,等待上车,前往终点,到达终点等待下车,结束订单 // 更新order状态 return R.ok(); }