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">