浏览代码

公告年级班级树添加虚拟根节点

phoenix 1 年之前
父节点
当前提交
ec4ab55eb0

+ 2 - 18
src/main/java/com/xjrsoft/module/oa/controller/NewsController.java

@@ -1,6 +1,5 @@
 package com.xjrsoft.module.oa.controller;
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -25,7 +24,6 @@ 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.student.vo.ClassHonorsSemesterClassTreeVo;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import io.swagger.annotations.Api;
@@ -39,16 +37,13 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
- * <p>
- * 新闻中心表 前端控制器
- * </p>
- *
+ * 新闻
  * @author zlf
  * @since 2022-06-16
  */
 @RestController
 @RequestMapping(GlobalConstant.OA_MODULE_PREFIX + "/news")
-@Api(value = GlobalConstant.OA_MODULE_PREFIX + "/news", tags = "新闻公告")
+@Api(value = GlobalConstant.OA_MODULE_PREFIX + "/news", tags = "新闻")
 @AllArgsConstructor
 public class NewsController {
 
@@ -58,17 +53,6 @@ public class NewsController {
     private INewsAppendixService newsAppendixService;
     private INewsRelationConfigService newsRelationConfigService;
 
-
-    @GetMapping(value = "/gradeClassTree")
-    @ApiOperation(value="新闻年级班级树")
-    public RT<List<NewsGradeClassTreeVo>> gradeClassTree(){
-        List<NewsGradeClassTreeVo> list = newsService.getGradeClassTree();
-        if(ObjectUtil.isNull(list) || list.size() == 0){
-            return RT.error("找不到此数据!");
-        }
-        return RT.ok(list);
-    }
-
     @GetMapping
     @ApiOperation(value = "获取新闻分页")
     public RT<PageOutput<NewsPageVo>> page(NewsPageDto dto) {

+ 345 - 0
src/main/java/com/xjrsoft/module/oa/controller/ProclamationController.java

@@ -0,0 +1,345 @@
+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;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+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;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 公告
+ * @author zlf
+ * @since 2022-06-16
+ */
+@RestController
+@RequestMapping(GlobalConstant.OA_MODULE_PREFIX + "/proclamation")
+@Api(value = GlobalConstant.OA_MODULE_PREFIX + "/proclamation", tags = "公告")
+@AllArgsConstructor
+public class ProclamationController {
+
+    private INewsService newsService;
+
+    private INewsRelationService newsRelationService;
+    private INewsAppendixService newsAppendixService;
+    private INewsRelationConfigService newsRelationConfigService;
+    
+    @GetMapping(value = "/gradeClassTree")
+    @ApiOperation(value="公告年级班级树")
+    public RT<List<NewsGradeClassTreeVo>> gradeClassTree(){
+        List<NewsGradeClassTreeVo> list = newsService.getGradeClassTree();
+        if(ObjectUtil.isNull(list) || list.size() == 0){
+            return RT.error("找不到此数据!");
+        }
+        return RT.ok(list);
+    }
+
+    @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);
+        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);
+        return RT.ok(pageOutput);
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增公告")
+    public RT<Boolean> addProclamation(@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) {
+            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);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改公告")
+    public RT<Boolean> update(@RequestBody UpdateNewsDto updateNewsDto) {
+        //News news = BeanUtil.toBean(updateNewsDto, News.class);
+        return RT.ok(newsService.update(updateNewsDto));
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除公告")
+    public RT<Boolean> delete(@RequestBody List<Long> ids) {
+        return RT.ok(newsService.delete(ids));
+    }
+
+
+    @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("参数异常");
+        }
+        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));
+    }
+
+    @PutMapping("/read")
+    @ApiOperation(value = "读公告")
+    public RT<Boolean> read(@RequestBody List<Long> ids) {
+        List<NewsRelation> toSaveList = newsRelationService.list(
+                Wrappers.<NewsRelation>query().lambda()
+                        .in(NewsRelation::getNewsId, ids)
+                        .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
+        for (NewsRelation newsRelation : toSaveList) {
+            newsRelation.setReadMark(1);
+            newsRelation.setReadDate(LocalDateTime.now());
+        }
+//        newsRelationService.remove(Wrappers.<NewsRelation>query().lambda()
+//                .in(NewsRelation::getNewsId, ids)
+//                .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
+        return RT.ok(newsRelationService.updateBatchById(toSaveList));
+    }
+
+    @PutMapping("/reply")
+    @ApiOperation(value = "公告回复")
+    public RT<Boolean> reply(@RequestBody NewsReplyDto newsReplyDto) {
+        NewsRelation newsRelation = newsRelationService.getOne(
+                Wrappers.<NewsRelation>query().lambda()
+                        .eq(NewsRelation::getNewsId, newsReplyDto.getId())
+                        .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
+        if (newsRelation == null) {
+            newsRelation = new NewsRelation();
+            newsRelation.setNewsId(newsReplyDto.getId());
+            newsRelation.setUserId(StpUtil.getLoginIdAsLong());
+            newsRelation.setReadMark(1);
+            newsRelation.setReadDate(LocalDateTime.now());
+            newsRelation.setReplyContent(newsReplyDto.getReplyContent());
+            return RT.ok(newsRelationService.save(newsRelation));
+        }
+
+        if (newsRelation.getReadMark() == null || newsRelation.getReadMark() == 0) {
+            newsRelation.setReadMark(1);
+            newsRelation.setReadDate(LocalDateTime.now());
+        }
+        newsRelation.setReplyContent(newsReplyDto.getReplyContent());
+        return RT.ok(newsRelationService.updateById(newsRelation));
+    }
+
+    @GetMapping("/page-relation")
+    @ApiOperation(value = "获取公告阅读权限分页")
+    public RT<PageOutput<NewsRelationVo>> pageRelation(NewsRelationPageDto dto) {
+
+        IPage<NewsRelationVo> page = newsRelationService.selectJoinListPage(ConventPage.getPage(dto), NewsRelationVo.class,
+                new MPJLambdaWrapper<NewsRelation>()
+                        .eq(NewsRelation::getNewsId, dto.getNewsId())
+                        .eq(ObjectUtil.isNotEmpty(dto.getReadMark()) && dto.getReadMark() > 0, NewsRelation::getReadMark, dto.getReadMark() == 1 ? 0 : 1)
+                        .isNull(ObjectUtil.isNotEmpty(dto.getReplyMark()) && dto.getReplyMark() == 1, NewsRelation::getReplyContent)
+                        .isNotNull(ObjectUtil.isNotEmpty(dto.getReplyMark()) && dto.getReplyMark() == 2, NewsRelation::getReplyContent)
+                        .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))
+        );
+        PageOutput<NewsRelationVo> pageOutput = ConventPage.getPageOutput(page);
+        return RT.ok(pageOutput);
+    }
+
+
+    @GetMapping("/page-relation-config")
+    @ApiOperation(value = "获取公告权限分页")
+    public RT<PageOutput<NewsRelationConfigVo>> pageRelationConfig(NewsRelationPageDto dto) {
+        Wrapper<NewsRelationConfig> wrapper = Wrappers.<NewsRelationConfig>query().lambda()
+                .eq(NewsRelationConfig::getNewsId, dto.getNewsId())
+                .select(NewsRelationConfig.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationConfigVo.class).contains(x.getProperty()));
+
+        IPage<NewsRelationConfig> page = newsRelationConfigService.page(ConventPage.getPage(dto), wrapper);
+        PageOutput<NewsRelationConfigVo> pageOutput = ConventPage.getPageOutput(page, NewsRelationConfigVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping("/count-relation")
+    @ApiOperation(value = "公告阅读权限统计")
+    public RT<Long[]> 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 isReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNull(NewsRelation::getReplyContent));
+        Long notReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNotNull(NewsRelation::getReplyContent));
+        Long[] arrayRefVar = {total, notRead, isRead, isReply, notReply};
+        return RT.ok(arrayRefVar);
+    }
+
+    @PutMapping("/update-relation")
+    @ApiOperation(value = "设置公告阅读权限")
+    public RT<Boolean> updateRelation(@RequestBody UpdateNewsRelationDto updateRelationDto) {
+        return RT.ok(newsService.updateRelation(updateRelationDto));
+    }
+
+    @DeleteMapping("/delete-relation")
+    @ApiOperation(value = "删除公告阅读权限")
+    public RT<Boolean> deleteRelation(@RequestBody DeleteNewsRelationDto deleteNewsRelationDto) {
+        return RT.ok(newsService.deleteRelation(deleteNewsRelationDto));
+    }
+
+    @GetMapping("/count-type")
+    @ApiOperation(value = "未读类型统计")
+    public RT<List<NewsCountTypeVo>> countType() {
+        List<NewsCountTypeVo> newsCountTypeVoList = new ArrayList<>();
+        Integer typeIds[] = {1, 2, 3};
+        for (Integer typeId : typeIds) {
+            Long totalType = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()).eq(NewsRelation::getReadMark, 0).in(NewsRelation::getNewsId, "SELECT id from xjr_oa_news where type_id=" + typeId));
+            NewsCountTypeVo newsCountTypeVo = new NewsCountTypeVo();
+            newsCountTypeVo.setTypeId(typeId);
+            newsCountTypeVo.setTotal(totalType);
+            News news = new News();
+            if(typeId == 1){
+                news = newsService.getOne(Wrappers.<News>query().lambda().eq(News::getTypeId, typeId).orderByDesc(News::getReleaseTime).last("limit 1"));
+            }
+            if(typeId == 2){
+                news = newsService.selectJoinOne(News.class,
+                        new MPJLambdaWrapper<News>()
+                                .disableSubLogicDel()
+                                .eq(News::getTypeId, typeId)
+                                .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
+                                .orderByDesc(News::getReleaseTime)
+                                .last("limit 1")
+                                .innerJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId));
+            }
+            if (news != null) {
+                newsCountTypeVo.setTime(news.getReleaseTime());
+                newsCountTypeVo.setTitle(news.getBriefHead());
+            }
+            newsCountTypeVoList.add(newsCountTypeVo);
+        }
+        return RT.ok(newsCountTypeVoList);
+    }
+
+    @GetMapping("/send-message")
+    @ApiOperation(value = "发送消息")
+    public RT<Boolean> sendMessage(@RequestParam Long id) {
+        return RT.ok(newsService.SendMessage(id));
+    }
+
+    @GetMapping("/unread-count")
+    @ApiOperation(value = "获取登录人未读消息数量")
+    public RT<Integer> unreadCount() {
+        Integer count = newsService.selectJoinCount(
+            new MPJLambdaWrapper<News>()
+            .eq(NewsRelation::getReadMark, 0)
+            .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
+            .eq(News::getDeleteMark, DeleteMark.NODELETE.getCode())
+            .innerJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
+        );
+        return RT.ok(count);
+    }
+}

+ 107 - 0
src/main/java/com/xjrsoft/module/oa/dto/AddProclamationDto.java

@@ -0,0 +1,107 @@
+package com.xjrsoft.module.oa.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Zexy
+ */
+@Data
+public class AddProclamationDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 类型(1-新闻2-公告)
+     */
+    @ApiModelProperty("类型(1-新闻2-公告)")
+    @NotNull(message = "类型(1-新闻2-公告)!")
+    @Min(value = 1, message = "类型必须大于0")
+    private Integer typeId;
+
+
+    @ApiModelProperty("状态 1=未发布 2=已发布 3=下架")
+    @Min(value = 1, message = "类型必须大于0")
+    private Integer status;
+
+    /**
+     * 完整标题
+     */
+    @ApiModelProperty("标题")
+    @Length(min = 1, max = 250, message = "标题最多250个字符!")
+    private String fullHead;
+
+    /**
+     * 标题颜色
+     */
+    @ApiModelProperty("标题颜色")
+    @Length(min = 1, max = 50, message = "标题颜色最多50个字符!")
+    private String fullHeadColor;
+
+    /**
+     * 发送部门
+     */
+    @ApiModelProperty("发送部门")
+    private Long sendDeptId;
+
+    /**
+     * 发布时间
+     */
+    @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("新闻内容")
+    @Length(min = 1, max = 1000, message = "新闻内容最多1000个字符!")
+    private String newsContent;
+
+    /**
+     * 附件子表
+     */
+    @ApiModelProperty("附件子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "newsId")
+    private List<AddNewsAppendixDto> appendixList;
+
+    /**
+     * 关系子表
+     */
+    @ApiModelProperty("关系子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "newsId")
+    private List<AddNewsRelationDto> relationList;
+}

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

@@ -20,4 +20,6 @@ public interface NewsMapper extends MPJBaseMapper<News> {
     IPage<NewsPageVo> manageBox(IPage<NewsPageDto> page,NewsPageDto dto);
 
     IPage<NewsPageVo> receiptBox(IPage<NewsPageDto> page,NewsPageDto dto);
+
+    Boolean insert();
 }

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

@@ -21,6 +21,30 @@ public interface INewsService extends MPJBaseService<News> {
 
     List<NewsGradeClassTreeVo> getGradeClassTree();
 
+    /**
+     * 添加新闻
+     *
+     * @param addProclamationDto
+     * @return
+     */
+    Boolean addProclamation(AddProclamationDto addProclamationDto);
+
+    /**
+     * 获取新闻分页
+     *
+     * @param dto
+     * @return
+     */
+    IPage<NewsPageVo> proclamationManageBox(NewsPageDto dto);
+
+    /**
+     * 获取新闻分页
+     *
+     * @param dto
+     * @return
+     */
+    IPage<NewsPageVo> proclamationReceiptBox(NewsPageDto dto);
+
     /**
      * 添加新闻
      *

+ 140 - 14
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -33,9 +33,7 @@ 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.organization.dto.WeChatSendMessageDto;
-import com.xjrsoft.module.organization.entity.Department;
-import com.xjrsoft.module.organization.entity.User;
-import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.organization.entity.*;
 import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
 import com.xjrsoft.module.organization.mapper.UserMapper;
 import com.xjrsoft.module.organization.service.IWeChatService;
@@ -90,6 +88,12 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
     public List<NewsGradeClassTreeVo> getGradeClassTree() {
         List<NewsGradeClassTreeVo> treeVoList = new ArrayList<NewsGradeClassTreeVo>();
 
+        //虚拟父级
+        treeVoList.add(new NewsGradeClassTreeVo(){{
+            setId(666666L);
+            setName("虚拟根节点");
+        }});
+
         //获取所有班级的年级作为树的父级
         MPJLambdaWrapper<BaseClass> queryGrade = new MPJLambdaWrapper<>();
         queryGrade
@@ -102,6 +106,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
             treeVoList.add(new NewsGradeClassTreeVo(){{
                 setId(node.getId());
                 setName(node.getName());
+                setParentId(666666L);
             }});
         });
 
@@ -120,6 +125,127 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         return resultTreeVoList;
     }
 
+    @Override
+    public Boolean addProclamation(AddProclamationDto addProclamationDto) {
+        News news = BeanUtil.toBean(addProclamationDto, News.class);
+        news.setTypeId(2);
+        news.setEnabledMark(EnabledMark.ENABLED.getCode());
+        newsMapper.insert(news);
+
+        //添加附件子表
+        if (addProclamationDto.getAppendixList() != null) {
+            for (AddNewsAppendixDto appendixDto : addProclamationDto.getAppendixList()) {
+                NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
+                newsAppendix.setNewsId(news.getId());
+                newsAppendixMapper.insert(newsAppendix);
+            }
+        }
+
+        //公告需要添加阅读关系,发送范围 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());
+                }});
+            }
+
+        }
+
+        //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());
+                }});
+            }
+        }
+
+//        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());
+//        }
+
+        return true;
+    }
+
+    @Override
+    public IPage<NewsPageVo> proclamationManageBox(NewsPageDto dto) {
+        return null;
+    }
+
+    @Override
+    public IPage<NewsPageVo> proclamationReceiptBox(NewsPageDto dto) {
+        return null;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(AddNewsDto addNewsDto) {
@@ -140,12 +266,16 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         //公告需要添加阅读关系,发送范围 1=全校教职工 2=全校师生 3=指定人员
         //1=全校教职工,添加全校教职工到关系表
         if(addNewsDto.getTypeId() == 2 && addNewsDto.getSendRange() == 1){
-//            MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
-//            queryUser
-//                    .leftJoin(UserRoleRelation.class,UserRoleRelation::getUserId,XjrUser::getId)
-//                    .leftJoin(Department.class,Department::getId,UserDeptRelation::getDeptId)
-//                    .eq(Department::getId,deptId);
-//            List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
+            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) {
+//                newsRelation.setUserId(user.getId());
+//                newsRelationMapper.insert(newsRelation);
+//            }
 
         }
 
@@ -168,12 +298,8 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                             .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);
+                        newsRelation.setUserId(user.getId());
                         newsRelationMapper.insert(newsRelation);
                     }
                 }