From 2033e4cb436e4897af4a2956592e52d6b059ef54 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Fri, 7 May 2021 18:37:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=88=97=E8=A1=A8=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/SysNutritionalVideoController.java | 9 +- .../custom/WechatAppletController.java | 38 ++- .../stdiet/common/utils/AliyunVideoUtils.java | 48 +++ .../custom/domain/SysNutritionalVideo.java | 7 + .../response/NutritionalVideoResponse.java | 2 + .../mapper/SysNutritionalVideoMapper.java | 13 + .../service/ISysNutritionalVideoService.java | 7 + .../impl/SysNutritionalVideoServiceImpl.java | 60 +++- .../custom/SysNutritionalVideoMapper.xml | 28 +- .../src/components/UploadVideo/index.vue | 28 +- .../views/custom/nutritionQuestion/index.vue | 3 +- .../views/custom/nutritionalVideo/index.vue | 43 ++- .../src/views/custom/videoClassify/index.vue | 275 ++++++++++++++++++ 13 files changed, 514 insertions(+), 47 deletions(-) create mode 100644 stdiet-ui/src/views/custom/videoClassify/index.vue diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java index a9481895b..5600daf3a 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java @@ -38,14 +38,8 @@ public class SysNutritionalVideoController extends BaseController @GetMapping("/list") public TableDataInfo list(SysNutritionalVideo sysNutritionalVideo) { - /*AjaxResult result = AjaxResult.success(); - Map map = sysNutritionalVideoService.searchVideo(sysNutritionalVideo.getKey(), sysNutritionalVideo.getShowFlag(), pageNum, pageSize, null); - if(map != null){ - result.put("total", map.get("total")); - result.put("rows", map.get("nutritionalVideoList")); - } - return result;*/ startPage(); + sysNutritionalVideo.setSortType(1); List list = sysNutritionalVideoService.selectSysNutritionalVideoList(sysNutritionalVideo, true); return getDataTable(list); } @@ -72,7 +66,6 @@ public class SysNutritionalVideoController extends BaseController @PostMapping public AjaxResult add(@RequestBody SysNutritionalVideo sysNutritionalVideo) { - sysNutritionalVideo.setShowFlag(1); return toAjax(sysNutritionalVideoService.insertSysNutritionalVideo(sysNutritionalVideo)); } diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java index e478d010f..6b0b9ceaa 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java @@ -367,13 +367,9 @@ public class WechatAppletController extends BaseController { */ @GetMapping(value = "/getVideoList") public TableDataInfo getVideoList(SysNutritionalVideo sysNutritionalVideo) { - /* AjaxResult result = AjaxResult.success(); - Map map = sysNutritionalVideoService.searchVideo(sysNutritionalVideo.getKey(), 1, pageNum, pageSize, null); - result.put("total", map.get("total")); - result.put("rows", map.get("nutritionalVideoList")); - return result;*/ startPage(); sysNutritionalVideo.setShowFlag(1); + sysNutritionalVideo.setSortType(2); List list = sysNutritionalVideoService.selectSysNutritionalVideoList(sysNutritionalVideo, true); return getDataTable(list); } @@ -387,20 +383,34 @@ public class WechatAppletController extends BaseController { AjaxResult result = AjaxResult.success(); NutritionalVideoResponse nutritionalVideoResponse = new NutritionalVideoResponse(); try{ - GetPlayInfoResponseBody playInfoResponseBody = AliyunVideoUtils.getVideoVisitDetail(videoId); - GetVideoInfoResponseBody videoInfoResponseBody = AliyunVideoUtils.getVideoById(videoId); - List playList = playInfoResponseBody.playInfoList.playInfo; - if(playList != null && playList.size() > 0){ - nutritionalVideoResponse.setPlayUrl(playList.get(0).getPlayURL()); + SysNutritionalVideo sysNutritionalVideo = sysNutritionalVideoService.selectSysNutritionalVideByVideoId(videoId); + if(sysNutritionalVideo != null){ + GetPlayInfoResponseBody playInfoResponseBody = AliyunVideoUtils.getVideoVisitDetail(videoId); + List playList = playInfoResponseBody.playInfoList.playInfo; + if(playList != null && playList.size() > 0){ + nutritionalVideoResponse.setPlayUrl(playList.get(0).getPlayURL()); + } + nutritionalVideoResponse.setDescription(sysNutritionalVideo.getDescription()); + nutritionalVideoResponse.setTags(sysNutritionalVideo.getTags()); + nutritionalVideoResponse.setTitle(sysNutritionalVideo.getTitle()); + nutritionalVideoResponse.setPlayNum(sysNutritionalVideo.getPlayNum()); } - nutritionalVideoResponse.setDescription(videoInfoResponseBody.video.getDescription()); - nutritionalVideoResponse.setTags(videoInfoResponseBody.video.getTags()); - nutritionalVideoResponse.setTitle(videoInfoResponseBody.video.getTitle()); - //nutritionalVideoResponse.setCreateTime(sysNutritionalVideo.getCreateTime() == null ? "" : DateUtils.dateTime(sysNutritionalVideo.getCreateTime())); }catch (Exception e){ e.printStackTrace(); } result.put("videoDetail", nutritionalVideoResponse); return result; } + + /** + * 更新播放次数 + */ + @GetMapping(value = "/updateVideoPlayNum") + public AjaxResult updateVideoPlayNum(@RequestParam(value = "videoId") String videoId) { + AjaxResult result = AjaxResult.error(); + if(sysNutritionalVideoService.updateVideoPlayNum(videoId) > 0){ + result = AjaxResult.success(); + } + return result; + } } diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java index 5219d57f4..d131b9490 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java @@ -19,6 +19,9 @@ public class AliyunVideoUtils { //播放地址日期,30天 public static final Long default_authTimeout = 2592000L; + //阿里云回收站分类ID + public static final Long default_delete_cateId = 1860L; + public static final String search_field = "VideoId,Title,CoverURL,CateName,Tags,Status,Description,CreationTime"; /** @@ -154,6 +157,51 @@ public class AliyunVideoUtils { return client.searchMedia(searchMediaRequest); } + /** + * 更新视频消息 + * @param videoId 视频ID必须 + * @param title + * @param tags + * @param description + * @param cateId + * @return + * @throws Exception + */ + public static String updateVideo(String videoId, String title, String tags, String description, Long cateId) throws Exception{ + com.aliyun.vod20170321.Client client = AliyunVideoUtils.createClient(); + if(StringUtils.isEmpty(videoId)){ + return null; + } + UpdateVideoInfoRequest updateVideoInfoRequest = new UpdateVideoInfoRequest().setVideoId(videoId); + if(StringUtils.isNotEmpty(title)){ + updateVideoInfoRequest.setTitle(title); + } + if(StringUtils.isNotEmpty(tags)){ + updateVideoInfoRequest.setTags(tags); + } + if(StringUtils.isNotEmpty(description)){ + updateVideoInfoRequest.setDescription(description); + } + if(cateId != null && cateId.longValue() > 0){ + updateVideoInfoRequest.setCateId(cateId); + } + UpdateVideoInfoResponse updateVideoInfoResponse = client.updateVideoInfo(updateVideoInfoRequest); + if(updateVideoInfoResponse != null){ + return updateVideoInfoResponse.body.requestId; + } + return null; + } + + /** + * 将视频分类到回收站中 + * @param videoId + * @return + * @throws Exception + */ + public static String delVideo(String videoId) throws Exception{ + return updateVideo(videoId, null,null,null, default_delete_cateId); + } + diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java index 650fc3425..2cf25618e 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java @@ -65,6 +65,10 @@ public class SysNutritionalVideo extends BaseEntity private String payLevelName; + /** 播放次数,默认0 */ + @Excel(name = "播放次数,默认0") + private Integer playNum; + /** 删除标识,0未删除 1已删除,默认0 */ private Integer delFlag; @@ -72,4 +76,7 @@ public class SysNutritionalVideo extends BaseEntity private String fileName; private String key; + + //排序方式 1 按照创建时间倒序 2按照优先级、时间倒序 + private Integer sortType; } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java index 290cca9aa..36bb1cd5d 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java @@ -33,6 +33,8 @@ public class NutritionalVideoResponse implements Serializable { //播放链接 public String playUrl; + //播放量 + private Integer playNum; public String createTime; diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java index 69d05035a..1fd6a2670 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java @@ -75,4 +75,17 @@ public interface SysNutritionalVideoMapper * @return */ public int updateWxshowByIds(@Param("wxShow")Integer wxShow, @Param("array") Long[] ids); + + /** + * 查询阿里云的视频ID,包含已删除的 + * @param ids + * @return + */ + public List getVideoIdByIds(@Param("array") Long[] ids); + + /** + * 更新视频播放量 + * @return + */ + public int updateVideoPlayNum(@Param("videoId")String videoId); } \ No newline at end of file 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 392469886..b288333b0 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 @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import com.stdiet.custom.domain.SysNutritionalVideo; +import org.apache.ibatis.annotations.Param; /** * 营养视频Service接口 @@ -81,4 +82,10 @@ public interface ISysNutritionalVideoService * @return */ public int updateWxshowByIds(Integer wxShow, Long[] ids); + + /** + * 更新视频播放量 + * @return + */ + public int updateVideoPlayNum(String videoId); } \ 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 328db2bf7..a8d3f4945 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 @@ -11,6 +11,7 @@ import com.stdiet.common.utils.AliyunVideoUtils; import com.stdiet.common.utils.DateUtils; import com.stdiet.common.utils.oss.AliyunOSSUtils; 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; @@ -90,7 +91,23 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi public int updateSysNutritionalVideo(SysNutritionalVideo sysNutritionalVideo) { sysNutritionalVideo.setUpdateTime(DateUtils.getNowDate()); - return sysNutritionalVideoMapper.updateSysNutritionalVideo(sysNutritionalVideo); + int row = sysNutritionalVideoMapper.updateSysNutritionalVideo(sysNutritionalVideo); + if(row > 0){ + updateAliyunVideo(sysNutritionalVideo.getId()); + } + return row; + } + + @Async + public void updateAliyunVideo(Long id){ + try{ + SysNutritionalVideo sysNutritionalVideo = selectSysNutritionalVideoById(id); + if(sysNutritionalVideo != null && sysNutritionalVideo.getVideoId() != null){ + AliyunVideoUtils.updateVideo(sysNutritionalVideo.getVideoId(), sysNutritionalVideo.getTitle(), sysNutritionalVideo.getTags(), sysNutritionalVideo.getDescription(), null); + } + }catch (Exception e){ + e.printStackTrace(); + } } /** @@ -102,7 +119,11 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi @Override public int deleteSysNutritionalVideoByIds(Long[] ids) { - return sysNutritionalVideoMapper.deleteSysNutritionalVideoByIds(ids); + int row = sysNutritionalVideoMapper.deleteSysNutritionalVideoByIds(ids); + if(row > 0){ + updateAliyunVideoCateId(ids); + } + return row; } /** @@ -114,7 +135,12 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi @Override public int deleteSysNutritionalVideoById(Long id) { - return sysNutritionalVideoMapper.deleteSysNutritionalVideoById(id); + int row = sysNutritionalVideoMapper.deleteSysNutritionalVideoById(id); + if(row > 0){ + Long[] ids = {id}; + updateAliyunVideoCateId(ids); + } + return row; } /** @@ -187,7 +213,33 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi * @return */ public int updateWxshowByIds(Integer wxShow, Long[] ids){ - return sysNutritionalVideoMapper. updateWxshowByIds(wxShow, ids); + return sysNutritionalVideoMapper.updateWxshowByIds(wxShow, ids); + } + + /** + * 将删除的阿里云视频放入回收站 + * @param ids + */ + @Async + public void updateAliyunVideoCateId(Long[] ids){ + try { + List videoIdList = sysNutritionalVideoMapper.getVideoIdByIds(ids); + if(videoIdList != null && videoIdList.size() > 0){ + for (String videoId : videoIdList) { + AliyunVideoUtils.delVideo(videoId); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 更新视频播放量 + * @return + */ + public int updateVideoPlayNum(String videoId){ + return sysNutritionalVideoMapper.updateVideoPlayNum(videoId); } } \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml index 93e63a112..3d523409d 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml @@ -16,6 +16,7 @@ + @@ -27,11 +28,11 @@ - select id, cate_id, video_id, cover_url, title, description, priority_level,pay_level,video_size, tags, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutritional_video + select id, cate_id, video_id, cover_url, title, description, priority_level,pay_level,play_num,video_size, tags, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutritional_video + select video_id from sys_nutritional_video where id in + + #{id} + + + + + + update sys_nutritional_video set play_num = play_num + 1 where video_id = #{videoId} and del_flag = 0 + + \ No newline at end of file diff --git a/stdiet-ui/src/components/UploadVideo/index.vue b/stdiet-ui/src/components/UploadVideo/index.vue index 8c2839191..5865fb7d9 100644 --- a/stdiet-ui/src/components/UploadVideo/index.vue +++ b/stdiet-ui/src/components/UploadVideo/index.vue @@ -5,7 +5,7 @@ { + /*getAllClassify().then(response => { if(response.code == 200){ this.classifyList = response.data; + if(response.data != null && response.data.length > 0){ + this.defaultClassify = response.data[0].id; + } } - }); + });*/ this.getDicts("video_pay_level").then((response) => { this.payVideoLevelList = response.data; + if(response.data != null && response.data.length > 0){ + this.defaultPayLevel = response.data[0].dictValue; + } }); }, @@ -136,22 +144,26 @@ UploadFile }, methods: { - showDialog(callback){ + showDialog(classifyList, callback){ this.resetVideoFrom(); this.open = true; this.callback = callback; + this.classifyList = classifyList; + if(classifyList != null && classifyList.length > 0){ + this.defaultClassify = classifyList[0].id; + } }, handleCoverUrl(url){ this.videoFrom.coverUrl = url; }, resetVideoFrom(){ this.videoFrom = { - cateId: null, + cateId: this.defaultClassify ? this.defaultClassify : null, coverUrl: null, title: null, description: null, tags: null, - payLevel: 0, + payLevel: this.defaultPayLevel ? parseInt(this.defaultPayLevel) : null, videoId: null, wxShow: false }; diff --git a/stdiet-ui/src/views/custom/nutritionQuestion/index.vue b/stdiet-ui/src/views/custom/nutritionQuestion/index.vue index d6d66c384..a417ab732 100644 --- a/stdiet-ui/src/views/custom/nutritionQuestion/index.vue +++ b/stdiet-ui/src/views/custom/nutritionQuestion/index.vue @@ -3,7 +3,7 @@ 问题解答 diff --git a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue index 72729af36..5b2d6fc59 100644 --- a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue +++ b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue @@ -3,7 +3,7 @@ 删除 + + 视频分类管理 + + + + @@ -219,6 +233,7 @@ import {getAllClassify } from "@/api/custom/videoClassify"; import UploadVideo from "@/components/UploadVideo"; import UploadFile from "@/components/FileUpload/UploadFile"; + import VideoClassify from "../videoClassify"; export default { name: "NutritionalVideo", data() { @@ -259,22 +274,21 @@ //分类列表 classifyList:[], //权限等级列表 - payVideoLevelList:[] + payVideoLevelList:[], + //视频分类弹窗显示标识 + videoClassifyOpen:false + }; }, created() { this.getList(); - getAllClassify().then(response => { - if(response.code == 200){ - this.classifyList = response.data; - } - }); + this.getAllVideoClassify(); this.getDicts("video_pay_level").then((response) => { this.payVideoLevelList = response.data; }); }, components: { - UploadVideo,UploadFile + UploadVideo,UploadFile,VideoClassify }, methods: { /** 查询营养视频列表 */ @@ -289,6 +303,14 @@ this.loading = false; }); }, + //获取所有分类 + getAllVideoClassify(){ + getAllClassify().then(response => { + if(response.code == 200){ + this.classifyList = response.data; + } + }); + }, // 取消按钮 cancel() { this.open = false; @@ -326,10 +348,13 @@ this.multiple = !selection.length }, clickUploadVideo(){ - this.$refs.uploadVideoRef.showDialog(()=>{ + this.$refs.uploadVideoRef.showDialog(this.classifyList, ()=>{ this.getList(); }); }, + handleVideoClassify(){ + this.videoClassifyOpen = true; + }, /** 新增按钮操作 */ handleAdd() { this.reset(); diff --git a/stdiet-ui/src/views/custom/videoClassify/index.vue b/stdiet-ui/src/views/custom/videoClassify/index.vue new file mode 100644 index 000000000..0a1ada151 --- /dev/null +++ b/stdiet-ui/src/views/custom/videoClassify/index.vue @@ -0,0 +1,275 @@ + + +