修改代码逻辑,修改配置文件
This commit is contained in:
@ -34,7 +34,7 @@ public interface IUserAnswerTaskService : IBaseService<JournalPageTaskUserAnswer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取用户答题任务列表
|
/// 获取用户答题任务列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="catalogId">二级目录Id(JournalCatalogId)</param>
|
/// <param name="catalogId">二级目录Id(CatalogId)</param>
|
||||||
/// <param name="userId">用户Id</param>
|
/// <param name="userId">用户Id</param>
|
||||||
/// <returns>答题任务列表</returns>
|
/// <returns>答题任务列表</returns>
|
||||||
Task<UserAnswerTaskListOutput> GetUserAnswerTaskListAsync(long catalogId, long userId);
|
Task<UserAnswerTaskListOutput> GetUserAnswerTaskListAsync(long catalogId, long userId);
|
||||||
@ -50,10 +50,10 @@ public interface IUserAnswerTaskService : IBaseService<JournalPageTaskUserAnswer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 领取任务积分
|
/// 领取任务积分
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="journalPageTaskGroupId">任务分组Id(JournalPageTask.GroupId)</param>
|
/// <param name="groupId">任务分组Id(JournalPageTask.GroupId)</param>
|
||||||
/// <param name="userId">用户Id</param>
|
/// <param name="userId">用户Id</param>
|
||||||
/// <returns>领取结果</returns>
|
/// <returns>领取结果</returns>
|
||||||
Task<ClaimTaskPointsOutput> ClaimTaskPointsAsync(long journalPageTaskGroupId, long userId);
|
Task<ClaimTaskPointsOutput> ClaimTaskPointsAsync(long groupId, long userId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 批量领取任务积分(一键领取)
|
/// 批量领取任务积分(一键领取)
|
||||||
@ -71,6 +71,14 @@ public interface IUserAnswerTaskService : IBaseService<JournalPageTaskUserAnswer
|
|||||||
/// <returns>杂志列表</returns>
|
/// <returns>杂志列表</returns>
|
||||||
Task<List<JournalListOutput>> GetJournalListAsync(long userId, string? queryType);
|
Task<List<JournalListOutput>> GetJournalListAsync(long userId, string? queryType);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 添加用户与杂志关联(绑定杂志)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="journalId">杂志ID</param>
|
||||||
|
/// <param name="userId">用户ID</param>
|
||||||
|
/// <returns>是否绑定成功(已绑定过返回false)</returns>
|
||||||
|
Task<bool> AddUserJournalAsync(long journalId, long userId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 新增学生
|
/// 新增学生
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -28,5 +28,5 @@ public class CatalogListOutput
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 二级栏目列表
|
/// 二级栏目列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<SecondCatalogOutput> Children { get; set; } = new();
|
public List<SecondCatalogOutput> Children { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@ public class ClaimTaskPointsOutput
|
|||||||
public string TaskName { get; set; }
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 题目得分(从 JournalPageTaskUserAnswer 表获取,跨页题目为所有相关任务得分之和)
|
/// 题目得分(从 JournalPageTaskUserAnswer 表获取,JournalPageTaskId == GroupId 的 Score)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float Score { get; set; }
|
public float Score { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,10 +23,20 @@ public class CrossPageTaskOutput
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 图片数组(已答题用PageAnswerUrl,未答题用TaskUrl)
|
/// 图片数组(已答题用PageAnswerUrl,未答题用TaskUrl)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<string> Images { get; set; } = new();
|
public List<string> Images { get; set; } = [];
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 页面作答点读图片地址集合(已答题返回,未答题返回空集合)
|
||||||
|
/// </summary>
|
||||||
|
public List<string> PageAnswerDotUrl { get; set; } = [];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否跨页题目
|
/// 是否跨页题目
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsCrossPage { get; set; }
|
public bool IsCrossPage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否可以领取积分(任务已完成且未领取过积分)
|
||||||
|
/// </summary>
|
||||||
|
public bool CanClaimPoints { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,24 +26,25 @@ public class UserAnswerTaskListOutput
|
|||||||
public int EndPage { get; set; }
|
public int EndPage { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 任务名称列表
|
/// 任务列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<string> TaskNames { get; set; } = new();
|
public List<UserAnswerTaskItemOutput> Tasks { get; set; } = new();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户答题任务项输出
|
||||||
|
/// </summary>
|
||||||
|
public class UserAnswerTaskItemOutput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 任务GroupId
|
||||||
|
/// </summary>
|
||||||
|
public long GroupId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 任务状态(进行中、已完成、未开始)
|
/// 任务名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Status { get; set; }
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 答题时间(分钟)
|
|
||||||
/// </summary>
|
|
||||||
public double AnswerMinutes { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 徽章个数
|
|
||||||
/// </summary>
|
|
||||||
public int MedalCount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 总成长值
|
/// 总成长值
|
||||||
@ -54,4 +55,14 @@ public class UserAnswerTaskListOutput
|
|||||||
/// 总积分
|
/// 总积分
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int TotalPoints { get; set; }
|
public int TotalPoints { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 答题时间(分钟)
|
||||||
|
/// </summary>
|
||||||
|
public double AnswerMinutes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务状态(进行中、已完成、未开始)
|
||||||
|
/// </summary>
|
||||||
|
public string Status { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -34,7 +34,7 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
public async Task<BaseResponse<List<JournalProgressOutput>>> GetProgressAsync()
|
public async Task<BaseResponse<List<JournalProgressOutput>>> GetProgressAsync()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var userId = GetCurrentUserId();
|
var userId = GetCurrentUserId();
|
||||||
if (userId == 0)
|
if (userId == 0)
|
||||||
{
|
{
|
||||||
@ -49,7 +49,8 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
_logger.LogError(ex, "获取学习进度失败,UserId: {UserId}", GetCurrentUserId());
|
_logger.LogError(ex, "获取学习进度失败,UserId: {UserId}", GetCurrentUserId());
|
||||||
return BaseResponse<List<JournalProgressOutput>>.Fail("获取学习进度失败,请稍后重试");
|
return BaseResponse<List<JournalProgressOutput>>.Fail("获取学习进度失败,请稍后重试");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取目录列表(按一级目录分组,二级目录含完成状态)
|
/// 获取目录列表(按一级目录分组,二级目录含完成状态)
|
||||||
@ -57,7 +58,7 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
/// <param name="journalId">期刊Id</param>
|
/// <param name="journalId">期刊Id</param>
|
||||||
/// <returns>按一级目录分组的目录列表</returns>
|
/// <returns>按一级目录分组的目录列表</returns>
|
||||||
[HttpGet("catalog-list/{journalId:long}")]
|
[HttpGet("catalog-list/{journalId:long}")]
|
||||||
public async Task<BaseResponse<List<CatalogListOutput>>> GetCatalogListAsync([Required] long journalId)
|
public async Task<BaseResponse<List<CatalogListOutput>>> GetCatalogListAsync([Required(ErrorMessage = "参数错误")] long journalId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -88,7 +89,7 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
/// <param name="catalogId">一级目录Id</param>
|
/// <param name="catalogId">一级目录Id</param>
|
||||||
/// <returns>一级目录概览数据</returns>
|
/// <returns>一级目录概览数据</returns>
|
||||||
[HttpGet("catalog-overview/{catalogId:long}")]
|
[HttpGet("catalog-overview/{catalogId:long}")]
|
||||||
public async Task<BaseResponse<CatalogOverviewOutput>> GetCatalogOverviewAsync([Required] long catalogId)
|
public async Task<BaseResponse<CatalogOverviewOutput>> GetCatalogOverviewAsync([Required(ErrorMessage = "参数错误")] long catalogId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -124,7 +125,7 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
/// <param name="catalogId">二级目录Id</param>
|
/// <param name="catalogId">二级目录Id</param>
|
||||||
/// <returns>答题任务列表</returns>
|
/// <returns>答题任务列表</returns>
|
||||||
[HttpGet("task-list/{catalogId:long}")]
|
[HttpGet("task-list/{catalogId:long}")]
|
||||||
public async Task<BaseResponse<UserAnswerTaskListOutput>> GetTaskListAsync([Required] long catalogId)
|
public async Task<BaseResponse<UserAnswerTaskListOutput>> GetTaskListAsync([Required(ErrorMessage = "参数错误")] long catalogId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -160,7 +161,7 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
/// <param name="journalPageTaskId">任务Id</param>
|
/// <param name="journalPageTaskId">任务Id</param>
|
||||||
/// <returns>跨页题目详情</returns>
|
/// <returns>跨页题目详情</returns>
|
||||||
[HttpGet("cross-page-task/{journalPageTaskId:long}")]
|
[HttpGet("cross-page-task/{journalPageTaskId:long}")]
|
||||||
public async Task<BaseResponse<CrossPageTaskOutput>> GetCrossPageTaskAsync([Required] long journalPageTaskId)
|
public async Task<BaseResponse<CrossPageTaskOutput>> GetCrossPageTaskAsync([Required(ErrorMessage ="参数错误")] long journalPageTaskId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -193,10 +194,10 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 领取任务积分
|
/// 领取任务积分
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="journalPageTaskGroupId">任务分组Id(JournalPageTask.GroupId)</param>
|
/// <param name="groupId">任务分组Id(GroupId)</param>
|
||||||
/// <returns>领取结果</returns>
|
/// <returns>领取结果</returns>
|
||||||
[HttpPost("claim-points/{journalPageTaskGroupId:long}")]
|
[HttpPost("claim-points/{groupId:long}")]
|
||||||
public async Task<BaseResponse<ClaimTaskPointsOutput>> ClaimTaskPointsAsync([Required] long journalPageTaskGroupId)
|
public async Task<BaseResponse<ClaimTaskPointsOutput>> ClaimTaskPointsAsync([Required(ErrorMessage = "参数错误")] long groupId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -206,22 +207,22 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
return BaseResponse<ClaimTaskPointsOutput>.Fail(ResultCode.DENY, "未获取到用户信息");
|
return BaseResponse<ClaimTaskPointsOutput>.Fail(ResultCode.DENY, "未获取到用户信息");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (journalPageTaskGroupId <= 0)
|
if (groupId <= 0)
|
||||||
{
|
{
|
||||||
return BaseResponse<ClaimTaskPointsOutput>.Fail(ResultCode.PARAM_ERROR, "任务分组Id不能为空");
|
return BaseResponse<ClaimTaskPointsOutput>.Fail(ResultCode.PARAM_ERROR, "任务分组Id不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = await _userAnswerTaskService.ClaimTaskPointsAsync(journalPageTaskGroupId, userId);
|
var result = await _userAnswerTaskService.ClaimTaskPointsAsync(groupId, userId);
|
||||||
return Success(result);
|
return Success(result);
|
||||||
}
|
}
|
||||||
catch (BusinessException ex)
|
catch (BusinessException ex)
|
||||||
{
|
{
|
||||||
_logger.LogWarning(ex, "领取任务积分业务异常,JournalPageTaskGroupId: {JournalPageTaskGroupId}, UserId: {UserId}", journalPageTaskGroupId, GetCurrentUserId());
|
_logger.LogWarning(ex, "领取任务积分业务异常,groupId: {groupId}, UserId: {UserId}", groupId, GetCurrentUserId());
|
||||||
return BaseResponse<ClaimTaskPointsOutput>.Fail(ex.Message);
|
return BaseResponse<ClaimTaskPointsOutput>.Fail(ex.Message);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "领取任务积分失败,JournalPageTaskGroupId: {JournalPageTaskGroupId}, UserId: {UserId}", journalPageTaskGroupId, GetCurrentUserId());
|
_logger.LogError(ex, "领取任务积分失败,groupId: {groupId}, UserId: {UserId}", groupId, GetCurrentUserId());
|
||||||
return BaseResponse<ClaimTaskPointsOutput>.Fail("领取任务积分失败,请稍后重试");
|
return BaseResponse<ClaimTaskPointsOutput>.Fail("领取任务积分失败,请稍后重试");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -265,10 +266,10 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取杂志列表
|
/// 获取杂志列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="queryType">查询类型:Bound=已绑定,Unbound=未绑定(添加书籍用),默认是:Bound</param>
|
/// <param name="queryType">查询类型:bound=已绑定,unbound=未绑定(添加杂志用列表),默认是:bound</param>
|
||||||
/// <returns>杂志列表</returns>
|
/// <returns>杂志列表</returns>
|
||||||
[HttpGet("journal-list")]
|
[HttpGet("journal-list")]
|
||||||
public async Task<BaseResponse<List<JournalListOutput>>> GetJournalListAsync([FromQuery] string? queryType = "Bound")
|
public async Task<BaseResponse<List<JournalListOutput>>> GetJournalListAsync(string? queryType = "bound")
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -293,6 +294,37 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 绑定杂志(添加用户与杂志关联)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="journalId">杂志ID</param>
|
||||||
|
/// <returns>是否绑定成功(已绑定过返回false)</returns>
|
||||||
|
[HttpPost("add-user-journal/{journalId:long}")]
|
||||||
|
public async Task<BaseResponse<bool>> AddUserJournalAsync([Required(ErrorMessage = "参数错误")] long journalId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var userId = GetCurrentUserId();
|
||||||
|
if (userId == 0)
|
||||||
|
{
|
||||||
|
return BaseResponse<bool>.Fail(ResultCode.DENY, "未获取到用户信息");
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = await _userAnswerTaskService.AddUserJournalAsync(journalId, userId);
|
||||||
|
return Success(result);
|
||||||
|
}
|
||||||
|
catch (BusinessException ex)
|
||||||
|
{
|
||||||
|
_logger.LogWarning(ex, "绑定杂志业务异常,UserId: {UserId}, JournalId: {JournalId}", GetCurrentUserId(), journalId);
|
||||||
|
return BaseResponse<bool>.Fail(ex.Message);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "绑定杂志失败,UserId: {UserId}, JournalId: {JournalId}", GetCurrentUserId(), journalId);
|
||||||
|
return BaseResponse<bool>.Fail("绑定杂志失败,请稍后重试");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 新增学生
|
/// 新增学生
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -308,8 +340,11 @@ public class UserAnswerTaskController : WeChatBaseController
|
|||||||
{
|
{
|
||||||
return BaseResponse<bool>.Fail(ResultCode.DENY, "未获取到用户信息");
|
return BaseResponse<bool>.Fail(ResultCode.DENY, "未获取到用户信息");
|
||||||
}
|
}
|
||||||
|
if (GetCurrentWxUserId() == null)
|
||||||
var result = await _userAnswerTaskService.AddStudentAsync(input, GetCurrentWxUserId().Value);
|
{
|
||||||
|
return BaseResponse<bool>.Fail(ResultCode.DENY, "未获取到微信信息");
|
||||||
|
}
|
||||||
|
var result = await _userAnswerTaskService.AddStudentAsync(input, GetCurrentWxUserId()!.Value);
|
||||||
return Success(result);
|
return Success(result);
|
||||||
}
|
}
|
||||||
catch (BusinessException ex)
|
catch (BusinessException ex)
|
||||||
|
|||||||
@ -22,8 +22,10 @@
|
|||||||
"ClientProvidedName": "Custom connection name"
|
"ClientProvidedName": "Custom connection name"
|
||||||
},
|
},
|
||||||
"WeChatSettings": {
|
"WeChatSettings": {
|
||||||
"AppId": "wx5d8f281c2fd6594c",
|
//"AppId": "wx5d8f281c2fd6594c",
|
||||||
"AppSecret": "974f45e4a0aaa075278db0477d0bd8b6"
|
//"AppSecret": "974f45e4a0aaa075278db0477d0bd8b6"
|
||||||
|
"AppId": "a",
|
||||||
|
"AppSecret": "a"
|
||||||
},
|
},
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"MinimumLevel": {
|
"MinimumLevel": {
|
||||||
|
|||||||
Reference in New Issue
Block a user