xuhy
2026-04-23 d8dcefcc986c0d9f737b160ae68df86baa360441
[feat] stage
9个文件已修改
129 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationsUserClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpCruiseCheckInRecordMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpCruiseCheckInRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRecordServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRecordVO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInStatisticsVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpCruiseCheckInRecordMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
@@ -106,6 +106,13 @@
        return R.ok(xpOperationsUserService.listByName(nickName));
    }
    @GetMapping("/logan/inner/xpOperationsUser/profile")
    public R<XpOperationsUserProfileVO> profile(@RequestParam("id")Long id) {
        return R.ok(xpOperationsUserService.getUserProfile(id));
    }
    /**
     * 根据用户ID列表批量查询用户及角色信息(内部接口)
     *
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationsUserClient.java
@@ -2,9 +2,11 @@
import com.xiaopeng.api.factory.account.XpOperationUserClientFallbackFactory;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
@@ -37,4 +39,7 @@
     */
    @PostMapping("/logan/inner/xpOperationsUser/listByName")
    R<List<XpOperationsUser>> listByName(@RequestParam("nickName") String nickName);
    @GetMapping("/logan/inner/xpOperationsUser/profile")
    R<XpOperationsUserProfileVO> getProfile(@RequestParam("id")Long id);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java
@@ -108,14 +108,14 @@
    @ApiOperation(value = "查询巡游打卡记录详情", tags = {"管理后台-巡游打卡管理"})
    @GetMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/{id}")
    public R<XpCruiseCheckInRecordVO> pageList(@PathVariable("id")Long id) {
    public R<XpCruiseCheckInRecordVO> detail(@PathVariable("id")Long id) {
        XpCruiseCheckInRecordVO xpCruiseCheckInRecordVO = xpCruiseCheckInRecordService.detail(id);
        return R.ok(xpCruiseCheckInRecordVO);
    }
    @ApiOperation(value = "巡游打卡统计", tags = {"管理后台-巡游打卡管理"})
    @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/statistic")
    public R<XpCruiseCheckInStatisticsVO> pageList(@RequestBody XpCruiseCheckInStatisticsQuery  query) {
    public R<List<XpCruiseCheckInStatisticsVO>> pageList(@RequestBody XpCruiseCheckInStatisticsQuery  query) {
        return R.ok(xpCruiseCheckInRecordService.statistics(query));
    }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpCruiseCheckInRecordMapper.java
@@ -17,7 +17,7 @@
    XpCruiseCheckInRecordVO detail(@Param("id")Long id);
    XpCruiseCheckInStatisticsVO selectCruiseCheckInStatistics(@Param("query") XpCruiseCheckInStatisticsQuery query);
    List<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
@@ -16,7 +16,7 @@
    XpCruiseCheckInRecordVO detail(Long id);
    XpCruiseCheckInStatisticsVO statistics(XpCruiseCheckInStatisticsQuery query);
    List<XpCruiseCheckInStatisticsVO> statistics(XpCruiseCheckInStatisticsQuery query);
    List<XpCruiseCheckInRecordVO> all(XpCruiseCheckInRecordQuery query);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRecordServiceImpl.java
@@ -3,9 +3,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.feignClient.account.XpOperationsUserClient;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.maintenance.XpCheckLocation;
import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRecord;
import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.mapper.XpCruiseCheckInRecordMapper;
import com.xiaopeng.maintenance.service.IXpCheckLocationService;
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRecordService;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO;
@@ -13,8 +16,10 @@
import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -60,25 +65,48 @@
        return pageInfo;
    }
    IXpCheckLocationService checkLocationService;
    @Override
    public XpCruiseCheckInRecordVO detail(Long id) {
        XpCruiseCheckInRecordVO vo = xpCruiseCheckInRecordMapper.detail(id);
//        Xp
        XpCheckLocation location = checkLocationService.getById(vo.getCheckLocationId());
        vo.setLocationRange(location.getLocationRange());
        vo.setDetailAddr(location.getLocationAddress());
        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) {
            XpOperationsUserProfileVO profile = xpOperationsUserClient.getProfile(user.getId()).getData();
            vo.setOperationsUserId(user.getId());
            vo.setOperationsUserName(user.getNickName());
            vo.setPhoneNumber(user.getPhoneNumber());
            vo.setFleetName(profile.getFleet().getFleetName());
            vo.setRole(profile.getRoles().stream().map(XpOperationsUserProfileVO.RoleInfoVO::getRoleName).collect(Collectors.joining(",")));
        }
        return xpCruiseCheckInRecordMapper.detail(id);
        return vo;
    }
    @Override
    public XpCruiseCheckInStatisticsVO statistics(XpCruiseCheckInStatisticsQuery query) {
        return xpCruiseCheckInRecordMapper.selectCruiseCheckInStatistics(query);
    public List<XpCruiseCheckInStatisticsVO> statistics(XpCruiseCheckInStatisticsQuery query) {
        List<XpCruiseCheckInStatisticsVO> vos = xpCruiseCheckInRecordMapper.selectCruiseCheckInStatistics(query);
        if (CollectionUtils.isEmpty(vos) || vos.size() < 7) {
            String date = vos.get(vos.size() - 1).getDate();
            LocalDate endDate = LocalDate.parse(date);
            LocalDate startDate = endDate.minusDays(6);
            for (int i = 7 - vos.size(); i > 0; i--) {
                XpCruiseCheckInStatisticsVO v = new XpCruiseCheckInStatisticsVO();
                v.setDate(startDate.toString());
                startDate = startDate.plusDays(1);
                vos.add(0, v);
            }
        }
        return vos;
    }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRecordVO.java
@@ -1,11 +1,15 @@
package com.xiaopeng.maintenance.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.api.model.maintenance.XpCheckLocation;
import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@@ -14,6 +18,36 @@
    @ApiModelProperty(value = "主键")
    private Long id;
    /**
     * 规则名称
     */
    @TableField("name")
    private String name;
    /**
     * 任务开始时间
     */
    @TableField("start_time")
    private LocalDateTime startTime;
    /**
     * 任务结束时间
     */
    @TableField("end_time")
    private LocalDateTime endTime;
    /**
     * 循环方式(0=不循环,1=每天循环)
     */
    @TableField("cyclic_mode")
    private Integer cyclicMode;
//    点位总数:
//    当前点位排序:
//    XpCheckLocation and XpCruiseCheckInRule
    @ApiModelProperty(value = "运维人员id")
    private Long operationsUserId;
@@ -24,12 +58,28 @@
    @ApiModelProperty(value = "运维人员手机号")
    private String phoneNumber;
    @ApiModelProperty(value = "所属分队")
    private String fleetName;
    @ApiModelProperty(value = "角色")
    private String role;
    @ApiModelProperty(value = "打卡点位id")
    private Long checkLocationId;
    @ApiModelProperty(value = "打卡点位名称")
    private String locationAddress;
    @ApiModelProperty(value = "打卡点位范围")
    private BigDecimal locationRange;
    @ApiModelProperty(value = "打卡点位限时")
    private String locationTimeLimit;
    @ApiModelProperty(value = "打卡点位详细地址")
    private String detailAddr;
    @ApiModelProperty(value = "巡游打卡规则id")
    private Integer cruiseCheckInRuleId;
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInStatisticsVO.java
@@ -14,7 +14,7 @@
public class XpCruiseCheckInStatisticsVO implements Serializable {
    @ApiModelProperty(value = "日期")
    LocalDate date;
    private String date;
    @ApiModelProperty(value = "准时次数")
    private Integer punctual;
@@ -27,6 +27,5 @@
    @ApiModelProperty(value = "堵车次数")
    private Integer traffic;
}
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpCruiseCheckInRecordMapper.xml
@@ -69,17 +69,7 @@
    <select id="detail" resultMap="CruiseCheckInRecordVOMap">
        SELECT
            r.id,
            r.operations_user_id,
            r.check_location_id,
            cl.location_address,
            r.cruise_check_in_rule_id,
            cr.name AS rule_name,
            r.check_in_time,
            r.check_in_result,
            r.field_situation,
            r.scene_photo,
            r.scene_description
            r.*,cr.*,cl.*
        FROM xp_cruise_check_in_record r
        LEFT JOIN xp_check_location cl ON r.check_location_id = cl.id AND cl.is_deleted = '0'
        LEFT JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0'
@@ -89,15 +79,15 @@
    <select id="selectCruiseCheckInStatistics" resultType="com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO">
        SELECT
        DATE(r.check_in_time) AS date,
        DATE(r.check_in_time) AS `date`,
        COUNT(CASE WHEN r.check_in_result = 1 THEN 1 END) AS punctual,
        COUNT(CASE WHEN r.check_in_result = 2 THEN 1 END) AS late,
        COUNT(CASE WHEN r.field_situation = 1 THEN 1 END) AS noTraffic,
        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 r.operations_user_id = fo.operationsUserId
        LEFT JOIN xp_fleet f ON fo.fleetId = f.id
        LEFT JOIN xp_fleet_operations fo ON r.operations_user_id = fo.operations_user_id
        LEFT JOIN xp_fleet f ON fo.fleet_id = f.id
        WHERE r.is_deleted = '0'
        AND r.check_in_time IS NOT NULL
        <if test="query.ruleName != null and query.ruleName != ''">
@@ -113,7 +103,7 @@
            AND DATE(r.check_in_time) &lt;= #{query.endDate}
        </if>
        GROUP BY DATE(r.check_in_time)
        ORDER BY date DESC
        ORDER BY `date` DESC
    </select>
</mapper>