Browse Source

任务过期的时候应该同步删除任务的进度

master
hanqin 2 weeks ago
parent
commit
c4d4692a45
  1. 5
      Build_God_Api/Build_God_Api/DB/CharacterMissionProgress.cs
  2. 6
      Build_God_Api/Build_God_Api/Services/BattleService.cs
  3. 5
      Build_God_Api/Build_God_Api/Services/DailyMissionService.cs
  4. 37
      Build_God_Api/Build_God_Api/Services/MissionProgressService.cs

5
Build_God_Api/Build_God_Api/DB/CharacterMissionProgress.cs

@ -12,6 +12,11 @@ namespace Build_God_Api.DB
/// </summary> /// </summary>
public int CharacterId { get; set; } public int CharacterId { get; set; }
/// <summary>
/// 每日任务实例ID
/// </summary>
public int DailyMissionId { get; set; }
/// <summary> /// <summary>
/// 任务ID /// 任务ID
/// </summary> /// </summary>

6
Build_God_Api/Build_God_Api/Services/BattleService.cs

@ -213,8 +213,7 @@ namespace Build_God_Api.Services
if (progress.TargetItemId == monsterId) if (progress.TargetItemId == monsterId)
{ {
var characterProgress = await _db.Queryable<CharacterMissionProgress>() var characterProgress = await _db.Queryable<CharacterMissionProgress>()
.Where(cp => cp.CharacterId == characterId .Where(cp => cp.DailyMissionId == dailyMission.Id
&& cp.MissionId == dailyMission.MissionId
&& cp.MissionProgressId == progress.Id) && cp.MissionProgressId == progress.Id)
.FirstAsync(); .FirstAsync();
@ -223,6 +222,7 @@ namespace Build_God_Api.Services
characterProgress = new CharacterMissionProgress characterProgress = new CharacterMissionProgress
{ {
CharacterId = characterId, CharacterId = characterId,
DailyMissionId = dailyMission.Id,
MissionId = dailyMission.MissionId, MissionId = dailyMission.MissionId,
MissionProgressId = progress.Id, MissionProgressId = progress.Id,
CurrentCount = 1, CurrentCount = 1,
@ -244,7 +244,7 @@ namespace Build_God_Api.Services
// 检查任务是否全部完成 // 检查任务是否全部完成
var allProgresses = await _db.Queryable<CharacterMissionProgress>() var allProgresses = await _db.Queryable<CharacterMissionProgress>()
.Where(cp => cp.CharacterId == characterId && cp.MissionId == dailyMission.MissionId) .Where(cp => cp.DailyMissionId == dailyMission.Id)
.ToListAsync(); .ToListAsync();
var missionConfigProgresses = await _db.Queryable<MissionProgress>() var missionConfigProgresses = await _db.Queryable<MissionProgress>()

5
Build_God_Api/Build_God_Api/Services/DailyMissionService.cs

@ -134,7 +134,7 @@ namespace Build_God_Api.Services
var dailyMissions = await _db.Queryable<CharacterDailyMission>() var dailyMissions = await _db.Queryable<CharacterDailyMission>()
.Where(x => x.CharacterId == characterId) .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.AssignedDate)
.OrderByDescending(x => x.IsFromYesterday) .OrderByDescending(x => x.IsFromYesterday)
.ToListAsync(); .ToListAsync();
@ -200,7 +200,7 @@ namespace Build_God_Api.Services
foreach (var progress in mission.Progresses) foreach (var progress in mission.Progresses)
{ {
var characterProgress = await _db.Queryable<CharacterMissionProgress>() var characterProgress = await _db.Queryable<CharacterMissionProgress>()
.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 dto.Progresses.Add(new MissionProgressDto
{ {
@ -352,6 +352,7 @@ namespace Build_God_Api.Services
{ {
var missionConfig = await _db.Queryable<Mission>().FirstAsync(x => x.Id == mission.MissionId); var missionConfig = await _db.Queryable<Mission>().FirstAsync(x => x.Id == mission.MissionId);
var missionName = missionConfig?.Title ?? "每日任务"; var missionName = missionConfig?.Title ?? "每日任务";
await _db.Deleteable<CharacterMissionProgress>().Where(x => x.DailyMissionId == mission.Id).ExecuteCommandAsync();
await _db.Deleteable<CharacterDailyMission>().Where(x => x.Id == mission.Id).ExecuteCommandAsync(); await _db.Deleteable<CharacterDailyMission>().Where(x => x.Id == mission.Id).ExecuteCommandAsync();
var expireMessage = $"【{missionName}】由于没有完成已自动过期,并已为您分配新的任务,请按时完成任务吧!"; var expireMessage = $"【{missionName}】由于没有完成已自动过期,并已为您分配新的任务,请按时完成任务吧!";

37
Build_God_Api/Build_God_Api/Services/MissionProgressService.cs

@ -73,15 +73,27 @@ namespace Build_God_Api.Services
public async Task<List<CharacterMissionProgress>> GetCharacterProgress(int characterId, int missionId) public async Task<List<CharacterMissionProgress>> GetCharacterProgress(int characterId, int missionId)
{ {
var dailyMission = await db.Queryable<CharacterDailyMission>()
.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<CharacterMissionProgress>();
return await db.Queryable<CharacterMissionProgress>() return await db.Queryable<CharacterMissionProgress>()
.Where(x => x.CharacterId == characterId && x.MissionId == missionId) .Where(x => x.DailyMissionId == dailyMission.Id)
.ToListAsync(); .ToListAsync();
} }
public async Task<bool> UpdateCharacterProgress(int characterId, int missionProgressId, int count) public async Task<bool> UpdateCharacterProgress(int characterId, int missionProgressId, int count)
{ {
var progress = await db.Queryable<CharacterMissionProgress>() var progress = await db.Queryable<CharacterMissionProgress>()
.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) if (progress == null)
throw new Exception("角色进度不存在"); throw new Exception("角色进度不存在");
@ -100,9 +112,18 @@ namespace Build_God_Api.Services
public async Task<bool> InitCharacterProgress(int characterId, int missionId) public async Task<bool> InitCharacterProgress(int characterId, int missionId)
{ {
var dailyMission = await db.Queryable<CharacterDailyMission>()
.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<CharacterMissionProgress>() var existing = await db.Queryable<CharacterMissionProgress>()
.AnyAsync(x => x.CharacterId == characterId && x.MissionId == missionId); .AnyAsync(x => x.DailyMissionId == dailyMission.Id);
if (existing) if (existing)
return true; return true;
@ -118,6 +139,7 @@ namespace Build_God_Api.Services
var characterProgress = new CharacterMissionProgress var characterProgress = new CharacterMissionProgress
{ {
CharacterId = characterId, CharacterId = characterId,
DailyMissionId = dailyMission.Id,
MissionId = missionId, MissionId = missionId,
MissionProgressId = progress.Id, MissionProgressId = progress.Id,
CurrentCount = 0, CurrentCount = 0,
@ -163,8 +185,7 @@ namespace Build_God_Api.Services
// 获取角色进度 // 获取角色进度
var characterProgress = await db.Queryable<CharacterMissionProgress>() var characterProgress = await db.Queryable<CharacterMissionProgress>()
.FirstAsync(x => .FirstAsync(x =>
x.CharacterId == characterId && x.DailyMissionId == dailyMission.Id &&
x.MissionId == dailyMission.MissionId &&
x.MissionProgressId == matchingProgress.Id); x.MissionProgressId == matchingProgress.Id);
if (characterProgress == null) if (characterProgress == null)
@ -172,6 +193,7 @@ namespace Build_God_Api.Services
characterProgress = new CharacterMissionProgress characterProgress = new CharacterMissionProgress
{ {
CharacterId = characterId, CharacterId = characterId,
DailyMissionId = dailyMission.Id,
MissionId = dailyMission.MissionId, MissionId = dailyMission.MissionId,
MissionProgressId = matchingProgress.Id, MissionProgressId = matchingProgress.Id,
CurrentCount = 0, CurrentCount = 0,
@ -193,10 +215,11 @@ namespace Build_God_Api.Services
// 检查任务是否全部完成 // 检查任务是否全部完成
var allProgresses = await db.Queryable<CharacterMissionProgress>() var allProgresses = await db.Queryable<CharacterMissionProgress>()
.Where(x => x.CharacterId == characterId && x.MissionId == dailyMission.MissionId) .Where(x => x.DailyMissionId == dailyMission.Id)
.ToListAsync(); .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) if (allCompleted)
{ {

Loading…
Cancel
Save