xuhy
2026-03-12 fa653a30fd3fa755724ba8ce7e18b6a675eb4821
Merge remote-tracking branch 'origin/master'
1个文件已添加
7个文件已修改
123 ■■■■■ 已修改文件
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpClockInController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/GetClockInStatisticsDetailsDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpClockInService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpClockInServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpClockInMapper.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -349,8 +349,13 @@
        fareVo.setOriginalFare(xpPricingCardVo.getTotalPrice());
        fareVo.setOriginalFareStr(fareVo.getOriginalFare() + "");
        if (userCouponVo != null) {
            fareVo.setDiscountAmount(userCouponVo.getMoney());
            fareVo.setFinalFare(fareVo.getOriginalFare() - fareVo.getDiscountAmount());
            if(userCouponVo.getMoney()>fareVo.getOriginalFare()){
                fareVo.setDiscountAmount(fareVo.getOriginalFare());
                fareVo.setFinalFare(0.0);
            }else {
                fareVo.setDiscountAmount(userCouponVo.getMoney());
                fareVo.setFinalFare(fareVo.getOriginalFare() - fareVo.getDiscountAmount());
            }
            if(fareVo.getFinalFare()>0){
                fareVo.setSystemDiscount(fareVo.getFinalFare());
                fareVo.setFinalFare(0.0);
@@ -382,7 +387,7 @@
            fareVo.setFinalFareStr("0.0");
        }
        fareVo.setOriginalFare(new BigDecimal(fareVo.getOriginalFare()).setScale(2,RoundingMode.HALF_UP).doubleValue());
        fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount()).setScale(2,RoundingMode.HALF_UP).doubleValue());
        fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount() == null ? 0 : fareVo.getSystemDiscount()).setScale(2,RoundingMode.HALF_UP).doubleValue());
        routeAndFareVo.setFareEstimate(fareVo);
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpClockInController.java
@@ -4,11 +4,8 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.maintenance.dto.ClockDTO;
import com.xiaopeng.maintenance.dto.ClockInStatisticsDto;
import com.xiaopeng.maintenance.dto.VerifyRangeDTO;
import com.xiaopeng.maintenance.dto.*;
import com.xiaopeng.maintenance.service.IXpClockInService;
import com.xiaopeng.maintenance.dto.ClockInStatisticsDetailsDto;
import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo;
import com.xiaopeng.maintenance.vo.ClockInStatisticsVo;
import io.swagger.annotations.ApiOperation;
@@ -95,8 +92,8 @@
    @ApiOperation(value = "排班考勤打卡统计详情列表", tags = {"管理后台-运维执行"})
    @PostMapping("/api/v1/clock/getClockInStatisticsDetails")
    public R<PageInfo<ClockInStatisticsDetailsDto>> getClockInStatisticsDetails(@RequestBody ClockInStatisticsDetailsVo query){
        PageInfo<ClockInStatisticsDetailsDto> clockInStatisticsDetails = xpClockInService.getClockInStatisticsDetails(query);
    public R<GetClockInStatisticsDetailsDto> getClockInStatisticsDetails(@RequestBody ClockInStatisticsDetailsVo query){
        GetClockInStatisticsDetailsDto clockInStatisticsDetails = xpClockInService.getClockInStatisticsDetails(query);
        return R.ok(clockInStatisticsDetails);
    }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java
@@ -83,19 +83,10 @@
            // 找车辆的任务  生成巡游单子 下发命令
            R<XpCruiseOrder> newCruiseOrder = xpCruisePlanClient.getNewCruiseOrder(new NewCruiseOrderDto(xpVehicle.getId(),xpVehicle.getVehicleVin(),xpVehicle.getFleetId(),vehiclePosition.getPoint()));
            if(newCruiseOrder.getData()!=null){
                xpCruiseOrderClient.addCruiseOrder(newCruiseOrder.getData());
                // 下发命令
                PushOrderDto pushOrderDto = new PushOrderDto();
                pushOrderDto.setVin(xpVehicle.getVehicleVin());
                pushOrderDto.setOrderId("XU" + newCruiseOrder.getData().getId());
                pushOrderDto.setStartLatitude(newCruiseOrder.getData().getStartLat());
                pushOrderDto.setStartLongitude(newCruiseOrder.getData().getStartLon());
                pushOrderDto.setEndLatitude(newCruiseOrder.getData().getEndLat());
                pushOrderDto.setEndLongitude(newCruiseOrder.getData().getEndLon());
                pushOrderDto.setOrderType(OrderType.CRUISE_ORDER);
                pushOrderDto.setStage(2);
                orderMissionClient.pushOrder(pushOrderDto);
                R<Long> longR = xpCruiseOrderClient.addCruiseOrder(newCruiseOrder.getData());
                if(200 != longR.getCode()){
                    return R.fail(longR.getMsg());
                }
            }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/GetClockInStatisticsDetailsDto.java
New file
@@ -0,0 +1,26 @@
package com.xiaopeng.maintenance.dto;
import com.xiaopeng.common.core.web.page.PageInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class GetClockInStatisticsDetailsDto {
    @ApiModelProperty("应打卡次数")
    private Integer shouldClockInCount;
    @ApiModelProperty("正常打开")
    private Long normalClockInCount;
    @ApiModelProperty("迟到")
    private Long lateClockInCount;
    @ApiModelProperty("缺卡")
    private Long missingClockInCount;
    @ApiModelProperty("列表数据")
    private PageInfo<ClockInStatisticsDetailsDto> list;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpClockInService.java
@@ -4,10 +4,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.dto.ClockDTO;
import com.xiaopeng.maintenance.dto.ClockInStatisticsDetailsDto;
import com.xiaopeng.maintenance.dto.ClockInStatisticsDto;
import com.xiaopeng.maintenance.dto.VerifyRangeDTO;
import com.xiaopeng.maintenance.dto.*;
import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo;
import com.xiaopeng.maintenance.vo.ClockInStatisticsVo;
import org.springframework.web.bind.annotation.RequestBody;
@@ -77,7 +74,7 @@
     * @param query
     * @return
     */
    PageInfo<ClockInStatisticsDetailsDto> getClockInStatisticsDetails(ClockInStatisticsDetailsVo query);
    GetClockInStatisticsDetailsDto getClockInStatisticsDetails(ClockInStatisticsDetailsVo query);
    /**
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpClockInServiceImpl.java
@@ -1,12 +1,16 @@
package com.xiaopeng.maintenance.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient;
import com.xiaopeng.api.model.account.SysRole;
import com.xiaopeng.api.model.account.XpOperationsRole;import com.xiaopeng.api.model.account.XpOperationsUser;import com.xiaopeng.api.model.maintenance.XpCheckLocation;
import com.xiaopeng.api.model.maintenance.XpClockIn;
import com.xiaopeng.api.model.maintenance.XpSchedulingDetail;
import com.xiaopeng.api.model.maintenance.XpShift;
import com.xiaopeng.api.vo.account.XpOperationsUserVO;
import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;import com.xiaopeng.common.core.constant.Constants;
@@ -16,14 +20,12 @@
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.utils.poi.ExcelUtil;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.dto.ClockDTO;
import com.xiaopeng.maintenance.dto.ClockInStatisticsDetailsDto;
import com.xiaopeng.maintenance.dto.ClockInStatisticsDto;
import com.xiaopeng.maintenance.dto.VerifyRangeDTO;
import com.xiaopeng.maintenance.dto.*;
import com.xiaopeng.maintenance.mapper.XpCheckLocationMapper;
import com.xiaopeng.maintenance.mapper.XpClockInMapper;
import com.xiaopeng.maintenance.mapper.XpShiftMapper;
import com.xiaopeng.maintenance.service.IXpClockInService;
import com.xiaopeng.maintenance.service.IXpSchedulingDetailService;
import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo;
import com.xiaopeng.maintenance.vo.ClockInStatisticsVo;
import lombok.extern.slf4j.Slf4j;
@@ -67,6 +69,12 @@
    @Resource
    private XpOperationUserClient xpOperationUserClient;
    @Resource
    private IXpSchedulingDetailService xpSchedulingDetailService;
    @Resource
    private XpFleetOperationsClient fleetOperationsClient;
@@ -374,7 +382,8 @@
     * @return
     */
    @Override
    public PageInfo<ClockInStatisticsDetailsDto> getClockInStatisticsDetails(ClockInStatisticsDetailsVo query) {
    public GetClockInStatisticsDetailsDto getClockInStatisticsDetails(ClockInStatisticsDetailsVo query) {
        GetClockInStatisticsDetailsDto dto = new GetClockInStatisticsDetailsDto();
        PageInfo<ClockInStatisticsDetailsDto> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        String startTime = "";
@@ -393,7 +402,21 @@
            clockInStatistic.setRoleName(xpOperationsUserWithRoleVO.getRoles().stream().map(SysRole::getRoleName).collect(Collectors.joining(";")));
        }
        pageInfo.setRecords(clockInStatisticsDetails);
        return pageInfo;
        dto.setList(pageInfo);
        XpOperationsUser xpOperationsUser = xpOperationUserClient.queryById(query.getAppUserId()).getData();
        List<Long> longList = fleetOperationsClient.getFleetIdsByUserId(xpOperationsUser.getId()).getData();
        List<XpSchedulingDetail> list = xpSchedulingDetailService.list(new QueryWrapper<XpSchedulingDetail>().eq("fleetId", longList.get(0)).between(StringUtils.isNotEmpty(startTime), "plan_time", startTime, endTime));
        QueryWrapper<XpClockIn> last1 = new QueryWrapper<XpClockIn>().eq("app_user_id", query.getAppUserId()).last(" and (clock_in_result = 1 or clock_out_result = 1)"
                + (StringUtils.isNotEmpty(startTime) ? " and (DATE_FORMAT(clock_in_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "' or DATE_FORMAT(clock_out_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "'))" : ""));
        QueryWrapper<XpClockIn> last2 = new QueryWrapper<XpClockIn>().eq("app_user_id", query.getAppUserId()).last(" and (clock_in_result = 2 or clock_out_result = 2)"
                + (StringUtils.isNotEmpty(startTime) ? " and (DATE_FORMAT(clock_in_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "' or DATE_FORMAT(clock_out_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "'))" : ""));
        QueryWrapper<XpClockIn> last3 = new QueryWrapper<XpClockIn>().eq("app_user_id", query.getAppUserId()).last(" and (clock_in_result = 3 or clock_out_result = 3)"
                + (StringUtils.isNotEmpty(startTime) ? " and (DATE_FORMAT(clock_in_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "' or DATE_FORMAT(clock_out_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "'))" : ""));
        dto.setShouldClockInCount(list.size() * 2);
        dto.setNormalClockInCount(this.count(last1));
        dto.setLateClockInCount(this.count(last2));
        dto.setMissingClockInCount(this.count(last3));
        return dto;
    }
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpClockInMapper.xml
@@ -96,8 +96,8 @@
            CONCAT(d.shift_name, '(', d.start_time, '-', d.end_time, ')') as shiftName,
            DATE_FORMAT(a.clock_in_time, '%Y-%m-%d %H:%i') as clockInTime,
            DATE_FORMAT(a.clock_out_time, '%Y-%m-%d %H:%i') as clockOutTime,
            CASE WHEN a.clock_in_result = 1 THEN '正常' WHEN a.clock_in_result = 2 THEN '迟到' ELSE '缺卡' END as clockInResult,
            CASE WHEN a.clock_out_result = 1 THEN '正常' WHEN a.clock_out_result = 2 THEN '早退' ELSE '缺卡' END as clockOutResult,
            CASE WHEN a.clock_in_result = 1 THEN '正常' WHEN a.clock_in_result = 2 THEN '迟到' WHEN a.clock_in_result = 3 THEN '缺卡' ELSE '' END as clockInResult,
            CASE WHEN a.clock_out_result = 1 THEN '正常' WHEN a.clock_out_result = 2 THEN '早退' WHEN a.clock_out_result = 3 THEN '缺卡' ELSE '' END as clockOutResult,
            a.clock_in_address as clockInLocation
        from xp_clock_in a
        left join xp_fleet_operations b on (a.app_user_id = b.operations_user_id)
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -592,8 +592,22 @@
        if (order.getStatus() == 1) {
            order.setStatus(0);
            Long userId = order.getAppUserId();
            order.setAppUserId(null);
            baseMapper.updateById(order);
            // 消息推送
            Map<String, Object> params = new HashMap<>();
            Map<String, Object> content = new HashMap<>();
            content.put("orderId", order.getId().toString());
            content.put("status", OrderStatusEnum.CANCELED.getCode());
            params.put("type", PushMessageTypeEnum.ORDER_STATUS.getDesc());
            params.put("content", com.alibaba.fastjson2.JSONObject.toJSONString(content));
            params.put("timestamp", new Date().getTime() + "");
            String message = JSONObject.toJSONString(params);
            SendMessageDTO sendMessageDTO = new SendMessageDTO();
            sendMessageDTO.setMessage(message);
            sendMessageDTO.setAppUserId(String.valueOf(userId));
            xpPushMessageClient.sendStatus(sendMessageDTO);
            return;
        }
        // 1. 更新订单状态为已取消(0)