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)
{