package com.panzhihua.service_community.service.impl;
|
|
import static java.util.Objects.isNull;
|
import static java.util.Objects.nonNull;
|
|
import javax.annotation.Resource;
|
|
import com.panzhihua.common.model.vos.community.microCommercialStreet.TopStatisticsVO;
|
import com.panzhihua.common.utlis.DateUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsGameDTO;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsGameDTO;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetPopularForGameDTO;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForGameDTO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsGameVO;
|
import com.panzhihua.service_community.dao.McsGameDAO;
|
import com.panzhihua.service_community.dao.McsMerchantDAO;
|
import com.panzhihua.service_community.entity.McsGame;
|
import com.panzhihua.service_community.entity.McsMerchant;
|
import com.panzhihua.service_community.service.McsGameService;
|
|
import java.util.Date;
|
|
/**
|
* (McsGame)表服务实现类
|
*
|
* @author makejava
|
* @since 2021-12-28 14:37:09
|
*/
|
@Service("mcsGameService")
|
public class McsGameServiceImpl extends ServiceImpl<McsGameDAO, McsGame> implements McsGameService {
|
|
@Resource
|
private McsMerchantDAO mcsMerchantDAO;
|
|
/**
|
* 分页查询戳戳游戏
|
* @param pageMcsGameDTO
|
* @return
|
*/
|
@Override
|
public R pageMcsGame(PageMcsGameDTO pageMcsGameDTO) {
|
Page page = new Page<>();
|
page.setSize(pageMcsGameDTO.getPageSize());
|
page.setCurrent(pageMcsGameDTO.getPageNum());
|
IPage<McsGameVO> mcsGames = this.baseMapper.pageMcsGame(page, pageMcsGameDTO);
|
return R.ok(mcsGames);
|
}
|
|
/**
|
* 设为/取消游戏热门
|
* @param setPopularForGameDTO
|
* @return
|
*/
|
@Override
|
public R setPopularForGame(SetPopularForGameDTO setPopularForGameDTO) {
|
McsGame mcsGame = this.baseMapper.selectById(setPopularForGameDTO.getGameId());
|
if (isNull(mcsGame)) {
|
return R.fail("修改数据不存在");
|
}
|
Integer type = setPopularForGameDTO.getType();
|
if (type.equals(1)) {
|
//设为热门
|
mcsGame.setIsPopular(true);
|
} else if (type.equals(2)) {
|
//取消热门
|
mcsGame.setIsPopular(false);
|
} else {
|
return R.fail("未知错误");
|
}
|
int num = this.baseMapper.updateById(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("修改失败,请重新尝试");
|
}
|
|
/**
|
* 上架/下架戳戳游戏
|
* @param setShelfForGameDTO
|
* @return
|
*/
|
@Override
|
public R setShelfForGame(SetShelfForGameDTO setShelfForGameDTO) {
|
McsGame mcsGame = this.baseMapper.selectById(setShelfForGameDTO.getGameId());
|
if (isNull(mcsGame)) {
|
return R.fail("修改数据不存在");
|
}
|
Integer type = setShelfForGameDTO.getType();
|
if (type.equals(1)) {
|
//上架
|
McsMerchant mcsMerchant = mcsMerchantDAO.selectById(mcsGame.getMerchantId());
|
Integer publishLimit = mcsMerchant.getPublishLimit();
|
Integer publishCount = this.baseMapper.selectPublishCount(mcsGame.getMerchantId());
|
if (publishCount >= publishLimit) {
|
return R.fail("空闲戳戳点不足");
|
}
|
mcsGame.setStatus(2);
|
} else if (type.equals(2)) {
|
//下架
|
mcsGame.setStatus(3);
|
} else {
|
return R.fail("未知错误");
|
}
|
int num = this.baseMapper.updateById(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("修改失败,请重新尝试");
|
}
|
|
/**
|
* 删除戳戳游戏
|
* @param gameId
|
* @param userId
|
* @return
|
*/
|
@Override
|
public R deleteMcsGame(Long gameId, Long userId) {
|
McsGame mcsGame = this.baseMapper.selectById(gameId);
|
if (isNull(mcsGame)) {
|
return R.fail("修改数据不存在");
|
}
|
mcsGame.setIsDel(true);
|
mcsGame.setStatus(McsGame.Status.yxj);
|
mcsGame.setUpdatedBy(userId);
|
int num = this.baseMapper.updateById(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("删除失败,请重新尝试");
|
}
|
|
/**
|
* 新增戳戳游戏
|
* @param mcsGameDTO
|
* @return
|
*/
|
@Override
|
public R addMcsGame(McsGameDTO mcsGameDTO) {
|
Long userId = mcsGameDTO.getCreatedBy();
|
McsMerchant mcsMerchant = mcsMerchantDAO.selectOne(new QueryWrapper<McsMerchant>().lambda().eq(McsMerchant::getUserId, userId));
|
if (isNull(mcsMerchant)) {
|
return R.fail("未查询到商家信息");
|
}
|
Integer type = mcsGameDTO.getType();
|
McsGame mcsGame = new McsGame();
|
if (type.equals(1)) {
|
//1.戳戳币游戏
|
Integer allocation = mcsGameDTO.getAllocation();
|
Integer coins = mcsGameDTO.getCoins();
|
if (isNull(allocation)) {
|
return R.fail("缺少分配方式");
|
}
|
if (isNull(coins)) {
|
return R.fail("未设置戳戳币总额");
|
}
|
mcsGame.setSurplusCoins(mcsGameDTO.getCoins());
|
} else if (type.equals(2)) {
|
//2.体验游戏
|
Integer awardType = mcsGameDTO.getAwardType();
|
if (isNull(awardType)) {
|
return R.fail("缺少奖励类型");
|
}
|
} else {
|
return R.fail("未知错误");
|
}
|
BeanUtils.copyProperties(mcsGameDTO, mcsGame);
|
mcsGame.setSurplusCoupons(mcsGameDTO.getCoupons());
|
mcsGame.setStatus(McsGame.Status.wfb);
|
mcsGame.setMerchantId(mcsMerchant.getId());
|
int num = this.baseMapper.insert(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("新增失败,请重新尝试");
|
}
|
|
/**
|
* 编辑戳戳游戏
|
* @param mcsGameDTO
|
* @return
|
*/
|
@Override
|
public R putMcsGame(McsGameDTO mcsGameDTO) {
|
McsGame mcsGame = this.baseMapper.selectById(mcsGameDTO.getId());
|
if (isNull(mcsGame)) {
|
return R.fail("资源不存在");
|
}
|
Integer type = mcsGameDTO.getType();
|
if (type.equals(1)) {
|
//1.戳戳币游戏
|
Integer allocation = mcsGameDTO.getAllocation();
|
Integer coins = mcsGameDTO.getCoins();
|
if (isNull(allocation)) {
|
return R.fail("缺少分配方式");
|
}
|
if (isNull(coins)) {
|
return R.fail("未设置戳戳币总额");
|
}
|
Integer beforeCoins = mcsGame.getCoins();
|
Integer beforeSurplusCoins = mcsGame.getSurplusCoins();
|
Integer beforeUsedCoins = beforeCoins - beforeSurplusCoins;
|
Integer surplusCoins = coins - beforeUsedCoins;
|
if (surplusCoins < 0) {
|
return R.fail("戳戳币总额少于已发出的数量");
|
}
|
mcsGame.setSurplusCoins(surplusCoins);
|
} else if (type.equals(2)) {
|
//2.体验游戏
|
Integer awardType = mcsGameDTO.getAwardType();
|
if (isNull(awardType)) {
|
return R.fail("缺少奖励类型");
|
}
|
} else {
|
return R.fail("未知错误");
|
}
|
Integer beforeCoupons = mcsGame.getCoupons();
|
Integer beforeSurplusCoupons = mcsGame.getSurplusCoupons();
|
Integer beforeUsedCoupons = beforeCoupons - beforeSurplusCoupons;
|
BeanUtils.copyProperties(mcsGameDTO, mcsGame);
|
Integer coupons = mcsGame.getCoupons();
|
Integer surplusCoupons = coupons - beforeUsedCoupons;
|
if (surplusCoupons < 0) {
|
return R.fail("卷总数少于已发出的数量");
|
}
|
mcsGame.setSurplusCoupons(surplusCoupons);
|
int num = this.baseMapper.updateById(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("编辑失败,请重新尝试");
|
}
|
|
/**
|
* 发布戳戳游戏
|
* @param gameId
|
* @param userId
|
* @return
|
*/
|
@Override
|
public R publishMcsGame(Long gameId, Long userId) {
|
McsGame mcsGame = this.baseMapper.selectById(gameId);
|
if (isNull(mcsGame)) {
|
return R.fail("资源不存在");
|
}
|
McsMerchant mcsMerchant = mcsMerchantDAO.selectById(mcsGame.getMerchantId());
|
Integer publishLimit = mcsMerchant.getPublishLimit();
|
Integer publishCount = this.baseMapper.selectPublishCount(mcsGame.getMerchantId());
|
if (publishCount >= publishLimit) {
|
return R.fail("空闲戳戳点不足");
|
}
|
mcsGame.setStatus(McsGame.Status.jxz);
|
mcsGame.setPublishAt(new Date());
|
mcsGame.setUpdatedBy(userId);
|
int num = this.baseMapper.updateById(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("发布失败,请重新尝试");
|
}
|
|
/**
|
* 结束戳戳游戏
|
* @param gameId
|
* @param userId
|
* @return
|
*/
|
@Override
|
public R finishMcsGame(Long gameId, Long userId) {
|
McsGame mcsGame = this.baseMapper.selectById(gameId);
|
if (isNull(mcsGame)) {
|
return R.fail("资源不存在");
|
}
|
mcsGame.setStatus(McsGame.Status.yjs);
|
mcsGame.setUpdatedBy(userId);
|
int num = this.baseMapper.updateById(mcsGame);
|
if (num > 0) {
|
return R.ok();
|
}
|
return R.fail("结束失败,请重新尝试");
|
}
|
|
/**
|
* 戳戳游戏顶部统计数据
|
* @param userId
|
* @return
|
*/
|
@Override
|
public R getTopStatistics(Long userId) {
|
McsMerchant mcsMerchant = mcsMerchantDAO.selectOne(new QueryWrapper<McsMerchant>().lambda().eq(McsMerchant::getUserId, userId));
|
if (isNull(mcsMerchant)) {
|
return R.fail("未查询到商家信息");
|
}
|
TopStatisticsVO topStatisticsVO = new TopStatisticsVO();
|
topStatisticsVO.setExpireAt(mcsMerchant.getExpireAt());
|
if (nonNull(mcsMerchant.getExpireAt())) {
|
int surplusLitDays = DateUtils.differentDays(new Date(), mcsMerchant.getExpireAt());
|
topStatisticsVO.setSurplusLitDays(surplusLitDays > 0 ? surplusLitDays : 0);
|
}
|
Integer appliedCount = this.baseMapper.selectAppliedCount(mcsMerchant.getId());
|
topStatisticsVO.setAppliedTotal(appliedCount);
|
Integer verifiedCount = this.baseMapper.selectVerifiedCount(mcsMerchant.getId());
|
topStatisticsVO.setVerifiedTotal(verifiedCount);
|
|
Integer publishLimit = mcsMerchant.getPublishLimit();
|
Integer publishCount = this.baseMapper.selectPublishCount(mcsMerchant.getId());
|
Integer idleTotal = publishLimit - publishCount;
|
topStatisticsVO.setIdleTotal(idleTotal > 0 ? idleTotal : 0);
|
return R.ok(topStatisticsVO);
|
}
|
}
|