package com.ruoyi.web.controller.api; import java.time.LocalDate; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.BasePage; 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.query.AppUserQuery; import com.ruoyi.system.service.*; import com.ruoyi.web.controller.query.ConsultationQuery; import com.ruoyi.web.controller.query.InformationQuery; import io.swagger.annotations.ApiOperation; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** *

* 咨询列表 前端控制器 *

* * @author luodangjia * @since 2024-09-19 */ @RestController @RequestMapping("/t-consultation") public class TConsultationController { @Resource private TConsultationService informationService; @Resource private TRegionService regionService; @Resource private TTechnicalTitleService tTechnicalTitleService; @Resource private TTitleMajorService majorService; @Resource private RedisCache redisCache; @Resource private TokenService tokenService; @Resource private TConsultationClassificationService consultationClassificationService; @ApiOperation(value = "通过省名查询下级城市",tags = {"后台-咨询管理-咨询列表","web-咨询查询"}) @PostMapping(value = "/getcity") public R> getcity(@RequestParam String provinceName) { List list = regionService.lambdaQuery().eq(TRegion::getProvinceName, provinceName).eq(TRegion::getIsOpen, 1).list(); return R.ok(list); } @Resource private TAppUserService appUserService; //新增咨询 @ApiOperation(value = "添加",tags = "后台-咨询管理-咨询列表") @PostMapping(value = "/add") public R add(@Validated @RequestBody TConsultation information) { informationService.save(information); AppUserQuery appUserQuery = new AppUserQuery(); appUserQuery.setMajorId1(information.getMajorId()); appUserQuery.setTitleId1(information.getTitleId()); appUserQuery.setRegionId1(Long.valueOf(information.getRegionId())); appUserQuery.setLevelId1(information.getLevel()); List newIds = appUserService.getNewIds(appUserQuery); for (Long newId : newIds) { redisCache.setCacheObject("ALLERT:"+newId,information.getClassificationId()); } return R.ok(); } //修改咨询 @ApiOperation(value = "修改",tags = "后台-咨询管理-咨询列表") @PostMapping(value = "/edit") public R edit(@RequestBody TConsultation information) { informationService.updateById(information); AppUserQuery appUserQuery = new AppUserQuery(); appUserQuery.setMajorId1(information.getMajorId()); appUserQuery.setTitleId1(information.getTitleId()); appUserQuery.setRegionId1(Long.valueOf(information.getRegionId())); appUserQuery.setLevelId1(information.getLevel()); List newIds = appUserService.getNewIds(appUserQuery); for (Long newId : newIds) { redisCache.setCacheObject("ALLERT:"+newId,information.getClassificationId()); } return R.ok(); } @Resource private TConsultationMessageService messageService; //删除咨询 @ApiOperation(value = "删除",tags = "后台-咨询管理-咨询列表") @PostMapping(value = "/deleteByIds") public R deleteByIds(String ids) { informationService.removeByIds(Arrays.asList(ids.split(","))); messageService.remove(Wrappers.lambdaQuery(TConsultationMessage.class).in(TConsultationMessage::getConsultationId,Arrays.asList(ids.split(",")))); return R.ok(); } //查询咨询 @ApiOperation(value = "查询",tags = {"后台-咨询管理-咨询列表","web-咨询查询"}) @PostMapping(value = "/list") public R> list(@RequestBody ConsultationQuery informationQuery) { Long userId = tokenService.getLoginUser().getUserId(); Page page; if(StringUtils.isEmpty(informationQuery.getProvinceName())){ if(informationQuery.getSortType()==1){ page = informationService.lambdaQuery() .like(!StringUtils.isEmpty(informationQuery.getClassificationName()), TConsultation::getClassificationName, informationQuery.getClassificationName()) .eq(informationQuery.getRegionId() != null, TConsultation::getRegionId, informationQuery.getRegionId()) .eq(informationQuery.getTechnicalId() != null, TConsultation::getTitleId, informationQuery.getTechnicalId()) .eq(informationQuery.getClassificationId() != null, TConsultation::getClassificationId, informationQuery.getClassificationId()) .eq(informationQuery.getMajorId() != null, TConsultation::getMajorId, informationQuery.getMajorId()) .eq(informationQuery.getLevel() != null, TConsultation::getLevel, informationQuery.getLevel()) .orderByDesc(TConsultation::getCreateTime) .orderByDesc(TConsultation::getPubTime) .page(Page.of(informationQuery.getPageNum(), informationQuery.getPageSize())); }else { page = informationService.lambdaQuery() .like(!StringUtils.isEmpty(informationQuery.getClassificationName()), TConsultation::getClassificationName, informationQuery.getClassificationName()) .eq(informationQuery.getRegionId() != null, TConsultation::getRegionId, informationQuery.getRegionId()) .eq(informationQuery.getTechnicalId() != null, TConsultation::getTitleId, informationQuery.getTechnicalId()) .eq(informationQuery.getClassificationId() != null, TConsultation::getClassificationId, informationQuery.getClassificationId()) .eq(informationQuery.getMajorId() != null, TConsultation::getMajorId, informationQuery.getMajorId()) .eq(informationQuery.getLevel() != null, TConsultation::getLevel, informationQuery.getLevel()) .orderByDesc(TConsultation::getClassificationSort) .orderByDesc(TConsultation::getPubTime) .page(Page.of(informationQuery.getPageNum(), informationQuery.getPageSize())); } }else { List list; // 查询省份下的市 if(informationQuery.getProvinceName().equals("直辖市")){ List cityList = new ArrayList<>(); cityList.add("北京市"); cityList.add("天津市"); cityList.add("重庆市"); cityList.add("上海市"); list = regionService.lambdaQuery().in(TRegion::getProvinceName, cityList).list(); }else { list = regionService.lambdaQuery().eq(TRegion::getProvinceName, informationQuery.getProvinceName()).list(); } List ids = list.stream().map(TRegion::getId).collect(Collectors.toList()); if(informationQuery.getSortType()==1){ page = informationService.lambdaQuery() .like(!StringUtils.isEmpty(informationQuery.getClassificationName()), TConsultation::getClassificationName, informationQuery.getClassificationName()) .in( TConsultation::getRegionId, ids) .eq(informationQuery.getTechnicalId() != null, TConsultation::getTitleId, informationQuery.getTechnicalId()) .eq(informationQuery.getClassificationId() != null, TConsultation::getClassificationId, informationQuery.getClassificationId()) .eq(informationQuery.getMajorId() != null, TConsultation::getMajorId, informationQuery.getMajorId()) .eq(informationQuery.getLevel() != null, TConsultation::getLevel, informationQuery.getLevel()) .orderByDesc(TConsultation::getCreateTime) .orderByDesc(TConsultation::getPubTime) .page(Page.of(informationQuery.getPageNum(), informationQuery.getPageSize())); }else { page = informationService.lambdaQuery() .like(!StringUtils.isEmpty(informationQuery.getClassificationName()), TConsultation::getClassificationName, informationQuery.getClassificationName()) .in( TConsultation::getRegionId, ids) .eq(informationQuery.getTechnicalId() != null, TConsultation::getTitleId, informationQuery.getTechnicalId()) .eq(informationQuery.getClassificationId() != null, TConsultation::getClassificationId, informationQuery.getClassificationId()) .eq(informationQuery.getMajorId() != null, TConsultation::getMajorId, informationQuery.getMajorId()) .eq(informationQuery.getLevel() != null, TConsultation::getLevel, informationQuery.getLevel()) .orderByDesc(TConsultation::getClassificationSort) .orderByDesc(TConsultation::getPubTime) .page(Page.of(informationQuery.getPageNum(), informationQuery.getPageSize())); } } List records = page.getRecords(); if(CollectionUtils.isEmpty(records)){ return R.ok(new Page<>()); } Set cacheSet = redisCache.getCacheSet("Consultation:" + userId); List regionIds = records.stream().map(TConsultation::getRegionId).collect(Collectors.toList()); List regions = regionService.lambdaQuery().in(TRegion::getId, regionIds).list(); List technicalIds = records.stream().map(TConsultation::getTitleId).collect(Collectors.toList()); List tTechnicalTitles = tTechnicalTitleService.lambdaQuery().in(TTechnicalTitle::getId, technicalIds).list(); List majorIds = records.stream().map(TConsultation::getMajorId).collect(Collectors.toList()); List tTitleMajors = majorService.lambdaQuery().in(TTitleMajor::getId, majorIds).list(); List classificationIds = records.stream().map(TConsultation::getClassificationId).collect(Collectors.toList()); List consultationClassifications = consultationClassificationService.lambdaQuery().in(TConsultationClassification::getId, classificationIds).list(); for (TConsultation record : records) { TRegion region = regions.stream().filter(e -> e.getId().equals(record.getRegionId())).findFirst().orElse(null); TTechnicalTitle tTechnicalTitle = tTechnicalTitles.stream().filter(e -> e.getId().equals(record.getTitleId())).findFirst().orElse(null); TTitleMajor tTitleMajor = tTitleMajors.stream().filter(e -> e.getId().equals(record.getMajorId())).findFirst().orElse(null); record.setRegionName(region.getProvinceName()+"-"+region.getName()); record.setTechnicalName(tTechnicalTitle.getTitileName()+"-"+tTitleMajor.getMajorName()); TConsultationClassification tConsultationClassification = consultationClassifications.stream().filter(e -> e.getId().equals(record.getClassificationId())).findFirst().orElse(null); record.setTConsultationClassificationName(tConsultationClassification.getConsultationName()); if (cacheSet!=null){ if (cacheSet.contains(record.getId())){ record.setIsCollect(1); }else { record.setIsCollect(0); } }else { record.setIsCollect(0); } } return R.ok(page); } @Resource private TLevelService levelService; @ApiOperation(value = "详情",tags = {"后台-咨询管理-咨询列表","web-咨询查询"}) @PostMapping(value = "/detail") public R detail(@RequestParam Long id ) { TConsultation consultation = informationService.getById(id); consultation.setWatchNum(consultation.getWatchNum()+1); informationService.updateById(consultation); TTechnicalTitle tTechnicalTitle = tTechnicalTitleService.getById(consultation.getTitleId()); consultation.setTechnicalName(tTechnicalTitle.getTitileName()); TTitleMajor tTitleMajor = majorService.getById(consultation.getMajorId()); consultation.setMajorName(tTitleMajor.getMajorName()); TLevel level = levelService.getById(consultation.getLevel()); consultation.setLevelName(level.getName()); TRegion region = regionService.getById(consultation.getRegionId()); consultation.setTRegion(region); return R.ok(consultation); } @ApiOperation(value = "观看",tags = {"web-咨询查询"}) @PostMapping(value = "/watch") public R watch(@RequestParam Long id ) { TConsultation consultation = informationService.getById(id); consultation.setWatchNum(consultation.getWatchNum()+1); informationService.updateById(consultation); return R.ok(); } @ApiOperation(value = "留言",tags = {"web-咨询查询"}) @PostMapping(value = "/message") public R message(@RequestBody TConsultationMessage message) { Long userId = tokenService.getLoginUser().getUserId(); message.setUserId(userId); messageService.save(message); return R.ok(); } @ApiOperation(value = "收藏咨询",tags = {"web-个人中心"}) @PostMapping(value = "/info/list") public R> infolist(@RequestBody BasePage basePage) { Long userId = tokenService.getLoginUser().getUserId(); Set cacheSet = redisCache.getCacheSet("Consultation:" + userId); if (!cacheSet.isEmpty()) { Page page = informationService.lambdaQuery().in(TConsultation::getId, cacheSet).page(Page.of(basePage.getPageNum(), basePage.getPageSize())); return R.ok(page); }else { return R.ok(new Page<>()); } } @ApiOperation(value = "咨询",tags = {"web-个人中心"}) @PostMapping(value = "/collect/is") public R collectis(@RequestParam Long consultationId) { Long userId = tokenService.getLoginUser().getUserId(); Set cacheSet = redisCache.getCacheSet("Consultation:" + userId); if (cacheSet.contains(consultationId)){ return R.ok(true); }else { return R.ok(false); } } }