【8.0.5】【notice】新增通知

pull/60/head
fengshuonan 2024-01-12 16:39:45 +08:00
parent db233bff8a
commit 2985ceaef1
6 changed files with 162 additions and 70 deletions

View File

@ -0,0 +1,82 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.sys.api.enums.notice;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.rule.base.ReadableEnum;
import lombok.Getter;
/**
*
*
* @author fengshuonan
* @since 2024-01-12 16:38
*/
@Getter
public enum NoticePublishStatusEnum implements ReadableEnum<NoticePublishStatusEnum> {
/**
*
*/
ALREADY(1, "已发布"),
/**
*
*/
NOT_PUBLISH(2, "未发布");
private final Integer code;
private final String message;
NoticePublishStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
@Override
public Object getKey() {
return this.code;
}
@Override
public Object getName() {
return this.message;
}
@Override
public NoticePublishStatusEnum parseToEnum(String originValue) {
if (ObjectUtil.isEmpty(originValue)) {
return null;
}
for (NoticePublishStatusEnum value : NoticePublishStatusEnum.values()) {
if (value.code.equals(Convert.toInt(originValue))) {
return value;
}
}
return null;
}
}

View File

@ -1,11 +1,10 @@
package cn.stylefeng.roses.kernel.sys.modular.notice.entity;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseBusinessEntity;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.NoticeUserScope;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -18,10 +17,10 @@ import java.util.Map;
* @author fengshuonan
* @since 2024/01/12 16:06
*/
@TableName("sys_notice")
@TableName(value = "sys_notice", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class SysNotice extends BaseEntity {
public class SysNotice extends BaseBusinessEntity {
/**
*
@ -75,9 +74,9 @@ public class SysNotice extends BaseEntity {
/**
* id
*/
@TableField("notice_user_scope")
@TableField(value = "notice_user_scope", typeHandler = JacksonTypeHandler.class)
@ChineseDescription("通知范围存用户id集合")
private Map<String, Object> noticeUserScope;
private NoticeUserScope noticeUserScope;
/**
* 1-2-
@ -86,31 +85,17 @@ public class SysNotice extends BaseEntity {
@ChineseDescription("是否发布1-已发布2-未发布")
private Integer publishStatus;
/**
*
*/
@TableField("version_flag")
@ChineseDescription("乐观锁")
private Long versionFlag;
/**
*
*/
@TableField("expand_field")
@TableField(value = "expand_field", typeHandler = JacksonTypeHandler.class)
@ChineseDescription("拓展字段")
private Map<String, Object> expandField;
/**
* Y-N-
*/
@TableField("del_flag")
@ChineseDescription("是否删除Y-被删除N-未删除")
private String delFlag;
/**
*
*/
@TableField("tenant_id")
@TableField(value = "tenant_id", fill = FieldFill.INSERT)
@ChineseDescription("租户号")
private Long tenantId;

View File

@ -16,7 +16,12 @@ public enum SysNoticeExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
SYS_NOTICE_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在");
SYS_NOTICE_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"),
/**
*
*/
SYS_NOTICE_SCOPE_EMPTY(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "通知范围不能为空");
/**
*

View File

@ -0,0 +1,30 @@
package cn.stylefeng.roses.kernel.sys.modular.notice.pojo;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
import lombok.Data;
import java.util.List;
/**
*
*
* @author fengshuonan
* @since 2024-01-12 16:32
*/
@Data
public class NoticeUserScope {
/**
*
*/
@ChineseDescription("发送给指定的机构")
private List<SimpleDict> pointOrgList;
/**
*
*/
@ChineseDescription("发送给指定的用户")
private List<SimpleDict> pointUserList;
}

View File

@ -2,13 +2,13 @@ package cn.stylefeng.roses.kernel.sys.modular.notice.pojo.request;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.NoticeUserScope;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
*
@ -23,7 +23,7 @@ public class SysNoticeRequest extends BaseRequest {
/**
*
*/
@NotNull(message = "主键不能为空", groups = {edit.class, delete.class})
@NotNull(message = "主键不能为空", groups = {edit.class, delete.class, updateStatus.class})
@ChineseDescription("主键")
private Long noticeId;
@ -34,22 +34,17 @@ public class SysNoticeRequest extends BaseRequest {
@ChineseDescription("通知标题")
private String noticeTitle;
/**
*
*/
@ChineseDescription("通知摘要")
private String noticeSummary;
/**
*
*/
@ChineseDescription("通知内容")
@NotBlank(message = "通知内容不能为空", groups = {add.class, edit.class})
private String noticeContent;
/**
* high-middle-low-
*/
@NotBlank(message = "优先级来自字典high-高优先级middle-中low-低不能为空", groups = {add.class, edit.class})
@NotBlank(message = "优先级不能为空", groups = {add.class, edit.class})
@ChineseDescription("优先级来自字典high-高优先级middle-中low-低")
private String priorityLevel;
@ -57,52 +52,21 @@ public class SysNoticeRequest extends BaseRequest {
*
*/
@ChineseDescription("开始时间")
private String noticeBeginTime;
private String noticeBeginTime;
/**
*
*/
@ChineseDescription("结束时间")
private String noticeEndTime;
/**
* id
*/
@ChineseDescription("通知范围存用户id集合")
private Map<String, Object> noticeUserScope;
private String noticeEndTime;
/**
* 1-2-
*/
@ChineseDescription("是否发布1-已发布2-未发布")
@NotNull(message = "发布状态不能为空", groups = updateStatus.class)
private Integer publishStatus;
/**
*
*/
@ChineseDescription("乐观锁")
private Long versionFlag;
/**
*
*/
@ChineseDescription("拓展字段")
private Map<String, Object> expandField;
/**
* Y-N-
*/
@NotBlank(message = "是否删除Y-被删除N-未删除不能为空", groups = {add.class, edit.class})
@ChineseDescription("是否删除Y-被删除N-未删除")
private String delFlag;
/**
*
*/
@ChineseDescription("租户号")
private Long tenantId;
/**
* id
*/
@ -110,4 +74,10 @@ public class SysNoticeRequest extends BaseRequest {
@ChineseDescription("批量删除用的id集合")
private List<Long> batchDeleteIdList;
/**
*
*/
@ChineseDescription("通知人员和部门的范围")
private NoticeUserScope noticeUserScope;
}

View File

@ -6,9 +6,11 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.sys.api.enums.notice.NoticePublishStatusEnum;
import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice;
import cn.stylefeng.roses.kernel.sys.modular.notice.enums.SysNoticeExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.notice.mapper.SysNoticeMapper;
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.NoticeUserScope;
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.request.SysNoticeRequest;
import cn.stylefeng.roses.kernel.sys.modular.notice.service.SysNoticeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -29,10 +31,28 @@ import java.util.Map;
@Service
public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService {
@Override
@Override
@Transactional(rollbackFor = Exception.class)
public void add(SysNoticeRequest sysNoticeRequest) {
// 1. 判断通知人员范围不能为空
NoticeUserScope noticeUserScope = sysNoticeRequest.getNoticeUserScope();
if (noticeUserScope == null) {
throw new ServiceException(SysNoticeExceptionEnum.SYS_NOTICE_SCOPE_EMPTY);
}
// 2. 通知的人员和部门不能同时为空
if (ObjectUtil.isEmpty(noticeUserScope.getPointOrgList()) && ObjectUtil.isEmpty(noticeUserScope.getPointUserList())) {
throw new ServiceException(SysNoticeExceptionEnum.SYS_NOTICE_SCOPE_EMPTY);
}
// 3. 存储基础信息
SysNotice sysNotice = new SysNotice();
BeanUtil.copyProperties(sysNoticeRequest, sysNotice);
// 新增的时候,默认设置状态为未发布
sysNotice.setPublishStatus(NoticePublishStatusEnum.NOT_PUBLISH.getCode());
this.save(sysNotice);
}