|
@@ -1,5 +1,7 @@
|
|
|
package com.tourism.webadmin.app.website.controller;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.github.pagehelper.page.PageMethod;
|
|
|
import com.tourism.common.additional.config.ApplicationConfig;
|
|
|
import com.tourism.common.additional.utils.StringUtils;
|
|
@@ -11,34 +13,33 @@ import com.tourism.common.core.util.MyCommonUtil;
|
|
|
import com.tourism.common.core.util.MyModelUtil;
|
|
|
import com.tourism.common.core.util.MyPageUtil;
|
|
|
import com.tourism.common.core.validator.UpdateGroup;
|
|
|
-import com.tourism.common.huaweicloud.moderation.service.HuaweiCloudModerationService;
|
|
|
+import com.tourism.common.huaweicloud.obs.util.MergeAvatarsFlexUtils;
|
|
|
import com.tourism.common.log.annotation.OperationLog;
|
|
|
import com.tourism.common.log.model.constant.SysOperationLogType;
|
|
|
import com.tourism.common.sequence.wrapper.IdGeneratorWrapper;
|
|
|
-import com.tourism.webadmin.app.website.dto.TourismProjectTravelNotesWriteDetailPageDto;
|
|
|
-import com.tourism.webadmin.app.website.dto.TourismProjectTravelNotesWriteToWebDto;
|
|
|
-import com.tourism.webadmin.app.website.dto.WebsiteTourUserDto;
|
|
|
-import com.tourism.webadmin.app.website.vo.TourWriteBelongTabVo;
|
|
|
-import com.tourism.webadmin.app.website.vo.TourismProjectTravelNotesWriteCovertVo;
|
|
|
+import com.tourism.webadmin.app.website.dto.*;
|
|
|
+import com.tourism.webadmin.app.website.model.TourShortImGroup;
|
|
|
+import com.tourism.webadmin.app.website.model.TourShortUser;
|
|
|
+import com.tourism.webadmin.app.website.service.TourTravelNotesPublishService;
|
|
|
+import com.tourism.webadmin.app.website.vo.*;
|
|
|
+import com.tourism.webadmin.back.dto.TourTravelNotesMentionUserDto;
|
|
|
import com.tourism.webadmin.back.dto.TourismTravelNotesContentWriteDto;
|
|
|
import com.tourism.webadmin.back.model.*;
|
|
|
import com.tourism.webadmin.back.model.constant.AuditState;
|
|
|
import com.tourism.webadmin.back.model.constant.UnmountState;
|
|
|
import com.tourism.webadmin.back.service.*;
|
|
|
+import com.tourism.webadmin.back.vo.TourTravelNotesMentionUserVo;
|
|
|
+import com.tourism.webadmin.back.vo.TourTravelNotesTopicVo;
|
|
|
import com.tourism.webadmin.back.vo.TourismProjectTravelNotesWriteVo;
|
|
|
-import com.tourism.webadmin.back.vo.TourismTravelNotesContentWriteVo;
|
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import ognl.Token;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
-import org.apache.poi.ss.formula.functions.T;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Tag(name = "门户网站发布游记接口")
|
|
@@ -52,17 +53,31 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
@Autowired
|
|
|
private TourismProjectTravelNotesWriteService tourismProjectTravelNotesWriteService;
|
|
|
@Autowired
|
|
|
- private TourismTravelNotesContentWriteService tourismTravelNotesContentWriteService;
|
|
|
- @Autowired
|
|
|
private TourTourismProjectTravelNotesService tourTourismProjectTravelNotesService;
|
|
|
@Autowired
|
|
|
private TourUserService tourUserService;
|
|
|
@Autowired
|
|
|
private DirectoryInfoService directoryInfoService;
|
|
|
@Autowired
|
|
|
- private HuaweiCloudModerationService huaweiCloudModerationService;
|
|
|
- @Autowired
|
|
|
private ApplicationConfig applicationConfig;
|
|
|
+ @Autowired
|
|
|
+ private TourFansService tourFansService;
|
|
|
+ @Autowired
|
|
|
+ private TourTravelNotesTopicService tourTravelNotesTopicService;
|
|
|
+ @Autowired
|
|
|
+ private TourImGroupService tourImGroupService;
|
|
|
+ @Autowired
|
|
|
+ private TourImMemberService tourImMemberService;
|
|
|
+ @Autowired
|
|
|
+ private MergeAvatarsFlexUtils mergeAvatarsFlexUtils;
|
|
|
+ @Autowired
|
|
|
+ private TourTravelNotesPublishService tourTravelNotesPublishService;
|
|
|
+ @Autowired
|
|
|
+ private TourTravelNotesImgService tourTravelNotesImgService;
|
|
|
+ @Autowired
|
|
|
+ private TourTravelNotesTopicRelationService tourTravelNotesTopicRelationService;
|
|
|
+ @Autowired
|
|
|
+ private TourTravelNotesMentionUserService tourTravelNotesMentionUserService;
|
|
|
|
|
|
/**
|
|
|
* 获取草稿id
|
|
@@ -84,54 +99,31 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
@PostMapping("/saveDraft")
|
|
|
public ResponseResult<Void> saveDraft(@RequestBody TourismProjectTravelNotesWriteToWebDto tourismProjectTravelNotesWriteDto) {
|
|
|
|
|
|
-
|
|
|
- TourismProjectTravelNotesWrite tourismProjectTravelNotesWrite =
|
|
|
- tourismProjectTravelNotesWriteService.getById(tourismProjectTravelNotesWriteDto.getId());
|
|
|
-
|
|
|
- TourismProjectTravelNotesWrite tourismProjectTravelNotesWriteSave =
|
|
|
- MyModelUtil.copyTo(tourismProjectTravelNotesWriteDto,TourismProjectTravelNotesWrite.class);
|
|
|
-
|
|
|
- //将从表中的数据进行过滤,筛选出cover为1的图片为封面图,第一段落为项目简述
|
|
|
- List<TourismTravelNotesContentWriteDto> travelNotesContent = tourismProjectTravelNotesWriteDto.getTravelNotesContent();
|
|
|
-
|
|
|
- //循环遍历查询内容是否超过5000长度
|
|
|
- for(TourismTravelNotesContentWriteDto i:travelNotesContent){
|
|
|
- if(StringUtils.isNotBlank(i.getContent()) && i.getContent().length()>5000)
|
|
|
- return ResponseResult.error(ErrorCodeEnum.CONTENT_OUT_LIMIT);
|
|
|
- }
|
|
|
- List<TourismTravelNotesContentWriteDto> coverImageList = travelNotesContent.stream().filter(item -> item.getType().equals("image") && item.getCover() != null && item.getCover() == 1).collect(Collectors.toList());
|
|
|
- List<TourismTravelNotesContentWriteDto> coverImageList1 = travelNotesContent.stream().filter(item -> item.getType().equals("image")).collect(Collectors.toList());
|
|
|
- if(CollectionUtils.isEmpty(coverImageList)){
|
|
|
- if(CollectionUtils.isNotEmpty(coverImageList1)){
|
|
|
- tourismProjectTravelNotesWriteSave.setTourismUrl(coverImageList1.get(0).getContent());
|
|
|
+ Long userId = TokenData.takeFromRequest().getUserId();
|
|
|
+ //先校验提及的用户id是否符合互关的状态
|
|
|
+ if(CollectionUtils.isNotEmpty(tourismProjectTravelNotesWriteDto.getMentions())) {
|
|
|
+ List<TourTravelNotesMentionUserDto> mentions = tourismProjectTravelNotesWriteDto.getMentions();
|
|
|
+ List<TourTravelNotesMentionUserDto> mentionsUserIdList = mentions.stream().filter(item -> item.getUserId() != null).collect(Collectors.toList());
|
|
|
+ List<TourShortUser> fouceEachFriendsByName = tourFansService.getFouceEachFriendsByName(userId, "");
|
|
|
+ List<TourShortUser> fouceEachFriedsUserIdList = fouceEachFriendsByName.stream().filter(i -> i.getUserId() != null).collect(Collectors.toList());
|
|
|
+
|
|
|
+ Set<Long> collect = mentionsUserIdList.stream().map(TourTravelNotesMentionUserDto::getUserId).collect(Collectors.toSet());
|
|
|
+ Set<Long> collect1 = fouceEachFriedsUserIdList.stream().map(TourShortUser::getUserId).collect(Collectors.toSet());
|
|
|
+ if (!(collect1).containsAll(collect)) {
|
|
|
+ return ResponseResult.error(ErrorCodeEnum.MENTION_USER_ERROR, "提及的用户与本人不符合互关的状态");
|
|
|
}
|
|
|
- }else{
|
|
|
- tourismProjectTravelNotesWriteSave.setTourismUrl(coverImageList.get(0).getContent());
|
|
|
}
|
|
|
|
|
|
- //判断是新增还是更新
|
|
|
- if(tourismProjectTravelNotesWrite == null){
|
|
|
- //草稿为下架状态
|
|
|
- tourismProjectTravelNotesWriteSave.setUnmountState(UnmountState.DELIST);
|
|
|
- tourismProjectTravelNotesWriteService.saveNew(tourismProjectTravelNotesWriteSave);
|
|
|
- }else {
|
|
|
- //草稿为下架状态
|
|
|
- tourismProjectTravelNotesWriteSave.setUnmountState(UnmountState.DELIST);
|
|
|
- tourismProjectTravelNotesWriteService.updateById(tourismProjectTravelNotesWriteSave);
|
|
|
- }
|
|
|
-
|
|
|
- //判断内容是否为空
|
|
|
- if(tourismProjectTravelNotesWriteDto.getTravelNotesContent() != null) {
|
|
|
- List<TourismTravelNotesContentWriteDto> travelNotesContentWriteList = tourismProjectTravelNotesWriteDto.getTravelNotesContent();
|
|
|
- List<TourismTravelNotesContentWrite> tourismTravelNotesContentWriteList = MyModelUtil.copyCollectionTo(travelNotesContentWriteList, TourismTravelNotesContentWrite.class);
|
|
|
- for (TourismTravelNotesContentWrite item : tourismTravelNotesContentWriteList) {
|
|
|
- item.setAssociationId(tourismProjectTravelNotesWriteSave.getId());
|
|
|
- item.setId(null);
|
|
|
+ //校验dto中的群聊是否为本人参与的群聊
|
|
|
+ if(tourismProjectTravelNotesWriteDto.getTourImGroupId() != null) {
|
|
|
+ List<TourShortImGroup> takePartImGroupListByName = tourImGroupService.getTakePartImGroupListByName(userId, "");
|
|
|
+ List<Long> takePartImGroupIdList = takePartImGroupListByName.stream().mapToLong(TourShortImGroup::getId).boxed().collect(Collectors.toList());
|
|
|
+ if (!takePartImGroupIdList.contains(tourismProjectTravelNotesWriteDto.getTourImGroupId())) {
|
|
|
+ return ResponseResult.error(ErrorCodeEnum.MENTION_GROUP_ERROR, "本人未参与到关联的群聊中");
|
|
|
}
|
|
|
- tourismTravelNotesContentWriteService.removeByAssociationId(tourismProjectTravelNotesWriteSave.getId());
|
|
|
- //查询关联数据的id,根据id进行更新数据表的数据
|
|
|
- tourismTravelNotesContentWriteService.saveNewBatch(tourismTravelNotesContentWriteList);
|
|
|
}
|
|
|
+
|
|
|
+ tourTravelNotesPublishService.saveDraft(tourismProjectTravelNotesWriteDto);
|
|
|
return ResponseResult.success();
|
|
|
}
|
|
|
|
|
@@ -147,22 +139,8 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
if (pageDto.getType() == null) {
|
|
|
return ResponseResult.success(null);
|
|
|
}
|
|
|
- Long userId = TokenData.takeFromRequest().getUserId();
|
|
|
- TourismProjectTravelNotesWrite tourismProjectTravelNotesWrite = new TourismProjectTravelNotesWrite();
|
|
|
- tourismProjectTravelNotesWrite.setCreateUserId(userId);
|
|
|
- tourismProjectTravelNotesWrite.setState(pageDto.getType());
|
|
|
- MyOrderParam myOrderParam = new MyOrderParam();
|
|
|
- myOrderParam.add(new MyOrderParam.OrderInfo("updateTime",false,null));
|
|
|
- String orderBy = MyOrderParam.buildOrderBy(myOrderParam, TourismProjectTravelNotesWrite.class);
|
|
|
- if(pageDto.getPageSize() != null && pageDto.getPageNum() != null){
|
|
|
- PageMethod.startPage(pageDto.getPageNum(), pageDto.getPageSize(), true);
|
|
|
- }
|
|
|
- //查询已发布状态的状态,则需要state为3并且上下架状态为上架
|
|
|
- if(pageDto.getType() == 3){
|
|
|
- tourismProjectTravelNotesWrite.setUnmountState(UnmountState.LISTING);
|
|
|
- }
|
|
|
- List<TourismProjectTravelNotesWrite> tourismProjectTravelNotesWriteList =
|
|
|
- tourismProjectTravelNotesWriteService.getTourismProjectTravelNotesWriteList(tourismProjectTravelNotesWrite, orderBy);
|
|
|
+
|
|
|
+ List<TourismProjectTravelNotesWrite> tourismProjectTravelNotesWriteList = tourTravelNotesPublishService.getDraftList(pageDto);
|
|
|
|
|
|
MyPageData<TourismProjectTravelNotesWriteCovertVo> tourismProjectTravelNotesWriteVoMyPageData = MyPageUtil.makeResponseData(tourismProjectTravelNotesWriteList, TourismProjectTravelNotesWriteCovertVo.class);
|
|
|
List<TourismProjectTravelNotesWriteCovertVo> dataList = tourismProjectTravelNotesWriteVoMyPageData.getDataList();
|
|
@@ -189,6 +167,27 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
}
|
|
|
TourismProjectTravelNotesWriteVo tourismProjectTravelNotesWriteVo = MyModelUtil.copyTo(tourismProjectTravelNotesWrite, TourismProjectTravelNotesWriteVo.class);
|
|
|
|
|
|
+ //填充图片
|
|
|
+ TourTravelNotesImg tourTravelNotesImg = new TourTravelNotesImg();
|
|
|
+ tourTravelNotesImg.setTravelNotesId(tourismProjectTravelNotesWrite.getId());
|
|
|
+ List<TourTravelNotesImg> tourTravelNotesImgList = tourTravelNotesImgService.getTourTravelNotesImgList(tourTravelNotesImg, "");
|
|
|
+ List<String> imgUrlList = tourTravelNotesImgList.stream().map(TourTravelNotesImg::getImgUrl).collect(Collectors.toList());
|
|
|
+ tourismProjectTravelNotesWriteVo.setImgUrls(imgUrlList);
|
|
|
+ //填充关联话题
|
|
|
+ TourTravelNotesTopicRelation tourTravelNotesTopicRelation = new TourTravelNotesTopicRelation();
|
|
|
+ tourTravelNotesTopicRelation.setTravelNotesId(tourismProjectTravelNotesWrite.getId());
|
|
|
+ List<TourTravelNotesTopicRelation> tourTravelNotesTopicRelationList =
|
|
|
+ tourTravelNotesTopicRelationService.getTourTravelNotesTopicRelationList(tourTravelNotesTopicRelation, "");
|
|
|
+ List<String> topicNameList = tourTravelNotesTopicRelationList.stream().map(TourTravelNotesTopicRelation::getTopicName).collect(Collectors.toList());
|
|
|
+ tourismProjectTravelNotesWriteVo.setTopics(topicNameList);
|
|
|
+ tourismProjectTravelNotesWriteVo.setTopicsList(BeanUtil.copyToList(tourTravelNotesTopicRelationList, NotesNameVo.class));
|
|
|
+ //填充提及的用户
|
|
|
+ TourTravelNotesMentionUser tourTravelNotesMentionUser = new TourTravelNotesMentionUser();
|
|
|
+ tourTravelNotesMentionUser.setTravelNotesId(tourismProjectTravelNotesWrite.getId());
|
|
|
+ List<TourTravelNotesMentionUser> tourTravelNotesMentionUserList = tourTravelNotesMentionUserService.getTourTravelNotesMentionUserList(tourTravelNotesMentionUser, "");
|
|
|
+ List<TourTravelNotesMentionUserVo> tourTravelNotesMentionUserVo = MyModelUtil.copyCollectionTo(tourTravelNotesMentionUserList, TourTravelNotesMentionUserVo.class);
|
|
|
+ tourismProjectTravelNotesWriteVo.setMentions(tourTravelNotesMentionUserVo);
|
|
|
+ //填充关联用户
|
|
|
return ResponseResult.success(tourismProjectTravelNotesWriteVo);
|
|
|
}
|
|
|
|
|
@@ -218,8 +217,7 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_FOUND);
|
|
|
}
|
|
|
}
|
|
|
- tourismProjectTravelNotesWriteService.remove(Long.valueOf(writeId));
|
|
|
- tourismTravelNotesContentWriteService.removeByAssociationId(Long.valueOf(writeId));
|
|
|
+ tourTravelNotesPublishService.removeByDraftId(writeId);
|
|
|
return ResponseResult.success();
|
|
|
}
|
|
|
|
|
@@ -232,92 +230,35 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
@PostMapping("/publishDraft")
|
|
|
@Transactional
|
|
|
public ResponseResult<Void> publishDraft(@RequestBody TourismProjectTravelNotesWriteToWebDto tourismProjectTravelNotesWriteDto) {
|
|
|
- String errorMessage = MyCommonUtil.getModelValidationError(tourismProjectTravelNotesWriteDto,UpdateGroup.class);
|
|
|
- if (errorMessage != null) {
|
|
|
- return ResponseResult.success(null);
|
|
|
- }
|
|
|
- TourismProjectTravelNotesWrite tourismProjectTravelNotesWrite =
|
|
|
- MyModelUtil.copyTo(tourismProjectTravelNotesWriteDto, TourismProjectTravelNotesWrite.class);
|
|
|
-
|
|
|
- //校验该游记是否为审核中和已发布状态
|
|
|
- TourismProjectTravelNotesWrite tourismProjectTravelNotesWriteVerify =
|
|
|
- tourismProjectTravelNotesWriteService.getById(tourismProjectTravelNotesWriteDto.getId());
|
|
|
-
|
|
|
- if(tourismProjectTravelNotesWriteVerify != null){
|
|
|
- if(tourismProjectTravelNotesWriteVerify.getState() .equals(AuditState.UNAUDITSTATE)) {
|
|
|
- return ResponseResult.error(ErrorCodeEnum.INVALID_STATUS_ARGUMENT, "该游记状态为:正在审核中,请撤销后进行操作");
|
|
|
- }else if(tourismProjectTravelNotesWriteVerify.getState() .equals(AuditState.SUCCEEDAUDIT)){
|
|
|
- return ResponseResult.error(ErrorCodeEnum.INVALID_STATUS_ARGUMENT, "该游记状态为:已发布成功,请下架后进行操作");
|
|
|
- }
|
|
|
- }
|
|
|
- //将从表中的数据进行过滤,筛选出cover为1的图片为封面图,第一段落为项目简述
|
|
|
- List<TourismTravelNotesContentWriteDto> travelNotesContent = tourismProjectTravelNotesWriteDto.getTravelNotesContent();
|
|
|
|
|
|
- //循环遍历查询内容是否超过5000长度
|
|
|
- for(TourismTravelNotesContentWriteDto i:travelNotesContent){
|
|
|
- if(StringUtils.isNotBlank(i.getContent()) && i.getContent().length()>5000)
|
|
|
- return ResponseResult.error(ErrorCodeEnum.CONTENT_OUT_LIMIT);
|
|
|
- }
|
|
|
- List<TourismTravelNotesContentWriteDto> coverImageList = travelNotesContent.stream().filter(item -> item.getType().equals("image") && item.getCover() != null && item.getCover() == 1).collect(Collectors.toList());
|
|
|
- List<TourismTravelNotesContentWriteDto> coverImageList1 = travelNotesContent.stream().filter(item -> item.getType().equals("image")).collect(Collectors.toList());
|
|
|
- if(CollectionUtils.isEmpty(coverImageList)){
|
|
|
- if(CollectionUtils.isEmpty(coverImageList1)){
|
|
|
- return ResponseResult.error(ErrorCodeEnum.NOT_COVER);
|
|
|
- }else {
|
|
|
- tourismProjectTravelNotesWrite.setTourismUrl(coverImageList1.get(0).getContent());
|
|
|
- }
|
|
|
- }else{
|
|
|
- tourismProjectTravelNotesWrite.setTourismUrl(coverImageList.get(0).getContent());
|
|
|
- }
|
|
|
- List<TourismTravelNotesContentWriteDto> sectionContent = travelNotesContent.stream().filter(item -> item.getType().equals("sectionContent")).collect(Collectors.toList());
|
|
|
- if(CollectionUtils.isNotEmpty(sectionContent)){
|
|
|
- tourismProjectTravelNotesWrite.setRemarks(sectionContent.get(0).getContent());
|
|
|
- }
|
|
|
-
|
|
|
- // 文案审核
|
|
|
- List<String> imageList = travelNotesContent.stream().filter(e -> e.getType().equals("image")).map(TourismTravelNotesContentWriteDto::getContent).collect(Collectors.toList());
|
|
|
- imageList.add(tourismProjectTravelNotesWrite.getTravelNotesBanner());
|
|
|
- Boolean imageResult = huaweiCloudModerationService.runImageModeration(imageList);
|
|
|
- // 图片审核
|
|
|
- List<String> titleList = travelNotesContent.stream().filter(e -> e.getType().equals("sectionTitle")).map(TourismTravelNotesContentWriteDto::getContent).collect(Collectors.toList());
|
|
|
- List<String> contentList = travelNotesContent.stream().filter(e -> e.getType().equals("sectionContent")).map(TourismTravelNotesContentWriteDto::getContent).collect(Collectors.toList());
|
|
|
- titleList.addAll(contentList);
|
|
|
- Boolean textResult = huaweiCloudModerationService.runTextModeration(titleList);
|
|
|
- String auditReson = "";
|
|
|
- if(imageResult && textResult){
|
|
|
- tourismProjectTravelNotesWrite.setAutoAuditStatus(1);
|
|
|
- auditReson = "图文审核通过";
|
|
|
- }else {
|
|
|
- tourismProjectTravelNotesWrite.setAutoAuditStatus(2);
|
|
|
- if(!imageResult){
|
|
|
- auditReson = "图片审核未通过:可能设计暴恐、色情、违禁、辱骂等内容;";
|
|
|
- }
|
|
|
- if(!textResult){
|
|
|
- auditReson += "文案审核未通过:可能设计暴恐、色情、违禁、辱骂等内容;";
|
|
|
+ Long userId = TokenData.takeFromRequest().getUserId();
|
|
|
+ //先校验提及的用户id是否符合互关的状态
|
|
|
+ if(CollectionUtils.isNotEmpty(tourismProjectTravelNotesWriteDto.getMentions())) {
|
|
|
+ List<TourTravelNotesMentionUserDto> mentions = tourismProjectTravelNotesWriteDto.getMentions();
|
|
|
+ Set<TourTravelNotesMentionUserDto> mentionsUserIdList = mentions.stream().filter(item -> item.getUserId() != null).collect(Collectors.toSet());
|
|
|
+ List<TourShortUser> fouceEachFriendsByName = tourFansService.getFouceEachFriendsByName(userId, "");
|
|
|
+ List<TourShortUser> fouceEachFriedsUserIdList = fouceEachFriendsByName.stream().filter(i -> i.getUserId() != null).collect(Collectors.toList());
|
|
|
+
|
|
|
+ Map<Long, String> fouceEachFriendsUserIdMap = fouceEachFriedsUserIdList.stream().collect(Collectors.toMap(TourShortUser::getUserId, TourShortUser::getShowName));
|
|
|
+ Map<Long, String> mentionsUserIdMap = mentionsUserIdList.stream().collect(Collectors.toMap(TourTravelNotesMentionUserDto::getUserId, TourTravelNotesMentionUserDto::getUserName));
|
|
|
+
|
|
|
+ // 遍历 mentionsUserIdMap,检查其所有键值对是否都在 fouceEachFriendsUserIdMap 中
|
|
|
+ for (Map.Entry<Long, String> entry : mentionsUserIdMap.entrySet()) {
|
|
|
+ // 如果 fouceEachFriendsUserIdMap 不包含该 userId 或者值不相等,则返回 false
|
|
|
+ if (!fouceEachFriendsUserIdMap.containsKey(entry.getKey()) || !fouceEachFriendsUserIdMap.get(entry.getKey()).equals(entry.getValue())) {
|
|
|
+ return ResponseResult.error(ErrorCodeEnum.MENTION_USER_ERROR, "提及的用户与本人不符合互关的状态");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- tourismProjectTravelNotesWrite.setAutoRejectReason(auditReson);
|
|
|
-
|
|
|
- tourismProjectTravelNotesWrite.setState(AuditState.UNAUDITSTATE);
|
|
|
- //对dto的id进行判断,如果数据表中查不到该id,则为新增;否则为修改
|
|
|
- TourismProjectTravelNotesWrite tourismProjectTravelNotesWrite1 =
|
|
|
- tourismProjectTravelNotesWriteService.getById(tourismProjectTravelNotesWriteDto.getId());
|
|
|
- if(tourismProjectTravelNotesWrite1 == null) {
|
|
|
- tourismProjectTravelNotesWriteService.saveNew(tourismProjectTravelNotesWrite);
|
|
|
- }else{
|
|
|
- if(!tourismProjectTravelNotesWrite1.getCreateUserId().equals(TokenData.takeFromRequest().getUserId())){
|
|
|
- return ResponseResult.error(ErrorCodeEnum.DATA_SAVE_FAILED);
|
|
|
+ //校验dto中的群聊是否为本人参与的群聊
|
|
|
+ if(tourismProjectTravelNotesWriteDto.getTourImGroupId() != null) {
|
|
|
+ List<TourShortImGroup> takePartImGroupListByName = tourImGroupService.getTakePartImGroupListByName(userId, "");
|
|
|
+ List<Long> takePartImGroupIdList = takePartImGroupListByName.stream().mapToLong(TourShortImGroup::getId).boxed().collect(Collectors.toList());
|
|
|
+ if (!takePartImGroupIdList.contains(tourismProjectTravelNotesWriteDto.getTourImGroupId())) {
|
|
|
+ return ResponseResult.error(ErrorCodeEnum.MENTION_GROUP_ERROR, "本人未参与到关联的群聊中");
|
|
|
}
|
|
|
- tourismProjectTravelNotesWriteService.updateById(tourismProjectTravelNotesWrite);
|
|
|
- }
|
|
|
- tourismTravelNotesContentWriteService.removeByAssociationId(tourismProjectTravelNotesWriteDto.getId());
|
|
|
- List<TourismTravelNotesContentWrite> tourismTravelNotesContentWriteList =
|
|
|
- MyModelUtil.copyCollectionTo(tourismProjectTravelNotesWriteDto.getTravelNotesContent(), TourismTravelNotesContentWrite.class);
|
|
|
- for (TourismTravelNotesContentWrite item : tourismTravelNotesContentWriteList) {
|
|
|
- item.setAssociationId(tourismProjectTravelNotesWrite.getId());
|
|
|
- item.setId(null);
|
|
|
}
|
|
|
- tourismTravelNotesContentWriteService.saveNewBatch(tourismTravelNotesContentWriteList);
|
|
|
+ tourTravelNotesPublishService.publishDraft(tourismProjectTravelNotesWriteDto);
|
|
|
return ResponseResult.success();
|
|
|
}
|
|
|
|
|
@@ -485,6 +426,118 @@ public class WebSiteTourismTravelNotesPublishController {
|
|
|
return ResponseResult.success(newDirectoryInfoList);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据名称查询互关的好友信息
|
|
|
+ *
|
|
|
+ * @return 应答结果对象,包含查询结果集。
|
|
|
+ */
|
|
|
+ @OperationLog(type = SysOperationLogType.LIST)
|
|
|
+ @GetMapping("/getFouceEachFriendsByName")
|
|
|
+ public ResponseResult<List<TourShortUserVo>> getFouceEachFriendsByName(@Validated TourFourceEachFriendsDto tourFourceEachFriendsDto) {
|
|
|
+ //limit20
|
|
|
+ PageMethod.startPage(tourFourceEachFriendsDto.getPageNum(), tourFourceEachFriendsDto.getPageSize(), true);
|
|
|
+ Long userId = TokenData.takeFromRequest().getUserId();
|
|
|
+ List<TourShortUser> tourShortUserList = tourFansService.getFouceEachFriendsByName(userId, tourFourceEachFriendsDto.getName());
|
|
|
+ List<TourShortUserVo> tourShortUserVoList = MyModelUtil.copyCollectionTo(tourShortUserList, TourShortUserVo.class);
|
|
|
+ return ResponseResult.success(tourShortUserVoList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 模糊搜索话题列表
|
|
|
+ *
|
|
|
+ * @return 应答结果对象,包含查询结果集。
|
|
|
+ */
|
|
|
+ @OperationLog(type = SysOperationLogType.LIST)
|
|
|
+ @GetMapping("/getTopicListByName")
|
|
|
+ public ResponseResult<List<TourTravelNotesTopicVo>> getTopicListByName(@Validated TourTravelNotesTopicByNameDto tourTravelNotesTopicByNameDto) {
|
|
|
+ //limit20
|
|
|
+ PageMethod.startPage(tourTravelNotesTopicByNameDto.getPageNum(), tourTravelNotesTopicByNameDto.getPageSize(), true);
|
|
|
+ TourTravelNotesTopic tourTravelNotesTopic = new TourTravelNotesTopic();
|
|
|
+ tourTravelNotesTopic.setName(tourTravelNotesTopicByNameDto.getName());
|
|
|
+ MyOrderParam myOrderParam = new MyOrderParam();
|
|
|
+ String orderBy = MyOrderParam.buildOrderBy(myOrderParam, TourTravelNotesTopic.class);
|
|
|
+ myOrderParam.add(new MyOrderParam.OrderInfo("hotValue", false, null));
|
|
|
+ List<TourTravelNotesTopic> tourTravelNotesTopicList = tourTravelNotesTopicService.getTourTravelNotesTopicList(tourTravelNotesTopic,orderBy);
|
|
|
+ List<TourTravelNotesTopicVo> tourTravelNotesTopicVoList = MyModelUtil.copyCollectionTo(tourTravelNotesTopicList, TourTravelNotesTopicVo.class);
|
|
|
+ //专题ids
|
|
|
+ List<Long> topicIdList = tourTravelNotesTopicVoList.stream().map(TourTravelNotesTopicVo::getId).map(Long::valueOf).collect(Collectors.toList());
|
|
|
+ Map<Long, Integer> viewCountListTopicByName;
|
|
|
+ if(!topicIdList.isEmpty()){
|
|
|
+ viewCountListTopicByName= tourTravelNotesTopicService.getViewCountListTopicByName(topicIdList);
|
|
|
+ } else {
|
|
|
+ viewCountListTopicByName = new HashMap<Long, Integer>();
|
|
|
+ }
|
|
|
+
|
|
|
+ //放入浏览量的数值
|
|
|
+ if(!ObjectUtil.isEmpty(viewCountListTopicByName)){
|
|
|
+ for (TourTravelNotesTopicVo item : tourTravelNotesTopicVoList) {
|
|
|
+ item.setViewCount(viewCountListTopicByName.get(Long.valueOf(item.getId())));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(tourTravelNotesTopicByNameDto.getName()!=null&&!tourTravelNotesTopicByNameDto.getName().isEmpty()){
|
|
|
+ List<TourTravelNotesTopicVo> collect = tourTravelNotesTopicVoList.stream().filter(item -> item.getName().equals(tourTravelNotesTopicByNameDto.getName())).collect(Collectors.toList());
|
|
|
+ if(collect.isEmpty()){
|
|
|
+ TourTravelNotesTopicVo tourTravelNotesTopicVo = new TourTravelNotesTopicVo();
|
|
|
+ tourTravelNotesTopicVo.setName(tourTravelNotesTopicByNameDto.getName());
|
|
|
+ tourTravelNotesTopicVoList.add(0,tourTravelNotesTopicVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return ResponseResult.success(tourTravelNotesTopicVoList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 模糊搜索自己参与的群聊列表
|
|
|
+ *
|
|
|
+ * @return 应答结果对象,包含查询结果集。
|
|
|
+ */
|
|
|
+ @OperationLog(type = SysOperationLogType.LIST)
|
|
|
+ @GetMapping("/getTakePartImGroupListByName")
|
|
|
+ public ResponseResult<List<TourShortImGroupVo>> getTakePartImGroupListByName(@Validated TourTakePartImGroupDto tourTakePartImGroupDto) {
|
|
|
+ //limit20
|
|
|
+ PageMethod.startPage(tourTakePartImGroupDto.getPageNum(), tourTakePartImGroupDto.getPageSize(), true);
|
|
|
+ Long localUserId = TokenData.takeFromRequest().getUserId();
|
|
|
+ List<TourShortImGroup> takePartImGroupListByName = tourImGroupService.getTakePartImGroupListByName(localUserId,tourTakePartImGroupDto.getName());
|
|
|
+
|
|
|
+ //根据群聊id,填充每个群聊的人数以及每个群聊的头像
|
|
|
+ Set<Long> set = new HashSet();
|
|
|
+ set.addAll(takePartImGroupListByName.stream()
|
|
|
+ .filter(t -> t.getId() != null) // 过滤掉 id 为 null 的元素
|
|
|
+ .map(TourShortImGroup::getId) // 提取 id
|
|
|
+ .collect(Collectors.toSet()));
|
|
|
+
|
|
|
+ //查询群聊中有哪些群成员id
|
|
|
+ List<TourImMember> tourImMemberList = tourImMemberService.getInList("groupId", set);
|
|
|
+ // 根据群 ID 对群成员进行分组,并且每个群组最多取前 9 个成员
|
|
|
+ Map<Long, List<TourImMember>> groupedMembers = tourImMemberList.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ TourImMember::getGroupId,
|
|
|
+ Collectors.collectingAndThen(
|
|
|
+ Collectors.toList(),
|
|
|
+ members -> members.stream().limit(9).collect(Collectors.toList()) // 限制每个群组的成员为前 9 个
|
|
|
+ )
|
|
|
+ ));
|
|
|
+ // 提取 userId 并去重
|
|
|
+ Set<Long> uniqueUserIds = tourImMemberList.stream().map(TourImMember::getUserId).collect(Collectors.toSet()); // 使用 Set 自动去重
|
|
|
+ // 根据userId获取用户头像
|
|
|
+ List<TourUser> userIdList = tourUserService.getInList("userId", uniqueUserIds);
|
|
|
+ // 使用 Stream 提取 userId 和 headImageUrl,生成 Map
|
|
|
+ Map<Long, String> userHeadImageMap = userIdList.stream()
|
|
|
+ .collect(Collectors.toMap(TourUser::getUserId, TourUser::getHeadImageUrl));
|
|
|
+ //根据群成员id来查询群成员的头像
|
|
|
+ for(TourShortImGroup i:takePartImGroupListByName){
|
|
|
+ i.setCount(tourImMemberList.stream().filter(e -> e.getGroupId().equals(i.getId())).collect(Collectors.toList()).size());
|
|
|
+ if(StringUtils.isBlank(i.getGroupAvatarUrl())){
|
|
|
+ //没有设置头像,则进行拼头像
|
|
|
+ List<TourImMember> tourImMembers = groupedMembers.get(i.getId());
|
|
|
+ List<String> avatarUrls = tourImMembers.stream().map(TourImMember::getUserId).map(userId -> userHeadImageMap.get(userId)).collect(Collectors.toList());
|
|
|
+ i.setMemberHeadImg(avatarUrls);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TourShortImGroupVo> tourShortImGroupVo = MyModelUtil.copyCollectionTo(takePartImGroupListByName, TourShortImGroupVo.class);
|
|
|
+ return ResponseResult.success(tourShortImGroupVo);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|