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>
public int CharacterId { get; set; }
/// <summary>
/// 每日任务实例ID
/// </summary>
public int DailyMissionId { get; set; }
/// <summary>
/// 任务ID
/// </summary>

6
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<CharacterMissionProgress>()
.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<CharacterMissionProgress>()
.Where(cp => cp.CharacterId == characterId && cp.MissionId == dailyMission.MissionId)
.Where(cp => cp.DailyMissionId == dailyMission.Id)
.ToListAsync();
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>()
.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<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
{
@ -352,6 +352,7 @@ namespace Build_God_Api.Services
{
var missionConfig = await _db.Queryable<Mission>().FirstAsync(x => x.Id == mission.MissionId);
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();
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)
{
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>()
.Where(x => x.CharacterId == characterId && x.MissionId == missionId)
.Where(x => x.DailyMissionId == dailyMission.Id)
.ToListAsync();
}
public async Task<bool> UpdateCharacterProgress(int characterId, int missionProgressId, int count)
{
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)
throw new Exception("角色进度不存在");
@ -100,9 +112,18 @@ namespace Build_God_Api.Services
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>()
.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<CharacterMissionProgress>()
.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<CharacterMissionProgress>()
.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)
{

Loading…
Cancel
Save