FrontUniversitiesController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. package com.ruoyi.web.controller.front;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.ruoyi.common.core.controller.BaseController;
  4. import com.ruoyi.common.core.domain.AjaxResult;
  5. import com.ruoyi.common.core.domain.entity.SysDictData;
  6. import com.ruoyi.common.core.domain.entity.SysUser;
  7. import com.ruoyi.common.core.page.TableDataInfo;
  8. import com.ruoyi.common.utils.SecurityUtils;
  9. import com.ruoyi.common.utils.StringUtils;
  10. import com.ruoyi.system.service.ISysDictTypeService;
  11. import com.ruoyi.syzy.domain.*;
  12. import com.ruoyi.syzy.dto.UniversitiesCondDTO;
  13. import com.ruoyi.syzy.dto.UniversityDetailDTO;
  14. import com.ruoyi.syzy.service.*;
  15. import com.ruoyi.util.ConstantUtil;
  16. import com.ruoyi.web.domain.Constant;
  17. import com.ruoyi.web.service.CommService;
  18. import com.ruoyi.web.service.VoluntaryService;
  19. import io.swagger.annotations.Api;
  20. import io.swagger.annotations.ApiOperation;
  21. import io.swagger.annotations.ApiParam;
  22. import org.apache.commons.collections.CollectionUtils;
  23. import org.apache.commons.lang3.tuple.Pair;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.web.bind.annotation.*;
  26. import java.util.ArrayList;
  27. import java.util.List;
  28. import java.util.Map;
  29. import java.util.stream.Collectors;
  30. @RestController
  31. @Api(tags = "前端-三库-院校库")
  32. @RequestMapping("front/university")
  33. public class FrontUniversitiesController extends BaseController {
  34. @Autowired
  35. private IBBusiWishUniversitiesImageService universitiesImageService;
  36. @Autowired
  37. private IBBusiWishUniversitiesEnrollBrochureService universitiesEnrollBrochureService;
  38. @Autowired
  39. private IBBusiWishUniversitiesService universitiesService;
  40. @Autowired
  41. private IBBusiWishUniversitiesRankingService universitiesRankingService;
  42. @Autowired
  43. public ISysDictTypeService dictTypeService;
  44. @Autowired
  45. private IBCustomerUniversitiesService customerUniversitiesService;
  46. @Autowired
  47. private VoluntaryService voluntaryService;
  48. @Autowired
  49. private IBBusiWishUniversitySubmitMarjorsService wishUniversitySubmitMarjorsService;
  50. @Autowired
  51. private IBBusiWishUniversitySubmitRecruitPlanService wishUniversitySubmitRecruitPlanService;
  52. @Autowired
  53. private CommService commService;
  54. @GetMapping("filters")
  55. @ApiOperation("00 院校列表数据筛选项")
  56. public AjaxResult filters() {
  57. String entranceType = ConstantUtil.getExamTypeData(SecurityUtils.getLoginUser().getUser().getExamType().title());
  58. JSONObject data = new JSONObject(true);
  59. data.put("locations", universitiesService.getLocations(entranceType));
  60. data.put("natureTypes", universitiesService.getNatureTypeCN(entranceType));//办学性质:公办民办
  61. data.put("types", universitiesService.getTypes(entranceType));//院校类别
  62. // data.put("levels", universitiesService.getLevels());
  63. data.put("features", universitiesService.getFeatures(entranceType));//等级
  64. data.put("bxTypes", universitiesService.getBxTypes(entranceType));//双高院校
  65. //竞争力星级
  66. Map<String,String> map = dictTypeService.selectDictDataByType("university_stars")
  67. .stream().collect(Collectors.toMap(t -> t.getDictValue(), SysDictData::getDictLabel));
  68. map.entrySet().stream().sorted(Map.Entry.comparingByKey());
  69. // .forEachOrdered(x -> map.put(x.getKey(), x.getValue()));
  70. data.put("stars", map);
  71. return AjaxResult.success(data);
  72. }
  73. @GetMapping("locations")
  74. @ApiOperation("00 院校列表数据筛选项-地域 回传location")
  75. public AjaxResult locations() {
  76. return AjaxResult.success(universitiesService.getLocations(ConstantUtil.getExamTypeData(SecurityUtils.getLoginUser().getUser().getExamType().title())));
  77. }
  78. @GetMapping("natureTypes")
  79. @ApiOperation("00 院校列表数据筛选项-主管部门类型 回传natureTypeCN")
  80. public AjaxResult natureTypes() {
  81. return AjaxResult.success(universitiesService.getNatureTypeCN(ConstantUtil.getExamTypeData(SecurityUtils.getLoginUser().getUser().getExamType().title())));
  82. }
  83. @GetMapping("types")
  84. @ApiOperation("00 院校列表数据筛选项-院校类型 回传type")
  85. public AjaxResult types() {
  86. return AjaxResult.success(universitiesService.getTypes(ConstantUtil.getExamTypeData(SecurityUtils.getLoginUser().getUser().getExamType().title())));
  87. }
  88. @GetMapping("levels")
  89. @ApiOperation("00 院校列表数据筛选项-学历层次 回传level")
  90. public AjaxResult levels() {
  91. return AjaxResult.success(universitiesService.getLevels(ConstantUtil.getExamTypeData(SecurityUtils.getLoginUser().getUser().getExamType().title())));
  92. }
  93. @GetMapping("features")
  94. @ApiOperation("00 院校列表数据筛选项-院校类型 回传features")
  95. public AjaxResult features() {
  96. return AjaxResult.success(universitiesService.getFeatures(ConstantUtil.getExamTypeData(SecurityUtils.getLoginUser().getUser().getExamType().title())));
  97. }
  98. @GetMapping("listNoToken")
  99. @ApiOperation("01 院校列表")
  100. public TableDataInfo listNoToken(UniversitiesCondDTO cond, @ApiParam(value = "页数", example = "1") @RequestParam Integer pageNum,
  101. @ApiParam(value = "页大小", example = "15") @RequestParam Integer pageSize) {
  102. return getUniversitiesList(cond,null, pageNum, pageSize);
  103. }
  104. @GetMapping("list")
  105. @ApiOperation("01 院校列表")
  106. public TableDataInfo list(UniversitiesCondDTO cond, @ApiParam(value = "页数", example = "1") @RequestParam Integer pageNum,
  107. @ApiParam(value = "页大小", example = "15") @RequestParam Integer pageSize) {
  108. String location = SecurityUtils.getLoginUser().getUser().getLocation();
  109. if(StringUtils.isNotBlank(location)){
  110. location = location+",全国";
  111. }
  112. return getUniversitiesList(cond,location, pageNum, pageSize);
  113. }
  114. public TableDataInfo getUniversitiesList(UniversitiesCondDTO cond,String location, Integer pageNum,Integer pageSize){
  115. if (StringUtils.isNumber(cond.getName())) {
  116. cond.setCode(cond.getName());
  117. cond.setName(null);
  118. }
  119. if (null != cond.getFilterRank() && cond.getFilterRank()) {
  120. cond.setOrderBy(" star desc, code");
  121. } else {
  122. cond.setFilterRank(null);
  123. cond.setOrderBy(StringUtils.isNotBlank(cond.getOrderBy()) ? cond.getOrderBy() : "code");
  124. }
  125. cond.setEnrollLocation(location);
  126. startPage();
  127. List<BBusiWishUniversities> arr;
  128. SysUser user = SecurityUtils.getLoginUser().getUser();
  129. Integer planYear = voluntaryService.getPlanYear(user);
  130. if(Constant.EXAM_TYPE_ZG.equals(user.getExamType())) {
  131. arr = universitiesService.selectMajorWishUniversitiesListSimpleByMap2(cond.toCondMap(planYear, user.getExamType().title(), user.getSelectSubject(), user.getLocation())); // TODO MF
  132. } else {
  133. arr = universitiesService.selectMajorWishUniversitiesListSimpleByMap(cond.toCondMap(planYear, Constant.EXAM_TYPE_PG, null, user.getLocation()));
  134. }
  135. //处理院校星级竞争力
  136. arr.stream().forEach(t -> {
  137. if(StringUtils.isNotEmpty(t.getStar())){
  138. t.setStar(dictTypeService.getDictDataByType("university_stars",t.getStar()));
  139. }
  140. });
  141. return getDataTable(arr);
  142. }
  143. @GetMapping("detail")
  144. @ApiOperation("02 院校详情")
  145. public AjaxResult detail(@ApiParam("学校code") @RequestParam String code) {
  146. commService.requireVip();
  147. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  148. UniversityDetailDTO data = universitiesService.detail(code, voluntaryService.getPlanYear(sysUser));
  149. if(StringUtils.isNotEmpty(data.getBaseInfo().getStar())){
  150. data.getBaseInfo().setStar(dictTypeService.getDictDataByType("university_stars",data.getBaseInfo().getStar()));
  151. }
  152. Long universityId = data.getBaseInfo().getId();
  153. BCustomerUniversities cond = new BCustomerUniversities();
  154. cond.setUniversityId(universityId);
  155. cond.setCustomerCode(sysUser.getCode());
  156. cond.setStatus(1L);
  157. List<BCustomerUniversities> list = customerUniversitiesService.selectBCustomerUniversitiesList(cond);
  158. data.getBaseInfo().setCollected(CollectionUtils.isNotEmpty(list));
  159. this.saveUniversitiesClicks(code);
  160. if(Constant.EXAM_TYPE_ZG.equals(sysUser.getExamType())) {
  161. Integer examMajor = sysUser.getSelectSubject(); // TODO MF
  162. BBusiWishUniversitySubmitRecruitPlan planCond = new BBusiWishUniversitySubmitRecruitPlan();
  163. planCond.setUniversityId(universityId);
  164. planCond.setLocation(sysUser.getLocation());
  165. planCond.setLiberalScience(examMajor);
  166. List<UniversityDetailDTO.WishPlan> planList = wishUniversitySubmitRecruitPlanService.selectBBusiWishUniversitySubmitRecruitPlanList(planCond).stream().map(t -> new UniversityDetailDTO.WishPlan(t)).collect(Collectors.toList());
  167. data.setPlanHistories(planList);
  168. BBusiWishUniversitySubmitMarjors submitCond = new BBusiWishUniversitySubmitMarjors();
  169. submitCond.setUniversityId(universityId);
  170. submitCond.setLocation(sysUser.getLocation());
  171. submitCond.setLiberalScience(examMajor);
  172. List<UniversityDetailDTO.WishSubmit> submitList = wishUniversitySubmitMarjorsService.selectBBusiWishUniversitySubmitMarjorsList(submitCond).stream().map(t -> new UniversityDetailDTO.WishSubmit(t)).collect(Collectors.toList());
  173. data.setEnrollHistories(submitList);
  174. } else if(Constant.EXAM_TYPE_PG.equals(sysUser.getExamType()) || Constant.EXAM_TYPE_ZZ.equals(sysUser.getExamType())) {
  175. Pair<List<UniversityDetailDTO.WishPlan>, List<UniversityDetailDTO.WishSubmit>> pair = voluntaryService.getUniversityHistory(universityId, sysUser.getLocation(), sysUser.getExamType().title());
  176. data.setPlanHistories(pair.getLeft());
  177. data.setEnrollHistories(pair.getRight());
  178. }
  179. return AjaxResult.success(data);
  180. }
  181. @GetMapping("getUniversitiesEnrollBrochure")
  182. @ApiOperation("03 招生简章")
  183. public TableDataInfo getUniversitiesEnrollBrochure(@ApiParam("学校code") @RequestParam String code,
  184. @ApiParam("学校code") String title) {
  185. BBusiWishUniversitiesEnrollBrochure query = new BBusiWishUniversitiesEnrollBrochure();
  186. query.setCollegeCode(code);
  187. query.setTitle(title);
  188. startPage();
  189. List<BBusiWishUniversitiesEnrollBrochure> list = universitiesEnrollBrochureService.selectBBusiWishUniversitiesEnrollBrochureList(query);
  190. return getDataTable(list);
  191. }
  192. @GetMapping("getUniversitiesEnrollBrochureDetail")
  193. @ApiOperation("03-2 招生简章详情")
  194. public AjaxResult getUniversitiesEnrollBrochure(@ApiParam("简章id") @RequestParam Long id) {
  195. return AjaxResult.success(universitiesEnrollBrochureService.selectBBusiWishUniversitiesEnrollBrochureById(id));
  196. }
  197. @PostMapping("saveUniversitiesEnrollBrochureHits")
  198. @ApiOperation("04-2 保存招生简章热度/点击")
  199. public AjaxResult saveUniversitiesEnrollBrochureHits(@ApiParam("ID") @RequestParam Long id){
  200. BBusiWishUniversitiesEnrollBrochure result = universitiesEnrollBrochureService.selectBBusiWishUniversitiesEnrollBrochureById(id);
  201. result.setHits(null==result.getHits()?1:(result.getHits()+1));
  202. universitiesEnrollBrochureService.updateBBusiWishUniversitiesEnrollBrochure(result);
  203. return AjaxResult.success("保存成功");
  204. }
  205. // @PostMapping("saveUniversitiesHits")
  206. // @ApiOperation("04 保存院校热度/点击")
  207. public AjaxResult saveUniversitiesClicks(@ApiParam("学校code") @RequestParam String code) {
  208. BBusiWishUniversities result = universitiesService.selectBBusiWishUniversitiesByCode(code);
  209. if(null==result){
  210. return AjaxResult.error("学校[ "+code+" ]不存在");
  211. }
  212. BBusiWishUniversities update = new BBusiWishUniversities();
  213. update.setId(result.getId());
  214. update.setHits(null==result.getHits()?1:(result.getHits()+1));
  215. universitiesService.updateBBusiWishUniversities(update);
  216. return AjaxResult.success();
  217. }
  218. @GetMapping("getUniversitiesHitsTopCount")
  219. @ApiOperation("05 获取院校热度/点击 Top count")
  220. public AjaxResult getUniversitiesHits(Integer count) {
  221. BBusiWishUniversities exam = new BBusiWishUniversities();
  222. exam.getParams().put("orderBy", "hits desc");
  223. exam.getParams().put("limit", null==count?8:count);
  224. List<BBusiWishUniversities> arr = universitiesService.selectBBusiWishUniversitiesListSimple(exam);
  225. return AjaxResult.success(arr);
  226. }
  227. @GetMapping("getUniversitiesStyle")
  228. @ApiOperation("06 获取院校风采")
  229. public AjaxResult getUniversitiesStyle(@ApiParam("学校code") @RequestParam String code) {
  230. BBusiWishUniversitiesImage query = new BBusiWishUniversitiesImage();
  231. query.setCollegeCode(code);
  232. // query.getParams().put("orderBy", "collegeCode,sort");
  233. List<BBusiWishUniversitiesImage> list = universitiesImageService.selectBBusiWishUniversitiesImageList(query);
  234. return AjaxResult.success(list);
  235. }
  236. @GetMapping("getUniversitiesRankingFilter")
  237. @ApiOperation("07-1 获取院校排名筛选条件")
  238. public AjaxResult getUniversitiesRankingFilter(String type) {
  239. JSONObject result = new JSONObject();
  240. result.put("types",universitiesRankingService.selectBBusiWishUniversitiesRankingTypes());
  241. result.put("years",universitiesRankingService.selectBBusiWishUniversitiesRankingYears(type));
  242. return AjaxResult.success(result);
  243. }
  244. @GetMapping("getUniversitiesRankingFilterYears")
  245. @ApiOperation("07-1-1 获取院校排名筛选条件年份")
  246. public AjaxResult getUniversitiesRankingFilterYears(String type) {
  247. JSONObject result = new JSONObject();
  248. result.put("years",universitiesRankingService.selectBBusiWishUniversitiesRankingYears(type));
  249. return AjaxResult.success(result);
  250. }
  251. @GetMapping("getUniversitiesRanking")
  252. @ApiOperation("07-2 获取院校排名")
  253. public TableDataInfo getUniversitiesRanking(@ApiParam("排名类型") @RequestParam String type,
  254. @ApiParam("年份") @RequestParam Integer year,@ApiParam("学校名称") String collegeName) {
  255. return getUniversitiesRankingList(type, year, collegeName);
  256. }
  257. @GetMapping("getUniversitiesRankingNoToken")
  258. @ApiOperation("07-2 获取院校排名")
  259. public TableDataInfo getUniversitiesRankingNoToken(@ApiParam("排名类型") @RequestParam String type,
  260. @ApiParam("年份") @RequestParam Integer year,@ApiParam("学校名称") String collegeName) {
  261. return getUniversitiesRankingList(type, year, collegeName);
  262. }
  263. private TableDataInfo getUniversitiesRankingList(String type,Integer year,String collegeName){
  264. BBusiWishUniversitiesRanking query = new BBusiWishUniversitiesRanking();
  265. query.setType(type);
  266. query.setYear(year);
  267. if(StringUtils.isNotBlank(collegeName)){
  268. query.setCollegeName(collegeName);
  269. }
  270. // query.getParams().put("orderBy", " ranking");
  271. startPage();
  272. //取到学校数据
  273. List<BBusiWishUniversitiesRanking> list = universitiesRankingService.selectBBusiWishUniversitiesRankingList(query);
  274. return getDataTable(list);
  275. }
  276. @GetMapping("getUniversitiesRankingByTypes")
  277. @ApiOperation("07-3 获取院校排名->APP使用")
  278. public TableDataInfo getUniversitiesRankingByTypes(@ApiParam("排名类型") @RequestParam String type) {
  279. Integer year = universitiesRankingService.selectUniversitiesRankingMaxYearByType(type);
  280. if(null==year){
  281. return getDataTable(new ArrayList<>());
  282. }
  283. BBusiWishUniversitiesRanking query = new BBusiWishUniversitiesRanking();
  284. query.setType(type);
  285. query.setYear(year);
  286. //取到最新一年的学校排名数据
  287. startPage();
  288. List<BBusiWishUniversitiesRanking> list = universitiesRankingService.selectBBusiWishUniversitiesRankingList(query);
  289. List<String> collegeCodes = list.stream().map(t->t.getCollegeCode()).collect(Collectors.toList());
  290. query = new BBusiWishUniversitiesRanking();
  291. query.setType(type);
  292. query.setCollegeCodes(collegeCodes);
  293. query.getParams().put("maxYear", year-1);
  294. query.getParams().put("minYear", year-2);
  295. //取最近两年对应学校的数据
  296. List<BBusiWishUniversitiesRanking> historyList = universitiesRankingService.selectBBusiWishUniversitiesRankingList(query);
  297. Map<String,Integer> yearCodeRankingMap = historyList.stream().collect(Collectors.toMap(e -> (e.getYear()+e.getCollegeCode()),e -> e.getRanking()));
  298. // Map<String, BBusiWishUniversitiesRanking> importMap = historyList.stream().collect(Collectors.toMap(BBusiWishUniversitiesRanking::getCollegeCode, Function.identity()));
  299. //填充过去2年数据
  300. for (BBusiWishUniversitiesRanking ll : list) {
  301. //去年
  302. String key = (ll.getYear() - 1) + ll.getCollegeCode();
  303. if (yearCodeRankingMap.containsKey(key)) {
  304. ll.setLastRanking1(yearCodeRankingMap.get(key));
  305. }
  306. //前年
  307. key = (ll.getYear() - 2) + ll.getCollegeCode();
  308. if (yearCodeRankingMap.containsKey(key)) {
  309. ll.setLastRanking2(yearCodeRankingMap.get(key));
  310. }
  311. }
  312. return getDataTable(list);
  313. }
  314. }