云
2026-10-25 d54fbc9d4f8981fa0f7f613b33a28a8cd4f764ea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package cn.iocoder.yudao.module.system.service.notice;
 
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeImportExcelVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeImportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeImportRespVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper;
import com.google.common.annotations.VisibleForTesting;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
 
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
 
/**
 * 通知公告 Service 实现类
 *
 * @author 超级管理员
 */
@Service
public class NoticeServiceImpl implements NoticeService {
 
    @Resource
    private NoticeMapper noticeMapper;
 
    @Override
    public Long createNotice(NoticeSaveReqVO createReqVO) {
        NoticeDO notice = BeanUtils.toBean(createReqVO, NoticeDO.class);
        noticeMapper.insert(notice);
        return notice.getId();
    }
 
    @Override
    public void updateNotice(NoticeSaveReqVO updateReqVO) {
        // 校验是否存在
        validateNoticeExists(updateReqVO.getId());
        // 更新通知公告
        NoticeDO updateObj = BeanUtils.toBean(updateReqVO, NoticeDO.class);
        noticeMapper.updateById(updateObj);
    }
 
    @Override
    public void deleteNotice(Long id) {
        // 校验是否存在
        validateNoticeExists(id);
        // 删除通知公告
        noticeMapper.deleteById(id);
    }
 
    @Override
    public void deleteNoticeList(List<Long> ids) {
        noticeMapper.deleteByIds(ids);
    }
 
    @Override
    public PageResult<NoticeDO> getNoticePage(NoticePageReqVO reqVO) {
        return noticeMapper.selectPage(reqVO);
    }
 
    @Override
    public NoticeDO getNotice(Long id) {
        return noticeMapper.selectById(id);
    }
 
    @Override
    public NoticeImportRespVO importNoticeList(List<NoticeImportExcelVO> importNotices, NoticeImportReqVO importReqVO) {
        importNotices = filterList(importNotices, item -> StrUtil.isNotBlank(item.getTitle()));
        if (CollUtil.isEmpty(importNotices)) {
            throw exception(NOTICE_IMPORT_LIST_IS_EMPTY);
        }
        NoticeImportRespVO respVO = NoticeImportRespVO.builder()
                .createNoticeNames(new ArrayList<>())
                .updateNoticeNames(new ArrayList<>())
                .failureNoticeNames(new LinkedHashMap<>())
                .build();
        importNotices.forEach(importNotice -> {
            try {
                // 1. 公告类型必填
                if (importNotice.getType() == null) {
                    throw exception(NOTICE_TYPE_NOT_EXISTS);
                }
                // 2. 判断是否存在(按标题)
                NoticeDO existNotice = noticeMapper.selectByTitle(importNotice.getTitle());
                if (existNotice == null) {
                    // 2.1 新增
                    NoticeDO notice = BeanUtils.toBean(importNotice, NoticeDO.class)
                            .setStatus(ObjUtil.defaultIfNull(importNotice.getStatus(), CommonStatusEnum.ENABLE.getStatus()));
                    noticeMapper.insert(notice);
                    respVO.getCreateNoticeNames().add(importNotice.getTitle());
                    return;
                }
                // 2.2 已存在,判断是否允许更新
                if (!importReqVO.getUpdateSupport()) {
                    respVO.getFailureNoticeNames().put(importNotice.getTitle(),
                            StrUtil.format(NOTICE_TITLE_DUPLICATE.getMsg(), importNotice.getTitle()));
                    return;
                }
                NoticeDO updateNotice = BeanUtils.toBean(importNotice, NoticeDO.class)
                        .setId(existNotice.getId());
                noticeMapper.updateById(updateNotice);
                respVO.getUpdateNoticeNames().add(importNotice.getTitle());
            } catch (ServiceException ex) {
                respVO.getFailureNoticeNames().put(importNotice.getTitle(), ex.getMessage());
            }
        });
        return respVO;
    }
 
    @VisibleForTesting
    public void validateNoticeExists(Long id) {
        if (id == null) {
            return;
        }
        NoticeDO notice = noticeMapper.selectById(id);
        if (notice == null) {
            throw exception(NOTICE_NOT_FOUND);
        }
    }
 
}