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()));
}
}