package com.xiaopeng.operation.controller; import com.xiaopeng.api.dto.operation.XpActivityDto; 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.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.operation.service.IXpActicityCouponService; import com.xiaopeng.operation.service.IXpActicityService; import com.xiaopeng.operation.service.IXpActicityStrategyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.time.Duration; import java.time.LocalDateTime; import java.util.List; /** *

* 活动管理 前端控制器 *

* * @author mitao * @since 2026-02-03 */ @Api(tags = "活动管理") @RestController @RequestMapping("") @Slf4j @RequiredArgsConstructor(onConstructor_ = @Lazy) public class XpActicityController { @Resource private IXpActicityService service; @Resource private IXpActicityCouponService xpActicityCouponService; @Resource private IXpActicityStrategyService xpActicityStrategyService; /** * 获取所有白名单手机号 * @return */ @PostMapping("/logan/inner/acticity/findListToIds") @ApiOperation(value = "获取活动信息ids", tags = {"管理后台-获取活动信息ids"}) public R> findListToIds(@RequestParam String acticityName){ if(acticityName == null){ return R.ok(); } return R.ok(service.findListToIds(acticityName)); } @Resource RedisTemplate redisTemplate; /** * 是否第一次进入某活动 * @return 活动信息,id 和 img */ @GetMapping("/api/v1/mini-program/acticity/firstEnter") @ApiOperation(value = "获取是否第一次推送活动", tags = {"管理后台-活动首次进入情况"}) public R firstEnter(HttpServletRequest request){ String uid = request.getHeader("XP-Uid"); ValueOperations ops = redisTemplate.opsForValue(); XpActivity activity = service.activiting(); List 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(ret); } IXpActicityCouponService couponService; @PostMapping("/v1/api/appUserCoupon/pageList") @ApiOperation(value = "活动列表",tags = {"管理后台-活动管理"},response = XpActivity.class) public R> pageList(@RequestBody XpActivityPageListQuery query) { PageInfo pageList = service.pageList(query); return R.ok(pageList); } @PostMapping("/v1/api/appUserCoupon/add") @ApiOperation(value = "添加活动",tags = {"管理后台-活动管理"},response = XpCoupon.class) 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 updateById(@PathVariable String op,@RequestParam Long id){ XpActivity activity = service.getById(id); switch (op){ case "release": activity.setStatus(2); break; case "pause": activity.setStatus(4); break; case "resume": activity.setStatus(1); break; case "stop": activity.setStatus(3); break; case "del": activity.setDeleted(true); break; default: throw new UnsupportedOperationException("Unsupported" + op); } service.updateById(activity); log.info("修改活动状态:{}",activity); return R.ok(); } @GetMapping("/v1/api/appUserCoupon/detail") @ApiOperation(value = "活动详情",tags = {"管理后台-活动管理"},response = XpCoupon.class) public R queryById(@RequestParam Long id){ return R.ok(service.detail(id)); } /** * 根据活动id和优惠券id获取活动策略 * @param activityId * @param couponId * @return */ @PostMapping("/logan/inner/acticity/getXpActicityStrategy") public R 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){ return R.ok(); } return R.ok(xpActicityStrategyService.getById(one.getActicityStrategyId())); } }