igl 1 gadu atpakaļ
vecāks
revīzija
6820d1fe6e
49 mainītis faili ar 2766 papildinājumiem un 25 dzēšanām
  1. 5 0
      vehicle-api/pom.xml
  2. 23 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/ActionType.java
  3. 24 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/DynamicContentType.java
  4. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/DynamicStatusType.java
  5. 25 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/DynamicType.java
  6. 25 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/ExamineType.java
  7. 33 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/RecordType.java
  8. 101 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicCommentDTO.java
  9. 104 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicContentDTO.java
  10. 41 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicEvaluateRecordDTO.java
  11. 55 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicResourceDTO.java
  12. 26 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderOperateHistoryDTO.java
  13. 46 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicCommentParam.java
  14. 47 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicContentParam.java
  15. 44 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicEvaluateRecordParam.java
  16. 35 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicResourceParam.java
  17. 28 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditShieldDynamicParam.java
  18. 29 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ExamineDynamicParam.java
  19. 48 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryAdminDynamicParam.java
  20. 33 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryDynamicCommentParam.java
  21. 31 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryDynamicContentParam.java
  22. 70 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/DynamicCommentService.java
  23. 127 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/DynamicContentService.java
  24. 21 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/DynamicEvaluateRecordService.java
  25. 27 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/OmsOrderOperateHistoryService.java
  26. 5 0
      vehicle-server/pom.xml
  27. 40 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/OmsOrderOperateHistoryCopier.java
  28. 44 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicCommentMapper.java
  29. 61 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicContentMapper.java
  30. 21 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicEvaluateRecordMapper.java
  31. 29 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicResourceMapper.java
  32. 18 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderOperateHistoryMapper.java
  33. 83 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicComment.java
  34. 85 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicContent.java
  35. 54 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicEvaluateRecord.java
  36. 49 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicResource.java
  37. 10 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrderOperateHistory.java
  38. 70 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicCommentService.java
  39. 127 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicContentService.java
  40. 21 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicEvaluateRecordService.java
  41. 19 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicResourceService.java
  42. 251 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicCommentServiceImpl.java
  43. 450 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicContentServiceImpl.java
  44. 126 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicEvaluateRecordServiceImpl.java
  45. 49 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicResourceServiceImpl.java
  46. 6 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HelpCategoryServiceImpl.java
  47. 7 5
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HelpServiceImpl.java
  48. 45 14
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderOperateHistoryServiceImpl.java
  49. 16 1
      vehicle-server/src/main/resources/mapper/OmsOrderOperateHistoryMapper.xml

+ 5 - 0
vehicle-api/pom.xml

@@ -31,5 +31,10 @@
             <artifactId>framework-common</artifactId>
             <version>${framework-common.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-annotation</artifactId>
+            <version>3.4.2</version>
+        </dependency>
     </dependencies>
 </project>

+ 23 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/ActionType.java

@@ -0,0 +1,23 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 用户动态动作类型
+ * @ClassName: ActionType
+ * @Author: ygl
+ * @Date: 2023/2/26 20:03
+ * @Version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum ActionType {
+
+    ADD(1, "点"),
+    CANCEL(2, "取消");
+
+    private Integer value;
+
+    private String desc;
+}

+ 24 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/DynamicContentType.java

@@ -0,0 +1,24 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 动态类型
+ * @ClassName: DynamicType
+ * @Author: ygl
+ * @Date: 2023/2/25 20:52
+ * @Version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum DynamicContentType {
+
+    PURE_TEXT(1, "纯文本"),
+    PHOTO(2, "照片"),
+    VIDEO(3, "视频");
+
+    private Integer value;
+
+    private String desc;
+}

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/DynamicStatusType.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 动态状态类型
+ * @ClassName: DynamicStatusType
+ * @Author: ygl
+ * @Date: 2023/2/26 18:29
+ * @Version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum DynamicStatusType {
+
+    GOOD(1, "点赞"),
+    BAD(2, "踩");
+
+    private Integer value;
+
+    private String desc;
+
+    public static String getDesc(Integer value) {
+        for (DynamicStatusType type : DynamicStatusType.values()) {
+            if (type.getValue().equals(value)) {
+                return type.getDesc();
+            }
+        }
+        return null;
+    }
+}

+ 25 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/DynamicType.java

@@ -0,0 +1,25 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 动态查询类型
+ * @ClassName: QueryDynamicType
+ * @Author: ygl
+ * @Date: 2023/08/08 15:47
+ * @Version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum DynamicType {
+
+    //ATTENTION(1, "关注"),
+    LATEST(2, "最新"),
+    HOTTEST(3, "最热"),
+    DISCOVER(4, "发现");
+
+    private Integer value;
+
+    private String desc;
+}

+ 25 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/ExamineType.java

@@ -0,0 +1,25 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: igl
+ * @date: 2023/8/17 19:58
+ */
+@Getter
+@AllArgsConstructor
+public enum ExamineType {
+
+  PASS(0, "通过"),
+  REFUSE(1, "拒绝"),
+  ;
+
+  @EnumValue
+  @JsonValue
+  private Integer value;
+
+  private String desc;
+}

+ 33 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/RecordType.java

@@ -0,0 +1,33 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 回复类型
+ * @ClassName: RecordType
+ * @Author: ygl
+ * @Date: 2023/2/26 18:32
+ * @Version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum RecordType {
+
+    DYNAMIC(1, "动态"),
+    COMMENT(2, "评论"),
+    USER(3, "用户");
+
+    private Integer value;
+
+    private String desc;
+
+    public static RecordType getRecordTypeByValue(Integer value){
+        for(RecordType recordType : RecordType.values()){
+            if(recordType.getValue() == value){
+                return recordType;
+            }
+        }
+        return null;
+    }
+}

+ 101 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicCommentDTO.java

@@ -0,0 +1,101 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 动态评论视图对象
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Data
+public class DynamicCommentDTO implements Serializable {
+
+    private static final long serialVersionUID = 1005652278773682277L;
+
+    /**
+     * 唯一标识
+     */
+    private Long id;
+
+    /**
+     * 动态标识
+     */
+    private Long dynamicId;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 父级评论(0表示为根评论)
+     */
+    private Long parentId;
+
+    /**
+     * 评论内容
+     */
+    private String content;
+
+    /**
+     * 评论数
+     */
+    private Long commentNum;
+
+    /**
+     * 点赞数
+     */
+    private Long goodNum;
+
+    /**
+     * 差评数
+     */
+    private Long badNum;
+
+    /**
+     * 状态:0-正常;1-屏蔽
+     */
+    private Integer status;
+
+    /**
+     * 平台状态:0-正常;1-屏蔽
+     */
+    private Integer platformStatus;
+
+    /**
+     * 平台状态:0-待审核;1-已审核
+     */
+    private Integer examineStatus;
+
+    /**
+     * 审核结果:0-未违规;1-疑似违规;2-违规
+     */
+    private Integer examineResult;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 动态资源
+     */
+    List<DynamicResourceDTO> resourceVos;
+
+    /**
+     * 用户信息
+     */
+    UserDTO userDTO;
+}

+ 104 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicContentDTO.java

@@ -0,0 +1,104 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 动态信息视图对象
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.service.dto
+ * @NAME: DynamicContentDTO
+ * @USER: igl
+ * @DATE: 2023/8/8 14:50
+ */
+@Data
+@JsonIgnoreProperties(value = {"handler"})
+public class DynamicContentDTO implements Serializable {
+
+  private static final long serialVersionUID = -2576747290177271544L;
+
+
+  /**
+   * 唯一标识
+   */
+  private Long id;
+
+  /**
+   * 用户标识
+   */
+  private Long userId;
+
+  /**
+   * 动态类型:1-纯文字;2-图片;3-视频
+   */
+  private Integer type;
+
+  /**
+   * 文字内容
+   */
+  private String textContent;
+
+  /**
+   * 评论数
+   */
+  private Long commentNum;
+
+  /**
+   * 点赞数
+   */
+  private Long goodNum;
+
+  /**
+   * 差评数
+   */
+  private Long badNum;
+
+  /**
+   * 用户查看动态状态:0-未点赞和未踩;1-已点赞;2-已踩
+   */
+  private Integer clickStatus;
+
+  /**
+   * 状态:0-正常;1-屏蔽
+   */
+  private Integer status;
+
+  /**
+   * 平台状态:0-正常;1-屏蔽
+   */
+  private Integer platformStatus;
+
+  /**
+   * 平台状态:0-待审核;1-已审核
+   */
+  private Integer examineStatus;
+
+  /**
+   * 审核结果:0-未违规;1-疑似违规;2-违规
+   */
+  private Integer examineResult;
+
+  /**
+   * 定位
+   */
+  private String location;
+
+  /**
+   * 创建时间
+   */
+  private Date createTime;
+
+  /**
+   * 动态资源
+   */
+  List<DynamicResourceDTO> resourceVos;
+
+  /**
+   * 用户信息
+   */
+  private UserDTO userDTO;
+}

+ 41 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicEvaluateRecordDTO.java

@@ -0,0 +1,41 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+/**
+ * 内容评价(点赞/踩)列视图对象
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Data
+public class DynamicEvaluateRecordDTO {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一标识
+     */
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 操作类型:1-点赞;2-踩
+     */
+    private Integer operaterType;
+
+    /**
+     * 内容类型:1-动态;2-评论/回复
+     */
+    private Integer contentType;
+
+    /**
+     * 内容标识
+     */
+    private Long contentId;
+
+}

+ 55 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/DynamicResourceDTO.java

@@ -0,0 +1,55 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 动态文件视图对象
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.service.dto
+ * @NAME: DynamicResourceDTO
+ * @USER: igl
+ * @DATE: 2023/8/8 14:53
+ */
+@Data
+@JsonIgnoreProperties(value = {"handler"})
+public class DynamicResourceDTO implements Serializable {
+
+  private static final long serialVersionUID = 2178904797700518635L;
+
+  /**
+   * 唯一标识
+   */
+  private Long id;
+
+  /**
+   * 动态标识
+   */
+  private Long dynamicId;
+
+  /**
+   * 文件标识
+   */
+  private String resourceKey;
+
+  /**
+   * 请求地址
+   */
+  private String imageUrlDTO;
+
+  /**
+   * 资源首帧
+   */
+  private String resourceFrame;
+
+  /**
+   * 请求地址
+   */
+  private String frameImageUrlDTO;
+
+  /**
+   * 显示顺序
+   */
+  private Long sort;
+}

+ 26 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderOperateHistoryDTO.java

@@ -0,0 +1,26 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class OmsOrderOperateHistoryDTO {
+
+    private Long id;
+
+    private Long orderId;
+
+    private Long userId;
+
+    private String operateMan;
+
+    /** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
+    private Long orderStatus;
+
+    private Integer flag;
+
+    private String note;
+
+    private Date createTime;
+}

+ 46 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicCommentParam.java

@@ -0,0 +1,46 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 新增动态
+ * @ClassName: AddContentDynamicCommentDTO
+ * @Author: ygl
+ * @Date: 2023/2/25 20:24
+ * @Version: 1.0
+ */
+@Data
+public class AddDynamicCommentParam implements Serializable {
+
+    private static final long serialVersionUID = -7143322965220930816L;
+
+    /**
+     * 动态标识
+     */
+    @NotNull(message = "动态标识不能为空")
+    private Long dynamicId;
+
+    /**
+     * 父级评论(0表示为根评论)
+     */
+    @NotNull(message = "父级标识不能为空")
+    private Long parentId;
+
+    /**
+     * 评论内容
+     */
+    @NotBlank(message = "评论内容不能为空")
+    @Length(max = 500, message = "评论字数不能超过500字")
+    private String content;
+
+    /**
+     * 状态:0-正常;1-屏蔽
+     */
+    @NotNull(message = "状态:0-正常;1-屏蔽不能为空")
+    private Integer status;
+}

+ 47 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicContentParam.java

@@ -0,0 +1,47 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.cloud.vehicle.api.constant.DynamicContentType;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 新增动态
+ * @ClassName: AddContentDynamicDTO
+ * @Author: ygl
+ * @Date: 2023/08/08 16:36
+ * @Version: 1.0
+ */
+@Data
+public class AddDynamicContentParam implements Serializable {
+
+    private static final long serialVersionUID = 8262952489829187605L;
+    /**
+     * 文字内容
+     */
+    @Length(max = 500, message = "动态字数不能超过500字")
+    private String textContent;
+    /**
+     * 状态:0-正常;1-屏蔽
+     */
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+    /**
+     * 动态类型:1-纯文字;2-图片;3-视频
+     */
+    @NotNull(message = "动态类型:1-纯文字;2-图片;3-视频")
+    private DynamicContentType type;
+    /**
+     * 动态资源
+     */
+    private List<AddDynamicResourceParam> list;
+    /**
+     * 定位
+     */
+    private String location;
+
+    private Long userId;
+}

+ 44 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicEvaluateRecordParam.java

@@ -0,0 +1,44 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.cloud.vehicle.api.constant.ActionType;
+import com.chelvc.cloud.vehicle.api.constant.DynamicStatusType;
+import com.chelvc.cloud.vehicle.api.constant.RecordType;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 动态点赞
+ * @ClassName: AddContentEvaluateRecordDTO
+ * @Author: ygl
+ * @Date: 2023/2/26 18:27
+ * @Version: 1.0
+ */
+@Data
+public class AddDynamicEvaluateRecordParam implements Serializable {
+
+    private static final long serialVersionUID = 7181980583910859865L;
+    /**
+     * 操作类型:1-点赞;2-踩
+     */
+    @NotNull(message = "操作类型:1-点赞;2-踩不能为空")
+    private DynamicStatusType dynamicStatusType;
+
+    /**
+     * 内容类型:1-动态;2-评论/回复
+     */
+    @NotNull(message = "内容类型:1-动态;2-评论/回复不能为空")
+    private RecordType recordType;
+
+    /**
+     * 点击类型:1-点赞/踩;2-取消赞/取消踩
+     */
+    @NotNull(message = "点击类型:1-点赞/踩;2-取消赞/取消踩")
+    private ActionType actionType;
+    /**
+     * 内容标识
+     */
+    @NotNull(message = "内容标识不能为空")
+    private Long contentId;
+}

+ 35 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddDynamicResourceParam.java

@@ -0,0 +1,35 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 新增资源
+ * @ClassName: AddContentDynamicResourceDTO
+ * @Author: ygl
+ * @Date: 2023/2/25 20:38
+ * @Version: 1.0
+ */
+@Data
+public class AddDynamicResourceParam implements Serializable {
+
+    private static final long serialVersionUID = 8052201507900179957L;
+    /**
+     * 文件标识
+     */
+    @NotNull(message = "文件标识不能为空")
+    private String resourceKey;
+
+    /**
+     * 资源首帧
+     */
+    private String resourceFrame;
+
+    /**
+     * 显示顺序
+     */
+    @NotNull(message = "显示顺序不能为空")
+    private Long sort;
+}

+ 28 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditShieldDynamicParam.java

@@ -0,0 +1,28 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author: igl
+ * @date: 2023/8/15 20:38
+ */
+@Data
+public class EditShieldDynamicParam implements Serializable {
+
+  private static final long serialVersionUID = -7550836384389807900L;
+
+  /**
+   * 主键标识
+   */
+  @NotNull(message = "主键标识不能为空")
+  private Long id;
+
+  /**
+   * 操作类型 0-正常;1-屏蔽
+   */
+  @NotNull(message = "操作类型不能为空")
+  private Integer platformStatus;
+}

+ 29 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ExamineDynamicParam.java

@@ -0,0 +1,29 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.cloud.vehicle.api.constant.ExamineType;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author: igl
+ * @date: 2023/8/15 20:38
+ */
+@Data
+public class ExamineDynamicParam implements Serializable {
+
+  private static final long serialVersionUID = -7550836384389807900L;
+
+  /**
+   * 主键标识
+   */
+  @NotNull(message = "主键标识不能为空")
+  private Long id;
+
+  /**
+   * 操作类型 0-通过;1-拒绝
+   */
+  @NotNull(message = "请选择审核状态")
+  private ExamineType examine;
+}

+ 48 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryAdminDynamicParam.java

@@ -0,0 +1,48 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 后台动态列表查询
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.params
+ * @NAME: QueryManagerContentDynamicParam
+ * @USER: igl
+ * @DATE: 2023/8/8 15:00
+ */
+@Data
+public class QueryAdminDynamicParam implements Serializable {
+
+  private static final long serialVersionUID = -8514033726485805559L;
+
+  /**
+   * 搜索关键字
+   */
+  private String keyWord;
+
+  /**
+   * 开始时间
+   */
+  private String startTime;
+
+  /**
+   * 结束时间
+   */
+  private String endTime;
+
+  /**
+   * 平台状态:0-正常;1-平台屏蔽
+   */
+  private Integer platformStatus;
+
+  /**
+   * 审核状态:0-待审核;1-已审核;
+   */
+  private Integer examineStatus;
+
+  /**
+   * 审核结果:0-未违规;1-疑似违规;2-违规
+   */
+  private Integer examineResult;
+}

+ 33 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryDynamicCommentParam.java

@@ -0,0 +1,33 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 查询评论列表
+ * @ClassName: QueryContentDynamicCommentDTO
+ * @Author: ygl
+ * @Date: 2023/2/26 16:48
+ * @Version: 1.0
+ */
+@Data
+public class QueryDynamicCommentParam {
+
+    /**
+     * 动态标识
+     */
+    @NotNull(message = "动态标识不能为空")
+    private Long dynamicId;
+
+    /**
+     * 父级评论(0表示为根评论),默认为0
+     */
+    @NotNull(message = "参数不能为空")
+    private Long parentId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+}

+ 31 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryDynamicContentParam.java

@@ -0,0 +1,31 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.cloud.vehicle.api.constant.DynamicType;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 动态列表查询
+ * @ClassName: QueryContentDynamicDTO
+ * @Author: ygl
+ * @Date: 2023/2/25 21:45
+ * @Version: 1.0
+ */
+@Data
+public class QueryDynamicContentParam implements Serializable {
+
+    private static final long serialVersionUID = 5355086476144764757L;
+    /**
+     * 搜索关键字
+     */
+    private String keyWord;
+    /**
+     * 筛选类型 ATTENTION-关注;LATEST-最新;HOTTEST-最热
+     */
+    @NotNull(message = "筛选类型不能为空")
+    private DynamicType type;
+
+    private Long userId;
+}

+ 70 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/DynamicCommentService.java

@@ -0,0 +1,70 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chelvc.cloud.vehicle.api.constant.ExamineType;
+import com.chelvc.cloud.vehicle.api.dto.DynamicCommentDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicCommentParam;
+import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
+import com.chelvc.cloud.vehicle.api.param.QueryDynamicCommentParam;
+import com.chelvc.framework.common.model.PagedVO;
+
+/**
+ * 动态评论Service接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+public interface DynamicCommentService {
+
+    /**
+     * 查询动态评论列表
+     */
+    IPage<DynamicCommentDTO> queryPageList(QueryDynamicCommentParam param, Integer pageNum, Integer pageSize);
+
+    /**
+     * 查询动态信息列表
+     */
+    PagedVO<DynamicCommentDTO> queryAdminPageList(QueryAdminDynamicParam param, Long pageNum,
+                                                  Long pageSize);
+
+    /**
+     * 修改动态评论
+     */
+    void insertByBo(AddDynamicCommentParam param, Long userId);
+
+    /**
+     * 给评论添加点赞/踩
+     * @param dynamicStatus
+     * @param contentId
+     */
+    void addNum(Integer dynamicStatus, Long contentId);
+
+    /**
+     * 取消评论点赞/踩
+     * @param dynamicStatus
+     * @param contentId
+     */
+    void reduceNum(Integer dynamicStatus, Long contentId);
+
+    /**
+     * 评论手动审核
+     *
+     * @param id
+     * @param examine
+     * @author igl
+     * @date 2023/8/17 17:25
+     */
+    void examine(Long id, ExamineType examine);
+
+    /**
+     * 自动审核
+     *
+     * @param id 评论标识
+     * @param platformStatus 平台状态
+     * @param examineResult 审核结果
+     * @author igl
+     * @date 2023/9/12 17:25
+     */
+    void autoAudit(Long id, int platformStatus, int examineResult);
+}

+ 127 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/DynamicContentService.java

@@ -0,0 +1,127 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chelvc.cloud.vehicle.api.constant.ExamineType;
+import com.chelvc.cloud.vehicle.api.dto.DynamicContentDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicContentParam;
+import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
+import com.chelvc.cloud.vehicle.api.param.QueryDynamicContentParam;
+import com.chelvc.framework.common.model.PagedVO;
+
+import java.util.Map;
+
+/**
+ * 动态信息Service接口
+ *
+ * @USER: igl
+ * @date: 2023/8/8 15:13
+ */
+public interface DynamicContentService {
+
+  /**
+   * 查询动态信息
+   */
+  DynamicContentDTO queryById(Long id, Long userId);
+
+  /**
+   * 查询动态信息列表
+   */
+  IPage<DynamicContentDTO> queryPageList(QueryDynamicContentParam param, Integer pageNum,
+                                         Integer pageSize);
+
+  /**
+   * 查询动态信息列表
+   */
+  PagedVO<DynamicContentDTO> queryAdminPageList(QueryAdminDynamicParam param, Long pageNum,
+                                                Long pageSize);
+
+  /**
+   * 查询动态信息列表
+   */
+  IPage<DynamicContentDTO> queryUserById(Long selfUserId, Long userId, Integer pageNum, Integer pageSize);
+
+  /**
+   * 修改动态信息
+   */
+  void insertByBo(AddDynamicContentParam dto);
+
+  /**
+   * 校验并批量删除动态信息信息
+   */
+  void deleteByIds(Long id, Long userId);
+
+  /**
+   * 添加评论数
+   *
+   * @param dynamicId
+   */
+  void addComment(Long dynamicId);
+
+  /**
+   * 减少评论数
+   *
+   * @param dynamicId
+   */
+  void reduceComment(Long dynamicId, int num);
+
+  /**
+   * 给评论添加点赞/踩
+   *
+   * @param dynamicStatus
+   * @param contentId
+   */
+  void addNum(Integer dynamicStatus, Long contentId);
+
+  /**
+   * 取消评论点赞/踩
+   *
+   * @param dynamicStatus
+   * @param contentId
+   */
+  void reduceNum(Integer dynamicStatus, Long contentId);
+
+  /**
+   * 屏蔽/恢复某条动态信息
+   *
+   * @param id 主键
+   */
+  void shieldById(Long id, Integer type);
+
+  /**
+   * 屏蔽/恢复某个用户所有动态信息
+   *
+   * @param userId 主键
+   * @param type   状态 0-正常;1-平台屏蔽
+   */
+  void shieldByUserId(Long userId, Integer type);
+
+  /**
+   * 动态手动审核
+   *
+   * @param id
+   * @param examine
+   * @author igl
+   * @date 2023/8/17 17:25
+   */
+  void examine(Long id, ExamineType examine);
+
+  /**
+   * 自动审核
+   *
+   * @param id 动态标识
+   * @param platformStatus 平台状态
+   * @param examineResult 审核结果
+   * @author igl
+   * @date 2023/9/12 17:25
+   */
+  void autoAudit(Long id, int platformStatus, int examineResult);
+
+  /**
+   * 视频审核回调
+   *
+   * @param param
+   * @author igl
+   * @date 2023/9/12 16:55
+   */
+  void videoAuditCallback(Map<String, Object> param);
+}

+ 21 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/DynamicEvaluateRecordService.java

@@ -0,0 +1,21 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+
+import com.chelvc.cloud.vehicle.api.dto.DynamicEvaluateRecordDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicEvaluateRecordParam;
+
+/**
+ * 内容评价(点赞/踩)列Service接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+public interface DynamicEvaluateRecordService {
+
+    /**
+     * 修改内容评价(点赞/踩)列
+     */
+    Boolean updateRecord(AddDynamicEvaluateRecordParam param, Long userId);
+
+    DynamicEvaluateRecordDTO queryOperaterType(Long id, Long userId, Integer recordType);
+}

+ 27 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/OmsOrderOperateHistoryService.java

@@ -0,0 +1,27 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.OmsOrderOperateHistoryDTO;
+import com.chelvc.framework.common.model.Pagination;
+import com.chelvc.framework.common.model.Paging;
+
+/**
+ * 订单操作记录
+ */
+public interface OmsOrderOperateHistoryService {
+
+    /**
+     * 根据用户查询订单通知信息
+     *
+     * @param userId 用户id
+     * @param paging 分页信息
+     * @return 订单操作历史记录
+     */
+    Pagination<OmsOrderOperateHistoryDTO> selectOmsOrderOperateHistoryListByUserId(Long userId, Paging paging);
+
+    /**
+     * 将新订单通知标识更改
+     *
+     * @param userId 用户id
+     */
+    void changeUserOrderInformFlag(Long userId);
+}

+ 5 - 0
vehicle-server/pom.xml

@@ -47,5 +47,10 @@
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.5.8</version>
+        </dependency>
     </dependencies>
 </project>

+ 40 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/OmsOrderOperateHistoryCopier.java

@@ -0,0 +1,40 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import com.chelvc.cloud.vehicle.api.dto.OmsOrderOperateHistoryDTO;
+import com.chelvc.cloud.vehicle.server.entity.OmsOrderOperateHistory;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 订单记录信息拷贝接口
+ *
+ * @author igl
+ * @date 2023/12/13
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface OmsOrderOperateHistoryCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    OmsOrderOperateHistoryCopier INSTANCE = Mappers.getMapper(OmsOrderOperateHistoryCopier.class);
+
+    /**
+     * 订单信息拷贝
+     *
+     * @param omsOrderOperateHistory 订单记录信息
+     * @return 订单记录信息
+     */
+    OmsOrderOperateHistoryDTO copying(OmsOrderOperateHistory omsOrderOperateHistory);
+
+    /**
+     * 订单信息列表拷贝
+     *
+     * @param omsOrderOperateHistories 订单记录信息
+     * @return 订单记录信息
+     */
+    List<OmsOrderOperateHistoryDTO> copying(Collection<OmsOrderOperateHistory> omsOrderOperateHistories);
+}

+ 44 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicCommentMapper.java

@@ -0,0 +1,44 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.vehicle.api.dto.DynamicCommentDTO;
+import com.chelvc.cloud.vehicle.server.entity.DynamicComment;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 动态评论Mapper接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Mapper
+@Repository
+public interface DynamicCommentMapper extends BaseMapper<DynamicComment> {
+
+    @Update("update dynamic_comment set good_num = good_num + 1 where id = #{contentId}")
+    int addGoodNum(Long contentId);
+
+    @Update("update dynamic_comment set good_num = good_num - 1 where id = #{contentId}")
+    int reduceGoodNum(Long contentId);
+
+    @Update("update dynamic_comment set bad_num = bad_num + 1 where id = #{contentId}")
+    int addBadNum(Long contentId);
+
+    @Update("update dynamic_comment set bad_num = bad_num - 1 where id = #{contentId}")
+    int reduceBadNum(Long contentId);
+
+    @Update("update dynamic_comment set platform_status = #{type} where is_deleted = 0 and  user_id = #{userId}")
+    int shieldByUserId(@Param("userId")Long userId, @Param("type")int type);
+
+    @Update("update dynamic_comment set comment_num = comment_num + 1 where id = #{dynamicId}")
+    int addComment(Long dynamicId);
+
+    IPage<DynamicCommentDTO> queryAll(@Param("page") Page<DynamicCommentDTO> page, @Param(Constants.WRAPPER) QueryWrapper<DynamicComment> queryWrapper);
+}

+ 61 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicContentMapper.java

@@ -0,0 +1,61 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.vehicle.api.dto.DynamicContentDTO;
+import com.chelvc.cloud.vehicle.server.entity.DynamicContent;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.mapper
+ * @NAME: DynamicContentMapper
+ * @USER: igl
+ * @DATE: 2023/8/8 15:24
+ */
+@Mapper
+@Repository
+public interface DynamicContentMapper extends BaseMapper<DynamicContent> {
+
+  DynamicContentDTO queryById(@Param("id") Long id);
+
+  @Update("update dynamic_content set comment_num = comment_num + 1 where id = #{dynamicId}")
+  int addComment(Long dynamicId);
+
+  @Update("update dynamic_content set comment_num = comment_num - #{num} where id = #{dynamicId}")
+  int reduceComment(@Param("dynamicId")Long dynamicId, @Param("num")int num);
+
+  @Update("update dynamic_content set good_num = good_num + 1 where id = #{contentId}")
+  int addGoodNum(Long contentId);
+
+  @Update("update dynamic_content set good_num = good_num - 1 where id = #{contentId}")
+  int reduceGoodNum(Long contentId);
+
+  @Update("update dynamic_content set bad_num = bad_num + 1 where id = #{contentId}")
+  int addBadNum(Long contentId);
+
+  @Update("update dynamic_content set bad_num = bad_num - 1 where id = #{contentId}")
+  int reduceBadNum(Long contentId);
+
+  @Update("update dynamic_content set platform_status = #{type} where id = #{id}")
+  int shieldById(@Param("id")Long id, @Param("type")int type);
+
+  @Update("update dynamic_content set platform_status = #{type} where is_deleted = 0 and user_id = #{userId}")
+  int shieldByUserId(@Param("userId")Long userId, @Param("type")int type);
+
+  IPage<DynamicContentDTO> selectAttention(@Param("page") Page<DynamicContentDTO> page, @Param(Constants.WRAPPER) QueryWrapper<DynamicContent> queryWrapper, @Param("userId") Long userId);
+
+  IPage<DynamicContentDTO> queryHot(@Param("page") Page<DynamicContentDTO> page, @Param(Constants.WRAPPER) QueryWrapper<DynamicContent> queryWrapper);
+
+  IPage<DynamicContentDTO> queryAll(@Param("page") Page<DynamicContentDTO> page, @Param(Constants.WRAPPER) QueryWrapper<DynamicContent> queryWrapper);
+
+  IPage<DynamicContentDTO> queryBySelf(@Param("page") Page<DynamicContentDTO> page, @Param(Constants.WRAPPER) QueryWrapper<DynamicContent> queryWrapper);
+
+  IPage<DynamicContentDTO> queryRandom(@Param("page") Page<DynamicContentDTO> page, @Param(Constants.WRAPPER) QueryWrapper<DynamicContent> queryWrapper);
+
+}

+ 21 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicEvaluateRecordMapper.java

@@ -0,0 +1,21 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.DynamicEvaluateRecord;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 内容评价(点赞/踩)列Mapper接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Mapper
+@Repository
+public interface DynamicEvaluateRecordMapper extends BaseMapper<DynamicEvaluateRecord> {
+
+    @Delete("DELETE FROM dynamic_evaluate_record where id = #{id}")
+    int deleteByRecordId(Long id);
+}

+ 29 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicResourceMapper.java

@@ -0,0 +1,29 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.DynamicResource;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+
+/**
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.mapper
+ * @NAME: DynamicResourceMapper
+ * @USER: igl
+ * @DATE: 2023/8/8 17:15
+ */
+@Mapper
+@Repository
+public interface DynamicResourceMapper extends BaseMapper<DynamicResource> {
+
+  /**
+   * 批量插入
+   *
+   * @param dataList
+   * @return {@link Integer}
+   * @author igl
+   * @date 2023/8/14 16:18
+   */
+  Integer insertBatchSomeColumn(Collection<DynamicResource> dataList);
+}

+ 18 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderOperateHistoryMapper.java

@@ -1,5 +1,7 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.OmsOrderOperateHistoryDTO;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderOperateHistory;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -12,7 +14,7 @@ import java.util.List;
  * @date 2023-11-08
  */
 @Mapper
-public interface OmsOrderOperateHistoryMapper 
+public interface OmsOrderOperateHistoryMapper extends BaseMapper<OmsOrderOperateHistory>
 {
     /**
      * 查询订单操作历史记录
@@ -61,4 +63,19 @@ public interface OmsOrderOperateHistoryMapper
      * @return 结果
      */
     public int deleteOmsOrderOperateHistoryByIds(Long[] ids);
+
+    /**
+     * 根据用户查询订单通知信息
+     *
+     * @param userId 用户id
+     * @return 订单操作历史记录
+     */
+    public List<OmsOrderOperateHistoryDTO> selectOmsOrderOperateHistoryListByUserId(Long userId);
+
+    /**
+     * 将新订单通知标识更改
+     *
+     * @param userId 用户id
+     */
+    public void changeUserOrderInformFlag(Long userId);
 }

+ 83 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicComment.java

@@ -0,0 +1,83 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chelvc.framework.database.entity.Entity;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.util.Date;
+
+/**
+ * 动态评论对象 dynamic_comment
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(autoResultMap = true)
+public class DynamicComment implements Entity<Long> {
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 动态标识
+     */
+    private Long dynamicId;
+    /**
+     * 用户标识
+     */
+    private Long userId;
+    /**
+     * 父级评论(0表示为根评论)
+     */
+    private Long parentId;
+    /**
+     * 评论内容
+     */
+    private String content;
+    /**
+     * 评论数
+     */
+    private Long commentNum;
+    /**
+     * 点赞数
+     */
+    private Long goodNum;
+    /**
+     * 差评数
+     */
+    private Long badNum;
+    /**
+     * 状态:0-正常;1-屏蔽
+     */
+    private Integer status;
+    /**
+     * 平台状态:0-正常;1-屏蔽
+     */
+    private Integer platformStatus;
+    /**
+     * 审核状态:0-待审核;1-已审核
+     */
+    private Integer examineStatus;
+    /**
+     * 审核结果:0-未违规;1-疑似违规;2-违规
+     */
+    private Integer examineResult;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 85 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicContent.java

@@ -0,0 +1,85 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chelvc.framework.database.entity.Entity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.Date;
+
+/**
+ * 动态信息对象 dynamic_content
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(autoResultMap = true)
+public class DynamicContent implements Entity<Long> {
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+    /**
+     * 动态类型:1-纯文字;2-图片;3-视频
+     */
+    private Integer type;
+    /**
+     * 文字内容
+     */
+    private String textContent;
+    /**
+     * 评论数
+     */
+    private Long commentNum;
+    /**
+     * 点赞数
+     */
+    private Long goodNum;
+    /**
+     * 差评数
+     */
+    private Long badNum;
+    /**
+     * 状态:0-正常;1-屏蔽
+     */
+    private Integer status;
+    /**
+     * 平台状态:0-正常;1-屏蔽
+     */
+    private Integer platformStatus;
+    /**
+     * 审核状态:0-待审核;1-已审核
+     */
+    private Integer examineStatus;
+    /**
+     * 审核结果:0-未违规;1-疑似违规;2-违规
+     */
+    private Integer examineResult;
+    /**
+     * 定位
+     */
+    private String location;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 54 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicEvaluateRecord.java

@@ -0,0 +1,54 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.chelvc.framework.database.entity.Entity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.Date;
+
+/**
+ * 内容评价(点赞/踩)列对象 dynamic_evaluate_record
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(autoResultMap = true)
+public class DynamicEvaluateRecord implements Entity<Long> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 唯一标识
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 用户标识
+     */
+    private Long userId;
+    /**
+     * 操作类型:1-点赞;2-踩
+     */
+    private Integer operaterType;
+    /**
+     * 内容类型:1-动态;2-评论/回复
+     */
+    private Integer contentType;
+    /**
+     * 内容标识
+     */
+    private Long contentId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+}

+ 49 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/DynamicResource.java

@@ -0,0 +1,49 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chelvc.framework.database.entity.Entity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 动态文件对象 dynamic_resource
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(autoResultMap = true)
+public class DynamicResource implements Entity<Long> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 唯一标识
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 动态标识
+     */
+    private Long dynamicId;
+    /**
+     * 文件标识
+     */
+    private String resourceKey;
+    /**
+     * 资源首帧
+     */
+    private String resourceFrame;
+    /**
+     * 显示顺序
+     */
+    private Long sort;
+
+}

+ 10 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrderOperateHistory.java

@@ -35,12 +35,22 @@ public class OmsOrderOperateHistory extends ModifyEntity<Long>
     /** 订单id */
     private Long orderId;
 
+    /**
+     * 用户id
+     */
+    private Long userId;
+
     /** 操作人:用户;系统;后台管理员 */
     private String operateMan;
 
     /** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
     private Long orderStatus;
 
+    /**
+     * 订单消息标识:0-新消息;1-已查看
+     */
+    private Integer flag;
+
     /** 备注 */
     private String note;
 }

+ 70 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicCommentService.java

@@ -0,0 +1,70 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chelvc.cloud.vehicle.api.constant.ExamineType;
+import com.chelvc.cloud.vehicle.api.dto.DynamicCommentDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicCommentParam;
+import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
+import com.chelvc.cloud.vehicle.api.param.QueryDynamicCommentParam;
+import com.chelvc.framework.common.model.PagedVO;
+
+/**
+ * 动态评论Service接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+public interface DynamicCommentService {
+
+    /**
+     * 查询动态评论列表
+     */
+    IPage<DynamicCommentDTO> queryPageList(QueryDynamicCommentParam param, Integer pageNum, Integer pageSize);
+
+    /**
+     * 查询动态信息列表
+     */
+    PagedVO<DynamicCommentDTO> queryAdminPageList(QueryAdminDynamicParam param, Long pageNum,
+                                                  Long pageSize);
+
+    /**
+     * 修改动态评论
+     */
+    void insertByBo(AddDynamicCommentParam param, Long userId);
+
+    /**
+     * 给评论添加点赞/踩
+     * @param dynamicStatus
+     * @param contentId
+     */
+    void addNum(Integer dynamicStatus, Long contentId);
+
+    /**
+     * 取消评论点赞/踩
+     * @param dynamicStatus
+     * @param contentId
+     */
+    void reduceNum(Integer dynamicStatus, Long contentId);
+
+    /**
+     * 评论手动审核
+     *
+     * @param id
+     * @param examine
+     * @author igl
+     * @date 2023/8/17 17:25
+     */
+    void examine(Long id, ExamineType examine);
+
+    /**
+     * 自动审核
+     *
+     * @param id 评论标识
+     * @param platformStatus 平台状态
+     * @param examineResult 审核结果
+     * @author igl
+     * @date 2023/9/12 17:25
+     */
+    void autoAudit(Long id, int platformStatus, int examineResult);
+}

+ 127 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicContentService.java

@@ -0,0 +1,127 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chelvc.cloud.vehicle.api.constant.ExamineType;
+import com.chelvc.cloud.vehicle.api.dto.DynamicContentDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicContentParam;
+import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
+import com.chelvc.cloud.vehicle.api.param.QueryDynamicContentParam;
+import com.chelvc.framework.common.model.PagedVO;
+
+import java.util.Map;
+
+/**
+ * 动态信息Service接口
+ *
+ * @USER: igl
+ * @date: 2023/8/8 15:13
+ */
+public interface DynamicContentService {
+
+  /**
+   * 查询动态信息
+   */
+  DynamicContentDTO queryById(Long id, Long userId);
+
+  /**
+   * 查询动态信息列表
+   */
+  IPage<DynamicContentDTO> queryPageList(QueryDynamicContentParam param, Integer pageNum,
+                                         Integer pageSize);
+
+  /**
+   * 查询动态信息列表
+   */
+  PagedVO<DynamicContentDTO> queryAdminPageList(QueryAdminDynamicParam param, Long pageNum,
+                                                Long pageSize);
+
+  /**
+   * 查询动态信息列表
+   */
+  IPage<DynamicContentDTO> queryUserById(Long selfUserId, Long userId, Integer pageNum, Integer pageSize);
+
+  /**
+   * 修改动态信息
+   */
+  void insertByBo(AddDynamicContentParam dto);
+
+  /**
+   * 校验并批量删除动态信息信息
+   */
+  void deleteByIds(Long id, Long userId);
+
+  /**
+   * 添加评论数
+   *
+   * @param dynamicId
+   */
+  void addComment(Long dynamicId);
+
+  /**
+   * 减少评论数
+   *
+   * @param dynamicId
+   */
+  void reduceComment(Long dynamicId, int num);
+
+  /**
+   * 给评论添加点赞/踩
+   *
+   * @param dynamicStatus
+   * @param contentId
+   */
+  void addNum(Integer dynamicStatus, Long contentId);
+
+  /**
+   * 取消评论点赞/踩
+   *
+   * @param dynamicStatus
+   * @param contentId
+   */
+  void reduceNum(Integer dynamicStatus, Long contentId);
+
+  /**
+   * 屏蔽/恢复某条动态信息
+   *
+   * @param id 主键
+   */
+  void shieldById(Long id, Integer type);
+
+  /**
+   * 屏蔽/恢复某个用户所有动态信息
+   *
+   * @param userId 主键
+   * @param type   状态 0-正常;1-平台屏蔽
+   */
+  void shieldByUserId(Long userId, Integer type);
+
+  /**
+   * 动态手动审核
+   *
+   * @param id
+   * @param examine
+   * @author igl
+   * @date 2023/8/17 17:25
+   */
+  void examine(Long id, ExamineType examine);
+
+  /**
+   * 自动审核
+   *
+   * @param id 动态标识
+   * @param platformStatus 平台状态
+   * @param examineResult 审核结果
+   * @author igl
+   * @date 2023/9/12 17:25
+   */
+  void autoAudit(Long id, int platformStatus, int examineResult);
+
+  /**
+   * 视频审核回调
+   *
+   * @param param
+   * @author igl
+   * @date 2023/9/12 16:55
+   */
+  void videoAuditCallback(Map<String, Object> param);
+}

+ 21 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicEvaluateRecordService.java

@@ -0,0 +1,21 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+
+import com.chelvc.cloud.vehicle.api.dto.DynamicEvaluateRecordDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicEvaluateRecordParam;
+
+/**
+ * 内容评价(点赞/踩)列Service接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+public interface DynamicEvaluateRecordService {
+
+    /**
+     * 修改内容评价(点赞/踩)列
+     */
+    Boolean updateRecord(AddDynamicEvaluateRecordParam param, Long userId);
+
+    DynamicEvaluateRecordDTO queryOperaterType(Long id, Long userId, Integer recordType);
+}

+ 19 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/DynamicResourceService.java

@@ -0,0 +1,19 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+import com.chelvc.cloud.vehicle.api.dto.DynamicResourceDTO;
+import com.chelvc.cloud.vehicle.server.entity.DynamicResource;
+
+import java.util.List;
+
+/**
+ * 动态文件Service接口
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+public interface DynamicResourceService {
+
+    void batchInsert(List<DynamicResource> list);
+
+    List<DynamicResourceDTO> queryByDynamicId(Long dynamicId);
+}

+ 251 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicCommentServiceImpl.java

@@ -0,0 +1,251 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.lock.annotation.Lock4j;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.chelvc.cloud.uc.api.service.UserService;
+import com.chelvc.cloud.vehicle.api.constant.DynamicStatusType;
+import com.chelvc.cloud.vehicle.api.constant.ExamineType;
+import com.chelvc.cloud.vehicle.api.dto.DynamicCommentDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicCommentParam;
+import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
+import com.chelvc.cloud.vehicle.api.param.QueryDynamicCommentParam;
+import com.chelvc.cloud.vehicle.server.dao.DynamicCommentMapper;
+import com.chelvc.cloud.vehicle.server.entity.DynamicComment;
+import com.chelvc.cloud.vehicle.server.service.DynamicCommentService;
+import com.chelvc.cloud.vehicle.server.service.DynamicContentService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.model.PagedVO;
+import com.chelvc.framework.common.util.BeanCopyUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.service.impl
+ * @NAME: DynamicCommentServiceImpl
+ * @USER: igl
+ * @DATE: 2023/8/8 18:53
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class DynamicCommentServiceImpl implements DynamicCommentService, com.chelvc.cloud.vehicle.api.service.DynamicCommentService {
+  private final DynamicCommentMapper baseMapper;
+  private final DynamicContentService dynamicContentService;
+  @DubboReference
+  private final UserService userService;
+
+  //private final ContentAuditHelper contentAuditHelper;
+  /**
+   * 查询动态评论列表
+   */
+  @Override
+  public IPage<DynamicCommentDTO> queryPageList(QueryDynamicCommentParam param, Integer pageNum,
+                                                Integer pageSize) {
+    LambdaQueryWrapper<DynamicComment> lqw = Wrappers.lambdaQuery();
+    lqw.eq(DynamicComment::getDynamicId, param.getDynamicId());
+    lqw.eq(DynamicComment::getParentId, param.getParentId());
+    lqw.eq(DynamicComment::getPlatformStatus, 0);
+    Long userId = param.getUserId();
+    lqw.and(wq -> wq
+        .eq(DynamicComment::getExamineStatus, 1)
+        .or(wq1 -> wq1
+            .eq(DynamicComment::getExamineStatus, 0)
+            .eq(DynamicComment::getUserId, userId)));
+    lqw.orderByDesc(DynamicComment::getCreateTime);
+    IPage<DynamicCommentDTO> resultPage = new Page<>(pageNum, pageSize);
+    Page<DynamicComment> page = baseMapper.selectPage(
+        new Page<>(pageNum, pageSize), lqw);
+    List<DynamicComment> result = page.getRecords();
+    if (result != null && result.size() > 0) {
+      List<DynamicCommentDTO> records = BeanCopyUtil.copy(result,
+          DynamicCommentDTO.class);
+      List<Long> userIds = records.stream().map(DynamicCommentDTO::getUserId).collect(
+          Collectors.toList());
+      Map<Long, UserDTO> map = userService.queryUserByIds(userIds);
+      records.forEach(e -> {
+        e.setUserDTO(map == null ? new UserDTO() : map.get(e.getUserId()));
+      });
+      resultPage.setRecords(records);
+      resultPage.setTotal(page.getTotal());
+    }
+    return resultPage;
+  }
+
+  @Override
+  public PagedVO<DynamicCommentDTO> queryAdminPageList(QueryAdminDynamicParam param, Long pageNum,
+                                                       Long pageSize) {
+    Page<DynamicCommentDTO> page = new Page<>(pageNum, pageSize);
+    IPage<DynamicCommentDTO> result = null;
+    if (param == null) {
+      return PagedVO.build(page, DynamicCommentDTO.class);
+    }
+    result = baseMapper
+        .queryAll(page, queryManagerWrapper(param));
+    IPage<DynamicCommentDTO> resultDto = getResult(result);
+    PagedVO<DynamicCommentDTO> vo = new PagedVO<>();
+    vo.setPageSize(pageSize);
+    vo.setPageNumber(pageNum);
+    vo.setRecords(resultDto.getRecords());
+    vo.setTotalNumber(result.getTotal());
+    return vo;
+  }
+
+  public IPage<DynamicCommentDTO> getResult(IPage<DynamicCommentDTO> result) {
+    if (result == null) {
+      return null;
+    }
+    List<DynamicCommentDTO> records = result.getRecords();
+    if (records != null && !records.isEmpty()) {
+      List<Long> userIds = records.stream().map(DynamicCommentDTO::getUserId).collect(
+          Collectors.toList());
+      Map<Long, UserDTO> longUserBaseInfoMap = userService.queryUserByIds(
+          userIds);
+      log.info("远程查询用户信息成功:{}", longUserBaseInfoMap);
+      List<String> resourceKey = new ArrayList<>();
+      records.forEach(e -> {
+        e.setUserDTO(longUserBaseInfoMap == null ? new UserDTO() :
+            longUserBaseInfoMap.get(e.getUserId()));
+      });
+    }
+    return result;
+  }
+
+  private QueryWrapper<DynamicComment> queryManagerWrapper(
+      QueryAdminDynamicParam param) {
+    QueryWrapper<DynamicComment> lqw = Wrappers.query();
+    lqw.eq("t1.is_deleted", 0);
+    lqw.like(StringUtils.isNotBlank(param.getKeyWord()), "t1.content", param.getKeyWord());
+    lqw.ge(StringUtils.isNotBlank(param.getStartTime()), "t1.create_time", param.getStartTime());
+    lqw.le(StringUtils.isNotBlank(param.getEndTime()), "t1.create_time", param.getEndTime());
+    lqw.eq(param.getExamineStatus() != null, "t1.examine_status", param.getExamineStatus());
+    lqw.eq(param.getExamineResult() != null, "t1.examine_result", param.getExamineResult());
+    lqw.eq(param.getPlatformStatus() != null, "t1.platform_status", param.getPlatformStatus());
+    List<String> list = new ArrayList<>();
+    list.add("t1.create_time");
+    list.add("t1.id");
+    lqw.orderByDesc(list);
+    return lqw;
+  }
+
+  /**
+   * 新增动态评论
+   */
+  @Override
+  public void insertByBo(AddDynamicCommentParam param, Long userId) {
+    DynamicComment add = BeanCopyUtil.copy(param, DynamicComment.class);
+    add.setUserId(userId);
+    boolean b = baseMapper.insert(add) > 0;
+    if (!b) {
+      throw new ResourceUnavailableException("新增评论失败");
+    }
+    //异步处理审核
+    //contentAuditHelper.asyncCommentHandle(add);
+  }
+
+  private void addParentComment(Long parentId) {
+    if(parentId == 0){
+      return;
+    }
+    DynamicComment DynamicComment = baseMapper.selectById(parentId);
+    if(DynamicComment == null){
+      return;
+    }
+    int i = baseMapper.addComment(DynamicComment.getId());
+    if(i != 1){
+      throw new ResourceUnavailableException("新增评论失败");
+    }
+    addParentComment(DynamicComment.getParentId());
+  }
+
+  @Override
+  @Lock4j(keys = {"#contentId"})
+  public void addNum(Integer dynamicStatus, Long contentId) {
+    if (Objects.equals(DynamicStatusType.GOOD.getValue(), dynamicStatus)) {
+      int i = baseMapper.addGoodNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("点赞失败");
+      }
+    } else if (Objects.equals(DynamicStatusType.BAD.getValue(), dynamicStatus)) {
+      int i = baseMapper.addBadNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("D踩一踩失败");
+      }
+    }
+  }
+
+  @Override
+  @Lock4j(keys = {"#contentId"})
+  public void reduceNum(Integer dynamicStatus, Long contentId) {
+    if (Objects.equals(DynamicStatusType.GOOD.getValue(), dynamicStatus)) {
+      int i = baseMapper.reduceGoodNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("取消点赞失败");
+      }
+    } else if (Objects.equals(DynamicStatusType.BAD.getValue(), dynamicStatus)) {
+      int i = baseMapper.reduceBadNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("取消踩一踩失败");
+      }
+    }
+  }
+
+  @Override
+  @Transactional(rollbackFor = RuntimeException.class)
+  public void examine(Long id, ExamineType examine) {
+    DynamicComment DynamicComment = baseMapper.selectById(id);
+    if(DynamicComment == null){
+      throw new ResourceUnavailableException("评论不存在");
+    }
+    LambdaUpdateWrapper<DynamicComment> lwq = Wrappers.lambdaUpdate();
+    lwq.eq(com.chelvc.cloud.vehicle.server.entity.DynamicComment::getId, id);
+    lwq.set(com.chelvc.cloud.vehicle.server.entity.DynamicComment::getExamineStatus, 1);
+    if(ExamineType.REFUSE.equals(examine)){
+      lwq.set(com.chelvc.cloud.vehicle.server.entity.DynamicComment::getPlatformStatus, 1);
+    }
+    int update = baseMapper.update(null, lwq);
+    if(update != 1){
+      throw new ResourceUnavailableException("操作失败");
+    }
+    if(ExamineType.PASS.equals(examine)){
+      addParentComment(DynamicComment.getParentId());
+      dynamicContentService.addComment(DynamicComment.getDynamicId());
+    }
+  }
+
+  @Override
+  public void autoAudit(Long id, int platformStatus, int examineResult) {
+    LambdaUpdateWrapper<DynamicComment> lwq = Wrappers.lambdaUpdate();
+    lwq.set(DynamicComment::getPlatformStatus, platformStatus);
+    lwq.set(DynamicComment::getExamineStatus, 1);
+    lwq.set(DynamicComment::getExamineResult, examineResult);
+    lwq.set(DynamicComment::getUpdateTime, LocalDateTime.now());
+    lwq.eq(DynamicComment::getId, id);
+    int update = baseMapper.update(null, lwq);
+    if(update != 1){
+      throw new ResourceUnavailableException("自动审核失败");
+    }
+    if(ExamineType.PASS.getValue() == examineResult){
+      DynamicComment DynamicComment = baseMapper.selectById(id);
+      addParentComment(DynamicComment.getParentId());
+      dynamicContentService.addComment(DynamicComment.getDynamicId());
+    }
+  }
+}

+ 450 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicContentServiceImpl.java

@@ -0,0 +1,450 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.lock.annotation.Lock4j;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.chelvc.cloud.uc.api.service.UserService;
+import com.chelvc.cloud.vehicle.api.constant.*;
+import com.chelvc.cloud.vehicle.api.dto.DynamicContentDTO;
+import com.chelvc.cloud.vehicle.api.dto.DynamicEvaluateRecordDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicContentParam;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicResourceParam;
+import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
+import com.chelvc.cloud.vehicle.api.param.QueryDynamicContentParam;
+import com.chelvc.cloud.vehicle.server.dao.DynamicCommentMapper;
+import com.chelvc.cloud.vehicle.server.dao.DynamicContentMapper;
+import com.chelvc.cloud.vehicle.server.entity.DynamicComment;
+import com.chelvc.cloud.vehicle.server.entity.DynamicContent;
+import com.chelvc.cloud.vehicle.server.entity.DynamicResource;
+import com.chelvc.cloud.vehicle.server.service.DynamicContentService;
+import com.chelvc.cloud.vehicle.server.service.DynamicEvaluateRecordService;
+import com.chelvc.cloud.vehicle.server.service.DynamicResourceService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.model.PagedVO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.service.impl
+ * @NAME: DynamicContentServiceImpl
+ * @USER: igl
+ * @DATE: 2023/8/8 14:25
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class DynamicContentServiceImpl implements DynamicContentService, com.chelvc.cloud.vehicle.api.service.DynamicContentService {
+  private final DynamicContentMapper baseMapper;
+  @DubboReference
+  private final UserService userService;
+  DynamicEvaluateRecordService dynamicEvaluateRecordService;
+  private final DynamicResourceService contentDynamicResourceService;
+  private final DynamicCommentMapper dynamicCommentMapper;
+
+  //private final ContentAuditHelper contentAuditHelper;
+
+  @Override
+  public DynamicContentDTO queryById(Long id, Long selfUserId) {
+    DynamicContentDTO dynamicContentDTO = baseMapper.queryById(id);
+    if (dynamicContentDTO == null) {
+      throw new ResourceUnavailableException("动态不存在");
+    }
+    Long userId = dynamicContentDTO.getUserId();
+    UserDTO user = userService.getUser(userId);
+    dynamicContentDTO.setUserDTO(user);
+    if(selfUserId == null){
+      return dynamicContentDTO;
+    }
+    DynamicEvaluateRecordService service = getContentEvaluateRecordService();
+    DynamicEvaluateRecordDTO dto = service.queryOperaterType(dynamicContentDTO.getId(),
+            selfUserId, RecordType.DYNAMIC.getValue());
+    if (dto == null) {
+      dynamicContentDTO.setClickStatus(0);
+    } else {
+      dynamicContentDTO.setClickStatus(dto.getOperaterType());
+    }
+    return dynamicContentDTO;
+  }
+
+  //解决循环依赖
+  public DynamicEvaluateRecordService getContentEvaluateRecordService() {
+    this.dynamicEvaluateRecordService = SpringUtil.getBean(DynamicEvaluateRecordService.class);
+    return dynamicEvaluateRecordService;
+  }
+
+  @Override
+  public IPage<DynamicContentDTO> queryPageList(QueryDynamicContentParam param, Integer pageNum,
+                                                Integer pageSize) {
+    String keyWord = param.getKeyWord();
+    Integer type = param.getType().getValue();
+    Page<DynamicContentDTO> page = new Page<>(pageNum, pageSize);
+    IPage<DynamicContentDTO> result = null;
+    if (Objects.equals(DynamicType.HOTTEST.getValue(), type)) {
+      result = baseMapper.queryHot(page, queryHotWrapper(keyWord, param.getUserId()));
+    } /*else if (Objects.equals(DynamicType.ATTENTION.getValue(), type)) {
+      result = baseMapper
+          .selectAttention(page, queryAttentionWrapper(keyWord), userId);
+    } */else if (Objects.equals(DynamicType.LATEST.getValue(), type)) {
+      result = baseMapper
+          .queryAll(page, queryAllWrapper(keyWord, param.getUserId()));
+    } else if (Objects.equals(DynamicType.DISCOVER.getValue(), type)) {
+      result = baseMapper
+          .queryRandom(page, queryRandomWrapper(keyWord, param.getUserId()));
+    }
+    return getResult(result, true, param.getUserId());
+  }
+
+  public IPage<DynamicContentDTO> getResult(IPage<DynamicContentDTO> result, boolean b, Long selfUserId) {
+    if (result == null) {
+      return null;
+    }
+    List<DynamicContentDTO> records = result.getRecords();
+    log.info("动态信息总数:" + records.size());
+    log.info("动态信息:" + records);
+    DynamicEvaluateRecordService service = getContentEvaluateRecordService();
+    if (!records.isEmpty()) {
+      List<Long> userIds = records.stream().map(DynamicContentDTO::getUserId).collect(
+          Collectors.toList());
+      Map<Long, UserDTO> longUserBaseInfoMap = userService.queryUserByIds(
+          userIds);
+      log.info("远程查询用户信息成功:{}", longUserBaseInfoMap);
+      if(selfUserId != null){
+        records.forEach(e -> {
+          e.setUserDTO(longUserBaseInfoMap == null ? new UserDTO() :
+              longUserBaseInfoMap.get(e.getUserId()));
+          if(b){
+            DynamicEvaluateRecordDTO dto = service.queryOperaterType(e.getId(),
+                    selfUserId, RecordType.DYNAMIC.getValue());
+            if (dto == null) {
+              e.setClickStatus(0);
+            } else {
+              e.setClickStatus(dto.getOperaterType());
+            }
+          }
+        });
+      }
+    }
+    return result;
+  }
+
+  public QueryWrapper<DynamicContent> queryAllWrapper(String keyWord, Long userId) {
+    QueryWrapper<DynamicContent> lqw = Wrappers.query();
+    return format(lqw, keyWord, userId);
+  }
+
+  public QueryWrapper<DynamicContent> queryAttentionWrapper(String keyWord) {
+    List<String> list = new ArrayList<>();
+    QueryWrapper<DynamicContent> lqw = Wrappers.query();
+    lqw.eq("t1.is_deleted", 0);
+    lqw.eq("t1.platform_status", 0);
+    lqw.like(StringUtils.isNotBlank(keyWord), "t1.text_content", keyWord);
+    lqw.eq("t1.status", 0);
+    lqw.inSql("t1.user_id",
+        "SELECT t2.target FROM collision_user.user_attention t2 WHERE t2.user_id = #{userId}");
+    list.add("t1.create_time");
+    list.add("t1.id");
+    lqw.orderByDesc(list.toString());
+    return lqw;
+  }
+
+  public QueryWrapper<DynamicContent> queryRandomWrapper(String keyWord, Long userId) {
+    QueryWrapper<DynamicContent> lqw = Wrappers.query();
+    lqw.eq("t1.is_deleted", 0);
+    lqw.eq("t1.platform_status", 0);
+    lqw.like(StringUtils.isNotBlank(keyWord), "t1.text_content", keyWord);
+    lqw.and(wq -> wq
+        .eq("t1.status", 0)
+        .or(wq1 -> wq1
+            .eq("t1.status", 1)
+            .eq("t1.user_id", userId)));
+    return lqw;
+  }
+
+  public QueryWrapper<DynamicContent> queryHotWrapper(String keyWord, Long userId) {
+    QueryWrapper<DynamicContent> lqw = Wrappers.query();
+    lqw.ge("t1.good_num", 50);
+    return format(lqw, keyWord, userId);
+  }
+
+  public QueryWrapper<DynamicContent> format(QueryWrapper<DynamicContent> lqw,
+      String keyWord, Long userId) {
+    lqw.eq("t1.is_deleted", 0);
+    lqw.eq("t1.platform_status", 0);
+    lqw.and(wq -> wq
+        .eq("t1.examine_status", 1)
+        .or(wq1 -> wq1
+            .eq("t1.examine_status", 0)
+            .eq("t1.user_id", userId)));
+    lqw.and(wq -> wq
+        .eq("t1.status", 0)
+        .or(wq1 -> wq1
+            .eq("t1.status", 1)
+            .eq("t1.user_id", userId)));
+    lqw.like(StringUtils.isNotBlank(keyWord), "t1.text_content", keyWord);
+    List<String> list = new ArrayList<>();
+    list.add("t1.create_time");
+    list.add("t1.id");
+    lqw.orderByDesc(list.toString());
+    return lqw;
+  }
+
+  @Override
+  public PagedVO<DynamicContentDTO> queryAdminPageList(QueryAdminDynamicParam param,
+                                                          Long pageNum, Long pageSize) {
+    Page<DynamicContentDTO> page = new Page<>(pageNum, pageSize);
+    IPage<DynamicContentDTO> result = null;
+    if (param == null) {
+      return PagedVO.build(page, DynamicContentDTO.class);
+    }
+    result = baseMapper
+        .queryAll(page, queryManagerWrapper(param));
+    IPage<DynamicContentDTO> resultDto = getResult(result, false, null);
+    PagedVO<DynamicContentDTO> vo = new PagedVO<>();
+    vo.setPageSize(pageSize);
+    vo.setPageNumber(pageNum);
+    vo.setRecords(resultDto.getRecords());
+    vo.setTotalNumber(result.getTotal());
+    return vo;
+  }
+
+  private QueryWrapper<DynamicContent> queryManagerWrapper(
+      QueryAdminDynamicParam param) {
+    QueryWrapper<DynamicContent> lqw = Wrappers.query();
+    lqw.eq("t1.is_deleted", 0);
+    lqw.like(StringUtils.isNotBlank(param.getKeyWord()), "t1.text_content", param.getKeyWord());
+    lqw.ge(StringUtils.isNotBlank(param.getStartTime()), "t1.create_time", param.getStartTime());
+    lqw.le(StringUtils.isNotBlank(param.getEndTime()), "t1.create_time", param.getEndTime());
+    lqw.eq(param.getExamineStatus() != null, "t1.examine_status", param.getExamineStatus());
+    lqw.eq(param.getExamineResult() != null, "t1.examine_result", param.getExamineResult());
+    lqw.eq(param.getPlatformStatus() != null, "t1.platform_status", param.getPlatformStatus());
+    List<String> list = new ArrayList<>();
+    list.add("t1.create_time");
+    list.add("t1.id");
+    lqw.orderByDesc(list.toString());
+    return lqw;
+  }
+
+  @Override
+  public IPage<DynamicContentDTO> queryUserById(Long selfUserId, Long userId, Integer pageNum, Integer pageSize) {
+    if (userId == null) {
+      return null;
+    }
+    int flag = 1;
+    if (selfUserId != null && selfUserId.intValue() == userId.intValue()) {
+      flag = 2;
+    }
+    Page<DynamicContentDTO> page = new Page<>(pageNum, pageSize);
+    //flag: 1-查看其他人;2-查看自己
+    IPage<DynamicContentDTO> iPage = baseMapper
+        .queryBySelf(page, querySelfWrapper(flag, userId));
+    return getResult(iPage, true, userId);
+  }
+
+  public QueryWrapper<DynamicContent> querySelfWrapper(int flag, Long userId) {
+    List<String> list = new ArrayList<>();
+    QueryWrapper<DynamicContent> lqw = Wrappers.query();
+    lqw.eq("t1.is_deleted", 0);
+    lqw.eq("t1.user_id", userId);
+    lqw.eq("t1.platform_status", 0);
+    lqw.eq(flag == 1, "t1.status", 0);
+    lqw.eq(flag == 1, "t1.examine_status", 1);
+    list.add("t1.create_time");
+    list.add("t1.id");
+    lqw.orderByDesc(list.toString());
+    return lqw;
+  }
+
+  @Override
+  @Transactional(rollbackFor = Exception.class)
+  public void insertByBo(AddDynamicContentParam param) {
+    addValidEntityBeforeSave(param);
+    String textContent = param.getTextContent();
+    DynamicContentType type = param.getType();
+    DynamicContent contentDynamic = new DynamicContent();
+    Long userId = param.getUserId();
+    contentDynamic.setUserId(userId);
+    contentDynamic.setTextContent(textContent);
+    contentDynamic.setType(type.getValue());
+    contentDynamic.setLocation(param.getLocation());
+    baseMapper.insert(contentDynamic);
+    log.info("用户[{}]:发送动态信息{}", userId, contentDynamic);
+    List<AddDynamicResourceParam> list = param.getList();
+    if (list != null && !list.isEmpty()) {
+      List<DynamicResource> resources = new ArrayList<>();
+      list.forEach(e -> {
+        DynamicResource resource = new DynamicResource();
+        resource.setDynamicId(contentDynamic.getId());
+        resource.setResourceKey(e.getResourceKey());
+        resource.setSort(e.getSort());
+        resource.setResourceFrame(e.getResourceFrame());
+        resources.add(resource);
+      });
+      contentDynamicResourceService.batchInsert(resources);
+    }
+    //异步处理审核
+    //contentAuditHelper.asyncContentHandle(contentDynamic);
+  }
+
+  /**
+   * 保存前的数据校验
+   */
+  private void addValidEntityBeforeSave(AddDynamicContentParam param) {
+    Integer type = param.getType().getValue();
+    List<AddDynamicResourceParam> list = param.getList();
+    if (DynamicContentType.PURE_TEXT.getValue().equals(type) &&
+        !StringUtils.isNotBlank(param.getTextContent())) {
+      throw new ResourceUnavailableException("动态不能为空");
+    } else if (DynamicContentType.PHOTO.getValue().equals(type) && list.size() > 9) {
+      throw new ResourceUnavailableException("动态照片不能超过9张");
+    } else if (DynamicContentType.VIDEO.getValue().equals(type) && list.size() != 1) {
+      throw new ResourceUnavailableException("视频只能发布一部");
+    }
+  }
+
+  @Override
+  @Transactional(rollbackFor = Exception.class)
+  public void deleteByIds(Long id, Long userId) {
+    DynamicContent DynamicContent = baseMapper.selectById(id);
+    if (DynamicContent == null || userId == null ||
+        !DynamicContent.getUserId().equals(userId)) {
+      throw new ResourceUnavailableException("动态删除失败");
+    }
+    boolean b = baseMapper.deleteById(id) > 0;
+    if (!b) {
+      throw new ResourceUnavailableException("动态删除失败");
+    }
+    LambdaQueryWrapper<DynamicComment> lwq = Wrappers.lambdaQuery();
+    lwq.eq(DynamicComment::getDynamicId, id);
+    //删除评论
+    dynamicCommentMapper.delete(lwq);
+  }
+
+  @Override
+  @Lock4j(keys = {"#dynamicId"})
+  public void addComment(Long dynamicId) {
+    int i = baseMapper.addComment(dynamicId);
+    if (i != 1) {
+      throw new ResourceUnavailableException("新增评论数失败");
+    }
+  }
+
+  @Override
+  @Lock4j(keys = {"#dynamicId"})
+  public void reduceComment(Long dynamicId, int num) {
+    int i = baseMapper.reduceComment(dynamicId, num);
+    if (i != 1) {
+      throw new ResourceUnavailableException("删除评论数失败");
+    }
+  }
+
+  @Override
+  @Lock4j(keys = {"#contentId"})
+  public void addNum(Integer dynamicStatus, Long contentId) {
+    if (Objects.equals(DynamicStatusType.GOOD.getValue(), dynamicStatus)) {
+      int i = baseMapper.addGoodNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("点赞失败");
+      }
+    } else if (Objects.equals(DynamicStatusType.BAD.getValue(), dynamicStatus)) {
+      int i = baseMapper.addBadNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("踩一踩失败");
+      }
+    }
+  }
+
+  @Override
+  @Lock4j(keys = {"#contentId"})
+  public void reduceNum(Integer dynamicStatus, Long contentId) {
+    if (Objects.equals(DynamicStatusType.GOOD.getValue(), dynamicStatus)) {
+      int i = baseMapper.reduceGoodNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("取消点赞失败");
+      }
+    } else if (Objects.equals(DynamicStatusType.BAD.getValue(), dynamicStatus)) {
+      int i = baseMapper.reduceBadNum(contentId);
+      if(i != 1){
+        throw new ResourceUnavailableException("取消踩一踩失败");
+      }
+    }
+  }
+
+  @Override
+  public void shieldById(Long id, Integer type) {
+    int i = baseMapper.shieldById(id, type);
+    if(i != 1){
+      throw new ResourceUnavailableException("操作失败");
+    }
+  }
+
+  @Override
+  @Transactional(rollbackFor = Exception.class)
+  public void shieldByUserId(Long userId, Integer type) {
+    baseMapper.shieldByUserId(userId, type);
+    dynamicCommentMapper.shieldByUserId(userId, type);
+  }
+
+  @Override
+  public void examine(Long id, ExamineType examine) {
+    LambdaUpdateWrapper<DynamicContent> lwq = Wrappers.lambdaUpdate();
+    lwq.eq(DynamicContent::getId, id);
+    lwq.set(DynamicContent::getExamineStatus, 1);
+    if(ExamineType.REFUSE.equals(examine)){
+      lwq.set(DynamicContent::getPlatformStatus, 1);
+    }
+    int update = baseMapper.update(null, lwq);
+    if(update != 1){
+      throw new ResourceUnavailableException("操作失败");
+    }
+  }
+
+  @Override
+  public void autoAudit(Long id, int platformStatus, int examineResult) {
+    LambdaUpdateWrapper<DynamicContent> lwq = Wrappers.lambdaUpdate();
+    lwq.set(DynamicContent::getPlatformStatus, platformStatus);
+    lwq.set(DynamicContent::getExamineStatus, 1);
+    lwq.set(DynamicContent::getExamineResult, examineResult);
+    lwq.set(DynamicContent::getUpdateTime, LocalDateTime.now());
+    lwq.eq(DynamicContent::getId, id);
+    int update = baseMapper.update(null, lwq);
+    if(update != 1){
+      throw new ResourceUnavailableException("自动审核失败");
+    }
+  }
+
+  @Override
+  public void videoAuditCallback(Map<String, Object> param) {
+    String suggestion = String.valueOf(param.get("Suggestion"));
+    Long dynamicId = Long.valueOf((String)param.get("DataId"));
+    if(suggestion == null){
+      return;
+    }
+    int platformStatus = 0;
+    int examineResult = 0;
+    if("Block".equals(suggestion)){
+      platformStatus = 1;
+      examineResult = 2;
+    } else if("Review".equals(suggestion)){
+      examineResult = 1;
+    }
+    autoAudit(dynamicId, platformStatus, examineResult);
+  }
+}

+ 126 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicEvaluateRecordServiceImpl.java

@@ -0,0 +1,126 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chelvc.cloud.vehicle.api.constant.ActionType;
+import com.chelvc.cloud.vehicle.api.constant.RecordType;
+import com.chelvc.cloud.vehicle.api.dto.DynamicEvaluateRecordDTO;
+import com.chelvc.cloud.vehicle.api.param.AddDynamicEvaluateRecordParam;
+import com.chelvc.cloud.vehicle.server.dao.DynamicEvaluateRecordMapper;
+import com.chelvc.cloud.vehicle.server.entity.DynamicEvaluateRecord;
+import com.chelvc.cloud.vehicle.server.service.DynamicCommentService;
+import com.chelvc.cloud.vehicle.server.service.DynamicContentService;
+import com.chelvc.cloud.vehicle.server.service.DynamicEvaluateRecordService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.util.BeanCopyUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @PACKAGE_NAME: net.yeeu.collision.dynamic.service.impl
+ * @NAME: DynamicEvaluateRecordServiceImpl
+ * @USER: igl
+ * @DATE: 2023/8/8 18:40
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class DynamicEvaluateRecordServiceImpl implements DynamicEvaluateRecordService {
+
+  private final DynamicEvaluateRecordMapper baseMapper;
+
+  private final DynamicContentService iDynamicContentService;
+
+  private final DynamicCommentService iDynamicCommentService;
+
+  private LambdaQueryWrapper<DynamicEvaluateRecord> buildAddWrapper(Long contentId, Long userId) {
+    LambdaQueryWrapper<DynamicEvaluateRecord> lqw = Wrappers.lambdaQuery();
+    lqw.eq(DynamicEvaluateRecord::getContentId, contentId);
+    lqw.eq(DynamicEvaluateRecord::getUserId, userId);
+    return lqw;
+  }
+
+  /**
+   * 新增内容评价(点赞/踩)列
+   */
+  @Override
+  @Transactional(rollbackFor = Exception.class)
+  public Boolean updateRecord(AddDynamicEvaluateRecordParam param, Long userId) {
+    Integer actionType = param.getActionType().getValue();
+    Integer recordType = param.getRecordType().getValue();
+    Integer dynamicStatusType = param.getDynamicStatusType().getValue();
+    LambdaQueryWrapper<DynamicEvaluateRecord> lqw =
+        buildAddWrapper(param.getContentId(), userId);
+    if(Objects.equals(ActionType.ADD.getValue(), actionType)){
+      //判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
+      executeWrapper(lqw, param, true, userId);
+      if (Objects.equals(RecordType.COMMENT.getValue(), recordType)) {
+        iDynamicCommentService.addNum(dynamicStatusType, param.getContentId());
+      } else if(Objects.equals(RecordType.DYNAMIC.getValue(), recordType)){
+        iDynamicContentService.addNum(dynamicStatusType, param.getContentId());
+      }
+    } else if (Objects.equals(ActionType.CANCEL.getValue(), actionType)) {
+      lqw.eq(DynamicEvaluateRecord::getOperaterType, dynamicStatusType);
+      //判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
+      executeWrapper(lqw, param, false, userId);
+      if (Objects.equals(RecordType.COMMENT.getValue(), recordType)) {
+        iDynamicCommentService.reduceNum(dynamicStatusType, param.getContentId());
+      } else if(Objects.equals(RecordType.DYNAMIC.getValue(), recordType)){
+        iDynamicContentService.reduceNum(dynamicStatusType, param.getContentId());
+      }
+    }
+    return true;
+  }
+
+  @Override
+  public DynamicEvaluateRecordDTO queryOperaterType(Long id, Long userId, Integer recordType) {
+    LambdaQueryWrapper<DynamicEvaluateRecord> lwq = Wrappers.lambdaQuery();
+    lwq.eq(DynamicEvaluateRecord::getContentId, id);
+    lwq.eq(DynamicEvaluateRecord::getUserId, userId);
+    lwq.eq(DynamicEvaluateRecord::getContentType, recordType);
+    lwq.orderByDesc(DynamicEvaluateRecord::getCreateTime);
+    List<DynamicEvaluateRecord> dynamicEvaluateRecordEntities = baseMapper.selectList(lwq);
+    if (dynamicEvaluateRecordEntities != null && dynamicEvaluateRecordEntities.size() > 0){
+      DynamicEvaluateRecord entity = dynamicEvaluateRecordEntities.get(0);
+      return BeanCopyUtil.copy(entity, DynamicEvaluateRecordDTO.class);
+    }
+    return null;
+  }
+
+  /**
+   * 判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
+   * @param lqw
+   * @param param
+   * @param b
+   */
+  public void executeWrapper(LambdaQueryWrapper<DynamicEvaluateRecord> lqw,
+      AddDynamicEvaluateRecordParam param, boolean b, Long userId){
+    DynamicEvaluateRecord DynamicEvaluateRecord = baseMapper.selectOne(lqw);
+    if(b){
+      if(DynamicEvaluateRecord != null){
+        throw new ResourceUnavailableException("处理失败");
+      }
+      DynamicEvaluateRecord contentEvaluateRecord = BeanCopyUtil.copy(param,
+          DynamicEvaluateRecord.class);
+      contentEvaluateRecord.setContentType(param.getRecordType().getValue());
+      contentEvaluateRecord.setOperaterType(param.getDynamicStatusType().getValue());
+      contentEvaluateRecord.setUserId(userId);
+      contentEvaluateRecord.setCreateTime(new Date());
+      baseMapper.insert(contentEvaluateRecord);
+    } else {
+      if(DynamicEvaluateRecord == null){
+        throw new ResourceUnavailableException("处理失败");
+      }
+      baseMapper.deleteByRecordId(DynamicEvaluateRecord.getId());
+    }
+    log.info("用户:[{}]{}{}{}",userId, param.getRecordType().getDesc(),
+        param.getActionType().getDesc(), param.getDynamicStatusType().getDesc());
+  }
+}

+ 49 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicResourceServiceImpl.java

@@ -0,0 +1,49 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chelvc.cloud.vehicle.api.dto.DynamicResourceDTO;
+import com.chelvc.cloud.vehicle.server.dao.DynamicResourceMapper;
+import com.chelvc.cloud.vehicle.server.entity.DynamicResource;
+import com.chelvc.cloud.vehicle.server.service.DynamicResourceService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.util.BeanCopyUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 动态文件Service业务层处理
+ *
+ * @author igl
+ * @date 2023-02-25
+ */
+@Service
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class DynamicResourceServiceImpl implements DynamicResourceService {
+
+    private final DynamicResourceMapper baseMapper;
+
+    @Override
+    public void batchInsert(List<DynamicResource> list) {
+        int b = baseMapper.insertBatchSomeColumn(list);
+        if(b != list.size()){
+            throw new ResourceUnavailableException("保存动态资源失败");
+        }
+    }
+
+    @Override
+    public List<DynamicResourceDTO> queryByDynamicId(Long dynamicId) {
+        LambdaQueryWrapper<DynamicResource> lqw = Wrappers.lambdaQuery();
+        lqw.eq(DynamicResource::getDynamicId, dynamicId);
+        lqw.orderByAsc(DynamicResource::getSort);
+        List<DynamicResource> list = baseMapper.selectList(lqw);
+        if(list == null || list.size() == 0){
+            return Collections.emptyList();
+        }
+        return BeanCopyUtil.copy(list, DynamicResourceDTO.class);
+    }
+}

+ 6 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HelpCategoryServiceImpl.java

@@ -1,13 +1,15 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.util.List;
-
 import com.chelvc.cloud.vehicle.server.dao.HelpCategoryMapper;
 import com.chelvc.cloud.vehicle.server.entity.HelpCategory;
 import com.chelvc.cloud.vehicle.server.service.IHelpCategoryService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 帮助分类Service业务层处理
  * 
@@ -15,10 +17,10 @@ import org.springframework.stereotype.Service;
  * @date 2023-11-08
  */
 @Service
+@RequiredArgsConstructor(onConstructor = @__({@Autowired, @Lazy}))
 public class HelpCategoryServiceImpl implements IHelpCategoryService
 {
-    @Autowired
-    private HelpCategoryMapper helpCategoryMapper;
+    private final HelpCategoryMapper helpCategoryMapper;
 
     /**
      * 查询帮助分类

+ 7 - 5
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HelpServiceImpl.java

@@ -1,14 +1,16 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.util.Date;
-import java.util.List;
-
 import com.chelvc.cloud.vehicle.server.dao.HelpMapper;
 import com.chelvc.cloud.vehicle.server.entity.Help;
 import com.chelvc.cloud.vehicle.server.service.IHelpService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 帮助Service业务层处理
  * 
@@ -16,10 +18,10 @@ import org.springframework.stereotype.Service;
  * @date 2023-11-08
  */
 @Service
+@RequiredArgsConstructor(onConstructor = @__({@Autowired, @Lazy}))
 public class HelpServiceImpl implements IHelpService
 {
-    @Autowired
-    private HelpMapper helpMapper;
+    private final HelpMapper helpMapper;
 
     /**
      * 查询帮助

+ 45 - 14
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderOperateHistoryServiceImpl.java

@@ -1,14 +1,21 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.util.Date;
-import java.util.List;
-
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.OmsOrderOperateHistoryDTO;
+import com.chelvc.cloud.vehicle.api.service.OmsOrderOperateHistoryService;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderOperateHistoryMapper;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderOperateHistory;
 import com.chelvc.cloud.vehicle.server.service.IOmsOrderOperateHistoryService;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.chelvc.framework.common.model.Pagination;
+import com.chelvc.framework.common.model.Paging;
+import com.chelvc.framework.common.util.BeanCopyUtil;
+import com.chelvc.framework.database.util.PagingUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 订单操作历史记录Service业务层处理
  * 
@@ -16,11 +23,9 @@ import org.springframework.stereotype.Service;
  * @date 2023-11-08
  */
 @Service
-public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistoryService
+public class OmsOrderOperateHistoryServiceImpl extends ServiceImpl<OmsOrderOperateHistoryMapper, OmsOrderOperateHistory>
+        implements IOmsOrderOperateHistoryService, OmsOrderOperateHistoryService
 {
-    @Autowired
-    private OmsOrderOperateHistoryMapper omsOrderOperateHistoryMapper;
-
     /**
      * 查询订单操作历史记录
      * 
@@ -30,7 +35,7 @@ public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistor
     @Override
     public OmsOrderOperateHistory selectOmsOrderOperateHistoryById(Long id)
     {
-        return omsOrderOperateHistoryMapper.selectOmsOrderOperateHistoryById(id);
+        return this.baseMapper.selectOmsOrderOperateHistoryById(id);
     }
 
     /**
@@ -42,7 +47,7 @@ public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistor
     @Override
     public List<OmsOrderOperateHistory> selectOmsOrderOperateHistoryList(OmsOrderOperateHistory omsOrderOperateHistory)
     {
-        return omsOrderOperateHistoryMapper.selectOmsOrderOperateHistoryList(omsOrderOperateHistory);
+        return this.baseMapper.selectOmsOrderOperateHistoryList(omsOrderOperateHistory);
     }
 
     /**
@@ -55,7 +60,7 @@ public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistor
     public int insertOmsOrderOperateHistory(OmsOrderOperateHistory omsOrderOperateHistory)
     {
         omsOrderOperateHistory.setCreateTime(new Date());
-        return omsOrderOperateHistoryMapper.insertOmsOrderOperateHistory(omsOrderOperateHistory);
+        return this.baseMapper.insertOmsOrderOperateHistory(omsOrderOperateHistory);
     }
 
     /**
@@ -67,7 +72,7 @@ public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistor
     @Override
     public int updateOmsOrderOperateHistory(OmsOrderOperateHistory omsOrderOperateHistory)
     {
-        return omsOrderOperateHistoryMapper.updateOmsOrderOperateHistory(omsOrderOperateHistory);
+        return this.baseMapper.updateOmsOrderOperateHistory(omsOrderOperateHistory);
     }
 
     /**
@@ -79,7 +84,7 @@ public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistor
     @Override
     public int deleteOmsOrderOperateHistoryByIds(Long[] ids)
     {
-        return omsOrderOperateHistoryMapper.deleteOmsOrderOperateHistoryByIds(ids);
+        return this.baseMapper.deleteOmsOrderOperateHistoryByIds(ids);
     }
 
     /**
@@ -91,6 +96,32 @@ public class OmsOrderOperateHistoryServiceImpl implements IOmsOrderOperateHistor
     @Override
     public int deleteOmsOrderOperateHistoryById(Long id)
     {
-        return omsOrderOperateHistoryMapper.deleteOmsOrderOperateHistoryById(id);
+        return this.baseMapper.deleteOmsOrderOperateHistoryById(id);
+    }
+
+    /**
+     * 根据用户查询订单通知信息
+     *
+     * @param userId 用户id
+     * @return 订单操作历史记录
+     */
+    @Override
+    public Pagination<OmsOrderOperateHistoryDTO> selectOmsOrderOperateHistoryListByUserId(Long userId, Paging paging) {
+        Page<OmsOrderOperateHistory> page = this.lambdaQuery()
+                .eq(OmsOrderOperateHistory::getUserId, userId)
+                .orderByAsc(OmsOrderOperateHistory::getCreateTime).page(PagingUtils.convert(paging));
+        List<OmsOrderOperateHistory> OmsOrderOperateHistories = page.getRecords();
+        List<OmsOrderOperateHistoryDTO> copy = BeanCopyUtil.copy(OmsOrderOperateHistories, OmsOrderOperateHistoryDTO.class);
+        return PagingUtils.convert(page, copy);
+    }
+
+    /**
+     * 将新订单通知标识更改
+     *
+     * @param userId 用户id
+     */
+    @Override
+    public void changeUserOrderInformFlag(Long userId) {
+        this.baseMapper.changeUserOrderInformFlag(userId);
     }
 }

+ 16 - 1
vehicle-server/src/main/resources/mapper/OmsOrderOperateHistoryMapper.xml

@@ -9,12 +9,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="orderId"    column="order_id"    />
         <result property="operateMan"    column="operate_man"    />
         <result property="createTime"    column="create_time"    />
+        <result property="userId"    column="user_id"    />
         <result property="orderStatus"    column="order_status"    />
+        <result property="flag"    column="flag"    />
         <result property="note"    column="note"    />
     </resultMap>
 
     <sql id="selectOmsOrderOperateHistoryVo">
-        select id, order_id, operate_man, create_time, order_status, note from oms_order_operate_history
+        select id, order_id, user_id, operate_man, create_time, order_status, flag, note from oms_order_operate_history
     </sql>
 
     <select id="selectOmsOrderOperateHistoryList" parameterType="com.chelvc.cloud.vehicle.server.entity.OmsOrderOperateHistory" resultMap="OmsOrderOperateHistoryResult">
@@ -72,4 +74,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectOmsOrderOperateHistoryListByUserId" parameterType="Long" resultType="com.chelvc.cloud.vehicle.api.dto.OmsOrderOperateHistoryDTO">
+        <include refid="selectOmsOrderOperateHistoryVo"/>
+        where user_id = #{userId}
+        order by create_time
+    </select>
+
+    <update id="changeUserOrderInformFlag" parameterType="Long">
+        update oms_order_operate_history
+        flag = 1
+        where user_id = #{userId}
+        and flag = 0
+    </update>
 </mapper>