FrontUniversitiesController.java 18 KB

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