From 323a9441df81982a7d6ffd724ebf5d31ded45c86 Mon Sep 17 00:00:00 2001
From: huangdeliang <huangdeliang@skieer.com>
Date: Mon, 28 Jun 2021 18:54:04 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=84=E8=AE=BA=E5=8A=9F?=
 =?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/custom/SysWapController.java   |  67 ++++++-
 .../custom/VideoWebInterfaceController.java   |   5 -
 .../stdiet/custom/domain/SysVideoComment.java | 101 ++++++++++
 .../custom/mapper/SysVideoCommentMapper.java  |  14 ++
 .../service/ISysNutritionalVideoService.java  |  22 +++
 .../impl/SysNutritionalVideoServiceImpl.java  | 178 ++++++++++++------
 .../mapper/custom/SysVideoCommentMapper.xml   | 140 ++++++++++++++
 7 files changed, 461 insertions(+), 66 deletions(-)
 create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoComment.java
 create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoCommentMapper.java
 create mode 100644 stdiet-custom/src/main/resources/mapper/custom/SysVideoCommentMapper.xml

diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWapController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWapController.java
index 245a5c895..48bb3ab96 100644
--- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWapController.java
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWapController.java
@@ -7,6 +7,7 @@ import com.stdiet.common.utils.DateUtils;
 import com.stdiet.common.utils.StringUtils;
 import com.stdiet.common.utils.sign.AesUtils;
 import com.stdiet.custom.domain.SysOrderPause;
+import com.stdiet.custom.domain.SysVideoComment;
 import com.stdiet.custom.domain.SysWxAdLog;
 import com.stdiet.custom.service.*;
 import com.stdiet.custom.utils.CookieUtils;
@@ -45,6 +46,9 @@ public class SysWapController extends BaseController {
     @Autowired
     ISysSmsConfirmServie iSysSmsConfirmServie;
 
+    @Autowired
+    ISysNutritionalVideoService iSysNutritionalVideoService;
+
 
     /**
      * 客户食谱详情
@@ -159,6 +163,12 @@ public class SysWapController extends BaseController {
         return AjaxResult.success();
     }
 
+    /**
+     * 获取验证码
+     *
+     * @param request
+     * @return
+     */
     @GetMapping(value = "/checkCookie")
     public AjaxResult checkCookie(HttpServletRequest request) {
         JSONObject resultObj = CookieUtils.checkCookieValida(request, "token");
@@ -169,6 +179,12 @@ public class SysWapController extends BaseController {
         }
     }
 
+    /**
+     * 验证码校验
+     *
+     * @param phone
+     * @return
+     */
     @GetMapping(value = "/getCode")
     public AjaxResult getCode(@RequestParam String phone) {
 
@@ -200,8 +216,6 @@ public class SysWapController extends BaseController {
             String tokenStr = phone + "_" + new Date().getTime() + "_" + RandomStringUtils.randomAlphanumeric(8);
             Cookie cookie = new Cookie("token", AesUtils.encrypt(tokenStr));
             cookie.setMaxAge(24 * 60 * 60);
-//            cookie.setSecure(true);
-//            cookie.setHttpOnly(true);
             cookie.setPath("/");
             response.addCookie(cookie);
             return new AjaxResult(20000, "登录成功");
@@ -214,4 +228,53 @@ public class SysWapController extends BaseController {
         }
     }
 
+    @GetMapping(value = "/video/comment")
+    public AjaxResult getVideoComment(SysVideoComment videoComment, HttpServletRequest request) {
+        JSONObject result = CookieUtils.checkCookieValida(request, "token");
+
+        String phone = result.getString("phone");
+        List<SysVideoComment> comments = iSysNutritionalVideoService.selectVideoCommentByTopicId(videoComment, phone == null ? "" : phone);
+
+        return AjaxResult.success(comments);
+    }
+
+    @PostMapping(value = "/video/post/comment")
+    public AjaxResult insertVideoComment(@RequestBody SysVideoComment videoComment, HttpServletRequest request) {
+        JSONObject result = CookieUtils.checkCookieValida(request, "token");
+        if (result.getInteger("code") != 200) {
+            return AjaxResult.error(result.getInteger("code"), result.getString("msg"));
+        }
+
+        videoComment.setFromUid(result.getString("phone"));
+        videoComment.setFromRole("phone");
+
+        SysVideoComment comment = iSysNutritionalVideoService.insertVideoComment(videoComment);
+
+        if (StringUtils.isNull(comment)) {
+            return AjaxResult.error();
+        }
+
+        return AjaxResult.success(comment);
+    }
+
+    @PostMapping(value = "/video/post/reply")
+    public AjaxResult insertVideoCommentReply(@RequestBody SysVideoComment videoComment, HttpServletRequest request) {
+        JSONObject result = CookieUtils.checkCookieValida(request, "token");
+        if (result.getInteger("code") != 200) {
+            return AjaxResult.error(result.getInteger("code"), result.getString("msg"));
+        }
+
+        videoComment.setFromUid(result.getString("phone"));
+        videoComment.setFromRole("phone");
+
+        SysVideoComment reply = iSysNutritionalVideoService.insertVideoCommentReply(videoComment);
+
+        if (StringUtils.isNull(reply)) {
+            return AjaxResult.error();
+        }
+
+        return AjaxResult.success(reply);
+    }
+
+
 }
diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/VideoWebInterfaceController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/VideoWebInterfaceController.java
index 321a436a8..0684885f0 100644
--- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/VideoWebInterfaceController.java
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/VideoWebInterfaceController.java
@@ -47,11 +47,6 @@ public class VideoWebInterfaceController extends BaseController {
 
         JSONObject result = CookieUtils.checkCookieValida(request, "token");
         if (result.getInteger("code") != 200) {
-//            TableDataInfo errInfo = new TableDataInfo();
-//            errInfo.setCode(result.getInteger("code"));
-//            errInfo.setMsg(result.getString("msg"));
-//            return errInfo;
-
             Cookie cookie = new Cookie("token", "");
             cookie.setMaxAge(24 * 60 * 60);
             cookie.setPath("/");
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoComment.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoComment.java
new file mode 100644
index 000000000..8921ebae5
--- /dev/null
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoComment.java
@@ -0,0 +1,101 @@
+package com.stdiet.custom.domain;
+
+import com.alibaba.fastjson.JSONArray;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class SysVideoComment {
+    /**
+     *
+     */
+    String id;
+
+    /**
+     * 问题id
+     */
+    String topicId;
+
+    /**
+     * 问题类型
+     */
+    Integer topicType;
+
+    String commentId;
+
+    String replyId;
+
+    Integer replyType;
+
+    /**
+     * 角色
+     */
+    String uid;
+
+    String fromUid;
+
+    String toUid;
+
+    /**
+     * 问题内容
+     */
+    String content;
+
+    /**
+     * 图片地址
+     */
+    JSONArray img;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    Date createTime;
+
+    /**
+     * 0-未读 1-已读
+     */
+    Integer read;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    Date updateTime;
+
+    /**
+     * 角色
+     */
+    String role;
+
+    String fromRole;
+
+    String toRole;
+
+    // 非持久化字段
+    /**
+     * 角色名字
+     */
+    String fromName;
+    String toName;
+    String name;
+
+    String avatar;
+    String fromAvatar;
+    String toAvatar;
+
+
+    List<SysVideoComment> comments;
+
+    List<SysVideoComment> replys;
+
+    Integer count;
+
+    Boolean owner;
+
+}
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoCommentMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoCommentMapper.java
new file mode 100644
index 000000000..34a66a7b0
--- /dev/null
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoCommentMapper.java
@@ -0,0 +1,14 @@
+package com.stdiet.custom.mapper;
+
+import com.stdiet.custom.domain.SysVideoComment;
+
+import java.util.List;
+
+public interface SysVideoCommentMapper {
+    List<SysVideoComment> selectVideoCommentByTopicId(SysVideoComment videoComment);
+
+    int insertVideoComment(SysVideoComment videoComment);
+
+    int insertVideoCommentReply(SysVideoComment videoComment);
+
+}
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java
index 09b96e8e3..1e57c4009 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java
@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.stdiet.custom.domain.SysNutritionalVideo;
 import com.stdiet.custom.domain.SysVideoClassify;
+import com.stdiet.custom.domain.SysVideoComment;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -89,4 +90,25 @@ public interface ISysNutritionalVideoService
      * @return
      */
     public int updateVideoPlayNum(String videoId);
+
+    /**
+     * 获取评论
+     * @param videoComment
+     * @return
+     */
+    public List<SysVideoComment> selectVideoCommentByTopicId(SysVideoComment videoComment, String phone);
+
+    /**
+     * 添加评论
+     * @param videoComment
+     * @return
+     */
+    public SysVideoComment insertVideoComment(SysVideoComment videoComment);
+
+    /**
+     * 添加回复
+     * @param videoComment
+     * @return
+     */
+    public SysVideoComment insertVideoCommentReply(SysVideoComment videoComment);
 }
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java
index 237f05cde..cb4544263 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java
@@ -1,22 +1,24 @@
 package com.stdiet.custom.service.impl;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.aliyun.vod20170321.models.SearchMediaResponse;
 import com.aliyun.vod20170321.models.SearchMediaResponseBody;
 import com.stdiet.common.utils.AliyunVideoUtils;
 import com.stdiet.common.utils.DateUtils;
 import com.stdiet.common.utils.StringUtils;
 import com.stdiet.common.utils.oss.AliyunOSSUtils;
+import com.stdiet.custom.domain.SysNutritionalVideo;
+import com.stdiet.custom.domain.SysVideoComment;
+import com.stdiet.custom.mapper.SysNutritionalVideoMapper;
+import com.stdiet.custom.mapper.SysVideoCommentMapper;
+import com.stdiet.custom.service.ISysNutritionalVideoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-import com.stdiet.custom.mapper.SysNutritionalVideoMapper;
-import com.stdiet.custom.domain.SysNutritionalVideo;
-import com.stdiet.custom.service.ISysNutritionalVideoService;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 营养视频Service业务层处理
@@ -25,11 +27,13 @@ import com.stdiet.custom.service.ISysNutritionalVideoService;
  * @date 2021-04-29
  */
 @Service
-public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoService
-{
+public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoService {
     @Autowired
     private SysNutritionalVideoMapper sysNutritionalVideoMapper;
 
+    @Autowired
+    private SysVideoCommentMapper sysVideoCommentMapper;
+
     /**
      * 查询营养视频
      *
@@ -37,8 +41,7 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 营养视频
      */
     @Override
-    public SysNutritionalVideo selectSysNutritionalVideoById(Long id)
-    {
+    public SysNutritionalVideo selectSysNutritionalVideoById(Long id) {
         return sysNutritionalVideoMapper.selectSysNutritionalVideoById(id);
     }
 
@@ -49,35 +52,34 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 营养视频
      */
     @Override
-    public List<SysNutritionalVideo> selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo, boolean flag)
-    {
+    public List<SysNutritionalVideo> selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo, boolean flag) {
         List<SysNutritionalVideo> list = sysNutritionalVideoMapper.selectSysNutritionalVideoList(sysNutritionalVideo);
-        if(flag && list != null && list.size() > 0){
+        if (flag && list != null && list.size() > 0) {
             List<String> fileUrl = new ArrayList<>();
             List<String> videoIdList = new ArrayList<>();
             for (SysNutritionalVideo video : list) {
-                if(StringUtils.isNotEmpty(video.getCoverUrl())){
+                if (StringUtils.isNotEmpty(video.getCoverUrl())) {
                     fileUrl.add(video.getCoverUrl());
-                }else{
+                } else {
                     videoIdList.add(video.getVideoId());
                 }
             }
-            if(fileUrl.size() > 0){
+            if (fileUrl.size() > 0) {
                 List<String> downUrlList = AliyunOSSUtils.generatePresignedUrl(fileUrl);
-                if(downUrlList != null && downUrlList.size() > 0){
+                if (downUrlList != null && downUrlList.size() > 0) {
                     int index = 0;
                     for (SysNutritionalVideo video : list) {
                         if (StringUtils.isNotEmpty(video.getCoverUrl())) {
                             video.setCoverUrl(downUrlList.get(index));
                             index++;
-                            if(index == downUrlList.size()){
+                            if (index == downUrlList.size()) {
                                 break;
                             }
                         }
                     }
                 }
             }
-            if(videoIdList.size() > 0) {
+            if (videoIdList.size() > 0) {
                 List<String> coverUrlList = AliyunVideoUtils.getVideoCoverUrl(videoIdList);
                 if (coverUrlList != null && coverUrlList.size() > 0) {
                     int index = 0;
@@ -85,7 +87,7 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
                         if (StringUtils.isEmpty(video.getCoverUrl())) {
                             video.setCoverUrl(coverUrlList.get(index));
                             index++;
-                            if(index == coverUrlList.size()){
+                            if (index == coverUrlList.size()) {
                                 break;
                             }
                         }
@@ -103,15 +105,14 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 结果
      */
     @Override
-    public int insertSysNutritionalVideo(SysNutritionalVideo sysNutritionalVideo)
-    {
+    public int insertSysNutritionalVideo(SysNutritionalVideo sysNutritionalVideo) {
         sysNutritionalVideo.setCreateTime(DateUtils.getNowDate());
         //判断封面是上传的还是阿里云视频截图封面
-        if(isSnapshot(sysNutritionalVideo.getCoverUrl())){
+        if (isSnapshot(sysNutritionalVideo.getCoverUrl())) {
             //更新阿里云视频封面
-            try{
+            try {
                 AliyunVideoUtils.updateVideoCoverUrl(sysNutritionalVideo.getVideoId(), sysNutritionalVideo.getCoverUrl());
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
                 return 0;
             }
@@ -127,15 +128,14 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 结果
      */
     @Override
-    public int updateSysNutritionalVideo(SysNutritionalVideo sysNutritionalVideo)
-    {
+    public int updateSysNutritionalVideo(SysNutritionalVideo sysNutritionalVideo) {
         sysNutritionalVideo.setUpdateTime(DateUtils.getNowDate());
         sysNutritionalVideo.setCoverUrl(sysNutritionalVideo.getCoverUrl() == null ? "" : sysNutritionalVideo.getCoverUrl());
         String coverUrl = sysNutritionalVideo.getCoverUrl();
         //判断封面是上传的还是阿里云视频截图封面
         sysNutritionalVideo.setCoverUrl(isSnapshot(coverUrl) ? "" : coverUrl);
         int row = sysNutritionalVideoMapper.updateSysNutritionalVideo(sysNutritionalVideo);
-        if(row > 0){
+        if (row > 0) {
             sysNutritionalVideo.setCoverUrl(isSnapshot(coverUrl) ? coverUrl : null);
             updateAliyunVideo(sysNutritionalVideo);
         }
@@ -143,12 +143,12 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
     }
 
     @Async
-    public void updateAliyunVideo(SysNutritionalVideo sysNutritionalVideo){
-        try{
-            if(sysNutritionalVideo != null && sysNutritionalVideo.getVideoId() != null){
+    public void updateAliyunVideo(SysNutritionalVideo sysNutritionalVideo) {
+        try {
+            if (sysNutritionalVideo != null && sysNutritionalVideo.getVideoId() != null) {
                 AliyunVideoUtils.updateVideo(sysNutritionalVideo.getVideoId(), sysNutritionalVideo.getTitle(), sysNutritionalVideo.getTags(), sysNutritionalVideo.getDescription(), null, sysNutritionalVideo.getCoverUrl());
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
@@ -160,10 +160,9 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 结果
      */
     @Override
-    public int deleteSysNutritionalVideoByIds(Long[] ids)
-    {
+    public int deleteSysNutritionalVideoByIds(Long[] ids) {
         int row = sysNutritionalVideoMapper.deleteSysNutritionalVideoByIds(ids);
-        if(row > 0){
+        if (row > 0) {
             updateAliyunVideoCateId(ids);
         }
         return row;
@@ -176,10 +175,9 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 结果
      */
     @Override
-    public int deleteSysNutritionalVideoById(Long id)
-    {
+    public int deleteSysNutritionalVideoById(Long id) {
         int row = sysNutritionalVideoMapper.deleteSysNutritionalVideoById(id);
-        if(row > 0){
+        if (row > 0) {
             Long[] ids = {id};
             updateAliyunVideoCateId(ids);
         }
@@ -188,30 +186,32 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
 
     /**
      * 获取视频
+     *
      * @param videoId
      * @return
      */
-    public SysNutritionalVideo selectSysNutritionalVideByVideoId(String videoId){
+    public SysNutritionalVideo selectSysNutritionalVideByVideoId(String videoId) {
         return sysNutritionalVideoMapper.selectSysNutritionalVideByVideoId(videoId);
     }
 
     /**
      * 阿里云视频查询检索
+     *
      * @return
      */
-    public Map<String,Object> searchVideo(String key, Integer showFlag, Integer pageNo, Integer pageSize, String scrollToken){
+    public Map<String, Object> searchVideo(String key, Integer showFlag, Integer pageNo, Integer pageSize, String scrollToken) {
         pageSize = pageSize.intValue() > 100 ? 10 : pageSize;
         long total = 0;
         String newScrollToken = null;
         List<SysNutritionalVideo> nutritionalVideoList = new ArrayList<>();
         try {
             SearchMediaResponse response = AliyunVideoUtils.searchVideo(key, getStatusString(showFlag), pageNo, pageSize, scrollToken);
-            if(response != null){
-                SearchMediaResponseBody body  = response.body;
+            if (response != null) {
+                SearchMediaResponseBody body = response.body;
                 total = body.total;
                 newScrollToken = body.scrollToken;
                 List<SearchMediaResponseBody.SearchMediaResponseBodyMediaList> mediaList = body.mediaList;
-                if(mediaList != null && mediaList.size() > 0){
+                if (mediaList != null && mediaList.size() > 0) {
                     for (SearchMediaResponseBody.SearchMediaResponseBodyMediaList media : mediaList) {
                         SysNutritionalVideo sysNutritionalVideo = new SysNutritionalVideo();
                         sysNutritionalVideo.setTitle(media.video.title);
@@ -225,7 +225,7 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
                     }
                 }
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         Map<String, Object> result = new HashMap<>();
@@ -235,65 +235,125 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
         return result;
     }
 
-    private String getStatusString(Integer status){
-        if(status == null){
+    private String getStatusString(Integer status) {
+        if (status == null) {
             return "Normal,Blocked";
         }
         return status.intValue() == 1 ? "Normal" : "Blocked";
     }
 
-    private Integer getStatus(String status){
-        if(status == null){
+    private Integer getStatus(String status) {
+        if (status == null) {
             return 1;
         }
-        return "Normal".equals(status) ? 1 :  0;
+        return "Normal".equals(status) ? 1 : 0;
     }
 
     /**
      * 更新微信展示状态
+     *
      * @param wxShow
      * @param ids
      * @return
      */
-    public int updateWxshowByIds(Integer wxShow, Long[] ids){
+    public int updateWxshowByIds(Integer wxShow, Long[] ids) {
         return sysNutritionalVideoMapper.updateWxshowByIds(wxShow, ids);
     }
 
     /**
      * 将删除的阿里云视频放入回收站
+     *
      * @param ids
      */
     @Async
-    public void updateAliyunVideoCateId(Long[] ids){
+    public void updateAliyunVideoCateId(Long[] ids) {
         try {
             List<String> videoIdList = sysNutritionalVideoMapper.getVideoIdByIds(ids);
-            if(videoIdList != null && videoIdList.size() > 0){
+            if (videoIdList != null && videoIdList.size() > 0) {
                 for (String videoId : videoIdList) {
                     AliyunVideoUtils.delVideo(videoId);
                 }
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
     /**
      * 更新视频播放量
+     *
      * @return
      */
-    public int updateVideoPlayNum(String videoId){
+    public int updateVideoPlayNum(String videoId) {
         return sysNutritionalVideoMapper.updateVideoPlayNum(videoId);
     }
 
+    @Override
+    public List<SysVideoComment> selectVideoCommentByTopicId(SysVideoComment videoComment, String uid) {
+        List<SysVideoComment> comments = sysVideoCommentMapper.selectVideoCommentByTopicId(videoComment);
+        for (SysVideoComment comment : comments) {
+            if(comment.getFromUid().equals(uid)){
+                comment.setOwner(true);
+            } else {
+                comment.setOwner(false);
+            }
+            if (comment.getFromRole().equals("phone")) {
+                comment.setFromUid(StringUtils.hiddenPhoneNumber(comment.getFromUid()));
+            }
+            if (comment.getToRole().equals("phone")) {
+                comment.setToUid(StringUtils.hiddenPhoneNumber(comment.getToUid()));
+            }
+            List<SysVideoComment> replys = comment.getReplys();
+            for (SysVideoComment reply : replys) {
+                if(reply.getFromUid().equals(uid)){
+                    reply.setOwner(true);
+                } else {
+                    reply.setOwner(false);
+                }
+                if (reply.getFromRole().equals("phone")) {
+                    reply.setFromUid(StringUtils.hiddenPhoneNumber(reply.getFromUid()));
+                }
+                if (reply.getToRole().equals("phone")) {
+                    reply.setToUid(StringUtils.hiddenPhoneNumber(reply.getToUid()));
+                }
+            }
+        }
+        return comments;
+    }
+
+    @Override
+    public SysVideoComment insertVideoComment(SysVideoComment videoComment) {
+        String uuid = java.util.UUID.randomUUID().toString().replace("-", "");
+        videoComment.setId(uuid);
+        int rows = sysVideoCommentMapper.insertVideoComment(videoComment);
+        if (rows > 0) {
+            return videoComment;
+        }
+        return null;
+    }
+
+    @Override
+    public SysVideoComment insertVideoCommentReply(SysVideoComment videoComment) {
+        String id = java.util.UUID.randomUUID().toString().replace("-", "");
+        videoComment.setId(id);
+        String uuid = java.util.UUID.randomUUID().toString().replace("-", "");
+        videoComment.setReplyId(uuid);
+        int rows = sysVideoCommentMapper.insertVideoCommentReply(videoComment);
+        if (rows > 0) {
+            return videoComment;
+        }
+        return null;
+    }
+
     /**
      * 判断是否为阿里点播的截图
+     *
      * @param url
      * @return
      */
-    private boolean isSnapshot(String url){
-       return StringUtils.isNotEmpty(url) && url.startsWith("http://outin");
+    private boolean isSnapshot(String url) {
+        return StringUtils.isNotEmpty(url) && url.startsWith("http://outin");
     }
 
 
-
 }
\ No newline at end of file
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysVideoCommentMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysVideoCommentMapper.xml
new file mode 100644
index 000000000..b07635c84
--- /dev/null
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysVideoCommentMapper.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stdiet.custom.mapper.SysVideoCommentMapper">
+
+    <resultMap id="SysVideoCommentResult" type="SysVideoComment">
+        <result column="id" property="id"/>
+        <result column="topic_id" property="topicId"/>
+        <result column="content" property="content"/>
+        <result column="from_uid" property="fromUid"/>
+        <result column="from_role" property="fromRole"/>
+        <result column="to_uid" property="toUid"/>
+        <result column="to_role" property="toRole"/>
+<!--        <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/>-->
+        <result column="create_time" property="createTime"/>
+<!--        <association property="fromName" column="{uid=from_uid,role=from_role}" select="selectUserInfo"/>-->
+<!--        <association property="fromAvatar" column="{uid=from_uid,role=from_role}" select="selectUserAvatar"/>-->
+<!--        <association property="toName" column="{uid=to_uid,role=to_role}" select="selectUserInfo"/>-->
+        <association property="replys" column="id"
+                     select="selectVideoCommentReplyByCommentId"/>
+    </resultMap>
+
+    <resultMap id="SysVideoCommentReplyResult" type="SysVideoComment">
+        <result column="id" property="id"/>
+        <result column="topic_id" property="topicId"/>
+        <result column="comment_id" property="commentId"/>
+        <result column="content" property="content"/>
+        <result column="from_uid" property="fromUid"/>
+        <result column="from_role" property="fromRole"/>
+        <result column="to_uid" property="toUid"/>
+        <result column="to_role" property="toRole"/>
+        <result column="reply_id" property="replyId"/>
+<!--        <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/>-->
+        <result column="create_time" property="createTime"/>
+<!--        <association property="fromName" column="{uid=from_uid,role=from_role}" select="selectUserInfo"/>-->
+<!--        <association property="fromAvatar" column="{uid=from_uid,role=from_role}" select="selectUserAvatar"/>-->
+<!--        <association property="toName" column="{uid=to_uid,role=to_role}" select="selectUserInfo"/>-->
+        <!--        <association property="toAvatar" column="{uid=to_uid,role=to_role}" select="selectUserAvatar"/>-->
+    </resultMap>
+
+    <select id="selectVideoCommentByTopicId" resultMap="SysVideoCommentResult">
+        select * from sys_nutritional_video_comment where topic_id = #{topicId}  and del_flag = 0
+        order by create_time asc
+    </select>
+
+    <select id="selectVideoCommentReplyByCommentId" resultMap="SysVideoCommentReplyResult">
+        select * from sys_nutritional_video_reply where comment_id = #{id} and del_flag = 0
+        order by create_time asc
+    </select>
+
+    <!--    查询人名-->
+    <select id="selectUserInfo" parameterType="java.util.Map" resultType="String">
+        <choose>
+            <when test="_parameter.get('role') == 'customer'">
+                select name from sys_customer where id = #{uid}
+            </when>
+            <otherwise>
+                select nick_name from sys_user where user_id = #{uid}
+            </otherwise>
+        </choose>
+    </select>
+
+    <!--    查询头像-->
+    <select id="selectUserAvatar" parameterType="java.util.Map" resultType="String">
+        <choose>
+            <when test="_parameter.get('role') == 'customer'">
+                select avatar_url from sys_wx_user_info where cus_id = #{uid}
+            </when>
+            <otherwise>
+                select IF(avatar != '', CONCAT("https://api.stdiet.top/prod-api", avatar), '') as avatar from sys_user
+                where user_id = #{uid}
+            </otherwise>
+        </choose>
+    </select>
+
+
+    <!--    插入问题回复-->
+    <insert id="insertVideoComment" parameterType="SysVideoComment">
+        insert into sys_nutritional_video_comment
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="topicId != null">topic_id,</if>
+            <if test="fromUid != null">from_uid,</if>
+            <if test="fromRole != null">from_role,</if>
+            <if test="toUid != null">to_uid,</if>
+            <if test="toRole != null">to_role,</if>
+            <if test="content != null">content,</if>
+            <if test="img != null">img,</if>
+            <if test="topicId != null">create_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="topicId != null">#{topicId},</if>
+            <if test="fromUid != null">#{fromUid},</if>
+            <if test="fromRole != null">#{fromRole},</if>
+            <if test="toUid != null">#{toUid},</if>
+            <if test="toRole != null">#{toRole},</if>
+            <if test="content != null">#{content},</if>
+            <if test="img != null">
+                #{img,  jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler},
+            </if>
+            <if test="topicId != null">now(),</if>
+        </trim>
+    </insert>
+
+    <!--    插入问题回复-->
+    <insert id="insertVideoCommentReply" parameterType="SysVideoComment" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        insert into sys_nutritional_video_reply
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="commentId != null">comment_id,</if>
+            <if test="replyId != null">reply_id,</if>
+            <if test="content != null">content,</if>
+            <if test="fromUid != null">from_uid,</if>
+            <if test="toUid != null">to_uid,</if>
+            <if test="img != null">img,</if>
+            <if test="fromRole != null">from_role,</if>
+            <if test="toRole != null">to_role,</if>
+            <if test="content != null">create_time,</if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="commentId != null">#{commentId},</if>
+            <if test="replyId != null">#{replyId},</if>
+            <if test="content != null">#{content},</if>
+            <if test="fromUid != null">#{fromUid},</if>
+            <if test="toUid != null">#{toUid},</if>
+            <if test="img != null">
+                #{img,  jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler},
+            </if>
+            <if test="fromRole != null">#{fromRole},</if>
+            <if test="toRole != null">#{toRole},</if>
+            <if test="content != null">now(),</if>
+        </trim>
+    </insert>
+
+</mapper>
\ No newline at end of file