【8.0.5】【notice】重新提交通知代码

pull/60/head
fengshuonan 2024-01-12 16:21:12 +08:00
parent f51498594e
commit db233bff8a
10 changed files with 390 additions and 538 deletions

View File

@ -1,38 +1,14 @@
/*
* 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.modular.notice.controller; package cn.stylefeng.roses.kernel.sys.modular.notice.controller;
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.annotation.ApiLog; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
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.pojo.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 org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -44,8 +20,8 @@ import java.util.List;
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/8 19:47 * @since 2024/01/12 16:06
*/ */
@RestController @RestController
@ApiResource(name = "通知管理") @ApiResource(name = "通知管理")
@ -57,73 +33,82 @@ public class SysNoticeController {
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:44 * @since 2024/01/12 16:06
*/ */
@PostResource(name = "添加通知管理", path = "/sysNotice/add") @PostResource(name = "添加通知管理", path = "/sysNotice/add")
@ApiLog public ResponseData<SysNotice> add(@RequestBody @Validated(SysNoticeRequest.add.class) SysNoticeRequest sysNoticeRequest) {
public ResponseData<?> add(@RequestBody @Validated(SysNoticeRequest.add.class) SysNoticeRequest sysNoticeParam) { sysNoticeService.add(sysNoticeRequest);
sysNoticeService.add(sysNoticeParam);
return new SuccessResponseData<>();
}
/**
*
*
* @author liuhanqing
* @since 2021/1/9 14:54
*/
@PostResource(name = "编辑通知管理", path = "/sysNotice/edit")
@ApiLog
public ResponseData<?> edit(@RequestBody @Validated(SysNoticeRequest.edit.class) SysNoticeRequest sysNoticeParam) {
sysNoticeService.edit(sysNoticeParam);
return new SuccessResponseData<>(); return new SuccessResponseData<>();
} }
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:54 * @since 2024/01/12 16:06
*/ */
@PostResource(name = "删除通知管理", path = "/sysNotice/delete") @PostResource(name = "删除通知管理", path = "/sysNotice/delete")
@ApiLog public ResponseData<?> delete(@RequestBody @Validated(SysNoticeRequest.delete.class) SysNoticeRequest sysNoticeRequest) {
public ResponseData<?> delete(@RequestBody @Validated(SysNoticeRequest.delete.class) SysNoticeRequest sysNoticeParam) { sysNoticeService.del(sysNoticeRequest);
sysNoticeService.del(sysNoticeParam);
return new SuccessResponseData<>(); return new SuccessResponseData<>();
} }
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 9:49 * @since 2024/01/12 16:06
*/ */
@GetResource(name = "查看通知管理", path = "/sysNotice/detail") @PostResource(name = "批量删除通知管理", path = "/sysNotice/batchDelete")
public ResponseData<SysNotice> detail(@Validated(SysNoticeRequest.detail.class) SysNoticeRequest sysNoticeParam) { public ResponseData<?> batchDelete(@RequestBody @Validated(BaseRequest.batchDelete.class) SysNoticeRequest sysNoticeRequest) {
return new SuccessResponseData<>(sysNoticeService.detail(sysNoticeParam)); sysNoticeService.batchDelete(sysNoticeRequest);
return new SuccessResponseData<>();
} }
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 21:23 * @since 2024/01/12 16:06
*/ */
@GetResource(name = "查询通知管理", path = "/sysNotice/page") @PostResource(name = "编辑通知管理", path = "/sysNotice/edit")
public ResponseData<PageResult<SysNotice>> page(SysNoticeRequest sysNoticeParam) { public ResponseData<?> edit(@RequestBody @Validated(SysNoticeRequest.edit.class) SysNoticeRequest sysNoticeRequest) {
return new SuccessResponseData<>(sysNoticeService.findPage(sysNoticeParam)); sysNoticeService.edit(sysNoticeRequest);
return new SuccessResponseData<>();
} }
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:55 * @since 2024/01/12 16:06
*/ */
@GetResource(name = "通知管理列表", path = "/sysNotice/list") @GetResource(name = "查看通知管理详情", path = "/sysNotice/detail")
public ResponseData<List<SysNotice>> list(SysNoticeRequest sysNoticeParam) { public ResponseData<SysNotice> detail(@Validated(SysNoticeRequest.detail.class) SysNoticeRequest sysNoticeRequest) {
return new SuccessResponseData<>(sysNoticeService.findList(sysNoticeParam)); return new SuccessResponseData<>(sysNoticeService.detail(sysNoticeRequest));
}
/**
*
*
* @author fengshuonan
* @since 2024/01/12 16:06
*/
@GetResource(name = "获取通知管理列表", path = "/sysNotice/list")
public ResponseData<List<SysNotice>> list(SysNoticeRequest sysNoticeRequest) {
return new SuccessResponseData<>(sysNoticeService.findList(sysNoticeRequest));
}
/**
*
*
* @author fengshuonan
* @since 2024/01/12 16:06
*/
@GetResource(name = "获取通知管理列表(带分页)", path = "/sysNotice/page")
public ResponseData<PageResult<SysNotice>> page(SysNoticeRequest sysNoticeRequest) {
return new SuccessResponseData<>(sysNoticeService.findPage(sysNoticeRequest));
} }
} }

View File

@ -1,56 +1,33 @@
/*
* 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.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.BaseEntity;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.annotation.DictCodeFieldFormat; import com.baomidou.mybatisplus.annotation.IdType;
import cn.stylefeng.roses.kernel.rule.annotation.SimpleFieldFormat; import com.baomidou.mybatisplus.annotation.TableField;
import cn.stylefeng.roses.kernel.sys.api.format.UserNameFormatProcess; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date; import java.util.Date;
import java.util.Map;
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/8 22:45 * @since 2024/01/12 16:06
*/ */
@TableName("sys_notice")
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("sys_notice")
public class SysNotice extends BaseEntity { public class SysNotice extends BaseEntity {
/** /**
* id *
*/ */
@TableId("notice_id") @TableId(value = "notice_id", type = IdType.ASSIGN_ID)
@ChineseDescription("通知id") @ChineseDescription("主键")
private Long noticeId; private Long noticeId;
/** /**
@ -67,28 +44,6 @@ public class SysNotice extends BaseEntity {
@ChineseDescription("通知摘要") @ChineseDescription("通知摘要")
private String noticeSummary; private String noticeSummary;
/**
*
*/
@TableField(value = "priority_level")
@ChineseDescription("通知优先级")
@DictCodeFieldFormat(dictTypeCode = "priority_level")
private String priorityLevel;
/**
*
*/
@TableField(value = "notice_begin_time")
@ChineseDescription("通知开始时间")
private Date noticeBeginTime;
/**
*
*/
@TableField(value = "notice_end_time")
@ChineseDescription("通知结束时间")
private Date noticeEndTime;
/** /**
* *
*/ */
@ -97,24 +52,66 @@ public class SysNotice extends BaseEntity {
private String noticeContent; private String noticeContent;
/** /**
* * high-middle-low-
*/ */
@TableField("notice_scope") @TableField("priority_level")
@ChineseDescription("通知范围") @ChineseDescription("优先级来自字典high-高优先级middle-中low-低")
private String noticeScope; private String priorityLevel;
/** /**
* Y-N- *
*/ */
@TableField(value = "del_flag", fill = FieldFill.INSERT) @TableField("notice_begin_time")
@ChineseDescription("是否删除Y-已删除N-未删除") @ChineseDescription("开始时间")
@TableLogic private Date noticeBeginTime;
/**
*
*/
@TableField("notice_end_time")
@ChineseDescription("结束时间")
private Date noticeEndTime;
/**
* id
*/
@TableField("notice_user_scope")
@ChineseDescription("通知范围存用户id集合")
private Map<String, Object> noticeUserScope;
/**
* 1-2-
*/
@TableField("publish_status")
@ChineseDescription("是否发布1-已发布2-未发布")
private Integer publishStatus;
/**
*
*/
@TableField("version_flag")
@ChineseDescription("乐观锁")
private Long versionFlag;
/**
*
*/
@TableField("expand_field")
@ChineseDescription("拓展字段")
private Map<String, Object> expandField;
/**
* Y-N-
*/
@TableField("del_flag")
@ChineseDescription("是否删除Y-被删除N-未删除")
private String delFlag; private String delFlag;
@Override /**
@SimpleFieldFormat(processClass = UserNameFormatProcess.class) *
public Long getCreateUser() { */
return super.getCreateUser(); @TableField("tenant_id")
} @ChineseDescription("租户号")
private Long tenantId;
} }

View File

@ -0,0 +1,36 @@
package cn.stylefeng.roses.kernel.sys.modular.notice.enums;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
import lombok.Getter;
/**
*
*
* @author fengshuonan
* @since 2024/01/12 16:06
*/
@Getter
public enum SysNoticeExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
SYS_NOTICE_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在");
/**
*
*/
private final String errorCode;
/**
*
*/
private final String userTip;
SysNoticeExceptionEnum(String errorCode, String userTip) {
this.errorCode = errorCode;
this.userTip = userTip;
}
}

View File

@ -1,66 +0,0 @@
/*
* 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.modular.notice.exceptions;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants;
import lombok.Getter;
/**
*
*
* @author liuhanqing
* @since 2021/1/9 16:11
*/
@Getter
public enum NoticeExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
NOTICE_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SysConstants.SYS_EXCEPTION_STEP_CODE + "41", "通知不存在id为{}"),
/**
*
*/
NOTICE_SCOPE_NOT_EDIT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SysConstants.SYS_EXCEPTION_STEP_CODE + "42", "通知范围不允许修改");
/**
*
*/
private final String errorCode;
/**
*
*/
private final String userTip;
NoticeExceptionEnum(String errorCode, String userTip) {
this.errorCode = errorCode;
this.userTip = userTip;
}
}

View File

@ -1,37 +1,13 @@
/*
* 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.modular.notice.mapper; package cn.stylefeng.roses.kernel.sys.modular.notice.mapper;
import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice; import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/** /**
* Mapper * Mapper
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/8 22:45 * @since 2024/01/12 16:06
*/ */
public interface SysNoticeMapper extends BaseMapper<SysNotice> { public interface SysNoticeMapper extends BaseMapper<SysNotice> {

View File

@ -1,102 +0,0 @@
/*
* 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.modular.notice.pojo;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
*
*
* @author liuhanqing
* @since 2021/1/8 21:53
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class SysNoticeRequest extends BaseRequest {
/**
* id
*/
@NotNull(message = "noticeId不能为空", groups = {edit.class, delete.class, detail.class})
@ChineseDescription("通知id")
private Long noticeId;
/**
*
*/
@NotBlank(message = "通知标题不能为空", groups = {add.class, edit.class})
@ChineseDescription("通知标题")
private String noticeTitle;
/**
*
*/
@ChineseDescription("通知摘要")
private String noticeSummary;
/**
*
*/
@ChineseDescription("通知优先级")
private String priorityLevel;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ChineseDescription("通知开始时间")
private Date noticeBeginTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ChineseDescription("通知结束时间")
private Date noticeEndTime;
/**
*
*/
@ChineseDescription("通知内容")
@NotBlank(message = "通知内容不能为空", groups = {add.class, edit.class})
private String noticeContent;
/**
*
*/
@ChineseDescription("通知范围")
private String noticeScope;
}

View File

@ -0,0 +1,113 @@
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 lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
*
*
* @author fengshuonan
* @since 2024/01/12 16:06
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class SysNoticeRequest extends BaseRequest {
/**
*
*/
@NotNull(message = "主键不能为空", groups = {edit.class, delete.class})
@ChineseDescription("主键")
private Long noticeId;
/**
*
*/
@NotBlank(message = "通知标题不能为空", groups = {add.class, edit.class})
@ChineseDescription("通知标题")
private String noticeTitle;
/**
*
*/
@ChineseDescription("通知摘要")
private String noticeSummary;
/**
*
*/
@ChineseDescription("通知内容")
private String noticeContent;
/**
* high-middle-low-
*/
@NotBlank(message = "优先级来自字典high-高优先级middle-中low-低不能为空", groups = {add.class, edit.class})
@ChineseDescription("优先级来自字典high-高优先级middle-中low-低")
private String priorityLevel;
/**
*
*/
@ChineseDescription("开始时间")
private String noticeBeginTime;
/**
*
*/
@ChineseDescription("结束时间")
private String noticeEndTime;
/**
* id
*/
@ChineseDescription("通知范围存用户id集合")
private Map<String, Object> noticeUserScope;
/**
* 1-2-
*/
@ChineseDescription("是否发布1-已发布2-未发布")
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
*/
@NotNull(message = "批量删除id集合不能为空", groups = batchDelete.class)
@ChineseDescription("批量删除用的id集合")
private List<Long> batchDeleteIdList;
}

View File

@ -0,0 +1,17 @@
package cn.stylefeng.roses.kernel.sys.modular.notice.pojo.response;
import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author fengshuonan
* @since 2024/01/12 16:06
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class SysNoticeVo extends SysNotice {
}

View File

@ -1,99 +1,83 @@
/*
* 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.modular.notice.service; package cn.stylefeng.roses.kernel.sys.modular.notice.service;
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.sys.modular.notice.entity.SysNotice; import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice;
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.SysNoticeRequest; import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.request.SysNoticeRequest;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List; import java.util.List;
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/8 19:56 * @since 2024/01/12 16:06
*/ */
public interface SysNoticeService extends IService<SysNotice> { public interface SysNoticeService extends IService<SysNotice> {
/** /**
* *
* *
* @param sysNoticeRequest * @param sysNoticeRequest
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:57 * @since 2024/01/12 16:06
*/ */
void add(SysNoticeRequest sysNoticeRequest); void add(SysNoticeRequest sysNoticeRequest);
/** /**
* *
* *
* @param sysNoticeRequest * @param sysNoticeRequest
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:57 * @since 2024/01/12 16:06
*/ */
void del(SysNoticeRequest sysNoticeRequest); void del(SysNoticeRequest sysNoticeRequest);
/** /**
* *
* *
* @param sysNoticeRequest * @param sysNoticeRequest
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:58 * @since 2024/01/12 16:06
*/
void batchDelete(SysNoticeRequest sysNoticeRequest);
/**
*
*
* @param sysNoticeRequest
* @author fengshuonan
* @since 2024/01/12 16:06
*/ */
void edit(SysNoticeRequest sysNoticeRequest); void edit(SysNoticeRequest sysNoticeRequest);
/** /**
* *
* *
* @param sysNoticeRequest * @param sysNoticeRequest
* @return * @author fengshuonan
* @author liuhanqing * @since 2024/01/12 16:06
* @since 2021/1/9 14:56
*/ */
SysNotice detail(SysNoticeRequest sysNoticeRequest); SysNotice detail(SysNoticeRequest sysNoticeRequest);
/** /**
* *
* *
* @param sysNoticeRequest * @param sysNoticeRequest
* @return * @return List<SysNotice>
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 14:56 * @since 2024/01/12 16:06
*/
PageResult<SysNotice> findPage(SysNoticeRequest sysNoticeRequest);
/**
*
*
* @param sysNoticeRequest
* @return
* @author liuhanqing
* @since 2021/1/9 14:56
*/ */
List<SysNotice> findList(SysNoticeRequest sysNoticeRequest); List<SysNotice> findList(SysNoticeRequest sysNoticeRequest);
/**
*
*
* @param sysNoticeRequest
* @return PageResult<SysNotice>
* @author fengshuonan
* @since 2024/01/12 16:06
*/
PageResult<SysNotice> findPage(SysNoticeRequest sysNoticeRequest);
} }

View File

@ -1,218 +1,130 @@
/*
* 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.modular.notice.service.impl; package cn.stylefeng.roses.kernel.sys.modular.notice.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; 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.entity.BaseEntity;
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.message.api.MessageApi; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.message.api.enums.MessageBusinessTypeEnum;
import cn.stylefeng.roses.kernel.message.api.pojo.request.MessageSendRequest;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.sys.api.exception.SysException;
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.exceptions.NoticeExceptionEnum; 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.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;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/8 22:45 * @since 2024/01/12 16:06
*/ */
@Service @Service
public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService { public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService {
private static final String NOTICE_SCOPE_ALL = "all"; @Override
@Resource
private MessageApi messageApi;
@Override
public void add(SysNoticeRequest sysNoticeRequest) { public void add(SysNoticeRequest sysNoticeRequest) {
SysNotice sysNotice = new SysNotice(); SysNotice sysNotice = new SysNotice();
// 拷贝属性
BeanUtil.copyProperties(sysNoticeRequest, sysNotice); BeanUtil.copyProperties(sysNoticeRequest, sysNotice);
this.save(sysNotice);
// 没传递通知范围,则默认发给所有人
if (StrUtil.isBlank(sysNotice.getNoticeScope())) {
sysNotice.setNoticeScope(NOTICE_SCOPE_ALL);
}
// 如果保存成功调用发送消息
if (this.save(sysNotice)) {
sendMessage(sysNotice);
}
} }
@Override @Override
public void del(SysNoticeRequest sysNoticeRequest) { public void del(SysNoticeRequest sysNoticeRequest) {
SysNotice sysNotice = this.querySysNoticeById(sysNoticeRequest); SysNotice sysNotice = this.querySysNotice(sysNoticeRequest);
// 逻辑删除 this.removeById(sysNotice.getNoticeId());
sysNotice.setDelFlag(YesOrNotEnum.Y.getCode()); }
this.updateById(sysNotice);
@Override
@Transactional(rollbackFor = Exception.class)
public void batchDelete(SysNoticeRequest sysNoticeRequest) {
this.removeByIds(sysNoticeRequest.getBatchDeleteIdList());
} }
@Override @Override
public void edit(SysNoticeRequest sysNoticeRequest) { public void edit(SysNoticeRequest sysNoticeRequest) {
SysNotice sysNotice = this.querySysNoticeById(sysNoticeRequest); SysNotice sysNotice = this.querySysNotice(sysNoticeRequest);
// 通知范围不允许修改, 如果通知范围不同抛出异常
if (!sysNoticeRequest.getNoticeScope().equals(sysNotice.getNoticeScope())) {
throw new SysException(NoticeExceptionEnum.NOTICE_SCOPE_NOT_EDIT);
}
// 获取通知范围如果为空则设置为all
String noticeScope = sysNotice.getNoticeScope();
if (StrUtil.isBlank(noticeScope)) {
sysNoticeRequest.setNoticeScope(NOTICE_SCOPE_ALL);
}
// 更新属性
BeanUtil.copyProperties(sysNoticeRequest, sysNotice); BeanUtil.copyProperties(sysNoticeRequest, sysNotice);
this.updateById(sysNotice);
// 修改成功后发送信息
if (this.updateById(sysNotice)) {
sendMessage(sysNotice);
}
} }
@Override @Override
public SysNotice detail(SysNoticeRequest sysNoticeRequest) { public SysNotice detail(SysNoticeRequest sysNoticeRequest) {
LambdaQueryWrapper<SysNotice> queryWrapper = this.createWrapper(sysNoticeRequest); return this.querySysNotice(sysNoticeRequest);
return this.getOne(queryWrapper, false);
} }
@Override @Override
public PageResult<SysNotice> findPage(SysNoticeRequest sysNoticeRequest) { public PageResult<SysNotice> findPage(SysNoticeRequest sysNoticeRequest) {
LambdaQueryWrapper<SysNotice> wrapper = createWrapper(sysNoticeRequest); LambdaQueryWrapper<SysNotice> wrapper = createWrapper(sysNoticeRequest);
Page<SysNotice> page = this.page(PageFactory.defaultPage(), wrapper); Page<SysNotice> pageList = this.page(PageFactory.defaultPage(), wrapper);
return PageResultFactory.createPageResult(page); return PageResultFactory.createPageResult(pageList);
} }
@Override @Override
public List<SysNotice> findList(SysNoticeRequest sysNoticeRequest) { public List<SysNotice> findList(SysNoticeRequest sysNoticeRequest) {
LambdaQueryWrapper<SysNotice> wrapper = createWrapper(sysNoticeRequest); LambdaQueryWrapper<SysNotice> wrapper = this.createWrapper(sysNoticeRequest);
return this.list(wrapper); return this.list(wrapper);
} }
/** /**
* *
* *
* @author liuhanqing * @author fengshuonan
* @since 2021/1/9 16:56 * @since 2024/01/12 16:06
*/ */
private SysNotice querySysNoticeById(SysNoticeRequest sysNoticeRequest) { private SysNotice querySysNotice(SysNoticeRequest sysNoticeRequest) {
SysNotice sysNotice = this.getById(sysNoticeRequest.getNoticeId()); SysNotice sysNotice = this.getById(sysNoticeRequest.getNoticeId());
if (ObjectUtil.isNull(sysNotice)) { if (ObjectUtil.isEmpty(sysNotice)) {
throw new SysException(NoticeExceptionEnum.NOTICE_NOT_EXIST, sysNoticeRequest.getNoticeId()); throw new ServiceException(SysNoticeExceptionEnum.SYS_NOTICE_NOT_EXISTED);
} }
return sysNotice; return sysNotice;
} }
/** /**
* wrapper * wrapper
* *
* @author liuhanqing * @author fengshuonan
* @since 2020/1/9 16:16 * @since 2024/01/12 16:06
*/ */
private LambdaQueryWrapper<SysNotice> createWrapper(SysNoticeRequest sysNoticeRequest) { private LambdaQueryWrapper<SysNotice> createWrapper(SysNoticeRequest sysNoticeRequest) {
LambdaQueryWrapper<SysNotice> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysNotice> queryWrapper = new LambdaQueryWrapper<>();
// 按时间倒序排列
queryWrapper.orderByDesc(BaseEntity::getCreateTime);
// 查询未删除状态的
queryWrapper.eq(SysNotice::getDelFlag, YesOrNotEnum.N.getCode());
if (ObjectUtil.isEmpty(sysNoticeRequest)) {
return queryWrapper;
}
// 通知id
Long noticeId = sysNoticeRequest.getNoticeId(); Long noticeId = sysNoticeRequest.getNoticeId();
// 通知标题
String noticeTitle = sysNoticeRequest.getNoticeTitle(); String noticeTitle = sysNoticeRequest.getNoticeTitle();
String noticeSummary = sysNoticeRequest.getNoticeSummary();
String noticeContent = sysNoticeRequest.getNoticeContent();
String priorityLevel = sysNoticeRequest.getPriorityLevel();
String noticeBeginTime = sysNoticeRequest.getNoticeBeginTime();
String noticeEndTime = sysNoticeRequest.getNoticeEndTime();
Map<String, Object> noticeUserScope = sysNoticeRequest.getNoticeUserScope();
Integer publishStatus = sysNoticeRequest.getPublishStatus();
Long versionFlag = sysNoticeRequest.getVersionFlag();
Map<String, Object> expandField = sysNoticeRequest.getExpandField();
String delFlag = sysNoticeRequest.getDelFlag();
Long tenantId = sysNoticeRequest.getTenantId();
// 拼接sql 条件 queryWrapper.eq(ObjectUtil.isNotNull(noticeId), SysNotice::getNoticeId, noticeId);
queryWrapper.like(ObjectUtil.isNotEmpty(noticeTitle), SysNotice::getNoticeTitle, noticeTitle); queryWrapper.like(ObjectUtil.isNotEmpty(noticeTitle), SysNotice::getNoticeTitle, noticeTitle);
queryWrapper.eq(ObjectUtil.isNotEmpty(noticeId), SysNotice::getNoticeId, noticeId); queryWrapper.like(ObjectUtil.isNotEmpty(noticeSummary), SysNotice::getNoticeSummary, noticeSummary);
queryWrapper.like(ObjectUtil.isNotEmpty(noticeContent), SysNotice::getNoticeContent, noticeContent);
queryWrapper.like(ObjectUtil.isNotEmpty(priorityLevel), SysNotice::getPriorityLevel, priorityLevel);
queryWrapper.eq(ObjectUtil.isNotNull(noticeBeginTime), SysNotice::getNoticeBeginTime, noticeBeginTime);
queryWrapper.eq(ObjectUtil.isNotNull(noticeEndTime), SysNotice::getNoticeEndTime, noticeEndTime);
queryWrapper.eq(ObjectUtil.isNotNull(noticeUserScope), SysNotice::getNoticeUserScope, noticeUserScope);
queryWrapper.eq(ObjectUtil.isNotNull(publishStatus), SysNotice::getPublishStatus, publishStatus);
queryWrapper.eq(ObjectUtil.isNotNull(versionFlag), SysNotice::getVersionFlag, versionFlag);
queryWrapper.eq(ObjectUtil.isNotNull(expandField), SysNotice::getExpandField, expandField);
queryWrapper.like(ObjectUtil.isNotEmpty(delFlag), SysNotice::getDelFlag, delFlag);
queryWrapper.eq(ObjectUtil.isNotNull(tenantId), SysNotice::getTenantId, tenantId);
return queryWrapper; return queryWrapper;
} }
/**
*
*
* @author fengshuonan
* @since 2021/2/8 19:30
*/
private void sendMessage(SysNotice sysNotice) {
MessageSendRequest message = new MessageSendRequest();
// 消息标题
message.setMessageTitle(sysNotice.getNoticeTitle());
// 消息内容
message.setMessageContent(sysNotice.getNoticeContent());
// 消息优先级
message.setPriorityLevel(sysNotice.getPriorityLevel());
// 消息发送范围
message.setReceiveUserIds(sysNotice.getNoticeScope());
// 消息业务类型
message.setBusinessType(MessageBusinessTypeEnum.SYS_NOTICE.getCode());
message.setBusinessTypeValue(MessageBusinessTypeEnum.SYS_NOTICE.getName());
message.setBusinessId(sysNotice.getNoticeId());
message.setMessageSendTime(new Date());
try {
messageApi.sendMessage(message);
} catch (Exception exception) {
// 发送失败打印异常
log.error("发送消息失败:", exception);
}
}
} }