feat: 添加SPT进度检查
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed

This commit is contained in:
xinian
2026-04-27 04:32:09 +08:00
parent ab7fe0639a
commit 20d24428ac

View File

@@ -2,6 +2,7 @@ package service
import (
"blazing/cool"
configmodel "blazing/modules/config/model"
configservice "blazing/modules/config/service"
"blazing/modules/player/model"
"errors"
@@ -44,6 +45,52 @@ func (s *TaskService) ShopRequirementError() error {
}
}
if err := s.sptShopRequirementError(); err != nil {
return err
}
return nil
}
func (s *TaskService) sptShopRequirementError() error {
var sptList []configmodel.SptConfig
if err := cool.DBM(configmodel.NewSptConfig()).
Fields("task_id").
Where("is_enable", 1).
WhereGT("task_id", 0).
Scan(&sptList); err != nil {
return err
}
openedTaskIDs := make(map[uint32]struct{}, len(sptList))
for _, spt := range sptList {
openedTaskIDs[spt.TaskID] = struct{}{}
}
openedTotal := len(openedTaskIDs)
requiredCompleted := openedTotal - 3
if requiredCompleted <= 0 {
return nil
}
var playerInfo *model.Player
if err := cool.DBM(model.NewPlayer()).Where("player_id", s.userid).Scan(&playerInfo); err != nil {
return err
}
completedTotal := 0
if playerInfo != nil {
for taskID := range openedTaskIDs {
if playerInfo.Data.GetTask(int(taskID)) == model.Completed {
completedTotal++
}
}
}
if completedTotal < requiredCompleted {
return fmt.Errorf("请先完成已开启SPT进度当前%d/%d需完成%d", completedTotal, openedTotal, requiredCompleted)
}
return nil
}