package com.ruoyi.other.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.other.api.domain.OrderActivityInfo;
import com.ruoyi.other.service.OrderActivityInfoService;
import com.ruoyi.other.service.VipSettingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 前端控制器
*
*
* @author luodangjia
* @since 2024-11-20
*/
@RestController
@RequestMapping("/order-activity-info")
@Api("订单优惠活动")
public class OrderActivityInfoController {
@Resource
private OrderActivityInfoService orderActivityInfoService;
@Resource
private VipSettingService vipSettingService;
/**
* 获取当前生效的活动
* @param vip
* @return
*/
@ResponseBody
@PostMapping("/getNowOrderActivityInfo")
public R getNowOrderActivityInfo(@RequestParam("vip") Integer vip){
OrderActivityInfo one = orderActivityInfoService.getOne(new LambdaQueryWrapper().eq(OrderActivityInfo::getDelFlag, 0)
.last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids) limit 0, 1"));
return R.ok(one);
}
/**
* 添加活动
*/
@PostMapping("/save")
@ApiOperation(value = "订单优惠活动-添加活动", tags = {"管理后台-活动管理"})
public R saveActivityConfig(@RequestBody OrderActivityInfo orderActivityInfo){
orderActivityInfo.setIsShelf(0);
orderActivityInfoService.save(orderActivityInfo);
return R.ok();
}
/**
* 删除活动
*/
@DeleteMapping("/delete")
@ApiOperation(value = "订单优惠活动-删除活动", tags = {"管理后台-活动管理"})
public R deleteActivityConfig(@RequestParam("id") Long id){
orderActivityInfoService.removeById(id);
return R.ok();
}
/**
* 修改活动
*/
@PostMapping("/update")
@ApiOperation(value = "修改活动", tags = {"管理后台-活动管理"})
public R updateActivityConfig(@RequestBody OrderActivityInfo orderActivityInfo){
orderActivityInfo.setId(Long.valueOf(orderActivityInfo.getIdStr()));
orderActivityInfoService.updateById(orderActivityInfo);
return R.ok();
}
/**
* 获取活动列表
*/
@GetMapping("/list")
@ApiOperation(value = "订单优惠活动-获取活动列表", tags = {"管理后台-活动管理"})
public R> list(@ApiParam("页码") @RequestParam Integer pageNum,
@ApiParam("每一页数据大小") Integer pageSize,
OrderActivityInfo orderActivityInfo){
Page page = orderActivityInfoService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper()
.eq(orderActivityInfo.getId() != null, OrderActivityInfo::getId, orderActivityInfo.getId())
.eq(StringUtils.isNotEmpty(orderActivityInfo.getActivityName()), OrderActivityInfo::getActivityName, orderActivityInfo.getActivityName())
.lt(orderActivityInfo.getStatus() != null && orderActivityInfo.getStatus() == 0, OrderActivityInfo::getStartTime, orderActivityInfo.getStartTime())
.ge(orderActivityInfo.getStatus() != null && orderActivityInfo.getStatus() == 1, OrderActivityInfo::getEndTime, orderActivityInfo.getStartTime())
.eq(orderActivityInfo.getIsShelf() != null, OrderActivityInfo::getIsShelf, orderActivityInfo.getIsShelf()));
page.getRecords().forEach(item -> {
LocalDateTime startTime = item.getStartTime();
LocalDateTime now = LocalDateTime.now();
LocalDateTime endTime = item.getEndTime();
if (endTime.isBefore(now)){
item.setStatus(2); //已结束
}else if (startTime.isBefore(now)){
item.setStatus(1); // 已开始
}else {
item.setStatus(0); // 未开始
}
String vipIds = item.getVipIds();
if (StringUtils.isNotEmpty(vipIds)){
String[] vipIdArr = vipIds.split(",");
if (vipIdArr.length == 7){
item.setVipName("全部");
}else {
List vipNameList = new ArrayList<>();
for (String vipId : vipIdArr) {
String vipName = vipSettingService.getById(Long.parseLong(vipId)).getVipName();
vipNameList.add(vipName);
}
item.setVipName(String.join(",", vipNameList));
}
}
});
return R.ok(page);
}
/**
* 获取活动详情
*/
@GetMapping("/getDetailById")
@ApiOperation(value = "订单优惠活动-获取活动详情", tags = {"管理后台-活动管理"})
public R getDetailById(@RequestParam("id") String id){
return R.ok(orderActivityInfoService.getById(Long.parseLong(id)));
}
}