From 20d24428ac6d140b87715eea2dcf9a9992fb7b23 Mon Sep 17 00:00:00 2001 From: xinian Date: Mon, 27 Apr 2026 04:32:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0SPT=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/player/service/task.go | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/modules/player/service/task.go b/modules/player/service/task.go index fa104afd..e8c3db14 100644 --- a/modules/player/service/task.go +++ b/modules/player/service/task.go @@ -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 }