package com.ruoyi.other.controller;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.web.controller.BaseController;
|
import com.ruoyi.common.core.web.page.TableDataInfo;
|
import com.ruoyi.order.feignClient.OrderClient;
|
import com.ruoyi.other.api.domain.*;
|
import com.ruoyi.other.api.feignClient.ShopClient;
|
import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
|
import com.ruoyi.other.mapper.SeckillActivityInfoMapper;
|
import com.ruoyi.other.service.*;
|
import com.ruoyi.other.vo.SeckillActivityDetailVO;
|
import com.ruoyi.other.vo.SeckillActivityVO;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiParam;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDateTime;
|
import java.time.ZoneOffset;
|
import java.time.format.DateTimeFormatter;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author luodangjia
|
* @since 2024-11-20
|
*/
|
@Api("秒杀活动信息")
|
@RestController
|
@RequestMapping("/seckill-activity-info")
|
public class SeckillActivityInfoController extends BaseController {
|
@Resource
|
private SeckillActivityInfoService seckillActivityInfoService;
|
|
@Resource
|
private GoodsSeckillService goodsSeckillService;
|
|
@Resource
|
private SeckillActivityInfoMapper seckillActivityInfoMapper;
|
|
@Resource
|
private GoodsService goodsService;
|
|
@Resource
|
private OrderClient orderClient;
|
@Resource
|
private ShopService shopService;
|
@Autowired
|
private GoodsCategoryService goodsCategoryService;
|
@Autowired
|
private GoodsShopService goodsShopService;
|
|
|
/**
|
* 秒杀活动列表
|
*/
|
@GetMapping("/list")
|
@ApiOperation(value = "秒杀活动列表",tags = {"小程序-商城-首页"})
|
public R<TableDataInfo> list(Goods goods)
|
{
|
return R.ok(seckillActivityInfoService.listSeckillActivity(goods));
|
}
|
|
/**
|
* 秒杀活动详情
|
*/
|
@GetMapping("/detail/{id}")
|
@ApiOperation(value = "秒杀活动详情", tags = {"小程序-商城-首页"})
|
public R<SeckillActivityDetailVO> detail(@PathVariable("id") Integer id, String latitude, String longitude)
|
{
|
return R.ok(seckillActivityInfoService.detail(id, latitude, longitude));
|
}
|
|
|
/**
|
* 根据商品id获取对应的秒杀活动
|
*/
|
@PostMapping("/getSeckillActivityInfo")
|
public R<GoodsSeckill> getSeckillActivityInfo(@RequestBody GetSeckillActivityInfo info){
|
SeckillActivityInfo one = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>()
|
.eq(SeckillActivityInfo::getGoodId, info.getGoodsId())
|
.eq(SeckillActivityInfo::getDelFlag, 0)
|
.eq(SeckillActivityInfo::getIsShelves, 1)
|
.last(" and now() between start_time and end_time order by create_time limit 0,1"));
|
if(null == one){
|
return R.ok();
|
}
|
GoodsSeckill goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId()));
|
if(null != goodsSeckill){
|
LocalDateTime endTime = one.getEndTime();
|
// 转时间戳
|
long timeStamp = endTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
goodsSeckill.setEndTime(timeStamp);
|
}
|
return R.ok(goodsSeckill);
|
}
|
|
|
|
|
|
|
/**
|
* 获取商品秒杀活动
|
* @param id
|
* @return
|
*/
|
@PostMapping("/getSeckillActivityInfoById")
|
public R<SeckillActivityInfo> getSeckillActivityInfoById(@RequestParam("id") Integer id){
|
SeckillActivityInfo one = seckillActivityInfoService.getById(id);
|
return R.ok(one);
|
}
|
|
|
/**
|
* 秒杀活动列表
|
*/
|
@GetMapping("/manageList")
|
@ApiOperation(value = "秒杀活动列表",tags = {"后台管理-活动管理-秒杀活动"})
|
public R<IPage<SeckillActivityVO>> manageList(@ApiParam("页码") @RequestParam Integer pageNum,
|
@ApiParam("每一页数据大小") Integer pageSize,
|
Goods goods)
|
{
|
IPage<SeckillActivityVO> IPage = seckillActivityInfoMapper.querySeckillActivity(Page.of(pageNum, pageSize), goods);
|
for (SeckillActivityVO record : IPage.getRecords()) {
|
LocalDateTime startTime = record.getStartTime();
|
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime endTime = record.getEndTime();
|
if (endTime.isBefore(now)){
|
record.setStatus(3); //已结束
|
}else if (startTime.isBefore(now)){
|
record.setStatus(2); // 已开始
|
}else {
|
record.setStatus(1); // 未开始
|
}
|
}
|
return R.ok(IPage);
|
}
|
|
/**
|
* 新增秒杀活动
|
*/
|
@PostMapping("/save")
|
@ApiOperation(value = "新增秒杀活动", tags = {"后台管理-活动管理-秒杀活动" })
|
public R<Void> save(@RequestBody SeckillActivityInfo seckillActivityInfo)
|
{
|
if (seckillActivityInfo.getStartTime().isAfter(seckillActivityInfo.getEndTime()))return R.fail("开始时间不能晚于结束时间");
|
seckillActivityInfoService.saveSeckillActivityInfo(seckillActivityInfo);
|
return R.ok();
|
}
|
|
@GetMapping("/getSeckillActivityInfoByGoodsId")
|
public R<SeckillActivityInfo> getSeckillActivityInfoByGoodsId(@RequestParam("goodsId") Integer goodsId){
|
SeckillActivityInfo seckillActivityInfo = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>()
|
.eq(SeckillActivityInfo::getGoodId, goodsId)
|
.eq(SeckillActivityInfo::getDelFlag, 0)
|
.eq(SeckillActivityInfo::getIsShelves, 1)
|
.last(" and now() between start_time and end_time"));
|
return R.ok(seckillActivityInfo);
|
}
|
|
/**
|
* 修改秒杀活动
|
*/
|
@PutMapping("/update")
|
@ApiOperation(value = "修改秒杀活动", tags = {"后台管理-活动管理-秒杀活动" })
|
public R<Void> update(@RequestBody SeckillActivityInfo seckillActivityInfo)
|
{
|
if (seckillActivityInfo.getStartTime().isAfter(seckillActivityInfo.getEndTime()))return R.fail("开始时间不能晚于结束时间");
|
seckillActivityInfoService.updateSeckillActivityInfo(seckillActivityInfo);
|
return R.ok();
|
}
|
|
/**
|
* 删除秒杀活动
|
*/
|
@DeleteMapping("/remove/{id}")
|
@ApiOperation(value = "删除秒杀活动", tags = {"后台管理-活动管理-秒杀活动" })
|
public R<Void> remove(@PathVariable Integer id)
|
{
|
//先删除
|
goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, id));
|
seckillActivityInfoService.removeById(id);
|
return R.ok();
|
}
|
|
/**
|
* 获取秒杀活动明细
|
*/
|
@GetMapping("/getSeckillActivityDetail")
|
@ApiOperation(value = "获取秒杀活动明细", tags = {"后台管理-活动管理-秒杀活动" })
|
public R<SeckillActivityVO> getSeckillActivityDetail(Integer id)
|
{
|
SeckillActivityVO vo = new SeckillActivityVO();
|
|
SeckillActivityInfo seckillActivityInfo = seckillActivityInfoService.getById(id);
|
if (seckillActivityInfo==null)return R.fail("秒杀活动不存在");
|
Goods goods = goodsService.getById(seckillActivityInfo.getGoodId());
|
QueryWrapper<GoodsShop> queryWrapper = new QueryWrapper<GoodsShop>();
|
queryWrapper.eq("goods_id", goods.getId());
|
GoodsShop goodsShop = goodsShopService.getOne(queryWrapper);
|
GoodsSeckill goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>()
|
.eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId()));
|
GoodsCategory category = goodsCategoryService.getById(goods.getGoodsCategoryId());
|
Shop shop = shopService.getById(goodsShop.getShopId());
|
vo.setId(seckillActivityInfo.getId().toString());
|
vo.setGoodsId(seckillActivityInfo.getGoodId());
|
vo.setGoodsName(goods.getName());
|
vo.setGoodsCategoryName(category.getName());
|
vo.setSellingPrice(goods.getSellingPrice());
|
vo.setOriginalPrice(goods.getOriginalPrice());
|
vo.setActivityPrice(goodsSeckill.getSellingPrice());
|
vo.setMaxNum(seckillActivityInfo.getMaxNum());//活动限购
|
vo.setStartTime(seckillActivityInfo.getStartTime());
|
vo.setEndTime(seckillActivityInfo.getEndTime());
|
vo.setShopId(goodsShop.getShopId());
|
vo.setShopName(shop.getName());
|
|
|
return R.ok(vo);
|
}
|
|
/**
|
* 修改上/下架状态
|
*/
|
@PutMapping("/updateShowStatus")
|
@ApiOperation(value = "修改上/下架状态", tags = {"后台管理-活动管理-秒杀活动" })
|
public R<Void> updateShowStatus(@RequestBody SeckillActivityVO seckillActivityVO)
|
{
|
seckillActivityInfoService.update(new LambdaUpdateWrapper<SeckillActivityInfo>()
|
.eq(SeckillActivityInfo::getId, seckillActivityVO.getId())
|
.set(SeckillActivityInfo::getIsShelves, seckillActivityVO.getShowStatus()));
|
return R.ok();
|
}
|
|
|
|
|
}
|