diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentDefineGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentDefineGetListOutputDto.cs new file mode 100644 index 00000000..e3a9effc --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentDefineGetListOutputDto.cs @@ -0,0 +1,39 @@ +using Volo.Abp.Application.Dtos; +using Yi.Framework.Bbs.Domain.Shared.Enums; + +namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Assignment; + +public class AssignmentDefineGetListOutputDto : EntityDto +{ + /// + /// 任务名称 + /// + public string Name { get; set; } + + /// + /// 备注 + /// + public string Remarks { get; set; } + + /// + /// 任务类型 + /// + public AssignmentTypeEnum AssignmentType { get; set; } + + /// + /// 总共步骤数 + /// + public int TotalStepNumber { get; set; } + + /// + /// 前置任务id + /// + public Guid? PreAssignmentId { get; set; } + + /// + /// 任务奖励的钱钱数量 + /// + public decimal RewardsMoneyNumber { get; set; } + + public int OrderNum { get; set; } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListInput.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListInput.cs index 4a0c8910..e999dcd8 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListInput.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListInput.cs @@ -4,5 +4,21 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Assignment; public class AssignmentGetListInput { + /// + /// 任务查询条件 + /// + public AssignmentQueryStateEnum? AssignmentQueryState { get; set; } +} + +public enum AssignmentQueryStateEnum +{ + /// + /// 正在进行 + /// + Progress, + /// + /// 已结束 + /// + End } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListOutputDto.cs index 27f02734..6a0026ea 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Assignment/AssignmentGetListOutputDto.cs @@ -1,8 +1,38 @@ using Volo.Abp.Application.Dtos; +using Yi.Framework.Bbs.Domain.Shared.Enums; namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Assignment; public class AssignmentGetListOutputDto:EntityDto { + /// + /// 当前步骤数 + /// + public int CurrentStepNumber { get; set; } + + /// + /// 总共步骤数 + /// + public int TotalStepNumber { get; set; } + + /// + /// 任务状态 + /// + public AssignmentStateEnum AssignmentState { get; set; } + + /// + /// 任务奖励的钱钱数量 + /// + public decimal RewardsMoneyNumber { get; set; } + /// + /// 任务过期时间 + /// + public DateTime? ExpireTime { get; set; } + + public DateTime? CompleteTime { get; set; } + + + public DateTime CreationTime { get; } + public int OrderNum { get; set; } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/AssignmentService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/AssignmentService.cs index d276e478..85f5db7c 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/AssignmentService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/AssignmentService.cs @@ -1,10 +1,11 @@ -using Microsoft.AspNetCore.Authorization; +using Mapster; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Users; using Yi.Framework.Bbs.Application.Contracts.Dtos.Assignment; using Yi.Framework.Bbs.Domain.Managers; +using Yi.Framework.Bbs.Domain.Shared.Enums; namespace Yi.Framework.Bbs.Application.Services; @@ -26,26 +27,49 @@ public class AssignmentService : ApplicationService /// /// [HttpPost("assignment/accept/{id}")] - public async Task AcceptAsync(Guid id) + public async Task AcceptAsync([FromRoute]Guid id) { await _assignmentManager.AcceptAsync(CurrentUser.GetId(), id); } /// - /// 接收任务奖励 + /// 领取任务奖励 /// /// - [HttpPost("assignment/receive-rewards/{id}")] - public async Task ReceiveRewardsAsync(Guid id) + [HttpPost("assignment/complete/{id}")] + public async Task ReceiveRewardsAsync([FromRoute]Guid id) { await _assignmentManager.ReceiveRewardsAsync(id); } /// - /// 查询任务 + /// 查看可接受的任务 /// - public async Task> GetListAsync(AssignmentGetListInput input) + /// + [HttpGet("assignment/receive")] + public async Task> GetCanReceiveListAsync() { - throw new NotImplementedException(); + var entities = await _assignmentManager.GetCanReceiveListAsync(CurrentUser.GetId()); + var output = entities.Adapt>(); + return output; + } + + /// + /// 查询接受的任务 + /// + [HttpGet("assignment")] + public async Task> GetListAsync([FromQuery]AssignmentGetListInput input) + { + var entities= await _assignmentManager._assignmentRepository._DbQueryable + .Where(x => x.UserId == CurrentUser.GetId()) + .WhereIF(input.AssignmentQueryState == AssignmentQueryStateEnum.Progress, + x => x.AssignmentState == AssignmentStateEnum.Progress) + .WhereIF(input.AssignmentQueryState == AssignmentQueryStateEnum.End, + x => x.AssignmentState == AssignmentStateEnum.Completed || + x.AssignmentState == AssignmentStateEnum.Expired) + .ToListAsync(); + + var output= entities.Adapt>(); + return output; } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentManager.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentManager.cs index 8ab3e89c..02b5fead 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentManager.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentManager.cs @@ -16,8 +16,8 @@ namespace Yi.Framework.Bbs.Domain.Managers; public class AssignmentManager : DomainService { private readonly IEnumerable _assignmentProviders; - private readonly ISqlSugarRepository _assignmentRepository; - private readonly ISqlSugarRepository _assignmentDefineRepository; + public readonly ISqlSugarRepository _assignmentRepository; + public readonly ISqlSugarRepository _assignmentDefineRepository; private readonly ILocalEventBus _localEventBus; public AssignmentManager(IEnumerable assignmentProviders, @@ -92,7 +92,7 @@ public class AssignmentManager : DomainService } output.DistinctBy(x => x.Id); - throw new NotImplementedException(); + return output; } @@ -134,6 +134,5 @@ public class AssignmentManager : DomainService { await _assignmentRepository._Db.Updateable(needUpdateEntities).ExecuteCommandAsync(); } - } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/DailyProvider.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/DailyProvider.cs index a51477a3..e5f7d33b 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/DailyProvider.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/DailyProvider.cs @@ -1,10 +1,12 @@ -using Yi.Framework.Bbs.Domain.Shared.Enums; +using Volo.Abp.DependencyInjection; +using Yi.Framework.Bbs.Domain.Shared.Enums; namespace Yi.Framework.Bbs.Domain.Managers.AssignmentProviders; /// /// 每日任务提供者 /// +[ExposeServices(typeof(IAssignmentProvider))] public class DailyProvider : TimerProvider { protected override AssignmentTypeEnum AssignmentType => AssignmentTypeEnum.Daily; diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/NoviceProvider.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/NoviceProvider.cs index d4ff0a02..6b2052f8 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/NoviceProvider.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/NoviceProvider.cs @@ -5,11 +5,12 @@ namespace Yi.Framework.Bbs.Domain.Managers.AssignmentProviders; /// /// 新手任务提供者 /// -public class NoviceProvider : IAssignmentProvider + public class NoviceProvider : IAssignmentProvider { - public Task> GetCanReceiveListAsync(AssignmentContext context) + public async Task> GetCanReceiveListAsync(AssignmentContext context) { //新手任务是要有前置依赖关系的,链表类型依赖 - throw new NotImplementedException(); + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/WeeklyProvider.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/WeeklyProvider.cs index 52d264d8..7ae3d6be 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/WeeklyProvider.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/Impl/WeeklyProvider.cs @@ -1,10 +1,12 @@ -using Yi.Framework.Bbs.Domain.Shared.Enums; +using Volo.Abp.DependencyInjection; +using Yi.Framework.Bbs.Domain.Shared.Enums; namespace Yi.Framework.Bbs.Domain.Managers.AssignmentProviders; /// /// 每周任务提供者 /// +[ExposeServices(typeof(IAssignmentProvider))] public class WeeklyProvider : TimerProvider { protected override AssignmentTypeEnum AssignmentType => AssignmentTypeEnum.Weekly; diff --git a/Yi.Bbs.Vue3/src/apis/assignmentApi.js b/Yi.Bbs.Vue3/src/apis/assignmentApi.js new file mode 100644 index 00000000..50cc58f5 --- /dev/null +++ b/Yi.Bbs.Vue3/src/apis/assignmentApi.js @@ -0,0 +1,33 @@ +import request from "@/config/axios/service"; + +//接受任务 +export function acceptAssignment(id) { + return request({ + url: `/assignment/accept/${id}`, + method: "post" + }); +} +//领取奖励 +export function receiveAssignment(id) { + return request({ + url: `/assignment/complete/${id}`, + method: "post", + }); +} + +//查询能够领取的任务 +export function getCanReceiveAssignment() { + return request({ + url: `/assignment/receive`, + method: "get", + }); +} + +//查询已领取的任务 +export function getAssignmentList(data) { + return request({ + url: `/assignment`, + method: "get", + params:data + }); +} \ No newline at end of file diff --git a/Yi.Bbs.Vue3/src/router/index.js b/Yi.Bbs.Vue3/src/router/index.js index 9413c399..71e3020e 100644 --- a/Yi.Bbs.Vue3/src/router/index.js +++ b/Yi.Bbs.Vue3/src/router/index.js @@ -156,6 +156,14 @@ const router = createRouter({ title: "银行", }, }, + { + name: "assignment", + path: "assignment", + component: () => import("../views/assignment/Index.vue"), + meta: { + title: "任务", + }, + }, ], }, diff --git a/Yi.Bbs.Vue3/src/views/assignment/Index.vue b/Yi.Bbs.Vue3/src/views/assignment/Index.vue new file mode 100644 index 00000000..4c889bdc --- /dev/null +++ b/Yi.Bbs.Vue3/src/views/assignment/Index.vue @@ -0,0 +1,18 @@ + + + \ No newline at end of file