公告类型字段,另加一个配置功能(类似字典功能),并且也作为消息通知通知到每个人
已添加7个文件
已修改10个文件
405 ■■■■ 文件已修改
src/main/java/com/ruoyi/CodeGenerator.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeTypeController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/mapper/NoticeTypeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/pojo/NoticeType.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/service/NoticeTypeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeTypeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/domain/SysUser.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/collaborativeApproval/NoticeTypeMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/CodeGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
package com.ruoyi;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableField;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import java.util.Collections;
import java.util.Scanner;
// æ¼”示例子,执行 main æ–¹æ³•控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
    public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management";
    public static String database_username = "root";
    public static String database_password= "123456";
    public static String author = "芯导软件(江苏)有限公司";
    public static String model = "collaborativeApproval"; // æ¨¡å—
    public static String setParent = "com.ruoyi."+ model; // åŒ…路径
    public static String tablePrefix = ""; // è®¾ç½®è¿‡æ»¤è¡¨å‰ç¼€
    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
        FastAutoGenerator.create(database_url, database_username, database_password)
                // å…¨å±€é…ç½®
                .globalConfig(builder -> {
                    builder.author(author) // è®¾ç½®ä½œè€…
                            .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
                            .outputDir(projectPath  + "/src/main/java") // æŒ‡å®šè¾“出目录
                            .disableOpenDir() //禁止打开输出目录,默认打开
                            .enableSwagger() // å¼€å¯swagger
                    ;
                })
                // æ•°æ®æºé…ç½®ï¼ˆæ ¸å¿ƒï¼šè‡ªå®šä¹‰ç±»åž‹è½¬æ¢ï¼Œå¼ºåˆ¶tenant_id为Long)
                .dataSourceConfig(builder -> {
                    builder.typeConvert(new MySqlTypeConvert() {
                        /**
                         * è‡ªå®šä¹‰å­—段类型转换
                         * @param globalConfig å…¨å±€é…ç½®
                         * @param tableField è¡¨å­—段信息
                         * @return è½¬æ¢åŽçš„字段类型
                         */
                        @Override
                        public DbColumnType processTypeConvert(GlobalConfig globalConfig, TableField tableField) {
                            // å¼ºåˆ¶tenant_id字段类型为Long
                            if ("tenant_id".equalsIgnoreCase(tableField.getName())) {
                                return DbColumnType.LONG;
                            }
                            // å…¶ä»–字段使用默认转换规则
                            return (DbColumnType) super.processTypeConvert(globalConfig, tableField);
                        }
                    });
                })
                // åŒ…配置
                .packageConfig(builder -> {
                    builder.entity("pojo");
                    builder.parent(setParent) // è®¾ç½®çˆ¶åŒ…名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath  +  "/src/main/resources/"+model+"/mapper")); // è®¾ç½®mapperXml生成路径
                })
                // ç­–略配置
                .strategyConfig(builder -> {
                    builder.addInclude(scanner("表名,多个空格分割").split(" ")) // è®¾ç½®éœ€è¦ç”Ÿæˆçš„表名
                            .addTablePrefix(tablePrefix) // è®¾ç½®è¿‡æ»¤è¡¨å‰ç¼€
                            // Entity ç­–略配置
                            .entityBuilder()
                            .enableLombok() //开启 Lombok
                            .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
                            .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
                            .enableFileOverride() // è¦†ç›–已经生成的Entity文件
                            .logicDeleteColumnName("state")
                            .addTableFills(
                                    new Column("create_time", FieldFill.INSERT),
                                    new Column("update_time", FieldFill.INSERT_UPDATE),
                                    new Column("create_user", FieldFill.INSERT),
                                    new Column("update_user", FieldFill.INSERT_UPDATE),
                                    new Column("tenant_id", FieldFill.INSERT)
                            )
                            .idType(IdType.AUTO) // è‡ªå¢žä¸»é”®
                            // Mapper ç­–略配置
                            .mapperBuilder()
                            .enableFileOverride() // è¦†ç›–已生成Mapper文件
                            .enableBaseResultMap() // è‡ªåŠ¨ç”ŸæˆresultMap
                            // Service ç­–略配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService") //格式化 service æŽ¥å£æ–‡ä»¶åç§°ï¼Œ%s进行匹配表名,如 UserService
                            .formatServiceImplFileName("%sServiceImpl") //格式化 service å®žçŽ°ç±»æ–‡ä»¶åç§°ï¼Œ%s进行匹配表名,如 UserServiceImpl
                            .enableFileOverride() // è¦†ç›–已生成文件
                            // Controller ç­–略配置
                            .controllerBuilder()
                            .enableFileOverride() // è¦†ç›–已生成文件
                            .enableRestStyle() // å¼€å¯ç”Ÿæˆ@RestController æŽ§åˆ¶å™¨
                    ;
                })
                //5、模板引擎
                .templateEngine(new FreemarkerTemplateEngine())    //默认
                .execute();
    }
    /**
     * <p>
     * è¯»å–控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
}
src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeController.java
@@ -1,12 +1,15 @@
package com.ruoyi.collaborativeApproval.controller;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.collaborativeApproval.dto.NoticeDTO;
import com.ruoyi.collaborativeApproval.pojo.Notice;
import com.ruoyi.collaborativeApproval.service.NoticeService;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.service.ISysNoticeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
@@ -22,6 +25,7 @@
public class NoticeController extends BaseController {
    private final NoticeService noticeService;
    private final ISysNoticeService sysNoticeService;
    @GetMapping("/page")
    @Log(title = "分页查询", businessType = BusinessType.OTHER)
@@ -34,6 +38,13 @@
    @Log(title = "新增", businessType = BusinessType.INSERT)
    @ApiOperation("新增")
    public AjaxResult add(@RequestBody NoticeDTO noticeDTO){
        if (noticeDTO.getStatus()==1){
            //正式发布通知所有人的消息通知
            sysNoticeService.simpleNoticeAll("通知公告",
                    noticeDTO.getTitle(),
                    noticeDTO.getTenantId(),
                    "/collaborativeApproval/noticeManagement?type="+noticeDTO.getType());
        }
        return AjaxResult.success(noticeService.save(noticeDTO));
    }
@@ -41,6 +52,14 @@
    @Log(title = "修改", businessType = BusinessType.UPDATE)
    @ApiOperation("修改")
    public AjaxResult update(@RequestBody NoticeDTO noticeDTO){
        if (ObjectUtils.isNotNull(noticeDTO.getStatus()) && noticeDTO.getStatus()==1){
            Notice notice = noticeService.getById(noticeDTO.getId());
            //正式发布通知所有人的消息通知
            sysNoticeService.simpleNoticeAll("通知公告",
                    notice.getTitle(),
                    notice.getTenantId(),
                    "/collaborativeApproval/noticeManagement?type="+notice.getType());
        }
        return AjaxResult.success(noticeService.updateById(noticeDTO));
    }
src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeTypeController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.collaborativeApproval.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.SupplierManageDto;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.collaborativeApproval.pojo.NoticeType;
import com.ruoyi.collaborativeApproval.service.NoticeTypeService;
import com.ruoyi.framework.web.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * <p>
 * é€šçŸ¥å…¬å‘Šçš„公告类型维护 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-13 09:57:56
 */
@RestController
@RequestMapping("/noticeType")
public class NoticeTypeController {
    @Autowired
    private NoticeTypeService noticeTypeService;
    /**
     * é€šçŸ¥å…¬å‘Šçš„公告类型维护新增
     * @param noticeType
     * @return
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody NoticeType noticeType) {
        return AjaxResult.success(noticeTypeService.save(noticeType));
    }
    /**
     * é€šçŸ¥å…¬å‘Šçš„公告类型维护删除
     * @param ids
     * @return
     */
    @DeleteMapping("/del")
    public AjaxResult delNoticeType(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        return AjaxResult.success(noticeTypeService.removeBatchByIds(ids));
    }
    /**
     * é€šçŸ¥å…¬å‘Šçš„公告类型维护查询
     * @return
     */
    @GetMapping("/list")
    public AjaxResult noticeTypeList() {
        return AjaxResult.success(noticeTypeService.list());
    }
}
src/main/java/com/ruoyi/collaborativeApproval/mapper/NoticeTypeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.collaborativeApproval.mapper;
import com.ruoyi.collaborativeApproval.pojo.NoticeType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * é€šçŸ¥å…¬å‘Šçš„公告类型维护 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-13 09:57:56
 */
public interface NoticeTypeMapper extends BaseMapper<NoticeType> {
}
src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java
@@ -30,9 +30,9 @@
    private String title;
    /**
     * å…¬å‘Šç±»åž‹ï¼ˆ1放假通知 2设备维修通知)
     * å…¬å‘Šç±»åž‹
     */
    @ApiModelProperty("公告类型(1放假通知 2设备维修通知)")
    @ApiModelProperty("公告类型")
    private String type;
    /**
src/main/java/com/ruoyi/collaborativeApproval/pojo/NoticeType.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.collaborativeApproval.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
 * <p>
 * é€šçŸ¥å…¬å‘Šçš„公告类型维护
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-13 09:57:56
 */
@Getter
@Setter
@TableName("notice_type")
@ApiModel(value = "NoticeType对象", description = "通知公告的公告类型维护")
public class NoticeType implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("通知公告的公告类型")
    private String noticeType;
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/collaborativeApproval/service/NoticeTypeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.collaborativeApproval.service;
import com.ruoyi.collaborativeApproval.pojo.NoticeType;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 * é€šçŸ¥å…¬å‘Šçš„公告类型维护 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-13 09:57:56
 */
public interface NoticeTypeService extends IService<NoticeType> {
}
src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeTypeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.collaborativeApproval.service.impl;
import com.ruoyi.collaborativeApproval.pojo.NoticeType;
import com.ruoyi.collaborativeApproval.mapper.NoticeTypeMapper;
import com.ruoyi.collaborativeApproval.service.NoticeTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * é€šçŸ¥å…¬å‘Šçš„公告类型维护 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-13 09:57:56
 */
@Service
public class NoticeTypeServiceImpl extends ServiceImpl<NoticeTypeMapper, NoticeType> implements NoticeTypeService {
}
src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
@@ -4,13 +4,15 @@
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
 * Entity基类
 *
 *
 * @author ruoyi
 */
public class BaseEntity implements Serializable
@@ -19,6 +21,7 @@
    /** æœç´¢å€¼ */
    @JsonIgnore
    @TableField(exist = false)
    private String searchValue;
    /** åˆ›å»ºè€… */
@@ -40,6 +43,7 @@
    /** è¯·æ±‚参数 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    private Map<String, Object> params;
    public String getSearchValue()
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -77,7 +77,7 @@
        // æ‰¹é‡æŸ¥è¯¢ç™»è®°äºº
        Map<Long, SysUser> sysUserMap;
        if (!registrantIds.isEmpty()) {
            List<SysUser> sysUsers = sysUserMapper.selectList(registrantIds);
            List<SysUser> sysUsers = sysUserMapper.selectRegistrantIds(registrantIds);
            sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
        } else {
            sysUserMap = new HashMap<>();
src/main/java/com/ruoyi/project/system/domain/SysUser.java
@@ -16,7 +16,7 @@
/**
 * ç”¨æˆ·å¯¹è±¡ sys_user
 *
 *
 * @author ruoyi
 */
public class SysUser extends BaseEntity
@@ -73,31 +73,39 @@
        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
    })
    @TableField(exist = false)
    private SysDept dept;
    /** è§’色对象 */
    @TableField(exist = false)
    private List<SysRole> roles;
    /** è§’色组 */
    @TableField(exist = false)
    private Long[] roleIds;
    /** å²—位组 */
    @TableField(exist = false)
    private Long[] postIds;
    /** è§’色ID */
    @TableField(exist = false)
    private Long roleId;
    /** ç§Ÿæˆ·ID */
    private Long tenantId;
    @TableField(exist = false)
    private Long[] deptIds;
    @TableField(exist = false)
    private Long deptId;
    @TableField(exist = false)
    private Long currentDeptId;
    /** å½“前登录公司 */
    @TableField(exist = false)
    private String currentFactoryName;
    public String getCurrentFactoryName() {
@@ -111,6 +119,7 @@
    /**
     * éƒ¨é—¨åç§°
     */
    @TableField(exist = false)
    private String deptNames;
    public Long getCurrentDeptId() {
@@ -371,7 +380,6 @@
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remark", getRemark())
            .append("dept", getDept())
            .toString();
    }
}
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -149,7 +149,7 @@
     */
    public SysUser checkEmailUnique(String email);
    List<SysUser> selectList(List<Long> registrantIds);
    List<SysUser> selectRegistrantIds(List<Long> registrantIds);
    List<SysUser> selectUsersByIds(@Param("userIds") List<Long> userIds);
src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
@@ -67,26 +67,6 @@
    int readAll();
    /**
     * é€šè¿‡è§’色 å‘送提醒
     * @param title æ ‡é¢˜
     * @param message å†…容
     * @param needPushRoles å‘送的角色
     * @param jumpPath è·³è½¬åœ°å€
     */
    void simpleNoticeByRoles(final String title, final String message, final Long tenantId,final List<String> needPushRoles,
                                      final String jumpPath);
    /**
     * é€šè¿‡æƒé™ å‘送提醒
     * @param title æ ‡é¢˜
     * @param message æ¶ˆæ¯
     * @param needPerms å‘送的权限者 å·²åŒ…含上级
     * @param jumpPath è·³è½¬åœ°å€
     */
    void simpleNoticeByPerms(final String title, final String message, final Long tenantId,final List<String> needPerms,
                                      final String jumpPath);
    /**
     * é€šè¿‡æŒ‡å®šäººå‘送提醒
     * @param title æ ‡é¢˜
     * @param message æ¶ˆæ¯
@@ -103,5 +83,4 @@
     */
    void simpleNoticeAll(final String title, final String message,final Long tenantId,final String jumpPath);
    void insertBatch(final List<SysNotice> notices);
}
src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
@@ -12,6 +12,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
@@ -126,33 +127,6 @@
    }
    @Override
    public void simpleNoticeByRoles(final String title, String message, Long tenantId, List<String> needPushRoles,
                                             final String jumpPath) {
        Long userId = SecurityUtils.getUserId();
        if (StrUtil.isBlank(message) || CollectionUtils.isEmpty(needPushRoles)) {
            return;
        }
        List<String> rolesWithAdmin = new ArrayList<>(needPushRoles);
        rolesWithAdmin.add("管理员");
        List<SysNotice> collect = rolesWithAdmin.stream()
                .flatMap(it -> userMapper.getUserByRole(it).stream())
                .map(it -> convertSysNotice(title, message, it,tenantId, jumpPath, userId))
                .collect(Collectors.toList());
        sysNoticeService.insertBatch(collect);
    }
    @Override
    public void simpleNoticeByPerms(String title, String message, Long tenantId, List<String> needPerms,
                                             String jumpPath) {
        Long userId = SecurityUtils.getLoginUser().getUserId();
        if (StrUtil.isBlank(message) || CollectionUtils.isEmpty(needPerms)) {
            return;
        }
        List<SysNotice> collect = userMapper.getUserByPerms(needPerms).stream().map(it -> convertSysNotice(title, message, it,tenantId, jumpPath,  userId)).collect(Collectors.toList());
        sysNoticeService.insertBatch(collect);
    }
    @Override
    public void simpleNoticeByUser(String title, String message,  List<Long> consigneeId, Long tenantId,
                                    String jumpPath) {
        Long userId = SecurityUtils.getLoginUser().getUserId();
@@ -163,21 +137,13 @@
    @Override
    public void simpleNoticeAll(String title, String message,  Long tenantId,String jumpPath) {
        Long userId = SecurityUtils.getLoginUser().getUserId();
        List<SysNotice> collect = userMapper.selectList(null).stream().map(it -> convertSysNotice(title, message, it.getUserId(),tenantId, jumpPath,  userId)).collect(Collectors.toList());
        List<SysUser> sysUsers = userMapper.selectList(Wrappers.<SysUser>lambdaQuery()
                .eq(SysUser::getStatus, "0")
                .eq(SysUser::getTenantId, tenantId));
        List<SysNotice> collect = sysUsers.stream().map(it -> convertSysNotice(title, message, it.getUserId(),tenantId, jumpPath,  userId)).collect(Collectors.toList());
        sysNoticeService.saveBatch(collect);
    }
    @Override
    public void insertBatch(List<SysNotice> noticesList) {
        if(CollectionUtils.isEmpty(noticesList)){
            return;
        }
        // æŽ’除掉自己
        Long userId = SecurityUtils.getUserId();
        List<SysNotice> noticesListNew = noticesList.stream().filter(Objects::nonNull).filter(it -> !Objects.equals(it.getConsigneeId(), userId)).collect(Collectors.toList());
        sysNoticeService.saveBatch(noticesListNew);
    }
    private SysNotice convertSysNotice(String title,String message,Long consigneeId, Long tenantId,String jumpPath,Long currentUserId) {
        SysNotice sysNotice = new SysNotice();
src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
@@ -11,11 +11,11 @@
                and n.title like concat('%',#{ew.title},'%')
            </if>
            <if test="ew.type != null">
                and n.type = #{ew.type}
                and n.type  = #{ew.type}
            </if>
            <if test="ew.status != null">
                and n.status = #{ew.status}
            </if>
        </where>
    </select>
</mapper>
</mapper>
src/main/resources/mapper/collaborativeApproval/NoticeTypeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.collaborativeApproval.mapper.NoticeTypeMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.collaborativeApproval.pojo.NoticeType">
        <id column="id" property="id" />
        <result column="notice_type" property="noticeType" />
        <result column="tenant_id" property="tenantId" />
    </resultMap>
</mapper>
src/main/resources/mapper/system/SysUserMapper.xml
@@ -158,7 +158,7 @@
             #{item}
        </foreach>
    </select>
    <select id="selectList" resultType="com.ruoyi.project.system.domain.SysUser">
    <select id="selectRegistrantIds" resultType="com.ruoyi.project.system.domain.SysUser">
        SELECT user_id, nick_name FROM sys_user
        <where>
            <if test="list != null and list.size() > 0">