FrontUniversitiesController.java 18 KB

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