| | |
| | | package com.ruoyi.web.controller.api; |
| | | |
| | | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | 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; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | * @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<PageInfo<NotificationVO>> 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<String> notificationIds = Arrays.asList(ids.split(",")); |
| | | // 删除后 将已发送的消息通知一并删除 |
| | | oaNotificationService.removeBatchByIds(notificationIds); |
| | | oaNotifationUserService.remove(new LambdaQueryWrapper<OaNotifationUser>() |
| | | .in(OaNotifationUser::getNotificationId,notificationIds)); |
| | | return R.ok(); |
| | | } |
| | | @Log(title = "消息通知-新增消息", businessType = BusinessType.INSERT) |
| | | @ApiOperation(value = "新增消息") |
| | | @PostMapping(value = "/add") |
| | | public R<Boolean> add( @RequestBody OaNotification dto) { |
| | | oaNotificationService.save(dto); |
| | | ArrayList<OaNotifationUser> 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<SysUser> 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<NotificationDetailVO> detail(String id) { |
| | | NotificationDetailVO notificationDetailVO = new NotificationDetailVO(); |
| | | OaNotification oaNotification = oaNotificationService.getById(id); |
| | | BeanUtils.copyProperties(oaNotification, notificationDetailVO); |
| | | StringBuilder deptName = new StringBuilder(); |
| | | List<TDept> tDepts = deptService.list(); |
| | | List<SysUser> sysUsers = sysUserService.selectAllList(); |
| | | List<OaNotifationUser> notifationUsers = oaNotifationUserService.lambdaQuery().eq(OaNotifationUser::getNotificationId, id) |
| | | .list(); |
| | | Map<Integer, String> deptMap = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); |
| | | Map<Long, SysUser> 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<NotificationDeptUserDetailVO> notificationUserVOS = new ArrayList<>(); |
| | | List<Long> userIds = notifationUsers.stream().map(e -> e.getUserId().longValue()).collect(Collectors.toList()); |
| | | if (!userIds.isEmpty()){ |
| | | Map<String, List<SysUser>> deptUserList = sysUsers.stream().filter(e -> userIds.contains(e.getUserId())) |
| | | .collect(Collectors.groupingBy(SysUser::getDeptId)); |
| | | // 遍历这个map |
| | | for (Map.Entry<String, List<SysUser>> entry : deptUserList.entrySet()) { |
| | | List<SysUser> 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<NotificationUserDetailVO> 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(); |
| | | } |
| | | } |
| | | |