xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java
New file @@ -0,0 +1,74 @@ 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 java.time.LocalDateTime; /** * <p> * 活动策略配置 * </p> * * @author mitao * @since 2026-04-20 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("xp_acticity_strategy") @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; @ApiModelProperty(value = "活动id") private Integer actitcityId; @ApiModelProperty(value = "策略名称") private String name; @ApiModelProperty(value = "发放规则(1=每日循环发放,2=仅发放一次,3=使用后发放)") private Integer distributionRules; @ApiModelProperty(value = "使用后发放规则json") private String distributionRulesAfterUse; @ApiModelProperty(value = "生效规则(1=次日0点失效,2=指定有效天数,3=指定日期失效)") private Integer effectiveRules; @ApiModelProperty(value = "有效天数") private Integer effectiveDays; @ApiModelProperty(value = "有效结束时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime endTime; @ApiModelProperty(value = "是否叠加使用(0=否,1=是)") private Integer stackedUsage; @ApiModelProperty(value = "使用时段json") private String usagePeriod; @ApiModelProperty(value = "每人限领数量") private Integer limitNumber; @ApiModelProperty(value = "发放总数") private Integer distributionsTotal; @ApiModelProperty(value = "是否自动使用(0=不开启,1=冒泡发单时自动使用)") private Integer startUsing; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityUser.java
New file @@ -0,0 +1,46 @@ 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.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; /** * <p> * 活动发放用户 * </p> * * @author mitao * @since 2026-04-20 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("xp_acticity_user") @ApiModel(value="XpActicityUser对象", description="活动发放用户") public class XpActicityUser extends BaseModel { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "活动id") private Integer actitcityId; @ApiModelProperty(value = "策略id") private Integer actitcityStrategeId; @ApiModelProperty(value = "用户类型(1=全部用户,2=老用户,3=新用户,4=流失用户,5=指定用户)") private Integer userType; @ApiModelProperty(value = "指定用户json数组") private String userList; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivity.java
@@ -36,6 +36,9 @@ @ApiModelProperty(value = "活动名称") private String acticityName; @ApiModelProperty(value = "活动类型 如新人活动、媒体邀约活动、日常提频等") private Integer activityType; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime startTime; @@ -62,4 +65,7 @@ @ApiModelProperty(value = "图片") private String img; @ApiModelProperty(value = "富文本内容") private String richText; } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -2,6 +2,7 @@ import com.xiaopeng.api.model.operation.XpActivity; import com.xiaopeng.api.model.operation.XpCoupon; import com.xiaopeng.api.query.operation.XpActivityPageListQuery; import com.xiaopeng.api.vo.operation.XpActivityVo; import com.xiaopeng.common.core.constant.CacheConstants; @@ -15,6 +16,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; 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; @@ -83,10 +85,37 @@ @PostMapping("/v1/api/appUserCoupon/pageList") @ApiOperation(value = "活动列表",tags = {"管理后台-活动列表"},response = XpActivity.class) @ApiOperation(value = "活动列表",tags = {"管理后台-活动管理"},response = XpActivity.class) public R<PageInfo<XpActivity>> pageList(@RequestBody XpActivityPageListQuery query) { PageInfo<XpActivity> pageList = service.pageList(query); return R.ok(pageList); } @PostMapping("/v1/api/xp-coupon/add") @ApiOperation(value = "添加活动",tags = {"管理后台-活动管理"},response = XpCoupon.class) public R<?> add(@RequestBody XpActivity xpActivity){ service.save(xpActivity); return R.ok(); } @PostMapping("/v1/api/xp-coupon/update") @ApiOperation(value = "修改活动",tags = {"管理后台-活动管理"},response = XpCoupon.class) public R<XpActivity> updateById(@RequestBody XpActivity xpActivity){ service.updateById(xpActivity); return R.ok(); } @GetMapping("/v1/api/xp-coupon/update") @ApiOperation(value = "活动详情",tags = {"管理后台-活动管理"},response = XpCoupon.class) public R<XpActivity> queryById(@RequestBody XpActivity xpActivity){ return R.ok(service.getById(xpActivity)); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityStrategyController.java
New file @@ -0,0 +1,74 @@ package com.xiaopeng.operation.controller; NEW_FILE_CODE package com.xiaopeng.operation.controller; import com.xiaopeng.api.model.operation.XpActicityStrategy; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.service.IXpActicityStrategyService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> * 活动策略配置 前端控制器 * </p> * * @author mitao * @since 2026-04-20 */ @Api(tags = "活动策略配置管理") @RequiredArgsConstructor(onConstructor_ = @Lazy) @RestController @RequestMapping("/v1/api/acticity-strategy") public class XpActicityStrategyController { @Resource private IXpActicityStrategyService service; @PostMapping("/listByActivityId") @ApiOperation(value = "根据活动ID查询策略列表", tags = {"管理后台-活动策略配置管理"}) public R<List<XpActicityStrategy>> listByActivityId(@RequestParam Integer activityId) { LambdaQueryWrapper<XpActicityStrategy> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(XpActicityStrategy::getActitcityId, activityId); queryWrapper.orderByDesc(XpActicityStrategy::getCreateTime); List<XpActicityStrategy> list = service.list(queryWrapper); return R.ok(list); } @GetMapping("/{id}") @ApiOperation(value = "活动策略详情", tags = {"管理后台-活动策略配置管理"}) public R<XpActicityStrategy> queryById(@PathVariable Integer id) { XpActicityStrategy strategy = service.getById(id); return R.ok(strategy); } @PostMapping("/add") @ApiOperation(value = "新增活动策略", tags = {"管理后台-活动策略配置管理"}) public R<?> add(@RequestBody List<XpActicityStrategy> xpActicityStrategies) { service.saveBatch(xpActicityStrategies); return R.ok(); } @PostMapping("/update") @ApiOperation(value = "修改活动策略", tags = {"管理后台-活动策略配置管理"}) public R<?> updateById(@RequestBody XpActicityStrategy xpActicityStrategy) { service.updateById(xpActicityStrategy); return R.ok(); } @DeleteMapping("/{id}") @ApiOperation(value = "删除活动策略", tags = {"管理后台-活动策略配置管理"}) public R<?> deleteById(@PathVariable Integer id) { service.removeById(id); return R.ok(); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityUserController.java
New file @@ -0,0 +1,78 @@ package com.xiaopeng.operation.controller; import com.xiaopeng.api.model.operation.XpActicityUser; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.operation.service.IXpActicityUserService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> * 活动发放用户 前端控制器 * </p> * * @author mitao * @since 2026-04-20 */ @Api(tags = "活动发放用户管理") @RequiredArgsConstructor(onConstructor_ = @Lazy) @RestController @RequestMapping("/v1/api/acticity-user") public class XpActicityUserController { @Resource private IXpActicityUserService service; @GetMapping("/{id}") @ApiOperation(value = "活动发放用户详情", tags = {"管理后台-活动发放用户管理"}) public R<XpActicityUser> queryById(@PathVariable Integer id) { XpActicityUser user = service.getById(id); return R.ok(user); } @GetMapping("/listByActicityId/{actitcityId}") @ApiOperation(value = "根据活动ID获取用户配置", tags = {"管理后台-活动发放用户管理"}) public R<List<XpActicityUser>> listByActicityId(@PathVariable Integer actitcityId) { LambdaQueryWrapper<XpActicityUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(XpActicityUser::getActitcityId, actitcityId); List<XpActicityUser> list = service.list(queryWrapper); return R.ok(list); } @PostMapping("/add") @ApiOperation(value = "批量新增活动发放用户", tags = {"管理后台-活动发放用户管理"}) public R<List<XpActicityUser>> add(@RequestBody List<XpActicityUser> xpActicityUsers) { service.saveBatch(xpActicityUsers); return R.ok(xpActicityUsers); } @PostMapping("/update") @ApiOperation(value = "修改活动发放用户", tags = {"管理后台-活动发放用户管理"}) public R<?> updateById(@RequestBody XpActicityUser xpActicityUser) { service.updateById(xpActicityUser); return R.ok(); } @DeleteMapping("/{id}") @ApiOperation(value = "删除活动发放用户", tags = {"管理后台-活动发放用户管理"}) public R<?> deleteById(@PathVariable Integer id) { service.removeById(id); return R.ok(); } @DeleteMapping("/deleteByActicityId/{actitcityId}") @ApiOperation(value = "根据活动ID删除用户配置", tags = {"管理后台-活动发放用户管理"}) public R<?> deleteByActicityId(@PathVariable Integer actitcityId) { LambdaQueryWrapper<XpActicityUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(XpActicityUser::getActitcityId, actitcityId); service.remove(queryWrapper); return R.ok(); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpActicityStrategyMapper.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.XpActicityStrategy; /** * <p> * 活动策略配置 Mapper 接口 * </p> * * @author mitao * @since 2026-04-20 */ public interface XpActicityStrategyMapper extends BaseMapper<XpActicityStrategy> { } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpActicityUserMapper.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.XpActicityUser; /** * <p> * 活动发放用户 Mapper 接口 * </p> * * @author mitao * @since 2026-04-20 */ public interface XpActicityUserMapper extends BaseMapper<XpActicityUser> { } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityStrategyService.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.XpActicityStrategy; /** * <p> * 活动策略配置 服务类 * </p> * * @author mitao * @since 2026-04-20 */ public interface IXpActicityStrategyService extends IService<XpActicityStrategy> { } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityUserService.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.XpActicityUser; /** * <p> * 活动发放用户 服务类 * </p> * * @author mitao * @since 2026-04-20 */ public interface IXpActicityUserService extends IService<XpActicityUser> { } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityStrategyServiceImpl.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.XpActicityStrategy; import com.xiaopeng.operation.mapper.XpActicityStrategyMapper; import com.xiaopeng.operation.service.IXpActicityStrategyService; import org.springframework.stereotype.Service; /** * <p> * 活动策略配置 服务实现类 * </p> * * @author mitao * @since 2026-04-20 */ @Service public class XpActicityStrategyServiceImpl extends ServiceImpl<XpActicityStrategyMapper, XpActicityStrategy> implements IXpActicityStrategyService { } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityUserServiceImpl.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.XpActicityUser; import com.xiaopeng.operation.mapper.XpActicityUserMapper; import com.xiaopeng.operation.service.IXpActicityUserService; import org.springframework.stereotype.Service; /** * <p> * 活动发放用户 服务实现类 * </p> * * @author mitao * @since 2026-04-20 */ @Service public class XpActicityUserServiceImpl extends ServiceImpl<XpActicityUserMapper, XpActicityUser> implements IXpActicityUserService { } xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpActicityMapper.xml
@@ -6,26 +6,17 @@ <select id="pageList" resultType="com.xiaopeng.api.model.operation.XpActivity"> select a.* from xp_acticity as a where a.is_deleted = 0 and a.app_user_id = #{appUserId} <if test="query.createTimeStart != null "> a.create_time >= #{query.createTimeStart} </if> <if test="query.createTimeEnd != null "> a.create_time <= #{query.createTimeEnd} where a.is_deleted = 0 <if test="query.acticity_name != null "> a.acticity_name >= #{acticityName} </if> <if test="query.status != null"> and a.status = #{query.status} </if> <if test="query.couponType != null"> and a.coupon_type = #{query.couponType} <if test="query.activity_type != null"> and a.activity_type = #{query.activityType} </if> <if test="query.acticityIds != null"> and a.activity_id in <foreach item="item" collection="query.acticityIds" separator="," open="(" close=")" index=""> #{item} </foreach> </if> order by a.create_time desc order by a.update_time desc </select> </mapper> xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpActicityStrategyMapper.xml
New file @@ -0,0 +1,5 @@ <?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.XpActicityStrategyMapper"> </mapper> xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpActicityUserMapper.xml
New file @@ -0,0 +1,5 @@ <?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.XpActicityUserMapper"> </mapper>