lideyin 6 лет назад
Родитель
Сommit
9a2aa13c62

+ 71 - 28
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/NoticeController.java

@@ -7,12 +7,17 @@
 
 package cn.com.qmth.examcloud.core.examwork.api.controller;
 
+import cn.com.qmth.examcloud.api.commons.enums.NoticeReceiverRuleType;
+import cn.com.qmth.examcloud.api.commons.enums.NoticeStatus;
 import cn.com.qmth.examcloud.api.commons.exchange.PageInfo;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.examwork.api.controller.bean.*;
+import cn.com.qmth.examcloud.core.examwork.dao.NoticeRepo;
+import cn.com.qmth.examcloud.core.examwork.dao.entity.NoticeEntity;
 import cn.com.qmth.examcloud.core.examwork.service.NoticeService;
 import cn.com.qmth.examcloud.core.examwork.service.bean.*;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import com.mysql.cj.util.StringUtils;
 import io.swagger.annotations.Api;
@@ -39,6 +44,9 @@ public class NoticeController extends ControllerSupport {
     @Autowired
     private NoticeService noticeService;
 
+    @Autowired
+    private NoticeRepo noticeRepo;
+
     @ApiOperation(value = "分页查询消息列表", notes = "带条件带分页")
     @GetMapping("getPagedNoticeList/{curPage}/{pageSize}")
     public PageInfo<NoticeDomain> getPagedNoticeList(@PathVariable Integer curPage,
@@ -64,12 +72,8 @@ public class NoticeController extends ControllerSupport {
     @ApiOperation(value = "添加新通知")
     @PostMapping("addNotice")
     public void addNotice(@Validated @RequestBody AddNoticeDomain addNoticeDomain) {
-        String content = addNoticeDomain.getContent();
-        String simpleText =  Jsoup.clean(content, Whitelist.simpleText());
-        //普通文本内容不允许超过500个字 TODO 该方法待校验,因为不确定富文本框中图片的保存格式
-        if (simpleText.length()>500){
-            throw new StatusException("500007","通知内容不得超过500个字符");
-        }
+        validateAddNotice(addNoticeDomain);
+
         AddNoticeInfo info = getAddNoticeInfoFrom(addNoticeDomain);
         int result =noticeService.addNotice(info);
         if (result==0){
@@ -80,35 +84,16 @@ public class NoticeController extends ControllerSupport {
     @ApiOperation(value = "修改通知信息")
     @PostMapping("updateNotice")
     public void updateNotice(@Validated @RequestBody UpdateNoticeDomain updateNoticeDomain) {
-        String content = updateNoticeDomain.getContent();
-        String simpleText =  Jsoup.clean(content, Whitelist.simpleText());
-        //普通文本内容不允许超过500个字 TODO 该方法待校验,因为不确定富文本框中图片的保存格式
-        if (simpleText.length()>500){
-            throw new StatusException("500007","通知内容不得超过500个字符");
-        }
+        validateUpdateNotice(updateNoticeDomain);
 
-        //校验状态
         UpdateNoticeInfo info = getUpdateNoticeInfoFrom(updateNoticeDomain);
-
-        //因为有可能内容没有发生过变化,更新条目可能为0。所以不判断返回值
         noticeService.updateNotice(info);
     }
 
     @ApiOperation(value = "删除通知信息")
     @DeleteMapping("/{noticeId}")
     public void deleteNotice(@Validated @ApiParam(value = "通知id,多个以逗号分隔") @PathVariable(required = true) String noticeId) {
-        if (noticeId.indexOf(",")>-1 && noticeId.lastIndexOf(",")==noticeId.length()-1){
-            noticeId=noticeId.substring(0, noticeId.length()-1);
-        }
-        String[] noticeIdArr = noticeId.split(",");
-        List<Long> noticeIdList = Arrays.asList(noticeIdArr).stream()
-                .map(p -> {
-                    try{
-                        return Long.parseLong(p);
-                    }catch (Exception e){
-                        throw new StatusException("500005","通知id格式不正确");
-                    }
-                }).collect(Collectors.toList());
+        List<Long> noticeIdList= validateDeleteNotice(noticeId);
         int result = noticeService.deleteNotice(getRootOrgId(),noticeIdList);
         if (result==0){
             throw new StatusException("500006","删除失败");
@@ -162,10 +147,12 @@ public class NoticeController extends ControllerSupport {
         info.setTitle(addNoticeDomain.getTitle());
         return info;
     }
+
     private UpdateNoticeInfo getUpdateNoticeInfoFrom(UpdateNoticeDomain updateNoticeDomain) {
         UpdateNoticeInfo info = new UpdateNoticeInfo();
         User accessUser = this.getAccessUser();
         info.setId(updateNoticeDomain.getId());
+        info.setTitle(updateNoticeDomain.getTitle());
         info.setContent(updateNoticeDomain.getContent());
         info.setPublisher(updateNoticeDomain.getPublisher());
         info.setPublishObjectId(updateNoticeDomain.getPublishObjectId());
@@ -175,7 +162,6 @@ public class NoticeController extends ControllerSupport {
         info.setNoticeStatus(updateNoticeDomain.getNoticeStatus());
         return info;
     }
-
     private List<UserNoticeDomain> getNoticeDomainListFrom(List<UserNoticeInfo> noticeInfoList) {
         List<UserNoticeDomain> resultList = new ArrayList<>();
         for (UserNoticeInfo info : noticeInfoList) {
@@ -209,10 +195,67 @@ public class NoticeController extends ControllerSupport {
                 domain.setPublishTime(ni.getPublishTime());
                 domain.setTitle(ni.getTitle());
                 domain.setPublishObject(ni.getPublishObject());
+                domain.setRuleType(ni.getRuleType());
+                domain.setContent(ni.getContent());
                 domainList.add(domain);
             }
         }
         resultPageInfo.setList(domainList);
         return resultPageInfo;
     }
+
+    private void validateAddNotice(AddNoticeDomain addNoticeDomain) {
+        if (addNoticeDomain.getRuleType()== NoticeReceiverRuleType.STUDENTS_OF_EXAM
+                || addNoticeDomain.getRuleType()==NoticeReceiverRuleType.TEACHER_OF_MARK_WORK){
+            if (StringUtils.isNullOrEmpty(addNoticeDomain.getPublishObjectId()) ){
+                throw new StatusException("500009","发送对象不允许为空");
+            }
+        }
+        String content = addNoticeDomain.getContent();
+        String simpleText =  Jsoup.clean(content, Whitelist.simpleText());
+        //普通文本内容不允许超过500个字 TODO 该方法待校验,因为不确定富文本框中图片的保存格式
+        if (simpleText.length()>500){
+            throw new StatusException("500010","通知内容不得超过500个字符");
+        }
+    }
+    private void validateUpdateNotice(UpdateNoticeDomain updateNoticeDomain) {
+        if (updateNoticeDomain.getRuleType()== NoticeReceiverRuleType.STUDENTS_OF_EXAM
+                || updateNoticeDomain.getRuleType()==NoticeReceiverRuleType.TEACHER_OF_MARK_WORK){
+            if (StringUtils.isNullOrEmpty(updateNoticeDomain.getPublishObjectId()) ){
+                throw new StatusException("500011","发送对象不允许为空");
+            }
+        }
+        String content = updateNoticeDomain.getContent();
+        String simpleText =  Jsoup.clean(content, Whitelist.simpleText());
+        //普通文本内容不允许超过500个字 TODO 该方法待校验,因为不确定富文本框中图片的保存格式
+        if (simpleText.length()>500){
+            throw new StatusException("500012","通知内容不得超过500个字符");
+        }
+        NoticeEntity notice = GlobalHelper.getEntity(noticeRepo, updateNoticeDomain.getId(), NoticeEntity.class);
+        if (notice==null){
+            throw new StatusException("500013","该通知已不存在,请刷新后重试");
+        }
+        if (notice.getNoticeStatus()!= NoticeStatus.CREATION){
+            throw new StatusException("500014","该通知状态已变更,请刷新后重试");
+        }
+    }
+    private List<Long> validateDeleteNotice(String noticeId){
+        if (noticeId.indexOf(",")>-1 && noticeId.lastIndexOf(",")==noticeId.length()-1){
+            noticeId=noticeId.substring(0, noticeId.length()-1);
+        }
+        String[] noticeIdArr = noticeId.split(",");
+        List<Long> noticeIdList = null;
+        try {
+            noticeIdList = Arrays.asList(noticeIdArr).stream()
+                    .map(p -> Long.parseLong(p)).collect(Collectors.toList());
+        } catch (Exception e) {
+            throw new StatusException("500015","通知id格式不正确",e);
+        }
+        List<NoticeEntity> noticeList = noticeRepo.findByIdIn(noticeIdList);
+        boolean existPublishingData = noticeList.stream().anyMatch(p->p.getNoticeStatus()==NoticeStatus.PUBLISH);
+        if (existPublishingData){
+            throw new StatusException("500016","通知状态已改变,请刷新后重试");
+        }
+        return noticeIdList;
+    }
 }

+ 0 - 1
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/bean/AddNoticeDomain.java

@@ -55,7 +55,6 @@ public class AddNoticeDomain implements JsonSerializable {
      * 发送对象
      */
     @ApiModelProperty("发送对象,多个以逗号分隔")
-    @NotNull(message = "发送对象不允许为空")
     private String publishObjectId;
     /**
      * 发布者

+ 33 - 3
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/bean/NoticeDomain.java

@@ -8,10 +8,15 @@
 package cn.com.qmth.examcloud.core.examwork.api.controller.bean;
 
 import cn.com.qmth.examcloud.api.commons.enums.NoticePublishStatus;
+import cn.com.qmth.examcloud.api.commons.enums.NoticeReceiverRuleType;
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 通知信息实体
@@ -33,7 +38,7 @@ public class NoticeDomain implements JsonSerializable {
      * 发送对象
      */
     @ApiModelProperty("发送对象")
-    private String publishObject;
+    private java.util.List<Map<String,Object>> publishObject;
     /**
      * 发布者
      */
@@ -49,6 +54,31 @@ public class NoticeDomain implements JsonSerializable {
      */
     @ApiModelProperty("发送状态")
     private NoticePublishStatus publishStatus;
+    /**
+     * 规则类型
+     */
+    @Enumerated(EnumType.STRING)
+    private NoticeReceiverRuleType ruleType;
+    /**
+     * 内容
+     */
+    private String content;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public NoticeReceiverRuleType getRuleType() {
+        return ruleType;
+    }
+
+    public void setRuleType(NoticeReceiverRuleType ruleType) {
+        this.ruleType = ruleType;
+    }
 
     public Long getId() {
         return id;
@@ -66,11 +96,11 @@ public class NoticeDomain implements JsonSerializable {
         this.title = title;
     }
 
-    public String getPublishObject() {
+    public List<Map<String, Object>> getPublishObject() {
         return publishObject;
     }
 
-    public void setPublishObject(String publishObject) {
+    public void setPublishObject(List<Map<String, Object>> publishObject) {
         this.publishObject = publishObject;
     }
 

+ 0 - 1
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/bean/UpdateNoticeDomain.java

@@ -54,7 +54,6 @@ public class UpdateNoticeDomain implements JsonSerializable {
      * 发送对象
      */
     @ApiModelProperty("发送对象,多个以逗号分隔")
-    @NotNull(message = "发送对象不允许为空")
     private String publishObjectId;
     /**
      * 发布者

+ 3 - 0
examcloud-core-examwork-dao/src/main/java/cn/com/qmth/examcloud/core/examwork/dao/NoticePublishScheduleRepo.java

@@ -5,6 +5,7 @@ import cn.com.qmth.examcloud.core.examwork.dao.entity.NoticePublishScheduleEntit
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -18,7 +19,9 @@ public interface NoticePublishScheduleRepo extends JpaRepository<NoticePublishSc
 
     List<NoticePublishScheduleEntity> findByPublishStatus(NoticePublishStatus publishStatus);
 
+    @Transactional
     @Modifying
+    @Query(value="delete from EC_E_NOTICE_PUBLISH_SCHEDULE where root_org_id=?1 and notice_id in ?2",nativeQuery = true)
     int deleteByRootOrgIdAndNoticeIdIn(Long rootOrgId,List<Long> noticeId);
 
     @Transactional

+ 6 - 1
examcloud-core-examwork-dao/src/main/java/cn/com/qmth/examcloud/core/examwork/dao/NoticeReceiverRuleRepo.java

@@ -4,6 +4,7 @@ import cn.com.qmth.examcloud.core.examwork.dao.entity.NoticeReceiverRuleEntity;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -11,8 +12,12 @@ import java.util.List;
 
 public interface NoticeReceiverRuleRepo extends JpaRepository<NoticeReceiverRuleEntity, Long>,
         QueryByExampleExecutor<NoticeReceiverRuleEntity>, JpaSpecificationExecutor<NoticeReceiverRuleEntity> {
-    List<NoticeReceiverRuleEntity> findByRootOrgIdAndNoticeId(Long rootOrgId,Long noticeId);
 
+    List<NoticeReceiverRuleEntity> findByRootOrgIdAndNoticeIdIn(Long rootOrgId,List<Long> noticeIdList);
+
+    @Transactional
+    @Modifying
+    @Query(value="delete from EC_E_NOTICE_RECEIVER_RULE where root_org_id=?1 and notice_id in ?2",nativeQuery = true)
     int deleteByRootOrgIdAndNoticeIdIn(Long rootOrgId, List<Long> noticeIdList);
 
     @Transactional

+ 1 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/NoticeService.java

@@ -76,4 +76,5 @@ public interface NoticeService {
      * 处理过期的通知数据(自动服务调用)
      */
     void disposeOverdueNotice();
+
 }

+ 36 - 3
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/bean/NoticeInfo.java

@@ -8,10 +8,16 @@
 package cn.com.qmth.examcloud.core.examwork.service.bean;
 
 import cn.com.qmth.examcloud.api.commons.enums.NoticePublishStatus;
+import cn.com.qmth.examcloud.api.commons.enums.NoticeReceiverRuleType;
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Lob;
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 考试分数信息
@@ -36,7 +42,8 @@ public class NoticeInfo implements JsonSerializable {
      * 发送对象
      */
     @ApiModelProperty("发送对象")
-    private String publishObject;
+    private java.util.List<Map<String,Object>> publishObject;
+
     /**
      * 发布者
      */
@@ -52,6 +59,32 @@ public class NoticeInfo implements JsonSerializable {
      */
     @ApiModelProperty("发送状态")
     private NoticePublishStatus publishStatus;
+    /**
+     * 规则类型
+     */
+    @Enumerated(EnumType.STRING)
+    private NoticeReceiverRuleType ruleType;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public NoticeReceiverRuleType getRuleType() {
+        return ruleType;
+    }
+
+    public void setRuleType(NoticeReceiverRuleType ruleType) {
+        this.ruleType = ruleType;
+    }
 
     public Long getId() {
         return id;
@@ -69,11 +102,11 @@ public class NoticeInfo implements JsonSerializable {
         this.title = title;
     }
 
-    public String getPublishObject() {
+    public List<Map<String, Object>> getPublishObject() {
         return publishObject;
     }
 
-    public void setPublishObject(String publishObject) {
+    public void setPublishObject(List<Map<String, Object>> publishObject) {
         this.publishObject = publishObject;
     }
 

+ 87 - 56
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/impl/NoticeServiceImpl.java

@@ -16,10 +16,10 @@ import cn.com.qmth.examcloud.core.examwork.dao.entity.*;
 import cn.com.qmth.examcloud.core.examwork.service.NoticeService;
 import cn.com.qmth.examcloud.core.examwork.service.bean.*;
 import cn.com.qmth.examcloud.marking.api.MarkWorkCloudService;
-import cn.com.qmth.examcloud.marking.api.bean.MarkWorkBean;
-import cn.com.qmth.examcloud.marking.api.request.GetMarkWorkReq;
+import cn.com.qmth.examcloud.marking.api.bean.MarkWorkMainBean;
+import cn.com.qmth.examcloud.marking.api.request.GetMarkWorkMainByIdsReq;
 import cn.com.qmth.examcloud.marking.api.request.GetMarkersByWorkIdsReq;
-import cn.com.qmth.examcloud.marking.api.response.GetMarkWorkResp;
+import cn.com.qmth.examcloud.marking.api.response.GetMarkWorkMainByIdsResp;
 import cn.com.qmth.examcloud.marking.api.response.GetMarkersByWorkIdsResp;
 import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
@@ -98,17 +98,18 @@ public class NoticeServiceImpl implements NoticeService {
 
     @Override
     public int updateNoticeReadStatus(String noticeId, UserType userType, Long userId) {
-        List<Long> noticeIdList = new ArrayList<>();
-        if (noticeId.indexOf(",")>-1){
-            noticeIdList=Arrays.asList(noticeId.split(",")).stream().map(p->Long.parseLong(p)).collect(Collectors.toList());
-        }else {
-            noticeIdList=Arrays.asList(noticeId).stream().map(p->Long.parseLong(p)).collect(Collectors.toList());
+        List<Long> noticeIdList;
+        if (noticeId.contains(",")) {
+            noticeIdList = Arrays.asList(noticeId.split(",")).stream().map(p -> Long.parseLong(p)).collect(Collectors.toList());
+        } else {
+            noticeIdList = Arrays.asList(noticeId).stream().map(p -> Long.parseLong(p)).collect(Collectors.toList());
         }
         return userNoticeRepo.updateNoticeReadStatus(noticeIdList, userType.toString(), userId);
     }
 
     @Override
     public PageInfo<NoticeInfo> getPagedNoticeList(Integer curPage, Integer pageSize, NoticeInfoQuery infoQuery) {
+        List<NoticeInfo> resultList = new ArrayList<>();
         Long rootOrgId = infoQuery.getRootOrgId();
         Specification<NoticeEntity> specification = (root, query, cb) -> {
             List<Predicate> predicates = new ArrayList<>();
@@ -135,15 +136,20 @@ public class NoticeServiceImpl implements NoticeService {
         PageRequest pageRequest = PageRequest.of(curPage, pageSize,
                 new Sort(Sort.Direction.DESC, "creationTime"));
         Page<NoticeEntity> pagedNoticeEntityList = noticeRepo.findAll(specification, pageRequest);
-        List<NoticeInfo> resultList = new ArrayList<>();
+        List<Long> noticeIdList = pagedNoticeEntityList.stream().map(p -> p.getId()).collect(Collectors.toList());
+        List<NoticeReceiverRuleEntity> ruleList = getReceiverRuleList(rootOrgId, noticeIdList.toArray(new Long[noticeIdList.size()]));
+
         for (NoticeEntity ne : pagedNoticeEntityList) {
+            NoticeReceiverRuleType ruleType = getNoticeReceiverRuleType(ne.getId(), ruleList);
             NoticeInfo ni = new NoticeInfo();
             ni.setId(ne.getId());
             ni.setPublisher(ne.getPublisher());
             ni.setPublishTime(ne.getPublishTime());
             ni.setTitle(ne.getTitle());
-            ni.setPublishObject(getPublishObject(rootOrgId, ne.getId()));
+            ni.setContent(ne.getContent());
+            ni.setPublishObject(getPublishObject(rootOrgId,ruleType,ruleList));
             ni.setPublishStatus(getNoticePublishStatus(rootOrgId, ne));
+            ni.setRuleType(ruleType);
             resultList.add(ni);
         }
         return new PageInfo<>(pagedNoticeEntityList, resultList);
@@ -188,7 +194,7 @@ public class NoticeServiceImpl implements NoticeService {
     @Override
     public int updateNotice(UpdateNoticeInfo info) {
         Long rootOrgId = info.getRootOrgId();
-        List<Long> noticeIdList = Arrays.asList(info.getId());
+        List<Long> noticeIdList = Collections.singletonList(info.getId());
         //校验通知状态,正在发送的通知不允许修改
         NoticePublishScheduleEntity publishSchedule = noticePublishScheduleRepo.findByRootOrgIdAndNoticeId(info.getRootOrgId(), info.getId());
         if (publishSchedule == null) {
@@ -224,7 +230,7 @@ public class NoticeServiceImpl implements NoticeService {
         NoticePublishScheduleEntity publishScheduleEntity = getNoticePublishScheduleEntityFrom(info);
         NoticePublishScheduleEntity savedSchedule = noticePublishScheduleRepo.save(publishScheduleEntity);
 
-        return savedSchedule == null ? 0 : 1;
+        return 1;
     }
 
     @Override
@@ -239,10 +245,8 @@ public class NoticeServiceImpl implements NoticeService {
         for (NoticePublishScheduleEntity publishSchedule : publishingScheduleList) {
             Long rootOrgId = publishSchedule.getRootOrgId();
             Long noticeId = publishSchedule.getNoticeId();
-            List<NoticeReceiverRuleEntity> ruleList = noticeReceiverRuleRepo.findByRootOrgIdAndNoticeId(rootOrgId, noticeId);
-            if (ruleList == null) {
-                throw new StatusException("501009", "找不到通知id为:" + noticeId + "的通知对象信息");
-            }
+            List<NoticeReceiverRuleEntity> ruleList = getReceiverRuleList(rootOrgId,noticeId);
+
             //按通知对象的类型进行分组
             Map<NoticeReceiverRuleType, List<NoticeReceiverRuleEntity>> groupedRuleMap = ruleList.stream().collect(Collectors.groupingBy(p -> p.getRuleType()));
             Set<NoticeReceiverRuleType> groupRuleMapKeySet = groupedRuleMap.keySet();
@@ -353,7 +357,7 @@ public class NoticeServiceImpl implements NoticeService {
      * @param publishSchedule
      * @param limitStudentIdList
      */
-    private void finishNoticePublishSchedule( NoticePublishScheduleEntity publishSchedule) {
+    private void finishNoticePublishSchedule(NoticePublishScheduleEntity publishSchedule) {
         publishSchedule.setPublishStatus(NoticePublishStatus.PUBLISHED);
         noticePublishScheduleRepo.save(publishSchedule);
     }
@@ -400,12 +404,12 @@ public class NoticeServiceImpl implements NoticeService {
         markWorkerReq.setSize(rowNumber);
         // FIXME: 2019/7/11
         GetMarkersByWorkIdsResp markWorkerResp = markWorkCloudService.getMarkersByWorkIds(markWorkerReq);
-//        GetMarkersByWorkIdsResp markWorkerResp = new GetMarkersByWorkIdsResp();
         List<Long> limitUserIdList = markWorkerResp.getMarkers();
         if (markWorkerResp.getMarkers() != null && !markWorkerResp.getMarkers().isEmpty()) {
             resultResp.setMaxId(Collections.max(limitUserIdList));
         }
         resultResp.setNextId(markWorkerResp.getNextId());
+        resultResp.setIdList(markWorkerResp.getMarkers());
         return resultResp;
     }
 
@@ -414,7 +418,7 @@ public class NoticeServiceImpl implements NoticeService {
         List<Long> limitUserIdList = new ArrayList<>();
         long nextUserId;//当前需求只有考试中心
         GetAllUsersByRoleReq getLcUserReq = new GetAllUsersByRoleReq();
-        getLcUserReq.setRoleId(rootOrgId);
+        getLcUserReq.setRootOrgId(rootOrgId);
         getLcUserReq.setRoleCode(RoleMeta.LC_USER.toString());
         getLcUserReq.setStart(startUserId);
         GetAllUsersByRoleResp getLcUserResp = userCloudService.getAllUsersByRole(getLcUserReq);
@@ -517,27 +521,33 @@ public class NoticeServiceImpl implements NoticeService {
      * @param noticeId
      * @return
      */
-    private String getPublishObject(Long rootOrgId, Long noticeId) {
-        List<NoticeReceiverRuleEntity> ruleList =
-                noticeReceiverRuleRepo.findByRootOrgIdAndNoticeId(rootOrgId, noticeId);
-        if (ruleList == null || ruleList.isEmpty()) {
-            throw new StatusException("501002", "未找到公告接收人相关信息");
-        }
-        //公告接收人类型
-        NoticeReceiverRuleType ruleType = ruleList.stream().map(NoticeReceiverRuleEntity::getRuleType).findFirst().get();
-
+    private List<Map<String, Object>> getPublishObject(Long rootOrgId, NoticeReceiverRuleType ruleType,List<NoticeReceiverRuleEntity> ruleList) {
+        List<Map<String, Object>> resultList = new ArrayList<>();
+        Map<String, Object> objectMap;
+        List<NoticeReceiverRuleEntity> currentRuleList;
         switch (ruleType) {
             case STUDENTS_OF_EXAM:
-                return getExamStudentObject(ruleList);
+                currentRuleList = ruleList.stream().filter(p -> p.getRuleType() == ruleType).collect(Collectors.toList());
+                return getExamStudentObject(currentRuleList);
             case ALL_STUDENTS_OF_ROOT_ORG:
-                return "所有学生";
+                objectMap = new HashMap<>();
+                objectMap.put("id", 0);
+                objectMap.put("name", "所有学生");
+                objectMap.put("ruleType", "ALL_STUDENTS_OF_ROOT_ORG");
+                resultList.add(objectMap);
+                return resultList;
             case COMMON_USERS_OF_ROLE:
-                return "所有学习中心用户";
+                objectMap = new HashMap<>();
+                objectMap.put("id", 0);
+                objectMap.put("name", "所有学习中心用户");
+                objectMap.put("ruleType", "COMMON_USERS_OF_ROLE");
+                resultList.add(objectMap);
+                return resultList;
             case TEACHER_OF_MARK_WORK:
-                return getMarkTeacherObject(rootOrgId, ruleList);
-            default:
-                return "";
+                currentRuleList = ruleList.stream().filter(p -> p.getRuleType() == ruleType).collect(Collectors.toList());
+                return getMarkTeacherObject(rootOrgId, currentRuleList);
         }
+        return resultList;
     }
 
     /**
@@ -546,15 +556,19 @@ public class NoticeServiceImpl implements NoticeService {
      * @param ruleList
      * @return
      */
-    private String getExamStudentObject(List<NoticeReceiverRuleEntity> ruleList) {
-        String publishObject = "";
+    private List<Map<String, Object>> getExamStudentObject(List<NoticeReceiverRuleEntity> ruleList) {
+        List<Map<String, Object>> resultList = new ArrayList<>();
         //考试批次id
         List<Long> examIdList = ruleList.stream().map(p -> Long.parseLong(p.getRuleValue())).collect(Collectors.toList());
         List<ExamEntity> examList = examRepo.findByIdIn(examIdList);
         for (ExamEntity e : examList) {
-            publishObject += "学生-" + e.getName() + ";";
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", e.getId());
+            map.put("name", "学生-" + e.getName());
+            map.put("ruleType", "STUDENTS_OF_EXAM");
+            resultList.add(map);
         }
-        return publishObject;
+        return resultList;
     }
 
     /**
@@ -564,26 +578,23 @@ public class NoticeServiceImpl implements NoticeService {
      * @param ruleList
      * @return
      */
-    private String getMarkTeacherObject(Long rootOrgId, List<NoticeReceiverRuleEntity> ruleList) {
-        String publishObject = "";
+    private List<Map<String, Object>> getMarkTeacherObject(Long rootOrgId, List<NoticeReceiverRuleEntity> ruleList) {
+        List<Map<String, Object>> resultList = new ArrayList<>();
         List<Long> markWorkIdList = ruleList.stream().map(p -> Long.parseLong(p.getRuleValue())).collect(Collectors.toList());
-        GetMarkWorkReq req = new GetMarkWorkReq();
-        MarkWorkBean bean = new MarkWorkBean();
-        bean.setRootOrgId(rootOrgId);
-        bean.setStatus(1);
-        req.setMarkWorkBean(bean);
-        // FIXME: 2019/7/11
-        GetMarkWorkResp markWorkResp = markWorkCloudService.getMarkWork(req);
-        List<MarkWorkBean> markWorkList = markWorkResp.getMarkWorkBeanList();
-        for (Long mwId : markWorkIdList) {
-            Optional<MarkWorkBean> workBeanOptional = markWorkList.stream().filter(p -> p.getId().equals(mwId)).findFirst();
-            if (!workBeanOptional.isPresent()) {
-                throw new StatusException("501004", "找不到id为:" + mwId + "的教务工作信息");
-            }
-            MarkWorkBean mw = workBeanOptional.get();
-            publishObject += "老师-" + mw.getName() + ";";
+        GetMarkWorkMainByIdsReq req = new GetMarkWorkMainByIdsReq();
+        req.setRootOrgId(rootOrgId);
+        req.setWorkIds(markWorkIdList);
+
+        GetMarkWorkMainByIdsResp markWorkResp = markWorkCloudService.getMarkWorkMainByIds(req);
+        List<MarkWorkMainBean> markWorkList = markWorkResp.getList();
+        for (MarkWorkMainBean mw : markWorkList) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", mw.getId());
+            map.put("name", "老师-" + mw.getName());
+            map.put("ruleType", "TEACHER_OF_MARK_WORK");
+            resultList.add(map);
         }
-        return publishObject;
+        return resultList;
     }
 
 
@@ -710,4 +721,24 @@ public class NoticeServiceImpl implements NoticeService {
 
         return ruleList;
     }
+
+    private List<NoticeReceiverRuleEntity> getReceiverRuleList(Long rootOrgId, Long... noticeId) {
+        List<NoticeReceiverRuleEntity> ruleList =
+                noticeReceiverRuleRepo.findByRootOrgIdAndNoticeIdIn(rootOrgId, Arrays.asList(noticeId));
+        if (ruleList == null) {
+            throw new StatusException("501009", "找不到通知id为:" + noticeId + "的通知对象信息");
+        }
+        return ruleList;
+    }
+
+    private NoticeReceiverRuleType getNoticeReceiverRuleType(Long noticeId, List<NoticeReceiverRuleEntity> ruleList) {
+        Optional<NoticeReceiverRuleType> first = ruleList.stream().
+                filter(p -> p.getNoticeId().equals(noticeId)).map(p->p.getRuleType()).findFirst();
+        if (first.isPresent()) {
+            return first.get();
+        } else {
+            throw new StatusException("501012","找不到通知id为:"+noticeId+"的通知规则类型");
+        }
+    }
+
 }