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 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 comments; + + List 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 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 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 selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo, boolean flag) - { + public List selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo, boolean flag) { List list = sysNutritionalVideoMapper.selectSysNutritionalVideoList(sysNutritionalVideo); - if(flag && list != null && list.size() > 0){ + if (flag && list != null && list.size() > 0) { List fileUrl = new ArrayList<>(); List 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 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 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 searchVideo(String key, Integer showFlag, Integer pageNo, Integer pageSize, String scrollToken){ + public Map searchVideo(String key, Integer showFlag, Integer pageNo, Integer pageSize, String scrollToken) { pageSize = pageSize.intValue() > 100 ? 10 : pageSize; long total = 0; String newScrollToken = null; List 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 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 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 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 selectVideoCommentByTopicId(SysVideoComment videoComment, String uid) { + List 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 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into sys_nutritional_video_comment + + id, + topic_id, + from_uid, + from_role, + to_uid, + to_role, + content, + img, + create_time, + + + #{id}, + #{topicId}, + #{fromUid}, + #{fromRole}, + #{toUid}, + #{toRole}, + #{content}, + + #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, + + now(), + + + + + + insert into sys_nutritional_video_reply + + id, + comment_id, + reply_id, + content, + from_uid, + to_uid, + img, + from_role, + to_role, + create_time, + + + + #{id}, + #{commentId}, + #{replyId}, + #{content}, + #{fromUid}, + #{toUid}, + + #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, + + #{fromRole}, + #{toRole}, + now(), + + + + \ No newline at end of file