diff --git a/docs/51dx_school.json b/docs/51dx_school.json
new file mode 100644
index 0000000..9990a6a
--- /dev/null
+++ b/docs/51dx_school.json
@@ -0,0 +1,211 @@
+{
+ "univId": 10001,
+ "univName": "北京大学",
+ "departType": 1,
+ "competentDepart": "教育部",
+ "url": "https://www.pku.edu.cn/",
+ "contact": "010-62751407",
+ "univAddress": "北京市海淀区颐和园路5号",
+ "logo": "https://sdxedu.oss-cn-beijing.aliyuncs.com/univ/logo/02b0cead21d44a3cbfb7707ca7928b95.png",
+ "backGround": "https://sdxedu.oss-cn-beijing.aliyuncs.com/univ/backGround/f67833522f814ad4ad3ac169957c8236.jpg",
+ "provId": 1,
+ "provName": "北京",
+ "city": 1,
+ "cityName": "北京市",
+ "is985": 1,
+ "is211": 1,
+ "isFirstClass": 1,
+ "isFirstLevel": 1,
+ "isPublic": 1,
+ "univType": 1,
+ "univTypeName": "综合",
+ "establishYear": 1898,
+ "rank": 2,
+ "combinedScore": 99,
+ "photoJson": {
+ "scenerys": [
+ {
+ "cover": "https://sdxedu.oss-cn-beijing.aliyuncs.com/univ/scenerys/d7c0b4e9a0c746d2a23f45c24793db94.jpeg",
+ "size": 1,
+ "scenery": "河流"
+ }
+ ],
+ "staticUrl": "https://static.51sdx.com"
+ },
+ "univDesc": "
北京大学创办于1898年,初名京师大学堂,是中国第一所国立综合性大学,也是当时中国最高教育行政机关。辛亥革命后,于1912年改为现名。
作为新文化运动的中心和“五四”运动的策源地,作为中国最早传播马克思主义和民主科学思想的发祥地,作为中国共产党最早的活动基地,北京大学为民族的振兴和解放、国家的建设和发展、社会的文明和进步做出了不可替代的贡献,在中国走向现代化的进程中起到了重要的先锋作用。爱国、进步、民主、科学的传统精神和勤奋、严谨、求实、创新的学风在这里生生不息、代代相传。
1917年,著名教育家蔡元培出任北京大学校长,他“循思想自由原则,取兼容并包主义”,对北京大学进行了卓有成效的改革,促进了思想解放和学术繁荣。陈独秀、李大钊、毛泽东以及鲁迅、胡适等一批杰出人才都曾在北京大学任职或任教。
1937年卢沟桥事变后,北京大学与清华大学、南开大学南迁长沙,共同组成长沙临时大学。不久,临时大学又迁到昆明,改称国立西南联合大学。抗日战争胜利后,北京大学于1946年10月在北平复学。中华人民共和国成立后,全国高校于1952年进行院系调整,北京大学成为一所以文理基础教学和研究为主的综合性大学,为国家培养了大批人才。据不完全统计,北京大学的校友和教师有400多位两院院士,中国人文社科界有影响的人士相当多也出自北京大学。
改革开放以来,北京大学进入了一个前所未有的大发展、大建设的新时期,并成为国家“211工程”重点建设的两所大学之一。
1998年5月4日,北京大学百年校庆之际,国家主席江泽民在庆祝北京大学建校一百周年大会上发表讲话,发出了“为了实现现代化,我国要有若干所具有世界先进水平的一流大学”的号召。在国家的支持下,北京大学适时启动“创建世界一流大学计划”,从此,北京大学的历史翻开了新的一页。2000年4月3日,北京大学与原北京医科大学合并,组建了新的北京大学。原北京医科大学的前身是国立北京医学专门学校,创建于1912年10月26日。20世纪三、四十年代,学校一度名为北平大学医学院,并于1946年7月并入北京大学。1952年在全国高校院系调整中,北京大学医学院脱离北京大学,独立为北京医学院。1985年更名为北京医科大学,1996年成为国家首批“211工程”重点支持的医科大学。两校合并进一步拓宽了北京大学的学科结构,为促进医学与人文社会科学及理科的结合,改革医学教育奠定了基础。
近年来,在“211工程”和“985工程”的支持下,北京大学进入了一个新的历史发展阶段,在学科建设、人才培养、师资队伍建设、教学科研等各方面都取得了显著成绩,为将北大建设成为世界一流大学奠定了坚实的基础。今天的北京大学已经成为国家培养高素质、创造性人才的摇篮、科学研究的前沿和知识创新的重要基地和国际交流的重要桥梁和窗口。现任校党委书记郝平、校长龚旗煌。
",
+ "researchJson": {
+ "features": {
+ "name": "国家级特色专业",
+ "value": "经济学、西班牙语、非通用语种群(印地语、乌尔都语、孟加拉语、梵文、巴利文5个语种)、地质学、核技术、临床医学(与北京大学第一医院结合)、口腔医学、法学、阿拉伯语、非通用语种群(蒙古语、菲律宾语、泰国语、波斯语、西伯莱语等12个语种)、微电子学、软件工程(设5个专业方向)、临床医学(与北京大学人民医院结合)、哲学、化学、药学、保险、信息与计算科学、生物科学、智能科学与技术、城市管理、汉语言文学、考古学、世界历史、预防医学、国际政治、地球物理学、地理科学、理论与应用力学、新闻学、环境科学、金融学、电子信息科学与技术、能源与资源工程、环境工程"
+ },
+ "teacher": {
+ "name": "师资力量",
+ "value": "北京大学以雄厚的师资力量和先进的研究条件著称,全校专任教师6441人,其中教授1701人,副教授2037人,中国科学院院士68人,工程院院士12人。学校每年邀请大批世界著名学者来校讲学。目前,北京大学有11个国家重点实验室,86个省部级重点实验室,2个国家工程研究中心,8所附属医院。"
+ },
+ "laboratory": [
+ {
+ "name": "国家实验室",
+ "value": "北京分子科学国家实验室"
+ }
+ ],
+ "subject": [
+ {
+ "name": "一级学科国家重点学科",
+ "value": "计算机科学与技术,药学,口腔医学,电子科学与技术,力学,生物学,大气科学,地理学,化学,物理学,数学,历史学,社会学,政治学,法学,理论经济学,哲学,中国语言文学"
+ }
+ ],
+ "featuresProv": {},
+ "program": [
+ {
+ "name": "硕士点说明",
+ "value": "硕士学位授权一级学科点51,硕士学位点(含一级学科覆盖)282"
+ }
+ ],
+ "base": {
+ "硕士点数量": "333",
+ "博士点数量": "307",
+ "重点专业数量": "35",
+ "重点学科数量": "51",
+ "重点实验室数量": "55"
+ }
+ },
+ "girlProportion": 47.37,
+ "isGirlMore": 0,
+ "scholarshipArray": [
+ {
+ "奖学金": "北京大学奖学金共分两类:一:学校设置:奖励种类和方式学校设立以下若干个人奖:(一)学生“五·四”奖章;(二)三好学生标兵;(三)创新奖;(四)三好学生;(五)优秀学生干部;(六)学习优秀奖;(七)红楼艺术奖;(八)“五·四”体育奖;(九)社会工作奖;(十)优秀毕业生;(十一)其他奖。学校设立以下若干集体奖:(一)学生工作先进单位;(二)班级“五·四”奖杯;(三)优秀班集体;(四)先进学风班。二、社会设置:奖学金名称有上百种,最低1000元/次/人,最高可达12000元/次/人,进入北京大学只要努力学习,综合素质优秀基本上都可以获得奖学金,大二以后平均下来北京大学就没有了所谓的“贫困生”。安心学习,报效国家!"
+ }
+ ],
+ "accommodationArray": [
+ {
+ "name": "食堂",
+ "value": "北大的食堂,数目很多,各具特色。主要使用饭卡结算的食堂有:学一食堂:位于宿舍区,提供早餐。特点是价格便宜,但是风味不是很突出。基本都是大众菜。午饭和晚饭时会有免费汤提供。招牌菜肴:酱肘子、冬菜包、辣子鸡丁,肉丸子。学三食堂(Campus快餐):位于学一食堂北侧。分为中式快餐部、西式快餐部、水饺快餐部、面食快餐部。价格相对较高,环境较好,一般经常有社团等选择在此开会。上午十点开门一直到晚上九点半。也有不少同学选择在内自习。其中面食部有早餐,全天供应鲜豆浆。推荐面食部的刀削面。学五食堂:位于澡堂对面。也供应早餐。一楼按类别出售主食、炒菜、冷饮等;二楼提供营养套餐。学五食堂的食品分量一般较足。开放时间比学一食堂稍长一点。招牌菜肴:银耳玉米羹,香辣鸡丸子,炖排骨,小炒鸡丝。学四食堂(燕南美食):位于图书馆、哲学楼、光华楼、大讲堂交汇处。一般中午人会较多招牌菜肴:煎包,炒年糕,四川窗口的炒肥肠农园食堂:北大校内最大的学生食堂。地理位置得天独厚,位于三教、四教、电教、理教交汇处。距这几大教学楼都很近,故吃饭时间、特别是午饭时间,农园总是人满为患。家园食堂:一层分特色窗口。餐卡结算。招牌菜肴:炒牛肉、鱼香茄条。二楼是聚餐的好场所,餐卡和现金结算均可。饭量一般很足。口味也不错。艺园食堂:一楼的布局和学五差不多。餐卡结算。招牌菜肴:梅菜炒饭,京酱鸡丝,清蒸的鸡腿,煎饼,三鲜豆腐或家常豆腐烧烤涮:推荐那里的早餐,有馄炖,小笼包,煮鸡蛋,火腿煎蛋。这些食堂除了各自的特色,还有一个共同的特点,就是尽量为学生提供方便。北大校内所有食堂都不用现金支付,而是使用学生餐卡,卫生方便。从分布位置看,农园靠近教学楼,学四与图书馆相邻,其他的食堂则都设在宿舍附近。无论是上课、自习,还是在宿舍休息的同学都可以就近就餐。另外,除了上面提到的几个提供餐具的食堂外,其他食堂都出售方便饭盒,可以让辛苦了一天的同学们偶尔也偷偷不刷饭盒的小懒使用现金结算的食校内餐厅有:药膳:位于二体网球场南面。推荐药膳的馄炖和麻辣鲇鱼。佟园:校内的清真风味餐厅。回民同学可以去看看。华美:位于42楼后,位置比较偏僻。主要经营炒菜,也就是家常菜为主。价格基本合理。北京大学有学生食堂近10个,种类齐全,可以品尝到全国各地优秀风味。伙食标准因人而异,平均约350~400元/生/月。"
+ }
+ ],
+ "masterProportion": 56,
+ "abroadProportion": 20.19,
+ "hasRegular": 1,
+ "hasJunior": 0,
+ "hasMaster": 1,
+ "envSatisfaction": 4.6,
+ "envVote": 1394,
+ "liveSatisfaction": 4.4,
+ "liveVote": 1376,
+ "combinedSatisfaction": 4.7,
+ "combinedVote": 1411,
+ "satisfactionJson": {
+ "details": [
+ {
+ "s3": "3",
+ "score": "4.8",
+ "s4": "7",
+ "s5": "87",
+ "name": "综合满意度",
+ "votes": "1207",
+ "s1": "2",
+ "s2": "1"
+ }
+ ]
+ },
+ "flag": 0,
+ "isEight": 0,
+ "isThirty": 0,
+ "isEighteen": 0,
+ "subjectReviews": [
+ {
+ "subList": [
+ {
+ "assessGrade": "1档",
+ "assessLevel": "A+",
+ "subjectName": "统计学"
+ }
+ ],
+ "type": "第四轮"
+ }
+ ],
+ "specialMajor": [
+ {
+ "majorList": [
+ {
+ "majorId": "247",
+ "majorName": "智能科学与技术"
+ }
+ ],
+ "type": "国家级"
+ }
+ ],
+ "specialMajorCount": 41,
+ "college": [
+ {
+ "collegeName": "数学科学学院",
+ "collegeId": 55,
+ "majorList": [
+ {
+ "isMajorClass": "0",
+ "majorLevel": "(本)",
+ "majorId": "2077",
+ "majorName": "数据科学与大数据技术"
+ }
+ ]
+ }
+ ],
+ "employmentReport": [
+ {
+ "reportName": "北京大学2021年度就业报告",
+ "onlinePreview": "https://m.51sdx.com/images/employment_report/PDF/北京大学2021年度就业报告.PDF",
+ "reportUrl": "https://scc.pku.edu.cn/home!downloadCenter.action"
+ }
+ ],
+ "doctoralProgram": 56,
+ "doctorExplain": "一级学科博士学位授权点56个",
+ "mastersDegree": 56,
+ "masterExplain": "一级学科硕士学位授权点56个",
+ "teachers": "北京大学以雄厚的师资力量和先进的研究条件著称,全校专任教师6441人,其中教授1701人,副教授2037人,中国科学院院士68人,工程院院士12人。学校每年邀请大批世界著名学者来校讲学。目前,北京大学有12个国家重点实验室,3个国家工程研究中心,6所附属医院。",
+ "scholarship": "北京大学本科生的奖学金种类丰富多样,主要包括以下几类:\n国家级奖学金:\n国家奖学金:一次性奖励 8000 元,用于奖励学习成绩优异、综合素质突出的学生,全国共奖励 6 万人。\n国家励志奖学金:一次性奖励 5000 元,约占大二大三大四在校生人数的 4.5%,奖励对象为品学兼优的家庭经济困难学生。\n校级奖学金:\n优秀新生奖学金:为支持优秀高中毕业生顺利进入北京大学完成本科学业而设立。该奖学金分为新生一等奖学金(总金额 50000 元每生)、新生二等奖学金(总金额 25000 元每生)、新生三等奖学金(总金额 10000 元每生)。凡被北京大学录取的全日制本科新生均有资格申请,由新生奖学金提名小组就新生的申请材料从新生高中平时成绩、高考成绩、获奖情况、学生工作情况和社会公益事业参与情况等几个方面进行初步审核,并形成初步获奖名单,最终报奖学金评审委员会评审通过。\n综合奖学金:每年金额为 4000 元 - 12000 元不等,占参评总人数的 9%,用于奖励在学业、品德、社会实践等多方面表现优秀的学生。\n五四奖学金:包括 “五・四” 奖章、“三好学生标兵”“创新奖”“三好学生”“优秀学生干部”“学习优秀奖”“红楼艺术奖”“‘五四’体育奖”“社会工作奖”“优秀毕业生” 等个人奖项以及 “学生工作先进单位”“班级‘五・四’奖杯”“优秀班集体”“先进学风班” 等集体奖项,奖励在不同方面有突出表现的学生个人和集体。\n社会捐赠奖学金:由社会各界爱心人士、企业或机构捐赠设立,每年金额为 2000 元 - 20000 元不等,占参评总人数的 6%。例如,国家开发银行设立的奖励金,嘉里集团马来西亚本科留学生全奖等。这些奖学金的具体名称、金额、评选标准等因捐赠方的要求而有所不同,旨在鼓励学生在学术、科研、社会服务等方面取得优异成绩。",
+ "grant": "北京大学本科生的助学金种类主要有以下几种:\n国家助学金:由中央与地方政府共同出资设立,用于资助家庭经济困难的全日制普通本专科(含高职、第二学士学位)在校学生。每人每年 3300 元,分十个月发放。\n国家励志奖学金:由中央和地方政府共同出资设立,奖励资助品学兼优的家庭经济困难学生。每人每年 5000 元,不过它兼具奖学金和助学金的性质。\n五四助学金:由北京大学出资设立,用于帮助家庭经济困难学生更好地完成学业。\n社会捐赠助学金:由社会各界爱心人士、企业或机构捐赠设立,额度从 4000 元到 1 万元不等。多项助学金配套各类助学类奖学金、攻读双学位奖学金、境内外交流奖学金等成才项目,以 “自助、他助、助人” 的价值理念扶助学生成长成才。不同的社会捐赠助学金可能有不同的具体要求和评选标准。\n此外,北京大学还有一些其他针对家庭经济困难学生的资助项目,如减免学费、借款、临时困难补助等。具体的助学金种类和申请条件可能会根据学校政策和社会捐赠情况有所变化,学生可以关注学校学生资助中心的相关通知和信息,以便及时了解和申请适合自己的助学金。",
+ "canteen": "北京大学有多个食堂,以下是一些食堂的条件情况:\n家园食堂:\n规模与环境:北大校内最大的学生食堂,2019 年新建,共有四层,能容纳四千多人。内部环境优美整洁明亮,有人认为其环境堪比图书馆。\n菜品特色:提供丰富多样的菜品,包括快餐、中式简餐、各地特色风味美食小吃、西式简餐等。菜品种类繁多,有大众家常菜,如西红柿炒鸡蛋、红烧肉、土豆炖鸡块等;也有一些相对 “小奢华” 的菜品,如小龙虾、大闸蟹、鱼肉等;还涵盖了各种特色粉面,如柳州螺蛳粉、桂林米粉、重庆酸辣粉等;以及其他特色美食品类,如咖喱牛肉饭、麻辣香锅、新疆大盘鸡、韩式石锅拌饭、日式拉面等,甚至包括各大菜系的经典名菜,如东北的锅包肉、北京的烤鸭、四川的毛血旺等。\n农园食堂:\n地理位置与环境:地理位置得天独厚,位于三教、四教、电教、理教交汇处,距这几大教学楼都很近。有三大层,能保证两千多名学生和教师的就餐。\n菜品供应:提供早、午、晚餐,菜品丰富多样,以满足师生的不同需求。\n学一食堂:\n位置与早餐供应:位于宿舍区,提供早餐,方便学生就餐。\n菜品与价格:价格相对便宜,主要是大众菜,风味不是很突出,但基本能满足日常饮食需求。午饭和晚饭时会有免费汤提供。招牌菜肴有酱肘子、冬菜包、辣子鸡丁、肉丸子等。\n学三食堂(campus 快餐):\n餐厅布局:位于学一食堂北侧,分为中式快餐部、西式快餐部、水饺快餐部、面食快餐部。\n营业时间与环境:上午十点开门一直到晚上九点半,营业时间较长,环境较好,经常有社团等选择在此开会,也有不少同学选择在内自习。其中面食部有早餐,全天供应鲜豆浆。推荐面食部的刀削面。\n学五食堂:\n位置与营业时长:位于澡堂对面,也供应早餐,开放时间比学一食堂稍长一点。\n菜品与特色:一楼按类别出售主食、炒菜、冷饮等;二楼提供营养套餐。食品分量一般较足。招牌菜肴有银耳玉米羹,香辣鸡丸子,炖排骨,小炒鸡丝。\n燕南美食(学四食堂):\n位置与特色:位于图书馆、哲学楼、光华楼、大讲堂交汇处,一般中午人会较多。经过重装后,环境有很大改善,如一层原先的中心岛被改为就餐区域,座位数增加;采用侧面采光和顶面采光相结合的方式引入自然采光,创造出宜人的自然光环境;新增景观楼梯,坡度设计平缓,方便端餐盘行走;餐桌椅布局形成多种空间形式,座椅设计考虑了同学们书包的放置问题等。\n菜品:提供多种美食选择,如奶黄酥、榴莲酥、牛肉酥饼、玉米汁、橙汁藕块、鲮鱼虎皮椒、烤肉烧饼、油淋鲷鱼藕条、香蒜肉片鸡蛋干、酱牛蹄筋、红椒肉汤拌饭、擂椒卤肉饭、白切鸡套餐饭、港式控肉饭、重庆小面、鳗鱼虾卷寿司、芝士辛拉面、日式和牛饭、麻辣香锅、麻辣烫等(部分为开业当天菜品)。\n此外,北京大学还有松林餐厅(很多学生的早餐首选食堂)、艺园餐厅(供应烧烤,是学生吃夜宵的好去处)、佟园食堂(清真餐厅,照顾少数民族学生)等。并且近两三年,学校还专门在校园内开设了移动餐车,提供快餐盒饭、豆浆、包子早点、面包、水果等,为同学们提供了很大的便捷性。同时,北大的食堂也进入到了 “智能时代”,有 “食堂神器” 可以实时监测各食堂的就餐人数,方便学生合理安排就餐时间和地点,学生们在食堂里还可以体验自动米饭机定量打饭、通过自动结算机器人结账以及机器人送餐、收餐盘传输带等智能服务。",
+ "dormitory": "北京大学本科生的宿舍条件如下:\n宿舍布局:通常为四人一间,全部住校内。床铺为上下床,左右两侧配备大衣柜、书柜,进门处有储物柜。\n家具设施:\n每位同学有一个书柜书桌衣柜一体柜,书柜容量较大,前有插座,可自行安排使用空间。\n衣柜分三层,可收纳较多衣物,同时配备有挂衣杆。\n储物柜分上下两层,进深约 75cm,宽约 85cm,高约 60cm,能容纳下 24 寸行李箱,也可放置不常用衣物、被褥等。\n其他设施:\n宿舍内配有暖气、空调、阳台等。阳台有两排晾衣杆以及空调外机。\n每层楼设有 1 - 2 个公共盥洗室和浴室。盥洗室有两排水池可供洗漱、一个可供洗拖把的小水池、热水器、洗衣机、洗鞋机以及烘干机等,部分宿舍的部分楼层还有洗鞋机、甩干机,部分楼可以领取专用洗衣桶。40 楼西侧和 36 楼东侧设有洗衣店,提供洗衣、洗鞋、干洗等服务。浴室每个有 6 个隔间,热水供应时间为 7:00 - 9:00 和 15:20 - 23:00,浴室外设有吹风机插座。31 楼地下有公共浴室,15:20 - 22:50 开放。\n一楼大厅常设微波炉,还设有自动贩卖机,楼长阿姨平时也在一楼大厅工作,若需要应急物品例如寝室钥匙、药品等也可向楼长阿姨求助。\n用电及网络:\n宿舍用电采用定额管理,计量收费的方式。每间宿舍每月有 32 度免费电可使用,超过该定额需前往 28 楼地下的后勤服务大厅缴纳超额电费以及进行充值,目前的电价为 0.5103 元每度。不可以使用热得快、电热锅等大功率电器,也不要在宿舍进行电动车电池充电,如需使用电吹风可到盥洗室或一楼大厅的专用插头处。\n每个宿舍将有 2 个网口,若每人都有上网要求,则需自己准备 hub。\n熄灯制度:周日至周四每晚 23 点熄灯,第二天 6 点恢复,周五周六晚不统一熄灯。目前新建的宿舍楼熄灯不断电,有些宿舍后熄灯后会断电,不过走廊等公共设施仍有电力供应。考试周期间也会根据时间推迟熄灯时间方便大家复习。\n宿舍管理:\n每个宿舍都设有楼长,楼长办公室设在一楼入门处,一般是几位楼长轮班值守,有困难或者问题可以随时求助。\n宿舍的卫生检查由楼长组织成立的楼委会负责,每月一次,为每个宿舍进行打分,每一学年进行总评,选出卫生好的宿舍进行全校评比,如果被评为 “安全文明卫生宿舍”,门上会贴有标志,宿舍每位成员也会得到奖励。\n需要注意的是,不同宿舍楼的具体条件可能会略有差异,且学校也可能会根据实际情况进行调整和改善。",
+ "guojiatese": "35",
+ "shuoshidian": "50",
+ "jiuyelu": "94.90",
+ "twsdl": "1",
+ "twsdlYear": 2022,
+ "yuanshi": "58",
+ "boshidian": "53",
+ "xyh": "1",
+ "xyhYear": 2025,
+ "wsl": "3",
+ "wslYear": 2025,
+ "kaoyanlu": "52.26",
+ "chuguolu": "18.90",
+ "usdalu": "2",
+ "usdaluYear": 2022,
+ "xuekea": "56",
+ "qsdalu": "2",
+ "qsdaluYear": 2022,
+ "gjzdxk": "54",
+ "univMajors": [
+ {
+ "majorList": [
+ {
+ "bzk": "1",
+ "classId": 1,
+ "subClassId": 1,
+ "majorId": "1",
+ "year": "四年",
+ "majorName": "哲学",
+ "majorTag": "国家特色"
+ }
+ ],
+ "className": "国家特色"
+ }
+ ],
+ "univPostgraduateList": [
+ {
+ "year": 2024,
+ "exemption": 64.6
+ }
+ ],
+ "isDoubleHighPlan": 0,
+ "isStrongPlan": 1
+}
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index f57c8c0..bd6388c 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -23,6 +23,12 @@
mysql-connector-j
+
+
+ org.postgresql
+ postgresql
+
+
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 0909704..49a285e 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -37,19 +37,19 @@ spring:
# 性能分析插件(有性能损耗 不建议生产环境使用)
p6spy: true
# 设置默认的数据源或者数据源组,默认值即为 master
- primary: master
+ primary: postgres
# 严格模式 匹配不到数据源则报错
strict: true
datasource:
# 主库数据源
- master:
- type: ${spring.datasource.type}
- driverClassName: com.mysql.cj.jdbc.Driver
- # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
- # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
- url: jdbc:mysql://10.13.13.1:3306/yitisheng_ry_vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
- username: root
- password: Db$7Hn#4Jm9Pq2!Xz
+# master:
+# type: ${spring.datasource.type}
+# driverClassName: com.mysql.cj.jdbc.Driver
+# # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
+# # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
+# url: jdbc:mysql://10.13.13.1:3306/yitisheng_ry_vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+# username: root
+# password: Db$7Hn#4Jm9Pq2!Xz
# # 从库数据源
# slave:
# lazy: true
@@ -64,12 +64,12 @@ spring:
# url: jdbc:oracle:thin:@//localhost:1521/XE
# username: ROOT
# password: root
-# postgres:
-# type: ${spring.datasource.type}
-# driverClassName: org.postgresql.Driver
-# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
-# username: root
-# password: root
+ postgres:
+ type: ${spring.datasource.type}
+ driverClassName: org.postgresql.Driver
+ url: jdbc:postgresql://10.13.13.1:5432/art_sports_volunteer?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+ username: art_sports_volunteer
+ password: t56kX86WMQ8eNjRz
# sqlserver:
# type: ${spring.datasource.type}
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtHistoryScoreControlLineController.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtHistoryScoreControlLineController.java
new file mode 100644
index 0000000..1622192
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtHistoryScoreControlLineController.java
@@ -0,0 +1,105 @@
+package org.dromara.art.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.art.domain.vo.ArtHistoryScoreControlLineVo;
+import org.dromara.art.domain.bo.ArtHistoryScoreControlLineBo;
+import org.dromara.art.service.IArtHistoryScoreControlLineService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 历年省控线
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/art/historyScoreControlLine")
+public class ArtHistoryScoreControlLineController extends BaseController {
+
+ private final IArtHistoryScoreControlLineService artHistoryScoreControlLineService;
+
+ /**
+ * 查询历年省控线列表
+ */
+ @SaCheckPermission("art:historyScoreControlLine:list")
+ @GetMapping("/list")
+ public TableDataInfo list(ArtHistoryScoreControlLineBo bo, PageQuery pageQuery) {
+ return artHistoryScoreControlLineService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出历年省控线列表
+ */
+ @SaCheckPermission("art:historyScoreControlLine:export")
+ @Log(title = "历年省控线", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ArtHistoryScoreControlLineBo bo, HttpServletResponse response) {
+ List list = artHistoryScoreControlLineService.queryList(bo);
+ ExcelUtil.exportExcel(list, "历年省控线", ArtHistoryScoreControlLineVo.class, response);
+ }
+
+ /**
+ * 获取历年省控线详细信息
+ *
+ * @param controlId 主键
+ */
+ @SaCheckPermission("art:historyScoreControlLine:query")
+ @GetMapping("/{controlId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long controlId) {
+ return R.ok(artHistoryScoreControlLineService.queryById(controlId));
+ }
+
+ /**
+ * 新增历年省控线
+ */
+ @SaCheckPermission("art:historyScoreControlLine:add")
+ @Log(title = "历年省控线", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ArtHistoryScoreControlLineBo bo) {
+ return toAjax(artHistoryScoreControlLineService.insertByBo(bo));
+ }
+
+ /**
+ * 修改历年省控线
+ */
+ @SaCheckPermission("art:historyScoreControlLine:edit")
+ @Log(title = "历年省控线", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ArtHistoryScoreControlLineBo bo) {
+ return toAjax(artHistoryScoreControlLineService.updateByBo(bo));
+ }
+
+ /**
+ * 删除历年省控线
+ *
+ * @param controlIds 主键串
+ */
+ @SaCheckPermission("art:historyScoreControlLine:remove")
+ @Log(title = "历年省控线", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{controlIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] controlIds) {
+ return toAjax(artHistoryScoreControlLineService.deleteWithValidByIds(List.of(controlIds), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtMajorController.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtMajorController.java
new file mode 100644
index 0000000..75c61ca
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtMajorController.java
@@ -0,0 +1,105 @@
+package org.dromara.art.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.art.domain.vo.ArtMajorVo;
+import org.dromara.art.domain.bo.ArtMajorBo;
+import org.dromara.art.service.IArtMajorService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 艺术专业库
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/art/major")
+public class ArtMajorController extends BaseController {
+
+ private final IArtMajorService artMajorService;
+
+ /**
+ * 查询艺术专业库列表
+ */
+ @SaCheckPermission("art:major:list")
+ @GetMapping("/list")
+ public TableDataInfo list(ArtMajorBo bo, PageQuery pageQuery) {
+ return artMajorService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出艺术专业库列表
+ */
+ @SaCheckPermission("art:major:export")
+ @Log(title = "艺术专业库", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ArtMajorBo bo, HttpServletResponse response) {
+ List list = artMajorService.queryList(bo);
+ ExcelUtil.exportExcel(list, "艺术专业库", ArtMajorVo.class, response);
+ }
+
+ /**
+ * 获取艺术专业库详细信息
+ *
+ * @param majorId 主键
+ */
+ @SaCheckPermission("art:major:query")
+ @GetMapping("/{majorId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long majorId) {
+ return R.ok(artMajorService.queryById(majorId));
+ }
+
+ /**
+ * 新增艺术专业库
+ */
+ @SaCheckPermission("art:major:add")
+ @Log(title = "艺术专业库", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ArtMajorBo bo) {
+ return toAjax(artMajorService.insertByBo(bo));
+ }
+
+ /**
+ * 修改艺术专业库
+ */
+ @SaCheckPermission("art:major:edit")
+ @Log(title = "艺术专业库", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ArtMajorBo bo) {
+ return toAjax(artMajorService.updateByBo(bo));
+ }
+
+ /**
+ * 删除艺术专业库
+ *
+ * @param majorIds 主键串
+ */
+ @SaCheckPermission("art:major:remove")
+ @Log(title = "艺术专业库", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{majorIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] majorIds) {
+ return toAjax(artMajorService.deleteWithValidByIds(List.of(majorIds), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtSchoolRecruitMajorController.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtSchoolRecruitMajorController.java
new file mode 100644
index 0000000..e5821bf
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtSchoolRecruitMajorController.java
@@ -0,0 +1,105 @@
+package org.dromara.art.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorVo;
+import org.dromara.art.domain.bo.ArtSchoolRecruitMajorBo;
+import org.dromara.art.service.IArtSchoolRecruitMajorService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 院校招录专业
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/art/schoolRecruitMajor")
+public class ArtSchoolRecruitMajorController extends BaseController {
+
+ private final IArtSchoolRecruitMajorService artSchoolRecruitMajorService;
+
+ /**
+ * 查询院校招录专业列表
+ */
+ @SaCheckPermission("art:schoolRecruitMajor:list")
+ @GetMapping("/list")
+ public TableDataInfo list(ArtSchoolRecruitMajorBo bo, PageQuery pageQuery) {
+ return artSchoolRecruitMajorService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出院校招录专业列表
+ */
+ @SaCheckPermission("art:schoolRecruitMajor:export")
+ @Log(title = "院校招录专业", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ArtSchoolRecruitMajorBo bo, HttpServletResponse response) {
+ List list = artSchoolRecruitMajorService.queryList(bo);
+ ExcelUtil.exportExcel(list, "院校招录专业", ArtSchoolRecruitMajorVo.class, response);
+ }
+
+ /**
+ * 获取院校招录专业详细信息
+ *
+ * @param recruitMajorId 主键
+ */
+ @SaCheckPermission("art:schoolRecruitMajor:query")
+ @GetMapping("/{recruitMajorId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long recruitMajorId) {
+ return R.ok(artSchoolRecruitMajorService.queryById(recruitMajorId));
+ }
+
+ /**
+ * 新增院校招录专业
+ */
+ @SaCheckPermission("art:schoolRecruitMajor:add")
+ @Log(title = "院校招录专业", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ArtSchoolRecruitMajorBo bo) {
+ return toAjax(artSchoolRecruitMajorService.insertByBo(bo));
+ }
+
+ /**
+ * 修改院校招录专业
+ */
+ @SaCheckPermission("art:schoolRecruitMajor:edit")
+ @Log(title = "院校招录专业", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ArtSchoolRecruitMajorBo bo) {
+ return toAjax(artSchoolRecruitMajorService.updateByBo(bo));
+ }
+
+ /**
+ * 删除院校招录专业
+ *
+ * @param recruitMajorIds 主键串
+ */
+ @SaCheckPermission("art:schoolRecruitMajor:remove")
+ @Log(title = "院校招录专业", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{recruitMajorIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] recruitMajorIds) {
+ return toAjax(artSchoolRecruitMajorService.deleteWithValidByIds(List.of(recruitMajorIds), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtSchoolRecruitMajorHistoryController.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtSchoolRecruitMajorHistoryController.java
new file mode 100644
index 0000000..8181b8f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtSchoolRecruitMajorHistoryController.java
@@ -0,0 +1,105 @@
+package org.dromara.art.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorHistoryVo;
+import org.dromara.art.domain.bo.ArtSchoolRecruitMajorHistoryBo;
+import org.dromara.art.service.IArtSchoolRecruitMajorHistoryService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 院校招录专业历年录取数据
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/art/schoolRecruitMajorHistory")
+public class ArtSchoolRecruitMajorHistoryController extends BaseController {
+
+ private final IArtSchoolRecruitMajorHistoryService artSchoolRecruitMajorHistoryService;
+
+ /**
+ * 查询院校招录专业历年录取数据列表
+ */
+ @SaCheckPermission("art:schoolRecruitMajorHistory:list")
+ @GetMapping("/list")
+ public TableDataInfo list(ArtSchoolRecruitMajorHistoryBo bo, PageQuery pageQuery) {
+ return artSchoolRecruitMajorHistoryService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出院校招录专业历年录取数据列表
+ */
+ @SaCheckPermission("art:schoolRecruitMajorHistory:export")
+ @Log(title = "院校招录专业历年录取数据", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ArtSchoolRecruitMajorHistoryBo bo, HttpServletResponse response) {
+ List list = artSchoolRecruitMajorHistoryService.queryList(bo);
+ ExcelUtil.exportExcel(list, "院校招录专业历年录取数据", ArtSchoolRecruitMajorHistoryVo.class, response);
+ }
+
+ /**
+ * 获取院校招录专业历年录取数据详细信息
+ *
+ * @param historyId 主键
+ */
+ @SaCheckPermission("art:schoolRecruitMajorHistory:query")
+ @GetMapping("/{historyId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long historyId) {
+ return R.ok(artSchoolRecruitMajorHistoryService.queryById(historyId));
+ }
+
+ /**
+ * 新增院校招录专业历年录取数据
+ */
+ @SaCheckPermission("art:schoolRecruitMajorHistory:add")
+ @Log(title = "院校招录专业历年录取数据", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ArtSchoolRecruitMajorHistoryBo bo) {
+ return toAjax(artSchoolRecruitMajorHistoryService.insertByBo(bo));
+ }
+
+ /**
+ * 修改院校招录专业历年录取数据
+ */
+ @SaCheckPermission("art:schoolRecruitMajorHistory:edit")
+ @Log(title = "院校招录专业历年录取数据", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ArtSchoolRecruitMajorHistoryBo bo) {
+ return toAjax(artSchoolRecruitMajorHistoryService.updateByBo(bo));
+ }
+
+ /**
+ * 删除院校招录专业历年录取数据
+ *
+ * @param historyIds 主键串
+ */
+ @SaCheckPermission("art:schoolRecruitMajorHistory:remove")
+ @Log(title = "院校招录专业历年录取数据", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{historyIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] historyIds) {
+ return toAjax(artSchoolRecruitMajorHistoryService.deleteWithValidByIds(List.of(historyIds), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtTestController.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtTestController.java
new file mode 100644
index 0000000..da95e2f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/controller/ArtTestController.java
@@ -0,0 +1,512 @@
+package org.dromara.art.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.JsonNode;
+import lombok.RequiredArgsConstructor;
+import org.dromara.art.domain.bo.*;
+import org.dromara.art.domain.vo.ArtSchoolImportDetailVo;
+import org.dromara.art.domain.vo.ArtSchoolJsonImportPreviewVo;
+import org.dromara.art.domain.vo.ArtSchoolVo;
+import org.dromara.art.service.IArtSchoolDetailService;
+import org.dromara.art.service.IArtSchoolService;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.web.core.BaseController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Stream;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/art/test")
+public class ArtTestController extends BaseController {
+
+ private final IArtSchoolService artSchoolService;
+ private final IArtSchoolDetailService artSchoolDetailService;
+
+ @GetMapping("/importSchoolByJson")
+ public R importSchoolByJson(@RequestParam(defaultValue = "20") Integer previewSize) {
+ int safePreviewSize = previewSize == null ? 20 : Math.min(Math.max(previewSize, 1), 200);
+ Path sourceDir = Path.of(System.getProperty("user.dir"), "get_univ");
+ if (!Files.exists(sourceDir) || !Files.isDirectory(sourceDir)) {
+ return R.fail("目录不存在: " + sourceDir);
+ }
+
+ List fileList;
+ try {
+ fileList = listJsonFiles(sourceDir);
+ } catch (RuntimeException e) {
+ return R.fail(e.getMessage());
+ }
+ ArtSchoolJsonImportPreviewVo previewVo = new ArtSchoolJsonImportPreviewVo();
+ previewVo.setSourceDir(sourceDir.toString());
+ previewVo.setTotalFileCount(fileList.size());
+
+ List details = new ArrayList<>();
+ List submitPreviewList = new ArrayList<>();
+ Set fileUnivIdSet = new LinkedHashSet<>();
+ Set fileMainCodeSet = new LinkedHashSet<>();
+
+ int readyCount = 0;
+ int duplicateInDbCount = 0;
+ int duplicateInFileCount = 0;
+ int invalidCount = 0;
+ int readFailCount = 0;
+
+ for (Path file : fileList) {
+ String fileName = file.getFileName().toString();
+ JsonNode root;
+ try {
+ root = JsonUtils.getObjectMapper().readTree(file.toFile());
+ } catch (Exception e) {
+ readFailCount++;
+ appendDetail(details, safePreviewSize, null, null, "FAILED", fileName + " 读取失败: " + e.getMessage());
+ continue;
+ }
+
+ List schoolNodes = extractSchoolNodes(root);
+ if (CollUtil.isEmpty(schoolNodes)) {
+ invalidCount++;
+ appendDetail(details, safePreviewSize, null, null, "INVALID", fileName + " 缺少有效学校对象");
+ continue;
+ }
+
+ for (int i = 0; i < schoolNodes.size(); i++) {
+ JsonNode schoolNode = schoolNodes.get(i);
+ String sourceTag = schoolNodes.size() == 1 ? fileName : (fileName + "#" + i);
+
+ Integer univId = asInteger(schoolNode.get("univId"));
+ String mainName = asText(schoolNode.get("univName"));
+ if (univId == null || StringUtils.isBlank(mainName)) {
+ invalidCount++;
+ appendDetail(details, safePreviewSize, null, mainName, "INVALID", sourceTag + " 缺少必填字段: univId/univName");
+ continue;
+ }
+
+ String mainCode = String.valueOf(univId);
+ if (!fileUnivIdSet.add(univId) || !fileMainCodeSet.add(mainCode)) {
+ duplicateInFileCount++;
+ appendDetail(details, safePreviewSize, mainCode, mainName, "DUPLICATE_FILE", sourceTag + " 文件内重复(univId/mainCode)");
+ continue;
+ }
+
+ /*if (existsInDatabase(mainCode, univId)) {
+ duplicateInDbCount++;
+ appendDetail(details, safePreviewSize, mainCode, mainName, "DUPLICATE_DB", sourceTag + " 数据库已存在(mainCode 或 univId)");
+ continue;
+ }*/
+
+ ArtSchoolSubmitBo submitBo = buildSubmitBo(schoolNode, sourceTag, univId, mainCode, mainName);
+ readyCount++;
+ appendDetail(details, safePreviewSize, mainCode, mainName, "READY", sourceTag + " 已完成结构映射,待入库");
+
+ if (submitPreviewList.size() < safePreviewSize) {
+ submitPreviewList.add(toPreviewSubmitBo(submitBo));
+ }
+
+ // 预留真实入库调用(当前按要求先不入库)
+ // artSchoolService.insertWithDetailByBo(submitBo);
+ }
+ }
+
+ for (ArtSchoolSubmitBo artSchoolSubmitBo : submitPreviewList) {
+ ArtSchoolBo artSchoolBo = new ArtSchoolBo();
+ artSchoolBo.setMainName(artSchoolSubmitBo.getSchool().getMainName());
+ List artSchoolVos = artSchoolService.queryList(artSchoolBo);
+ if (!artSchoolVos.isEmpty()) {
+ // 修改
+ artSchoolSubmitBo.getSchool().setSchoolId(artSchoolVos.get(0).getSchoolId());
+ artSchoolService.updateWithDetailByBo(artSchoolSubmitBo);
+ }else{
+ artSchoolService.insertWithDetailByBo(artSchoolSubmitBo);
+ }
+ }
+ previewVo.setReadyCount(readyCount);
+ previewVo.setDuplicateInDbCount(duplicateInDbCount);
+ previewVo.setDuplicateInFileCount(duplicateInFileCount);
+ previewVo.setInvalidCount(invalidCount);
+ previewVo.setReadFailCount(readFailCount);
+ previewVo.setDetails(details);
+ previewVo.setSubmitPreviewList(submitPreviewList);
+ previewVo.setServiceCallHint("已预留调用: artSchoolService.insertWithDetailByBo(submitBo)");
+ return R.ok(previewVo);
+ }
+
+ private List listJsonFiles(Path sourceDir) {
+ try (Stream stream = Files.list(sourceDir)) {
+ return stream
+ .filter(Files::isRegularFile)
+ .filter(path -> path.getFileName().toString().endsWith(".json"))
+ .sorted()
+ .toList();
+ } catch (Exception e) {
+ throw new RuntimeException("读取目录失败: " + sourceDir, e);
+ }
+ }
+
+ private List extractSchoolNodes(JsonNode root) {
+ if (root == null || root.isNull()) {
+ return List.of();
+ }
+ if (root.isArray()) {
+ List nodes = new ArrayList<>();
+ for (JsonNode item : root) {
+ if (item != null && item.isObject()) {
+ nodes.add(item);
+ }
+ }
+ return nodes;
+ }
+ if (root.isObject()) {
+ return List.of(root);
+ }
+ return List.of();
+ }
+
+ private boolean existsInDatabase(String mainCode, Integer univId) {
+ ArtSchoolBo schoolBo = new ArtSchoolBo();
+ schoolBo.setMainCode(mainCode);
+ if (CollUtil.isNotEmpty(artSchoolService.queryList(schoolBo))) {
+ return true;
+ }
+ ArtSchoolDetailBo detailBo = new ArtSchoolDetailBo();
+ detailBo.setUnivId(univId);
+ return CollUtil.isNotEmpty(artSchoolDetailService.queryList(detailBo));
+ }
+
+ private ArtSchoolSubmitBo buildSubmitBo(JsonNode node, String sourceTag, Integer univId, String mainCode, String mainName) {
+ ArtSchoolBo school = new ArtSchoolBo();
+ school.setMainCode(mainCode);
+ school.setMainName(mainName);
+ school.setProvince(asText(node.get("provId"))); // provName
+ school.setCity(asText(node.get("city")));
+ school.setDistrict(null);
+ school.setUniversityType(asText(node.get("univTypeName")));
+ school.setEducationLevel(resolveEducationLevel(node));
+ //school.setSchoolNature(resolveSchoolNature(asInteger(node.get("isPublic"))));
+ school.setSupervisorDept(asText(node.get("competentDepart")));
+ school.setRemark("source=" + sourceTag);
+
+ ArtSchoolDetailBo detail = new ArtSchoolDetailBo();
+ detail.setIntroduction(asText(node.get("univDesc"))); // 院校介绍
+ detail.setSchoolIcon(asText(node.get("logo"))); // 校徽
+ detail.setBackGround(asText(node.get("backGround"))); // 背景图
+ detail.setAddress(asText(node.get("univAddress"))); // 详细地址
+ detail.setContact(asText(node.get("contact"))); // 联系方式
+ detail.setEmail(null); // 邮箱
+ detail.setWebsite(asText(node.get("url"))); // 官方网址
+ detail.setPostcode(null);
+ detail.setEstablishYear(asInteger(node.get("establishYear")));
+ detail.setCampusAreaMu(null);
+ detail.setLibraryCollection(null);
+ BigDecimal femaleRatio = asDecimal(node.get("girlProportion"));
+ detail.setFemaleRatio(femaleRatio);
+ detail.setMaleRatio(resolveMaleRatio(femaleRatio));
+
+ detail.setIs985(normalizeFlag(asInteger(node.get("is985"))));
+ detail.setIs211(normalizeFlag(asInteger(node.get("is211"))));
+ detail.setIsDoubleFirstClass(normalizeFlag(asInteger(node.get("isFirstClass"))));
+ detail.setIsKeyUniversity(normalizeFlag(asInteger(node.get("isFirstLevel"))));
+ detail.setIsPublic(normalizeFlag(asInteger(node.get("isPublic"))));
+
+ detail.setMasterProportionRate(asDecimal(node.get("masterProportion"))); // 考研率
+ detail.setAbroadProportionRate(asDecimal(node.get("abroadProportion"))); // 出国率
+
+ detail.setHasRegular(normalizeFlag(asInteger(node.get("hasRegular")))); // 是否有本科
+ detail.setHasJunior(normalizeFlag(asInteger(node.get("hasJunior")))); // 是否有专科
+ detail.setHasMaster(normalizeFlag(asInteger(node.get("hasMaster")))); // 是否有研究生
+
+ detail.setIsDoubleHighPlan(normalizeFlag(asInteger(node.get("isDoubleHighPlan")))); // 是否双高计划(专科用)
+ detail.setIsStrongPlan(normalizeFlag(asInteger(node.get("isStrongPlan")))); // 是否强基计划
+ detail.setTwsdlRank(normalizeFlag(asInteger(node.get("twsdl"))));
+ detail.setXyhRank(normalizeFlag(asInteger(node.get("xyh"))));
+ detail.setWslRank(normalizeFlag(asInteger(node.get("wsl")))); // 武书连排名
+ detail.setUsdaluRank(normalizeFlag(asInteger(node.get("usdalu")))); // 美国大学排名相关
+ detail.setQsdaluRank(normalizeFlag(asInteger(node.get("qsdalu")))); // QS世界大学排名
+
+ detail.setTags(buildTags(node));
+ detail.setStudentCount(null);
+ detail.setTeacherCount(null);
+ detail.setMasterPoint(resolveMasterPoint(node));
+ detail.setDoctorPoint(resolveDoctorPoint(node));
+ detail.setKeyMajorCount(resolveKeyMajorCount(node));
+ detail.setEmploymentRate(resolveEmploymentRate(node));
+ detail.setSatisfactionRate(resolveSatisfactionRate(node));
+ detail.setUnivId(univId);
+ //detail.setRemark("source=" + sourceTag);
+
+ ArtSchoolCollegeBo schoolCollegeBo = null;
+ List schoolCollegeBoList = new ArrayList<>();
+
+ ArtSchoolMajorBo artSchoolMajorBo = null;
+ List schoolMajorBoList;
+ // 学院信息
+ for (JsonNode college : node.get("college")) {
+ schoolCollegeBo = new ArtSchoolCollegeBo();
+ schoolCollegeBo.setCollegeName(asText(college.get("collegeName")));
+ schoolCollegeBo.setCollege51sdxId(asInteger(college.get("collegeId")));
+
+ schoolMajorBoList = new ArrayList<>();
+ // 学院专业列表
+ if (college.has("majorList")) {
+ for (JsonNode major : college.get("majorList")) {
+ artSchoolMajorBo = new ArtSchoolMajorBo();
+ artSchoolMajorBo.setEducationLevel("(本)".equals(asText(major.get("majorLevel"))) ? "1" : "0");
+ artSchoolMajorBo.setMajorName(asText(major.get("majorName")));
+ artSchoolMajorBo.setMajor51sdxId(asText(major.get("majorId")));
+ schoolMajorBoList.add(artSchoolMajorBo);
+ }
+ schoolCollegeBo.setSchoolMajorBoList(schoolMajorBoList);
+ }
+ schoolCollegeBoList.add(schoolCollegeBo);
+ }
+
+ // 特色专业
+ node.get("specialMajor");
+
+ // 就业报告
+ node.get("employmentReport");
+
+ // 图片
+ node.get("photoJson");
+
+ // 建筑
+ node.get("accommodationArray");
+
+ // 学科评估
+ node.get("subjectReviews");
+
+ ArtSchoolSubmitBo submitBo = new ArtSchoolSubmitBo();
+ submitBo.setSchool(school);
+ submitBo.setDetail(detail);
+ submitBo.setArtSchoolCollegeBoList(schoolCollegeBoList);
+ submitBo.setEnrollCodes(List.of());
+ submitBo.setSchoolTags(List.of());
+ return submitBo;
+ }
+
+ private ArtSchoolSubmitBo toPreviewSubmitBo(ArtSchoolSubmitBo submitBo) {
+ ArtSchoolSubmitBo preview = new ArtSchoolSubmitBo();
+ preview.setSchool(submitBo.getSchool());
+ ArtSchoolDetailBo detail = submitBo.getDetail();
+ if (detail == null) {
+ preview.setDetail(null);
+ } else {
+ /*ArtSchoolDetailBo detailPreview = new ArtSchoolDetailBo();
+ detailPreview.setUnivId(detail.getUnivId());
+ detailPreview.setSchoolIcon(detail.getSchoolIcon());
+ detailPreview.setAddress(detail.getAddress());
+ detailPreview.setContact(detail.getContact());
+ detailPreview.setWebsite(detail.getWebsite());
+ detailPreview.setEstablishYear(detail.getEstablishYear());
+ detailPreview.setFemaleRatio(detail.getFemaleRatio());
+ detailPreview.setMaleRatio(detail.getMaleRatio());
+ detailPreview.setIs985(detail.getIs985());
+ detailPreview.setIs211(detail.getIs211());
+ detailPreview.setIsDoubleFirstClass(detail.getIsDoubleFirstClass());
+ detailPreview.setIsKeyUniversity(detail.getIsKeyUniversity());
+ detailPreview.setMasterPoint(detail.getMasterPoint());
+ detailPreview.setDoctorPoint(detail.getDoctorPoint());
+ detailPreview.setKeyMajorCount(detail.getKeyMajorCount());
+ detailPreview.setEmploymentRate(detail.getEmploymentRate());
+ detailPreview.setSatisfactionRate(detail.getSatisfactionRate());
+ detailPreview.setTags(detail.getTags());
+ detailPreview.setRemark(detail.getRemark());*/
+ preview.setDetail(submitBo.getDetail());
+ }
+ preview.setArtSchoolCollegeBoList(submitBo.getArtSchoolCollegeBoList());
+ preview.setEnrollCodes(submitBo.getEnrollCodes());
+ preview.setSchoolTags(submitBo.getSchoolTags());
+ return preview;
+ }
+
+ private String[] buildTags(JsonNode node) {
+ Set tags = new LinkedHashSet<>();
+ if (isPositive(node.get("is985"))) {
+ tags.add("985");
+ }
+ if (isPositive(node.get("is211"))) {
+ tags.add("211");
+ }
+ if (isPositive(node.get("isFirstClass"))) {
+ tags.add("双一流");
+ }
+ String typeName = asText(node.get("univTypeName"));
+ if (StringUtils.isNotBlank(typeName)) {
+ tags.add(typeName);
+ }
+ return tags.isEmpty() ? null : tags.toArray(String[]::new);
+ }
+
+ private Integer resolveMasterPoint(JsonNode node) {
+ Integer mastersDegree = asInteger(node.get("mastersDegree"));
+ if (mastersDegree != null) {
+ return mastersDegree;
+ }
+ Integer shuoshidian = asInteger(node.get("shuoshidian"));
+ if (shuoshidian != null) {
+ return shuoshidian;
+ }
+ return asInteger(node.path("researchJson").path("base").get("硕士点数量"));
+ }
+
+ private Integer resolveDoctorPoint(JsonNode node) {
+ Integer doctoralProgram = asInteger(node.get("doctoralProgram"));
+ if (doctoralProgram != null) {
+ return doctoralProgram;
+ }
+ Integer boshidian = asInteger(node.get("boshidian"));
+ if (boshidian != null) {
+ return boshidian;
+ }
+ return asInteger(node.path("researchJson").path("base").get("博士点数量"));
+ }
+
+ private Integer resolveKeyMajorCount(JsonNode node) {
+ Integer specialMajorCount = asInteger(node.get("specialMajorCount"));
+ if (specialMajorCount != null) {
+ return specialMajorCount;
+ }
+ Integer guojiatese = asInteger(node.get("guojiatese"));
+ if (guojiatese != null) {
+ return guojiatese;
+ }
+ return asInteger(node.path("researchJson").path("base").get("重点专业数量"));
+ }
+
+ private BigDecimal resolveEmploymentRate(JsonNode node) {
+ BigDecimal employmentRate = asDecimal(node.get("jiuyelu"));
+ return employmentRate == null ? null : employmentRate.setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private BigDecimal resolveSatisfactionRate(JsonNode node) {
+ BigDecimal score = asDecimal(node.get("combinedSatisfaction"));
+ if (score == null) {
+ return null;
+ }
+ if (score.compareTo(new BigDecimal("5")) <= 0) {
+ return score.multiply(new BigDecimal("20")).setScale(2, RoundingMode.HALF_UP);
+ }
+ return score.setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private BigDecimal resolveMaleRatio(BigDecimal femaleRatio) {
+ if (femaleRatio == null) {
+ return null;
+ }
+ return new BigDecimal("100").subtract(femaleRatio).setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private String resolveEducationLevel(JsonNode node) {
+ Integer hasRegular = asInteger(node.get("hasRegular"));
+ Integer hasJunior = asInteger(node.get("hasJunior"));
+ boolean regular = hasRegular != null && hasRegular == 1;
+ boolean junior = hasJunior != null && hasJunior == 1;
+ if (regular && junior) {
+ return "本科/专科";
+ }
+ if (regular) {
+ return "本科";
+ }
+ if (junior) {
+ return "专科";
+ }
+ return null;
+ }
+
+ private String resolveSchoolNature(Integer isPublic) {
+ if (isPublic == null) {
+ return null;
+ }
+ if (isPublic == 1) {
+ return "公办";
+ }
+ if (isPublic == 2) {
+ return "民办";
+ }
+ return null;
+ }
+
+ private boolean isPositive(JsonNode node) {
+ Integer value = asInteger(node);
+ return value != null && value > 0;
+ }
+
+ private Integer normalizeFlag(Integer value) {
+ if (value == null) {
+ return 0;
+ }
+ return value > 0 ? 1 : 0;
+ }
+
+ private String asText(JsonNode node) {
+ if (node == null || node.isNull()) {
+ return null;
+ }
+ String text = node.asText();
+ if (StringUtils.isBlank(text)) {
+ return null;
+ }
+ return text.trim();
+ }
+
+ private Integer asInteger(JsonNode node) {
+ if (node == null || node.isNull()) {
+ return null;
+ }
+ if (node.isNumber()) {
+ return node.intValue();
+ }
+ String text = asText(node);
+ if (StringUtils.isBlank(text)) {
+ return null;
+ }
+ try {
+ return Integer.valueOf(text.replace("%", "").trim());
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private BigDecimal asDecimal(JsonNode node) {
+ if (node == null || node.isNull()) {
+ return null;
+ }
+ String text = node.isNumber() ? node.numberValue().toString() : asText(node);
+ if (StringUtils.isBlank(text)) {
+ return null;
+ }
+ try {
+ return new BigDecimal(text.replace("%", "").trim());
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private void appendDetail(List details, int maxSize, String mainCode, String mainName, String status, String message) {
+ if (details.size() >= maxSize) {
+ return;
+ }
+ ArtSchoolImportDetailVo detailVo = new ArtSchoolImportDetailVo();
+ detailVo.setMainCode(mainCode);
+ detailVo.setMainName(mainName);
+ detailVo.setStatus(status);
+ detailVo.setMessage(message);
+ details.add(detailVo);
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtHistoryScoreControlLine.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtHistoryScoreControlLine.java
new file mode 100644
index 0000000..6988483
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtHistoryScoreControlLine.java
@@ -0,0 +1,92 @@
+package org.dromara.art.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 历年省控线对象 art_history_score_control_line
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("art_history_score_control_line")
+public class ArtHistoryScoreControlLine extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 省控线主键
+ */
+ @TableId(value = "control_id")
+ private Long controlId;
+
+ /**
+ * 删除标志(0存在 1删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 省份行政区划代码
+ */
+ private String provinceCode;
+
+ /**
+ * 省份名称
+ */
+ private String provinceName;
+
+ /**
+ * 年份
+ */
+ private Long year;
+
+ /**
+ * 专业类别
+ */
+ private String majorCategory;
+
+ /**
+ * 批次
+ */
+ private String batchName;
+
+ /**
+ * 科类(文/理)
+ */
+ private String subjectType;
+
+ /**
+ * 文化成绩分数
+ */
+ private Long cultureScore;
+
+ /**
+ * 专业成绩分数
+ */
+ private Long majorScore;
+
+ /**
+ * 文化成绩校考分数
+ */
+ private Long cultureScoreExam;
+
+ /**
+ * 专业成绩校考分数
+ */
+ private Long majorScoreExam;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtMajor.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtMajor.java
new file mode 100644
index 0000000..5679c90
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtMajor.java
@@ -0,0 +1,92 @@
+package org.dromara.art.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 艺术专业库对象 art_major
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("art_major")
+public class ArtMajor extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 专业主键ID
+ */
+ @TableId(value = "major_id")
+ private Long majorId;
+
+ /**
+ * 删除标志(0存在 1删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 专业名称
+ */
+ private String majorName;
+
+ /**
+ * 学历层次
+ */
+ private String educationLevel;
+
+ /**
+ * 专业图标
+ */
+ private String majorIcon;
+
+ /**
+ * 学制(年)
+ */
+ private Long schoolingYears;
+
+ /**
+ * 所属一级学科
+ */
+ private String disciplinePrimary;
+
+ /**
+ * 所属二级学科
+ */
+ private String disciplineSecondary;
+
+ /**
+ * 授予学士学位
+ */
+ private String degreeAwarded;
+
+ /**
+ * 专业概括
+ */
+ private String summary;
+
+ /**
+ * 培养方向
+ */
+ private String trainingDirection;
+
+ /**
+ * 主要课程
+ */
+ private String coreCourses;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchool.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchool.java
index ac0aa75..b60a201 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchool.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchool.java
@@ -42,11 +42,6 @@ public class ArtSchool extends TenantEntity {
*/
private String shortName;
- /**
- * 院校图标
- */
- private String schoolIcon;
-
/**
* 省份
*/
@@ -82,26 +77,6 @@ public class ArtSchool extends TenantEntity {
*/
private String supervisorDept;
- /**
- * 建校时间(年)
- */
- private Long establishYear;
-
- /**
- * 占地面积(亩)
- */
- private Long campusAreaMu;
-
- /**
- * 男生比例(%)
- */
- private Long maleRatio;
-
- /**
- * 女生比例(%)
- */
- private Long femaleRatio;
-
/**
* 删除标志(0代表存在 1代表删除)
*/
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolCollege.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolCollege.java
index 9d94c74..9cf46c8 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolCollege.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolCollege.java
@@ -63,5 +63,5 @@ public class ArtSchoolCollege extends TenantEntity {
*/
private String remark;
-
+ private Integer college51sdxId;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolDetail.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolDetail.java
index b641067..7a22161 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolDetail.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolDetail.java
@@ -2,10 +2,12 @@ package org.dromara.art.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
+import org.apache.ibatis.type.ArrayTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
+import java.math.BigDecimal;
/**
* 学校详细信息对象 art_school_detail
@@ -15,7 +17,7 @@ import java.io.Serial;
*/
@Data
@EqualsAndHashCode(callSuper = true)
-@TableName("art_school_detail")
+@TableName(value = "art_school_detail", autoResultMap = true)
public class ArtSchoolDetail extends TenantEntity {
@Serial
@@ -37,6 +39,16 @@ public class ArtSchoolDetail extends TenantEntity {
*/
private String introduction;
+ /**
+ * 校徽
+ */
+ private String schoolIcon;
+
+ /**
+ * 背景图
+ */
+ private String backGround;
+
/**
* 学校地址
*/
@@ -57,6 +69,112 @@ public class ArtSchoolDetail extends TenantEntity {
*/
private String website;
+ /**
+ * 邮编
+ */
+ private String postcode;
+
+ /**
+ * 建校年份
+ */
+ private Integer establishYear;
+
+ /**
+ * 占地面积(亩)
+ */
+ private BigDecimal campusAreaMu;
+
+ /**
+ * 图书馆藏书量
+ */
+ private Long libraryCollection;
+
+ /**
+ * 男生比例
+ */
+ private BigDecimal maleRatio;
+
+ /**
+ * 女生比例
+ */
+ private BigDecimal femaleRatio;
+
+ /**
+ * 是否985:0否1是
+ */
+ @TableField("is_985")
+ private Integer is985;
+
+ /**
+ * 是否211:0否1是
+ */
+ @TableField("is_211")
+ private Integer is211;
+
+ /**
+ * 是否双一流:0否1是
+ */
+ @TableField("is_double_first_class")
+ private Integer isDoubleFirstClass;
+
+ /**
+ * 是否省重点:0否1是
+ */
+ @TableField("is_key_university")
+ private Integer isKeyUniversity;
+
+ /**
+ * 是否公办:0否1是
+ */
+ @TableField("is_public")
+ private Integer isPublic;
+
+ /**
+ * 学校标签数组
+ */
+ @TableField(typeHandler = ArrayTypeHandler.class)
+ private String[] tags;
+
+ /**
+ * 在校学生数
+ */
+ private Long studentCount;
+
+ /**
+ * 教职工人数
+ */
+ private Long teacherCount;
+
+ /**
+ * 硕士点数量
+ */
+ private Integer masterPoint;
+
+ /**
+ * 博士点数量
+ */
+ private Integer doctorPoint;
+
+ /**
+ * 国家级重点专业数
+ */
+ private Integer keyMajorCount;
+
+ /**
+ * 就业率
+ */
+ private BigDecimal employmentRate;
+
+ /**
+ * 院校满意度
+ */
+ private BigDecimal satisfactionRate;
+
+ /**
+ * 外部院校ID
+ */
+ private Integer univId;
+
/**
* 删除标志(0代表存在 1代表删除)
*/
@@ -68,5 +186,63 @@ public class ArtSchoolDetail extends TenantEntity {
*/
private String remark;
+ /**
+ * 考研率
+ */
+ private BigDecimal masterProportionRate;
+ /**
+ * 出国率
+ */
+ private BigDecimal abroadProportionRate;
+
+ /**
+ * 是否有普通本科:0否1是
+ */
+ private Integer hasRegular;
+
+ /**
+ * 是否有专科:0否1是
+ */
+ private Integer hasJunior;
+
+ /**
+ * 是否有硕士点:0否1是
+ */
+ private Integer hasMaster;
+
+ /**
+ * 是否双高计划:0否1是
+ */
+ private Integer isDoubleHighPlan;
+
+ /**
+ * 是否强基计划:0否1是
+ */
+ private Integer isStrongPlan;
+
+ /**
+ * 泰晤士中国排名
+ */
+ private Integer twsdlRank;
+
+ /**
+ * 校友会排名
+ */
+ private Integer xyhRank;
+
+ /**
+ * 武书连排名
+ */
+ private Integer wslRank;
+
+ /**
+ * US中国排名
+ */
+ private Integer usdaluRank;
+
+ /**
+ * QS排名
+ */
+ private Integer qsdaluRank;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolMajor.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolMajor.java
index 5bbe055..d1571f4 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolMajor.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolMajor.java
@@ -24,8 +24,8 @@ public class ArtSchoolMajor extends TenantEntity {
/**
* 主键ID
*/
- @TableId(value = "major_id")
- private Long majorId;
+ @TableId(value = "school_major_id")
+ private Long schoolMajorId;
/**
* 学校ID(冗余便于查)
@@ -88,5 +88,5 @@ public class ArtSchoolMajor extends TenantEntity {
*/
private String remark;
-
+ private String major51sdxId;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolRecruitMajor.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolRecruitMajor.java
new file mode 100644
index 0000000..31079e6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolRecruitMajor.java
@@ -0,0 +1,177 @@
+package org.dromara.art.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 院校招录专业对象 art_school_recruit_major
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("art_school_recruit_major")
+public class ArtSchoolRecruitMajor extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 院校招录专业ID
+ */
+ @TableId(value = "recruit_major_id")
+ private Long recruitMajorId;
+
+ /**
+ * 删除标志(0存在 1删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 学校ID
+ */
+ private Long schoolId;
+
+ /**
+ * 学校代码
+ */
+ private String schoolCode;
+
+ /**
+ * 学校名称(冗余)
+ */
+ private String schoolName;
+
+ /**
+ * 年份
+ */
+ private Long year;
+
+ /**
+ * 专业ID
+ */
+ private Long majorId;
+
+ /**
+ * 专业代码
+ */
+ private String majorCode;
+
+ /**
+ * 专业名称
+ */
+ private String majorName;
+
+ /**
+ * 招生代码(为空则存空串)
+ */
+ private String enrollCode;
+
+ /**
+ * 数据状态(停招/新招/新增)
+ */
+ private String dataStatus;
+
+ /**
+ * 批次
+ */
+ private String batchName;
+
+ /**
+ * 专业类型
+ */
+ private String majorType;
+
+ /**
+ * 二级专业类型
+ */
+ private String majorTypeSub;
+
+ /**
+ * 科类(文/理)
+ */
+ private String subjectType;
+
+ /**
+ * 录取方式缩写
+ */
+ private String admissionWayShort;
+
+ /**
+ * 对外录取方式
+ */
+ private String admissionWayExternal;
+
+ /**
+ * 对外录取方式运算符
+ */
+ private String admissionWayExternalOp;
+
+ /**
+ * 内部录取方式
+ */
+ private String admissionWayInternal;
+
+ /**
+ * 内部录取方式运算符
+ */
+ private String admissionWayInternalOp;
+
+ /**
+ * 计划招生人数
+ */
+ private Long planEnroll;
+
+ /**
+ * 主考科目
+ */
+ private String mainExamSubject;
+
+ /**
+ * 学制(年)
+ */
+ private Long schoolingYears;
+
+ /**
+ * 院校限制说明
+ */
+ private String enrollLimitDesc;
+
+ /**
+ * 学费(元/年)
+ */
+ private Long tuitionFee;
+
+ /**
+ * 文化分数限制
+ */
+ private Long cultureScoreLimit;
+
+ /**
+ * 专业分数限制
+ */
+ private Long majorScoreLimit;
+
+ /**
+ * 语文成绩限制
+ */
+ private Long chineseScoreLimit;
+
+ /**
+ * 英语成绩限制
+ */
+ private Long englishScoreLimit;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolRecruitMajorHistory.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolRecruitMajorHistory.java
new file mode 100644
index 0000000..af0b74a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/ArtSchoolRecruitMajorHistory.java
@@ -0,0 +1,167 @@
+package org.dromara.art.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 院校招录专业历年录取数据对象 art_school_recruit_major_history
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("art_school_recruit_major_history")
+public class ArtSchoolRecruitMajorHistory extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 历年录取数据ID
+ */
+ @TableId(value = "history_id")
+ private Long historyId;
+
+ /**
+ * 删除标志(0存在 1删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 对应招录专业ID
+ */
+ private Long recruitMajorId;
+
+ /**
+ * 学校ID
+ */
+ private Long schoolId;
+
+ /**
+ * 学校代码
+ */
+ private String schoolCode;
+
+ /**
+ * 院校代码
+ */
+ private String collegeCode;
+
+ /**
+ * 学校名称
+ */
+ private String schoolName;
+
+ /**
+ * 专业ID
+ */
+ private Long majorId;
+
+ /**
+ * 专业代码
+ */
+ private String majorCode;
+
+ /**
+ * 专业名称
+ */
+ private String majorName;
+
+ /**
+ * 招生代码
+ */
+ private String enrollCode;
+
+ /**
+ * 专业类型
+ */
+ private String majorType;
+
+ /**
+ * 专业类别子级
+ */
+ private String majorTypeSub;
+
+ /**
+ * 主考科目
+ */
+ private String mainExamSubject;
+
+ /**
+ * 年份
+ */
+ private Long year;
+
+ /**
+ * 科类(文/理)
+ */
+ private String subjectType;
+
+ /**
+ * 批次
+ */
+ private String batchName;
+
+ /**
+ * 录取方式(文*x+专*y)
+ */
+ private String admissionFormula;
+
+ /**
+ * 录取概率规则运算符
+ */
+ private String probabilityOperator;
+
+ /**
+ * 省控线
+ */
+ private Long controlScore;
+
+ /**
+ * 录取线
+ */
+ private Long admissionScore;
+
+ /**
+ * 招生人数
+ */
+ private Long planEnroll;
+
+ /**
+ * 实际投档人数
+ */
+ private Long filedAmount;
+
+ /**
+ * 录取数
+ */
+ private Long admitAmount;
+
+ /**
+ * 一志愿录取数
+ */
+ private Long firstChoiceAdmitAmount;
+
+ /**
+ * 最低分数差
+ */
+ private Long minScoreDiff;
+
+ /**
+ * 学费(元/年)
+ */
+ private Long tuitionFee;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtHistoryScoreControlLineBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtHistoryScoreControlLineBo.java
new file mode 100644
index 0000000..3780463
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtHistoryScoreControlLineBo.java
@@ -0,0 +1,91 @@
+package org.dromara.art.domain.bo;
+
+import org.dromara.art.domain.ArtHistoryScoreControlLine;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 历年省控线业务对象 art_history_score_control_line
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ArtHistoryScoreControlLine.class, reverseConvertGenerate = false)
+public class ArtHistoryScoreControlLineBo extends BaseEntity {
+
+ /**
+ * 省控线主键
+ */
+ @NotNull(message = "省控线主键不能为空", groups = { EditGroup.class })
+ private Long controlId;
+
+ /**
+ * 省份行政区划代码
+ */
+ @NotBlank(message = "省份行政区划代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String provinceCode;
+
+ /**
+ * 省份名称
+ */
+ @NotBlank(message = "省份名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String provinceName;
+
+ /**
+ * 年份
+ */
+ @NotNull(message = "年份不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long year;
+
+ /**
+ * 专业类别
+ */
+ @NotBlank(message = "专业类别不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String majorCategory;
+
+ /**
+ * 批次
+ */
+ @NotBlank(message = "批次不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String batchName;
+
+ /**
+ * 科类(文/理)
+ */
+ @NotBlank(message = "科类(文/理)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String subjectType;
+
+ /**
+ * 文化成绩分数
+ */
+ private Long cultureScore;
+
+ /**
+ * 专业成绩分数
+ */
+ private Long majorScore;
+
+ /**
+ * 文化成绩校考分数
+ */
+ private Long cultureScoreExam;
+
+ /**
+ * 专业成绩校考分数
+ */
+ private Long majorScoreExam;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtMajorBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtMajorBo.java
new file mode 100644
index 0000000..d47a77d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtMajorBo.java
@@ -0,0 +1,87 @@
+package org.dromara.art.domain.bo;
+
+import org.dromara.art.domain.ArtMajor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 艺术专业库业务对象 art_major
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ArtMajor.class, reverseConvertGenerate = false)
+public class ArtMajorBo extends BaseEntity {
+
+ /**
+ * 专业主键ID
+ */
+ @NotNull(message = "专业主键ID不能为空", groups = { EditGroup.class })
+ private Long majorId;
+
+ /**
+ * 专业名称
+ */
+ @NotBlank(message = "专业名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String majorName;
+
+ /**
+ * 学历层次
+ */
+ @NotBlank(message = "学历层次不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String educationLevel;
+
+ /**
+ * 专业图标
+ */
+ private String majorIcon;
+
+ /**
+ * 学制(年)
+ */
+ private Long schoolingYears;
+
+ /**
+ * 所属一级学科
+ */
+ private String disciplinePrimary;
+
+ /**
+ * 所属二级学科
+ */
+ private String disciplineSecondary;
+
+ /**
+ * 授予学士学位
+ */
+ private String degreeAwarded;
+
+ /**
+ * 专业概括
+ */
+ private String summary;
+
+ /**
+ * 培养方向
+ */
+ private String trainingDirection;
+
+ /**
+ * 主要课程
+ */
+ private String coreCourses;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolBo.java
index a660ac0..8a47042 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolBo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolBo.java
@@ -43,11 +43,6 @@ public class ArtSchoolBo extends BaseEntity {
*/
private String shortName;
- /**
- * 院校图标
- */
- private String schoolIcon;
-
/**
* 省份
*/
@@ -83,26 +78,6 @@ public class ArtSchoolBo extends BaseEntity {
*/
private String supervisorDept;
- /**
- * 建校时间(年)
- */
- private Long establishYear;
-
- /**
- * 占地面积(亩)
- */
- private Long campusAreaMu;
-
- /**
- * 男生比例(%)
- */
- private Long maleRatio;
-
- /**
- * 女生比例(%)
- */
- private Long femaleRatio;
-
/**
* 备注
*/
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolCollegeBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolCollegeBo.java
index fd7e226..b9b1ffb 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolCollegeBo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolCollegeBo.java
@@ -1,5 +1,6 @@
package org.dromara.art.domain.bo;
+import com.fasterxml.jackson.databind.JsonNode;
import org.dromara.art.domain.ArtSchoolCollege;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
@@ -9,6 +10,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
+import java.util.List;
+
/**
* 学校学院业务对象 art_school_college
*
@@ -58,5 +61,7 @@ public class ArtSchoolCollegeBo extends BaseEntity {
*/
private String remark;
+ private Integer college51sdxId;
+ private List schoolMajorBoList;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolDetailBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolDetailBo.java
index f132709..0a64962 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolDetailBo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolDetailBo.java
@@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+
/**
* 学校详细信息业务对象 art_school_detail
*
@@ -37,6 +39,16 @@ public class ArtSchoolDetailBo extends BaseEntity {
*/
private String introduction;
+ /**
+ * 校徽
+ */
+ private String schoolIcon;
+
+ /**
+ * 背景图
+ */
+ private String backGround;
+
/**
* 学校地址
*/
@@ -57,10 +69,168 @@ public class ArtSchoolDetailBo extends BaseEntity {
*/
private String website;
+ /**
+ * 邮编
+ */
+ private String postcode;
+
+ /**
+ * 建校年份
+ */
+ private Integer establishYear;
+
+ /**
+ * 占地面积(亩)
+ */
+ private BigDecimal campusAreaMu;
+
+ /**
+ * 图书馆藏书量
+ */
+ private Long libraryCollection;
+
+ /**
+ * 男生比例
+ */
+ private BigDecimal maleRatio;
+
+ /**
+ * 女生比例
+ */
+ private BigDecimal femaleRatio;
+
+ /**
+ * 是否985:0否1是
+ */
+ private Integer is985;
+
+ /**
+ * 是否211:0否1是
+ */
+ private Integer is211;
+
+ /**
+ * 是否双一流:0否1是
+ */
+ private Integer isDoubleFirstClass;
+
+ /**
+ * 是否省重点:0否1是
+ */
+ private Integer isKeyUniversity;
+
+ /**
+ * 是否公办:0否1是
+ */
+ private Integer isPublic;
+
+ /**
+ * 学校标签数组
+ */
+ private String[] tags;
+
+ /**
+ * 在校学生数
+ */
+ private Long studentCount;
+
+ /**
+ * 教职工人数
+ */
+ private Long teacherCount;
+
+ /**
+ * 硕士点数量
+ */
+ private Integer masterPoint;
+
+ /**
+ * 博士点数量
+ */
+ private Integer doctorPoint;
+
+ /**
+ * 国家级重点专业数
+ */
+ private Integer keyMajorCount;
+
+ /**
+ * 就业率
+ */
+ private BigDecimal employmentRate;
+
+ /**
+ * 院校满意度
+ */
+ private BigDecimal satisfactionRate;
+
+ /**
+ * 外部院校ID
+ */
+ private Integer univId;
+
/**
* 备注
*/
private String remark;
+ /**
+ * 考研率
+ */
+ private BigDecimal masterProportionRate;
+ /**
+ * 出国率
+ */
+ private BigDecimal abroadProportionRate;
+
+ /**
+ * 是否有普通本科:0否1是
+ */
+ private Integer hasRegular;
+
+ /**
+ * 是否有专科:0否1是
+ */
+ private Integer hasJunior;
+
+ /**
+ * 是否有硕士点:0否1是
+ */
+ private Integer hasMaster;
+
+ /**
+ * 是否双高计划:0否1是
+ */
+ private Integer isDoubleHighPlan;
+
+ /**
+ * 是否强基计划:0否1是
+ */
+ private Integer isStrongPlan;
+
+ /**
+ * 泰晤士中国排名
+ */
+ private Integer twsdlRank;
+
+ /**
+ * 校友会排名
+ */
+ private Integer xyhRank;
+
+ /**
+ * 武书连排名
+ */
+ private Integer wslRank;
+
+ /**
+ * US中国排名
+ */
+ private Integer usdaluRank;
+
+ /**
+ * QS排名
+ */
+ private Integer qsdaluRank;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolMajorBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolMajorBo.java
index 8114981..6394a69 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolMajorBo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolMajorBo.java
@@ -26,7 +26,7 @@ public class ArtSchoolMajorBo extends BaseEntity {
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
- private Long majorId;
+ private Long schoolMajorId;
/**
* 学校ID(冗余便于查)
@@ -88,6 +88,8 @@ public class ArtSchoolMajorBo extends BaseEntity {
*/
private List majorTags;
+ private String major51sdxId;
+
/**
* 备注
*/
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolRecruitMajorBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolRecruitMajorBo.java
new file mode 100644
index 0000000..0e4a164
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolRecruitMajorBo.java
@@ -0,0 +1,178 @@
+package org.dromara.art.domain.bo;
+
+import org.dromara.art.domain.ArtSchoolRecruitMajor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 院校招录专业业务对象 art_school_recruit_major
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ArtSchoolRecruitMajor.class, reverseConvertGenerate = false)
+public class ArtSchoolRecruitMajorBo extends BaseEntity {
+
+ /**
+ * 院校招录专业ID
+ */
+ @NotNull(message = "院校招录专业ID不能为空", groups = { EditGroup.class })
+ private Long recruitMajorId;
+
+ /**
+ * 学校ID
+ */
+ @NotNull(message = "学校ID不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long schoolId;
+
+ /**
+ * 学校代码
+ */
+ @NotBlank(message = "学校代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String schoolCode;
+
+ /**
+ * 学校名称(冗余)
+ */
+ @NotBlank(message = "学校名称(冗余)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String schoolName;
+
+ /**
+ * 年份
+ */
+ @NotNull(message = "年份不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long year;
+
+ /**
+ * 专业ID
+ */
+ private Long majorId;
+
+ /**
+ * 专业代码
+ */
+ @NotBlank(message = "专业代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String majorCode;
+
+ /**
+ * 专业名称
+ */
+ @NotBlank(message = "专业名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String majorName;
+
+ /**
+ * 招生代码(为空则存空串)
+ */
+ @NotBlank(message = "招生代码(为空则存空串)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String enrollCode;
+
+ /**
+ * 数据状态(停招/新招/新增)
+ */
+ @NotBlank(message = "数据状态(停招/新招/新增)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String dataStatus;
+
+ /**
+ * 批次
+ */
+ private String batchName;
+
+ /**
+ * 专业类型
+ */
+ private String majorType;
+
+ /**
+ * 二级专业类型
+ */
+ private String majorTypeSub;
+
+ /**
+ * 科类(文/理)
+ */
+ private String subjectType;
+
+ /**
+ * 录取方式缩写
+ */
+ private String admissionWayShort;
+
+ /**
+ * 对外录取方式
+ */
+ private String admissionWayExternal;
+
+ /**
+ * 对外录取方式运算符
+ */
+ private String admissionWayExternalOp;
+
+ /**
+ * 内部录取方式
+ */
+ private String admissionWayInternal;
+
+ /**
+ * 内部录取方式运算符
+ */
+ private String admissionWayInternalOp;
+
+ /**
+ * 计划招生人数
+ */
+ private Long planEnroll;
+
+ /**
+ * 主考科目
+ */
+ private String mainExamSubject;
+
+ /**
+ * 学制(年)
+ */
+ private Long schoolingYears;
+
+ /**
+ * 院校限制说明
+ */
+ private String enrollLimitDesc;
+
+ /**
+ * 学费(元/年)
+ */
+ private Long tuitionFee;
+
+ /**
+ * 文化分数限制
+ */
+ private Long cultureScoreLimit;
+
+ /**
+ * 专业分数限制
+ */
+ private Long majorScoreLimit;
+
+ /**
+ * 语文成绩限制
+ */
+ private Long chineseScoreLimit;
+
+ /**
+ * 英语成绩限制
+ */
+ private Long englishScoreLimit;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolRecruitMajorHistoryBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolRecruitMajorHistoryBo.java
new file mode 100644
index 0000000..04f1684
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolRecruitMajorHistoryBo.java
@@ -0,0 +1,167 @@
+package org.dromara.art.domain.bo;
+
+import org.dromara.art.domain.ArtSchoolRecruitMajorHistory;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 院校招录专业历年录取数据业务对象 art_school_recruit_major_history
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ArtSchoolRecruitMajorHistory.class, reverseConvertGenerate = false)
+public class ArtSchoolRecruitMajorHistoryBo extends BaseEntity {
+
+ /**
+ * 历年录取数据ID
+ */
+ @NotNull(message = "历年录取数据ID不能为空", groups = { EditGroup.class })
+ private Long historyId;
+
+ /**
+ * 对应招录专业ID
+ */
+ @NotNull(message = "对应招录专业ID不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long recruitMajorId;
+
+ /**
+ * 学校ID
+ */
+ @NotNull(message = "学校ID不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long schoolId;
+
+ /**
+ * 学校代码
+ */
+ @NotBlank(message = "学校代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String schoolCode;
+
+ /**
+ * 院校代码
+ */
+ private String collegeCode;
+
+ /**
+ * 学校名称
+ */
+ @NotBlank(message = "学校名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String schoolName;
+
+ /**
+ * 专业ID
+ */
+ private Long majorId;
+
+ /**
+ * 专业代码
+ */
+ @NotBlank(message = "专业代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String majorCode;
+
+ /**
+ * 专业名称
+ */
+ @NotBlank(message = "专业名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String majorName;
+
+ /**
+ * 招生代码
+ */
+ private String enrollCode;
+
+ /**
+ * 专业类型
+ */
+ private String majorType;
+
+ /**
+ * 专业类别子级
+ */
+ private String majorTypeSub;
+
+ /**
+ * 主考科目
+ */
+ private String mainExamSubject;
+
+ /**
+ * 年份
+ */
+ @NotNull(message = "年份不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long year;
+
+ /**
+ * 科类(文/理)
+ */
+ private String subjectType;
+
+ /**
+ * 批次
+ */
+ private String batchName;
+
+ /**
+ * 录取方式(文*x+专*y)
+ */
+ private String admissionFormula;
+
+ /**
+ * 录取概率规则运算符
+ */
+ private String probabilityOperator;
+
+ /**
+ * 省控线
+ */
+ private Long controlScore;
+
+ /**
+ * 录取线
+ */
+ private Long admissionScore;
+
+ /**
+ * 招生人数
+ */
+ private Long planEnroll;
+
+ /**
+ * 实际投档人数
+ */
+ private Long filedAmount;
+
+ /**
+ * 录取数
+ */
+ private Long admitAmount;
+
+ /**
+ * 一志愿录取数
+ */
+ private Long firstChoiceAdmitAmount;
+
+ /**
+ * 最低分数差
+ */
+ private Long minScoreDiff;
+
+ /**
+ * 学费(元/年)
+ */
+ private Long tuitionFee;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolSubmitBo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolSubmitBo.java
index db2a48c..db5d0b9 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolSubmitBo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/bo/ArtSchoolSubmitBo.java
@@ -26,6 +26,9 @@ public class ArtSchoolSubmitBo {
@NotNull(message = "学校详情信息不能为空")
private ArtSchoolDetailBo detail;
+ private List artSchoolCollegeBoList;
+
+
/**
* 学校招生代码列表
*/
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolDetailSheetExcel.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolDetailSheetExcel.java
index 23439f9..1aa07e9 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolDetailSheetExcel.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolDetailSheetExcel.java
@@ -4,6 +4,8 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
+import java.math.BigDecimal;
+
/**
* 学校详情导入导出模板行
*/
@@ -23,6 +25,9 @@ public class ArtSchoolDetailSheetExcel {
@ExcelProperty("学校介绍")
private String introduction;
+ @ExcelProperty("学校图标")
+ private String schoolIcon;
+
@ExcelProperty("学校地址")
private String address;
@@ -35,6 +40,63 @@ public class ArtSchoolDetailSheetExcel {
@ExcelProperty("官网地址")
private String website;
+ @ExcelProperty("邮编")
+ private String postcode;
+
+ @ExcelProperty("建校年份")
+ private Integer establishYear;
+
+ @ExcelProperty("占地面积(亩)")
+ private BigDecimal campusAreaMu;
+
+ @ExcelProperty("图书馆藏书量")
+ private Long libraryCollection;
+
+ @ExcelProperty("男生比例")
+ private BigDecimal maleRatio;
+
+ @ExcelProperty("女生比例")
+ private BigDecimal femaleRatio;
+
+ @ExcelProperty("是否985(0/1)")
+ private Integer is985;
+
+ @ExcelProperty("是否211(0/1)")
+ private Integer is211;
+
+ @ExcelProperty("是否双一流(0/1)")
+ private Integer isDoubleFirstClass;
+
+ @ExcelProperty("是否省重点(0/1)")
+ private Integer isKeyUniversity;
+
+ @ExcelProperty("学校标签(逗号分隔)")
+ private String tags;
+
+ @ExcelProperty("在校学生数")
+ private Long studentCount;
+
+ @ExcelProperty("教职工人数")
+ private Long teacherCount;
+
+ @ExcelProperty("硕士点数量")
+ private Integer masterPoint;
+
+ @ExcelProperty("博士点数量")
+ private Integer doctorPoint;
+
+ @ExcelProperty("国家级重点专业数")
+ private Integer keyMajorCount;
+
+ @ExcelProperty("就业率")
+ private BigDecimal employmentRate;
+
+ @ExcelProperty("院校满意度")
+ private BigDecimal satisfactionRate;
+
+ @ExcelProperty("外部院校ID")
+ private Integer univId;
+
@ExcelProperty("备注")
private String remark;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolMajorSheetExcel.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolMajorSheetExcel.java
index d56bf8c..00309cb 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolMajorSheetExcel.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolMajorSheetExcel.java
@@ -12,7 +12,7 @@ import lombok.Data;
public class ArtSchoolMajorSheetExcel {
@ExcelProperty("专业ID")
- private Long majorId;
+ private Long schoolMajorId;
@ExcelProperty("学校编码*")
private String schoolMainCode;
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolSheetExcel.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolSheetExcel.java
index 897a7a0..cd81496 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolSheetExcel.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/excel/ArtSchoolSheetExcel.java
@@ -23,9 +23,6 @@ public class ArtSchoolSheetExcel {
@ExcelProperty("学校简称")
private String shortName;
- @ExcelProperty("学校图标")
- private String schoolIcon;
-
@ExcelProperty("省份")
private String province;
@@ -47,18 +44,6 @@ public class ArtSchoolSheetExcel {
@ExcelProperty("主管部门")
private String supervisorDept;
- @ExcelProperty("建校年份")
- private Long establishYear;
-
- @ExcelProperty("占地面积(亩)")
- private Long campusAreaMu;
-
- @ExcelProperty("男生比例(%)")
- private Long maleRatio;
-
- @ExcelProperty("女生比例(%)")
- private Long femaleRatio;
-
@ExcelProperty("备注")
private String remark;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtHistoryScoreControlLineVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtHistoryScoreControlLineVo.java
new file mode 100644
index 0000000..93ef6ad
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtHistoryScoreControlLineVo.java
@@ -0,0 +1,104 @@
+package org.dromara.art.domain.vo;
+
+import org.dromara.art.domain.ArtHistoryScoreControlLine;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 历年省控线视图对象 art_history_score_control_line
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ArtHistoryScoreControlLine.class)
+public class ArtHistoryScoreControlLineVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 省控线主键
+ */
+ @ExcelProperty(value = "省控线主键")
+ private Long controlId;
+
+ /**
+ * 省份行政区划代码
+ */
+ @ExcelProperty(value = "省份行政区划代码")
+ private String provinceCode;
+
+ /**
+ * 省份名称
+ */
+ @ExcelProperty(value = "省份名称")
+ private String provinceName;
+
+ /**
+ * 年份
+ */
+ @ExcelProperty(value = "年份")
+ private Long year;
+
+ /**
+ * 专业类别
+ */
+ @ExcelProperty(value = "专业类别")
+ private String majorCategory;
+
+ /**
+ * 批次
+ */
+ @ExcelProperty(value = "批次")
+ private String batchName;
+
+ /**
+ * 科类(文/理)
+ */
+ @ExcelProperty(value = "科类(文/理)")
+ private String subjectType;
+
+ /**
+ * 文化成绩分数
+ */
+ @ExcelProperty(value = "文化成绩分数")
+ private Long cultureScore;
+
+ /**
+ * 专业成绩分数
+ */
+ @ExcelProperty(value = "专业成绩分数")
+ private Long majorScore;
+
+ /**
+ * 文化成绩校考分数
+ */
+ @ExcelProperty(value = "文化成绩校考分数")
+ private Long cultureScoreExam;
+
+ /**
+ * 专业成绩校考分数
+ */
+ @ExcelProperty(value = "专业成绩校考分数")
+ private Long majorScoreExam;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtMajorVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtMajorVo.java
new file mode 100644
index 0000000..05ca89f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtMajorVo.java
@@ -0,0 +1,104 @@
+package org.dromara.art.domain.vo;
+
+import org.dromara.art.domain.ArtMajor;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 艺术专业库视图对象 art_major
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ArtMajor.class)
+public class ArtMajorVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 专业主键ID
+ */
+ @ExcelProperty(value = "专业主键ID")
+ private Long majorId;
+
+ /**
+ * 专业名称
+ */
+ @ExcelProperty(value = "专业名称")
+ private String majorName;
+
+ /**
+ * 学历层次
+ */
+ @ExcelProperty(value = "学历层次")
+ private String educationLevel;
+
+ /**
+ * 专业图标
+ */
+ @ExcelProperty(value = "专业图标")
+ private String majorIcon;
+
+ /**
+ * 学制(年)
+ */
+ @ExcelProperty(value = "学制(年)")
+ private Long schoolingYears;
+
+ /**
+ * 所属一级学科
+ */
+ @ExcelProperty(value = "所属一级学科")
+ private String disciplinePrimary;
+
+ /**
+ * 所属二级学科
+ */
+ @ExcelProperty(value = "所属二级学科")
+ private String disciplineSecondary;
+
+ /**
+ * 授予学士学位
+ */
+ @ExcelProperty(value = "授予学士学位")
+ private String degreeAwarded;
+
+ /**
+ * 专业概括
+ */
+ @ExcelProperty(value = "专业概括")
+ private String summary;
+
+ /**
+ * 培养方向
+ */
+ @ExcelProperty(value = "培养方向")
+ private String trainingDirection;
+
+ /**
+ * 主要课程
+ */
+ @ExcelProperty(value = "主要课程")
+ private String coreCourses;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolDetailVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolDetailVo.java
index 3a2fe57..c5f0aee 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolDetailVo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolDetailVo.java
@@ -3,14 +3,12 @@ package org.dromara.art.domain.vo;
import org.dromara.art.domain.ArtSchoolDetail;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
-import org.dromara.common.excel.annotation.ExcelDictFormat;
-import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
-import java.util.Date;
+import java.math.BigDecimal;
@@ -43,10 +41,15 @@ public class ArtSchoolDetailVo implements Serializable {
/**
* 学校详细介绍(大文本)
*/
- @ExcelProperty(value = "学校详细介绍", converter = ExcelDictConvert.class)
- @ExcelDictFormat(readConverterExp = "大=文本")
+ @ExcelProperty(value = "学校详细介绍")
private String introduction;
+ /**
+ * 校徽
+ */
+ @ExcelProperty(value = "校徽")
+ private String schoolIcon;
+
/**
* 学校地址
*/
@@ -71,6 +74,120 @@ public class ArtSchoolDetailVo implements Serializable {
@ExcelProperty(value = "官网地址")
private String website;
+ /**
+ * 邮编
+ */
+ @ExcelProperty(value = "邮编")
+ private String postcode;
+
+ /**
+ * 建校年份
+ */
+ @ExcelProperty(value = "建校年份")
+ private Integer establishYear;
+
+ /**
+ * 占地面积(亩)
+ */
+ @ExcelProperty(value = "占地面积(亩)")
+ private BigDecimal campusAreaMu;
+
+ /**
+ * 图书馆藏书量
+ */
+ @ExcelProperty(value = "图书馆藏书量")
+ private Long libraryCollection;
+
+ /**
+ * 男生比例
+ */
+ @ExcelProperty(value = "男生比例")
+ private BigDecimal maleRatio;
+
+ /**
+ * 女生比例
+ */
+ @ExcelProperty(value = "女生比例")
+ private BigDecimal femaleRatio;
+
+ /**
+ * 是否985:0否1是
+ */
+ @ExcelProperty(value = "是否985")
+ private Integer is985;
+
+ /**
+ * 是否211:0否1是
+ */
+ @ExcelProperty(value = "是否211")
+ private Integer is211;
+
+ /**
+ * 是否双一流:0否1是
+ */
+ @ExcelProperty(value = "是否双一流")
+ private Integer isDoubleFirstClass;
+
+ /**
+ * 是否省重点:0否1是
+ */
+ @ExcelProperty(value = "是否省重点")
+ private Integer isKeyUniversity;
+
+ /**
+ * 学校标签数组
+ */
+ @ExcelProperty(value = "学校标签")
+ private String[] tags;
+
+ /**
+ * 在校学生数
+ */
+ @ExcelProperty(value = "在校学生数")
+ private Long studentCount;
+
+ /**
+ * 教职工人数
+ */
+ @ExcelProperty(value = "教职工人数")
+ private Long teacherCount;
+
+ /**
+ * 硕士点数量
+ */
+ @ExcelProperty(value = "硕士点数量")
+ private Integer masterPoint;
+
+ /**
+ * 博士点数量
+ */
+ @ExcelProperty(value = "博士点数量")
+ private Integer doctorPoint;
+
+ /**
+ * 国家级重点专业数
+ */
+ @ExcelProperty(value = "国家级重点专业数")
+ private Integer keyMajorCount;
+
+ /**
+ * 就业率
+ */
+ @ExcelProperty(value = "就业率")
+ private BigDecimal employmentRate;
+
+ /**
+ * 院校满意度
+ */
+ @ExcelProperty(value = "院校满意度")
+ private BigDecimal satisfactionRate;
+
+ /**
+ * 外部院校ID
+ */
+ @ExcelProperty(value = "外部院校ID")
+ private Integer univId;
+
/**
* 备注
*/
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolJsonImportPreviewVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolJsonImportPreviewVo.java
new file mode 100644
index 0000000..9f125dc
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolJsonImportPreviewVo.java
@@ -0,0 +1,69 @@
+package org.dromara.art.domain.vo;
+
+import lombok.Data;
+import org.dromara.art.domain.bo.ArtSchoolSubmitBo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 学校 JSON 导入预检结果(测试接口)
+ */
+@Data
+public class ArtSchoolJsonImportPreviewVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 源目录
+ */
+ private String sourceDir;
+
+ /**
+ * 文件总数
+ */
+ private Integer totalFileCount;
+
+ /**
+ * 可入库数量(结构已准备,当前未执行入库)
+ */
+ private Integer readyCount;
+
+ /**
+ * 数据库重复数量
+ */
+ private Integer duplicateInDbCount;
+
+ /**
+ * 文件内重复数量
+ */
+ private Integer duplicateInFileCount;
+
+ /**
+ * 无效数据数量
+ */
+ private Integer invalidCount;
+
+ /**
+ * 文件读取失败数量
+ */
+ private Integer readFailCount;
+
+ /**
+ * 预检明细(按请求预览条数截断)
+ */
+ private List details;
+
+ /**
+ * 预构建入库对象(按请求预览条数截断)
+ */
+ private List submitPreviewList;
+
+ /**
+ * 预留调用说明
+ */
+ private String serviceCallHint;
+}
+
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolMajorVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolMajorVo.java
index 374b90d..40315f4 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolMajorVo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolMajorVo.java
@@ -33,7 +33,7 @@ public class ArtSchoolMajorVo implements Serializable {
* 主键ID
*/
@ExcelProperty(value = "主键ID")
- private Long majorId;
+ private Long schoolMajorId;
/**
* 学校ID(冗余便于查)
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolRecruitMajorHistoryVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolRecruitMajorHistoryVo.java
new file mode 100644
index 0000000..35dcca2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolRecruitMajorHistoryVo.java
@@ -0,0 +1,194 @@
+package org.dromara.art.domain.vo;
+
+import org.dromara.art.domain.ArtSchoolRecruitMajorHistory;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 院校招录专业历年录取数据视图对象 art_school_recruit_major_history
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ArtSchoolRecruitMajorHistory.class)
+public class ArtSchoolRecruitMajorHistoryVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 历年录取数据ID
+ */
+ @ExcelProperty(value = "历年录取数据ID")
+ private Long historyId;
+
+ /**
+ * 对应招录专业ID
+ */
+ @ExcelProperty(value = "对应招录专业ID")
+ private Long recruitMajorId;
+
+ /**
+ * 学校ID
+ */
+ @ExcelProperty(value = "学校ID")
+ private Long schoolId;
+
+ /**
+ * 学校代码
+ */
+ @ExcelProperty(value = "学校代码")
+ private String schoolCode;
+
+ /**
+ * 院校代码
+ */
+ @ExcelProperty(value = "院校代码")
+ private String collegeCode;
+
+ /**
+ * 学校名称
+ */
+ @ExcelProperty(value = "学校名称")
+ private String schoolName;
+
+ /**
+ * 专业ID
+ */
+ @ExcelProperty(value = "专业ID")
+ private Long majorId;
+
+ /**
+ * 专业代码
+ */
+ @ExcelProperty(value = "专业代码")
+ private String majorCode;
+
+ /**
+ * 专业名称
+ */
+ @ExcelProperty(value = "专业名称")
+ private String majorName;
+
+ /**
+ * 招生代码
+ */
+ @ExcelProperty(value = "招生代码")
+ private String enrollCode;
+
+ /**
+ * 专业类型
+ */
+ @ExcelProperty(value = "专业类型")
+ private String majorType;
+
+ /**
+ * 专业类别子级
+ */
+ @ExcelProperty(value = "专业类别子级")
+ private String majorTypeSub;
+
+ /**
+ * 主考科目
+ */
+ @ExcelProperty(value = "主考科目")
+ private String mainExamSubject;
+
+ /**
+ * 年份
+ */
+ @ExcelProperty(value = "年份")
+ private Long year;
+
+ /**
+ * 科类(文/理)
+ */
+ @ExcelProperty(value = "科类(文/理)")
+ private String subjectType;
+
+ /**
+ * 批次
+ */
+ @ExcelProperty(value = "批次")
+ private String batchName;
+
+ /**
+ * 录取方式(文*x+专*y)
+ */
+ @ExcelProperty(value = "录取方式(文*x+专*y)")
+ private String admissionFormula;
+
+ /**
+ * 录取概率规则运算符
+ */
+ @ExcelProperty(value = "录取概率规则运算符")
+ private String probabilityOperator;
+
+ /**
+ * 省控线
+ */
+ @ExcelProperty(value = "省控线")
+ private Long controlScore;
+
+ /**
+ * 录取线
+ */
+ @ExcelProperty(value = "录取线")
+ private Long admissionScore;
+
+ /**
+ * 招生人数
+ */
+ @ExcelProperty(value = "招生人数")
+ private Long planEnroll;
+
+ /**
+ * 实际投档人数
+ */
+ @ExcelProperty(value = "实际投档人数")
+ private Long filedAmount;
+
+ /**
+ * 录取数
+ */
+ @ExcelProperty(value = "录取数")
+ private Long admitAmount;
+
+ /**
+ * 一志愿录取数
+ */
+ @ExcelProperty(value = "一志愿录取数")
+ private Long firstChoiceAdmitAmount;
+
+ /**
+ * 最低分数差
+ */
+ @ExcelProperty(value = "最低分数差")
+ private Long minScoreDiff;
+
+ /**
+ * 学费(元/年)
+ */
+ @ExcelProperty(value = "学费(元/年)")
+ private Long tuitionFee;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolRecruitMajorVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolRecruitMajorVo.java
new file mode 100644
index 0000000..89e0e67
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolRecruitMajorVo.java
@@ -0,0 +1,206 @@
+package org.dromara.art.domain.vo;
+
+import org.dromara.art.domain.ArtSchoolRecruitMajor;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 院校招录专业视图对象 art_school_recruit_major
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ArtSchoolRecruitMajor.class)
+public class ArtSchoolRecruitMajorVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 院校招录专业ID
+ */
+ @ExcelProperty(value = "院校招录专业ID")
+ private Long recruitMajorId;
+
+ /**
+ * 学校ID
+ */
+ @ExcelProperty(value = "学校ID")
+ private Long schoolId;
+
+ /**
+ * 学校代码
+ */
+ @ExcelProperty(value = "学校代码")
+ private String schoolCode;
+
+ /**
+ * 学校名称(冗余)
+ */
+ @ExcelProperty(value = "学校名称(冗余)")
+ private String schoolName;
+
+ /**
+ * 年份
+ */
+ @ExcelProperty(value = "年份")
+ private Long year;
+
+ /**
+ * 专业ID
+ */
+ @ExcelProperty(value = "专业ID")
+ private Long majorId;
+
+ /**
+ * 专业代码
+ */
+ @ExcelProperty(value = "专业代码")
+ private String majorCode;
+
+ /**
+ * 专业名称
+ */
+ @ExcelProperty(value = "专业名称")
+ private String majorName;
+
+ /**
+ * 招生代码(为空则存空串)
+ */
+ @ExcelProperty(value = "招生代码(为空则存空串)")
+ private String enrollCode;
+
+ /**
+ * 数据状态(停招/新招/新增)
+ */
+ @ExcelProperty(value = "数据状态(停招/新招/新增)")
+ private String dataStatus;
+
+ /**
+ * 批次
+ */
+ @ExcelProperty(value = "批次")
+ private String batchName;
+
+ /**
+ * 专业类型
+ */
+ @ExcelProperty(value = "专业类型")
+ private String majorType;
+
+ /**
+ * 二级专业类型
+ */
+ @ExcelProperty(value = "二级专业类型")
+ private String majorTypeSub;
+
+ /**
+ * 科类(文/理)
+ */
+ @ExcelProperty(value = "科类(文/理)")
+ private String subjectType;
+
+ /**
+ * 录取方式缩写
+ */
+ @ExcelProperty(value = "录取方式缩写")
+ private String admissionWayShort;
+
+ /**
+ * 对外录取方式
+ */
+ @ExcelProperty(value = "对外录取方式")
+ private String admissionWayExternal;
+
+ /**
+ * 对外录取方式运算符
+ */
+ @ExcelProperty(value = "对外录取方式运算符")
+ private String admissionWayExternalOp;
+
+ /**
+ * 内部录取方式
+ */
+ @ExcelProperty(value = "内部录取方式")
+ private String admissionWayInternal;
+
+ /**
+ * 内部录取方式运算符
+ */
+ @ExcelProperty(value = "内部录取方式运算符")
+ private String admissionWayInternalOp;
+
+ /**
+ * 计划招生人数
+ */
+ @ExcelProperty(value = "计划招生人数")
+ private Long planEnroll;
+
+ /**
+ * 主考科目
+ */
+ @ExcelProperty(value = "主考科目")
+ private String mainExamSubject;
+
+ /**
+ * 学制(年)
+ */
+ @ExcelProperty(value = "学制(年)")
+ private Long schoolingYears;
+
+ /**
+ * 院校限制说明
+ */
+ @ExcelProperty(value = "院校限制说明")
+ private String enrollLimitDesc;
+
+ /**
+ * 学费(元/年)
+ */
+ @ExcelProperty(value = "学费(元/年)")
+ private Long tuitionFee;
+
+ /**
+ * 文化分数限制
+ */
+ @ExcelProperty(value = "文化分数限制")
+ private Long cultureScoreLimit;
+
+ /**
+ * 专业分数限制
+ */
+ @ExcelProperty(value = "专业分数限制")
+ private Long majorScoreLimit;
+
+ /**
+ * 语文成绩限制
+ */
+ @ExcelProperty(value = "语文成绩限制")
+ private Long chineseScoreLimit;
+
+ /**
+ * 英语成绩限制
+ */
+ @ExcelProperty(value = "英语成绩限制")
+ private Long englishScoreLimit;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolVo.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolVo.java
index 8023321..495f5fe 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolVo.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/domain/vo/ArtSchoolVo.java
@@ -10,7 +10,6 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
-import java.util.Date;
import java.util.List;
@@ -56,12 +55,6 @@ public class ArtSchoolVo implements Serializable {
@ExcelDictFormat(readConverterExp = "备=用")
private String shortName;
- /**
- * 院校图标
- */
- @ExcelProperty(value = "院校图标")
- private String schoolIcon;
-
/**
* 省份
*/
@@ -104,30 +97,6 @@ public class ArtSchoolVo implements Serializable {
@ExcelProperty(value = "主管部门:教育部/工信部/民委...")
private String supervisorDept;
- /**
- * 建校时间(年)
- */
- @ExcelProperty(value = "建校时间(年)")
- private Long establishYear;
-
- /**
- * 占地面积(亩)
- */
- @ExcelProperty(value = "占地面积(亩)")
- private Long campusAreaMu;
-
- /**
- * 男生比例(%)
- */
- @ExcelProperty(value = "男生比例(%)")
- private Long maleRatio;
-
- /**
- * 女生比例(%)
- */
- @ExcelProperty(value = "女生比例(%)")
- private Long femaleRatio;
-
/**
* 备注
*/
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtHistoryScoreControlLineMapper.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtHistoryScoreControlLineMapper.java
new file mode 100644
index 0000000..ad51e4a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtHistoryScoreControlLineMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.art.mapper;
+
+import org.dromara.art.domain.ArtHistoryScoreControlLine;
+import org.dromara.art.domain.vo.ArtHistoryScoreControlLineVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 历年省控线Mapper接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface ArtHistoryScoreControlLineMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtMajorMapper.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtMajorMapper.java
new file mode 100644
index 0000000..1e30090
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtMajorMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.art.mapper;
+
+import org.dromara.art.domain.ArtMajor;
+import org.dromara.art.domain.vo.ArtMajorVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 艺术专业库Mapper接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface ArtMajorMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtSchoolRecruitMajorHistoryMapper.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtSchoolRecruitMajorHistoryMapper.java
new file mode 100644
index 0000000..e1876b8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtSchoolRecruitMajorHistoryMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.art.mapper;
+
+import org.dromara.art.domain.ArtSchoolRecruitMajorHistory;
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorHistoryVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 院校招录专业历年录取数据Mapper接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface ArtSchoolRecruitMajorHistoryMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtSchoolRecruitMajorMapper.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtSchoolRecruitMajorMapper.java
new file mode 100644
index 0000000..fd50299
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/mapper/ArtSchoolRecruitMajorMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.art.mapper;
+
+import org.dromara.art.domain.ArtSchoolRecruitMajor;
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 院校招录专业Mapper接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface ArtSchoolRecruitMajorMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtHistoryScoreControlLineService.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtHistoryScoreControlLineService.java
new file mode 100644
index 0000000..f10e866
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtHistoryScoreControlLineService.java
@@ -0,0 +1,68 @@
+package org.dromara.art.service;
+
+import org.dromara.art.domain.vo.ArtHistoryScoreControlLineVo;
+import org.dromara.art.domain.bo.ArtHistoryScoreControlLineBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 历年省控线Service接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface IArtHistoryScoreControlLineService {
+
+ /**
+ * 查询历年省控线
+ *
+ * @param controlId 主键
+ * @return 历年省控线
+ */
+ ArtHistoryScoreControlLineVo queryById(Long controlId);
+
+ /**
+ * 分页查询历年省控线列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 历年省控线分页列表
+ */
+ TableDataInfo queryPageList(ArtHistoryScoreControlLineBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的历年省控线列表
+ *
+ * @param bo 查询条件
+ * @return 历年省控线列表
+ */
+ List queryList(ArtHistoryScoreControlLineBo bo);
+
+ /**
+ * 新增历年省控线
+ *
+ * @param bo 历年省控线
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(ArtHistoryScoreControlLineBo bo);
+
+ /**
+ * 修改历年省控线
+ *
+ * @param bo 历年省控线
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(ArtHistoryScoreControlLineBo bo);
+
+ /**
+ * 校验并批量删除历年省控线信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtMajorService.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtMajorService.java
new file mode 100644
index 0000000..c8abbe7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtMajorService.java
@@ -0,0 +1,68 @@
+package org.dromara.art.service;
+
+import org.dromara.art.domain.vo.ArtMajorVo;
+import org.dromara.art.domain.bo.ArtMajorBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 艺术专业库Service接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface IArtMajorService {
+
+ /**
+ * 查询艺术专业库
+ *
+ * @param majorId 主键
+ * @return 艺术专业库
+ */
+ ArtMajorVo queryById(Long majorId);
+
+ /**
+ * 分页查询艺术专业库列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 艺术专业库分页列表
+ */
+ TableDataInfo queryPageList(ArtMajorBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的艺术专业库列表
+ *
+ * @param bo 查询条件
+ * @return 艺术专业库列表
+ */
+ List queryList(ArtMajorBo bo);
+
+ /**
+ * 新增艺术专业库
+ *
+ * @param bo 艺术专业库
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(ArtMajorBo bo);
+
+ /**
+ * 修改艺术专业库
+ *
+ * @param bo 艺术专业库
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(ArtMajorBo bo);
+
+ /**
+ * 校验并批量删除艺术专业库信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolCollegeService.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolCollegeService.java
index a9eddf6..9f1a09f 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolCollegeService.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolCollegeService.java
@@ -1,5 +1,6 @@
package org.dromara.art.service;
+import org.dromara.art.domain.ArtSchoolCollege;
import org.dromara.art.domain.vo.ArtSchoolCollegeVo;
import org.dromara.art.domain.bo.ArtSchoolCollegeBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +66,6 @@ public interface IArtSchoolCollegeService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ boolean saveOrUpdateBySchoolId(ArtSchoolCollege schoolCollege);
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolMajorService.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolMajorService.java
index 8fb05e7..a917b18 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolMajorService.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolMajorService.java
@@ -1,5 +1,6 @@
package org.dromara.art.service;
+import org.dromara.art.domain.ArtSchoolMajor;
import org.dromara.art.domain.vo.ArtSchoolMajorVo;
import org.dromara.art.domain.bo.ArtSchoolMajorBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +66,6 @@ public interface IArtSchoolMajorService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ boolean saveOrUpdateByCollegeId(ArtSchoolMajor schoolMajor);
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolRecruitMajorHistoryService.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolRecruitMajorHistoryService.java
new file mode 100644
index 0000000..cba5f84
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolRecruitMajorHistoryService.java
@@ -0,0 +1,68 @@
+package org.dromara.art.service;
+
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorHistoryVo;
+import org.dromara.art.domain.bo.ArtSchoolRecruitMajorHistoryBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 院校招录专业历年录取数据Service接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface IArtSchoolRecruitMajorHistoryService {
+
+ /**
+ * 查询院校招录专业历年录取数据
+ *
+ * @param historyId 主键
+ * @return 院校招录专业历年录取数据
+ */
+ ArtSchoolRecruitMajorHistoryVo queryById(Long historyId);
+
+ /**
+ * 分页查询院校招录专业历年录取数据列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 院校招录专业历年录取数据分页列表
+ */
+ TableDataInfo queryPageList(ArtSchoolRecruitMajorHistoryBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的院校招录专业历年录取数据列表
+ *
+ * @param bo 查询条件
+ * @return 院校招录专业历年录取数据列表
+ */
+ List queryList(ArtSchoolRecruitMajorHistoryBo bo);
+
+ /**
+ * 新增院校招录专业历年录取数据
+ *
+ * @param bo 院校招录专业历年录取数据
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(ArtSchoolRecruitMajorHistoryBo bo);
+
+ /**
+ * 修改院校招录专业历年录取数据
+ *
+ * @param bo 院校招录专业历年录取数据
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(ArtSchoolRecruitMajorHistoryBo bo);
+
+ /**
+ * 校验并批量删除院校招录专业历年录取数据信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolRecruitMajorService.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolRecruitMajorService.java
new file mode 100644
index 0000000..2b3ed2b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/IArtSchoolRecruitMajorService.java
@@ -0,0 +1,68 @@
+package org.dromara.art.service;
+
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorVo;
+import org.dromara.art.domain.bo.ArtSchoolRecruitMajorBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 院校招录专业Service接口
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+public interface IArtSchoolRecruitMajorService {
+
+ /**
+ * 查询院校招录专业
+ *
+ * @param recruitMajorId 主键
+ * @return 院校招录专业
+ */
+ ArtSchoolRecruitMajorVo queryById(Long recruitMajorId);
+
+ /**
+ * 分页查询院校招录专业列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 院校招录专业分页列表
+ */
+ TableDataInfo queryPageList(ArtSchoolRecruitMajorBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的院校招录专业列表
+ *
+ * @param bo 查询条件
+ * @return 院校招录专业列表
+ */
+ List queryList(ArtSchoolRecruitMajorBo bo);
+
+ /**
+ * 新增院校招录专业
+ *
+ * @param bo 院校招录专业
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(ArtSchoolRecruitMajorBo bo);
+
+ /**
+ * 修改院校招录专业
+ *
+ * @param bo 院校招录专业
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(ArtSchoolRecruitMajorBo bo);
+
+ /**
+ * 校验并批量删除院校招录专业信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtHistoryScoreControlLineServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtHistoryScoreControlLineServiceImpl.java
new file mode 100644
index 0000000..b364e84
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtHistoryScoreControlLineServiceImpl.java
@@ -0,0 +1,141 @@
+package org.dromara.art.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.art.domain.bo.ArtHistoryScoreControlLineBo;
+import org.dromara.art.domain.vo.ArtHistoryScoreControlLineVo;
+import org.dromara.art.domain.ArtHistoryScoreControlLine;
+import org.dromara.art.mapper.ArtHistoryScoreControlLineMapper;
+import org.dromara.art.service.IArtHistoryScoreControlLineService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 历年省控线Service业务层处理
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ArtHistoryScoreControlLineServiceImpl implements IArtHistoryScoreControlLineService {
+
+ private final ArtHistoryScoreControlLineMapper baseMapper;
+
+ /**
+ * 查询历年省控线
+ *
+ * @param controlId 主键
+ * @return 历年省控线
+ */
+ @Override
+ public ArtHistoryScoreControlLineVo queryById(Long controlId){
+ return baseMapper.selectVoById(controlId);
+ }
+
+ /**
+ * 分页查询历年省控线列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 历年省控线分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ArtHistoryScoreControlLineBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的历年省控线列表
+ *
+ * @param bo 查询条件
+ * @return 历年省控线列表
+ */
+ @Override
+ public List queryList(ArtHistoryScoreControlLineBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ArtHistoryScoreControlLineBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(ArtHistoryScoreControlLine::getControlId);
+ lqw.eq(StringUtils.isNotBlank(bo.getProvinceCode()), ArtHistoryScoreControlLine::getProvinceCode, bo.getProvinceCode());
+ lqw.like(StringUtils.isNotBlank(bo.getProvinceName()), ArtHistoryScoreControlLine::getProvinceName, bo.getProvinceName());
+ lqw.eq(bo.getYear() != null, ArtHistoryScoreControlLine::getYear, bo.getYear());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorCategory()), ArtHistoryScoreControlLine::getMajorCategory, bo.getMajorCategory());
+ lqw.like(StringUtils.isNotBlank(bo.getBatchName()), ArtHistoryScoreControlLine::getBatchName, bo.getBatchName());
+ lqw.eq(StringUtils.isNotBlank(bo.getSubjectType()), ArtHistoryScoreControlLine::getSubjectType, bo.getSubjectType());
+ lqw.eq(bo.getCultureScore() != null, ArtHistoryScoreControlLine::getCultureScore, bo.getCultureScore());
+ lqw.eq(bo.getMajorScore() != null, ArtHistoryScoreControlLine::getMajorScore, bo.getMajorScore());
+ lqw.eq(bo.getCultureScoreExam() != null, ArtHistoryScoreControlLine::getCultureScoreExam, bo.getCultureScoreExam());
+ lqw.eq(bo.getMajorScoreExam() != null, ArtHistoryScoreControlLine::getMajorScoreExam, bo.getMajorScoreExam());
+ return lqw;
+ }
+
+ /**
+ * 新增历年省控线
+ *
+ * @param bo 历年省控线
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(ArtHistoryScoreControlLineBo bo) {
+ ArtHistoryScoreControlLine add = MapstructUtils.convert(bo, ArtHistoryScoreControlLine.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setControlId(add.getControlId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改历年省控线
+ *
+ * @param bo 历年省控线
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(ArtHistoryScoreControlLineBo bo) {
+ ArtHistoryScoreControlLine update = MapstructUtils.convert(bo, ArtHistoryScoreControlLine.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ArtHistoryScoreControlLine entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除历年省控线信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtMajorServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtMajorServiceImpl.java
new file mode 100644
index 0000000..b18a50a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtMajorServiceImpl.java
@@ -0,0 +1,141 @@
+package org.dromara.art.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.art.domain.bo.ArtMajorBo;
+import org.dromara.art.domain.vo.ArtMajorVo;
+import org.dromara.art.domain.ArtMajor;
+import org.dromara.art.mapper.ArtMajorMapper;
+import org.dromara.art.service.IArtMajorService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 艺术专业库Service业务层处理
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ArtMajorServiceImpl implements IArtMajorService {
+
+ private final ArtMajorMapper baseMapper;
+
+ /**
+ * 查询艺术专业库
+ *
+ * @param majorId 主键
+ * @return 艺术专业库
+ */
+ @Override
+ public ArtMajorVo queryById(Long majorId){
+ return baseMapper.selectVoById(majorId);
+ }
+
+ /**
+ * 分页查询艺术专业库列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 艺术专业库分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ArtMajorBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的艺术专业库列表
+ *
+ * @param bo 查询条件
+ * @return 艺术专业库列表
+ */
+ @Override
+ public List queryList(ArtMajorBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ArtMajorBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(ArtMajor::getMajorId);
+ lqw.like(StringUtils.isNotBlank(bo.getMajorName()), ArtMajor::getMajorName, bo.getMajorName());
+ lqw.eq(StringUtils.isNotBlank(bo.getEducationLevel()), ArtMajor::getEducationLevel, bo.getEducationLevel());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorIcon()), ArtMajor::getMajorIcon, bo.getMajorIcon());
+ lqw.eq(bo.getSchoolingYears() != null, ArtMajor::getSchoolingYears, bo.getSchoolingYears());
+ lqw.eq(StringUtils.isNotBlank(bo.getDisciplinePrimary()), ArtMajor::getDisciplinePrimary, bo.getDisciplinePrimary());
+ lqw.eq(StringUtils.isNotBlank(bo.getDisciplineSecondary()), ArtMajor::getDisciplineSecondary, bo.getDisciplineSecondary());
+ lqw.eq(StringUtils.isNotBlank(bo.getDegreeAwarded()), ArtMajor::getDegreeAwarded, bo.getDegreeAwarded());
+ lqw.eq(StringUtils.isNotBlank(bo.getSummary()), ArtMajor::getSummary, bo.getSummary());
+ lqw.eq(StringUtils.isNotBlank(bo.getTrainingDirection()), ArtMajor::getTrainingDirection, bo.getTrainingDirection());
+ lqw.eq(StringUtils.isNotBlank(bo.getCoreCourses()), ArtMajor::getCoreCourses, bo.getCoreCourses());
+ return lqw;
+ }
+
+ /**
+ * 新增艺术专业库
+ *
+ * @param bo 艺术专业库
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(ArtMajorBo bo) {
+ ArtMajor add = MapstructUtils.convert(bo, ArtMajor.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setMajorId(add.getMajorId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改艺术专业库
+ *
+ * @param bo 艺术专业库
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(ArtMajorBo bo) {
+ ArtMajor update = MapstructUtils.convert(bo, ArtMajor.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ArtMajor entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除艺术专业库信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolCollegeServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolCollegeServiceImpl.java
index 08b8876..77b3676 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolCollegeServiceImpl.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolCollegeServiceImpl.java
@@ -1,5 +1,6 @@
package org.dromara.art.service.impl;
+import org.dromara.art.domain.ArtSchoolDetail;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -133,4 +134,23 @@ public class ArtSchoolCollegeServiceImpl implements IArtSchoolCollegeService {
}
return baseMapper.deleteByIds(ids) > 0;
}
+
+ @Override
+ public boolean saveOrUpdateBySchoolId(ArtSchoolCollege schoolCollege) {
+ if (schoolCollege.getCollegeId() != null) {
+ boolean updated = baseMapper.updateById(schoolCollege) > 0;
+ if (updated) {
+ return true;
+ }
+ }
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
+ queryWrapper.eq(ArtSchoolCollege::getSchoolId, schoolCollege.getSchoolId());
+ queryWrapper.eq(ArtSchoolCollege::getCollegeName, schoolCollege.getCollegeName());
+ ArtSchoolCollege exist = baseMapper.selectOne(queryWrapper, false);
+ if (exist == null) {
+ return baseMapper.insert(schoolCollege) > 0;
+ }
+ schoolCollege.setCollegeId(exist.getCollegeId());
+ return baseMapper.updateById(schoolCollege) > 0;
+ }
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolDetailServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolDetailServiceImpl.java
index 0f8a468..6a14635 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolDetailServiceImpl.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolDetailServiceImpl.java
@@ -75,11 +75,30 @@ public class ArtSchoolDetailServiceImpl implements IArtSchoolDetailService {
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(ArtSchoolDetail::getDetailId);
lqw.eq(bo.getSchoolId() != null, ArtSchoolDetail::getSchoolId, bo.getSchoolId());
- lqw.eq(StringUtils.isNotBlank(bo.getIntroduction()), ArtSchoolDetail::getIntroduction, bo.getIntroduction());
+ lqw.like(StringUtils.isNotBlank(bo.getIntroduction()), ArtSchoolDetail::getIntroduction, bo.getIntroduction());
+ lqw.eq(StringUtils.isNotBlank(bo.getSchoolIcon()), ArtSchoolDetail::getSchoolIcon, bo.getSchoolIcon());
lqw.eq(StringUtils.isNotBlank(bo.getAddress()), ArtSchoolDetail::getAddress, bo.getAddress());
lqw.eq(StringUtils.isNotBlank(bo.getContact()), ArtSchoolDetail::getContact, bo.getContact());
lqw.eq(StringUtils.isNotBlank(bo.getEmail()), ArtSchoolDetail::getEmail, bo.getEmail());
lqw.eq(StringUtils.isNotBlank(bo.getWebsite()), ArtSchoolDetail::getWebsite, bo.getWebsite());
+ lqw.eq(StringUtils.isNotBlank(bo.getPostcode()), ArtSchoolDetail::getPostcode, bo.getPostcode());
+ lqw.eq(bo.getEstablishYear() != null, ArtSchoolDetail::getEstablishYear, bo.getEstablishYear());
+ lqw.eq(bo.getCampusAreaMu() != null, ArtSchoolDetail::getCampusAreaMu, bo.getCampusAreaMu());
+ lqw.eq(bo.getLibraryCollection() != null, ArtSchoolDetail::getLibraryCollection, bo.getLibraryCollection());
+ lqw.eq(bo.getMaleRatio() != null, ArtSchoolDetail::getMaleRatio, bo.getMaleRatio());
+ lqw.eq(bo.getFemaleRatio() != null, ArtSchoolDetail::getFemaleRatio, bo.getFemaleRatio());
+ lqw.eq(bo.getIs985() != null, ArtSchoolDetail::getIs985, bo.getIs985());
+ lqw.eq(bo.getIs211() != null, ArtSchoolDetail::getIs211, bo.getIs211());
+ lqw.eq(bo.getIsDoubleFirstClass() != null, ArtSchoolDetail::getIsDoubleFirstClass, bo.getIsDoubleFirstClass());
+ lqw.eq(bo.getIsKeyUniversity() != null, ArtSchoolDetail::getIsKeyUniversity, bo.getIsKeyUniversity());
+ lqw.eq(bo.getStudentCount() != null, ArtSchoolDetail::getStudentCount, bo.getStudentCount());
+ lqw.eq(bo.getTeacherCount() != null, ArtSchoolDetail::getTeacherCount, bo.getTeacherCount());
+ lqw.eq(bo.getMasterPoint() != null, ArtSchoolDetail::getMasterPoint, bo.getMasterPoint());
+ lqw.eq(bo.getDoctorPoint() != null, ArtSchoolDetail::getDoctorPoint, bo.getDoctorPoint());
+ lqw.eq(bo.getKeyMajorCount() != null, ArtSchoolDetail::getKeyMajorCount, bo.getKeyMajorCount());
+ lqw.eq(bo.getEmploymentRate() != null, ArtSchoolDetail::getEmploymentRate, bo.getEmploymentRate());
+ lqw.eq(bo.getSatisfactionRate() != null, ArtSchoolDetail::getSatisfactionRate, bo.getSatisfactionRate());
+ lqw.eq(bo.getUnivId() != null, ArtSchoolDetail::getUnivId, bo.getUnivId());
return lqw;
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolMajorServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolMajorServiceImpl.java
index 0137ba7..4d2301f 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolMajorServiceImpl.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolMajorServiceImpl.java
@@ -97,7 +97,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
private LambdaQueryWrapper buildQueryWrapper(ArtSchoolMajorBo bo) {
Map params = bo.getParams();
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.orderByAsc(ArtSchoolMajor::getMajorId);
+ lqw.orderByAsc(ArtSchoolMajor::getSchoolMajorId);
lqw.eq(bo.getSchoolId() != null, ArtSchoolMajor::getSchoolId, bo.getSchoolId());
lqw.eq(bo.getCollegeId() != null, ArtSchoolMajor::getCollegeId, bo.getCollegeId());
lqw.eq(StringUtils.isNotBlank(bo.getMajorCode()), ArtSchoolMajor::getMajorCode, bo.getMajorCode());
@@ -154,9 +154,9 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
if (!flag) {
return false;
}
- Long majorId = Objects.requireNonNull(add).getMajorId();
- bo.setMajorId(majorId);
- boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(majorId, bo.getMajorTags());
+ Long schoolMajorId = Objects.requireNonNull(add).getSchoolMajorId();
+ bo.setSchoolMajorId(schoolMajorId);
+ boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(schoolMajorId, bo.getMajorTags());
if (!majorTagFlag) {
throw new ServiceException("专业标签保存失败");
}
@@ -178,7 +178,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
if (!flag) {
return false;
}
- boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(bo.getMajorId(), bo.getMajorTags());
+ boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(bo.getSchoolMajorId(), bo.getMajorTags());
if (!majorTagFlag) {
throw new ServiceException("专业标签更新失败");
}
@@ -232,7 +232,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
return;
}
Set majorIds = list.stream()
- .map(ArtSchoolMajorVo::getMajorId)
+ .map(ArtSchoolMajorVo::getSchoolMajorId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if (CollUtil.isEmpty(majorIds)) {
@@ -246,7 +246,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
.collect(Collectors.groupingBy(ArtSchoolMajorTag::getMajorId,
LinkedHashMap::new,
Collectors.mapping(ArtSchoolMajorTag::getTagName, Collectors.toList())));
- list.forEach(item -> item.setMajorTags(majorTagMap.getOrDefault(item.getMajorId(), Collections.emptyList())));
+ list.forEach(item -> item.setMajorTags(majorTagMap.getOrDefault(item.getSchoolMajorId(), Collections.emptyList())));
}
private String trimToEmpty(String value) {
@@ -267,4 +267,24 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
}
return baseMapper.deleteByIds(ids) > 0;
}
+
+ @Override
+ public boolean saveOrUpdateByCollegeId(ArtSchoolMajor schoolMajor) {
+ if (schoolMajor.getCollegeId() != null) {
+ boolean updated = baseMapper.updateById(schoolMajor) > 0;
+ if (updated) {
+ return true;
+ }
+ }
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
+ queryWrapper.eq(ArtSchoolMajor::getSchoolId, schoolMajor.getSchoolId());
+ queryWrapper.eq(ArtSchoolMajor::getCollegeId, schoolMajor.getCollegeId());
+ queryWrapper.eq(ArtSchoolMajor::getMajorName, schoolMajor.getMajorName());
+ ArtSchoolMajor exist = baseMapper.selectOne(queryWrapper, false);
+ if (exist == null) {
+ return baseMapper.insert(schoolMajor) > 0;
+ }
+ schoolMajor.setSchoolMajorId(exist.getSchoolMajorId());
+ return baseMapper.updateById(schoolMajor) > 0;
+ }
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolRecruitMajorHistoryServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolRecruitMajorHistoryServiceImpl.java
new file mode 100644
index 0000000..6fab31c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolRecruitMajorHistoryServiceImpl.java
@@ -0,0 +1,156 @@
+package org.dromara.art.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.art.domain.bo.ArtSchoolRecruitMajorHistoryBo;
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorHistoryVo;
+import org.dromara.art.domain.ArtSchoolRecruitMajorHistory;
+import org.dromara.art.mapper.ArtSchoolRecruitMajorHistoryMapper;
+import org.dromara.art.service.IArtSchoolRecruitMajorHistoryService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 院校招录专业历年录取数据Service业务层处理
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ArtSchoolRecruitMajorHistoryServiceImpl implements IArtSchoolRecruitMajorHistoryService {
+
+ private final ArtSchoolRecruitMajorHistoryMapper baseMapper;
+
+ /**
+ * 查询院校招录专业历年录取数据
+ *
+ * @param historyId 主键
+ * @return 院校招录专业历年录取数据
+ */
+ @Override
+ public ArtSchoolRecruitMajorHistoryVo queryById(Long historyId){
+ return baseMapper.selectVoById(historyId);
+ }
+
+ /**
+ * 分页查询院校招录专业历年录取数据列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 院校招录专业历年录取数据分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ArtSchoolRecruitMajorHistoryBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的院校招录专业历年录取数据列表
+ *
+ * @param bo 查询条件
+ * @return 院校招录专业历年录取数据列表
+ */
+ @Override
+ public List queryList(ArtSchoolRecruitMajorHistoryBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ArtSchoolRecruitMajorHistoryBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(ArtSchoolRecruitMajorHistory::getHistoryId);
+ lqw.eq(bo.getRecruitMajorId() != null, ArtSchoolRecruitMajorHistory::getRecruitMajorId, bo.getRecruitMajorId());
+ lqw.eq(bo.getSchoolId() != null, ArtSchoolRecruitMajorHistory::getSchoolId, bo.getSchoolId());
+ lqw.eq(StringUtils.isNotBlank(bo.getSchoolCode()), ArtSchoolRecruitMajorHistory::getSchoolCode, bo.getSchoolCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getCollegeCode()), ArtSchoolRecruitMajorHistory::getCollegeCode, bo.getCollegeCode());
+ lqw.like(StringUtils.isNotBlank(bo.getSchoolName()), ArtSchoolRecruitMajorHistory::getSchoolName, bo.getSchoolName());
+ lqw.eq(bo.getMajorId() != null, ArtSchoolRecruitMajorHistory::getMajorId, bo.getMajorId());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorCode()), ArtSchoolRecruitMajorHistory::getMajorCode, bo.getMajorCode());
+ lqw.like(StringUtils.isNotBlank(bo.getMajorName()), ArtSchoolRecruitMajorHistory::getMajorName, bo.getMajorName());
+ lqw.eq(StringUtils.isNotBlank(bo.getEnrollCode()), ArtSchoolRecruitMajorHistory::getEnrollCode, bo.getEnrollCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorType()), ArtSchoolRecruitMajorHistory::getMajorType, bo.getMajorType());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorTypeSub()), ArtSchoolRecruitMajorHistory::getMajorTypeSub, bo.getMajorTypeSub());
+ lqw.eq(StringUtils.isNotBlank(bo.getMainExamSubject()), ArtSchoolRecruitMajorHistory::getMainExamSubject, bo.getMainExamSubject());
+ lqw.eq(bo.getYear() != null, ArtSchoolRecruitMajorHistory::getYear, bo.getYear());
+ lqw.eq(StringUtils.isNotBlank(bo.getSubjectType()), ArtSchoolRecruitMajorHistory::getSubjectType, bo.getSubjectType());
+ lqw.like(StringUtils.isNotBlank(bo.getBatchName()), ArtSchoolRecruitMajorHistory::getBatchName, bo.getBatchName());
+ lqw.eq(StringUtils.isNotBlank(bo.getAdmissionFormula()), ArtSchoolRecruitMajorHistory::getAdmissionFormula, bo.getAdmissionFormula());
+ lqw.eq(StringUtils.isNotBlank(bo.getProbabilityOperator()), ArtSchoolRecruitMajorHistory::getProbabilityOperator, bo.getProbabilityOperator());
+ lqw.eq(bo.getControlScore() != null, ArtSchoolRecruitMajorHistory::getControlScore, bo.getControlScore());
+ lqw.eq(bo.getAdmissionScore() != null, ArtSchoolRecruitMajorHistory::getAdmissionScore, bo.getAdmissionScore());
+ lqw.eq(bo.getPlanEnroll() != null, ArtSchoolRecruitMajorHistory::getPlanEnroll, bo.getPlanEnroll());
+ lqw.eq(bo.getFiledAmount() != null, ArtSchoolRecruitMajorHistory::getFiledAmount, bo.getFiledAmount());
+ lqw.eq(bo.getAdmitAmount() != null, ArtSchoolRecruitMajorHistory::getAdmitAmount, bo.getAdmitAmount());
+ lqw.eq(bo.getFirstChoiceAdmitAmount() != null, ArtSchoolRecruitMajorHistory::getFirstChoiceAdmitAmount, bo.getFirstChoiceAdmitAmount());
+ lqw.eq(bo.getMinScoreDiff() != null, ArtSchoolRecruitMajorHistory::getMinScoreDiff, bo.getMinScoreDiff());
+ lqw.eq(bo.getTuitionFee() != null, ArtSchoolRecruitMajorHistory::getTuitionFee, bo.getTuitionFee());
+ return lqw;
+ }
+
+ /**
+ * 新增院校招录专业历年录取数据
+ *
+ * @param bo 院校招录专业历年录取数据
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(ArtSchoolRecruitMajorHistoryBo bo) {
+ ArtSchoolRecruitMajorHistory add = MapstructUtils.convert(bo, ArtSchoolRecruitMajorHistory.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setHistoryId(add.getHistoryId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改院校招录专业历年录取数据
+ *
+ * @param bo 院校招录专业历年录取数据
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(ArtSchoolRecruitMajorHistoryBo bo) {
+ ArtSchoolRecruitMajorHistory update = MapstructUtils.convert(bo, ArtSchoolRecruitMajorHistory.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ArtSchoolRecruitMajorHistory entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除院校招录专业历年录取数据信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolRecruitMajorServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolRecruitMajorServiceImpl.java
new file mode 100644
index 0000000..9902627
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolRecruitMajorServiceImpl.java
@@ -0,0 +1,158 @@
+package org.dromara.art.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.art.domain.bo.ArtSchoolRecruitMajorBo;
+import org.dromara.art.domain.vo.ArtSchoolRecruitMajorVo;
+import org.dromara.art.domain.ArtSchoolRecruitMajor;
+import org.dromara.art.mapper.ArtSchoolRecruitMajorMapper;
+import org.dromara.art.service.IArtSchoolRecruitMajorService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 院校招录专业Service业务层处理
+ *
+ * @author ZhouWenTao
+ * @date 2026-02-20
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ArtSchoolRecruitMajorServiceImpl implements IArtSchoolRecruitMajorService {
+
+ private final ArtSchoolRecruitMajorMapper baseMapper;
+
+ /**
+ * 查询院校招录专业
+ *
+ * @param recruitMajorId 主键
+ * @return 院校招录专业
+ */
+ @Override
+ public ArtSchoolRecruitMajorVo queryById(Long recruitMajorId){
+ return baseMapper.selectVoById(recruitMajorId);
+ }
+
+ /**
+ * 分页查询院校招录专业列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 院校招录专业分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ArtSchoolRecruitMajorBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的院校招录专业列表
+ *
+ * @param bo 查询条件
+ * @return 院校招录专业列表
+ */
+ @Override
+ public List queryList(ArtSchoolRecruitMajorBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ArtSchoolRecruitMajorBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(ArtSchoolRecruitMajor::getRecruitMajorId);
+ lqw.eq(bo.getSchoolId() != null, ArtSchoolRecruitMajor::getSchoolId, bo.getSchoolId());
+ lqw.eq(StringUtils.isNotBlank(bo.getSchoolCode()), ArtSchoolRecruitMajor::getSchoolCode, bo.getSchoolCode());
+ lqw.like(StringUtils.isNotBlank(bo.getSchoolName()), ArtSchoolRecruitMajor::getSchoolName, bo.getSchoolName());
+ lqw.eq(bo.getYear() != null, ArtSchoolRecruitMajor::getYear, bo.getYear());
+ lqw.eq(bo.getMajorId() != null, ArtSchoolRecruitMajor::getMajorId, bo.getMajorId());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorCode()), ArtSchoolRecruitMajor::getMajorCode, bo.getMajorCode());
+ lqw.like(StringUtils.isNotBlank(bo.getMajorName()), ArtSchoolRecruitMajor::getMajorName, bo.getMajorName());
+ lqw.eq(StringUtils.isNotBlank(bo.getEnrollCode()), ArtSchoolRecruitMajor::getEnrollCode, bo.getEnrollCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getDataStatus()), ArtSchoolRecruitMajor::getDataStatus, bo.getDataStatus());
+ lqw.like(StringUtils.isNotBlank(bo.getBatchName()), ArtSchoolRecruitMajor::getBatchName, bo.getBatchName());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorType()), ArtSchoolRecruitMajor::getMajorType, bo.getMajorType());
+ lqw.eq(StringUtils.isNotBlank(bo.getMajorTypeSub()), ArtSchoolRecruitMajor::getMajorTypeSub, bo.getMajorTypeSub());
+ lqw.eq(StringUtils.isNotBlank(bo.getSubjectType()), ArtSchoolRecruitMajor::getSubjectType, bo.getSubjectType());
+ lqw.eq(StringUtils.isNotBlank(bo.getAdmissionWayShort()), ArtSchoolRecruitMajor::getAdmissionWayShort, bo.getAdmissionWayShort());
+ lqw.eq(StringUtils.isNotBlank(bo.getAdmissionWayExternal()), ArtSchoolRecruitMajor::getAdmissionWayExternal, bo.getAdmissionWayExternal());
+ lqw.eq(StringUtils.isNotBlank(bo.getAdmissionWayExternalOp()), ArtSchoolRecruitMajor::getAdmissionWayExternalOp, bo.getAdmissionWayExternalOp());
+ lqw.eq(StringUtils.isNotBlank(bo.getAdmissionWayInternal()), ArtSchoolRecruitMajor::getAdmissionWayInternal, bo.getAdmissionWayInternal());
+ lqw.eq(StringUtils.isNotBlank(bo.getAdmissionWayInternalOp()), ArtSchoolRecruitMajor::getAdmissionWayInternalOp, bo.getAdmissionWayInternalOp());
+ lqw.eq(bo.getPlanEnroll() != null, ArtSchoolRecruitMajor::getPlanEnroll, bo.getPlanEnroll());
+ lqw.eq(StringUtils.isNotBlank(bo.getMainExamSubject()), ArtSchoolRecruitMajor::getMainExamSubject, bo.getMainExamSubject());
+ lqw.eq(bo.getSchoolingYears() != null, ArtSchoolRecruitMajor::getSchoolingYears, bo.getSchoolingYears());
+ lqw.eq(StringUtils.isNotBlank(bo.getEnrollLimitDesc()), ArtSchoolRecruitMajor::getEnrollLimitDesc, bo.getEnrollLimitDesc());
+ lqw.eq(bo.getTuitionFee() != null, ArtSchoolRecruitMajor::getTuitionFee, bo.getTuitionFee());
+ lqw.eq(bo.getCultureScoreLimit() != null, ArtSchoolRecruitMajor::getCultureScoreLimit, bo.getCultureScoreLimit());
+ lqw.eq(bo.getMajorScoreLimit() != null, ArtSchoolRecruitMajor::getMajorScoreLimit, bo.getMajorScoreLimit());
+ lqw.eq(bo.getChineseScoreLimit() != null, ArtSchoolRecruitMajor::getChineseScoreLimit, bo.getChineseScoreLimit());
+ lqw.eq(bo.getEnglishScoreLimit() != null, ArtSchoolRecruitMajor::getEnglishScoreLimit, bo.getEnglishScoreLimit());
+ return lqw;
+ }
+
+ /**
+ * 新增院校招录专业
+ *
+ * @param bo 院校招录专业
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(ArtSchoolRecruitMajorBo bo) {
+ ArtSchoolRecruitMajor add = MapstructUtils.convert(bo, ArtSchoolRecruitMajor.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setRecruitMajorId(add.getRecruitMajorId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改院校招录专业
+ *
+ * @param bo 院校招录专业
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(ArtSchoolRecruitMajorBo bo) {
+ ArtSchoolRecruitMajor update = MapstructUtils.convert(bo, ArtSchoolRecruitMajor.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ArtSchoolRecruitMajor entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除院校招录专业信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolServiceImpl.java b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolServiceImpl.java
index 11906cc..d4fbc0a 100644
--- a/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolServiceImpl.java
+++ b/ruoyi-modules/ruoyi-art/src/main/java/org/dromara/art/service/impl/ArtSchoolServiceImpl.java
@@ -1,9 +1,13 @@
package org.dromara.art.service.impl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.idev.excel.FastExcel;
import cn.idev.excel.ExcelWriter;
+import org.dromara.art.domain.bo.*;
+import org.dromara.art.service.IArtSchoolCollegeService;
+import org.dromara.art.service.IArtSchoolMajorService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
@@ -24,9 +28,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse;
-import org.dromara.art.domain.bo.ArtSchoolBo;
-import org.dromara.art.domain.bo.ArtSchoolDetailBo;
-import org.dromara.art.domain.bo.ArtSchoolSubmitBo;
import org.dromara.art.domain.excel.ArtSchoolCampusSheetExcel;
import org.dromara.art.domain.excel.ArtSchoolCollegeSheetExcel;
import org.dromara.art.domain.excel.ArtSchoolDetailSheetExcel;
@@ -64,6 +65,7 @@ import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -102,6 +104,8 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
private final ArtSchoolMajorMapper artSchoolMajorMapper;
private final ArtSchoolEnrollPlanMapper artSchoolEnrollPlanMapper;
private final TransactionTemplate transactionTemplate;
+ private final IArtSchoolCollegeService artSchoolCollegeService;
+ private final IArtSchoolMajorService artSchoolMajorService;
/**
* 查询学校基础信息主表
@@ -267,7 +271,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
lqw.eq(StringUtils.isNotBlank(bo.getMainCode()), ArtSchool::getMainCode, bo.getMainCode());
lqw.like(StringUtils.isNotBlank(bo.getMainName()), ArtSchool::getMainName, bo.getMainName());
lqw.like(StringUtils.isNotBlank(bo.getShortName()), ArtSchool::getShortName, bo.getShortName());
- lqw.eq(StringUtils.isNotBlank(bo.getSchoolIcon()), ArtSchool::getSchoolIcon, bo.getSchoolIcon());
lqw.eq(StringUtils.isNotBlank(bo.getProvince()), ArtSchool::getProvince, bo.getProvince());
lqw.eq(StringUtils.isNotBlank(bo.getCity()), ArtSchool::getCity, bo.getCity());
lqw.eq(StringUtils.isNotBlank(bo.getDistrict()), ArtSchool::getDistrict, bo.getDistrict());
@@ -275,10 +278,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
lqw.eq(StringUtils.isNotBlank(bo.getEducationLevel()), ArtSchool::getEducationLevel, bo.getEducationLevel());
lqw.eq(StringUtils.isNotBlank(bo.getSchoolNature()), ArtSchool::getSchoolNature, bo.getSchoolNature());
lqw.eq(StringUtils.isNotBlank(bo.getSupervisorDept()), ArtSchool::getSupervisorDept, bo.getSupervisorDept());
- lqw.eq(bo.getEstablishYear() != null, ArtSchool::getEstablishYear, bo.getEstablishYear());
- lqw.eq(bo.getCampusAreaMu() != null, ArtSchool::getCampusAreaMu, bo.getCampusAreaMu());
- lqw.eq(bo.getMaleRatio() != null, ArtSchool::getMaleRatio, bo.getMaleRatio());
- lqw.eq(bo.getFemaleRatio() != null, ArtSchool::getFemaleRatio, bo.getFemaleRatio());
return lqw;
}
@@ -346,6 +345,33 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
throw new ServiceException("学校标签保存失败");
}
+ // 学院信息
+ if (CollectionUtil.isNotEmpty(bo.getArtSchoolCollegeBoList())) {
+ for (ArtSchoolCollegeBo artSchoolCollegeBo : bo.getArtSchoolCollegeBoList()) {
+ artSchoolCollegeBo.setSchoolId(schoolBo.getSchoolId());
+ ArtSchoolCollege schoolCollege = MapstructUtils.convert(artSchoolCollegeBo, ArtSchoolCollege.class);
+ boolean schoolCollegeFlag = artSchoolCollegeService.saveOrUpdateBySchoolId(schoolCollege);
+ if (!schoolCollegeFlag) {
+ throw new ServiceException("学校学院信息更新失败");
+ }
+
+ // 学院专业
+ if (null != schoolCollege && CollectionUtil.isNotEmpty(artSchoolCollegeBo.getSchoolMajorBoList())) {
+ for (ArtSchoolMajorBo artSchoolMajorBo : artSchoolCollegeBo.getSchoolMajorBoList()) {
+ artSchoolMajorBo.setCollegeId(schoolCollege.getCollegeId());
+ artSchoolMajorBo.setSchoolId(school.getSchoolId());
+ ArtSchoolMajor schoolMajor = MapstructUtils.convert(artSchoolMajorBo, ArtSchoolMajor.class);
+ boolean schoolMajorFlag = artSchoolMajorService.saveOrUpdateByCollegeId(schoolMajor);
+ if (!schoolMajorFlag) {
+ throw new ServiceException("学校学院信息更新失败");
+ }
+ }
+
+ }
+
+ }
+ }
+
ArtSchoolSubmitResultVo resultVo = new ArtSchoolSubmitResultVo();
resultVo.setSchoolId(school.getSchoolId());
resultVo.setDetailId(detail.getDetailId());
@@ -402,6 +428,33 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
throw new ServiceException("学校标签更新失败");
}
+ // 学院信息
+ if (CollectionUtil.isNotEmpty(bo.getArtSchoolCollegeBoList())) {
+ for (ArtSchoolCollegeBo artSchoolCollegeBo : bo.getArtSchoolCollegeBoList()) {
+ artSchoolCollegeBo.setSchoolId(schoolBo.getSchoolId());
+ ArtSchoolCollege schoolCollege = MapstructUtils.convert(artSchoolCollegeBo, ArtSchoolCollege.class);
+ boolean schoolCollegeFlag = artSchoolCollegeService.saveOrUpdateBySchoolId(schoolCollege);
+ if (!schoolCollegeFlag) {
+ throw new ServiceException("学校学院信息更新失败");
+ }
+
+ // 学院专业信息
+ if (null != schoolCollege && !artSchoolCollegeBo.getSchoolMajorBoList().isEmpty()) {
+ for (ArtSchoolMajorBo artSchoolMajorBo : artSchoolCollegeBo.getSchoolMajorBoList()) {
+ artSchoolMajorBo.setSchoolId(schoolBo.getSchoolId());
+ artSchoolMajorBo.setCollegeId(schoolCollege.getCollegeId());
+ ArtSchoolMajor schoolMajor = MapstructUtils.convert(artSchoolMajorBo, ArtSchoolMajor.class);
+ boolean schoolMajorFlag = artSchoolMajorService.saveOrUpdateByCollegeId(schoolMajor);
+ if (!schoolMajorFlag) {
+ throw new ServiceException("学校学院专业信息更新失败");
+ }
+ }
+ }
+
+ }
+ }
+
+
ArtSchoolSubmitResultVo resultVo = new ArtSchoolSubmitResultVo();
resultVo.setSchoolId(schoolBo.getSchoolId());
resultVo.setDetailId(detail.getDetailId());
@@ -818,16 +871,16 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
throw new ServiceException("专业关联学院不存在:专业[" + trimToEmpty(row.getMajorName()) + "]");
}
ArtSchoolMajor major = toMajorEntity(row, newSchoolId, resolvedCollegeId);
- major.setMajorId(null);
- Long oldMajorId = row.getMajorId();
+ major.setSchoolMajorId(null);
+ Long oldMajorId = row.getSchoolMajorId();
if (artSchoolMajorMapper.insert(major) <= 0) {
throw new ServiceException("专业保存失败");
}
if (oldMajorId != null) {
- oldMajorIdToNewMajorId.put(oldMajorId, major.getMajorId());
+ oldMajorIdToNewMajorId.put(oldMajorId, major.getSchoolMajorId());
}
- majorBizKeyToNewMajorId.put(majorKey(row.getMajorCode(), row.getMajorName(), row.getEducationLevel()), major.getMajorId());
- majorBizKeyToNewMajorId.putIfAbsent(majorKey(null, row.getMajorName(), row.getEducationLevel()), major.getMajorId());
+ majorBizKeyToNewMajorId.put(majorKey(row.getMajorCode(), row.getMajorName(), row.getEducationLevel()), major.getSchoolMajorId());
+ majorBizKeyToNewMajorId.putIfAbsent(majorKey(null, row.getMajorName(), row.getEducationLevel()), major.getSchoolMajorId());
}
for (ArtSchoolEnrollPlanSheetExcel row : workbookData.getPlans()) {
@@ -880,7 +933,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
row.setMainCode(school.getMainCode());
row.setMainName(school.getMainName());
row.setShortName(school.getShortName());
- row.setSchoolIcon(school.getSchoolIcon());
row.setProvince(school.getProvince());
row.setCity(school.getCity());
row.setDistrict(school.getDistrict());
@@ -888,10 +940,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
row.setEducationLevel(school.getEducationLevel());
row.setSchoolNature(school.getSchoolNature());
row.setSupervisorDept(school.getSupervisorDept());
- row.setEstablishYear(school.getEstablishYear());
- row.setCampusAreaMu(school.getCampusAreaMu());
- row.setMaleRatio(school.getMaleRatio());
- row.setFemaleRatio(school.getFemaleRatio());
row.setRemark(school.getRemark());
return row;
}
@@ -904,10 +952,30 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
row.setSchoolMainName(school.getMainName());
}
row.setIntroduction(detail.getIntroduction());
+ row.setSchoolIcon(detail.getSchoolIcon());
row.setAddress(detail.getAddress());
row.setContact(detail.getContact());
row.setEmail(detail.getEmail());
row.setWebsite(detail.getWebsite());
+ row.setPostcode(detail.getPostcode());
+ row.setEstablishYear(detail.getEstablishYear());
+ row.setCampusAreaMu(detail.getCampusAreaMu());
+ row.setLibraryCollection(detail.getLibraryCollection());
+ row.setMaleRatio(detail.getMaleRatio());
+ row.setFemaleRatio(detail.getFemaleRatio());
+ row.setIs985(detail.getIs985());
+ row.setIs211(detail.getIs211());
+ row.setIsDoubleFirstClass(detail.getIsDoubleFirstClass());
+ row.setIsKeyUniversity(detail.getIsKeyUniversity());
+ row.setTags(joinTags(detail.getTags()));
+ row.setStudentCount(detail.getStudentCount());
+ row.setTeacherCount(detail.getTeacherCount());
+ row.setMasterPoint(detail.getMasterPoint());
+ row.setDoctorPoint(detail.getDoctorPoint());
+ row.setKeyMajorCount(detail.getKeyMajorCount());
+ row.setEmploymentRate(detail.getEmploymentRate());
+ row.setSatisfactionRate(detail.getSatisfactionRate());
+ row.setUnivId(detail.getUnivId());
row.setRemark(detail.getRemark());
return row;
}
@@ -946,7 +1014,7 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
private ArtSchoolMajorSheetExcel toMajorSheet(ArtSchoolMajor major, ArtSchool school, ArtSchoolCollege college) {
ArtSchoolMajorSheetExcel row = new ArtSchoolMajorSheetExcel();
- row.setMajorId(major.getMajorId());
+ row.setSchoolMajorId(major.getSchoolMajorId());
if (school != null) {
row.setSchoolMainCode(school.getMainCode());
row.setSchoolMainName(school.getMainName());
@@ -991,7 +1059,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
school.setMainCode(trimToEmpty(row.getMainCode()));
school.setMainName(trimToEmpty(row.getMainName()));
school.setShortName(row.getShortName());
- school.setSchoolIcon(row.getSchoolIcon());
school.setProvince(row.getProvince());
school.setCity(row.getCity());
school.setDistrict(row.getDistrict());
@@ -999,10 +1066,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
school.setEducationLevel(row.getEducationLevel());
school.setSchoolNature(row.getSchoolNature());
school.setSupervisorDept(row.getSupervisorDept());
- school.setEstablishYear(row.getEstablishYear());
- school.setCampusAreaMu(row.getCampusAreaMu());
- school.setMaleRatio(row.getMaleRatio());
- school.setFemaleRatio(row.getFemaleRatio());
school.setRemark(row.getRemark());
return school;
}
@@ -1011,10 +1074,30 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
ArtSchoolDetail detail = new ArtSchoolDetail();
detail.setSchoolId(schoolId);
detail.setIntroduction(row.getIntroduction());
+ detail.setSchoolIcon(row.getSchoolIcon());
detail.setAddress(row.getAddress());
detail.setContact(row.getContact());
detail.setEmail(row.getEmail());
detail.setWebsite(row.getWebsite());
+ detail.setPostcode(row.getPostcode());
+ detail.setEstablishYear(row.getEstablishYear());
+ detail.setCampusAreaMu(row.getCampusAreaMu());
+ detail.setLibraryCollection(row.getLibraryCollection());
+ detail.setMaleRatio(row.getMaleRatio());
+ detail.setFemaleRatio(row.getFemaleRatio());
+ detail.setIs985(row.getIs985());
+ detail.setIs211(row.getIs211());
+ detail.setIsDoubleFirstClass(row.getIsDoubleFirstClass());
+ detail.setIsKeyUniversity(row.getIsKeyUniversity());
+ detail.setTags(splitTags(row.getTags()));
+ detail.setStudentCount(row.getStudentCount());
+ detail.setTeacherCount(row.getTeacherCount());
+ detail.setMasterPoint(row.getMasterPoint());
+ detail.setDoctorPoint(row.getDoctorPoint());
+ detail.setKeyMajorCount(row.getKeyMajorCount());
+ detail.setEmploymentRate(row.getEmploymentRate());
+ detail.setSatisfactionRate(row.getSatisfactionRate());
+ detail.setUnivId(row.getUnivId());
detail.setRemark(row.getRemark());
return detail;
}
@@ -1086,6 +1169,28 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
return StringUtils.isBlank(value) ? "" : value.trim();
}
+ private String joinTags(String[] tags) {
+ if (tags == null || tags.length == 0) {
+ return null;
+ }
+ return Arrays.stream(tags)
+ .filter(StringUtils::isNotBlank)
+ .map(String::trim)
+ .collect(Collectors.joining(","));
+ }
+
+ private String[] splitTags(String tagsText) {
+ if (StringUtils.isBlank(tagsText)) {
+ return null;
+ }
+ List tags = Arrays.stream(tagsText.split(","))
+ .map(String::trim)
+ .filter(StringUtils::isNotBlank)
+ .distinct()
+ .toList();
+ return tags.isEmpty() ? null : tags.toArray(String[]::new);
+ }
+
private boolean hasCollegeBindingInfo(ArtSchoolMajorSheetExcel row) {
return row.getCollegeId() != null || StringUtils.isNotBlank(row.getCollegeCode()) || StringUtils.isNotBlank(row.getCollegeName());
}
diff --git a/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtHistoryScoreControlLineMapper.xml b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtHistoryScoreControlLineMapper.xml
new file mode 100644
index 0000000..21b9da6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtHistoryScoreControlLineMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtMajorMapper.xml b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtMajorMapper.xml
new file mode 100644
index 0000000..ab506f8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtMajorMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtSchoolRecruitMajorHistoryMapper.xml b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtSchoolRecruitMajorHistoryMapper.xml
new file mode 100644
index 0000000..4df0f1d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtSchoolRecruitMajorHistoryMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtSchoolRecruitMajorMapper.xml b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtSchoolRecruitMajorMapper.xml
new file mode 100644
index 0000000..6173d92
--- /dev/null
+++ b/ruoyi-modules/ruoyi-art/src/main/resources/mapper/art/ArtSchoolRecruitMajorMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-generator/pom.xml b/ruoyi-modules/ruoyi-generator/pom.xml
index b93b837..8762386 100644
--- a/ruoyi-modules/ruoyi-generator/pom.xml
+++ b/ruoyi-modules/ruoyi-generator/pom.xml
@@ -65,6 +65,12 @@
${anyline.version}
+
+ org.anyline
+ anyline-data-jdbc-postgresql
+ ${anyline.version}
+
+
@@ -72,12 +78,6 @@
-
-
-
-
-
-