新增微信接口以及一些问天

This commit is contained in:
2026-06-24 16:32:59 +08:00
parent 16ad80f2a8
commit 00fa7a21f6
23 changed files with 2079 additions and 180 deletions

View File

@ -0,0 +1,18 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService
{
/// <summary>
/// 新增学生输入
/// </summary>
public class AddStudentInput
{
/// <summary>
/// 昵称
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
}
}

View File

@ -0,0 +1,43 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService
{
/// <summary>
/// 新增学生输出
/// </summary>
public class AddStudentOutput
{
/// <summary>
/// 学生Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 关联微信用户Id
/// </summary>
public long WxUserId { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 用户类型
/// </summary>
public string Type { get; set; } = "Normal";
/// <summary>
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// 积分余额
/// </summary>
public int Points { get; set; }
}
}

View File

@ -0,0 +1,59 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 批量领取任务积分输入
/// </summary>
public class BatchClaimPointsInput
{
/// <summary>
/// 任务分组Id列表JournalPageTaskGroupId
/// </summary>
public List<long> GroupIds { get; set; } = new();
}
/// <summary>
/// 批量领取任务积分输出
/// </summary>
public class BatchClaimPointsOutput
{
/// <summary>
/// 成功领取数量
/// </summary>
public int SuccessCount { get; set; }
/// <summary>
/// 失败数量
/// </summary>
public int FailCount { get; set; }
/// <summary>
/// 累计获得积分
/// </summary>
public int TotalPoints { get; set; }
/// <summary>
/// 领取后积分余额
/// </summary>
public int BalanceAfter { get; set; }
/// <summary>
/// 失败详情
/// </summary>
public List<BatchClaimFailItem> FailItems { get; set; } = new();
}
/// <summary>
/// 批量领取失败项
/// </summary>
public class BatchClaimFailItem
{
/// <summary>
/// 任务分组Id
/// </summary>
public long GroupId { get; set; }
/// <summary>
/// 失败原因
/// </summary>
public string Message { get; set; }
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 目录列表输出(按一级目录分组)
/// </summary>
public class CatalogListOutput
{
/// <summary>
/// 一级目录ID
/// </summary>
public long CatalogId { get; set; }
/// <summary>
/// 一级目录名称
/// </summary>
public string CatalogName { get; set; }
/// <summary>
/// 杂志名称
/// </summary>
public string JournalName { get; set; }
/// <summary>
/// 文章篇数
/// </summary>
public int ArticleCount { get; set; }
/// <summary>
/// 二级栏目列表
/// </summary>
public List<SecondCatalogOutput> Children { get; set; } = new();
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 一级目录概览输出(含二级目录详情列表)
/// </summary>
public class CatalogOverviewOutput
{
/// <summary>
/// 一级目录ID
/// </summary>
public long CatalogId { get; set; }
/// <summary>
/// 一级目录名称
/// </summary>
public string FirstLevelCatalogName { get; set; }
/// <summary>
/// 文章篇数(该一级目录下 JournalPage 的个数)
/// </summary>
public int PageCount { get; set; }
/// <summary>
/// 总任务数(该一级目录下所有 JournalPageTask 的条数)
/// </summary>
public int TotalTaskCount { get; set; }
/// <summary>
/// 二级目录详情列表
/// </summary>
public List<SubCatalogDetailOutput> SubCatalogs { get; set; } = new();
}

View File

@ -0,0 +1,37 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 目录任务详情输出(含任务列表和徽章数)
/// </summary>
public class CatalogTaskDetailOutput
{
/// <summary>
/// 目录ID
/// </summary>
public long CatalogId { get; set; }
/// <summary>
/// 目录名称
/// </summary>
public string CatalogName { get; set; }
/// <summary>
/// 杂志起始页码
/// </summary>
public int StartPage { get; set; }
/// <summary>
/// 杂志结束页码
/// </summary>
public int EndPage { get; set; }
/// <summary>
/// 徽章个数
/// </summary>
public int MedalCount { get; set; }
/// <summary>
/// 任务列表
/// </summary>
public List<TaskStatusOutput> Tasks { get; set; } = new();
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 领取任务积分输出
/// </summary>
public class ClaimTaskPointsOutput
{
/// <summary>
/// 积分流水记录Id
/// </summary>
public long RecordId { get; set; }
/// <summary>
/// 操作前积分余额
/// </summary>
public int PreviousBalance { get; set; }
/// <summary>
/// 操作后积分余额
/// </summary>
public int NewBalance { get; set; }
/// <summary>
/// 实际增加数量
/// </summary>
public int AddedAmount { get; set; }
/// <summary>
/// 任务名称
/// </summary>
public string TaskName { get; set; }
}

View File

@ -0,0 +1,27 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 跨页题目详情输出
/// </summary>
public class CrossPageTaskOutput
{
/// <summary>
/// 栏目名称
/// </summary>
public string CatalogName { get; set; }
/// <summary>
/// 任务名称
/// </summary>
public string TaskName { get; set; }
/// <summary>
/// 图片数组已答题用PageAnswerUrl未答题用TaskUrl
/// </summary>
public List<string> Images { get; set; } = new();
/// <summary>
/// 是否跨页题目
/// </summary>
public bool IsCrossPage { get; set; }
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 杂志列表输出
/// </summary>
public class JournalListOutput
{
/// <summary>
/// 杂志Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 杂志名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 杂志标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 封面
/// </summary>
public string Cover { get; set; }
/// <summary>
/// 是否已绑定
/// </summary>
public bool IsBound { get; set; }
}

View File

@ -0,0 +1,57 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 用户期刊学习进度输出(按期刊分组)
/// </summary>
public class JournalProgressOutput
{
/// <summary>
/// 期刊ID
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// 期刊名称
/// </summary>
public string JournalName { get; set; }
/// <summary>
/// 栏目数(一级目录个数)
/// </summary>
public int CatalogCount { get; set; }
/// <summary>
/// 任务总数(该期刊下 JournalPageTask 的条数)
/// </summary>
public int TotalTaskCount { get; set; }
/// <summary>
/// 已完成任务数(按 JournalPageTaskGroupId 去重同一题跨页算1个
/// </summary>
public int CompletedTaskCount { get; set; }
/// <summary>
/// 成长值(已完成任务的 GrowthPoint 累加)
/// </summary>
public int TotalGrowthPoints { get; set; }
/// <summary>
/// 积分值(已完成任务的 Points 累加)
/// </summary>
public int TotalPoints { get; set; }
/// <summary>
/// 进度百分比已完成任务ID数 / 总任务数 × 100
/// </summary>
public double Progress { get; set; }
/// <summary>
/// 剩余篇数(该期刊总页数 - 用户已作答页数)
/// </summary>
public int RemainingPages { get; set; }
/// <summary>
/// 连续打卡天数
/// </summary>
public int ConsecutiveDays { get; set; }
}

View File

@ -0,0 +1,32 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 二级栏目输出
/// </summary>
public class SecondCatalogOutput
{
/// <summary>
/// 二级栏目ID
/// </summary>
public long CatalogId { get; set; }
/// <summary>
/// 二级栏目名称
/// </summary>
public string CatalogName { get; set; }
/// <summary>
/// 总积分值
/// </summary>
public int TotalPoints { get; set; }
/// <summary>
/// 总成长值
/// </summary>
public int TotalGrowthPoints { get; set; }
/// <summary>
/// 状态:未开始 / 进行中 / 已完成
/// </summary>
public string Status { get; set; }
}

View File

@ -0,0 +1,37 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 二级目录详情输出(含页码范围、任务数、完成状态)
/// </summary>
public class SubCatalogDetailOutput
{
/// <summary>
/// 二级目录ID
/// </summary>
public long CatalogId { get; set; }
/// <summary>
/// 二级目录名字
/// </summary>
public string SecondLevelCatalogName { get; set; }
/// <summary>
/// 起始页码(杂志第几页开始)
/// </summary>
public int StartPage { get; set; }
/// <summary>
/// 结束页码(杂志第几页结束)
/// </summary>
public int EndPage { get; set; }
/// <summary>
/// 任务数量
/// </summary>
public int TaskCount { get; set; }
/// <summary>
/// 状态描述格式如1/2 进行中、2/2 已完成、0/2 未开始)
/// </summary>
public string Status { get; set; }
}

View File

@ -0,0 +1,27 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 任务状态输出
/// </summary>
public class TaskStatusOutput
{
/// <summary>
/// 任务ID
/// </summary>
public long TaskId { get; set; }
/// <summary>
/// 任务名字
/// </summary>
public string TaskName { get; set; }
/// <summary>
/// 任务状态:未开始 / 进行中 / 已完成
/// </summary>
public string Status { get; set; }
/// <summary>
/// 答题时间(分钟,由 AnswerSeconds 累加后转换)
/// </summary>
public double AnswerTime { get; set; }
}

View File

@ -0,0 +1,52 @@
namespace QYZH.InteractiveMagazine.Models.Dto.UserAnswerTaskService;
/// <summary>
/// 用户答题任务列表输出
/// </summary>
public class UserAnswerTaskListOutput
{
/// <summary>
/// 目录名称
/// </summary>
public string CatalogName { get; set; }
/// <summary>
/// 开始页码
/// </summary>
public int StartPage { get; set; }
/// <summary>
/// 结束页码
/// </summary>
public int EndPage { get; set; }
/// <summary>
/// 任务名称列表
/// </summary>
public List<string> TaskNames { get; set; } = new();
/// <summary>
/// 任务状态(进行中、已完成、未开始)
/// </summary>
public string Status { get; set; }
/// <summary>
/// 答题时间(分钟)
/// </summary>
public double AnswerMinutes { get; set; }
/// <summary>
/// 徽章个数
/// </summary>
public int MedalCount { get; set; }
/// <summary>
/// 总成长值
/// </summary>
public int TotalGrowthPoints { get; set; }
/// <summary>
/// 总积分
/// </summary>
public int TotalPoints { get; set; }
}

View File

@ -1,7 +1,4 @@
using SqlSugar;
using System;
using System.Linq;
using System.Text;
namespace QYZH.InteractiveMagazine.Models.Entity
{
@ -9,208 +6,203 @@ namespace QYZH.InteractiveMagazine.Models.Entity
///杂志任务用户作答记录;
///</summary>
[SugarTable("JournalPageTaskUserAnswer")]
public partial class JournalPageTaskUserAnswer : SqlSugarBaseEntity
public class JournalPageTaskUserAnswer : SqlSugarBaseEntity
{
public JournalPageTaskUserAnswer(){
/// <summary>
/// Desc:书id
/// Default:
/// Nullable:False
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// Desc:书页id
/// Default:
/// Nullable:False
/// </summary>
public long JournalPageId { get; set; }
}
/// <summary>
/// Desc:任务id
/// Default:
/// Nullable:False
/// </summary>
public long JournalPageTaskId { get; set; }
/// <summary>
/// Desc:id
/// Default:
/// Nullable:False
/// </summary>
public long JournalId {get;set;}
/// <summary>
/// Desc:任务分组id
/// Default:
/// Nullable:False
/// </summary>
public long JournalPageTaskGroupId { get; set; }
/// <summary>
/// Desc:书页id
/// Default:
/// Nullable:False
/// </summary>
public long JournalPageId {get;set;}
/// <summary>
/// Desc:用户id
/// Default:
/// Nullable:False
/// </summary>
public long UserId { get; set; }
/// <summary>
/// Desc:任务id
/// Default:
/// Nullable:False
/// </summary>
public long JournalPageTaskId {get;set;}
/// <summary>
/// Desc:作答结果
/// Default:
/// Nullable:True
/// </summary>
public string Result { get; set; }
/// <summary>
/// Desc:任务分组id
/// Default:
/// Nullable:False
/// </summary>
public long JournalPageTaskGroupId {get;set;}
/// <summary>
/// Desc:积分
/// Default:0
/// Nullable:False
/// </summary>
public float Points { get; set; }
/// <summary>
/// Desc:用户id
/// Default:
/// Nullable:False
/// </summary>
public long UserId {get;set;}
/// <summary>
/// Desc:成长值
/// Default:0
/// Nullable:False
/// </summary>
public float GrowthPoints { get; set; }
/// <summary>
/// Desc:作答结果
/// Default:
/// Nullable:True
/// </summary>
public string Result {get;set;}
/// <summary>
/// Desc:题目作答图片地址
/// Default:
/// Nullable:True
/// </summary>
public string QuestionAnswerUrl { get; set; }
/// <summary>
/// Desc:积分
/// Default:0
/// Nullable:False
/// </summary>
public float Points {get;set;}
/// <summary>
/// Desc:答案图片地址
/// Default:
/// Nullable:True
/// </summary>
public string AnswerUrl { get; set; }
/// <summary>
/// Desc:成长值
/// Default:0
/// Nullable:False
/// </summary>
public float GrowthPoints {get;set;}
/// <summary>
/// Desc:页面作答图片地址
/// Default:
/// Nullable:True
/// </summary>
public string PageAnswerUrl { get; set; }
/// <summary>
/// Desc:题目作答图片地址
/// Default:
/// Nullable:True
/// </summary>
public string QuestionAnswerUrl {get;set;}
/// <summary>
/// Desc:乐观锁
/// Default:
/// Nullable:False
/// </summary>
public int Revision { get; set; }
/// <summary>
/// Desc:答案图片地址
/// Default:
/// Nullable:True
/// </summary>
public string AnswerUrl {get;set;}
/// <summary>
/// Desc:作答状态
/// Default:
/// Nullable:False
/// </summary>
public int AnswerStatus { get; set; }
/// <summary>
/// Desc:页面作答图片地址
/// Default:
/// Nullable:True
/// </summary>
public string PageAnswerUrl {get;set;}
/// <summary>
/// Desc:作答开始时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime AnswerStartTime { get; set; }
/// <summary>
/// Desc:乐观锁
/// Default:
/// Nullable:False
/// </summary>
public int Revision {get;set;}
/// <summary>
/// Desc:作答结束时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime AnswerEndTime { get; set; }
/// <summary>
/// Desc:作答状态
/// Default:
/// Nullable:False
/// </summary>
public int AnswerStatus {get;set;}
/// <summary>
/// Desc:作答耗时(秒)
/// Default:0
/// Nullable:False
/// </summary>
public int AnswerSeconds { get; set; }
/// <summary>
/// Desc:作答开始时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime AnswerStartTime {get;set;}
/// <summary>
/// Desc:图像识别结果
/// Default:
/// Nullable:False
/// </summary>
public int ImageRecognition { get; set; }
/// <summary>
/// Desc:作答结束时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime AnswerEndTime {get;set;}
/// <summary>
/// Desc:书页序号
/// Default:
/// Nullable:False
/// </summary>
public int JournalPageNum { get; set; }
/// <summary>
/// Desc:作答耗时(秒)
/// Default:0
/// Nullable:False
/// </summary>
public int AnswerSeconds {get;set;}
/// <summary>
/// Desc:修改次数
/// Default:
/// Nullable:False
/// </summary>
public int Modify { get; set; }
/// <summary>
/// Desc:图像识别结果
/// Default:
/// Nullable:False
/// </summary>
public int ImageRecognition {get;set;}
/// <summary>
/// Desc:最后标签id
/// Default:
/// Nullable:False
/// </summary>
public long LastTag { get; set; }
/// <summary>
/// Desc:书页序号
/// Default:
/// Nullable:False
/// </summary>
public int JournalPageNum {get;set;}
/// <summary>
/// Desc:点读书页序号
/// Default:
/// Nullable:False
/// </summary>
public int DotPageNum { get; set; }
/// <summary>
/// Desc:修改次数
/// Default:
/// Nullable:False
/// </summary>
public int Modify {get;set;}
/// <summary>
/// Desc:页面结果图片地址
/// Default:
/// Nullable:True
/// </summary>
public string PageResultUrl { get; set; }
/// <summary>
/// Desc:最后标签id
/// Default:
/// Nullable:False
/// </summary>
public long LastTag {get;set;}
/// <summary>
/// Desc:题型
/// Default:
/// Nullable:True
/// </summary>
public string Type { get; set; }
/// <summary>
/// Desc:点读书页
/// Default:
/// Nullable:False
/// </summary>
public int DotPageNum {get;set;}
/// <summary>
/// Desc:点读书页
/// Default:
/// Nullable:True
/// </summary>
public string DotPageNo { get; set; }
/// <summary>
/// Desc:页面结果图片地址
/// Default:
/// Nullable:True
/// </summary>
public string PageResultUrl {get;set;}
/// <summary>
/// Desc:页面作答点读图片地址
/// Default:
/// Nullable:True
/// </summary>
public string PageAnswerDotUrl { get; set; }
/// <summary>
/// Desc:题型
/// Default:
/// Nullable:True
/// </summary>
public string Type {get;set;}
/// <summary>
/// Desc:中断次数
/// Default:0
/// Nullable:False
/// </summary>
public int BreakCount { get; set; }
/// <summary>
/// Desc:点读书页编号
/// Default:
/// Nullable:True
/// </summary>
public string DotPageNo {get;set;}
/// <summary>
/// Desc:中断时间记录
/// Default:
/// Nullable:True
/// </summary>
public string BreakTimes { get; set; }
/// <summary>
/// Desc:页面作答点读图片地址
/// Default:
/// Nullable:True
/// </summary>
public string PageAnswerDotUrl {get;set;}
/// <summary>
/// Desc:中断次数
/// Default:0
/// Nullable:False
/// </summary>
public int BreakCount {get;set;}
/// <summary>
/// Desc:中断时间记录
/// Default:
/// Nullable:True
/// </summary>
public string BreakTimes {get;set;}
/// <summary>
/// Desc:作业状态
/// Default:
/// Nullable:True
/// </summary>
public string AssignmentStatus {get;set;}
/// <summary>
/// Desc:作业状态
/// Default:
/// Nullable:True
/// </summary>
public string AssignmentStatus { get; set; }
}
}

View File

@ -25,7 +25,7 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Default:
/// Nullable:False
/// </summary>
public int MedalId {get;set;}
public long MedalId {get;set;}
/// <summary>
/// Desc:获得时间

View File

@ -0,0 +1,21 @@
using System.ComponentModel;
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 学生答题的完成状态0-进行中1-已完成,未开始(没有数据)
/// </summary>
public enum UserAnswerStatusEnum
{
/// <summary>
/// 进行中
/// </summary>
[Description("进行中")]
Processing = 0,
/// <summary>
/// 已完成
/// </summary>
[Description("已完成")]
Complete = 1,
}