package com.xiaopeng.operation.controller;
|
|
|
import com.xiaopeng.api.dto.operation.XpActivityDto;
|
import com.xiaopeng.api.model.operation.*;
|
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.*;
|
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;
|
|
/**
|
* <p>
|
* 活动管理 前端控制器
|
* </p>
|
*
|
* @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<List<String>> findListToIds(@RequestParam String acticityName){
|
if(acticityName == null){
|
return R.ok();
|
}
|
return R.ok(service.findListToIds(acticityName));
|
}
|
|
|
@Resource
|
RedisTemplate<String, String> redisTemplate;
|
|
|
/**
|
* 是否第一次进入某活动
|
* @return 活动信息,id 和 img
|
*/
|
@GetMapping("/api/v1/mini-program/acticity/firstEnter")
|
@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(ret);
|
|
}
|
|
IXpActicityCouponService couponService;
|
|
@Resource
|
IXpActicityStrategyService strategyService;
|
@Resource
|
IXpActicityUserService userService;
|
@Resource
|
IXpActivityNoticeService noticeService;
|
|
@PostMapping("/v1/api/appUserCoupon/pageList")
|
@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());
|
dto.setNotice(noticeService.lambdaQuery().eq(XpActivityNotice::getActivityId, dto.getId()).one());
|
}
|
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<XpActivity> 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<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){
|
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()));
|
}
|
}
|