【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; 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 cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import com.baomidou.mybatisplus.annotation.IdType; import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.NoticeUserScope;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -18,10 +17,10 @@ import java.util.Map;
* @author fengshuonan * @author fengshuonan
* @since 2024/01/12 16:06 * @since 2024/01/12 16:06
*/ */
@TableName("sys_notice") @TableName(value = "sys_notice", autoResultMap = true)
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class SysNotice extends BaseEntity { public class SysNotice extends BaseBusinessEntity {
/** /**
* *
@ -75,9 +74,9 @@ public class SysNotice extends BaseEntity {
/** /**
* id * id
*/ */
@TableField("notice_user_scope") @TableField(value = "notice_user_scope", typeHandler = JacksonTypeHandler.class)
@ChineseDescription("通知范围存用户id集合") @ChineseDescription("通知范围存用户id集合")
private Map<String, Object> noticeUserScope; private NoticeUserScope noticeUserScope;
/** /**
* 1-2- * 1-2-
@ -86,31 +85,17 @@ public class SysNotice extends BaseEntity {
@ChineseDescription("是否发布1-已发布2-未发布") @ChineseDescription("是否发布1-已发布2-未发布")
private Integer publishStatus; private Integer publishStatus;
/**
*
*/
@TableField("version_flag")
@ChineseDescription("乐观锁")
private Long versionFlag;
/** /**
* *
*/ */
@TableField("expand_field") @TableField(value = "expand_field", typeHandler = JacksonTypeHandler.class)
@ChineseDescription("拓展字段") @ChineseDescription("拓展字段")
private Map<String, Object> expandField; 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("租户号") @ChineseDescription("租户号")
private Long tenantId; 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.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.NoticeUserScope;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List; 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("主键") @ChineseDescription("主键")
private Long noticeId; private Long noticeId;
@ -34,22 +34,17 @@ public class SysNoticeRequest extends BaseRequest {
@ChineseDescription("通知标题") @ChineseDescription("通知标题")
private String noticeTitle; private String noticeTitle;
/**
*
*/
@ChineseDescription("通知摘要")
private String noticeSummary;
/** /**
* *
*/ */
@ChineseDescription("通知内容") @ChineseDescription("通知内容")
@NotBlank(message = "通知内容不能为空", groups = {add.class, edit.class})
private String noticeContent; private String noticeContent;
/** /**
* high-middle-low- * high-middle-low-
*/ */
@NotBlank(message = "优先级来自字典high-高优先级middle-中low-低不能为空", groups = {add.class, edit.class}) @NotBlank(message = "优先级不能为空", groups = {add.class, edit.class})
@ChineseDescription("优先级来自字典high-高优先级middle-中low-低") @ChineseDescription("优先级来自字典high-高优先级middle-中low-低")
private String priorityLevel; private String priorityLevel;
@ -57,52 +52,21 @@ public class SysNoticeRequest extends BaseRequest {
* *
*/ */
@ChineseDescription("开始时间") @ChineseDescription("开始时间")
private String noticeBeginTime; private String noticeBeginTime;
/** /**
* *
*/ */
@ChineseDescription("结束时间") @ChineseDescription("结束时间")
private String noticeEndTime; private String noticeEndTime;
/**
* id
*/
@ChineseDescription("通知范围存用户id集合")
private Map<String, Object> noticeUserScope;
/** /**
* 1-2- * 1-2-
*/ */
@ChineseDescription("是否发布1-已发布2-未发布") @ChineseDescription("是否发布1-已发布2-未发布")
@NotNull(message = "发布状态不能为空", groups = updateStatus.class)
private Integer publishStatus; 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 * id
*/ */
@ -110,4 +74,10 @@ public class SysNoticeRequest extends BaseRequest {
@ChineseDescription("批量删除用的id集合") @ChineseDescription("批量删除用的id集合")
private List<Long> batchDeleteIdList; 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.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; 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.entity.SysNotice;
import cn.stylefeng.roses.kernel.sys.modular.notice.enums.SysNoticeExceptionEnum; 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.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.pojo.request.SysNoticeRequest;
import cn.stylefeng.roses.kernel.sys.modular.notice.service.SysNoticeService; import cn.stylefeng.roses.kernel.sys.modular.notice.service.SysNoticeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -29,10 +31,28 @@ import java.util.Map;
@Service @Service
public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService { public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService {
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void add(SysNoticeRequest sysNoticeRequest) { 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(); SysNotice sysNotice = new SysNotice();
BeanUtil.copyProperties(sysNoticeRequest, sysNotice); BeanUtil.copyProperties(sysNoticeRequest, sysNotice);
// 新增的时候,默认设置状态为未发布
sysNotice.setPublishStatus(NoticePublishStatusEnum.NOT_PUBLISH.getCode());
this.save(sysNotice); this.save(sysNotice);
} }