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.framework.web.service.TokenService;
import com.ruoyi.system.model.OaNotification;
import com.ruoyi.system.model.OaNotificationUser;
import com.ruoyi.system.query.NotificationListQuery;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.OaNotifationUserService;
import com.ruoyi.system.service.OaNotificationService;
import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.system.NotificationDeptUserDetailVO;
import com.ruoyi.system.vo.system.NotificationDetailVO;
import com.ruoyi.system.vo.system.NotificationUserDetailVO;
import com.ruoyi.system.vo.system.NotificationVO;
import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.parser.Token;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
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
@RequestMapping("/oa-notifation-user")
public class OaNotifationUserController {
@Resource
private OaNotificationService oaNotificationService;
@Resource
private OaNotifationUserService oaNotifationUserService;
@Resource
private TDeptService deptService;
@Resource
private ISysUserService sysUserService;
@Resource
private TokenService tokenService;
/**
* 获取部门树列表
*/
@ApiOperation("消息通知分页列表")
@PostMapping("/pageList")
public R> pageListUser(@RequestBody NotificationListQuery query) {
Long userId = tokenService.getLoginUser().getUserId();
query.setUserId(userId);
return R.ok(oaNotificationService.pageListUser(query));
}
@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(OaNotificationUser::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(",");
// }
// if (deptName.length() > 0){
// notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1));
// }else {
// notificationDetailVO.setDeptName("");
// }
// 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 (OaNotificationUser 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(notificationDetailVO);
}
}