From 451fdc4556c4c9b0ca20a95e724d55a254877c2e Mon Sep 17 00:00:00 2001 From: Ziin Date: Mon, 4 Aug 2025 14:31:38 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA=20=20?= =?UTF-8?q?=E5=88=9B=E5=BB=BAPK=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pk/controller/PkController.java | 71 +------------- .../vvpkassistant/pk/service/PKService.java | 7 +- .../pk/service/PKServiceImpl.java | 95 ++++++++++++++++++- 3 files changed, 102 insertions(+), 71 deletions(-) diff --git a/src/main/java/vvpkassistant/pk/controller/PkController.java b/src/main/java/vvpkassistant/pk/controller/PkController.java index b0c08ea..278231f 100644 --- a/src/main/java/vvpkassistant/pk/controller/PkController.java +++ b/src/main/java/vvpkassistant/pk/controller/PkController.java @@ -47,84 +47,19 @@ public class PkController { // 创建pk数据 @PostMapping("addPkData") public ResponseData addPkData(@RequestBody PkInfoModel pkModel) { - - return ResponseData.success(pkService.addPkaddData(pkModel)); - + return ResponseData.success(pkService.addPkAddData(pkModel)); } // 更新pk信息 @PostMapping("updatePkStatus") public ResponseData updatePkStatus(@RequestBody PkRecord recordModel) { - - //如果是同意了pk邀请、则更新已发布的主播pk可邀请状态 - if (recordModel.getPkStatus() == 1) { - - // 查询出记录信息 - PkRecord pkRecordById = recordDao.singleRecord(recordModel.getId()); - - // 更新可邀请状态 - PkInfoModel pkInfoModelA = pkDao.selectById(pkRecordById.getPkIdA()); - pkInfoModelA.setInviteStatus(1); - - PkInfoModel pkInfoModelB = pkDao.selectById(pkRecordById.getPkIdB()); - pkInfoModelB.setInviteStatus(1); - - pkDao.updateById(pkInfoModelA); - pkDao.updateById(pkInfoModelB); - - // 如果有置顶的状态。需要取消置顶 - if (pkInfoModelA.getPinExpireTime() > VVTools.currentTimeStamp()) { - long hour = VVTools.calculateHoursFloor(pkInfoModelA.getPinExpireTime(),VVTools.currentTimeStamp()); - int coin = Integer.parseInt(FunctionConfigHolder.getValue("置顶扣除积分")); - int totalCoin = (int) (coin * hour); - - // 插入记录 - CoinRecords coinRecords = new CoinRecords("成功预约pk,自动取消置顶", pkInfoModelA.getSenderId(),totalCoin, (int) VVTools.currentTimeStamp(),1); - coinRecordsDao.insert(coinRecords); - - // 更新积分 - UserModel userModel = userDao.selectById(pkRecordById.getUserIdA()); - Integer points = userModel.getPoints(); - userModel.setPoints(points + totalCoin); - } - - if (pkInfoModelB.getPinExpireTime() > VVTools.currentTimeStamp()) { - long hour = VVTools.calculateHoursFloor(pkInfoModelB.getPinExpireTime(),VVTools.currentTimeStamp()); - int coin = Integer.parseInt(FunctionConfigHolder.getValue("置顶扣除积分")); - int totalCoin = (int) (coin * hour); - - // 插入记录 - CoinRecords coinRecords = new CoinRecords("成功预约pk,自动取消置顶", pkInfoModelB.getSenderId(),totalCoin, (int) VVTools.currentTimeStamp(),1); - coinRecordsDao.insert(coinRecords); - - // 更新积分 - UserModel userModel = userDao.selectById(pkRecordById.getUserIdB()); - Integer points = userModel.getPoints(); - userModel.setPoints(points + totalCoin); - } - } - - // 更新pk邀请记录 - int update = recordDao.updateById(recordModel); - return update == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),null); + return ResponseData.success(pkService.updatePkStatus(recordModel)); } // 创建PK记录 @PostMapping("createPkRecord") public ResponseData createPkRecord(@RequestBody PkRecord record) { - - // 如果这两个邀约直播之间存在未处理的邀请记录。那就不允许继续发送pk邀请 - String anchorIdA = record.getAnchorIdA(); - String anchorIdB = record.getAnchorIdB(); - Integer dataCount = recordDao.getPendingInvitations(anchorIdA, anchorIdB); - - if (dataCount > 0) { - return ResponseData.error(ResponseInfo.ERROR.getCode(),"已存在一条未处理的pk申请,不能重复发送,"); - } - - record.setPkStatus(0); - int insert = recordDao.insert(record); - return insert == 1 ? ResponseData.success(record) : ResponseData.error(ResponseInfo.ERROR.getCode(),null); + return ResponseData.success(pkService.createPKRecord(record)); } // pk列表 diff --git a/src/main/java/vvpkassistant/pk/service/PKService.java b/src/main/java/vvpkassistant/pk/service/PKService.java index 2eb373d..1fa58b2 100644 --- a/src/main/java/vvpkassistant/pk/service/PKService.java +++ b/src/main/java/vvpkassistant/pk/service/PKService.java @@ -2,11 +2,16 @@ package vvpkassistant.pk.service; import com.baomidou.mybatisplus.extension.service.IService; import vvpkassistant.pk.model.PkInfoModel; +import vvpkassistant.pk.model.PkRecord; /* * @author: ziin * @date: 2025/8/4 13:53 */ public interface PKService extends IService { - PkInfoModel addPkaddData(PkInfoModel pkModel); + PkInfoModel addPkAddData(PkInfoModel pkModel); + + Boolean updatePkStatus(PkRecord recordModel); + + PkRecord createPKRecord(PkRecord record); } diff --git a/src/main/java/vvpkassistant/pk/service/PKServiceImpl.java b/src/main/java/vvpkassistant/pk/service/PKServiceImpl.java index 287f2f8..9634d76 100644 --- a/src/main/java/vvpkassistant/pk/service/PKServiceImpl.java +++ b/src/main/java/vvpkassistant/pk/service/PKServiceImpl.java @@ -2,13 +2,20 @@ package vvpkassistant.pk.service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import vvpkassistant.CoinRecords.CoinRecords; +import vvpkassistant.CoinRecords.CoinRecordsDao; import vvpkassistant.Data.ResponseData; import vvpkassistant.Data.ResponseInfo; import vvpkassistant.Tools.VVTools; +import vvpkassistant.User.mapper.UserDao; +import vvpkassistant.User.model.UserModel; import vvpkassistant.common.ErrorCode; +import vvpkassistant.config.FunctionConfigHolder; import vvpkassistant.exception.BusinessException; import vvpkassistant.pk.mapper.PkInfoDao; +import vvpkassistant.pk.mapper.PkRecordDao; import vvpkassistant.pk.model.PkInfoModel; +import vvpkassistant.pk.model.PkRecord; import javax.annotation.Resource; import java.util.List; @@ -24,8 +31,17 @@ public class PKServiceImpl extends ServiceImpl implement @Resource private PkInfoDao pkInfoDao; + @Resource + private PkRecordDao pkRecordDao; + + @Resource + private CoinRecordsDao coinRecordsDao; + + @Resource + private UserDao userDao; + @Override - public PkInfoModel addPkaddData(PkInfoModel pkModel) { + public PkInfoModel addPkAddData(PkInfoModel pkModel) { // 初始可邀请状态为0 pkModel.setInviteStatus(0); pkModel.setPinExpireTime(0); @@ -46,11 +62,86 @@ public class PKServiceImpl extends ServiceImpl implement // 判断该主播在当日是否已发布过pk信息 if (!pkInfoModels.isEmpty()) { - throw new BusinessException(ErrorCode.SYSTEM_ERROR,"该主播当日已有pk信息"); + throw new BusinessException(ErrorCode.SYSTEM_ERROR, "该主播当日已有pk信息"); } if (pkInfoDao.insert(pkModel) == 1) { return pkModel; + } else + throw new BusinessException(ErrorCode.SYSTEM_ERROR); + } + + @Override + public Boolean updatePkStatus(PkRecord recordModel) { + if (recordModel.getPkStatus() == 1) { + + // 查询出记录信息 + PkRecord pkRecordById = pkRecordDao.singleRecord(recordModel.getId()); + + // 更新可邀请状态 + PkInfoModel pkInfoModelA = pkInfoDao.selectById(pkRecordById.getPkIdA()); + pkInfoModelA.setInviteStatus(1); + + PkInfoModel pkInfoModelB = pkInfoDao.selectById(pkRecordById.getPkIdB()); + pkInfoModelB.setInviteStatus(1); + + pkInfoDao.updateById(pkInfoModelA); + pkInfoDao.updateById(pkInfoModelB); + + // 如果有置顶的状态。需要取消置顶 + if (pkInfoModelA.getPinExpireTime() > VVTools.currentTimeStamp()) { + long hour = VVTools.calculateHoursFloor(pkInfoModelA.getPinExpireTime(), VVTools.currentTimeStamp()); + int coin = Integer.parseInt(FunctionConfigHolder.getValue("置顶扣除积分")); + int totalCoin = (int) (coin * hour); + + // 插入记录 + CoinRecords coinRecords = new CoinRecords("成功预约pk,自动取消置顶", pkInfoModelA.getSenderId(), totalCoin, (int) VVTools.currentTimeStamp(), 1); + coinRecordsDao.insert(coinRecords); + + // 更新积分 + UserModel userModel = userDao.selectById(pkRecordById.getUserIdA()); + Integer points = userModel.getPoints(); + userModel.setPoints(points + totalCoin); + } + + if (pkInfoModelB.getPinExpireTime() > VVTools.currentTimeStamp()) { + long hour = VVTools.calculateHoursFloor(pkInfoModelB.getPinExpireTime(), VVTools.currentTimeStamp()); + int coin = Integer.parseInt(FunctionConfigHolder.getValue("置顶扣除积分")); + int totalCoin = (int) (coin * hour); + + // 插入记录 + CoinRecords coinRecords = new CoinRecords("成功预约pk,自动取消置顶", pkInfoModelB.getSenderId(), totalCoin, (int) VVTools.currentTimeStamp(), 1); + coinRecordsDao.insert(coinRecords); + + // 更新积分 + UserModel userModel = userDao.selectById(pkRecordById.getUserIdB()); + Integer points = userModel.getPoints(); + userModel.setPoints(points + totalCoin); + } + } + + // 更新pk邀请记录 + if (pkRecordDao.updateById(recordModel) == 1) { + return true; + } else { + throw new BusinessException(ErrorCode.SYSTEM_ERROR); + } + } + + @Override + public PkRecord createPKRecord(PkRecord record) { + // 如果这两个邀约直播之间存在未处理的邀请记录。那就不允许继续发送pk邀请 + String anchorIdA = record.getAnchorIdA(); + String anchorIdB = record.getAnchorIdB(); + Integer dataCount = pkRecordDao.getPendingInvitations(anchorIdA, anchorIdB); + + if (dataCount > 0) { + throw new BusinessException(ErrorCode.SYSTEM_ERROR, "已存在一条未处理的pk申请,不能重复发送"); + } + + record.setPkStatus(0); + if (pkRecordDao.insert(record) == 1 ){ + return record; }else throw new BusinessException(ErrorCode.SYSTEM_ERROR); }