diff --git a/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/GtlUtil.java b/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/GtlUtil.java index 360f5f1..4b9a18d 100644 --- a/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/GtlUtil.java +++ b/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/GtlUtil.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.regex.Pattern; /** + * 常用功能工具类 * @ClassName GtlUtil - * @Description 常用功能工具类 * @Author gtl */ public class GtlUtil { diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java index 6ee6c7c..2bd5217 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java @@ -1,5 +1,6 @@ package com.ruoyi.system.controller; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.web.page.TableDataInfo; @@ -26,6 +27,29 @@ public class SysNoticeController extends BaseController { @Autowired private SysNoticeService noticeService; + /** + * 获取当前用户的通知公告列表 + */ + @RequiresPermissions("system:notice:list") + @GetMapping + public Result listByLoginUser (String noticeType,String isReady) { + List list = noticeService.getListByLoginUser(noticeType); + if(StringUtils.isNotEmpty(isReady)){ + list=list.stream().filter(sysNotice -> sysNotice.getIsReady().equals(isReady)).toList(); + } + return Result.success(list); + } + + /** + * 修改公告为已读 + */ + @RequiresPermissions("system:notice:edit") + @PutMapping("/{noticeId}") + public Result edit (@PathVariable Long noticeId) { + noticeService.isReadyEdit(noticeId); + return Result.success(); + } + /** * 获取通知公告列表 */ @@ -53,7 +77,6 @@ public class SysNoticeController extends BaseController { @Log(title = "通知公告", businessType = BusinessType.INSERT) @PostMapping public Result add (@Validated @RequestBody SysNotice notice) { - notice.setCreateBy(SecurityUtils.getUsername()); return toAjax(noticeService.insertNotice(notice)); } @@ -64,7 +87,6 @@ public class SysNoticeController extends BaseController { @Log(title = "通知公告", businessType = BusinessType.UPDATE) @PutMapping public Result edit (@Validated @RequestBody SysNotice notice) { - notice.setUpdateBy(SecurityUtils.getUsername()); return toAjax(noticeService.updateNotice(notice)); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java index 973c83f..478fb64 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -12,6 +12,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; +import java.util.Date; /** * 通知公告表 sys_notice @@ -46,11 +47,46 @@ public class SysNotice extends BaseEntity { */ private String noticeContent; + /** + * 用户ids + */ + private String userIds; + + /** + * 部门ids + */ + private String deptIds; + + /** + * 结束时间 + */ + private Date failureTime; + /** * 公告状态(0正常 1关闭) */ private String status; + /** + * 是否已读 + */ + private String isReady="N"; + + /** + * 总通知数量 + */ + private long count; + + /** + * 已阅读通知数量 + */ + private long isReadyCount; + + /** + * 未阅读通知数量 + */ + private long isNotReadyCount; + public Long getNoticeId () { return noticeId; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNoticeUser.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNoticeUser.java new file mode 100644 index 0000000..41f31ed --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNoticeUser.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.io.Serializable; +import java.util.function.Supplier; +import java.util.Date; + +/** + * sys_notice_user + * + * @author gtl + * @date 2024-04-13 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_notice_user") +public class SysNoticeUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + /** 通知 */ + private Long noticeId; + + /** 用户 */ + private Long userId; + + /** 是否已读 */ + private String isReady; + +} + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java index ff306f8..a905b8b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java @@ -11,6 +11,7 @@ import java.util.List; * @author muyu */ public interface SysNoticeMapper extends BaseMapper { + /** * 查询公告信息 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeUserMapper.java new file mode 100644 index 0000000..530efdc --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeUserMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysNoticeUser; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName SysNoticeUserMapper + * @Author 森静若林 + * @Date 2024/4/13 17:59 + */ +@Mapper +public interface SysNoticeUserMapper extends BaseMapper { +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index a079270..082c55d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -3,7 +3,6 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.system.domain.SysUser; import org.apache.ibatis.annotations.Param; - import java.util.List; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java index 4c7b807..240c849 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java @@ -64,4 +64,16 @@ public interface SysNoticeService extends IService { * @return 结果 */ public int deleteNoticeByIds (Long[] noticeIds); + + /** + * 获取当前登录人的公告信息 + * + * @return 结果 + */ + List getListByLoginUser(String type); + + /** + * 修改为已读状态 + */ + void isReadyEdit(Long noticeId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java index e96649c..0929f99 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java @@ -2,7 +2,6 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.system.domain.SysUser; - import java.util.List; /** @@ -225,4 +224,13 @@ public interface SysUserService extends IService { * @return 结果 */ public String importUser (List userList, Boolean isUpdateSupport, String operName); + + /** + * 用户id集合 + * + * @param deptIdList 部门id数据列表 + * + * @return 结果 + */ + List selectByDeptIds(List deptIdList); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java index 4a618c3..da27078 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -1,13 +1,26 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.common.system.domain.SysUser; import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.domain.SysNoticeUser; import com.ruoyi.system.mapper.SysNoticeMapper; +import com.ruoyi.system.mapper.SysNoticeUserMapper; +import com.ruoyi.system.service.SysDeptService; import com.ruoyi.system.service.SysNoticeService; +import com.ruoyi.system.service.SysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * 公告 服务层实现 @@ -19,6 +32,15 @@ public class SysNoticeServiceImpl extends ServiceImpl sysUsers = sysUserService.selectUserList(new SysUser()); + long isReadyCount = sysNoticeUserMapper.selectList(new LambdaQueryWrapper() + .eq(SysNoticeUser::getNoticeId, noticeId)) + .stream().filter(sysNoticeUser -> sysNoticeUser.getIsReady().equals("Y")).count(); + sysNotice.setCount(sysUsers.size()); + sysNotice.setIsReadyCount(isReadyCount); + sysNotice.setIsNotReadyCount(sysUsers.size() - isReadyCount); + }else { + List list = sysNoticeUserMapper.selectList(new LambdaQueryWrapper() + .eq(SysNoticeUser::getNoticeId, noticeId)); + sysNotice.setCount(list.size()); + long isReadyCount = list.stream().filter(sysNoticeUser -> sysNoticeUser.getIsReady().equals("Y")).count(); + sysNotice.setIsReadyCount(isReadyCount); + sysNotice.setIsNotReadyCount(list.size() - isReadyCount); + } + return sysNotice; } /** @@ -52,7 +91,56 @@ public class SysNoticeServiceImpl extends ServiceImpl longList=new ArrayList<>(); + if(StringUtils.isNotEmpty(deptIds)){ + String[] dept = deptIds.split(","); + longList = Arrays.stream(dept).map(Convert::toLong).toList(); + sysUserService.selectByDeptIds(longList).stream().map(id -> { + return SysNoticeUser.builder() + .noticeId(noticeId) + .userId(id).build(); + }).toList().forEach(sysNoticeUserMapper::insert); + } + if(StringUtils.isNotEmpty(userIds)){ + String[] user = userIds.split(","); + for (String userName : user) { + SysUser sysUser = sysUserService.selectUserByUserNameOrEmail(userName); + if(!longList.contains(sysUser.getDeptId())){ + SysNoticeUser build = SysNoticeUser.builder() + .noticeId(noticeId) + .userId(sysUser.getUserId()).build(); + sysNoticeUserMapper.insert(build); + } + } + } } /** @@ -64,6 +152,15 @@ public class SysNoticeServiceImpl extends ServiceImpl() + .in(SysNoticeUser::getNoticeId,notice.getNoticeId())); + //添加中间表 + this.addSysNoticeUser(notice.getNoticeId(),deptIds,userIds); return noticeMapper.updateNotice(notice); } @@ -90,4 +187,64 @@ public class SysNoticeServiceImpl extends ServiceImpl getListByLoginUser(String type) { + Long userId = SecurityUtils.getUserId(); + SysNotice sysNotice = new SysNotice(); + if(StringUtils.isNotEmpty(type)){ + sysNotice.setNoticeType(type); + } + List sysNotices = noticeMapper.selectNoticeList(sysNotice); + insertSysNoticeUser(userId,sysNotices); + if(StringUtils.isNotEmpty(type)){ + return sysNotices; + } + List list = sysNoticeUserMapper.selectList(new LambdaQueryWrapper() + .eq(SysNoticeUser::getUserId, userId)); + List sysNoticeList=new ArrayList<>(); + if(StringUtils.isNotEmpty(list)){ + list.forEach(sysNoticeUser -> { + SysNotice notice = noticeMapper.selectNoticeById(sysNoticeUser.getNoticeId()); + notice.setIsReady(sysNoticeUser.getIsReady()); + sysNoticeList.add(notice); + }); + } + return sysNoticeList; + } + + @Override + public void isReadyEdit(Long noticeId) { + SysNoticeUser sysNoticeUser = new SysNoticeUser(); + sysNoticeUser.setNoticeId(noticeId); + sysNoticeUser.setIsReady("Y"); + sysNoticeUserMapper.update(sysNoticeUser,new LambdaUpdateWrapper() + .eq(SysNoticeUser::getNoticeId,noticeId) + .eq(SysNoticeUser::getUserId,SecurityUtils.getUserId()) + .set(SysNoticeUser::getIsReady,"Y")); + } + + /** + * 检查是否有公告的中间表,没有则添加 + * @param sysNotices 公告集合 + */ + public void insertSysNoticeUser(Long userId,List sysNotices){ + sysNotices.forEach(sysNotice -> { + Long noticeId = sysNotice.getNoticeId(); + SysNoticeUser sysNoticeUser = sysNoticeUserMapper.selectOne(new LambdaQueryWrapper() + .eq(SysNoticeUser::getNoticeId, noticeId) + .eq(SysNoticeUser::getUserId, userId)); + if(Objects.isNull(sysNoticeUser)){ + SysNoticeUser noticeUser = new SysNoticeUser(); + noticeUser.setUserId(userId); + noticeUser.setNoticeId(noticeId); + sysNoticeUserMapper.insert(noticeUser); + } + }); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 3afc870..fb21cdd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -26,11 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; - import javax.validation.Validator; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** @@ -519,4 +517,22 @@ public class SysUserServiceImpl extends ServiceImpl impl return successMsg.toString(); } + /** + * 用户id集合 + * + * @param deptIdList 部门id数据列表 + * + * @return 结果 + */ + @Override + public List selectByDeptIds(List deptIdList) { + List list=new ArrayList<>(); + deptIdList.stream().map(id->SysUser.builder().deptId(id).build()) + .forEach(user->{ + List userIdList = userMapper.selectUserList(user).stream().map(SysUser::getUserId).toList(); + list.addAll(userIdList); + }); + return list; + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml index 6ec0837..f3b1065 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -9,11 +9,14 @@ + + + @@ -21,6 +24,9 @@ select notice_id, notice_title, notice_type, + user_ids, + dept_ids, + failure_time, cast(notice_content as char) as notice_content, status, create_by, @@ -51,7 +57,7 @@ - + insert into sys_notice ( notice_title, notice_type, @@ -59,6 +65,9 @@ status, remark, create_by, + dept_ids, + user_ids, + failure_time, create_time )values( #{noticeTitle}, @@ -67,6 +76,9 @@ #{status}, #{remark}, #{createBy}, + #{deptIds}, + #{userIds}, + #{failureTime}, sysdate() ) @@ -78,7 +90,11 @@ notice_type = #{noticeType}, notice_content = #{noticeContent}, status = #{status}, + create_by = #{createBy}, update_by = #{updateBy}, + dept_ids = #{deptIds}, + user_ids = #{userIds}, + failure_time = #{failureTime}, update_time = sysdate() where notice_id = #{noticeId}