Bladeren bron

[fix]
游记列表增加可见范围字段

chenchen 1 maand geleden
bovenliggende
commit
768920192a

+ 0 - 1
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/BasicToWebController.java

@@ -6,7 +6,6 @@ import com.tourism.common.core.object.MyPageData;
 import com.tourism.common.core.object.ResponseResult;
 import com.tourism.common.core.util.MyCommonUtil;
 import com.tourism.common.core.util.MyPageUtil;
-import com.tourism.common.core.validator.AddGroup;
 import com.tourism.common.core.validator.UpdateGroup;
 import com.tourism.common.log.annotation.OperationLog;
 import com.tourism.common.log.model.constant.SysOperationLogType;

+ 10 - 9
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/WebSiteTourismTravelNotesPublishController.java

@@ -117,13 +117,6 @@ public class WebSiteTourismTravelNotesPublishController {
                 return ResponseResult.error(ErrorCodeEnum.MENTION_GROUP_ERROR, "本人未参与到关联的群聊中");
             }
         }
-
-        //循环遍历查询内容是否超过5000长度
-        List<TourismTravelNotesContentWriteDto> travelNotesContent = tourismProjectTravelNotesWriteDto.getTravelNotesContent();
-        for (TourismTravelNotesContentWriteDto i : travelNotesContent) {
-            if (StringUtils.isNotBlank(i.getContent()) && i.getContent().length() > 5000)
-                return ResponseResult.error(ErrorCodeEnum.CONTENT_OUT_LIMIT);
-        }
         
         tourTravelNotesPublishService.saveDraft(tourismProjectTravelNotesWriteDto);
         return ResponseResult.success();
@@ -239,8 +232,16 @@ public class WebSiteTourismTravelNotesPublishController {
             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());
-            if (!(fouceEachFriedsUserIdList).containsAll(mentionsUserIdList)) {
-                return ResponseResult.error(ErrorCodeEnum.MENTION_USER_ERROR, "提及的用户与本人不符合互关的状态");
+
+            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, "提及的用户与本人不符合互关的状态");
+                }
             }
         }
         //校验dto中的群聊是否为本人参与的群聊

+ 8 - 2
application-webadmin/src/main/java/com/tourism/webadmin/app/website/dto/TourismProjectTravelNotesWriteToWebDto.java

@@ -3,6 +3,7 @@ package com.tourism.webadmin.app.website.dto;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.tourism.common.core.validator.ConstDictRef;
 import com.tourism.common.core.validator.UpdateGroup;
+import com.tourism.webadmin.back.dto.TourTourismProjectTravelNotesWriteContentDto;
 import com.tourism.webadmin.back.dto.TourTravelNotesMentionUserDto;
 import com.tourism.webadmin.back.dto.TourismTravelNotesContentWriteDto;
 import com.tourism.webadmin.back.model.constant.*;
@@ -217,8 +218,7 @@ public class TourismProjectTravelNotesWriteToWebDto {
      * 游记内容。
      */
     @Schema(description = "游记内容。")
-//    @NotNull(message = "游记内容不能为空!", groups = {UpdateGroup.class})
-    private List<TourismTravelNotesContentWriteDto> travelNotesContent;
+    private TourTourismProjectTravelNotesWriteContentDto tourTourismProjectTravelNotesWriteContentDto;
 
     /**
      * 出行方式。
@@ -256,4 +256,10 @@ public class TourismProjectTravelNotesWriteToWebDto {
      */
     @Schema(description = "群聊id。")
     private Long tourImGroupId;
+
+    /**
+     * 可见范围(0.全部可见;1.仅自己可见)。
+     */
+    @Schema(description = "可见范围(0.全部可见;1.仅自己可见)。")
+    private Integer visibleRange;
 }

+ 3 - 4
application-webadmin/src/main/java/com/tourism/webadmin/app/website/service/impl/BasicToWebServiceImpl.java

@@ -14,10 +14,7 @@ import com.tourism.webadmin.app.website.dto.TourismProjectTravelNotesToWebDto;
 import com.tourism.webadmin.app.website.dto.TourismTravelNotesWriteDto;
 import com.tourism.webadmin.app.website.service.BasicToWebService;
 import com.tourism.webadmin.back.model.*;
-import com.tourism.webadmin.back.model.constant.AuditState;
-import com.tourism.webadmin.back.model.constant.Hotspot;
-import com.tourism.webadmin.back.model.constant.TravelWriteType;
-import com.tourism.webadmin.back.model.constant.UnmountState;
+import com.tourism.webadmin.back.model.constant.*;
 import com.tourism.webadmin.back.service.*;
 import com.tourism.webadmin.back.vo.*;
 import com.tourism.common.additional.config.ApplicationConfig;
@@ -138,6 +135,7 @@ public class BasicToWebServiceImpl implements BasicToWebService
         tourismProjectTravelNotesWriteFilter.setUnmountState(UnmountState.LISTING);
         tourismProjectTravelNotesWriteFilter.setIsHotspot(Hotspot.HOTSPOT_YES);
         tourismProjectTravelNotesWriteFilter.setState(AuditState.SUCCEEDAUDIT);
+        tourismProjectTravelNotesWriteFilter.setVisibleRange(VisibleRange.ALL);
 //        TourTourismProjectTravelNotes tourTourismProjectTravelNotesFilter = new TourTourismProjectTravelNotes();
 //        tourTourismProjectTravelNotesFilter.setEnable(1);
 //        tourTourismProjectTravelNotesFilter.setIsHotspot(1);
@@ -168,6 +166,7 @@ public class BasicToWebServiceImpl implements BasicToWebService
         String orderBy = MyOrderParam.buildOrderBy(myOrderParam, TourismProjectTravelNotesWrite.class);
 
         TourismProjectTravelNotesWrite tourismProjectTravelNotesWriteFilter = new TourismProjectTravelNotesWrite();
+        tourismProjectTravelNotesWriteFilter.setVisibleRange(VisibleRange.ALL);
 //        TourTourismProjectTravelNotes tourTourismProjectTravelNotes = new TourTourismProjectTravelNotes();
 
         if(dto.getTravelWriteType() != null){

+ 42 - 49
application-webadmin/src/main/java/com/tourism/webadmin/app/website/service/impl/TourTravelNotesPublishServiceImpl.java

@@ -12,6 +12,7 @@ import com.tourism.common.core.validator.UpdateGroup;
 import com.tourism.webadmin.app.website.dto.TourismProjectTravelNotesWriteDetailPageDto;
 import com.tourism.webadmin.app.website.dto.TourismProjectTravelNotesWriteToWebDto;
 import com.tourism.webadmin.app.website.service.TourTravelNotesPublishService;
+import com.tourism.webadmin.back.dto.TourTourismProjectTravelNotesWriteContentDto;
 import com.tourism.webadmin.back.dto.TourismTravelNotesContentWriteDto;
 import com.tourism.webadmin.back.model.*;
 import com.tourism.webadmin.back.model.constant.AuditState;
@@ -44,6 +45,8 @@ public class TourTravelNotesPublishServiceImpl implements TourTravelNotesPublish
     private HuaweiCloudModerationService huaweiCloudModerationService;
     @Autowired
     private TourTravelNotesImgService tourTravelNotesImgService;
+    @Autowired
+    private TourTourismProjectTravelNotesWriteContentService tourTourismProjectTravelNotesWriteContentService;
 
 
     @Override
@@ -137,16 +140,16 @@ public class TourTravelNotesPublishServiceImpl implements TourTravelNotesPublish
         tourTravelNotesImgService.saveNewBatch(tourTravelNotesImgList);
 
         //判断内容是否为空
-        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);
-            }
+        if (tourismProjectTravelNotesWriteDto.getTourTourismProjectTravelNotesWriteContentDto() != null) {
+            TourTourismProjectTravelNotesWriteContentDto tourTourismProjectTravelNotesWriteContentDto = 
+                    tourismProjectTravelNotesWriteDto.getTourTourismProjectTravelNotesWriteContentDto();
+            TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent =
+                    MyModelUtil.copyTo(tourTourismProjectTravelNotesWriteContentDto, TourTourismProjectTravelNotesWriteContent.class);
+                tourTourismProjectTravelNotesWriteContent.setAssociationId(tourismProjectTravelNotesWriteSave.getId());
+            tourTourismProjectTravelNotesWriteContent.setId(null);
             tourismTravelNotesContentWriteService.removeByAssociationId(tourismProjectTravelNotesWriteSave.getId());
             //查询关联数据的id,根据id进行更新数据表的数据
-            tourismTravelNotesContentWriteService.saveNewBatch(tourismTravelNotesContentWriteList);
+            tourTourismProjectTravelNotesWriteContentService.saveNew(tourTourismProjectTravelNotesWriteContent);
         }
 
 
@@ -211,57 +214,48 @@ public class TourTravelNotesPublishServiceImpl implements TourTravelNotesPublish
                 tourismProjectTravelNotesWriteService.getById(tourismProjectTravelNotesWriteDto.getId());
 
         if(tourismProjectTravelNotesWriteVerify != null){
-            if(tourismProjectTravelNotesWriteVerify.getState() .equals(AuditState.UNAUDITSTATE)) {
+            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);
-        }
 
         //判断imgUrls是否为空,不为空的话,则把第一张图作为列表图
         if (CollectionUtils.isNotEmpty(tourismProjectTravelNotesWriteDto.getImgUrls())) {
             tourismProjectTravelNotesWrite.setTourismUrl(tourismProjectTravelNotesWriteDto.getImgUrls().get(0));
         }
 
-        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());
+        // 图片审核
+        List<String> imageList = tourismProjectTravelNotesWriteDto.getImgUrls();
         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 += "文案审核未通过:可能设计暴恐、色情、违禁、辱骂等内容;";
+        // 文案审核
+        List<String> titleList = new ArrayList<>();
+
+        //提取出从表内容
+        TourTourismProjectTravelNotesWriteContentDto tourTourismProjectTravelNotesWriteContentDto =
+                tourismProjectTravelNotesWriteDto.getTourTourismProjectTravelNotesWriteContentDto();
+        if(tourTourismProjectTravelNotesWriteContentDto != null && StringUtils.isNotBlank(tourTourismProjectTravelNotesWriteContentDto.getContent())) {
+            titleList.add(tourTourismProjectTravelNotesWriteContentDto.getContent());
+            Boolean textResult = huaweiCloudModerationService.runTextModeration(titleList);
+            String auditReson = "";
+            if (imageResult && textResult) {
+                tourismProjectTravelNotesWrite.setAutoAuditStatus(1);
+                auditReson = "图文审核通过";
+            } else {
+                tourismProjectTravelNotesWrite.setAutoAuditStatus(2);
+                if (!imageResult) {
+                    auditReson = "图片审核未通过:可能设计暴恐、色情、违禁、辱骂等内容;";
+                }
+                if (!textResult) {
+                    auditReson += "文案审核未通过:可能设计暴恐、色情、违禁、辱骂等内容;";
+                }
             }
+            tourismProjectTravelNotesWrite.setAutoRejectReason(auditReson);
         }
-        tourismProjectTravelNotesWrite.setAutoRejectReason(auditReson);
 
         tourismProjectTravelNotesWrite.setState(AuditState.UNAUDITSTATE);
-
         List<TourTravelNotesTopicRelation> tourTravelNotesTopicRelationList = new ArrayList<>();
         List<TourTravelNotesImg> tourTravelNotesImgList = new ArrayList<>();
 
@@ -343,13 +337,12 @@ public class TourTravelNotesPublishServiceImpl implements TourTravelNotesPublish
         tourTravelNotesImgService.saveNewBatch(tourTravelNotesImgList);
 
         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);
+
+        TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent =
+                MyModelUtil.copyTo(tourismProjectTravelNotesWriteDto.getTourTourismProjectTravelNotesWriteContentDto(), TourTourismProjectTravelNotesWriteContent.class);
+        tourTourismProjectTravelNotesWriteContent.setAssociationId(tourismProjectTravelNotesWrite.getId());
+        tourTourismProjectTravelNotesWriteContent.setId(null);
+        tourTourismProjectTravelNotesWriteContentService.saveNew(tourTourismProjectTravelNotesWriteContent);
 
         return ResponseResult.success();
     }

+ 8 - 2
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourismProjectTravelNotesWriteMapper.xml

@@ -33,6 +33,7 @@
         <result column="travel_mode" jdbcType="TINYINT" property="travelMode"/>
         <result column="travel_number" jdbcType="VARCHAR" property="travelNumber"/>
         <result column="tour_im_group_id" jdbcType="BIGINT" property="tourImGroupId"/>
+        <result column="visible_range" jdbcType="BIGINT" property="visibleRange"/>
     </resultMap>
 
     <insert id="insertList">
@@ -67,7 +68,8 @@
             auto_reject_reason,
             travel_mode,
             travel_number,
-            tour_im_group_id)
+            tour_im_group_id,
+            visible_range)
         VALUES
         <foreach collection="list" index="index" item="item" separator="," >
             (#{item.id},
@@ -100,7 +102,8 @@
             #{item.autoRejectReason},
             #{item.travelMode},
             #{item.travelNumber},
-            #{item.tourImGroupId})
+            #{item.tourImGroupId},
+            #{item.visibleRange})
         </foreach>
     </insert>
 
@@ -161,6 +164,9 @@
             <if test="tourismProjectTravelNotesWriteFilter.isOriginal != null">
                 AND tour_tourism_project_travel_notes_writer.is_original = #{tourismProjectTravelNotesWriteFilter.isOriginal}
             </if>
+            <if test="tourismProjectTravelNotesWriteFilter.visibleRange != null">
+                AND tour_tourism_project_travel_notes_writer.visible_range = #{tourismProjectTravelNotesWriteFilter.visibleRange}
+            </if>
             <if test="tourismProjectTravelNotesWriteFilter.endPlace != null and tourismProjectTravelNotesWriteFilter.endPlace != ''">
                 AND tour_tourism_project_travel_notes_writer.end_place = #{tourismProjectTravelNotesWriteFilter.endPlace}
             </if>

+ 6 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourismProjectTravelNotesWriteDto.java

@@ -241,4 +241,10 @@ public class TourismProjectTravelNotesWriteDto {
     @Schema(description = "提及的话题。")
     private String tourTravelNotesTopicRelationName;
 
+    /**
+     * 可见范围(0.全部可见;1.仅自己可见)。
+     */
+    @Schema(description = "可见范围(0.全部可见;1.仅自己可见)。")
+    private Integer visibleRange;
+
 }

+ 15 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourismProjectTravelNotesWrite.java

@@ -303,4 +303,19 @@ public class TourismProjectTravelNotesWrite extends BaseModel {
             slaveIdField = "associationId")
     @TableField(exist = false)
     private TourTourismProjectTravelNotesWriteContent tourTourismProjectTravelNotesWriteContent;
+
+    /**
+     * 可见范围。
+     */
+    @TableField(value = "visible_range")
+    private Integer visibleRange;
+
+    /**
+     * 可见范围。
+     */
+    @RelationConstDict(
+            masterIdField = "visibleRange",
+            constantDictClass = VisibleRange.class)
+    @TableField(exist = false)
+    private Integer visibleRangeDictMap;
 }

+ 44 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/constant/VisibleRange.java

@@ -0,0 +1,44 @@
+package com.tourism.webadmin.back.model.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 是否常量字典对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public final class VisibleRange {
+
+    /**
+     * 全部可见。
+     */
+    public static final int ALL = 0;
+    /**
+     * 仅自己可见。
+     */
+    public static final int ONLY_ME = 1;
+
+    private static final Map<Object, String> DICT_MAP = new HashMap<>(2);
+    static {
+        DICT_MAP.put(ALL, "全部可见");
+        DICT_MAP.put(ONLY_ME, "仅自己可见");
+    }
+
+    /**
+     * 判断参数是否为当前常量字典的合法值。
+     *
+     * @param value 待验证的参数值。
+     * @return 合法返回true,否则false。
+     */
+    public static boolean isValid(Integer value) {
+        return value != null && DICT_MAP.containsKey(value);
+    }
+
+    /**
+     * 私有构造函数,明确标识该常量类的作用。
+     */
+    private VisibleRange() {
+    }
+}

+ 12 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourismProjectTravelNotesWriteVo.java

@@ -285,4 +285,16 @@ public class TourismProjectTravelNotesWriteVo extends BaseVo {
      */
     @Schema(description = "id 的一对一关联数据对象,数据对应类型为TourTourismProjectTravelNotesWriteContentVo")
     private Map<String, Object> tourTourismProjectTravelNotesWriteContent;
+
+    /**
+     * 可见范围(0.全部可见;1.仅自己可见)。
+     */
+    @Schema(description = "可见范围(0.全部可见;1.仅自己可见)。")
+    private Integer visibleRange;
+
+    /**
+     * visibleRange 全局字典关联数据。
+     */
+    @Schema(description = "visibleRange 全局字典关联数据")
+    private Map<String, Object> visibleRangeDictMap;
 }