puzhibing
2026-04-24 6bf04d03aa5376062bc9bb77030f533b3d1b9aa9
修改打卡规则
4个文件已添加
8个文件已修改
268 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCouponService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/CouponVo.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/UserCouponListVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpCruiseCheckInRuleService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/CruiseCheckInLocationVo.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRuleInfoVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/UserOrderInfoVo.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -10,6 +10,7 @@
import com.xiaopeng.account.model.vo.XpAppUserCouponTotalVo;
import com.xiaopeng.account.model.vo.XpAppUserCouponVo;
import com.xiaopeng.account.service.IXpAppUserCouponService;
import com.xiaopeng.account.vo.UserCouponListVo;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest;
import com.xiaopeng.api.dto.account.UseUserCouponDto;
@@ -326,4 +327,20 @@
        return R.ok(num);
    }
    /**
     * 获取优惠券切换页面列表
     * @param orderMoney
     * @param request
     * @return
     */
    @GetMapping("/api/v1/mini-program/getUserCouponList")
    @ApiOperation(value = "获取优惠券切换页面列表", tags = {"小程序-获取用户可用优惠券数量"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<UserCouponListVo> getUserCouponList(BigDecimal orderMoney, HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        UserCouponListVo userCouponList = xpAppUserCouponService.getUserCouponList(orderMoney, uid);
        return R.ok(userCouponList);
    }
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCouponService.java
@@ -7,6 +7,7 @@
import com.xiaopeng.account.model.vo.XpAppUserCouponListVo;
import com.xiaopeng.account.model.vo.XpAppUserCouponTotalVo;
import com.xiaopeng.account.model.vo.XpAppUserCouponVo;
import com.xiaopeng.account.vo.UserCouponListVo;
import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest;
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.query.account.XpAppUserCouponPageListQuery;
@@ -14,6 +15,7 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -80,4 +82,13 @@
    Integer getUserCouponNum(String uid);
    Boolean holding(Long couponId);
    /**
     * 获取可用优惠券
     * @param orderMoney
     * @param uid
     * @return
     */
    UserCouponListVo getUserCouponList(BigDecimal orderMoney, String uid);
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.account.mapper.XpAppUserCouponMapper;
@@ -14,6 +15,8 @@
import com.xiaopeng.account.model.vo.XpAppUserCouponVo;
import com.xiaopeng.account.service.IXpAppUserCouponService;
import com.xiaopeng.account.util.holiday.HolidayUtil;
import com.xiaopeng.account.vo.CouponVo;
import com.xiaopeng.account.vo.UserCouponListVo;
import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.enums.NavigationCouponBubbleType;
@@ -404,4 +407,40 @@
        return Math.min(orderAmount, m);
    }
    /**
     * 获取可用优惠券
     * @param orderMoney
     * @param uid
     * @return
     */
    @Override
    public UserCouponListVo getUserCouponList(BigDecimal orderMoney, String uid) {
        List<CouponVo> usableCouponList = new ArrayList<>();
        List<CouponVo> notUsableCouponList = new ArrayList<>();
        List<XpAppUserCoupon> list = this.list(new QueryWrapper<XpAppUserCoupon>().eq("app_user_id", uid).eq("status", 1).eq("is_deleted", 0));
        for (XpAppUserCoupon xpAppUserCoupon : list) {
            XpCoupon data = xpCouponClient.getCouponById(xpAppUserCoupon.getCouponId()).getData();
            if(null == data){
                continue;
            }
            CouponVo vo = new CouponVo();
            vo.setId(xpAppUserCoupon.getId());
            vo.setConditionalAmount(data.getConditionalAmount());
            vo.setAmount(data.getAmount());
            vo.setCouponType(data.getCouponType());
            vo.setCouponName(data.getCouponName());
            vo.setCouponDesc(data.getCouponDescription());
            vo.setEndTime(xpAppUserCoupon.getExpirationTime().toString());
            if(orderMoney.compareTo(data.getConditionalAmount()) >= 0){
                usableCouponList.add(vo);
            }else{
                notUsableCouponList.add(vo);
            }
        }
        UserCouponListVo userCouponListVo = new UserCouponListVo();
        userCouponListVo.setUsableCouponList(usableCouponList);
        userCouponListVo.setNotUsableCouponList(notUsableCouponList);
        return userCouponListVo;
    }
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/CouponVo.java
New file
@@ -0,0 +1,27 @@
package com.xiaopeng.account.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel
public class CouponVo {
    @ApiModelProperty("优惠券id")
    private Long id;
    @ApiModelProperty("条件金额")
    private BigDecimal conditionalAmount;
    @ApiModelProperty("优惠金额")
    private BigDecimal amount;
    @ApiModelProperty("类型 1=抵扣 2=满减 3=抹零")
    private Integer couponType;
    @ApiModelProperty("优惠券名称")
    private String couponName;
    @ApiModelProperty("优惠券描述")
    private String couponDesc;
    @ApiModelProperty("过期时间")
    private String endTime;
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/UserCouponListVo.java
New file
@@ -0,0 +1,17 @@
package com.xiaopeng.account.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class UserCouponListVo {
    @ApiModelProperty("可用优惠券列表")
    private List<CouponVo> usableCouponList;
    @ApiModelProperty("不可用优惠券列表")
    private List<CouponVo> notUsableCouponList;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java
@@ -18,11 +18,7 @@
import com.xiaopeng.maintenance.model.vo.RealTimePositionVo;
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRecordService;
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRuleService;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRuleListPage;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsQuery;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO;
import com.xiaopeng.maintenance.vo.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@@ -130,6 +126,16 @@
        return R.ok();
    }
    @ApiOperation(value = "获取打卡规则详情", tags = {"管理后台-巡游打卡规则管理"})
    @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/getXpCruiseCheckInRuleInfo/{id}")
    public R<XpCruiseCheckInRuleInfoVo> getXpCruiseCheckInRuleInfo(@PathVariable("id") Integer id){
        XpCruiseCheckInRuleInfoVo xpCruiseCheckInRuleInfo = xpCruiseCheckInRuleService.getXpCruiseCheckInRuleInfo(id);
        return R.ok(xpCruiseCheckInRuleInfo);
    }
    @ApiOperation(value = "查询巡游打卡记录列表", tags = {"管理后台-巡游打卡管理"})
    @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/pageList")
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpCruiseCheckInRuleService.java
@@ -10,6 +10,7 @@
import com.xiaopeng.maintenance.model.vo.AppXpCruiseCheckInRuleVo;
import com.xiaopeng.maintenance.model.vo.CheckInMessageVo;
import com.xiaopeng.maintenance.model.vo.RealTimePositionVo;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRuleInfoVo;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRuleListPage;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@@ -75,4 +76,11 @@
     * @param dto
     */
    void addXpCruiseCheckInRule(XpCruiseCheckInRuleDto dto);
    /**
     * 获取巡游打卡规则详情
     * @param id
     */
    XpCruiseCheckInRuleInfoVo getXpCruiseCheckInRuleInfo(Integer id);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -27,6 +27,8 @@
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRecordService;
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRuleLocationService;
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRuleService;
import com.xiaopeng.maintenance.vo.CruiseCheckInLocationVo;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRuleInfoVo;
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRuleListPage;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -64,6 +66,8 @@
    @Resource
    private XpCruiseCheckInRuleOperationsUserMapper xpCruiseCheckInRuleOperationsUserMapper;
    @Override
@@ -314,4 +318,29 @@
        xpCruiseCheckInRuleOperationsUser.setOperationsUserId(relationId);
        xpCruiseCheckInRuleOperationsUserMapper.insert(xpCruiseCheckInRuleOperationsUser);
    }
    /**
     * 获取打卡规则详情
     * @param id
     * @return
     */
    @Override
    public XpCruiseCheckInRuleInfoVo getXpCruiseCheckInRuleInfo(Integer id) {
        XpCruiseCheckInRuleInfoVo info = new XpCruiseCheckInRuleInfoVo();
        XpCruiseCheckInRule byId = this.getById(id);
        BeanUtils.copyProperties(byId, info);
        List<XpCruiseCheckInRuleLocation> list = xpCruiseCheckInRuleLocationService.list(new QueryWrapper<XpCruiseCheckInRuleLocation>().eq("cruise_check_in_rule_id", id));
        List<XpCheckLocation> xpCheckLocations = xpCheckLocationService.listByIds(list.stream().map(XpCruiseCheckInRuleLocation::getCheckLocationId).collect(Collectors.toList()));
        List<CruiseCheckInLocationVo> collect = list.stream().map(locationList -> {
            CruiseCheckInLocationVo vo = new CruiseCheckInLocationVo();
            vo.setAddress(xpCheckLocations.stream().filter(xpCheckLocation -> xpCheckLocation.getId().equals(locationList.getCheckLocationId())).findFirst().get().getLocationAddress());
            vo.setCheckRange(xpCheckLocations.stream().filter(xpCheckLocation -> xpCheckLocation.getId().equals(locationList.getCheckLocationId())).findFirst().get().getLocationRange());
            vo.setCheckTime(StringUtils.isNotEmpty(locationList.getStartTime()) ? locationList.getStartTime() + "~" + locationList.getEndTime() : "不限");
            return vo;
        }).collect(Collectors.toList());
        info.setLocationList(collect);
        return info;
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/CruiseCheckInLocationVo.java
New file
@@ -0,0 +1,18 @@
package com.xiaopeng.maintenance.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel
public class CruiseCheckInLocationVo {
    @ApiModelProperty("点位名称")
    private String address;
    @ApiModelProperty("打卡范围")
    private BigDecimal checkRange;
    @ApiModelProperty("打卡限时")
    private String checkTime;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRuleInfoVo.java
New file
@@ -0,0 +1,17 @@
package com.xiaopeng.maintenance.vo;
import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class XpCruiseCheckInRuleInfoVo extends XpCruiseCheckInRule {
    @ApiModelProperty("巡游打卡点位列表")
    private List<CruiseCheckInLocationVo> locationList;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java
@@ -286,8 +286,15 @@
    }
//    public R<UserOrderInfoVo> getOrderInfo(@PathVariable Long orderId){
//
//    }
    /**
     * 13. 根据订单号查询订单日志
     * @param orderId
     * @return
     */
    @GetMapping("/getOrderInfo/{orderId}")
    @ApiOperation(value = "根据订单号查询订单日志", notes = "客服系统对接")
    @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long", paramType = "path")
    public R<UserOrderInfoVo> getOrderInfo(@PathVariable Long orderId){
        return R.ok(new UserOrderInfoVo());
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/UserOrderInfoVo.java
@@ -4,36 +4,54 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel
public class UserOrderInfoVo {
    @ApiModelProperty("订单id")
    private Long orderId;
    @ApiModelProperty("用户下单时间")
    @ApiModelProperty("用户下单时间 yyyy-MM-dd HH:mm:ss")
    private String orderCreatedAt;
    @ApiModelProperty("开始拨单时间")
    @ApiModelProperty("开始拨单时间 yyyy-MM-dd HH:mm:ss")
    private String dispatchStartAt;
    @ApiModelProperty("拨单成功时间")
    @ApiModelProperty("拨单成功时间 yyyy-MM-dd HH:mm:ss")
    private String dispatchSuccessAt;
    @ApiModelProperty("车辆到达上车点时间")
    @ApiModelProperty("车辆到达上车点时间 yyyy-MM-dd HH:mm:ss")
    private String vehicleArrivedAt;
    @ApiModelProperty("免费等待超时时间")
    @ApiModelProperty("免费等待超时时间 yyyy-MM-dd HH:mm:ss")
    private String freeWaitExpiredAt;
    @ApiModelProperty("车辆解锁时间")
    @ApiModelProperty("车辆解锁时间 yyyy-MM-dd HH:mm:ss")
    private String vehicleUnlockedAt;
    @ApiModelProperty("上车开门时间")
    private String doorOpenedAt;
    @ApiModelProperty("上车关门时间")
    private String doorClosedAt;
    @ApiModelProperty("出发时间")
    @ApiModelProperty("上车开门时间 yyyy-MM-dd HH:mm:ss")
    private List<String> doorOpenedAt;
    @ApiModelProperty("上车关门时间 yyyy-MM-dd HH:mm:ss")
    private List<String> doorClosedAt;
    @ApiModelProperty("出发时间 yyyy-MM-dd HH:mm:ss")
    private String tripConfirmedAt;
    @ApiModelProperty("安全带解开时间")
    private String safetybeltUnlockedAt;
    @ApiModelProperty("到达目的地时间")
    @ApiModelProperty("安全带解开时间 yyyy-MM-dd HH:mm:ss")
    private List<String> safetybeltUnlockedAt;
    @ApiModelProperty("到达目的地时间 yyyy-MM-dd HH:mm:ss")
    private String arrivedDestinationAt;
    @ApiModelProperty("下车开门时间")
    private String dropoffDoorOpenedAt;
    @ApiModelProperty("下车开后备箱时间")
    private String dropoffTrunkOpenedAt;
    @ApiModelProperty("下车开门时间 yyyy-MM-dd HH:mm:ss")
    private List<String> dropoffDoorOpenedAt;
    @ApiModelProperty("下车开后备箱时间 yyyy-MM-dd HH:mm:ss")
    private List<String> dropoffTrunkOpenedAt;
    @ApiModelProperty("下车关门时间 yyyy-MM-dd HH:mm:ss")
    private List<String> dropoffDoorClosedAt;
    @ApiModelProperty("行程结束时间 yyyy-MM-dd HH:mm:ss")
    private String tripEndedAt;
    @ApiModelProperty("支付完成时间 yyyy-MM-dd HH:mm:ss")
    private String paymentCompletedAt;
    @ApiModelProperty("用户评价时间 yyyy-MM-dd HH:mm:ss")
    private String userRatedAt;
    @ApiModelProperty("订单取消时间 yyyy-MM-dd HH:mm:ss")
    private String orderCancelledAt;
    @ApiModelProperty("取消原因类型(用户取消/系统取消/超时取消)")
    private String cancelReasonType;
    @ApiModelProperty("安全告警触发时间 yyyy-MM-dd HH:mm:ss")
    private String safetyAlertTriggeredAt;
    @ApiModelProperty("远程云代驾接管时间 yyyy-MM-dd HH:mm:ss")
    private String remoteTakeoverAt;
}