系统公告优化

main
gtl 2024-04-14 11:51:09 +08:00
parent 2deb45a61b
commit 535e96ed02
12 changed files with 340 additions and 11 deletions

View File

@ -6,8 +6,8 @@ import java.util.List;
import java.util.regex.Pattern;
/**
*
* @ClassName GtlUtil
* @Description
* @Author gtl
*/
public class GtlUtil {

View File

@ -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<Object> listByLoginUser (String noticeType,String isReady) {
List<SysNotice> 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<Object> 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));
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -11,6 +11,7 @@ import java.util.List;
* @author muyu
*/
public interface SysNoticeMapper extends BaseMapper<SysNotice> {
/**
*
*

View File

@ -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<SysNoticeUser> {
}

View File

@ -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;
/**

View File

@ -64,4 +64,16 @@ public interface SysNoticeService extends IService<SysNotice> {
* @return
*/
public int deleteNoticeByIds (Long[] noticeIds);
/**
*
*
* @return
*/
List<SysNotice> getListByLoginUser(String type);
/**
*
*/
void isReadyEdit(Long noticeId);
}

View File

@ -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<SysUser> {
* @return
*/
public String importUser (List<SysUser> userList, Boolean isUpdateSupport, String operName);
/**
* id
*
* @param deptIdList id
*
* @return
*/
List<Long> selectByDeptIds(List<Long> deptIdList);
}

View File

@ -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<SysNoticeMapper, SysNotice
@Autowired
private SysNoticeMapper noticeMapper;
@Autowired
private SysNoticeUserMapper sysNoticeUserMapper;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private SysUserService sysUserService;
/**
*
*
@ -28,7 +50,24 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
*/
@Override
public SysNotice selectNoticeById (Long noticeId) {
return noticeMapper.selectNoticeById(noticeId);
SysNotice sysNotice = noticeMapper.selectNoticeById(noticeId);
if(sysNotice.getNoticeType().equals("2")){
List<SysUser> sysUsers = sysUserService.selectUserList(new SysUser());
long isReadyCount = sysNoticeUserMapper.selectList(new LambdaQueryWrapper<SysNoticeUser>()
.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<SysNoticeUser> list = sysNoticeUserMapper.selectList(new LambdaQueryWrapper<SysNoticeUser>()
.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<SysNoticeMapper, SysNotice
*/
@Override
public int insertNotice (SysNotice notice) {
return noticeMapper.insertNotice(notice);
notice.setCreateBy(this.spliceCreateBy());
int insert = noticeMapper.insertNotice(notice);
this.addSysNoticeUser(notice.getNoticeId(),notice.getDeptIds(),notice.getUserIds());
return insert;
}
/**
*
* @return createBy
*/
public String spliceCreateBy(){
SysUser sysUser = sysUserService.selectUserById(SecurityUtils.getUserId());
String postGroup = sysUserService.selectUserPostGroup(SecurityUtils.getUsername());
SysDept sysDept = sysDeptService.selectDeptById(sysUser.getDeptId());
if(postGroup.contains(",")){
String[] split = postGroup.split(",");
postGroup=split[0];
}
return SecurityUtils.getUsername()+"("+sysDept.getDeptName()+"/"+postGroup+")";
}
/**
*
* @param noticeId
* @param deptIds
* @param userIds
*/
public void addSysNoticeUser(Long noticeId,String deptIds,String userIds){
List<Long> 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<SysNoticeMapper, SysNotice
*/
@Override
public int updateNotice (SysNotice notice) {
notice.setCreateBy(this.spliceCreateBy());
notice.setUpdateBy(SecurityUtils.getUsername());
String deptIds = notice.getDeptIds();
String userIds = notice.getUserIds();
//删除中间表
sysNoticeUserMapper.delete(new LambdaQueryWrapper<SysNoticeUser>()
.in(SysNoticeUser::getNoticeId,notice.getNoticeId()));
//添加中间表
this.addSysNoticeUser(notice.getNoticeId(),deptIds,userIds);
return noticeMapper.updateNotice(notice);
}
@ -90,4 +187,64 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
public int deleteNoticeByIds (Long[] noticeIds) {
return noticeMapper.deleteNoticeByIds(noticeIds);
}
/**
*
*
* @return
*/
@Override
public List<SysNotice> getListByLoginUser(String type) {
Long userId = SecurityUtils.getUserId();
SysNotice sysNotice = new SysNotice();
if(StringUtils.isNotEmpty(type)){
sysNotice.setNoticeType(type);
}
List<SysNotice> sysNotices = noticeMapper.selectNoticeList(sysNotice);
insertSysNoticeUser(userId,sysNotices);
if(StringUtils.isNotEmpty(type)){
return sysNotices;
}
List<SysNoticeUser> list = sysNoticeUserMapper.selectList(new LambdaQueryWrapper<SysNoticeUser>()
.eq(SysNoticeUser::getUserId, userId));
List<SysNotice> 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<SysNoticeUser>()
.eq(SysNoticeUser::getNoticeId,noticeId)
.eq(SysNoticeUser::getUserId,SecurityUtils.getUserId())
.set(SysNoticeUser::getIsReady,"Y"));
}
/**
* ,
* @param sysNotices
*/
public void insertSysNoticeUser(Long userId,List<SysNotice> sysNotices){
sysNotices.forEach(sysNotice -> {
Long noticeId = sysNotice.getNoticeId();
SysNoticeUser sysNoticeUser = sysNoticeUserMapper.selectOne(new LambdaQueryWrapper<SysNoticeUser>()
.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);
}
});
}
}

View File

@ -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<SysUserMapper, SysUser> impl
return successMsg.toString();
}
/**
* id
*
* @param deptIdList id
*
* @return
*/
@Override
public List<Long> selectByDeptIds(List<Long> deptIdList) {
List<Long> list=new ArrayList<>();
deptIdList.stream().map(id->SysUser.builder().deptId(id).build())
.forEach(user->{
List<Long> userIdList = userMapper.selectUserList(user).stream().map(SysUser::getUserId).toList();
list.addAll(userIdList);
});
return list;
}
}

View File

@ -9,11 +9,14 @@
<result property="noticeTitle" column="notice_title"/>
<result property="noticeType" column="notice_type"/>
<result property="noticeContent" column="notice_content"/>
<result property="userIds" column="user_ids"/>
<result property="deptIds" column="dept_ids"/>
<result property="status" column="status"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="failureTime" column="failure_time"/>
<result property="remark" column="remark"/>
</resultMap>
@ -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 @@
</where>
</select>
<insert id="insertNotice" parameterType="com.ruoyi.system.domain.SysNotice">
<insert id="insertNotice" parameterType="com.ruoyi.system.domain.SysNotice" keyProperty="noticeId" useGeneratedKeys="true">
insert into sys_notice (
<if test="noticeTitle != null and noticeTitle != '' ">notice_title,</if>
<if test="noticeType != null and noticeType != '' ">notice_type,</if>
@ -59,6 +65,9 @@
<if test="status != null and status != '' ">status,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="deptIds != null and deptIds != ''">dept_ids,</if>
<if test="userIds != null and userIds != ''">user_ids,</if>
<if test="failureTime != null ">failure_time,</if>
create_time
)values(
<if test="noticeTitle != null and noticeTitle != ''">#{noticeTitle},</if>
@ -67,6 +76,9 @@
<if test="status != null and status != ''">#{status},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="deptIds != null and deptIds != ''">#{deptIds},</if>
<if test="userIds != null and userIds != ''">#{userIds},</if>
<if test="failureTime != null ">#{failureTime},</if>
sysdate()
)
</insert>
@ -78,7 +90,11 @@
<if test="noticeType != null and noticeType != ''">notice_type = #{noticeType},</if>
<if test="noticeContent != null">notice_content = #{noticeContent},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="deptIds != null and deptIds != ''">dept_ids = #{deptIds},</if>
<if test="userIds != null and userIds != ''">user_ids = #{userIds},</if>
<if test="failureTime != null ">failure_time = #{failureTime},</if>
update_time = sysdate()
</set>
where notice_id = #{noticeId}