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);
}
}
}