package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.dto.SetDeptDTO; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaNotifationUser; import com.ruoyi.system.model.OaNotification; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.query.NotificationListQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.sql.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 通知表 前端控制器 *

* * @author WuGuanFengYue * @since 2025-09-15 */ @RestController @Api("消息通知") @RequestMapping("/oa-notification") public class OaNotificationController { @Resource private OaNotificationService oaNotificationService; @Resource private OaNotifationUserService oaNotifationUserService; @Resource private TDeptService deptService; @Resource private ISysUserService sysUserService; /** * 获取部门树列表 */ @ApiOperation("消息通知分页列表") @PostMapping("/pageList") public R> pageList(@RequestBody NotificationListQuery query) { return R.ok(oaNotificationService.pageList(query)); } @ApiOperation(value = "删除消息通知") @Log(title = "删除消息通知", businessType = BusinessType.DELETE) @DeleteMapping(value = "/delete") public R delete(@RequestParam String ids) { List notificationIds = Arrays.asList(ids.split(",")); // 删除后 将已发送的消息通知一并删除 oaNotificationService.removeBatchByIds(notificationIds); oaNotifationUserService.remove(new LambdaQueryWrapper() .in(OaNotifationUser::getNotificationId,notificationIds)); return R.ok(); } @Log(title = "消息通知-新增消息", businessType = BusinessType.INSERT) @ApiOperation(value = "新增消息") @PostMapping(value = "/add") public R add( @RequestBody OaNotification dto) { oaNotificationService.save(dto); ArrayList oaNotifationUsers = new ArrayList<>(); // 发送消息通知 if (dto.getType()){ // 指定人员发送 Arrays.asList(dto.getUserIds().split(",")) .forEach(userId -> { OaNotifationUser oaNotifationUser = new OaNotifationUser(); oaNotifationUser.setUserId(Integer.parseInt(userId)); oaNotifationUser.setNotificationId(dto.getId()); oaNotifationUsers.add(oaNotifationUser); }); }else{ // 所有人发送 List sysUsers = sysUserService.selectAllList(); sysUsers.forEach(sysUser -> { OaNotifationUser oaNotifationUser = new OaNotifationUser(); oaNotifationUser.setUserId(sysUser.getUserId().intValue()); oaNotifationUser.setNotificationId(dto.getId()); oaNotifationUsers.add(oaNotifationUser); }); } oaNotifationUserService.saveBatch(oaNotifationUsers); return R.ok(); } @ApiOperation(value = "消息通知详情") @GetMapping(value = "/detail") public R detail(String id) { NotificationDetailVO notificationDetailVO = new NotificationDetailVO(); OaNotification oaNotification = oaNotificationService.getById(id); BeanUtils.copyProperties(oaNotification, notificationDetailVO); StringBuilder deptName = new StringBuilder(); List tDepts = deptService.list(); List sysUsers = sysUserService.selectAllList(); List notifationUsers = oaNotifationUserService.lambdaQuery().eq(OaNotifationUser::getNotificationId, id) .list(); Map deptMap = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); Map userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, e->e)); if (oaNotification.getType()){ for (String deptId : oaNotification.getDeptIds().split(",")) { String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), ""); deptName.append(orDefault).append(","); } notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1)); List notificationUserVOS = new ArrayList<>(); List userIds = notifationUsers.stream().map(e -> e.getUserId().longValue()).collect(Collectors.toList()); if (!userIds.isEmpty()){ Map> deptUserList = sysUsers.stream().filter(e -> userIds.contains(e.getUserId())) .collect(Collectors.groupingBy(SysUser::getDeptId)); // 遍历这个map for (Map.Entry> entry : deptUserList.entrySet()) { List users = entry.getValue(); String deptId = entry.getKey(); NotificationDeptUserDetailVO notificationDeptUserDetailVO = new NotificationDeptUserDetailVO(); notificationDeptUserDetailVO.setDeptName(deptMap.getOrDefault(Integer.parseInt(deptId), "")); notificationDeptUserDetailVO.setUsers(users); // 查询部门下的员工数是否和users一致 long count = sysUsers.stream().filter(e -> e.getDeptId().equals(deptId)).count(); if (count==users.size()){ notificationDeptUserDetailVO.setIsAll(true); }else{ notificationDeptUserDetailVO.setIsAll(false); } notificationUserVOS.add(notificationDeptUserDetailVO); } } notificationDetailVO.setNotificationDeptUserDetailVOList(notificationUserVOS); }else{ notificationDetailVO.setDeptName("全部人员"); } List notificationUserDetailVOS = new ArrayList<>(); for (OaNotifationUser notifationUser : notifationUsers) { NotificationUserDetailVO notificationUserDetailVO = new NotificationUserDetailVO(); BeanUtils.copyProperties(notifationUser, notificationUserDetailVO); SysUser sysUser = userMap.get(notifationUser.getUserId().longValue()); if (sysUser==null){ continue; } notificationUserDetailVO.setDeptName(deptMap.getOrDefault(Integer.parseInt(sysUser.getDeptId()), "")); notificationUserDetailVO.setNickName(sysUser.getNickName()); notificationUserDetailVO.setPhonenumber(sysUser.getPhonenumber()); notificationUserDetailVO.setPosition(sysUser.getPosition()); notificationUserDetailVOS.add(notificationUserDetailVO); } notificationDetailVO.setNotificationUserDetailVOS(notificationUserDetailVOS); return R.ok(); } }