puzhibing
2026-04-24 bb671486066976fa67477ed71d1d424a6ee4e012
Merge remote-tracking branch 'origin/1.0' into 1.0
5个文件已添加
10个文件已修改
219 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/XpActivityDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/XpAppUserCoupon.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivity.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivityNotice.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/XpActivityVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpActivityNoticeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActivityNoticeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActivityNoticeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpActivityNoticeMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -418,7 +418,7 @@
    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));
        List<XpAppUserCoupon> list = this.list(new QueryWrapper<XpAppUserCoupon>().eq("app_user_id", Long.valueOf(uid)).eq("status", 1).eq("is_deleted", 0));
        for (XpAppUserCoupon xpAppUserCoupon : list) {
            XpCoupon data = xpCouponClient.getCouponById(xpAppUserCoupon.getCouponId()).getData();
            if(null == data){
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java
@@ -6,6 +6,8 @@
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
import org.springframework.data.mongodb.core.mapping.Document;
@@ -18,6 +20,10 @@
@Data
@ApiModel("运维人员状态")
@Document(collection = "xp_operations_user_position")
@CompoundIndexes({
        @CompoundIndex(name = "idx_status", def = "{'status': 1}"),
        @CompoundIndex(name = "idx_location", def = "{'location': '2dsphere'}")
})
public class XpOperationsUserPositionDTO {
    @ApiModelProperty(value = "运维人员id")
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/XpActivityDto.java
@@ -3,12 +3,14 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.api.model.operation.XpActicityStrategy;
import com.xiaopeng.api.model.operation.XpActicityUser;
import com.xiaopeng.api.model.operation.XpActivityNotice;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@@ -26,6 +28,12 @@
    @ApiModelProperty(value = "活动类型 如新人活动、媒体邀约活动、日常提频等")
    private Integer activityType;
    @ApiModelProperty(value = "是否开启活动总限额")
    private boolean enableTotalLimit;
    @ApiModelProperty(value = "是否开启活动总限额")
    private BigDecimal totalLimit;
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -59,4 +67,7 @@
    @ApiModelProperty(value = "发放用户")
    List<XpActicityUser> activityUser;
    @ApiModelProperty(value = "活动通知")
    XpActivityNotice notice;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/XpAppUserCoupon.java
@@ -46,11 +46,13 @@
    @ApiModelProperty(value = "抹零后金额,对应couponType=3")
    @Min(0)@Max(9999)
    @TableField(exist = false)
    private BigDecimal money3;
    @ApiModelProperty(value = "折扣,对应couponType=2")
    @DecimalMin(value = "0.1", inclusive = true)
    @DecimalMax(value = "10", inclusive = true)
    @TableField(exist = false)
    private BigDecimal money2;
    @ApiModelProperty(value = "过期时间")
@@ -73,6 +75,7 @@
    @ApiModelProperty(value = "手机号")
    @TableField(exist = false)
    private String phone;
    @ApiModelProperty(value = "优惠券发放id")
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
@@ -112,7 +112,7 @@
    public Reject reject(String msg) {
        Reject reject = new Reject();
        reject.setRejectTime(LocalDateTime.now());
        reject.setRejectTime(LocalDateTime.now().toString());
        reject.setRejectUserId(handleUserId);
        reject.setRejectReason(msg);
        return reject;
@@ -125,7 +125,7 @@
        @ApiModelProperty(value = "拒绝时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private LocalDateTime rejectTime;
        private String rejectTime;
        @ApiModelProperty(value = "拒绝人id")
        private String rejectUserId;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java
@@ -12,6 +12,7 @@
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
@@ -28,8 +29,6 @@
@ApiModel(value="XpActicityStrategy对象", description="活动策略配置")
public class XpActicityStrategy extends BaseModel {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
@@ -43,8 +42,9 @@
    @ApiModelProperty(value = "发放规则(1=每日循环发放,2=仅发放一次,3=使用后发放)")
    private Integer distributionRules;
    @ApiModelProperty(value = "使用后发放规则json")
    private String distributionRulesAfterUse;
    @ApiModelProperty(value = "发放时间点")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime distributionTime;
    @ApiModelProperty(value = "生效规则(1=次日0点失效,2=指定有效天数,3=指定日期失效)")
    private Integer effectiveRules;
@@ -59,8 +59,14 @@
    @ApiModelProperty(value = "是否叠加使用(0=否,1=是)")
    private Integer stackedUsage;
    @ApiModelProperty(value = "使用时段json")
    private String usagePeriod;
    @ApiModelProperty(value = "叠加使用,不可超出总金额的百分比")
    private Integer repPercent;
    @ApiModelProperty(value = "优惠券类型")
    private Integer CouponTypeId;
    @ApiModelProperty(value = "使用时间段,时间字符串,开始和结束用,分割拼接成一个字符串,如果只有结束时间还是需要保持逗号,如:[',2007-05-03 05:00:00']")
    private List<String> usagePeriod;
    @ApiModelProperty(value = "每人限领数量")
    private Integer limitNumber;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivity.java
@@ -12,6 +12,7 @@
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@@ -38,6 +39,12 @@
    @ApiModelProperty(value = "活动类型 如新人活动、媒体邀约活动、日常提频等")
    private Integer activityType;
    @ApiModelProperty(value = "是否开启活动总限额")
    private boolean enableTotalLimit;
    @ApiModelProperty(value = "是否开启活动总限额")
    private BigDecimal totalLimit;
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivityNotice.java
New file
@@ -0,0 +1,82 @@
package com.xiaopeng.api.model.operation;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.common.core.web.domain.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
 * 活动管理
 * </p>
 *
 * @author mitao
 * @since 2026-02-03
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("xp_activity_notice")
@ApiModel(value="XpActicity对象", description="活动管理")
public class XpActivityNotice extends BaseModel {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value = "通知方式,微信=1,短信=2,小程序=4,多选,设置选项的和")
    private Integer noticeType;
    @ApiModelProperty(value = "活动id")
    private Long activityId;
    @ApiModelProperty(value = "触达时机,券到账=1,即将过期=2,活动开始=4,多选,设置选项的和")
    private Integer wechatTriggerTiming;
    @ApiModelProperty(value = "触达时机,券到账=1,即将过期=2,活动开始=4,多选,设置选项的和")
    private Integer smsTriggerTiming;
    @ApiModelProperty(value = "触达时机,券到账=1,即将过期=2,活动开始=4,多选,设置选项的和")
    private Integer miniProgramTriggerTiming;
    @ApiModelProperty(value = "wx临近到期天数")
    private Integer wechatDaysBeforeExpiry;
    @ApiModelProperty(value = "wx临近生效分钟数")
    private Integer wechatMinutesBeforeEffective;
    @ApiModelProperty(value = "sms临近到期天数")
    private Integer smsDaysBeforeExpiry;
    @ApiModelProperty(value = "sms临近生效分钟数")
    private Integer smsMinutesBeforeEffective;
    @ApiModelProperty(value = "miniProgram临近到期天数")
    private Integer miniProgramDaysBeforeExpiry;
    @ApiModelProperty(value = "miniProgram临近生效分钟数")
    private Integer miniProgramBeforeEffective;
    @ApiModelProperty(value = "屏蔽时间段,时间字符串,开始和结束用,分割拼接成一个字符串,如果只有结束时间还是需要保持逗号,如:[',2007-05-03 05:00:00']")
    private List<String> blockTime;
    @ApiModelProperty(value = "miniProgram临近到期toast")
    private Integer toastBeforeExpiry;
    @ApiModelProperty(value = "miniProgram临近生效toast")
    private Integer toastBeforeEffective;
    @ApiModelProperty(value = "是否开启浮窗")
    private Boolean enableFloatingWindow;
    @ApiModelProperty(value = "浮窗优先级权重1-100")
    @Min(1)
    @Max(100)
    private Integer floatingWindowPriority;
    @ApiModelProperty(value = "跳转链接")
    private Boolean linkUrl;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/XpActivityVo.java
@@ -2,8 +2,8 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.api.model.operation.XpActicityCoupon;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,6 +12,7 @@
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
@@ -60,4 +61,7 @@
    @ApiModelProperty(value = "是否第一次 1=是 0=否")
    private Boolean isFirst;
    @ApiModelProperty(value = "优惠券")
    private List<XpActicityCoupon> coupons;
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -2,6 +2,7 @@
import com.xiaopeng.api.dto.operation.XpActivityDto;
import com.xiaopeng.api.model.operation.XpActicityCoupon;
import com.xiaopeng.api.model.operation.XpActivity;
import com.xiaopeng.api.model.operation.XpCoupon;
import com.xiaopeng.api.query.operation.XpActivityPageListQuery;
@@ -10,6 +11,7 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.utils.bean.BeanUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.operation.service.IXpActicityCouponService;
import com.xiaopeng.operation.service.IXpActicityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -67,23 +69,26 @@
     * @return 活动信息,id 和 img
     */
    @PostMapping("/logan/inner/acticity/firstEnter")
    @ApiOperation(value = "获取活动信息ids", tags = {"管理后台-活动首次进入情况"})
    public R<XpActivity> firstEnter(HttpServletRequest request){
    @ApiOperation(value = "获取是否第一次推送活动", tags = {"管理后台-活动首次进入情况"})
    public R<XpActivityVo> firstEnter(HttpServletRequest request){
        String uid = request.getHeader("XP-Uid");
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        XpActivity activity = service.activiting();
        List<XpActicityCoupon> cps = couponService.lambdaQuery().eq(XpActicityCoupon::getActivityId, activity.getId()).list();
        XpActivityVo ret = new XpActivityVo();
        if (activity !=null) {
            BeanUtils.copyBeanProp(ret, activity);
            Duration duration = Duration.between(LocalDateTime.now(), activity.getEndTime());
            Boolean isFirst = ops.setIfAbsent(CacheConstants.firstEnterActivity(String.valueOf(activity.getId()), uid),"1", duration);
            ret.setIsFirst(isFirst);
            ret.setCoupons(cps);
        }
        return R.ok(activity);
        return R.ok(ret);
    }
    IXpActicityCouponService couponService;
    @PostMapping("/v1/api/appUserCoupon/pageList")
    @ApiOperation(value = "活动列表",tags = {"管理后台-活动管理"},response = XpActivity.class)
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpActivityNoticeMapper.java
New file
@@ -0,0 +1,16 @@
package com.xiaopeng.operation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaopeng.api.model.operation.XpActivityNotice;
/**
 * <p>
 * 活动通知配置 Mapper 接口
 * </p>
 *
 * @author mitao
 * @since 2026-02-03
 */
public interface XpActivityNoticeMapper extends BaseMapper<XpActivityNotice> {
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActivityNoticeService.java
New file
@@ -0,0 +1,16 @@
package com.xiaopeng.operation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.api.model.operation.XpActivityNotice;
/**
 * <p>
 * 活动通知配置 服务类
 * </p>
 *
 * @author mitao
 * @since 2026-02-03
 */
public interface IXpActivityNoticeService extends IService<XpActivityNotice> {
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
@@ -5,6 +5,7 @@
import com.xiaopeng.api.model.operation.XpActicityStrategy;
import com.xiaopeng.api.model.operation.XpActicityUser;
import com.xiaopeng.api.model.operation.XpActivity;
import com.xiaopeng.api.model.operation.XpActivityNotice;
import com.xiaopeng.api.query.operation.XpActivityPageListQuery;
import com.xiaopeng.common.core.utils.bean.BeanUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
@@ -13,6 +14,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.operation.service.IXpActicityStrategyService;
import com.xiaopeng.operation.service.IXpActicityUserService;
import com.xiaopeng.operation.service.IXpActivityNoticeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +42,9 @@
    @Resource
    private IXpActicityUserService userService;
    @Resource
    private IXpActivityNoticeService activityNotice;
    @Override
    public PageInfo<XpActivity> pageList(XpActivityPageListQuery query) {
@@ -80,9 +85,9 @@
        List<XpActicityStrategy> strategy = dto.getStrategy();
        List<XpActicityUser> activityUser = dto.getActivityUser();
        XpActivityNotice notice = dto.getNotice();
        strategy.forEach(e -> e.setActitcityId(activity.getId().intValue()));
        strategyService.saveBatch(strategy);
        Map<String, XpActicityStrategy> strategyMap = strategy.stream().collect(Collectors.toMap(
                XpActicityStrategy::getName,
                Function.identity()
@@ -91,7 +96,9 @@
            item.setActitcityId(activity.getId().intValue());
            item.setActitcityStrategeId(strategyMap.get(item.getStrategyName()).getId());
        });
        notice.setActivityId(activity.getId());
        userService.saveBatch(activityUser);
        activityNotice.save(notice);
    }
    @Override
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActivityNoticeServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.xiaopeng.operation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.model.operation.XpActivityNotice;
import com.xiaopeng.operation.mapper.XpActivityNoticeMapper;
import com.xiaopeng.operation.service.IXpActivityNoticeService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 活动通知配置 服务实现类
 * </p>
 *
 * @author mitao
 * @since 2026-02-03
 */
@Service
public class XpActivityNoticeServiceImpl extends ServiceImpl<XpActivityNoticeMapper, XpActivityNotice> implements IXpActivityNoticeService {
}
xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpActivityNoticeMapper.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaopeng.operation.mapper.XpActivityNoticeMapper">
</mapper>