在实现删除媒资文件时,还没有听到讲解与课程计划的关联,所以我们的新需求就是:当删除媒资文件的时候判断文件是否与课程计划相关联,不关联可以直接删除,存在关联就跳出提示不删除 本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的解决方案大家可以留言或者私信
需求:删除媒资文件判断其是否与课程计划关联,不关联可以直接删除,存在关联就跳出提示不删除
https://blog.csdn.net/weixin_45305953/article/details/108810425
配置连接两个数据库,mongodb,mysql,但是程序一直运行报错,没有实现,网上找了一篇文章解决请参考:https://blog.csdn.net/you_ran_jian/article/details/103007812 我们使用feign进行远程调用
xc-service-manage-media服务调用xc-service-manage-course服务
根据媒资文件ID查询文件与文件是否关联,返回一个list, Controller
//根据mediaId查询与课程计划关联的视频数量,判断是否删除对应的视频文件 @Override @PostMapping("/findMedia/{mediaId}") public List<TeachplanMedia> findTeachPlanMediaById(@PathVariable(name = "mediaId") String mediaId){ return this.courseService.findTeachPlanMediaById(mediaId); }api
@ApiOperation("根据视频Id查询视频与课程计划关联关系") public List<TeachplanMedia> findTeachPlanMediaById(String mediaId);Service
//根据mediaId查询与课程计划关联的视频数量,判断是否删除对应的视频文件 public List<TeachplanMedia> findTeachPlanMediaById(String mediaId) { return this.teachPlanMediaRepository.findTeachplanMediaByMediaId(mediaId); }DAO
public List<TeachplanMedia> findTeachplanMediaByMediaId(@Param("mediaId") String mediaId);创建CourseManageFeignClient接口,注入到service中
@FeignClient(value="XC-SERVICE-MANAGE-COURSE")//指定远程调用的服务名 public interface CourseManageFeignClient { //根据mediaId查询与课程计划关联的视频数量,判断是否删除对应的视频文件 @PostMapping("/course/findMedia/{mediaId}") public List<TeachplanMedia> findTeachPlanMediaById(@PathVariable(name = "mediaId") String mediaId); }修改service删除,增加一个远程调用查询是否存在关联,判断返回列表的长度即可
//删除文件,分块,ts以及m3u8文件 @Transactional public ResponseResult deleteUploadFileChunks(String mediaId) { //查询mongodb中是否包含这调数据 Optional<MediaFile> optionalById = this.mediaFileRepository.findById(mediaId); if (!optionalById.isPresent()){ //为空抛出异常 log.error("删除文件失败,数据库不包含词条记录;mediaId:"+mediaId); ExceptionCast.cast(MediaCode.MERGE_FILE_DELETE_FAIL); return new ResponseResult(CommonCode.FAIL); } //根据媒资文件的ID远程调用课程微服务查询mysql数据库此视频是否与课程计划关联,关联就返回异常信息不可以删除 List<TeachplanMedia> teachPlanMediaList= this.courseManageFeignClient.findTeachPlanMediaById(mediaId); if (teachPlanMediaList.size()>0){ //表示存在课程计划与视频的关联,不能删除这个媒资视频 ExceptionCast.cast(MediaCode.DELETE_MEDIA_FILE_FAIL); return new ResponseResult(CommonCode.FAIL); } //获取上传文件路径(路径格式E:\xcEdu\xcVideo\0\1\013b627312c228c7d1a068b58844cdb4)删除以文件ID命名的文件夹及其所有的子文件 String deleteFilePath=this.upload_location+mediaId.substring(0,1)+"/"+mediaId.substring(1,2)+"/"+mediaId; //调用私用方法进行删除操作 boolean result =this.deleteAnyone(deleteFilePath); if (!result){ //删除出错 log.error("删除文件失败目录不存在;deleteFilePath:"+deleteFilePath); ExceptionCast.cast(MediaCode.MERGE_FILE_DELETE_FAIL); return new ResponseResult(CommonCode.FAIL); } //删除数据库记录 this.mediaFileRepository.deleteById(mediaId); return new ResponseResult(CommonCode.SUCCESS); }MediaCode增加一个异常类型
DELETE_MEDIA_FILE_FAIL(false,22021,"删除视频文件失败!此视频已与课程计划进行关联")在xc-service-manage-media服务添加,否则不能使用feign进行远程调用
@EnableFeignClients//添加FeignClients注解表示要使用feign进行远程调用重启服务,点击删除媒资文件,如果已经与课程计划关联就提示:“删除视频文件失败!此视频已与课程计划进行关联”;如果不关联就提示删除成功。 远程调用参考:https://blog.csdn.net/Leeyehong_self/article/details/104976366 本人技术有限如有任何问题,或者更好的解决方法直接评论私聊我即可