feat:updates-pgsql 切换

This commit is contained in:
zwt13703 2026-03-12 08:50:52 +08:00
parent cd683948f3
commit 624aa3ff80
59 changed files with 4600 additions and 162 deletions

211
docs/51dx_school.json Normal file
View File

@ -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": "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 北京大学创办于1898年初名京师大学堂是中国第一所国立综合性大学也是当时中国最高教育行政机关。辛亥革命后于1912年改为现名。<br/>作为新文化运动的中心和“五四”运动的策源地,作为中国最早传播马克思主义和民主科学思想的发祥地,作为中国共产党最早的活动基地,北京大学为民族的振兴和解放、国家的建设和发展、社会的文明和进步做出了不可替代的贡献,在中国走向现代化的进程中起到了重要的先锋作用。爱国、进步、民主、科学的传统精神和勤奋、严谨、求实、创新的学风在这里生生不息、代代相传。<br/>1917年著名教育家蔡元培出任北京大学校长他“循思想自由原则取兼容并包主义”对北京大学进行了卓有成效的改革促进了思想解放和学术繁荣。陈独秀、李大钊、毛泽东以及鲁迅、胡适等一批杰出人才都曾在北京大学任职或任教。<br/>1937年卢沟桥事变后北京大学与清华大学、南开大学南迁长沙共同组成长沙临时大学。不久临时大学又迁到昆明改称国立西南联合大学。抗日战争胜利后北京大学于1946年10月在北平复学。中华人民共和国成立后全国高校于1952年进行院系调整北京大学成为一所以文理基础教学和研究为主的综合性大学为国家培养了大批人才。据不完全统计北京大学的校友和教师有400多位两院院士中国人文社科界有影响的人士相当多也出自北京大学。<br/>改革开放以来北京大学进入了一个前所未有的大发展、大建设的新时期并成为国家“211工程”重点建设的两所大学之一。<br/>1998年5月4日北京大学百年校庆之际国家主席江泽民在庆祝北京大学建校一百周年大会上发表讲话发出了“为了实现现代化我国要有若干所具有世界先进水平的一流大学”的号召。在国家的支持下北京大学适时启动“创建世界一流大学计划”从此北京大学的历史翻开了新的一页。2000年4月3日北京大学与原北京医科大学合并组建了新的北京大学。原北京医科大学的前身是国立北京医学专门学校创建于1912年10月26日。20世纪三、四十年代学校一度名为北平大学医学院并于1946年7月并入北京大学。1952年在全国高校院系调整中北京大学医学院脱离北京大学独立为北京医学院。1985年更名为北京医科大学1996年成为国家首批“211工程”重点支持的医科大学。两校合并进一步拓宽了北京大学的学科结构为促进医学与人文社会科学及理科的结合改革医学教育奠定了基础。<br/>近年来在“211工程”和“985工程”的支持下北京大学进入了一个新的历史发展阶段在学科建设、人才培养、师资队伍建设、教学科研等各方面都取得了显著成绩为将北大建设成为世界一流大学奠定了坚实的基础。今天的北京大学已经成为国家培养高素质、创造性人才的摇篮、科学研究的前沿和知识创新的重要基地和国际交流的重要桥梁和窗口。现任校党委书记郝平、校长龚旗煌。&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>",
"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 个隔间,热水供应时间为 700 - 900 和 1520 - 2300浴室外设有吹风机插座。31 楼地下有公共浴室1520 - 2250 开放。\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
}

View File

@ -23,6 +23,12 @@
<artifactId>mysql-connector-j</artifactId> <artifactId>mysql-connector-j</artifactId>
</dependency> </dependency>
<!-- PostgreSql 驱动包 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!-- &lt;!&ndash; mp支持的数据库均支持 只需要增加对应的jdbc依赖即可 &ndash;&gt;--> <!-- &lt;!&ndash; mp支持的数据库均支持 只需要增加对应的jdbc依赖即可 &ndash;&gt;-->
<!-- &lt;!&ndash; Oracle &ndash;&gt;--> <!-- &lt;!&ndash; Oracle &ndash;&gt;-->
<!-- <dependency>--> <!-- <dependency>-->

View File

@ -37,19 +37,19 @@ spring:
# 性能分析插件(有性能损耗 不建议生产环境使用) # 性能分析插件(有性能损耗 不建议生产环境使用)
p6spy: true p6spy: true
# 设置默认的数据源或者数据源组,默认值即为 master # 设置默认的数据源或者数据源组,默认值即为 master
primary: master primary: postgres
# 严格模式 匹配不到数据源则报错 # 严格模式 匹配不到数据源则报错
strict: true strict: true
datasource: datasource:
# 主库数据源 # 主库数据源
master: # master:
type: ${spring.datasource.type} # type: ${spring.datasource.type}
driverClassName: com.mysql.cj.jdbc.Driver # driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) # # 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 # 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 # username: root
password: Db$7Hn#4Jm9Pq2!Xz # password: Db$7Hn#4Jm9Pq2!Xz
# # 从库数据源 # # 从库数据源
# slave: # slave:
# lazy: true # lazy: true
@ -64,12 +64,12 @@ spring:
# url: jdbc:oracle:thin:@//localhost:1521/XE # url: jdbc:oracle:thin:@//localhost:1521/XE
# username: ROOT # username: ROOT
# password: root # password: root
# postgres: postgres:
# type: ${spring.datasource.type} type: ${spring.datasource.type}
# driverClassName: org.postgresql.Driver driverClassName: org.postgresql.Driver
# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true url: jdbc:postgresql://10.13.13.1:5432/art_sports_volunteer?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
# username: root username: art_sports_volunteer
# password: root password: t56kX86WMQ8eNjRz
# sqlserver: # sqlserver:
# type: ${spring.datasource.type} # type: ${spring.datasource.type}
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

View File

@ -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<ArtHistoryScoreControlLineVo> 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<ArtHistoryScoreControlLineVo> list = artHistoryScoreControlLineService.queryList(bo);
ExcelUtil.exportExcel(list, "历年省控线", ArtHistoryScoreControlLineVo.class, response);
}
/**
* 获取历年省控线详细信息
*
* @param controlId 主键
*/
@SaCheckPermission("art:historyScoreControlLine:query")
@GetMapping("/{controlId}")
public R<ArtHistoryScoreControlLineVo> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] controlIds) {
return toAjax(artHistoryScoreControlLineService.deleteWithValidByIds(List.of(controlIds), true));
}
}

View File

@ -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<ArtMajorVo> 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<ArtMajorVo> list = artMajorService.queryList(bo);
ExcelUtil.exportExcel(list, "艺术专业库", ArtMajorVo.class, response);
}
/**
* 获取艺术专业库详细信息
*
* @param majorId 主键
*/
@SaCheckPermission("art:major:query")
@GetMapping("/{majorId}")
public R<ArtMajorVo> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] majorIds) {
return toAjax(artMajorService.deleteWithValidByIds(List.of(majorIds), true));
}
}

View File

@ -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<ArtSchoolRecruitMajorVo> 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<ArtSchoolRecruitMajorVo> list = artSchoolRecruitMajorService.queryList(bo);
ExcelUtil.exportExcel(list, "院校招录专业", ArtSchoolRecruitMajorVo.class, response);
}
/**
* 获取院校招录专业详细信息
*
* @param recruitMajorId 主键
*/
@SaCheckPermission("art:schoolRecruitMajor:query")
@GetMapping("/{recruitMajorId}")
public R<ArtSchoolRecruitMajorVo> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] recruitMajorIds) {
return toAjax(artSchoolRecruitMajorService.deleteWithValidByIds(List.of(recruitMajorIds), true));
}
}

View File

@ -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<ArtSchoolRecruitMajorHistoryVo> 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<ArtSchoolRecruitMajorHistoryVo> list = artSchoolRecruitMajorHistoryService.queryList(bo);
ExcelUtil.exportExcel(list, "院校招录专业历年录取数据", ArtSchoolRecruitMajorHistoryVo.class, response);
}
/**
* 获取院校招录专业历年录取数据详细信息
*
* @param historyId 主键
*/
@SaCheckPermission("art:schoolRecruitMajorHistory:query")
@GetMapping("/{historyId}")
public R<ArtSchoolRecruitMajorHistoryVo> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] historyIds) {
return toAjax(artSchoolRecruitMajorHistoryService.deleteWithValidByIds(List.of(historyIds), true));
}
}

View File

@ -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<ArtSchoolJsonImportPreviewVo> 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<Path> 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<ArtSchoolImportDetailVo> details = new ArrayList<>();
List<ArtSchoolSubmitBo> submitPreviewList = new ArrayList<>();
Set<Integer> fileUnivIdSet = new LinkedHashSet<>();
Set<String> 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<JsonNode> 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<ArtSchoolVo> 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<Path> listJsonFiles(Path sourceDir) {
try (Stream<Path> 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<JsonNode> extractSchoolNodes(JsonNode root) {
if (root == null || root.isNull()) {
return List.of();
}
if (root.isArray()) {
List<JsonNode> 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<ArtSchoolCollegeBo> schoolCollegeBoList = new ArrayList<>();
ArtSchoolMajorBo artSchoolMajorBo = null;
List<ArtSchoolMajorBo> 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<String> 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<ArtSchoolImportDetailVo> 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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -42,11 +42,6 @@ public class ArtSchool extends TenantEntity {
*/ */
private String shortName; private String shortName;
/**
* 院校图标
*/
private String schoolIcon;
/** /**
* 省份 * 省份
*/ */
@ -82,26 +77,6 @@ public class ArtSchool extends TenantEntity {
*/ */
private String supervisorDept; private String supervisorDept;
/**
* 建校时间()
*/
private Long establishYear;
/**
* 占地面积()
*/
private Long campusAreaMu;
/**
* 男生比例(%)
*/
private Long maleRatio;
/**
* 女生比例(%)
*/
private Long femaleRatio;
/** /**
* 删除标志0代表存在 1代表删除 * 删除标志0代表存在 1代表删除
*/ */

View File

@ -63,5 +63,5 @@ public class ArtSchoolCollege extends TenantEntity {
*/ */
private String remark; private String remark;
private Integer college51sdxId;
} }

View File

@ -2,10 +2,12 @@ package org.dromara.art.domain;
import org.dromara.common.tenant.core.TenantEntity; import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import org.apache.ibatis.type.ArrayTypeHandler;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serial; import java.io.Serial;
import java.math.BigDecimal;
/** /**
* 学校详细信息对象 art_school_detail * 学校详细信息对象 art_school_detail
@ -15,7 +17,7 @@ import java.io.Serial;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("art_school_detail") @TableName(value = "art_school_detail", autoResultMap = true)
public class ArtSchoolDetail extends TenantEntity { public class ArtSchoolDetail extends TenantEntity {
@Serial @Serial
@ -37,6 +39,16 @@ public class ArtSchoolDetail extends TenantEntity {
*/ */
private String introduction; private String introduction;
/**
* 校徽
*/
private String schoolIcon;
/**
* 背景图
*/
private String backGround;
/** /**
* 学校地址 * 学校地址
*/ */
@ -57,6 +69,112 @@ public class ArtSchoolDetail extends TenantEntity {
*/ */
private String website; private String website;
/**
* 邮编
*/
private String postcode;
/**
* 建校年份
*/
private Integer establishYear;
/**
* 占地面积()
*/
private BigDecimal campusAreaMu;
/**
* 图书馆藏书量
*/
private Long libraryCollection;
/**
* 男生比例
*/
private BigDecimal maleRatio;
/**
* 女生比例
*/
private BigDecimal femaleRatio;
/**
* 是否9850否1是
*/
@TableField("is_985")
private Integer is985;
/**
* 是否2110否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代表删除 * 删除标志0代表存在 1代表删除
*/ */
@ -68,5 +186,63 @@ public class ArtSchoolDetail extends TenantEntity {
*/ */
private String remark; 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;
} }

View File

@ -24,8 +24,8 @@ public class ArtSchoolMajor extends TenantEntity {
/** /**
* 主键ID * 主键ID
*/ */
@TableId(value = "major_id") @TableId(value = "school_major_id")
private Long majorId; private Long schoolMajorId;
/** /**
* 学校ID(冗余便于查) * 学校ID(冗余便于查)
@ -88,5 +88,5 @@ public class ArtSchoolMajor extends TenantEntity {
*/ */
private String remark; private String remark;
private String major51sdxId;
} }

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -43,11 +43,6 @@ public class ArtSchoolBo extends BaseEntity {
*/ */
private String shortName; private String shortName;
/**
* 院校图标
*/
private String schoolIcon;
/** /**
* 省份 * 省份
*/ */
@ -83,26 +78,6 @@ public class ArtSchoolBo extends BaseEntity {
*/ */
private String supervisorDept; private String supervisorDept;
/**
* 建校时间()
*/
private Long establishYear;
/**
* 占地面积()
*/
private Long campusAreaMu;
/**
* 男生比例(%)
*/
private Long maleRatio;
/**
* 女生比例(%)
*/
private Long femaleRatio;
/** /**
* 备注 * 备注
*/ */

View File

@ -1,5 +1,6 @@
package org.dromara.art.domain.bo; package org.dromara.art.domain.bo;
import com.fasterxml.jackson.databind.JsonNode;
import org.dromara.art.domain.ArtSchoolCollege; import org.dromara.art.domain.ArtSchoolCollege;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
@ -9,6 +10,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.util.List;
/** /**
* 学校学院业务对象 art_school_college * 学校学院业务对象 art_school_college
* *
@ -58,5 +61,7 @@ public class ArtSchoolCollegeBo extends BaseEntity {
*/ */
private String remark; private String remark;
private Integer college51sdxId;
private List<ArtSchoolMajorBo> schoolMajorBoList;
} }

View File

@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/** /**
* 学校详细信息业务对象 art_school_detail * 学校详细信息业务对象 art_school_detail
* *
@ -37,6 +39,16 @@ public class ArtSchoolDetailBo extends BaseEntity {
*/ */
private String introduction; private String introduction;
/**
* 校徽
*/
private String schoolIcon;
/**
* 背景图
*/
private String backGround;
/** /**
* 学校地址 * 学校地址
*/ */
@ -57,10 +69,168 @@ public class ArtSchoolDetailBo extends BaseEntity {
*/ */
private String website; private String website;
/**
* 邮编
*/
private String postcode;
/**
* 建校年份
*/
private Integer establishYear;
/**
* 占地面积()
*/
private BigDecimal campusAreaMu;
/**
* 图书馆藏书量
*/
private Long libraryCollection;
/**
* 男生比例
*/
private BigDecimal maleRatio;
/**
* 女生比例
*/
private BigDecimal femaleRatio;
/**
* 是否9850否1是
*/
private Integer is985;
/**
* 是否2110否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 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;
} }

View File

@ -26,7 +26,7 @@ public class ArtSchoolMajorBo extends BaseEntity {
* 主键ID * 主键ID
*/ */
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) @NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long majorId; private Long schoolMajorId;
/** /**
* 学校ID(冗余便于查) * 学校ID(冗余便于查)
@ -88,6 +88,8 @@ public class ArtSchoolMajorBo extends BaseEntity {
*/ */
private List<String> majorTags; private List<String> majorTags;
private String major51sdxId;
/** /**
* 备注 * 备注
*/ */

View File

@ -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;
}

View File

@ -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;
}

View File

@ -26,6 +26,9 @@ public class ArtSchoolSubmitBo {
@NotNull(message = "学校详情信息不能为空") @NotNull(message = "学校详情信息不能为空")
private ArtSchoolDetailBo detail; private ArtSchoolDetailBo detail;
private List<ArtSchoolCollegeBo> artSchoolCollegeBoList;
/** /**
* 学校招生代码列表 * 学校招生代码列表
*/ */

View File

@ -4,6 +4,8 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
/** /**
* 学校详情导入导出模板行 * 学校详情导入导出模板行
*/ */
@ -23,6 +25,9 @@ public class ArtSchoolDetailSheetExcel {
@ExcelProperty("学校介绍") @ExcelProperty("学校介绍")
private String introduction; private String introduction;
@ExcelProperty("学校图标")
private String schoolIcon;
@ExcelProperty("学校地址") @ExcelProperty("学校地址")
private String address; private String address;
@ -35,6 +40,63 @@ public class ArtSchoolDetailSheetExcel {
@ExcelProperty("官网地址") @ExcelProperty("官网地址")
private String website; 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("备注") @ExcelProperty("备注")
private String remark; private String remark;
} }

View File

@ -12,7 +12,7 @@ import lombok.Data;
public class ArtSchoolMajorSheetExcel { public class ArtSchoolMajorSheetExcel {
@ExcelProperty("专业ID") @ExcelProperty("专业ID")
private Long majorId; private Long schoolMajorId;
@ExcelProperty("学校编码*") @ExcelProperty("学校编码*")
private String schoolMainCode; private String schoolMainCode;

View File

@ -23,9 +23,6 @@ public class ArtSchoolSheetExcel {
@ExcelProperty("学校简称") @ExcelProperty("学校简称")
private String shortName; private String shortName;
@ExcelProperty("学校图标")
private String schoolIcon;
@ExcelProperty("省份") @ExcelProperty("省份")
private String province; private String province;
@ -47,18 +44,6 @@ public class ArtSchoolSheetExcel {
@ExcelProperty("主管部门") @ExcelProperty("主管部门")
private String supervisorDept; private String supervisorDept;
@ExcelProperty("建校年份")
private Long establishYear;
@ExcelProperty("占地面积(亩)")
private Long campusAreaMu;
@ExcelProperty("男生比例(%)")
private Long maleRatio;
@ExcelProperty("女生比例(%)")
private Long femaleRatio;
@ExcelProperty("备注") @ExcelProperty("备注")
private String remark; private String remark;
} }

View File

@ -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;
}

View File

@ -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;
}

View File

@ -3,14 +3,12 @@ package org.dromara.art.domain.vo;
import org.dromara.art.domain.ArtSchoolDetail; import org.dromara.art.domain.ArtSchoolDetail;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; 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 io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; 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) @ExcelProperty(value = "学校详细介绍")
@ExcelDictFormat(readConverterExp = "大=文本")
private String introduction; private String introduction;
/**
* 校徽
*/
@ExcelProperty(value = "校徽")
private String schoolIcon;
/** /**
* 学校地址 * 学校地址
*/ */
@ -71,6 +74,120 @@ public class ArtSchoolDetailVo implements Serializable {
@ExcelProperty(value = "官网地址") @ExcelProperty(value = "官网地址")
private String website; 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;
/**
* 是否9850否1是
*/
@ExcelProperty(value = "是否985")
private Integer is985;
/**
* 是否2110否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;
/** /**
* 备注 * 备注
*/ */

View File

@ -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<ArtSchoolImportDetailVo> details;
/**
* 预构建入库对象按请求预览条数截断
*/
private List<ArtSchoolSubmitBo> submitPreviewList;
/**
* 预留调用说明
*/
private String serviceCallHint;
}

View File

@ -33,7 +33,7 @@ public class ArtSchoolMajorVo implements Serializable {
* 主键ID * 主键ID
*/ */
@ExcelProperty(value = "主键ID") @ExcelProperty(value = "主键ID")
private Long majorId; private Long schoolMajorId;
/** /**
* 学校ID(冗余便于查) * 学校ID(冗余便于查)

View File

@ -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;
}

View File

@ -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;
}

View File

@ -10,7 +10,6 @@ import lombok.Data;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
@ -56,12 +55,6 @@ public class ArtSchoolVo implements Serializable {
@ExcelDictFormat(readConverterExp = "备=用") @ExcelDictFormat(readConverterExp = "备=用")
private String shortName; private String shortName;
/**
* 院校图标
*/
@ExcelProperty(value = "院校图标")
private String schoolIcon;
/** /**
* 省份 * 省份
*/ */
@ -104,30 +97,6 @@ public class ArtSchoolVo implements Serializable {
@ExcelProperty(value = "主管部门:教育部/工信部/民委...") @ExcelProperty(value = "主管部门:教育部/工信部/民委...")
private String supervisorDept; private String supervisorDept;
/**
* 建校时间()
*/
@ExcelProperty(value = "建校时间(年)")
private Long establishYear;
/**
* 占地面积()
*/
@ExcelProperty(value = "占地面积(亩)")
private Long campusAreaMu;
/**
* 男生比例(%)
*/
@ExcelProperty(value = "男生比例(%)")
private Long maleRatio;
/**
* 女生比例(%)
*/
@ExcelProperty(value = "女生比例(%)")
private Long femaleRatio;
/** /**
* 备注 * 备注
*/ */

View File

@ -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<ArtHistoryScoreControlLine, ArtHistoryScoreControlLineVo> {
}

View File

@ -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<ArtMajor, ArtMajorVo> {
}

View File

@ -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<ArtSchoolRecruitMajorHistory, ArtSchoolRecruitMajorHistoryVo> {
}

View File

@ -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<ArtSchoolRecruitMajor, ArtSchoolRecruitMajorVo> {
}

View File

@ -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<ArtHistoryScoreControlLineVo> queryPageList(ArtHistoryScoreControlLineBo bo, PageQuery pageQuery);
/**
* 查询符合条件的历年省控线列表
*
* @param bo 查询条件
* @return 历年省控线列表
*/
List<ArtHistoryScoreControlLineVo> 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<Long> ids, Boolean isValid);
}

View File

@ -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<ArtMajorVo> queryPageList(ArtMajorBo bo, PageQuery pageQuery);
/**
* 查询符合条件的艺术专业库列表
*
* @param bo 查询条件
* @return 艺术专业库列表
*/
List<ArtMajorVo> 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<Long> ids, Boolean isValid);
}

View File

@ -1,5 +1,6 @@
package org.dromara.art.service; package org.dromara.art.service;
import org.dromara.art.domain.ArtSchoolCollege;
import org.dromara.art.domain.vo.ArtSchoolCollegeVo; import org.dromara.art.domain.vo.ArtSchoolCollegeVo;
import org.dromara.art.domain.bo.ArtSchoolCollegeBo; import org.dromara.art.domain.bo.ArtSchoolCollegeBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -65,4 +66,6 @@ public interface IArtSchoolCollegeService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
boolean saveOrUpdateBySchoolId(ArtSchoolCollege schoolCollege);
} }

View File

@ -1,5 +1,6 @@
package org.dromara.art.service; package org.dromara.art.service;
import org.dromara.art.domain.ArtSchoolMajor;
import org.dromara.art.domain.vo.ArtSchoolMajorVo; import org.dromara.art.domain.vo.ArtSchoolMajorVo;
import org.dromara.art.domain.bo.ArtSchoolMajorBo; import org.dromara.art.domain.bo.ArtSchoolMajorBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -65,4 +66,6 @@ public interface IArtSchoolMajorService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
boolean saveOrUpdateByCollegeId(ArtSchoolMajor schoolMajor);
} }

View File

@ -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<ArtSchoolRecruitMajorHistoryVo> queryPageList(ArtSchoolRecruitMajorHistoryBo bo, PageQuery pageQuery);
/**
* 查询符合条件的院校招录专业历年录取数据列表
*
* @param bo 查询条件
* @return 院校招录专业历年录取数据列表
*/
List<ArtSchoolRecruitMajorHistoryVo> 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<Long> ids, Boolean isValid);
}

View File

@ -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<ArtSchoolRecruitMajorVo> queryPageList(ArtSchoolRecruitMajorBo bo, PageQuery pageQuery);
/**
* 查询符合条件的院校招录专业列表
*
* @param bo 查询条件
* @return 院校招录专业列表
*/
List<ArtSchoolRecruitMajorVo> 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<Long> ids, Boolean isValid);
}

View File

@ -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<ArtHistoryScoreControlLineVo> queryPageList(ArtHistoryScoreControlLineBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ArtHistoryScoreControlLine> lqw = buildQueryWrapper(bo);
Page<ArtHistoryScoreControlLineVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的历年省控线列表
*
* @param bo 查询条件
* @return 历年省控线列表
*/
@Override
public List<ArtHistoryScoreControlLineVo> queryList(ArtHistoryScoreControlLineBo bo) {
LambdaQueryWrapper<ArtHistoryScoreControlLine> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ArtHistoryScoreControlLine> buildQueryWrapper(ArtHistoryScoreControlLineBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ArtHistoryScoreControlLine> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -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<ArtMajorVo> queryPageList(ArtMajorBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ArtMajor> lqw = buildQueryWrapper(bo);
Page<ArtMajorVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的艺术专业库列表
*
* @param bo 查询条件
* @return 艺术专业库列表
*/
@Override
public List<ArtMajorVo> queryList(ArtMajorBo bo) {
LambdaQueryWrapper<ArtMajor> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ArtMajor> buildQueryWrapper(ArtMajorBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ArtMajor> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -1,5 +1,6 @@
package org.dromara.art.service.impl; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -133,4 +134,23 @@ public class ArtSchoolCollegeServiceImpl implements IArtSchoolCollegeService {
} }
return baseMapper.deleteByIds(ids) > 0; 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<ArtSchoolCollege> 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;
}
} }

View File

@ -75,11 +75,30 @@ public class ArtSchoolDetailServiceImpl implements IArtSchoolDetailService {
LambdaQueryWrapper<ArtSchoolDetail> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<ArtSchoolDetail> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(ArtSchoolDetail::getDetailId); lqw.orderByAsc(ArtSchoolDetail::getDetailId);
lqw.eq(bo.getSchoolId() != null, ArtSchoolDetail::getSchoolId, bo.getSchoolId()); 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.getAddress()), ArtSchoolDetail::getAddress, bo.getAddress());
lqw.eq(StringUtils.isNotBlank(bo.getContact()), ArtSchoolDetail::getContact, bo.getContact()); 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.getEmail()), ArtSchoolDetail::getEmail, bo.getEmail());
lqw.eq(StringUtils.isNotBlank(bo.getWebsite()), ArtSchoolDetail::getWebsite, bo.getWebsite()); 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; return lqw;
} }

View File

@ -97,7 +97,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
private LambdaQueryWrapper<ArtSchoolMajor> buildQueryWrapper(ArtSchoolMajorBo bo) { private LambdaQueryWrapper<ArtSchoolMajor> buildQueryWrapper(ArtSchoolMajorBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ArtSchoolMajor> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<ArtSchoolMajor> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(ArtSchoolMajor::getMajorId); lqw.orderByAsc(ArtSchoolMajor::getSchoolMajorId);
lqw.eq(bo.getSchoolId() != null, ArtSchoolMajor::getSchoolId, bo.getSchoolId()); lqw.eq(bo.getSchoolId() != null, ArtSchoolMajor::getSchoolId, bo.getSchoolId());
lqw.eq(bo.getCollegeId() != null, ArtSchoolMajor::getCollegeId, bo.getCollegeId()); lqw.eq(bo.getCollegeId() != null, ArtSchoolMajor::getCollegeId, bo.getCollegeId());
lqw.eq(StringUtils.isNotBlank(bo.getMajorCode()), ArtSchoolMajor::getMajorCode, bo.getMajorCode()); lqw.eq(StringUtils.isNotBlank(bo.getMajorCode()), ArtSchoolMajor::getMajorCode, bo.getMajorCode());
@ -154,9 +154,9 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
if (!flag) { if (!flag) {
return false; return false;
} }
Long majorId = Objects.requireNonNull(add).getMajorId(); Long schoolMajorId = Objects.requireNonNull(add).getSchoolMajorId();
bo.setMajorId(majorId); bo.setSchoolMajorId(schoolMajorId);
boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(majorId, bo.getMajorTags()); boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(schoolMajorId, bo.getMajorTags());
if (!majorTagFlag) { if (!majorTagFlag) {
throw new ServiceException("专业标签保存失败"); throw new ServiceException("专业标签保存失败");
} }
@ -178,7 +178,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
if (!flag) { if (!flag) {
return false; return false;
} }
boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(bo.getMajorId(), bo.getMajorTags()); boolean majorTagFlag = saveOrUpdateMajorTagsByMajorId(bo.getSchoolMajorId(), bo.getMajorTags());
if (!majorTagFlag) { if (!majorTagFlag) {
throw new ServiceException("专业标签更新失败"); throw new ServiceException("专业标签更新失败");
} }
@ -232,7 +232,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
return; return;
} }
Set<Long> majorIds = list.stream() Set<Long> majorIds = list.stream()
.map(ArtSchoolMajorVo::getMajorId) .map(ArtSchoolMajorVo::getSchoolMajorId)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
if (CollUtil.isEmpty(majorIds)) { if (CollUtil.isEmpty(majorIds)) {
@ -246,7 +246,7 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
.collect(Collectors.groupingBy(ArtSchoolMajorTag::getMajorId, .collect(Collectors.groupingBy(ArtSchoolMajorTag::getMajorId,
LinkedHashMap::new, LinkedHashMap::new,
Collectors.mapping(ArtSchoolMajorTag::getTagName, Collectors.toList()))); 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) { private String trimToEmpty(String value) {
@ -267,4 +267,24 @@ public class ArtSchoolMajorServiceImpl implements IArtSchoolMajorService {
} }
return baseMapper.deleteByIds(ids) > 0; 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<ArtSchoolMajor> 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;
}
} }

View File

@ -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<ArtSchoolRecruitMajorHistoryVo> queryPageList(ArtSchoolRecruitMajorHistoryBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ArtSchoolRecruitMajorHistory> lqw = buildQueryWrapper(bo);
Page<ArtSchoolRecruitMajorHistoryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的院校招录专业历年录取数据列表
*
* @param bo 查询条件
* @return 院校招录专业历年录取数据列表
*/
@Override
public List<ArtSchoolRecruitMajorHistoryVo> queryList(ArtSchoolRecruitMajorHistoryBo bo) {
LambdaQueryWrapper<ArtSchoolRecruitMajorHistory> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ArtSchoolRecruitMajorHistory> buildQueryWrapper(ArtSchoolRecruitMajorHistoryBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ArtSchoolRecruitMajorHistory> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -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<ArtSchoolRecruitMajorVo> queryPageList(ArtSchoolRecruitMajorBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ArtSchoolRecruitMajor> lqw = buildQueryWrapper(bo);
Page<ArtSchoolRecruitMajorVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的院校招录专业列表
*
* @param bo 查询条件
* @return 院校招录专业列表
*/
@Override
public List<ArtSchoolRecruitMajorVo> queryList(ArtSchoolRecruitMajorBo bo) {
LambdaQueryWrapper<ArtSchoolRecruitMajor> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ArtSchoolRecruitMajor> buildQueryWrapper(ArtSchoolRecruitMajorBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ArtSchoolRecruitMajor> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -1,9 +1,13 @@
package org.dromara.art.service.impl; package org.dromara.art.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.idev.excel.FastExcel; import cn.idev.excel.FastExcel;
import cn.idev.excel.ExcelWriter; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils; 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.transaction.support.TransactionTemplate;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse; 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.ArtSchoolCampusSheetExcel;
import org.dromara.art.domain.excel.ArtSchoolCollegeSheetExcel; import org.dromara.art.domain.excel.ArtSchoolCollegeSheetExcel;
import org.dromara.art.domain.excel.ArtSchoolDetailSheetExcel; import org.dromara.art.domain.excel.ArtSchoolDetailSheetExcel;
@ -64,6 +65,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -102,6 +104,8 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
private final ArtSchoolMajorMapper artSchoolMajorMapper; private final ArtSchoolMajorMapper artSchoolMajorMapper;
private final ArtSchoolEnrollPlanMapper artSchoolEnrollPlanMapper; private final ArtSchoolEnrollPlanMapper artSchoolEnrollPlanMapper;
private final TransactionTemplate transactionTemplate; 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.eq(StringUtils.isNotBlank(bo.getMainCode()), ArtSchool::getMainCode, bo.getMainCode());
lqw.like(StringUtils.isNotBlank(bo.getMainName()), ArtSchool::getMainName, bo.getMainName()); lqw.like(StringUtils.isNotBlank(bo.getMainName()), ArtSchool::getMainName, bo.getMainName());
lqw.like(StringUtils.isNotBlank(bo.getShortName()), ArtSchool::getShortName, bo.getShortName()); 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.getProvince()), ArtSchool::getProvince, bo.getProvince());
lqw.eq(StringUtils.isNotBlank(bo.getCity()), ArtSchool::getCity, bo.getCity()); lqw.eq(StringUtils.isNotBlank(bo.getCity()), ArtSchool::getCity, bo.getCity());
lqw.eq(StringUtils.isNotBlank(bo.getDistrict()), ArtSchool::getDistrict, bo.getDistrict()); 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.getEducationLevel()), ArtSchool::getEducationLevel, bo.getEducationLevel());
lqw.eq(StringUtils.isNotBlank(bo.getSchoolNature()), ArtSchool::getSchoolNature, bo.getSchoolNature()); lqw.eq(StringUtils.isNotBlank(bo.getSchoolNature()), ArtSchool::getSchoolNature, bo.getSchoolNature());
lqw.eq(StringUtils.isNotBlank(bo.getSupervisorDept()), ArtSchool::getSupervisorDept, bo.getSupervisorDept()); 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; return lqw;
} }
@ -346,6 +345,33 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
throw new ServiceException("学校标签保存失败"); 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(); ArtSchoolSubmitResultVo resultVo = new ArtSchoolSubmitResultVo();
resultVo.setSchoolId(school.getSchoolId()); resultVo.setSchoolId(school.getSchoolId());
resultVo.setDetailId(detail.getDetailId()); resultVo.setDetailId(detail.getDetailId());
@ -402,6 +428,33 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
throw new ServiceException("学校标签更新失败"); 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(); ArtSchoolSubmitResultVo resultVo = new ArtSchoolSubmitResultVo();
resultVo.setSchoolId(schoolBo.getSchoolId()); resultVo.setSchoolId(schoolBo.getSchoolId());
resultVo.setDetailId(detail.getDetailId()); resultVo.setDetailId(detail.getDetailId());
@ -818,16 +871,16 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
throw new ServiceException("专业关联学院不存在:专业[" + trimToEmpty(row.getMajorName()) + "]"); throw new ServiceException("专业关联学院不存在:专业[" + trimToEmpty(row.getMajorName()) + "]");
} }
ArtSchoolMajor major = toMajorEntity(row, newSchoolId, resolvedCollegeId); ArtSchoolMajor major = toMajorEntity(row, newSchoolId, resolvedCollegeId);
major.setMajorId(null); major.setSchoolMajorId(null);
Long oldMajorId = row.getMajorId(); Long oldMajorId = row.getSchoolMajorId();
if (artSchoolMajorMapper.insert(major) <= 0) { if (artSchoolMajorMapper.insert(major) <= 0) {
throw new ServiceException("专业保存失败"); throw new ServiceException("专业保存失败");
} }
if (oldMajorId != null) { 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.put(majorKey(row.getMajorCode(), row.getMajorName(), row.getEducationLevel()), major.getSchoolMajorId());
majorBizKeyToNewMajorId.putIfAbsent(majorKey(null, row.getMajorName(), row.getEducationLevel()), major.getMajorId()); majorBizKeyToNewMajorId.putIfAbsent(majorKey(null, row.getMajorName(), row.getEducationLevel()), major.getSchoolMajorId());
} }
for (ArtSchoolEnrollPlanSheetExcel row : workbookData.getPlans()) { for (ArtSchoolEnrollPlanSheetExcel row : workbookData.getPlans()) {
@ -880,7 +933,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
row.setMainCode(school.getMainCode()); row.setMainCode(school.getMainCode());
row.setMainName(school.getMainName()); row.setMainName(school.getMainName());
row.setShortName(school.getShortName()); row.setShortName(school.getShortName());
row.setSchoolIcon(school.getSchoolIcon());
row.setProvince(school.getProvince()); row.setProvince(school.getProvince());
row.setCity(school.getCity()); row.setCity(school.getCity());
row.setDistrict(school.getDistrict()); row.setDistrict(school.getDistrict());
@ -888,10 +940,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
row.setEducationLevel(school.getEducationLevel()); row.setEducationLevel(school.getEducationLevel());
row.setSchoolNature(school.getSchoolNature()); row.setSchoolNature(school.getSchoolNature());
row.setSupervisorDept(school.getSupervisorDept()); row.setSupervisorDept(school.getSupervisorDept());
row.setEstablishYear(school.getEstablishYear());
row.setCampusAreaMu(school.getCampusAreaMu());
row.setMaleRatio(school.getMaleRatio());
row.setFemaleRatio(school.getFemaleRatio());
row.setRemark(school.getRemark()); row.setRemark(school.getRemark());
return row; return row;
} }
@ -904,10 +952,30 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
row.setSchoolMainName(school.getMainName()); row.setSchoolMainName(school.getMainName());
} }
row.setIntroduction(detail.getIntroduction()); row.setIntroduction(detail.getIntroduction());
row.setSchoolIcon(detail.getSchoolIcon());
row.setAddress(detail.getAddress()); row.setAddress(detail.getAddress());
row.setContact(detail.getContact()); row.setContact(detail.getContact());
row.setEmail(detail.getEmail()); row.setEmail(detail.getEmail());
row.setWebsite(detail.getWebsite()); 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()); row.setRemark(detail.getRemark());
return row; return row;
} }
@ -946,7 +1014,7 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
private ArtSchoolMajorSheetExcel toMajorSheet(ArtSchoolMajor major, ArtSchool school, ArtSchoolCollege college) { private ArtSchoolMajorSheetExcel toMajorSheet(ArtSchoolMajor major, ArtSchool school, ArtSchoolCollege college) {
ArtSchoolMajorSheetExcel row = new ArtSchoolMajorSheetExcel(); ArtSchoolMajorSheetExcel row = new ArtSchoolMajorSheetExcel();
row.setMajorId(major.getMajorId()); row.setSchoolMajorId(major.getSchoolMajorId());
if (school != null) { if (school != null) {
row.setSchoolMainCode(school.getMainCode()); row.setSchoolMainCode(school.getMainCode());
row.setSchoolMainName(school.getMainName()); row.setSchoolMainName(school.getMainName());
@ -991,7 +1059,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
school.setMainCode(trimToEmpty(row.getMainCode())); school.setMainCode(trimToEmpty(row.getMainCode()));
school.setMainName(trimToEmpty(row.getMainName())); school.setMainName(trimToEmpty(row.getMainName()));
school.setShortName(row.getShortName()); school.setShortName(row.getShortName());
school.setSchoolIcon(row.getSchoolIcon());
school.setProvince(row.getProvince()); school.setProvince(row.getProvince());
school.setCity(row.getCity()); school.setCity(row.getCity());
school.setDistrict(row.getDistrict()); school.setDistrict(row.getDistrict());
@ -999,10 +1066,6 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
school.setEducationLevel(row.getEducationLevel()); school.setEducationLevel(row.getEducationLevel());
school.setSchoolNature(row.getSchoolNature()); school.setSchoolNature(row.getSchoolNature());
school.setSupervisorDept(row.getSupervisorDept()); school.setSupervisorDept(row.getSupervisorDept());
school.setEstablishYear(row.getEstablishYear());
school.setCampusAreaMu(row.getCampusAreaMu());
school.setMaleRatio(row.getMaleRatio());
school.setFemaleRatio(row.getFemaleRatio());
school.setRemark(row.getRemark()); school.setRemark(row.getRemark());
return school; return school;
} }
@ -1011,10 +1074,30 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
ArtSchoolDetail detail = new ArtSchoolDetail(); ArtSchoolDetail detail = new ArtSchoolDetail();
detail.setSchoolId(schoolId); detail.setSchoolId(schoolId);
detail.setIntroduction(row.getIntroduction()); detail.setIntroduction(row.getIntroduction());
detail.setSchoolIcon(row.getSchoolIcon());
detail.setAddress(row.getAddress()); detail.setAddress(row.getAddress());
detail.setContact(row.getContact()); detail.setContact(row.getContact());
detail.setEmail(row.getEmail()); detail.setEmail(row.getEmail());
detail.setWebsite(row.getWebsite()); 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()); detail.setRemark(row.getRemark());
return detail; return detail;
} }
@ -1086,6 +1169,28 @@ public class ArtSchoolServiceImpl implements IArtSchoolService {
return StringUtils.isBlank(value) ? "" : value.trim(); 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<String> 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) { private boolean hasCollegeBindingInfo(ArtSchoolMajorSheetExcel row) {
return row.getCollegeId() != null || StringUtils.isNotBlank(row.getCollegeCode()) || StringUtils.isNotBlank(row.getCollegeName()); return row.getCollegeId() != null || StringUtils.isNotBlank(row.getCollegeCode()) || StringUtils.isNotBlank(row.getCollegeName());
} }

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.art.mapper.ArtHistoryScoreControlLineMapper">
</mapper>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.art.mapper.ArtMajorMapper">
</mapper>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.art.mapper.ArtSchoolRecruitMajorHistoryMapper">
</mapper>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.art.mapper.ArtSchoolRecruitMajorMapper">
</mapper>

View File

@ -65,6 +65,12 @@
<version>${anyline.version}</version> <version>${anyline.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.anyline</groupId>
<artifactId>anyline-data-jdbc-postgresql</artifactId>
<version>${anyline.version}</version>
</dependency>
<!-- anyline支持100+种类型数据库 添加对应的jdbc依赖与anyline对应数据库依赖包即可 --> <!-- anyline支持100+种类型数据库 添加对应的jdbc依赖与anyline对应数据库依赖包即可 -->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.anyline</groupId>--> <!-- <groupId>org.anyline</groupId>-->
@ -72,12 +78,6 @@
<!-- <version>${anyline.version}</version>--> <!-- <version>${anyline.version}</version>-->
<!-- </dependency>--> <!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.anyline</groupId>-->
<!-- <artifactId>anyline-data-jdbc-postgresql</artifactId>-->
<!-- <version>${anyline.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.anyline</groupId>--> <!-- <groupId>org.anyline</groupId>-->
<!-- <artifactId>anyline-data-jdbc-mssql</artifactId>--> <!-- <artifactId>anyline-data-jdbc-mssql</artifactId>-->