diff --git a/Build_God_Api/Build_God_Api/DB/CharacterMissionProgress.cs b/Build_God_Api/Build_God_Api/DB/CharacterMissionProgress.cs index 9b975bd..0d4ac18 100644 --- a/Build_God_Api/Build_God_Api/DB/CharacterMissionProgress.cs +++ b/Build_God_Api/Build_God_Api/DB/CharacterMissionProgress.cs @@ -12,6 +12,11 @@ namespace Build_God_Api.DB /// public int CharacterId { get; set; } + /// + /// 每日任务实例ID + /// + public int DailyMissionId { get; set; } + /// /// 任务ID /// diff --git a/Build_God_Api/Build_God_Api/Services/BattleService.cs b/Build_God_Api/Build_God_Api/Services/BattleService.cs index 858a496..bd08dfe 100644 --- a/Build_God_Api/Build_God_Api/Services/BattleService.cs +++ b/Build_God_Api/Build_God_Api/Services/BattleService.cs @@ -213,8 +213,7 @@ namespace Build_God_Api.Services if (progress.TargetItemId == monsterId) { var characterProgress = await _db.Queryable() - .Where(cp => cp.CharacterId == characterId - && cp.MissionId == dailyMission.MissionId + .Where(cp => cp.DailyMissionId == dailyMission.Id && cp.MissionProgressId == progress.Id) .FirstAsync(); @@ -223,6 +222,7 @@ namespace Build_God_Api.Services characterProgress = new CharacterMissionProgress { CharacterId = characterId, + DailyMissionId = dailyMission.Id, MissionId = dailyMission.MissionId, MissionProgressId = progress.Id, CurrentCount = 1, @@ -244,7 +244,7 @@ namespace Build_God_Api.Services // 检查任务是否全部完成 var allProgresses = await _db.Queryable() - .Where(cp => cp.CharacterId == characterId && cp.MissionId == dailyMission.MissionId) + .Where(cp => cp.DailyMissionId == dailyMission.Id) .ToListAsync(); var missionConfigProgresses = await _db.Queryable() diff --git a/Build_God_Api/Build_God_Api/Services/DailyMissionService.cs b/Build_God_Api/Build_God_Api/Services/DailyMissionService.cs index 6ad9733..08552c0 100644 --- a/Build_God_Api/Build_God_Api/Services/DailyMissionService.cs +++ b/Build_God_Api/Build_God_Api/Services/DailyMissionService.cs @@ -134,7 +134,7 @@ namespace Build_God_Api.Services var dailyMissions = await _db.Queryable() .Where(x => x.CharacterId == characterId) - .Where(x => x.AssignedDate == today || x.AssignedDate == yesterday) + .Where(x => x.AssignedDate == today) .OrderByDescending(x => x.AssignedDate) .OrderByDescending(x => x.IsFromYesterday) .ToListAsync(); @@ -200,7 +200,7 @@ namespace Build_God_Api.Services foreach (var progress in mission.Progresses) { var characterProgress = await _db.Queryable() - .FirstAsync(x => x.CharacterId == characterId && x.MissionId == dm.MissionId && x.MissionProgressId == progress.Id); + .FirstAsync(x => x.DailyMissionId == dm.Id && x.MissionProgressId == progress.Id); dto.Progresses.Add(new MissionProgressDto { @@ -352,6 +352,7 @@ namespace Build_God_Api.Services { var missionConfig = await _db.Queryable().FirstAsync(x => x.Id == mission.MissionId); var missionName = missionConfig?.Title ?? "每日任务"; + await _db.Deleteable().Where(x => x.DailyMissionId == mission.Id).ExecuteCommandAsync(); await _db.Deleteable().Where(x => x.Id == mission.Id).ExecuteCommandAsync(); var expireMessage = $"【{missionName}】由于没有完成已自动过期,并已为您分配新的任务,请按时完成任务吧!"; diff --git a/Build_God_Api/Build_God_Api/Services/MissionProgressService.cs b/Build_God_Api/Build_God_Api/Services/MissionProgressService.cs index c53d1ce..7d052ee 100644 --- a/Build_God_Api/Build_God_Api/Services/MissionProgressService.cs +++ b/Build_God_Api/Build_God_Api/Services/MissionProgressService.cs @@ -73,15 +73,27 @@ namespace Build_God_Api.Services public async Task> GetCharacterProgress(int characterId, int missionId) { + var dailyMission = await db.Queryable() + .Where(x => x.CharacterId == characterId && x.MissionId == missionId && x.Status != DailyMissionStatus.Claimed) + .OrderBy(x => x.AssignedDate, OrderByType.Desc) + .OrderBy(x => x.Id, OrderByType.Desc) + .FirstAsync(); + + if (dailyMission == null) + return new List(); + return await db.Queryable() - .Where(x => x.CharacterId == characterId && x.MissionId == missionId) + .Where(x => x.DailyMissionId == dailyMission.Id) .ToListAsync(); } public async Task UpdateCharacterProgress(int characterId, int missionProgressId, int count) { var progress = await db.Queryable() - .FirstAsync(x => x.CharacterId == characterId && x.MissionProgressId == missionProgressId); + .Where(x => x.CharacterId == characterId && x.MissionProgressId == missionProgressId && x.DailyMissionId > 0) + .OrderBy(x => x.UpdatedOn, OrderByType.Desc) + .OrderBy(x => x.Id, OrderByType.Desc) + .FirstAsync(); if (progress == null) throw new Exception("角色进度不存在"); @@ -100,9 +112,18 @@ namespace Build_God_Api.Services public async Task InitCharacterProgress(int characterId, int missionId) { + var dailyMission = await db.Queryable() + .Where(x => x.CharacterId == characterId && x.MissionId == missionId && x.Status != DailyMissionStatus.Claimed) + .OrderBy(x => x.AssignedDate, OrderByType.Desc) + .OrderBy(x => x.Id, OrderByType.Desc) + .FirstAsync(); + + if (dailyMission == null) + return true; + // 检查是否已经初始化过 var existing = await db.Queryable() - .AnyAsync(x => x.CharacterId == characterId && x.MissionId == missionId); + .AnyAsync(x => x.DailyMissionId == dailyMission.Id); if (existing) return true; @@ -118,6 +139,7 @@ namespace Build_God_Api.Services var characterProgress = new CharacterMissionProgress { CharacterId = characterId, + DailyMissionId = dailyMission.Id, MissionId = missionId, MissionProgressId = progress.Id, CurrentCount = 0, @@ -163,8 +185,7 @@ namespace Build_God_Api.Services // 获取角色进度 var characterProgress = await db.Queryable() .FirstAsync(x => - x.CharacterId == characterId && - x.MissionId == dailyMission.MissionId && + x.DailyMissionId == dailyMission.Id && x.MissionProgressId == matchingProgress.Id); if (characterProgress == null) @@ -172,6 +193,7 @@ namespace Build_God_Api.Services characterProgress = new CharacterMissionProgress { CharacterId = characterId, + DailyMissionId = dailyMission.Id, MissionId = dailyMission.MissionId, MissionProgressId = matchingProgress.Id, CurrentCount = 0, @@ -193,10 +215,11 @@ namespace Build_God_Api.Services // 检查任务是否全部完成 var allProgresses = await db.Queryable() - .Where(x => x.CharacterId == characterId && x.MissionId == dailyMission.MissionId) + .Where(x => x.DailyMissionId == dailyMission.Id) .ToListAsync(); - bool allCompleted = allProgresses.All(p => p.IsCompleted); + bool allCompleted = mission.Progresses.All(p => + allProgresses.Any(cp => cp.MissionProgressId == p.Id && cp.IsCompleted)); if (allCompleted) {