package com.gyf.lib.util import androidx.annotation.IntRange import com.gyf.lib.uikit.StringForm import java.util.* /** * 一般信息 * */ abstract class PersonInfoVo { abstract val name: String abstract val headImg: String? abstract val desc: String } enum class Duty(val desc: String, val level: Int) { Teacher("老师", 1), PamphaBhusal("总部长", 2), SecretaryOfTheMinister("秘书部部长", 3), PropagandaDepartment("宣传部部长", 3), LiaisonMinister("外联部部长", 3), SecretaryDepartmentOfficer("秘书部干事", 4), PublicityDepartmentOfficer("宣传部干事", 4), LiaisonOfficer("外联部干事", 4); /** * 是否是部门部长 * */ fun isMinister(): Boolean { return minister.contains(this) } fun isOfficer(): Boolean { return officer.contains(this) } } private val minister = arrayOf(Duty.SecretaryOfTheMinister, Duty.LiaisonMinister, Duty.PropagandaDepartment) private val officer = arrayOf(Duty.SecretaryDepartmentOfficer, Duty.PublicityDepartmentOfficer, Duty.LiaisonOfficer) /** * 个人信息 * */ abstract class OwnInfoVo : PersonInfoVo() { abstract val token: Token } data class ManagerInfoVo( val duty: Duty, override val name: String, override val headImg: String?, override val desc: String ) : PersonInfoVo() data class UserInfoVo( override val name: String, override val headImg: String?, override val desc: String ) : PersonInfoVo() /** * 管理员个人信息 * * @property account 管理员账号 * @property name 姓名 * @property duty 职务 * @property headImg 头像 * @property desc 个人简介 */ data class ManagerVo( val account: String, val duty: Duty, override val token: Token, override val name: String, override val headImg: String?, override val desc: String ) : OwnInfoVo() /** * 用户个人信息 * * @property studentId 学号 * @property name 姓名 * @property headImg 头像 * @property desc 个人简介 */ data class UserVo( val studentId: String, val manager: ManagerVo? = null, override val token: Token, override val name: String, override val headImg: String?, override val desc: String, val associationMemberVo: AssociationMemberVo? ) : OwnInfoVo() data class PageDto(val currentPage: Long, val pageSize: Int = 10) data class NotificationDto( val receiverId: Int, val receiverClient: ClientType, val page: PageDto? = null, override val clientType: ClientType = receiverClient ) : ClientBaseVo() data class UserRegVo(val studentId: String, val name: String) /** * 客户端类型 * */ enum class ClientType { //前台 Foreground, //后台 Background } data class NotificationVo(val title: String, val content: String, val id: Int, val createTime: Long) /** * 响应自动生成密码 * * @property password */ data class UserPasswordVo(val password: String) /** * 用户登陆表单 * * @property studentId 学号 * @property password 密码 * @property device 设备型号 */ data class UserLoginVo(val studentId: String, val password: String, val device: String) /** * * @property associationName 社团名字 * @property activityName 活动名 * @property activityTime 活动时间 * @property activityLocation 活动地点 * @property activityDesc 活动介绍 */ data class ActivityDetailVo( val associationName: String, val activityName: String, val activityTime: Date, val activityLocation: String, val activityDesc: String ) data class ActivityMemberVo(val studentId: String, val name: String) /** * 活动成员 * * @property organizer * @property participant */ data class ActivityMembersVo( val organizer: ActivityMemberVo, val participant: MutableList? ) /** * 图片 * @property name 文件名 * @property size 文件大小 * @property url 文件路径 * @property md5 文件hash * @property createTime 文件创建时间 * @property studentId 文件上传人 */ data class ActivityPhotoVo( val name: String, val size: Long, val url: String, val md5: String, val createTime: Date, val studentId: String ) const val MAX_SCORE = 5L data class ActivityVo( val activityId: Long, val activityName: String, val association: String, @IntRange(from = 1, to = MAX_SCORE) val score: Int, val activityTime: Date, val location: String ) data class AllOfficerVo( val secretariat: MutableList, val propaganda: MutableList, val publicRelationsDepartment: MutableList ) data class ApplyActVo( val activityName: String, val activityTime: String, val location: String, val desc: String, val size: Int ) data class LeaveMessageVo( val message: String, override val clientType: ClientType = ClientType.Foreground ) : ClientBaseVo() /** * 社团级别 * */ enum class AssociationLevel { A, B, C, D } /** * 所属院系 * */ enum class AssociationFaculty(val desc: String, val range: kotlin.ranges.IntRange) { ForeignLanguageDept("外语系", 0..0), CivilEngineeringDept("土木工程", 1..10), SEM("经理管理学院", 11..20), MechanicalEngineeringDept("机械工程", 21..30), TransportationDept("交通运输", 31..40), ArchitectureAndArts("建筑与艺术", 41..50), ElectricalDept("电气", 51..60), MaterialsDept("材料", 61..70), MessageDept("信息", 71..80), MathematicsDept("数理", 81..90), GraduateStudent("研究生", 91..99) } abstract class BaseAssociationVo { abstract val id: Int abstract val name: String abstract val desc: String abstract val logo: String abstract val faculty: AssociationFaculty abstract val level: AssociationLevel? } /** * 社团列表 * */ class AssociationVo( override val id: Int, override val name: String, override val desc: String, override val logo: String, override val faculty: AssociationFaculty, override val level: AssociationLevel? ) : BaseAssociationVo() //审核状态 enum class CheckStatus(val desc: String) { WaitFirst("等待初审"), AcceptFirst("初审受理"), WaitLast("等待复审"), AcceptLast("复审受理"), Finish("审核完成") } data class AssociationMemberVo( val association: AssociationVo, val isHead: Boolean ) /** * 活动照片 * * @property path */ data class AssociationActPhotoVo(val path: String) data class AssociationMainVo( val associationVo: AssociationVo, val head: UserInfoVo, val photos: List? = null ) //用户社团 data class AssociationCheckVo( override val id: Int, override val name: String, override val desc: String, override val logo: String, override val faculty: AssociationFaculty, override val level: AssociationLevel?, val checkStatus: CheckStatus, val applyTime: Long, val firstCause: String, val lastCause: String?, val fileId: Int ) : BaseAssociationVo() /** * 搜索社团 * * @property name * @property desc * @property clientType */ data class SearchAssociationVo( val name: String, val desc: String, override val clientType: ClientType = ClientType.Foreground ) : ClientBaseVo() data class ShowAssociationVo( val id: Int, override val clientType: ClientType = ClientType.Foreground ) : ClientBaseVo() data class BBSVo(val studentId: String, val name: String, val createTime: Date, val content: String) /** * 题型 * */ enum class ExamType(val type: String) { //选择题 CQ("选择题"), //开放题 OQ("开放题") } abstract class Exam { abstract val examType: ExamType abstract val question: StringForm } /** * 选择题 * * @property examType 题型描述 * @property answers 答案 * @property rightAnswer 正确答案 * @property question 问题 */ data class ChoiceQuestionVo( override val examType: ExamType = ExamType.CQ, val answers: List, val rightAnswer: Int, override val question: StringForm ) : Exam() data class HistoryActVo(val name: String) /** * 开放题 * * @property examType 题型描述 * @property question 问题 */ data class OpenQuestionsVo( override val examType: ExamType = ExamType.OQ, override val question: StringForm ) : Exam() data class LeaveMessageFormatVo(val message: String, val user: UserInfoVo) data class ManagerLoginVo(val account: String, val password: String, val device: String) data class MemberVo(val name: String) data class OngoingActVo(val name: String) /** * 活动质量汇报单 * * @property applyName 申请人 * @property activityName 活动名称 * @property merit 优点 * @property defect 缺点 * @property score 星级评价 */ data class QualityReportVo( val applyName: String, val activityName: String, val merit: String, val defect: String, @IntRange(from = 1L, to = MAX_SCORE) val score: Int ) /** * 社团注册资料表单 * * @property name * @property desc * @property fileId */ data class AssociationRegVo( val id: Int?, val name: String, val desc: String, val fileId: Int, override val clientType: ClientType = ClientType.Foreground ) : ClientBaseVo() /** * 社团注册审核记录 * */ data class DisposeRegInfoVo( val name: String, val desc: String, val logo: String, val log: AuditLoggingVo ) /** * 通用审核记录 * * @property id * @property user * @property applyTime * @property manager * @property acceptTime * @property cause * @property result * @property auditTime * @property nextAudit */ data class AuditLoggingVo( val id: Int, val user: UserInfoVo, val applyTime: Long, val manager: ManagerInfoVo?, val acceptTime: Long?, val cause: String?, val result: Boolean?, val auditTime: Long?, val nextAudit: AuditLoggingVo? ) /** * 社团注册资料受理 * * @property regId * @property clientType */ data class AcceptRegAssociation( val regId: Int, val isFirstAccept: Boolean, override val clientType: ClientType = ClientType.Background ) : ClientBaseVo() /** * 社团注册资料审核 * * @property regId * @property result * @property cause * @property clientType */ data class CheckRegVo( val regId: Int, val result: Boolean, val cause: String, override val clientType: ClientType = ClientType.Background ) : ClientBaseVo() /** * 换名申请表 * * @property studentId 学号 * @property oldName 社团原名 * @property newName 社团新名 * @property reason 申请理由 */ data class RenameVo( val studentId: String, val oldName: String, val newName: String, val reason: String ) abstract class ClientBaseVo { val token: Token = TokenManager.getToken() abstract val clientType: ClientType }