Browse Source

修改新闻

DESKTOP-USV654P\pc 1 year ago
parent
commit
c9d88ede5e

+ 61 - 30
src/main/java/com/xjrsoft/module/oa/controller/NewsController.java

@@ -7,32 +7,27 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.yulichang.interfaces.MPJBaseJoin;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.authority.entity.DataAuth;
-import com.xjrsoft.module.oa.dto.AddNewsDto;
-import com.xjrsoft.module.oa.dto.NewsPageDto;
-import com.xjrsoft.module.oa.dto.NewsReplyDto;
-import com.xjrsoft.module.oa.dto.UpdateNewsDto;
-import com.xjrsoft.module.oa.entity.Message;
+import com.xjrsoft.module.oa.dto.*;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.entity.NewsAppendix;
 import com.xjrsoft.module.oa.entity.NewsRelation;
-import com.xjrsoft.module.oa.service.IMessageService;
 import com.xjrsoft.module.oa.service.INewsAppendixService;
 import com.xjrsoft.module.oa.service.INewsRelationService;
 import com.xjrsoft.module.oa.service.INewsService;
-import com.xjrsoft.module.oa.vo.*;
-import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
-import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.oa.vo.NewsAppendixVo;
+import com.xjrsoft.module.oa.vo.NewsPageVo;
+import com.xjrsoft.module.oa.vo.NewsRelationVo;
+import com.xjrsoft.module.oa.vo.NewsVo;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import io.swagger.annotations.Api;
@@ -42,7 +37,6 @@ import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -83,9 +77,9 @@ public class NewsController {
         MPJLambdaWrapper<News> wrapper = MPJWrappers.<News>lambdaJoin()
                 .distinct()
                 .eq(ObjectUtil.isNotEmpty(dto.getType()) && dto.getType() > 0, News::getTypeId, dto.getType())
-                .and(wq->wq.eq(News::getLevel,1).or().eq(News::getLevel,2).eq(News::getClassId, dto.getClassId()))
+                .and(wq -> wq.eq(News::getLevel, 1).or().eq(News::getLevel, 2).eq(News::getClassId, dto.getClassId()))
                 .eq(ObjectUtil.isNotEmpty(dto.getLevel()) && dto.getLevel() > 0, News::getLevel, dto.getLevel())
-                .and(wq->wq.eq(News::getSendRange,1).or().eq(News::getSendRange,2).in(News::getId,"select id from xjr_oa_news_relation where news_id=t.id and user_id="+StpUtil.getLoginIdAsLong()))
+                .and(wq -> wq.eq(News::getSendRange, 1).or().eq(News::getSendRange, 2).in(News::getId, "select id from xjr_oa_news_relation where news_id=t.id and user_id=" + StpUtil.getLoginIdAsLong()))
                 .like(StrUtil.isNotBlank(dto.getKeyword()), News::getFullHead, dto.getKeyword())
 //                .leftJoin(NewsRelation.class, onWrapper -> onWrapper.eq(NewsRelation::getNewsId, News::getId).eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()))
 //                .selectAs(NewsRelation::getId, NewsPageVo::getReadId)
@@ -123,23 +117,23 @@ public class NewsController {
 
         NewsVo newsVo = BeanUtil.toBean(news, NewsVo.class);
 
-        List<NewsRelationVo> newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class,
-                new MPJLambdaWrapper<NewsRelation>()
-                        .eq(NewsRelation::getNewsId, id)
-                        .select(NewsRelation::getId)
-                        .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
-                        .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId, ext -> ext.selectAs(XjrUser::getName, NewsRelationVo::getUserName)));
-        if (newsRelationVoList.size() > 0) {
-            newsVo.setRelationList(newsRelationVoList);
-        }
+//        List<NewsRelationVo> newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class,
+//                new MPJLambdaWrapper<NewsRelation>()
+//                        .eq(NewsRelation::getNewsId, id)
+//                        .select(NewsRelation::getId)
+//                        .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
+//                        .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId, ext -> ext.selectAs(XjrUser::getName, NewsRelationVo::getUserName)));
+//        if (newsRelationVoList.size() > 0) {
+//            newsVo.setRelationList(newsRelationVoList);
+//        }
 
         List<NewsAppendixVo> newsAppendixVoList = newsAppendixService.selectJoinList(NewsAppendixVo.class,
                 new MPJLambdaWrapper<NewsAppendix>().eq(NewsAppendix::getNewsId, id)
                         .select(NewsRelation::getId)
                         .select(NewsAppendix.class, x -> VoToColumnUtil.fieldsToColumns(NewsAppendixVo.class).contains(x.getProperty()))
                         .leftJoin(File.class, File::getId, NewsAppendix::getFileId, ext -> ext.selectAs(File::getFileName, NewsAppendixVo::getFileName)
-                                .selectAs(File::getFolderId,NewsAppendixVo::getFolderId)
-                                .selectAs(File::getFileUrl,NewsAppendixVo::getFileUrl))
+                                .selectAs(File::getFolderId, NewsAppendixVo::getFolderId)
+                                .selectAs(File::getFileUrl, NewsAppendixVo::getFileUrl))
         );
 
         if (newsAppendixVoList.size() > 0) {
@@ -200,11 +194,11 @@ public class NewsController {
 
     @PutMapping("/reply")
     @ApiOperation(value = "新闻回复")
-    public R reply(@RequestBody NewsReplyDto newsReplyDto) throws Exception {
+    public R reply(@RequestBody NewsReplyDto newsReplyDto) {
         NewsRelation newsRelation = newsRelationService.getOne(
                 Wrappers.<NewsRelation>query().lambda()
-                        .eq(NewsRelation::getNewsId,newsReplyDto.getId())
-                        .eq(NewsRelation::getUserId,StpUtil.getLoginIdAsLong()));
+                        .eq(NewsRelation::getNewsId, newsReplyDto.getId())
+                        .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
         if (newsRelation == null) {
             newsRelation = new NewsRelation();
             newsRelation.setNewsId(newsReplyDto.getId());
@@ -215,11 +209,48 @@ public class NewsController {
             return R.ok(newsRelationService.save(newsRelation));
         }
 
-        if (newsRelation.getReadMark()==null || newsRelation.getReadMark() == 0) {
+        if (newsRelation.getReadMark() == null || newsRelation.getReadMark() == 0) {
             newsRelation.setReadMark(1);
             newsRelation.setReadDate(LocalDateTime.now());
         }
         newsRelation.setReplyContent(newsReplyDto.getReplyContent());
         return R.ok(newsRelationService.updateById(newsRelation));
     }
+
+    @GetMapping("/page-relation")
+    @ApiOperation(value = "获取新闻阅读权限分页")
+    public R pageRelation(NewsRelationPageDto dto) {
+        MPJLambdaWrapper<NewsRelation> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.disableSubLogicDel()
+                .eq(NewsRelation::getNewsId, dto.getNewsId())
+                .eq(ObjectUtil.isNotEmpty(dto.getReadMark()) && dto.getReadMark() > 0, NewsRelation::getReadMark, dto.getReadMark() == 1 ? 0 : 1)
+                .select(NewsRelation::getId)
+                .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
+                .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId);
+
+        IPage<NewsRelation> page = newsRelationService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<NewsRelationVo> pageOutput = ConventPage.getPageOutput(page, NewsRelationVo.class);
+        return R.ok(pageOutput);
+    }
+    @GetMapping("/count-relation")
+    @ApiOperation(value = "新闻阅读权限统计")
+    public  R countRelation(@RequestParam Long id) {
+        Long total = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id));
+        Long notRead = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).eq(NewsRelation::getReadMark, 0));
+        Long isRead = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).eq(NewsRelation::getReadMark, 1));
+        Long[] arrayRefVar = {total, notRead, isRead};
+        return R.ok(arrayRefVar);
+    }
+
+    @PutMapping("/update-relation")
+    @ApiOperation(value = "设置新闻阅读权限")
+    public R updateRelation(@RequestBody UpdateNewsRelationDto updateRelationDto) {
+        return R.ok(newsService.updateRelation(updateRelationDto));
+    }
+
+    @DeleteMapping("/delete-relation")
+    @ApiOperation(value = "删除新闻阅读权限")
+    public R deleteRelation(@RequestBody DeleteNewsRelationDto deleteNewsRelationDto) {
+        return R.ok(newsService.deleteRelation(deleteNewsRelationDto));
+    }
 }

+ 15 - 0
src/main/java/com/xjrsoft/module/oa/dto/DeleteNewsRelationDto.java

@@ -0,0 +1,15 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeleteNewsRelationDto {
+    @ApiModelProperty("新闻主键")
+    private Long newsId;
+
+    @ApiModelProperty("关系ID列表")
+    private List<Long> relationId;
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/oa/dto/NewsRelationPageDto.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.oa.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class NewsRelationPageDto extends PageInput {
+
+    @ApiModelProperty("新闻主键")
+    private Long newsId;
+
+    @ApiModelProperty("阅读标记  0=全部 1=未读 2=已读")
+    private Integer readMark;
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/oa/dto/UpdateNewsRelationDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateNewsRelationDto {
+
+    @ApiModelProperty("新闻ID")
+    private Long id;
+
+    @ApiModelProperty("关系类型 1=部门 2=人员 3=班级")
+    private Integer relationType;
+
+    @ApiModelProperty("关系列表")
+    private List<Long> relationIds;
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/oa/entity/NewsRelationConfig.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.oa.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@TableName("xjr_oa_news_relation_config")
+@ApiModel(value = "NewsRelation对象", description = "新闻中心用户关系表")
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class NewsRelationConfig {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    private Long id;
+
+    @ApiModelProperty("新闻主键")
+    private Long newsId;
+
+    @ApiModelProperty("关系类型 1=部门 2=人员")
+    private Integer relationType;
+
+    @ApiModelProperty("关系ID")
+    private Long relationId;
+}

+ 9 - 0
src/main/java/com/xjrsoft/module/oa/mapper/NewsRelationConfigMapper.java

@@ -0,0 +1,9 @@
+package com.xjrsoft.module.oa.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.oa.entity.NewsRelationConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface NewsRelationConfigMapper  extends MPJBaseMapper<NewsRelationConfig> {
+}

+ 7 - 0
src/main/java/com/xjrsoft/module/oa/service/INewsRelationConfigService.java

@@ -0,0 +1,7 @@
+package com.xjrsoft.module.oa.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.oa.entity.NewsRelationConfig;
+
+public interface INewsRelationConfigService extends MPJBaseService<NewsRelationConfig> {
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/oa/service/INewsService.java

@@ -2,7 +2,9 @@ package com.xjrsoft.module.oa.service;
 
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.oa.dto.AddNewsDto;
+import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
 import com.xjrsoft.module.oa.dto.UpdateNewsDto;
+import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
 import com.xjrsoft.module.oa.entity.News;
 
 import java.util.List;
@@ -37,4 +39,19 @@ public interface INewsService extends MPJBaseService<News> {
      * @return
      */
     boolean delete(List<Long> ids);
+
+    /**
+     * 设置新闻阅读权限
+     *
+     * @param updateRelationDto
+     * @return
+     */
+    boolean updateRelation(UpdateNewsRelationDto updateRelationDto);
+    /**
+     * 删除新闻阅读权限
+     *
+     * @param deleteNewsRelationDto
+     * @return
+     */
+    boolean deleteRelation(DeleteNewsRelationDto deleteNewsRelationDto);
 }

+ 13 - 0
src/main/java/com/xjrsoft/module/oa/service/impl/NewsRelationConfigServiceImpl.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.module.oa.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.oa.entity.NewsRelationConfig;
+import com.xjrsoft.module.oa.mapper.NewsRelationConfigMapper;
+import com.xjrsoft.module.oa.service.INewsRelationConfigService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class NewsRelationConfigServiceImpl extends MPJBaseServiceImpl<NewsRelationConfigMapper, NewsRelationConfig> implements INewsRelationConfigService {
+}

+ 146 - 15
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -4,24 +4,29 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.module.authority.entity.DataAuthConfig;
-import com.xjrsoft.module.oa.dto.AddNewsAppendixDto;
-import com.xjrsoft.module.oa.dto.AddNewsDto;
-import com.xjrsoft.module.oa.dto.AddNewsRelationDto;
-import com.xjrsoft.module.oa.dto.UpdateNewsDto;
+import com.xjrsoft.module.oa.dto.*;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.entity.NewsAppendix;
 import com.xjrsoft.module.oa.entity.NewsRelation;
+import com.xjrsoft.module.oa.entity.NewsRelationConfig;
 import com.xjrsoft.module.oa.mapper.NewsAppendixMapper;
 import com.xjrsoft.module.oa.mapper.NewsMapper;
+import com.xjrsoft.module.oa.mapper.NewsRelationConfigMapper;
 import com.xjrsoft.module.oa.mapper.NewsRelationMapper;
 import com.xjrsoft.module.oa.service.INewsService;
+import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.organization.entity.UserRoleRelation;
+import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
 import com.xjrsoft.module.student.entity.BaseStudentContact;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
+import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -40,6 +45,13 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
     private final NewsAppendixMapper newsAppendixMapper;
     private final NewsRelationMapper newsRelationMapper;
+    private final NewsRelationConfigMapper newsRelationConfigMapper;
+
+
+    private final UserDeptRelationMapper userDeptRelationMapper;
+
+
+    private final BaseStudentSchoolRollMapper  baseStudentSchoolRollMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -47,14 +59,20 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
         News news = BeanUtil.toBean(addNewsDto, News.class);
         newsMapper.insert(news);
-
-        for (AddNewsAppendixDto appendixDto : addNewsDto.getAppendixList()) {
-            NewsAppendix newsAppendix =BeanUtil.toBean(appendixDto, NewsAppendix.class);
-            newsAppendix.setNewsId(news.getId());
-            newsAppendixMapper.insert(newsAppendix);
+        if (addNewsDto.getAppendixList() != null) {
+            for (AddNewsAppendixDto appendixDto : addNewsDto.getAppendixList()) {
+                NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
+                newsAppendix.setNewsId(news.getId());
+                newsAppendixMapper.insert(newsAppendix);
+            }
         }
-        if(addNewsDto.getRelationList()!=null) {
+        if (addNewsDto.getRelationList() != null) {
             for (AddNewsRelationDto relationDto : addNewsDto.getRelationList()) {
+
+                NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class);
+                newsRelationConfig.setNewsId(news.getId());
+                newsRelationConfigMapper.insert(newsRelationConfig);
+
                 NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class);
                 newsRelation.setNewsId(news.getId());
                 newsRelation.setReadMark(0);
@@ -76,17 +94,25 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         News news = BeanUtil.toBean(updateNewsDto, News.class);
         newsMapper.updateById(news);
 
-
         newsAppendixMapper.delete(Wrappers.lambdaQuery(NewsAppendix.class).eq(NewsAppendix::getNewsId,news.getId()));
-        for (AddNewsAppendixDto appendixDto : updateNewsDto.getAppendixList()) {
-            NewsAppendix newsAppendix =BeanUtil.toBean(appendixDto, NewsAppendix.class);
-            newsAppendix.setNewsId(news.getId());
-            newsAppendixMapper.insert(newsAppendix);
+        if (updateNewsDto.getAppendixList() != null) {
+            for (AddNewsAppendixDto appendixDto : updateNewsDto.getAppendixList()) {
+                NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
+                newsAppendix.setNewsId(news.getId());
+                newsAppendixMapper.insert(newsAppendix);
+            }
         }
 
         if(updateNewsDto.getRelationList()!=null) {
             newsRelationMapper.delete(Wrappers.lambdaQuery(NewsRelation.class).eq(NewsRelation::getNewsId, news.getId()));
+            newsRelationConfigMapper.delete(Wrappers.lambdaQuery(NewsRelationConfig.class).eq(NewsRelationConfig::getNewsId, news.getId()));
+
             for (AddNewsRelationDto relationDto : updateNewsDto.getRelationList()) {
+
+                NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class);
+                newsRelationConfig.setNewsId(news.getId());
+                newsRelationConfigMapper.insert(newsRelationConfig);
+
                 NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class);
                 newsRelation.setNewsId(news.getId());
                 newsRelation.setReadMark(0);
@@ -102,6 +128,111 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         return true;
     }
 
+    /**
+     * 设置新闻阅读权限
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public  boolean updateRelation(UpdateNewsRelationDto updateRelationDto) {
+
+        if (updateRelationDto.getRelationIds() != null) {
+            for (Long relationId : updateRelationDto.getRelationIds()) {
+                NewsRelationConfig newsRelationConfig = new NewsRelationConfig();
+                newsRelationConfig.setNewsId(updateRelationDto.getId());
+                newsRelationConfig.setRelationId(relationId);
+                newsRelationConfig.setRelationType(updateRelationDto.getRelationType());
+                newsRelationConfigMapper.insert(newsRelationConfig);
+
+                // 部门
+                if (updateRelationDto.getRelationType() == 1) {
+                    List<UserDeptRelation> userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.<UserDeptRelation>query().lambda()
+                            .eq(UserDeptRelation::getDeptId, relationId));
+                    for (UserDeptRelation userDeptRelation : userDeptRelationList) {
+                        NewsRelation newsRelation = new NewsRelation();
+                        newsRelation.setUserId(userDeptRelation.getUserId());
+                        newsRelation.setNewsId(updateRelationDto.getId());
+                        newsRelation.setReadMark(0);
+                        newsRelationMapper.insert(newsRelation);
+                    }
+                }
+
+                // 人员
+                if (updateRelationDto.getRelationType() == 2) {
+                    NewsRelation newsRelation = new NewsRelation();
+                    newsRelation.setUserId(relationId);
+                    newsRelation.setNewsId(updateRelationDto.getId());
+                    newsRelation.setReadMark(0);
+                    newsRelationMapper.insert(newsRelation);
+                }
+
+                // 班级
+                if (updateRelationDto.getRelationType() == 3) {
+                    List<BaseStudentSchoolRoll> baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.<BaseStudentSchoolRoll>query().lambda()
+                            .eq(BaseStudentSchoolRoll::getClassId, relationId));
+
+                    for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentSchoolRollList) {
+                        NewsRelation newsRelation = new NewsRelation();
+                        newsRelation.setUserId(baseStudentSchoolRoll.getUserId());
+                        newsRelation.setNewsId(updateRelationDto.getId());
+                        newsRelation.setReadMark(0);
+                        newsRelationMapper.insert(newsRelation);
+                    }
+                }
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteRelation(DeleteNewsRelationDto deleteNewsRelationDto) {
+
+        if (deleteNewsRelationDto.getRelationId() != null) {
+            List<NewsRelationConfig> newsRelationConfigList = newsRelationConfigMapper.selectList(Wrappers.<NewsRelationConfig>query().lambda()
+                    .eq(NewsRelationConfig::getNewsId, deleteNewsRelationDto.getNewsId())
+                    .in(NewsRelationConfig::getId, deleteNewsRelationDto.getRelationId())
+            );
+            for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) {
+                // 部门
+                if (newsRelationConfig.getRelationType() == 1) {
+                    List<UserDeptRelation> userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.<UserDeptRelation>query().lambda()
+                            .eq(UserDeptRelation::getDeptId, newsRelationConfig.getRelationId()));
+
+                    List<Long> userIdList = userDeptRelationList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList());
+
+                    newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
+                            .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
+                            .in(NewsRelation::getUserId, userIdList));
+                }
+
+                // 人员
+                if (newsRelationConfig.getRelationType() == 2) {
+                    newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
+                            .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
+                            .eq(NewsRelation::getUserId, newsRelationConfig.getRelationId()));
+                }
+
+                // 班级
+                if (newsRelationConfig.getRelationType() == 3) {
+                    List<BaseStudentSchoolRoll> baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.<BaseStudentSchoolRoll>query().lambda()
+                            .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfig.getRelationId()));
+
+                    List<Long> userIdList = baseStudentSchoolRollList.stream().map(BaseStudentSchoolRoll::getUserId).collect(Collectors.toList());
+
+                    newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
+                            .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
+                            .in(NewsRelation::getUserId, userIdList));
+                }
+            }
+
+            newsRelationConfigMapper.deleteBatchIds(deleteNewsRelationDto.getRelationId());
+        }
+
+        return true;
+    }
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean delete(List<Long> ids) {

+ 13 - 0
src/main/resources/sqlScript/init_sql.sql

@@ -33,6 +33,19 @@ CREATE TABLE `xjr_oa_news_appendix` (
     PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '新闻附件'
 
+
+-- ----------------------------
+-- 新闻关联配置
+-- ----------------------------
+DROP TABLE IF EXISTS `xjr_oa_news_relation_config`;
+CREATE TABLE `xjr_oa_news_relation_config` (
+    `id` bigint NOT NULL COMMENT '主键',
+    `news_id` bigint NULL DEFAULT NULL COMMENT '新闻ID',
+    `relation_type` int NULL DEFAULT NULL COMMENT '关系类型 1=部门 2=人员',
+    `relation_id` bigint NULL DEFAULT NULL COMMENT '关系ID',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '新闻关联配置'
+
 -- ----------------------------
 -- 接口文件
 -- ----------------------------