liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -2,19 +2,27 @@
import com.xiaopeng.api.dto.operation.XpActivityDto;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.model.operation.XpActicityCoupon;
import com.xiaopeng.api.model.operation.XpActicityStrategy;
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.api.vo.account.CouponVo;
import com.xiaopeng.common.core.constant.CacheConstants;
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.common.log.annotation.AdminOperationLog;
import com.xiaopeng.common.log.enums.AdminBusinessType;
import com.xiaopeng.common.log.enums.AdminOperationType;
import com.xiaopeng.operation.service.*;
import com.xiaopeng.operation.service.IXpActicityCouponService;
import com.xiaopeng.operation.service.IXpActicityService;
import com.xiaopeng.operation.service.IXpActicityStrategyService;
import com.xiaopeng.operation.service.IXpCouponService;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -28,7 +36,10 @@
import javax.servlet.http.HttpServletRequest;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * <p>
@@ -54,14 +65,22 @@
    @Resource
    private IXpActicityStrategyService xpActicityStrategyService;
    @Resource
    private IXpCouponService xpCouponService;
    @Resource
    private XpAppUserCouponClient appUserCouponClient;
    /**
     * 获取所有白名单手机号
     *
     * @return
     */
    @PostMapping("/logan/inner/acticity/findListToIds")
    @ApiOperation(value = "获取活动信息ids", tags = {"管理后台-获取活动信息ids"})
    public R<List<String>> findListToIds(@RequestParam String acticityName){
        if(acticityName == null){
    public R<List<String>> findListToIds(@RequestParam String acticityName) {
        if (acticityName == null) {
            return R.ok();
        }
        return R.ok(service.findListToIds(acticityName));
@@ -74,52 +93,112 @@
    /**
     * 是否第一次进入某活动
     *
     * @return 活动信息,id 和 img
     */
    @GetMapping("/api/v1/mini-program/acticity/firstEnter")
    @ApiOperation(value = "获取是否第一次推送活动", tags = {"管理后台-活动首次进入情况"})
    public R<XpActivityVo> firstEnter(HttpServletRequest request){
    @ApiOperation(value = "获取是否第一次推送活动", tags = {"小程序-首页活动"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<XpActivity> 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);
        List<XpActivity> activityList = service.activiting(Long.valueOf(uid));
        for (XpActivity activity : activityList) {
            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(ret);
            Boolean isFirst = ops.setIfAbsent(CacheConstants.firstEnterActivity(String.valueOf(activity.getId()), uid), "1", duration);
            if(isFirst){
                List<XpAppUserCoupon> couponList = appUserCouponClient.getXpAppUserCoupon(activity.getId()).getData();
                Set<Long> longSet = couponList.stream().map(XpAppUserCoupon::getCouponId).collect(Collectors.toSet());
                if (longSet.isEmpty()) {
                    return R.ok();
                }
                List<XpCoupon> xpCoupons1 = xpCouponService.listByIds(longSet);
                List<CouponVo> couponVos = new ArrayList<>();
                for (XpCoupon xpCoupon : xpCoupons1) {
                    XpAppUserCoupon xpAppUserCoupon = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).findFirst().get();
                    CouponVo vo = new CouponVo();
                    vo.setId(xpCoupon.getId());
                    vo.setConditionalAmount(xpCoupon.getConditionalAmount());
                    vo.setAmount(xpCoupon.getAmount());
                    vo.setCouponType(xpCoupon.getCouponType());
                    vo.setCouponName(xpCoupon.getCouponName());
                    vo.setCouponDesc(xpCoupon.getCouponDescription());
                    vo.setEndTime(xpAppUserCoupon.getExpirationTime().toString());
                    long count = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).count();
                    vo.setQuantity(count);
                    couponVos.add(vo);
                }
                activity.setIsFirst(isFirst);
                activity.setCoupons(couponVos);
                return R.ok(activity);
            }
        }
        return R.ok();
    }
    IXpActicityCouponService couponService;
    /**
     * 是否第一次进入某活动
     *
     * @return 活动信息,id 和 img
     */
    @GetMapping("/api/v1/mini-program/acticity/getFloatActicity")
    @ApiOperation(value = "获取首页活动悬浮图标数据", tags = {"小程序-首页活动"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<XpActivity> getFloatActicity(HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        XpActivity activity = service.getFloatActicity(Long.valueOf(uid));
        return R.ok(activity);
    }
    @Resource
    IXpActicityStrategyService strategyService;
    @Resource
    IXpActicityUserService userService;
    @Resource
    IXpActivityNoticeService noticeService;
    @PostMapping("/v1/api/appUserCoupon/pageList")
    @ApiOperation(value = "活动列表",tags = {"管理后台-活动管理"},response = XpActivity.class)
    public R<PageInfo<XpActivity>> pageList(@RequestBody XpActivityPageListQuery query) {
        PageInfo<XpActivity> pageList = service.pageList(query);
    @ApiOperation(value = "活动列表", tags = {"管理后台-活动管理"}, response = XpActivity.class)
    public R<PageInfo<XpActivityDto>> pageList(@RequestBody XpActivityPageListQuery query) {
        PageInfo<XpActivityDto> pageList = service.pageList(query);
        for (XpActivityDto dto : pageList.getRecords()) {
            List<XpActicityStrategy> strategies = strategyService.lambdaQuery().eq(XpActicityStrategy::getActitcityId, dto.getId()).list();
            dto.setStrategy(strategies);
            dto.setActivityUser(userService.lambdaQuery().eq(XpActicityUser::getActitcityId, dto.getId()).list());
        }
        return R.ok(pageList);
    }
    @PostMapping("/v1/api/appUserCoupon/add")
    @ApiOperation(value = "添加活动",tags = {"管理后台-活动管理"},response = XpCoupon.class)
    public R<?> add(@RequestBody XpActivityDto dto){
    @ApiOperation(value = "添加活动", tags = {"管理后台-活动管理"}, response = XpCoupon.class)
    @AdminOperationLog(
            businessType = AdminBusinessType.ACTIVITY_MANAGEMENT,
            operationType = AdminOperationType.ADD,
            content = "添加活动",
            appendRequestData = true
    )
    public R<?> add(@RequestBody XpActivityDto dto) {
        service.save(dto);
        return R.ok();
    }
    @PostMapping("/v1/api/appUserCoupon/{op}")
    @ApiOperation(value = "修改活动状态,release,pause,resume,stop,del",tags = {"管理后台-活动管理"},response = XpCoupon.class)
    public R<XpActivity> updateById(@PathVariable String op,@RequestParam Long id){
    @ApiOperation(value = "修改活动状态,release,pause,resume,stop,del", tags = {"管理后台-活动管理"}, response = XpCoupon.class)
    @AdminOperationLog(
            businessType = AdminBusinessType.ACTIVITY_MANAGEMENT,
            operationTypeExpression = "#p0 == 'release' ? T(com.xiaopeng.common.log.enums.AdminOperationType).RELEASE : (#p0 == 'del' ? T(com.xiaopeng.common.log.enums.AdminOperationType).DELETE : T(com.xiaopeng.common.log.enums.AdminOperationType).EDIT)",
            contentExpression = "'修改活动状态:' + #p0 + ',id=' + #p1",
            appendRequestData = true
    )
    public R<XpActivity> updateById(@PathVariable String op, @RequestParam Long id) {
        XpActivity activity = service.getById(id);
        switch (op){
        switch (op) {
            case "release":
                activity.setStatus(2);
                break;
@@ -139,30 +218,45 @@
                throw new UnsupportedOperationException("Unsupported" + op);
        }
        service.updateById(activity);
        log.info("修改活动状态:{}",activity);
        log.info("修改活动状态:{}", activity);
        return R.ok();
    }
    @GetMapping("/v1/api/appUserCoupon/detail")
    @ApiOperation(value = "活动详情",tags = {"管理后台-活动管理"},response = XpCoupon.class)
    public R<XpActivityDto> queryById(@RequestParam Long id){
    @ApiOperation(value = "活动详情", tags = {"管理后台-活动管理"}, response = XpCoupon.class)
    public R<XpActivityDto> queryById(@RequestParam Long id) {
        return R.ok(service.detail(id));
    }
    /**
     * 根据活动id和优惠券id获取活动策略
     *
     * @param activityId
     * @param couponId
     * @return
     */
    @PostMapping("/logan/inner/acticity/getXpActicityStrategy")
    public R<XpActicityStrategy> getXpActicityStrategy(@RequestParam("activityId") Long activityId, @RequestParam("couponId") Long couponId){
    public R<XpActicityStrategy> getXpActicityStrategy(@RequestParam("activityId") Long activityId, @RequestParam("couponId") Long couponId) {
        XpActicityCoupon one = xpActicityCouponService.lambdaQuery().eq(XpActicityCoupon::getActivityId, activityId).eq(XpActicityCoupon::getCouponId, couponId).one();
        if(one == null){
        if (one == null) {
            return R.ok();
        }
        return R.ok(xpActicityStrategyService.getById(one.getActicityStrategyId()));
    }
    /**
     * 获取当前所有有效活动
     * @return
     */
    @GetMapping("/logan/inner/acticity/getAllEffectiveActivity")
    R<List<XpActivity>> getAllEffectiveActivity(){
        List<XpActivity> list = service.lambdaQuery().eq(XpActivity::getStatus, 2).list();
        return R.ok(list);
    }
}