Explorar o código

撤回用户公告

qinchao %!s(int64=4) %!d(string=hai) anos
pai
achega
1dd47d3daa

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

@@ -94,6 +94,15 @@ public class NoticeController extends ControllerSupport {
         noticeService.updateNotice(info);
     }
 
+    @ApiOperation(value = "撤回信息")
+    @PostMapping("backMsg")
+    public void backMsg(@Validated @RequestBody UpdateNoticeDomain updateNoticeDomain) {
+        validateUpdateNotice(updateNoticeDomain);
+
+        UpdateNoticeInfo info = getUpdateNoticeInfoFrom(updateNoticeDomain);
+        noticeService.backMsg(info);
+    }
+
     @ApiOperation(value = "删除通知信息")
     @DeleteMapping("/{noticeId}")
     public void deleteNotice(

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

@@ -101,4 +101,6 @@ public interface NoticeService {
      * @param noticeStatus
      */
     void updateNoticeStatus(Long noticeId, NoticeStatus noticeStatus);
+
+    void backMsg(UpdateNoticeInfo info);
 }

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

@@ -300,6 +300,30 @@ public class NoticeServiceImpl implements NoticeService {
         noticeRepo.updateNoticeStatus(noticeId, noticeStatus.toString());
     }
 
+    @Override
+    public void backMsg(UpdateNoticeInfo info) {
+        // 校验通知状态,只能撤回已经发送的消息
+        NoticeEntity originalNotice = GlobalHelper.getEntity(noticeRepo, info.getId(),
+                NoticeEntity.class);
+        if (originalNotice == null) {
+            throw new StatusException("501006", "找不到通知id为:" + info.getId() + "的数据");
+        }
+        if (originalNotice.getNoticeStatus() != NoticeStatus.PUBLISHED) {
+            throw new StatusException("501008", "只能撤回已经发送的消息");
+        }
+
+        // 更新通知表
+        originalNotice.setTitle(info.getTitle());
+        originalNotice.setPublisher(info.getPublisher());
+        originalNotice.setNoticeStatus(NoticeStatus.DRAFT);
+        originalNotice.setContent(info.getContent());
+        originalNotice.setUpdateTime(new Date());
+        noticeRepo.save(originalNotice);
+
+        //根据noticeId删除用户通知记录
+        userNoticeRepo.deleteByNoticeId(info.getId());
+    }
+
     /**
      * 删除所有相关的通知数据
      *