package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.*; import com.ruoyi.system.service.*; import com.ruoyi.web.controller.query.ConsultationQuery; import com.ruoyi.web.controller.query.OrderCountQuery; import com.ruoyi.web.controller.query.dto.CountTotalDto; import com.ruoyi.web.controller.query.dto.ManageCountDto; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import oshi.driver.mac.net.NetStat; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** *

* 首页订单设置 前端控制器 *

* * @author luodangjia * @since 2024-09-19 */ @RestController @RequestMapping("/t-index-menu") public class TIndexMenuController { @Resource private TIndexMenuService indexMenuService; @Resource private TConsultationService consultationService; @Resource private TokenService tokenService; @Resource private TUserChangeService changeService; @Resource private TUserChangeDetailService changeDetailService; @Resource private TDeclareNoticeService declareNoticeService; @Resource private TCommitteeService committeeService; @Resource private TAppUserService appUserService; @Resource private TRegionService regionService; @Resource private TCourseService courseService; @Resource private TGeneratedRecordsService generatedRecordsService; @Resource private TInformationService informationService; @ApiOperation(value = "列表",tags = {"web-顶部菜单","后台-系统设置-首页菜单设置"}) @PostMapping(value = "/list") public R> list() { List list = indexMenuService.lambdaQuery().orderByDesc(TIndexMenu::getMenuSort).list(); return R.ok(list); } @ApiOperation(value = "编辑",tags = "后台-系统设置-首页菜单设置") @PostMapping(value = "/edit") public R edit(@RequestBody TIndexMenu indexMenu) { indexMenuService.updateById(indexMenu); return R.ok(); } @ApiOperation(value = "根据省名字获取悬停框内统计数",tags = {"web-政策数据中心"}) @PostMapping(value = "/getByProvinceName/count") public R getByProvinceName() { List regions = regionService.lambdaQuery().groupBy(TRegion::getProvinceName).list(); for (TRegion tRegion : regions) { List list = regionService.lambdaQuery().eq(TRegion::getProvinceName, tRegion.getProvinceName()).list(); List regionIds = new ArrayList<>(); list.forEach(region -> regionIds.add(region.getId())); if (!regionIds.isEmpty()) { Long count = consultationService.lambdaQuery().in(TConsultation::getRegionId, regionIds) .in(TConsultation::getClassificationId,Arrays.asList(1,2,3)).count(); tRegion.setCount(count); }else { tRegion.setCount(0L); } } return R.ok(regions); } @ApiOperation(value = "定制推荐-申报通知",tags = {"web-首页"}) @PostMapping(value = "/notice/list") public R> noticelist(@RequestBody ConsultationQuery informationQuery) { //获取当前登录人id Long userId = tokenService.getLoginUser().getUserId(); TUserChange userChange = changeService.lambdaQuery().eq(TUserChange::getUserId, userId).orderByDesc(TUserChange::getCreateTime).last("limit 1").one(); List notices = new ArrayList<>(); if (userChange!=null){ List userChangeDetails = changeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, userChange.getId()).list(); for (TUserChangeDetail tUserChangeDetail : userChangeDetails) { List declareNotices = declareNoticeService.lambdaQuery().eq(TDeclareNotice::getRegionId,tUserChangeDetail.getRegionId()).eq(TDeclareNotice::getMajorId, tUserChangeDetail.getMajorId()).eq(TDeclareNotice::getLevel, tUserChangeDetail.getLevelId()).list(); notices.addAll(declareNotices); } notices.sort(Comparator.comparing(TDeclareNotice::getCreateTime).reversed()); }else { // 创建 LambdaQueryWrapper 并设置查询条件 List declareNotices = declareNoticeService.lambdaQuery() .last(" ORDER BY RAND() LIMIT 16").list(); notices.addAll(declareNotices); } if (notices.size() > 16) { // 只保留前 16 条记录 notices = new ArrayList<>(notices.subList(0, 16)); } return R.ok(notices); } @ApiOperation(value = "定制推荐-2政策3公示",tags = {"web-首页"}) @PostMapping(value = "/consultation/list") public R> consultationlist(@RequestParam Integer type, @RequestParam(required = false) Integer regionId, HttpServletRequest request) { String token = request.getHeader("Authorization"); TUserChange userChange =null; if(StringUtils.isNotEmpty(token)){ //获取当前登录人id Long userId = tokenService.getLoginUser().getUserId(); userChange = changeService.lambdaQuery().eq(TUserChange::getUserId, userId).orderByDesc(TUserChange::getCreateTime).last("limit 1").one(); } List notices = new ArrayList<>(); if (type==1){ if (userChange!=null){ List userChangeDetails = changeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, userChange.getId()).list(); List consultations = consultationService.lambdaQuery().eq(TConsultation::getClassificationId, type) .orderByDesc(TConsultation::getClassificationSort,TConsultation::getCreateTime).list(); for (TUserChangeDetail tUserChangeDetail : userChangeDetails) { List consultationList = consultations.stream().filter(e -> e.getRegionId().equals(tUserChangeDetail.getRegionId()) && e.getMajorId().equals(tUserChangeDetail.getMajorId()) && e.getLevel().equals(tUserChangeDetail.getLevelId()) ).collect(Collectors.toList()); // List consultations = consultationService.lambdaQuery().eq(TConsultation::getClassificationId,type) // .eq(TConsultation::getRegionId,tUserChangeDetail.getRegionId()) // .eq(TConsultation::getMajorId, tUserChangeDetail.getMajorId()) // .eq(TConsultation::getLevel, tUserChangeDetail.getLevelId()) // .orderByDesc(TConsultation::getClassificationSort,TConsultation::getCreateTime).list(); notices.addAll(consultationList); } notices.sort(Comparator.comparing(TConsultation::getCreateTime).reversed()); }else { // 创建 LambdaQueryWrapper 并设置查询条件 TRegion region = regionService.getById(regionId); List regions = regionService.list(Wrappers.lambdaQuery(TRegion.class) .eq(TRegion::getProvinceName, region.getProvinceName())); List regionIds = regions.stream().map(TRegion::getId).collect(Collectors.toList()); List list1 = consultationService.lambdaQuery().eq(TConsultation::getClassificationId,type) .in(TConsultation::getRegionId,regionIds) .orderByDesc(TConsultation::getCreateTime,TConsultation::getClassificationSort).list(); notices.addAll(list1); notices.sort(Comparator.comparing(TConsultation::getCreateTime).reversed()); } // List list1 = consultationService.lambdaQuery().eq(TConsultation::getClassificationId,type).eq(TConsultation::getIsRecommend,1).last("ORDER BY RAND() LIMIT 16").list(); // notices.addAll(list1); if (notices.size() > 2) { // 只保留前 16 条记录 notices = new ArrayList<>(notices.subList(0, 2)); } }else { if (userChange!=null){ List list = changeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, userChange.getId()).list(); List consultations = consultationService.lambdaQuery().eq(TConsultation::getClassificationId, type).list(); for (TUserChangeDetail tUserChangeDetail : list) { List consultationList = consultations.stream().filter(e -> e.getRegionId().equals(tUserChangeDetail.getRegionId()) && e.getMajorId().equals(tUserChangeDetail.getMajorId()) && e.getLevel().equals(tUserChangeDetail.getLevelId()) && e.getClassificationId().equals(type) ).collect(Collectors.toList()); notices.addAll(consultationList); } notices.sort(Comparator.comparing(TConsultation::getCreateTime).reversed()); }else { // 创建 LambdaQueryWrapper 并设置查询条件 TRegion region = regionService.getById(regionId); List regions = regionService.list(Wrappers.lambdaQuery(TRegion.class) .eq(TRegion::getProvinceName, region.getProvinceName())); List regionIds = regions.stream().map(TRegion::getId).collect(Collectors.toList()); List list1 = consultationService.lambdaQuery().eq(TConsultation::getClassificationId,type) .in(TConsultation::getRegionId,regionIds) .orderByDesc(TConsultation::getCreateTime,TConsultation::getClassificationSort).list(); notices.addAll(list1); notices.sort(Comparator.comparing(TConsultation::getCreateTime).reversed()); } // List list1 = consultationService.lambdaQuery().eq(TConsultation::getClassificationId,type).last("ORDER BY RAND() LIMIT 16").list(); // notices.addAll(list1); if (notices.size() > 2) { // 只保留前 16 条记录 notices = new ArrayList<>(notices.subList(0, 2)); } } return R.ok(notices); } @ApiOperation(value = "全国政策数据",tags = {"web-首页"}) @PostMapping(value = "/total/count") public R totalcount() { Long noticeCount = consultationService.lambdaQuery().eq(TConsultation::getClassificationId, 1).count(); Long fileCount = consultationService.lambdaQuery().eq(TConsultation::getClassificationId, 2).count(); Long infoCount = consultationService.lambdaQuery().eq(TConsultation::getClassificationId, 3).count(); CountTotalDto countTotalDto = new CountTotalDto(); countTotalDto.setNoticeCount(noticeCount); countTotalDto.setFileCount(fileCount); countTotalDto.setInfoCount(infoCount); Long committeeCount = committeeService.lambdaQuery().count(); countTotalDto.setCommitteeCount(committeeCount); return R.ok(countTotalDto); } @ApiOperation(value = "全国政策数据下方通知公告",tags = {"web-首页"}) @PostMapping(value = "/notice/recommend") public R> recommend() { List list = consultationService.lambdaQuery().eq(TConsultation::getClassificationId, 1).orderByDesc(TConsultation::getIsRecommend).orderByDesc(TConsultation::getCreateTime).last("limit 9").list(); return R.ok(list); } @Resource private RedisCache redisCache; @ApiOperation(value = "顶部提示",tags = {"web-顶部弹窗"}) @PostMapping(value = "/allert") public R allert() { Long userId = tokenService.getLoginUser().getUserId(); TAppUser appUser = appUserService.getById(userId); Long cacheObject = redisCache.getCacheObject("ALLERT:"+userId); if (cacheObject!=null && appUser.getIsSetPreference() == 1){ return R.ok(cacheObject == 1); }else { return R.ok(false); } } @ApiOperation(value = "取消顶部提示",tags = {"web-取消顶部提示"}) @PostMapping(value = "/cancelAllert") public R cancelAllert() { Long userId = tokenService.getLoginUser().getUserId(); redisCache.deleteObject("ALLERT:"+userId); return R.ok(); } @ApiOperation(value = "数据统计",tags = {"后台-统计"}) @PostMapping(value = "/count") public R count() { Long userCount = appUserService.lambdaQuery().count(); Long courseCount = courseService.lambdaQuery().count(); Long courseFreeCount = courseService.lambdaQuery().eq(TCourse::getCoursePrice,0).count(); Long payCount = courseCount -courseFreeCount; Long recordsCount = generatedRecordsService.lambdaQuery().count(); Long infoCount = informationService.lambdaQuery().count(); Long infoFreeCount = informationService.lambdaQuery().eq(TInformation::getInformationPrice,new BigDecimal(0)).count(); Long infoPayCount = infoCount-infoFreeCount; ManageCountDto manageCountDto = new ManageCountDto(); manageCountDto.setUserCount(userCount); manageCountDto.setCourseCount(courseCount); manageCountDto.setCourseFreeCount(courseFreeCount); manageCountDto.setPayCount(payCount); manageCountDto.setRecordsCount(recordsCount); manageCountDto.setInfoFreeCount(infoFreeCount); manageCountDto.setInfoPayCount(infoPayCount); manageCountDto.setInfoCount(infoCount); return R.ok(manageCountDto); } @ApiOperation(value = "用户增长数",tags = {"后台-统计"}) @PostMapping(value = "/user/up") public R userup() { List> userUp = indexMenuService.userUp(); return R.ok(userUp);} @ApiOperation(value = "订单统计",tags = {"后台-统计"}) @PostMapping(value = "/order/count") public R>> ordercount(@RequestBody OrderCountQuery orderCountQuery) { List> map = new ArrayList<>(); if (orderCountQuery.getDayType()==1){ map =indexMenuService.dayCount(orderCountQuery.getPaymentStatus()); }else if (orderCountQuery.getDayType()==2){ map =indexMenuService.weekCount(orderCountQuery.getPaymentStatus()); }else if (orderCountQuery.getDayType()==3){ map =indexMenuService.monthCount(orderCountQuery.getPaymentStatus()); }else if (orderCountQuery.getDayType()==4){ map = indexMenuService.yearCount(orderCountQuery.getPaymentStatus()); }else { map = indexMenuService.searchDayCount(orderCountQuery.getStartDate(),orderCountQuery.getEndDate(),orderCountQuery.getPaymentStatus()); } return R.ok(map); } @ApiOperation(value = "订单统计1",tags = {"后台-统计"}) @PostMapping(value = "/order/count1") public R>> ordercount1(@RequestBody OrderCountQuery orderCountQuery) { List> map = indexMenuService.count1(orderCountQuery.getStartDate(),orderCountQuery.getEndDate(),orderCountQuery.getPaymentStatus(),orderCountQuery.getDayType()); return R.ok(map); } @ApiOperation(value = "推荐资料",tags = {"web-首页"}) @PostMapping(value = "/information/list") public R> information(@RequestParam(required = false) Integer regionId, HttpServletRequest request) { String token = request.getHeader("Authorization"); TUserChange one =null; Long userId; if(StringUtils.isNotEmpty(token)){ //获取当前登录人id userId = tokenService.getLoginUser().getUserId(); one = changeService.lambdaQuery().eq(TUserChange::getUserId, userId).orderByDesc(TUserChange::getCreateTime).last("limit 1").one(); }else { userId = -1L; } List notices = new ArrayList<>(); if (one!=null){ List list = changeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, one.getId()).list(); List informations = informationService.lambdaQuery().list(); for (TUserChangeDetail tUserChangeDetail : list) { List informationsList = informations.stream().filter(e -> e.getRegionId().equals(tUserChangeDetail.getRegionId()) && e.getMajorId().equals(tUserChangeDetail.getMajorId()) && e.getLevel().equals(tUserChangeDetail.getLevelId()) ).collect(Collectors.toList()); // List informationsList = informationService.lambdaQuery() // .eq(TInformation::getRegionId,tUserChangeDetail.getRegionId()) // .eq(TInformation::getMajorId, tUserChangeDetail.getMajorId()) // .eq(TInformation::getLevel, tUserChangeDetail.getLevelId()).list(); notices.addAll(informationsList); } notices.sort(Comparator.comparing(TInformation::getCreateTime).reversed()); }else { // 创建 LambdaQueryWrapper 并设置查询条件 TRegion region = regionService.getById(regionId); List regions = regionService.list(Wrappers.lambdaQuery(TRegion.class) .eq(TRegion::getProvinceName, region.getProvinceName())); List regionIds = regions.stream().map(TRegion::getId).collect(Collectors.toList()); List list1 = informationService.lambdaQuery() .in(TInformation::getRegionId,regionIds).list(); notices.addAll(list1); notices.sort(Comparator.comparing(TInformation::getCreateTime).reversed()); } // 创建 LambdaQueryWrapper 并设置查询条件 // List list1 = informationService.lambdaQuery().last("ORDER BY RAND() LIMIT 16").list(); // notices.addAll(list1); if (notices.size() > 16) { // 只保留前 16 条记录 notices = new ArrayList<>(notices.subList(0, 16)); } notices = notices.stream().distinct().collect(Collectors.toList()); Set cacheSet = redisCache.getCacheSet("INFORMATION:" + userId); for (TInformation notice : notices) { notice.setIsCollect(cacheSet.contains(notice.getId())?1:0); } return R.ok(notices); } @ApiOperation(value = "推荐课程",tags = {"web-首页"}) @PostMapping(value = "/course/list") public R> course(@RequestParam(required = false) Integer regionId, HttpServletRequest request) { String token = request.getHeader("Authorization"); TUserChange one =null; Long userId; if(StringUtils.isNotEmpty(token)){ //获取当前登录人id //获取当前登录人id userId = tokenService.getLoginUser().getUserId(); one = changeService.lambdaQuery().eq(TUserChange::getUserId, userId).orderByDesc(TUserChange::getCreateTime).last("limit 1").one(); }else { userId = -1L; } List notices = new ArrayList<>(); if (one!=null){ List list = changeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, one.getId()).list(); List courses = courseService.lambdaQuery().list(); for (TUserChangeDetail tUserChangeDetail : list) { List coursesList = courses.stream().filter(e -> e.getRegionId().equals(tUserChangeDetail.getRegionId()) && e.getMajorId().equals(tUserChangeDetail.getMajorId()) && e.getLevel().equals(tUserChangeDetail.getLevelId()) ).collect(Collectors.toList()); notices.addAll(coursesList); } notices.sort(Comparator.comparing(TCourse::getCreateTime).reversed()); }else { // 创建 LambdaQueryWrapper 并设置查询条件 TRegion region = regionService.getById(regionId); List regions = regionService.list(Wrappers.lambdaQuery(TRegion.class) .eq(TRegion::getProvinceName, region.getProvinceName())); List regionIds = regions.stream().map(TRegion::getId).collect(Collectors.toList()); List list1 = courseService.lambdaQuery().in(TCourse::getRegionId,regionIds).list(); notices.addAll(list1); notices.sort(Comparator.comparing(TCourse::getCreateTime).reversed()); } // List list1 = courseService.lambdaQuery().last("ORDER BY RAND() LIMIT 16").list(); // notices.addAll(list1); if (notices.size() > 16) { // 只保留前 16 条记录 notices = new ArrayList<>(notices.subList(0, 16)); } return R.ok(notices); } }