Pārlūkot izejas kodu

新闻公告获取

phoenix 1 gadu atpakaļ
vecāks
revīzija
719ff1cfbe

+ 31 - 11
src/main/java/com/xjrsoft/module/oa/controller/NewsController.java

@@ -272,13 +272,13 @@ public class NewsController {
     }
 
     @GetMapping("/count-relation")
-    @ApiOperation(value = "新闻阅读权限统计")
+    @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 isReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNotNull(NewsRelation::getReplyContent));
+        Long notReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNull(NewsRelation::getReplyContent));
         Long[] arrayRefVar = {total, notRead, isRead, isReply, notReply};
         return RT.ok(arrayRefVar);
     }
@@ -301,7 +301,7 @@ public class NewsController {
         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));
+            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 delete_mark = 0 and type_id=" + typeId));
             NewsCountTypeVo newsCountTypeVo = new NewsCountTypeVo();
             newsCountTypeVo.setTypeId(typeId);
             newsCountTypeVo.setTotal(totalType);
@@ -310,7 +310,8 @@ public class NewsController {
                 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,
+                //找到和该登录用户有关系的最后一条公告
+                News newsRelation = newsService.selectJoinOne(News.class,
                         new MPJLambdaWrapper<News>()
                                 .disableSubLogicDel()
                                 .eq(News::getTypeId, typeId)
@@ -318,6 +319,16 @@ public class NewsController {
                                 .orderByDesc(News::getReleaseTime)
                                 .last("limit 1")
                                 .innerJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId));
+
+                news = newsRelation;
+                //找到晚于和该登录用户有关系的所有公告
+                List<News> newsList = newsService.list(Wrappers.<News>query().lambda().eq(News::getTypeId, typeId).lt(News::getReleaseTime, newsRelation.getReleaseTime()).orderByDesc(News::getReleaseTime));
+                for (News n : newsList) {
+                    if(n.getSendRange() == 1){//是发给所有人的
+                        news = n;
+                        break;
+                    }
+                }
             }
             if (news != null) {
                 newsCountTypeVo.setTime(news.getReleaseTime());
@@ -337,13 +348,22 @@ public class NewsController {
     @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)
+        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)
         );
+
+        List<News> newsList = newsService.list(Wrappers.<News>query().lambda().eq(News::getSendRange, 1));
+        for (News news : newsList) {
+            Long cou = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, news.getId()).eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
+            if(cou <= 0){
+                count++;
+            }
+        }
+
         return RT.ok(count);
     }
 }

+ 37 - 17
src/main/java/com/xjrsoft/module/oa/controller/ProclamationController.java

@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 公告
@@ -75,7 +76,13 @@ public class ProclamationController {
     @PostMapping
     @ApiOperation(value = "新增公告")
     public RT<Boolean> add(@RequestBody AddProclamationDto addProclamationDto) {
-        return RT.ok(newsService.addProclamation(addProclamationDto));
+        Long newsId = newsService.addProclamation(addProclamationDto);
+        if(newsId != null){
+            CompletableFuture.runAsync(() -> {
+                newsService.SendMessage(newsId);
+            });
+        }
+        return RT.ok(true);
     }
 
     @GetMapping(value = "/info")
@@ -107,9 +114,11 @@ public class ProclamationController {
     @ApiOperation(value = "发布或下架公告")
     public RT<Boolean> changeStatus(@RequestBody ChangeNewsDto changeNewsDto){
         if(newsService.changeStatus(changeNewsDto)){
-            return RT.ok(newsService.SendMessage(changeNewsDto.getId()));
+            CompletableFuture.runAsync(() -> {
+                newsService.SendMessage(changeNewsDto.getId());
+            });
         }
-        return RT.ok("操作失败",null);
+        return RT.ok(true);
     }
 
     @PutMapping("/read")
@@ -185,18 +194,6 @@ public class ProclamationController {
         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) {
@@ -209,13 +206,25 @@ public class ProclamationController {
         return RT.ok(newsService.deleteRelation(deleteNewsRelationDto));
     }
 
+    @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).isNotNull(NewsRelation::getReplyContent));
+        Long notReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNull(NewsRelation::getReplyContent));
+        Long[] arrayRefVar = {total, notRead, isRead, isReply, notReply};
+        return RT.ok(arrayRefVar);
+    }
+
     @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));
+            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 delete_mark = 0 and type_id=" + typeId));
             NewsCountTypeVo newsCountTypeVo = new NewsCountTypeVo();
             newsCountTypeVo.setTypeId(typeId);
             newsCountTypeVo.setTotal(totalType);
@@ -224,7 +233,8 @@ public class ProclamationController {
                 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,
+                //找到和该登录用户有关系的最后一条公告
+                News newsRelation = newsService.selectJoinOne(News.class,
                         new MPJLambdaWrapper<News>()
                                 .disableSubLogicDel()
                                 .eq(News::getTypeId, typeId)
@@ -232,6 +242,16 @@ public class ProclamationController {
                                 .orderByDesc(News::getReleaseTime)
                                 .last("limit 1")
                                 .innerJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId));
+
+                news = newsRelation;
+                //找到晚于和该登录用户有关系的所有公告
+                List<News> newsList = newsService.list(Wrappers.<News>query().lambda().eq(News::getTypeId, typeId).lt(News::getReleaseTime, newsRelation.getReleaseTime()).orderByDesc(News::getReleaseTime));
+                for (News n : newsList) {
+                    if(n.getSendRange() == 1){//是发给所有人的
+                        news = n;
+                        break;
+                    }
+                }
             }
             if (news != null) {
                 newsCountTypeVo.setTime(news.getReleaseTime());

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

@@ -35,7 +35,7 @@ public interface INewsService extends MPJBaseService<News> {
      * @param addProclamationDto
      * @return
      */
-    Boolean addProclamation(AddProclamationDto addProclamationDto);
+    Long addProclamation(AddProclamationDto addProclamationDto);
 
     /**
      * 根据id获取公告详情

+ 10 - 6
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -142,7 +142,9 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
     }
 
     @Override
-    public Boolean addProclamation(AddProclamationDto addProclamationDto) {
+    @Transactional
+    public Long addProclamation(AddProclamationDto addProclamationDto) {
+        Boolean isSuccess = false;
         News news = BeanUtil.toBean(addProclamationDto, News.class);
         news.setTypeId(2);
         news.setEnabledMark(EnabledMark.ENABLED.getCode());
@@ -168,7 +170,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         if (addProclamationDto.getSendRange() == 3 && addProclamationDto.getRelationList() != null) {
             addRelationConfig(news, addProclamationDto);
         }
-        return true;
+        return news.getId();
     }
 
     @Override
@@ -314,6 +316,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean updateProclamation(UpdateProclamationDto updateProclamationDto) {
         News news = BeanUtil.toBean(updateProclamationDto, News.class);
         news.setModifyDate(LocalDateTime.now());
@@ -817,7 +820,6 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
         return true;
     }
 
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean delete(List<Long> ids) {
@@ -831,7 +833,8 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
     public boolean SendMessage(Long id) {
         try {
             News news = newsMapper.selectById(id);
-            if (news.getSendRange() == 2) {
+            Department department = departmentMapper.selectById(news.getSendDeptId());
+            if (news.getSendRange() == 1) {
                 List<User> userList = userMapper.selectList(Wrappers.<User>query().lambda().isNotNull(User::getOpenId).ne(User::getOpenId, ""));
                 if (userList.size() > 0) {
                     for (User user : userList) {
@@ -847,7 +850,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                         data.put("thing23", data1);
 
                         JSONObject data2 = new JSONObject();
-                        data2.put("value", news.getAuthorName());
+                        data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName());
                         data.put("thing18", data2);
 
                         JSONObject data3 = new JSONObject();
@@ -856,6 +859,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                         weChatSendMessageDto.setContent(data);
                         weChatService.sendTemplateMessage(weChatSendMessageDto);
                     }
+//
                 }
             } else {
                 List<NewsRelationVo> newsRelationVoList = newsRelationMapper.selectJoinList(NewsRelationVo.class,
@@ -879,7 +883,7 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                         data.put("thing23", data1);
 
                         JSONObject data2 = new JSONObject();
-                        data2.put("value", news.getAuthorName());
+                        data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName());
                         data.put("thing18", data2);
 
                         JSONObject data3 = new JSONObject();

+ 1 - 1
src/main/java/com/xjrsoft/module/workflow/model/NoticePolicyParam.java

@@ -17,7 +17,7 @@ public class NoticePolicyParam {
     private String taskId;
 
     /**
-     * 用户名称
+     * 任务名称
      */
     private String taskName;
 

+ 3 - 0
src/main/resources/mapper/oa/NewsMapper.xml

@@ -14,6 +14,9 @@
         <if test="dto.type != null and dto.type > 0">
             and t.type_id = #{dto.type}
         </if>
+        <if test="dto.type != null and dto.type = 1">
+            and t.wf_status
+        </if>
         <if test="dto.authorName != null and dto.authorName != ''">
             and t.author_name LIKE CONCAT('%',#{dto.authorName},'%')
         </if>