phoenix 1 gadu atpakaļ
vecāks
revīzija
f081784205

+ 15 - 97
src/main/java/com/xjrsoft/module/oa/controller/ProclamationController.java

@@ -1,7 +1,6 @@
 package com.xjrsoft.module.oa.controller;
 
 import cn.dev33.satoken.stp.StpUtil;
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -15,20 +14,16 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 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.service.INewsAppendixService;
 import com.xjrsoft.module.oa.service.INewsRelationConfigService;
 import com.xjrsoft.module.oa.service.INewsRelationService;
 import com.xjrsoft.module.oa.service.INewsService;
 import com.xjrsoft.module.oa.vo.*;
-import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
@@ -47,9 +42,7 @@ import java.util.List;
 public class ProclamationController {
 
     private INewsService newsService;
-
     private INewsRelationService newsRelationService;
-    private INewsAppendixService newsAppendixService;
     private INewsRelationConfigService newsRelationConfigService;
     
     @GetMapping(value = "/gradeClassTree")
@@ -64,93 +57,36 @@ public class ProclamationController {
 
     @GetMapping("/manage-box")
     @ApiOperation(value = "获取管理公告分页")
-    public RT<PageOutput<NewsPageVo>> manageBox(NewsPageDto dto) {
-        IPage<NewsPageVo> page = newsService.manageBox(dto);
-        PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
+    public RT<PageOutput<ProclamationPageVo>> manageBox(ProclamationPageDto dto) {
+        IPage<ProclamationPageVo> page = newsService.proclamationManageBox(dto);
+        PageOutput<ProclamationPageVo> pageOutput = ConventPage.getPageOutput(page, ProclamationPageVo.class);
         return RT.ok(pageOutput);
     }
 
     @GetMapping("/receipt-box")
     @ApiOperation(value = "获取接受公告分页")
-    public RT<PageOutput<NewsPageVo>> receiptBox(NewsPageDto dto) {
-        IPage<NewsPageVo> page = newsService.receiptBox(dto);
-        PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
+    public RT<PageOutput<ProclamationPageVo>> receiptBox(ProclamationPageDto dto) {
+        IPage<ProclamationPageVo> page = newsService.proclamationReceiptBox(dto);
+        PageOutput<ProclamationPageVo> pageOutput = ConventPage.getPageOutput(page, ProclamationPageVo.class);
         return RT.ok(pageOutput);
     }
 
 
     @PostMapping
     @ApiOperation(value = "新增公告")
-    public RT<Boolean> addProclamation(@RequestBody AddProclamationDto addProclamationDto) {
+    public RT<Boolean> add(@RequestBody AddProclamationDto addProclamationDto) {
         return RT.ok(newsService.addProclamation(addProclamationDto));
     }
 
     @GetMapping(value = "/info")
     @ApiOperation(value = "公告详情")
-    public RT<NewsVo> info(@RequestParam Long id, @RequestParam(required = false) Boolean isRead) {
-        News news = newsService.getById(id);
-        if (news == null) {
+    public RT<ProclamationVo> info(@RequestParam Long id) {
+        ProclamationVo proclamationVo = newsService.getProclamationById(id);
+        if (proclamationVo == null) {
             RT.error("找不到此公告!");
         }
 
-        List<NewsRelationVo> newsRelationVoList = new ArrayList<>();
-        MPJLambdaWrapper<NewsRelation> queryWrapper = new MPJLambdaWrapper<>();
-        queryWrapper
-                .select(NewsRelation::getId)
-                .selectAs(XjrUser::getName,NewsRelationVo::getUserName)
-                .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
-                .leftJoin(XjrUser.class,XjrUser::getId,NewsRelation::getUserId)
-                .eq(NewsRelation::getNewsId , id)
-                .disableSubLogicDel();
-        if(ObjectUtil.isNotNull(news.getCreateUserId()) && StpUtil.getLoginIdAsLong() == news.getCreateUserId()){
-            newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class, queryWrapper);
-        }else{
-            queryWrapper.eq(NewsRelation::getUserId , StpUtil.getLoginIdAsLong());
-            NewsRelationVo newsRelationVo = newsRelationService.selectJoinOne(NewsRelationVo.class, queryWrapper);
-            if(ObjectUtil.isNotNull(newsRelationVo)){
-                newsRelationVoList.add(newsRelationVo);
-            }
-        }
-
-        NewsVo newsVo = BeanUtil.toBean(news, NewsVo.class);
-        newsVo.setRelationList(newsRelationVoList);
-
-        if (BooleanUtils.isTrue(isRead)) {
-//            NewsRelation newsRelation = new NewsRelation();
-//            newsRelation.setNewsId(id);
-//            newsRelation.setUserId(StpUtil.getLoginIdAsLong());
-//            newsRelationService.remove(Wrappers.<NewsRelation>query().lambda()
-//                    .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
-//                    .eq(NewsRelation::getNewsId, id));
-//            newsRelationService.save(newsRelation);
-        }
-
-
-
-//        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))
-        );
-
-        if (newsAppendixVoList.size() > 0) {
-            newsVo.setAppendixList(newsAppendixVoList);
-        }
-
-        return RT.ok(newsVo);
+        return RT.ok(proclamationVo);
     }
 
     @PutMapping
@@ -169,29 +105,11 @@ public class ProclamationController {
 
     @PutMapping("/change-status")
     @ApiOperation(value = "发布或下架公告")
-    public RT<Boolean> changeStatus(@RequestBody ChangeNewsDto changeNewsDto) throws Exception {
-        News xjrNews = newsService.getById(changeNewsDto.getId());
-        if (changeNewsDto.getStatus() == null || xjrNews == null) {
-            throw new Exception("参数异常");
+    public RT<Boolean> changeStatus(@RequestBody ChangeNewsDto changeNewsDto){
+        if(newsService.changeStatus(changeNewsDto)){
+            return RT.ok(newsService.SendMessage(changeNewsDto.getId()));
         }
-        if (changeNewsDto.getStatus().equals(xjrNews.getStatus())) {
-            if (changeNewsDto.getStatus() == 2) {
-                throw new Exception("公告已发布!!!");
-            } else if (changeNewsDto.getStatus() == 3) {
-                throw new Exception("公告已下架!!!");
-            }
-        }
-        //将原来的修改enabled_mark改为修改status
-        xjrNews.setStatus(changeNewsDto.getStatus());
-        if(xjrNews.getStatus() == 2){
-            //将发布时间改为当前时间
-            xjrNews.setReleaseTime(LocalDateTime.now());
-            //将张贴时间改为当前时间
-            xjrNews.setSendStartDate(LocalDateTime.now());
-            newsService.SendMessage(xjrNews.getId());
-        }
-
-        return RT.ok(newsService.updateById(xjrNews));
+        return RT.ok("操作失败",null);
     }
 
     @PutMapping("/read")

+ 39 - 0
src/main/java/com/xjrsoft/module/oa/dto/ProclamationPageDto.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.oa.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ *
+ * @Author: szx
+ * @Date: 2022/6/27 15:38
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ProclamationPageDto extends PageInput {
+
+    @ApiModelProperty(value = "类型(1-新闻2-公告)",hidden = true)
+    @NotNull(message = "类型不能为空!")
+    @Min(value = 1, message = "类型必须大于0")
+    private Integer type;
+    /**
+     * 完整标题
+     */
+    @ApiModelProperty("完整标题")
+    private String fullHead;
+    /**
+     * 关键字
+     */
+    @ApiModelProperty("关键字")
+    private String keyword;
+    /**
+     * 当前用户id
+     */
+    @ApiModelProperty(value = "当前用户id", hidden = true)
+    private Long loginId;
+}

+ 1 - 1
src/main/java/com/xjrsoft/module/oa/mapper/NewsMapper.java

@@ -21,5 +21,5 @@ public interface NewsMapper extends MPJBaseMapper<News> {
 
     IPage<NewsPageVo> receiptBox(IPage<NewsPageDto> page,NewsPageDto dto);
 
-    Boolean insert();
+    //Boolean insert();
 }

+ 25 - 2
src/main/java/com/xjrsoft/module/oa/service/INewsService.java

@@ -6,6 +6,8 @@ import com.xjrsoft.module.oa.dto.*;
 import com.xjrsoft.module.oa.entity.News;
 import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
 import com.xjrsoft.module.oa.vo.NewsPageVo;
+import com.xjrsoft.module.oa.vo.ProclamationPageVo;
+import com.xjrsoft.module.oa.vo.ProclamationVo;
 
 import java.util.List;
 
@@ -19,6 +21,12 @@ import java.util.List;
  */
 public interface INewsService extends MPJBaseService<News> {
 
+    /**
+     * 公告年级班级树
+     *
+     * @param
+     * @return
+     */
     List<NewsGradeClassTreeVo> getGradeClassTree();
 
     /**
@@ -29,13 +37,21 @@ public interface INewsService extends MPJBaseService<News> {
      */
     Boolean addProclamation(AddProclamationDto addProclamationDto);
 
+    /**
+     * 根据id获取公告详情
+     *
+     * @param id
+     * @return
+     */
+    ProclamationVo getProclamationById(Long id);
+
     /**
      * 获取新闻分页
      *
      * @param dto
      * @return
      */
-    IPage<NewsPageVo> proclamationManageBox(NewsPageDto dto);
+    IPage<ProclamationPageVo> proclamationManageBox(ProclamationPageDto dto);
 
     /**
      * 获取新闻分页
@@ -43,7 +59,14 @@ public interface INewsService extends MPJBaseService<News> {
      * @param dto
      * @return
      */
-    IPage<NewsPageVo> proclamationReceiptBox(NewsPageDto dto);
+    IPage<ProclamationPageVo> proclamationReceiptBox(ProclamationPageDto dto);
+
+    /**
+     * 发布或下架公告
+     * @param changeNewsDto
+     * @return
+     */
+    Boolean changeStatus(ChangeNewsDto changeNewsDto);
 
     /**
      * 添加新闻

+ 255 - 95
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -5,12 +5,14 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.common.utils.TreeUtil;
@@ -28,10 +30,10 @@ 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.INewsAppendixService;
+import com.xjrsoft.module.oa.service.INewsRelationService;
 import com.xjrsoft.module.oa.service.INewsService;
-import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
-import com.xjrsoft.module.oa.vo.NewsPageVo;
-import com.xjrsoft.module.oa.vo.NewsRelationVo;
+import com.xjrsoft.module.oa.vo.*;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
 import com.xjrsoft.module.organization.entity.*;
 import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
@@ -39,13 +41,17 @@ import com.xjrsoft.module.organization.mapper.UserMapper;
 import com.xjrsoft.module.organization.service.IWeChatService;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
+import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -84,6 +90,9 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
 
     private final CommonPropertiesConfig commonPropertiesConfig;
 
+    private INewsRelationService newsRelationService;
+    private INewsAppendixService newsAppendixService;
+
     @Override
     public List<NewsGradeClassTreeVo> getGradeClassTree() {
         List<NewsGradeClassTreeVo> treeVoList = new ArrayList<NewsGradeClassTreeVo>();
@@ -91,7 +100,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         //虚拟父级
         treeVoList.add(new NewsGradeClassTreeVo(){{
             setId(666666L);
-            setName("虚拟根节点");
+            setName("班级");
         }});
 
         //获取所有班级的年级作为树的父级
@@ -141,109 +150,261 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
             }
         }
 
-        //公告需要添加阅读关系,发送范围 1=全校教职工 2=全校师生 3=指定人员
-        //1=全校教职工,添加全校教职工到关系表
-        if(addProclamationDto.getSendRange() == 1){
-            MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
-            queryUser
-                    .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
-                    .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
-                    .eq(Role::getId, 2);
-            List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
-            for (XjrUser user: userList) {
-                newsRelationMapper.insert(new NewsRelation(){{
-                    setUserId(user.getId());
-                    setNewsId(news.getId());
-                    setReadMark(0);
-                    setCreateDate(java.time.LocalDateTime.now());
-                }});
+        //公告需要添加阅读关系,关系类型 1=部门 2=人员 3=班级
+        if (addProclamationDto.getSendRange() == 3 && addProclamationDto.getRelationList() != null) {
+            for (AddNewsRelationDto relationDto : addProclamationDto.getRelationList()) {
+                if (relationDto.getRelationType() == 1) {
+                    newsRelationConfigMapper.insert(new NewsRelationConfig(){{
+                        setNewsId(news.getId());
+                        setRelationId(relationDto.getRelationId());
+                        setRelationType(relationDto.getRelationType());
+                        setRelationName("部门");
+                    }});
+                }
+                if (relationDto.getRelationType() == 2)  {
+                    newsRelationConfigMapper.insert(new NewsRelationConfig(){{
+                        setNewsId(news.getId());
+                        setRelationId(relationDto.getRelationId());
+                        setRelationType(relationDto.getRelationType());
+                        setRelationName("人员");
+                    }});
+                }
+                if (relationDto.getRelationType() == 3)  {
+                    newsRelationConfigMapper.insert(new NewsRelationConfig(){{
+                        setNewsId(news.getId());
+                        setRelationId(relationDto.getRelationId());
+                        setRelationType(relationDto.getRelationType());
+                        setRelationName("班级");
+                    }});
+                }
             }
+        }
+        return true;
+    }
 
+    @Override
+    public ProclamationVo getProclamationById(Long id) {
+        MPJLambdaWrapper<News> queryWrapperNews = new MPJLambdaWrapper<>();
+        queryWrapperNews
+                .select(News::getId)
+                .selectAs(Department::getName, ProclamationVo::getSendDeptIdCN)
+                .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationVo.class).contains(x.getProperty()))
+                .leftJoin(Department.class, Department::getId, News::getSendDeptId)
+                .eq(News::getId , id);
+        ProclamationVo proclamationVo = this.selectJoinOne(ProclamationVo.class, queryWrapperNews);
+        if (proclamationVo == null) {
+           return null;
         }
 
-        //2=全校师生,添加全校师生到关系表
-        if(addProclamationDto.getSendRange() == 2){
-            MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
-            queryUser
-                    .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
-                    .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
-                    .inSql(Role::getId, "(1,2)");
-            List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
-            for (XjrUser user: userList) {
-                newsRelationMapper.insert(new NewsRelation(){{
-                    setUserId(user.getId());
-                    setNewsId(news.getId());
-                    setReadMark(0);
-                    setCreateDate(java.time.LocalDateTime.now());
-                }});
+        //添加阅读关系集合
+        List<NewsRelationConfigVo> newsRelationConfigVoList = new ArrayList<>();
+        //公告在草稿状态还没有阅读状态,只有阅读关系
+        if(proclamationVo.getStatus() == 1){
+            MPJLambdaWrapper<NewsRelationConfig> queryWrapperNewsRelationConfig = new MPJLambdaWrapper<>();
+            queryWrapperNewsRelationConfig
+                    .select(NewsRelationConfig.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationConfigVo.class).contains(x.getProperty()))
+                    .eq(NewsRelationConfig::getNewsId , proclamationVo.getId());
+            newsRelationConfigVoList = newsRelationConfigMapper.selectJoinList(NewsRelationConfigVo.class, queryWrapperNewsRelationConfig);
+        }
+        proclamationVo.setNewsRelationConfigVoList(newsRelationConfigVoList);
+
+        //添加阅读状态集合
+        List<NewsRelationVo> newsRelationVoList = new ArrayList<>();
+        //公告在发布状态或下架状态
+        if(proclamationVo.getStatus() == 2 || proclamationVo.getStatus() == 3){
+            MPJLambdaWrapper<NewsRelation> queryWrapper = new MPJLambdaWrapper<>();
+            queryWrapper
+                    .select(NewsRelation::getId)
+                    .selectAs(XjrUser::getName,NewsRelationVo::getUserName)
+                    .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
+                    .leftJoin(XjrUser.class,XjrUser::getId,NewsRelation::getUserId)
+                    .eq(NewsRelation::getNewsId , proclamationVo.getId())
+                    .disableSubLogicDel();
+            //当是发布人点击了该公告可以看到其下所有人的回复
+            if(ObjectUtil.isNotNull(proclamationVo.getCreateUserId()) && StpUtil.getLoginIdAsLong() == proclamationVo.getCreateUserId()) {
+                newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class, queryWrapper);
+            }else {//当不是发布人点击了该公告只能看到自己的回复
+                queryWrapper.eq(NewsRelation::getUserId , StpUtil.getLoginIdAsLong());
+                NewsRelationVo newsRelationVo = newsRelationService.selectJoinOne(NewsRelationVo.class, queryWrapper);
+                if(ObjectUtil.isNotNull(newsRelationVo)){
+                    newsRelationVoList.add(newsRelationVo);
+                }
             }
         }
 
-//        if (addNewsDto.getTypeId() == 2 && addNewsDto.getSendRange() == 1) {
-//            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);
-//                if (relationDto.getRelationType() == 1) {
-//                    // 获取部门下的人员添加
-//                    Long deptId = relationDto.getRelationId();
-//                    MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
-//                    queryUser
-//                            .leftJoin(UserDeptRelation.class,UserDeptRelation::getUserId,XjrUser::getId)
-//                            .leftJoin(Department.class,Department::getId,UserDeptRelation::getDeptId)
-//                            .eq(Department::getId,deptId);
-//                    List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
-//                    for (XjrUser user: userList) {
-//                        newsRelation.setUserId(user.getId());
-//                        newsRelationMapper.insert(newsRelation);
-//                    }
-//                }
-//                if (relationDto.getRelationType() == 2)  {
-//                    newsRelation.setUserId(relationDto.getRelationId());
-//                    newsRelationMapper.insert(newsRelation);
-//                }
-//                if (relationDto.getRelationType() == 3)  {
-//                    // 获取班级下的人员添加
-//                    Long deptId = relationDto.getRelationId();
-//                    MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
-//                    queryUser
-//                            .leftJoin(UserDeptRelation.class,UserDeptRelation::getUserId,XjrUser::getId)
-//                            .leftJoin(Department.class,Department::getId,UserDeptRelation::getDeptId)
-//                            .eq(Department::getId,deptId);
-//                    List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
-//                    List<Long> userIdList = new ArrayList<>();
-//                    for (XjrUser user: userList) {
-//                        userIdList.add(user.getId());
-//                    }
-//                    for (Long userId: userIdList) {
-//                        newsRelation.setUserId(userId);
-//                        newsRelationMapper.insert(newsRelation);
-//                    }
-//                }
-//            }
-//        }
-//
-//        //添加新闻和公告的时候,如果状态是2,表示新闻和公告实时发布了,张贴开始时间就应该是发布时间需要发送消息
-//        if(ObjectUtil.isNotNull(addNewsDto.getStatus()) && addNewsDto.getStatus() == 2){
-//            SendMessage(news.getId());
-//        }
+        proclamationVo.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))
+        );
+        if (newsAppendixVoList.size() > 0) {
+            proclamationVo.setAppendixList(newsAppendixVoList);
+        }
 
-        return true;
+        return proclamationVo;
     }
 
     @Override
-    public IPage<NewsPageVo> proclamationManageBox(NewsPageDto dto) {
-        return null;
+    public IPage<ProclamationPageVo> proclamationManageBox(ProclamationPageDto dto) {
+        MPJLambdaWrapper<News> queryNews = new MPJLambdaWrapper<>();
+        queryNews
+                .select(News::getId)
+                .selectAs(Department::getName, ProclamationPageVo::getSendDeptIdCN)
+                .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationPageVo.class).contains(x.getProperty()))
+                .leftJoin(Department.class, Department::getId, News::getSendDeptId)
+                .eq(News::getCreateUserId, StpUtil.getLoginIdAsLong())
+                .eq(News::getTypeId, 2)
+                .like(dto.getFullHead() != null, News::getFullHead, dto.getFullHead())
+                .like(dto.getKeyword() != null, News::getNewsContent, dto.getKeyword())
+                .orderByDesc(News::getReleaseTime);
+        IPage<ProclamationPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), ProclamationPageVo.class, queryNews);
+        return page;
     }
 
     @Override
-    public IPage<NewsPageVo> proclamationReceiptBox(NewsPageDto dto) {
-        return null;
+    public IPage<ProclamationPageVo> proclamationReceiptBox(ProclamationPageDto dto) {
+        MPJLambdaWrapper<News> queryNews = new MPJLambdaWrapper<>();
+        queryNews
+                .select(News::getId)
+                .selectAs(Department::getName, ProclamationPageVo::getSendDeptIdCN)
+                .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationPageVo.class).contains(x.getProperty()))
+                .leftJoin(Department.class, Department::getId, News::getSendDeptId)
+                .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
+                .eq(News::getTypeId, 2)
+                .eq(News::getStatus, 2)
+                .gt(News::getSendEndDate, new Date())
+                .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
+                .or()
+                .eq(News::getSendRange, 2)
+                .orderByDesc(News::getReleaseTime);
+        IPage<ProclamationPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), ProclamationPageVo.class, queryNews);
+        return page;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean changeStatus(ChangeNewsDto changeNewsDto) {
+        News xjrNews = this.getById(changeNewsDto.getId());
+        if (changeNewsDto.getStatus() == null || xjrNews == null) {
+            throw new MyException("参数异常");
+        }
+        if (changeNewsDto.getStatus().equals(xjrNews.getStatus())) {
+            if (changeNewsDto.getStatus() == 2) {
+                throw new MyException("公告已发布!!!");
+            } else if (changeNewsDto.getStatus() == 3) {
+                throw new MyException("公告已下架!!!");
+            }
+        }
+
+        xjrNews.setStatus(changeNewsDto.getStatus());
+        //发布公告,将阅读关系中选择的阅读人添加到关系表
+        if(xjrNews.getStatus() == 2){
+            //将发布时间改为当前时间
+            xjrNews.setReleaseTime(LocalDateTime.now());
+            //将张贴时间改为当前时间
+            xjrNews.setSendStartDate(LocalDateTime.now());
+            xjrNews.setModifyUserId(StpUtil.getLoginIdAsLong());
+            xjrNews.setModifyDate(LocalDateTime.now());
+
+            LambdaQueryWrapper<NewsRelationConfig> queryConfig = new LambdaQueryWrapper<>();
+            queryConfig
+                    .eq(NewsRelationConfig::getNewsId, xjrNews.getId());
+            List<NewsRelationConfig> newsRelationConfigList = newsRelationConfigMapper.selectList(queryConfig);
+
+            HashMap<Long, XjrUser> userMap = new HashMap<>();
+            if(xjrNews.getSendRange() == 3){
+                //遍历所有关系配置
+                for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) {
+                    //阅读关系是部门
+                    if(newsRelationConfig.getRelationType() == 1){
+                        // 获取部门下的人员添加
+                        Long deptId = newsRelationConfig.getRelationId();
+                        MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
+                        queryUser
+                                .leftJoin(UserDeptRelation.class,UserDeptRelation::getUserId,XjrUser::getId)
+                                .leftJoin(Department.class,Department::getId,UserDeptRelation::getDeptId)
+                                .eq(Department::getId,deptId);
+                        List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
+                        for (XjrUser user: userList) {
+                            if(!userMap.containsKey(user.getId())){
+                                userMap.put(user.getId(),user);
+                                newsRelationMapper.insert(new NewsRelation(){{
+                                    setNewsId(xjrNews.getId());
+                                    setUserId(user.getId());
+                                    setReadMark(0);
+                                    setCreateDate(LocalDateTime.now());
+                                }});
+                            }
+                        }
+                    }
+                    //阅读关系是人员
+                    if(newsRelationConfig.getRelationType() == 2){
+                        if(!userMap.containsKey(newsRelationConfig.getRelationId())){
+                            userMap.put(newsRelationConfig.getRelationId(),new XjrUser(){{
+                                setId(newsRelationConfig.getRelationId());
+                            }});
+                            newsRelationMapper.insert(new NewsRelation(){{
+                                setNewsId(xjrNews.getId());
+                                setUserId(newsRelationConfig.getRelationId());
+                                setReadMark(0);
+                                setCreateDate(LocalDateTime.now());
+                            }});
+                        }
+                    }
+                    //阅读关系是班级
+                    if(newsRelationConfig.getRelationType() == 3){
+                        // 获取班级下的人员添加
+                        Long classId = newsRelationConfig.getRelationId();
+                        MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
+                        queryUser
+                                .leftJoin(BaseStudentSchoolRoll.class,BaseStudentSchoolRoll::getUserId,XjrUser::getId)
+                                .eq(BaseStudentSchoolRoll::getClassId,classId);
+                        List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
+                        for (XjrUser user: userList) {
+                            if(!userMap.containsKey(user.getId())){
+                                userMap.put(user.getId(),user);
+                                newsRelationMapper.insert(new NewsRelation(){{
+                                    setNewsId(xjrNews.getId());
+                                    setUserId(user.getId());
+                                    setReadMark(0);
+                                    setCreateDate(LocalDateTime.now());
+                                }});
+                            }
+                        }
+                    }
+                }
+            }
+            if(xjrNews.getSendRange() == 1){
+                MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
+                queryUser
+                        .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
+                        .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
+                        .eq(Role::getId,2);
+                List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
+                for (XjrUser user: userList) {
+                    if(!userMap.containsKey(user.getId())){
+                        userMap.put(user.getId(),user);
+                        newsRelationMapper.insert(new NewsRelation(){{
+                            setNewsId(xjrNews.getId());
+                            setUserId(user.getId());
+                            setReadMark(0);
+                            setCreateDate(LocalDateTime.now());
+                        }});
+                    }
+                }
+            }
+        }
+
+        if(xjrNews.getStatus() == 3){
+            //应该将关系配置表和关系表的数据设置为删除
+        }
+        return this.updateById(xjrNews);
     }
 
     @Override
@@ -509,7 +670,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
     public boolean SendMessage(Long id) {
         try {
             News news = newsMapper.selectById(id);
-            if (news.getSendRange() == 1) {
+            if (news.getSendRange() == 2) {
                 List<User> userList = userMapper.selectList(Wrappers.<User>query().lambda().isNotNull(User::getOpenId).ne(User::getOpenId, ""));
                 if (userList.size() > 0) {
                     for (User user : userList) {
@@ -570,7 +731,6 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
             }
         } catch (Exception ex) {
         }
-
         return true;
     }
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/oa/vo/NewsRelationConfigVo.java

@@ -11,7 +11,7 @@ public class NewsRelationConfigVo {
     @ApiModelProperty("新闻主键")
     private Long newsId;
 
-    @ApiModelProperty("关系类型 1=部门 2=人员")
+    @ApiModelProperty("关系类型 1=部门 2=人员 3=班级")
     private Integer relationType;
 
     @ApiModelProperty("关系ID")

+ 85 - 0
src/main/java/com/xjrsoft/module/oa/vo/ProclamationPageVo.java

@@ -0,0 +1,85 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author: szs
+ * @Date: 2022/6/27 15:37
+ */
+@Data
+public class ProclamationPageVo {
+    /**
+     * 公告主键
+     */
+    @ApiModelProperty("公告主键")
+    private Long id;
+
+    /**
+     * 类型(1-新闻 2-公告)
+     */
+    @ApiModelProperty("类型(1-新闻 2-公告)")
+    private Integer typeId;
+
+    /**
+     * 完整标题
+     */
+    @ApiModelProperty("完整标题")
+    private String fullHead;
+
+    /**
+     * 标题颜色
+     */
+    @ApiModelProperty("标题颜色")
+    private String fullHeadColor;
+
+    /**
+     * 公告内容
+     */
+    @ApiModelProperty("公告内容")
+    private String newsContent;
+
+    /**
+     * 发布时间
+     */
+    @ApiModelProperty("发布时间")
+    private LocalDateTime releaseTime;
+
+    /**
+     * 紧急程度  1=一般 2=紧急
+     */
+    @ApiModelProperty("紧急程度  1=一般 2=紧急")
+    private Integer emergent;
+
+    /**
+     * 发送部门
+     */
+    @ApiModelProperty("发送部门")
+    private Long sendDeptId;
+
+    /**
+     * 发送部门
+     */
+    @ApiModelProperty("发送部门")
+    private String sendDeptIdCN;
+
+    /**
+     * 张贴结束时间
+     */
+    @ApiModelProperty("张贴结束时间")
+    private LocalDateTime sendEndDate;
+
+    /**
+     * 接收人回复要求 1=必须回复 2=不允许回复 3=可以回复 (不强制要求)
+     */
+    @ApiModelProperty("接收人回复要求 1=必须回复 2=不允许回复 3=可以回复 (不强制要求)")
+    private Integer openReply;
+
+    /**
+     * 状态 1=未发布 2=已发布 3=下架
+     */
+    @ApiModelProperty("状态 1=未发布 2=已发布 3=下架")
+    private Integer status;
+}

+ 103 - 0
src/main/java/com/xjrsoft/module/oa/vo/ProclamationVo.java

@@ -0,0 +1,103 @@
+package com.xjrsoft.module.oa.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 公告详情出参
+ * @Author: szs
+ * @Date: 2023/3/8 14:34
+ */
+@Data
+public class ProclamationVo {
+
+    @ApiModelProperty("主键")
+    private Long id;
+
+    @ApiModelProperty("状态 1=未发布 2=已发布 3=下架")
+    private Integer status;
+
+    @ApiModelProperty("完整标题")
+    private String fullHead;
+
+    @ApiModelProperty("标题颜色")
+    private String fullHeadColor;
+
+    /**
+     * 发送部门
+     */
+    @ApiModelProperty("发送部门")
+    private Long sendDeptId;
+
+    /**
+     * 发送部门
+     */
+    @ApiModelProperty("发送部门")
+    private String sendDeptIdCN;
+
+    @ApiModelProperty("发布时间")
+    private LocalDateTime releaseTime;
+
+    /**
+     * 紧急程度  1=一般 2=紧急
+     */
+    @ApiModelProperty("紧急程度  1=一般 2=紧急")
+    private Integer emergent;
+
+    /**
+     * 接收人回复要求 1=必须回复 2=不允许回复 3=可以回复 (不强制要求)
+     */
+    @ApiModelProperty("接收人回复要求 1=必须回复 2=不允许回复 3=可以回复 (不强制要求)")
+    private Integer openReply;
+
+    /**
+     * 发送范围 1=所有人 2=根据权限
+     */
+    @ApiModelProperty("发送范围 1=全校教职工 2=全校师生 3=指定人员")
+    private Integer sendRange;
+
+    /**
+     * 张贴结束时间
+     */
+    @ApiModelProperty("张贴结束时间")
+    private LocalDateTime sendEndDate;
+
+    @ApiModelProperty("新闻内容")
+    private String newsContent;
+
+    /**
+     * 发送部门
+     */
+    @ApiModelProperty("发送部门")
+    private Long createUserId;
+
+    /**
+     * 附件子表
+     */
+    @ApiModelProperty("附件子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "newsId")
+    private List<NewsAppendixVo> appendixList;
+
+    /**
+     * 关系子表
+     */
+    @ApiModelProperty("关系子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "newsId")
+    private List<NewsRelationVo> relationList;
+
+    /**
+     * 关系配置子表
+     */
+    @ApiModelProperty("关系配置子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "newsId")
+    private List<NewsRelationConfigVo> newsRelationConfigVoList;
+
+}

+ 14 - 0
src/test/java/com/xjrsoft/xjrsoftboot/DateTime.java

@@ -3,10 +3,24 @@ package com.xjrsoft.xjrsoftboot;
 import cn.hutool.core.date.DateUtil;
 import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class DateTime {
     @Test
     public void DateTimeTest(){
         cn.hutool.core.date.DateTime now = DateUtil.date();
         System.out.println(now.dayOfWeek());
     }
+
+    @Test
+    public void collectionTest(){
+        Long num1 = 23L;
+        Long num2 = 23L;
+        List<Long> list = new ArrayList<>();
+        list.add(num1);
+        list.add(num2);
+        Long num3 = 23L;
+        System.err.println(list.contains(23L));
+    }
 }