From 36b7f863fda32d53b5cdadd6ee1514de4aea3905 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Fri, 02 Feb 2024 11:12:36 +0800
Subject: [PATCH] 系统消息,我的消息
---
src/main/java/org/springblade/modules/email/service/IEmailAccountService.java | 5
src/main/java/org/springblade/common/utils/NodeTreeUtil.java | 42 ++
src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java | 143 +++++++
src/main/java/org/springblade/modules/system/controller/DeptController.java | 15
src/main/java/org/springblade/modules/system/node/TreeNode.java | 48 ++
src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java | 36 +
src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.java | 44 ++
src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.xml | 106 +++++
src/main/java/org/springblade/modules/system/mapper/DeptMapper.java | 20
src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java | 135 ++++++
src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml | 43 ++
src/main/java/org/springblade/modules/system/wrapper/DeptWrapper.java | 1
src/main/java/org/springblade/modules/system/service/IDeptService.java | 4
src/main/java/org/springblade/modules/messageRecord/entity/MessageUser.java | 56 ++
src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java | 24 +
src/main/java/org/springblade/modules/system/mapper/UserMapper.xml | 7
src/main/java/org/springblade/modules/system/vo/DeptVO.java | 5
src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java | 45 ++
src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java | 14
src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java | 51 +
src/main/java/org/springblade/modules/messageRecord/service/IMessageUserService.java | 14
src/main/java/org/springblade/modules/messageRecord/service/impl/MessageUserServiceImpl.java | 52 ++
src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java | 25 +
src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml | 24 +
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java | 15
src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.java | 55 ++
src/main/java/org/springblade/modules/system/mapper/UserMapper.java | 2
src/main/java/org/springblade/modules/system/service/IUserService.java | 4
src/main/java/org/springblade/modules/messageRecord/controller/MessageUserController.java | 58 ++
src/main/java/org/springblade/modules/messageRecord/entity/MessageRecord.java | 65 +++
30 files changed, 1,138 insertions(+), 20 deletions(-)
diff --git a/src/main/java/org/springblade/common/utils/NodeTreeUtil.java b/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
index c867cf4..efc38be 100644
--- a/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
+++ b/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
@@ -6,8 +6,10 @@
import org.springblade.core.tool.node.TreeNode;
import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVOTree;
import org.springblade.modules.house.vo.HouseTree;
+import org.springblade.modules.system.node.DeptUserTreeNode;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -144,4 +146,44 @@
}
return parentList;
}
+
+ /**
+ * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表)
+ * @param treeMap
+ * @return
+ */
+ public static List<DeptUserTreeNode> getDeptAndUserNodeTree(Map<String, DeptUserTreeNode> treeMap){
+ List<DeptUserTreeNode> tree = new ArrayList<>();
+ if (treeMap.size() > 1) {
+ treeMap.forEach((id, treeNode) -> {
+ if (!treeNode.getHasChildren()){
+ // 判断是否有绑定多个部门
+ List<String> asList = Arrays.asList(treeNode.getParentId().split(","));
+ if (asList.size()>1){
+ for (String parentId : asList) {
+ if (treeMap.containsKey(parentId)) {
+ treeMap.get(parentId).getChildren().add(treeNode);
+ } else {
+ tree.add(treeNode);
+ }
+ }
+ }else {
+ if (treeMap.containsKey(treeNode.getParentId())) {
+ DeptUserTreeNode deptUserTreeNode =treeMap.get(treeNode.getParentId());
+ deptUserTreeNode.getChildren().add(treeNode);
+ } else {
+ tree.add(treeNode);
+ }
+ }
+ }else {
+ if (treeMap.containsKey(treeNode.getParentId())) {
+ treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
+ } else {
+ tree.add(treeNode);
+ }
+ }
+ });
+ }
+ return tree;
+ }
}
diff --git a/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java b/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java
index 5b39c58..536253a 100644
--- a/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java
+++ b/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java
@@ -1,9 +1,14 @@
package org.springblade.modules.email.service;
import org.springblade.modules.email.entity.EmailAccount;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+
+import java.util.List;
public interface IEmailAccountService {
/**用于注册成功后发送邮件 @param account 账号信息*/
void senderEmail(EmailAccount account);
+
+ void sendMessageUserEmail(String title, String content, List<MessageUser> messageUserList);
}
diff --git a/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java b/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
index 72b52b9..37b6db1 100644
--- a/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
+++ b/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
@@ -1,10 +1,12 @@
package org.springblade.modules.email.service.impl;
import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.utils.StringUtil;
import org.springblade.modules.email.config.MailProperties;
import org.springblade.modules.email.config.MailSenderConfig;
import org.springblade.modules.email.entity.EmailAccount;
import org.springblade.modules.email.service.IEmailAccountService;
+import org.springblade.modules.messageRecord.entity.MessageUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@@ -14,6 +16,8 @@
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
+import java.util.List;
+import java.util.stream.Collectors;
@Service
@Slf4j
@@ -29,27 +33,44 @@
@Override
public void senderEmail(EmailAccount account) {
- log.info(Thread.currentThread().getName());
- JavaMailSenderImpl javaMailSender = senderConfig.getSender();
- //一个复杂的邮件
- MimeMessage message = javaMailSender.createMimeMessage();
- try {
- //组装
- MimeMessageHelper helper = new MimeMessageHelper(message, true);
- //主题(标题)
- helper.setSubject(account.getSubject());
+ if (account.getEmails().size()>0){
+ log.info(Thread.currentThread().getName());
+ JavaMailSenderImpl javaMailSender = senderConfig.getSender();
+ //一个复杂的邮件
+ MimeMessage message = javaMailSender.createMimeMessage();
+ try {
+ //组装
+ MimeMessageHelper helper = new MimeMessageHelper(message, true);
- helper.setText(account.getContent(),true);
+ //主题(标题)
+ helper.setSubject(account.getSubject());
- helper.setTo(account.getEmails().toArray(new String[account.getEmails().size()]));
+ helper.setText(account.getContent(),true);
- helper.setFrom(javaMailSender.getUsername());
+ helper.setTo(account.getEmails().toArray(new String[account.getEmails().size()]));
- javaMailSender.send(message);
+ helper.setFrom(javaMailSender.getUsername());
- } catch (MessagingException e) {
- e.printStackTrace();
+ javaMailSender.send(message);
+
+ } catch (MessagingException e) {
+ e.printStackTrace();
+ }
}
}
+
+ @Override
+ public void sendMessageUserEmail(String title, String content, List<MessageUser> messageUserList) {
+
+ List<String> emails = messageUserList.stream().filter(e -> StringUtil.isNotBlank(e.getEmail())).map(MessageUser::getEmail).collect(Collectors.toList());
+
+ EmailAccount emailAccount = new EmailAccount();
+
+ emailAccount.setEmails(emails);
+ emailAccount.setSubject(title);
+ emailAccount.setContent(content);
+
+ senderEmail(emailAccount);
+ }
}
diff --git a/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java b/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java
new file mode 100644
index 0000000..2bc6c04
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
+import org.springblade.modules.messageRecord.service.IMessageRecordService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 消息记录表 控制器
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("messageRecord/messageRecord")
+@Api(value = "消息记录表", tags = "消息记录表接口")
+public class MessageRecordController extends BladeController {
+
+ private final IMessageRecordService messageRecordService;
+
+ /**
+ * 消息记录表 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @ApiOperation(value = "详情", notes = "传入messageRecord")
+ public R<MessageRecord> detail(MessageRecord messageRecord) {
+ MessageRecord detail = messageRecordService.getOne(Condition.getQueryWrapper(messageRecord));
+ return R.data(detail);
+ }
+ /**
+ * 消息记录表 分页
+ */
+ @GetMapping("/list")
+ @ApiOperationSupport(order = 2)
+ @ApiOperation(value = "分页", notes = "传入messageRecord")
+ public R<IPage<MessageRecord>> list(MessageRecord messageRecord, Query query) {
+ IPage<MessageRecord> pages = messageRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(messageRecord));
+ return R.data(pages);
+ }
+
+ /**
+ * 消息记录表 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @ApiOperation(value = "分页", notes = "传入messageRecord")
+ public R<IPage<MessageRecordVO>> page(MessageRecordVO messageRecord, Query query) {
+ IPage<MessageRecordVO> pages = messageRecordService.selectMessageRecordPage(Condition.getPage(query), messageRecord);
+ return R.data(pages);
+ }
+
+ /**
+ * 消息记录表 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @ApiOperation(value = "新增", notes = "传入messageRecord")
+ public R save(@Valid @RequestBody MessageRecordVO messageRecord) {
+ return R.status(messageRecordService.save(messageRecord));
+ }
+
+ /**
+ * 消息记录表 自定义新增
+ */
+ @PostMapping("/customizeSave")
+ @ApiOperationSupport(order = 4)
+ @ApiOperation(value = "新增", notes = "传入messageRecord")
+ public R customizeSave(@Valid @RequestBody MessageRecordVO messageRecord) {
+ return R.status(messageRecordService.customizeSave(messageRecord));
+ }
+
+ /**
+ * 消息记录表 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @ApiOperation(value = "修改", notes = "传入messageRecord")
+ public R update(@Valid @RequestBody MessageRecord messageRecord) {
+ return R.status(messageRecordService.updateById(messageRecord));
+ }
+
+ /**
+ * 消息记录表 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @ApiOperation(value = "新增或修改", notes = "传入messageRecord")
+ public R submit(@Valid @RequestBody MessageRecord messageRecord) {
+ return R.status(messageRecordService.saveOrUpdate(messageRecord));
+ }
+
+ /**
+ * 消息记录表 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @ApiOperation(value = "逻辑删除", notes = "传入ids")
+ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(messageRecordService.deleteLogic(Func.toLongList(ids)));
+ }
+
+ /**
+ * 发送消息
+ */
+ @PostMapping("/sendMessage")
+ @ApiOperationSupport(order = 7)
+ @ApiOperation(value = "逻辑删除", notes = "传入ids")
+ public R sendMessage(@RequestParam String id) {
+ return R.status(messageRecordService.sendMessage(id));
+ }
+
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/controller/MessageUserController.java b/src/main/java/org/springblade/modules/messageRecord/controller/MessageUserController.java
new file mode 100644
index 0000000..a5b174c
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/controller/MessageUserController.java
@@ -0,0 +1,58 @@
+package org.springblade.modules.messageRecord.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.service.IMessageUserService;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
+import org.springblade.modules.messageRecord.vo.MessageUserVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("messageUser/messageUser")
+public class MessageUserController extends BladeController {
+
+ private final IMessageUserService messageUserService;
+
+ @GetMapping("/getPage")
+ public R<IPage<MessageUserVO>> page(MessageUserVO messageUserVO, Query query) {
+ IPage<MessageUserVO> pages = messageUserService.getPage(Condition.getPage(query), messageUserVO);
+ return R.data(pages);
+ }
+
+ /**
+ * 消息记录表 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @ApiOperation(value = "修改", notes = "传入messageRecord")
+ public R update(@Valid @RequestBody MessageUser messageUser) {
+ return R.status(messageUserService.updateById(messageUser));
+ }
+
+ @PostMapping("updateIsReadStatus")
+ public R updateIsReadStatus(String ids,String isRead){
+ Boolean res = messageUserService.updateIsReadStatus(ids,isRead);
+ return R.status(res);
+ }
+
+ @GetMapping("/getMessage")
+ public R<IPage<MessageUserVO>> getMessage(MessageUserVO messageUserVO, Query query) {
+ IPage<MessageUserVO> pages = messageUserService.getMessagePage(Condition.getPage(query), messageUserVO);
+ return R.data(pages);
+ }
+
+
+
+
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/entity/MessageRecord.java b/src/main/java/org/springblade/modules/messageRecord/entity/MessageRecord.java
new file mode 100644
index 0000000..a582a14
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/entity/MessageRecord.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+import java.io.Serializable;
+
+/**
+ * 消息记录表 实体类
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+@Data
+@TableName("blade_message_record")
+@ApiModel(value = "MessageRecord对象", description = "消息记录表")
+public class MessageRecord extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ //接收对象
+ private String receiver;
+
+ /**
+ * 消息发送类型(1、站内信;2、邮件;3、短信)
+ */
+ @ApiModelProperty(value = "消息发送类型(1、站内信;2、邮件;3、短信)")
+ private String type;
+ /**
+ * 消息来源(1、系统消息;2、用户消息)
+ */
+ @ApiModelProperty(value = "消息来源(1、系统消息;2、用户消息)")
+ private String messageResource;
+ /**
+ * 标题
+ */
+ @ApiModelProperty(value = "标题")
+ private String title;
+ /**
+ * 内容
+ */
+ @ApiModelProperty(value = "内容")
+ private String content;
+
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/entity/MessageUser.java b/src/main/java/org/springblade/modules/messageRecord/entity/MessageUser.java
new file mode 100644
index 0000000..2dbac16
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/entity/MessageUser.java
@@ -0,0 +1,56 @@
+package org.springblade.modules.messageRecord.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 用户消息表
+ */
+@Data
+@TableName("blade_message_user")
+public class MessageUser implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 用户ID
+ */
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 消息ID
+ */
+ private String messageRecordId;
+
+ //用户id
+ private String userId;
+
+ //消息类型
+ private String type;
+
+ //邮箱
+ private String email;
+ //手机号
+ private String phone;
+
+ //是否已读(1、已读;2、未读)
+ private String isRead;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("创建时间")
+ private Date createTime;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("更新时间")
+ private Date updateTime;
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.java b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.java
new file mode 100644
index 0000000..7a3da57
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 消息记录表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+public interface MessageRecordMapper extends BaseMapper<MessageRecord> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param messageRecord
+ * @return
+ */
+ List<MessageRecordVO> selectMessageRecordPage(IPage page,@Param("vo") MessageRecordVO messageRecord);
+
+
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml
new file mode 100644
index 0000000..7d3242d
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.messageRecord.mapper.MessageRecordMapper">
+
+
+ <select id="selectMessageRecordPage" resultType="org.springblade.modules.messageRecord.vo.MessageRecordVO">
+ select bmr.* from blade_message_record bmr
+ where bmr.is_deleted = 0
+ <if test="vo.type != null and vo.type !=''">
+ and bmr.type LIKE CONCAT('%',#{vo.type},'%')
+ </if>
+ <if test="vo.startTime!=null and vo.startTime!=''">
+ and bmr.create_time>=#{vo.startTime}
+ </if>
+ <if test="vo.endTime!=null and vo.endTime!=''">
+ and bmr.create_time<=#{vo.endTime}
+ </if>
+ <if test="vo.title != null and vo.title != ''">
+ and bmr.title LIKE CONCAT('%',#{vo.title},'%')
+ </if>
+ </select>
+
+
+</mapper>
diff --git a/src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.java b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.java
new file mode 100644
index 0000000..b1381b4
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
+import org.springblade.modules.messageRecord.vo.MessageUserVO;
+
+import java.util.List;
+
+/**
+ * 消息记录表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+public interface MessageUserMapper extends BaseMapper<MessageUser> {
+
+
+ List<MessageUserVO> getPage(IPage<MessageUserVO> page, @Param("vo") MessageUserVO messageUserVO);
+
+ /**
+ * 我发送的消息
+ * @param page
+ * @param messageUserVO
+ * @return
+ */
+ List<MessageUserVO> getMySendMessage(IPage<MessageUserVO> page, @Param("vo") MessageUserVO messageUserVO);
+
+ /**
+ * 我收到的消息
+ * @param page
+ * @param messageUserVO
+ * @return
+ */
+ List<MessageUserVO> getMyReceiveMessage(IPage<MessageUserVO> page, @Param("vo") MessageUserVO messageUserVO);
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.xml b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.xml
new file mode 100644
index 0000000..6cf5861
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageUserMapper.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.messageRecord.mapper.MessageUserMapper">
+
+
+ <select id="getPage" resultType="org.springblade.modules.messageRecord.vo.MessageUserVO">
+
+ SELECT
+ bmu.*,
+ bmr.title,bmr.content,bmr.create_time as sendTime,bmr.create_user as sendUserId,
+ bu.real_name as sendUserName,
+ bu1.real_name as receiveUserName
+ FROM blade_message_user bmu
+ LEFT JOIN blade_message_record bmr ON bmr.id = bmu.message_record_id
+ LEFT JOIN blade_user bu ON bu.id = bmr.create_user
+ LEFT JOIN blade_user bu1 ON bu1.id = bmu.user_id
+ where 1=1
+ <if test="vo.userId != null and vo.userId !=''">
+ and bmu.user_id = #{vo.userId}
+ </if>
+ <if test="vo.type != null and vo.type !=''">
+ AND bmu.type LIKE CONCAT('%',#{vo.type},'%')
+ </if>
+ <if test="vo.sendUserId != null and vo.sendUserId !=''">
+ AND bmr.create_user = #{vo.sendUserId}
+ </if>
+ ORDER BY bmu.create_time DESC
+ </select>
+
+
+ <select id="getMySendMessage" resultType="org.springblade.modules.messageRecord.vo.MessageUserVO">
+ SELECT
+ bmu.*,
+ bmr.title,bmr.content,bmr.create_time as time,
+ bu.real_name as userName,
+ bd.dept_name as deptName,
+ bd.id as deptId
+ FROM blade_message_user bmu
+ LEFT JOIN blade_message_record bmr ON bmr.id = bmu.message_record_id
+ LEFT JOIN blade_user bu ON bu.id = bmu.user_id
+ LEFT JOIN blade_dept bd ON bu.dept_id = bd.id
+ where 1=1
+ <if test="vo.userId != null and vo.userId !=''">
+ and bmr.create_user = #{vo.userId}
+ </if>
+ <if test="vo.type != null and vo.type !=''">
+ AND bmu.type LIKE CONCAT('%',#{vo.type},'%')
+ </if>
+
+ <if test="vo.title != null and vo.title !='' ">
+ and bmr.title LIKE CONCAT('%',#{vo.title},'%')
+ </if>
+ <if test="vo.startTime!=null and vo.startTime!=''">
+ AND date_format(bmr.create_time,'%Y-%m-%d')>= #{vo.startTime}
+ </if>
+ <if test="vo.endTime!=null and vo.endTime!=''">
+ AND date_format(bmr.create_time,'%Y-%m-%d')<= #{vo.endTime}
+ </if>
+
+ ORDER BY bmu.create_time DESC
+ </select>
+ <select id="getMyReceiveMessage" resultType="org.springblade.modules.messageRecord.vo.MessageUserVO">
+ SELECT
+ bmu.id,
+ bmu.message_record_id,
+ bmu.is_read,
+ bmu.type,
+ bmu.email,
+ bmu.phone,
+ bmu.create_time,
+ bmu.update_time,
+ bmr.title,
+ bmr.content,
+ bmr.create_time as time,
+ bmr.create_user as userId,
+ bu.real_name as userName,
+ bd.dept_name as deptName,
+ bd.id as deptId
+ FROM blade_message_user bmu
+ LEFT JOIN blade_message_record bmr ON bmr.id = bmu.message_record_id
+ LEFT JOIN blade_user bu ON bu.id = bmr.create_user
+ LEFT JOIN blade_dept bd ON bu.dept_id = bd.id
+ where 1=1
+ <if test="vo.userId != null and vo.userId !=''">
+ and bmu.user_id = #{vo.userId}
+ </if>
+ <if test="vo.type != null and vo.type !=''">
+ AND bmu.type LIKE CONCAT('%',#{vo.type},'%')
+ </if>
+ <if test="vo.title != null and vo.title !='' ">
+ and bmr.title LIKE CONCAT('%',#{vo.title},'%')
+ </if>
+
+ <if test="vo.startTime!=null and vo.startTime!=''">
+ AND date_format(bmr.create_time,'%Y-%m-%d')>= #{vo.startTime}
+ </if>
+ <if test="vo.endTime!=null and vo.endTime!=''">
+ AND date_format(bmr.create_time,'%Y-%m-%d')<= #{vo.endTime}
+ </if>
+ <if test="vo.isRead != null and vo.isRead !=''">
+ AND is_read = #{vo.isRead}
+ </if>
+
+ ORDER BY bmu.create_time DESC
+ </select>
+</mapper>
diff --git a/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java b/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java
new file mode 100644
index 0000000..562c558
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.service;
+
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 消息记录表 服务类
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+public interface IMessageRecordService extends BaseService<MessageRecord> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param messageRecord
+ * @return
+ */
+ IPage<MessageRecordVO> selectMessageRecordPage(IPage<MessageRecordVO> page, MessageRecordVO messageRecord);
+
+
+ Boolean customizeSave(MessageRecordVO messageRecord);
+
+ Boolean sendMessage(String id);
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/service/IMessageUserService.java b/src/main/java/org/springblade/modules/messageRecord/service/IMessageUserService.java
new file mode 100644
index 0000000..0f48f16
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/service/IMessageUserService.java
@@ -0,0 +1,14 @@
+package org.springblade.modules.messageRecord.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.vo.MessageUserVO;
+
+public interface IMessageUserService extends IService<MessageUser> {
+ IPage<MessageUserVO> getPage(IPage<MessageUserVO> page, MessageUserVO messageUserVO);
+
+ Boolean updateIsReadStatus(String ids, String isRead);
+
+ IPage<MessageUserVO> getMessagePage(IPage<MessageUserVO> page, MessageUserVO messageUserVO);
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java b/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java
new file mode 100644
index 0000000..5badb91
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.modules.email.service.IEmailAccountService;
+import org.springblade.modules.email.service.IEmailService;
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.service.IMessageUserService;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
+import org.springblade.modules.messageRecord.mapper.MessageRecordMapper;
+import org.springblade.modules.messageRecord.service.IMessageRecordService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.service.IUserService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 消息记录表 服务实现类
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+@Service
+@AllArgsConstructor
+public class MessageRecordServiceImpl extends BaseServiceImpl<MessageRecordMapper, MessageRecord> implements IMessageRecordService {
+
+ private final IMessageUserService messageUserService;
+ private final IUserService userService;
+ private final IEmailAccountService emailAccountService;
+
+ @Override
+ public IPage<MessageRecordVO> selectMessageRecordPage(IPage<MessageRecordVO> page, MessageRecordVO messageRecord) {
+ return page.setRecords(baseMapper.selectMessageRecordPage(page, messageRecord));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean customizeSave(MessageRecordVO messageRecord) {
+
+ List<User> userList = new ArrayList();
+
+ if (messageRecord.getMessageResource().equals("1")) {
+ //系统消息(receiveUser指定的是部门,所以要通过部门去查人)
+ userList = userService.getUserListByDeptIds(messageRecord.getReceiver());
+ } else if (messageRecord.getMessageResource().equals("2")) {
+ //用户消息(receiveUser指定的是人)
+ userList = userService.getUserListByIds(messageRecord.getReceiver());
+ }
+
+ //保存消息记录
+ boolean saveRecord = save(messageRecord);
+
+ List<MessageUser> messageUserList = new ArrayList<>();
+ userList.forEach(user -> {
+ MessageUser messageUser = new MessageUser();
+
+ messageUser.setUserId(user.getId().toString());
+ messageUser.setMessageRecordId(messageRecord.getId().toString());
+ messageUser.setType(messageRecord.getType());
+ messageUser.setCreateTime(DateUtil.now());
+ messageUser.setUpdateTime(DateUtil.now());
+
+ if (messageRecord.getType().indexOf("2") > -1) {
+ messageUser.setEmail(user.getEmail());
+ }
+
+ if (messageRecord.getType().indexOf("3") > -1) {
+ messageUser.setPhone(user.getPhone());
+ }
+
+ messageUserList.add(messageUser);
+ });
+ //在message_user表里存数据
+ boolean saveBatch = messageUserService.saveBatch(messageUserList);
+
+ if (saveBatch&&saveRecord){
+ if (messageRecord.getType().indexOf("2") > -1) {
+ emailAccountService.sendMessageUserEmail(messageRecord.getTitle(), messageRecord.getContent(), messageUserList);
+ return true;
+ }
+
+ if (messageRecord.getType().indexOf("3") > -1) {
+ return true;
+ }
+ }
+ return saveBatch && saveRecord;
+ }
+
+ @Override
+ public Boolean sendMessage(String id) {
+
+ //查询MessageRecord表里的数据
+ MessageRecord messageRecord = getById(id);
+
+ //查询MessageUser表里的数据
+ List<MessageUser> messageUserList = messageUserService.list(new QueryWrapper<MessageUser>().eq("message_record_id", id));
+
+ if (messageRecord.getType().indexOf("2") > -1) {
+ emailAccountService.sendMessageUserEmail(messageRecord.getTitle(), messageRecord.getContent(), messageUserList);
+ return true;
+ }
+
+ if (messageRecord.getType().indexOf("3") > -1) {
+ return true;
+ }
+
+ return true;
+ }
+
+
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageUserServiceImpl.java b/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageUserServiceImpl.java
new file mode 100644
index 0000000..87e87ca
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageUserServiceImpl.java
@@ -0,0 +1,52 @@
+package org.springblade.modules.messageRecord.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.mapper.MessageUserMapper;
+import org.springblade.modules.messageRecord.service.IMessageUserService;
+import org.springblade.modules.messageRecord.vo.MessageUserVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Service
+public class MessageUserServiceImpl extends ServiceImpl<MessageUserMapper, MessageUser> implements IMessageUserService {
+ @Override
+ public IPage<MessageUserVO> getPage(IPage<MessageUserVO> page, MessageUserVO messageUserVO) {
+ return page.setRecords(baseMapper.getPage(page, messageUserVO));
+ }
+
+ @Override
+ public Boolean updateIsReadStatus(String ids, String isRead) {
+
+ List<MessageUser> messageUserList = baseMapper.selectBatchIds(Arrays.asList(ids));
+
+ messageUserList.forEach(messageUser ->{
+ messageUser.setUpdateTime(DateUtil.now());
+ messageUser.setIsRead(isRead);
+ });
+
+ boolean b = updateBatchById(messageUserList);
+ return b;
+ }
+
+ @Override
+ public IPage<MessageUserVO> getMessagePage(IPage<MessageUserVO> page, MessageUserVO messageUserVO) {
+ List<MessageUserVO> list = new ArrayList<>();
+
+ if (messageUserVO.getMessageType().equals("send")){
+ //我发送的
+ list = baseMapper.getMySendMessage(page,messageUserVO);
+
+ }else if (messageUserVO.getMessageType().equals("receive")){
+ //我收到的
+ list = baseMapper.getMyReceiveMessage(page,messageUserVO);
+ }
+ page.setRecords(list);
+ return page;
+ }
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java b/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
new file mode 100644
index 0000000..b0d7821
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.messageRecord.vo;
+
+import org.springblade.modules.messageRecord.entity.MessageRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 消息记录表 视图实体类
+ *
+ * @author BladeX
+ * @since 2024-01-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MessageRecordVO extends MessageRecord {
+ private static final long serialVersionUID = 1L;
+
+ private String startTime;
+ private String endTime;
+}
diff --git a/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java b/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java
new file mode 100644
index 0000000..ba7b0e8
--- /dev/null
+++ b/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java
@@ -0,0 +1,25 @@
+package org.springblade.modules.messageRecord.vo;
+
+import lombok.Data;
+import org.springblade.modules.messageRecord.entity.MessageUser;
+
+@Data
+public class MessageUserVO extends MessageUser {
+
+ private String title;
+
+ private String content;
+
+ private String messageType;
+
+ //取的是记录表里的创建时间
+ private String time;
+
+ private String userName;
+ private String deptId;
+ private String deptName;
+
+ private String startTime;
+ private String endTime;
+
+}
diff --git a/src/main/java/org/springblade/modules/system/controller/DeptController.java b/src/main/java/org/springblade/modules/system/controller/DeptController.java
index 11d2adb..e9335f6 100644
--- a/src/main/java/org/springblade/modules/system/controller/DeptController.java
+++ b/src/main/java/org/springblade/modules/system/controller/DeptController.java
@@ -39,6 +39,7 @@
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.system.entity.Dept;
import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.node.DeptUserTreeNode;
import org.springblade.modules.system.service.IDeptService;
import org.springblade.modules.system.vo.DeptVO;
import org.springblade.modules.system.wrapper.DeptWrapper;
@@ -216,6 +217,20 @@
}
+ /**
+ * 查询组织机构树数据(下级包含人员信息)(数据量太大,不建议使用)
+ * @param treeNode
+ * @return
+ */
+ @GetMapping("/getDeptAndUserTree")
+ @ApiOperation(value = "查询组织机构树数据(下级包含人员信息)")
+ public R getDeptAndUserTree(DeptUserTreeNode treeNode) {
+ return R.data(deptService.getDeptAndUserTree(treeNode));
+ }
+
+
+
+
}
diff --git a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
index 44d4327..dde1c82 100644
--- a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
@@ -17,8 +17,10 @@
package org.springblade.modules.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.springblade.modules.system.entity.Dept;
+import org.springblade.modules.system.node.DeptUserTreeNode;
import org.springblade.modules.system.vo.DeptVO;
import java.util.List;
@@ -72,7 +74,23 @@
* @param id
* @return
*/
- DeptVO getDeptById(@Param("id") Long id);
+ DeptVO getDeptById(@Param("id") Long id);
+
+ /**
+ * 查询组织机构树
+ * @param treeNode
+ * @return
+ */
+ @MapKey(value = "id")
+ Map<String, DeptUserTreeNode> getDeptMap(@Param("treeNode") DeptUserTreeNode treeNode);
+
+ /**
+ * 查询用户树
+ * @param treeNode
+ * @return
+ */
+ @MapKey(value = "id")
+ Map<String, DeptUserTreeNode> getUserMap(@Param("treeNode") DeptUserTreeNode treeNode);
/**
* 查询网格对应的机构信息(包含父级机构名称)
diff --git a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
index 64aca67..cc0951e 100644
--- a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
@@ -63,6 +63,9 @@
<if test="param3.fullName!=null and param3.fullName!=''">
and dept.full_name like concat(concat('%', #{param3.fullName}),'%')
</if>
+ <if test="param3.showWg != null and param3.showWg != ''">
+ and dept.dept_name not LIKE '第%网格'
+ </if>
ORDER BY dept.sort
</select>
@@ -144,6 +147,46 @@
and c.id = #{id}
</select>
+
+ <select id="getDeptMap" resultType="org.springblade.modules.system.node.DeptUserTreeNode">
+ SELECT
+ cast(dept.id as char) as id,
+ dept.parent_id parentId,
+ dept.dept_name AS name,
+ 1 as isMan,
+ 0 AS phone,
+ (
+ SELECT
+ CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+ FROM
+ blade_dept
+ WHERE
+ parent_id = dept.id and is_deleted = 0
+ ) AS hasChildren
+ FROM
+ blade_dept dept WHERE dept.is_deleted = 0
+ <if test="treeNode.id!=null and treeNode.id!=''">
+ and dept.id = #{treeNode.id}
+ </if>
+ </select>
+
+ <!--查询组织机构树数据(下级包含人员信息)(排除组织机构对应不上的人员)-->
+ <select id="getUserMap" resultType="org.springblade.modules.system.node.DeptUserTreeNode">
+ select
+ bu.id,
+ bu.dept_id parentId,
+ bu.real_name AS name,
+ bu.phone,
+ bu.email,
+ 2 as isMan,
+ 0 as hasChildren
+ from blade_user bu join blade_dept bd on find_in_set(bu.dept_id,bd.id)
+ where 1=1 and bu.is_deleted = 0 and bu.status = 1
+ <if test="treeNode.id!=null and treeNode.id!=''">
+ and bu.dept_id like concat(concat('%',#{treeNode.id}),'%')
+ </if>
+ </select>
+
<!--查询网格对应的机构信息(包含父级机构名称)-->
<select id="getGridDeptAndParentList" resultType="org.springblade.modules.system.vo.DeptVO">
select bd.*,bd1.dept_name as parentName from blade_dept bd
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
index 0cf22fd..e9b34b7 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -106,5 +106,7 @@
*/
List<User> getNotBindUserDept();
+ List<User> getUserListByDeptIds(@Param("deptIds") String receiveDept);
+
List<User> getUserInfoByPropertyId(String deptId,String roleId);
}
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
index 34c2e5e..a3e9195 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -201,6 +201,13 @@
where bu.is_deleted = 0 and bud.id is null
and bu.dept_id!=''
</select>
+ <select id="getUserListByDeptIds" resultType="org.springblade.modules.system.entity.User">
+ SELECT * FROM blade_user bu where is_deleted = 0
+ and dept_id in
+ <foreach collection="deptIds.split(',')" item="item" open="(" close=")" separator=",">
+ #{item}
+ </foreach>
+ </select>
<select id="getUserInfoByPropertyId" resultType="org.springblade.modules.system.entity.User"
parameterType="java.lang.String">
diff --git a/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java b/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java
new file mode 100644
index 0000000..95e4d44
--- /dev/null
+++ b/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java
@@ -0,0 +1,24 @@
+package org.springblade.modules.system.node;
+
+import lombok.Data;
+
+/**
+ * 部门用户树node
+ * @author zhongrj
+ * @date 2023-04-23
+ */
+@Data
+public class DeptUserTreeNode extends TreeNode {
+
+ /**
+ * 手机号
+ */
+ private String phone;
+
+ private String email;
+
+ /**
+ * 是人还是部门 1:部门 2:人
+ */
+ private String isMan;
+}
diff --git a/src/main/java/org/springblade/modules/system/node/TreeNode.java b/src/main/java/org/springblade/modules/system/node/TreeNode.java
new file mode 100644
index 0000000..af8ffeb
--- /dev/null
+++ b/src/main/java/org/springblade/modules/system/node/TreeNode.java
@@ -0,0 +1,48 @@
+package org.springblade.modules.system.node;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 树节点
+ * @author zhongrj
+ * @date 2023-03-30
+ */
+@Data
+public class TreeNode implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ private String id;
+
+ /**
+ * 父id
+ */
+ private String parentId;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 层级
+ */
+ private String level;
+
+ /**
+ * 子孙节点
+ */
+ private List<TreeNode> children = new ArrayList<>();
+
+ /**
+ * 是否有子孙节点
+ */
+ private Boolean hasChildren;
+}
diff --git a/src/main/java/org/springblade/modules/system/service/IDeptService.java b/src/main/java/org/springblade/modules/system/service/IDeptService.java
index 8ba6bac..4872d74 100644
--- a/src/main/java/org/springblade/modules/system/service/IDeptService.java
+++ b/src/main/java/org/springblade/modules/system/service/IDeptService.java
@@ -18,6 +18,8 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.system.entity.Dept;
+import org.springblade.modules.system.node.DeptUserTreeNode;
+import org.springblade.modules.system.node.TreeNode;
import org.springblade.modules.system.vo.DeptVO;
import java.util.List;
@@ -137,4 +139,6 @@
* 数据处理(社区绑定)-- 处理社区
*/
Object dataHandleCommunity();
+
+ List<DeptUserTreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode);
}
diff --git a/src/main/java/org/springblade/modules/system/service/IUserService.java b/src/main/java/org/springblade/modules/system/service/IUserService.java
index 60521eb..7cb0f24 100644
--- a/src/main/java/org/springblade/modules/system/service/IUserService.java
+++ b/src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -254,6 +254,10 @@
*/
Object handleUserDept();
+ List<User> getUserListByIds(String receiveUser);
+
+ List<User> getUserListByDeptIds(String receiveDept);
+
List<User> getUserInfoByPropertyId(String propertyCompanyId,String roleId);
Object handleUser();
diff --git a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
index cd269ee..90bdf3c 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
@@ -23,6 +23,7 @@
import org.springblade.common.cache.SysCache;
import org.springblade.common.node.TreeStringNode;
import org.springblade.common.utils.SpringUtils;
+import org.springblade.common.utils.NodeTreeUtil;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.constant.BladeConstant;
@@ -40,6 +41,8 @@
import org.springblade.modules.system.entity.Dept;
import org.springblade.modules.system.entity.Region;
import org.springblade.modules.system.mapper.DeptMapper;
+import org.springblade.modules.system.node.DeptUserTreeNode;
+import org.springblade.modules.system.node.TreeNode;
import org.springblade.modules.system.service.IDeptService;
import org.springblade.modules.system.service.IRegionService;
import org.springblade.modules.system.vo.DeptDetailVO;
@@ -399,4 +402,15 @@
}
return null;
}
+
+ @Override
+ public List<DeptUserTreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) {
+ // 查询数据
+ Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
+ Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode);
+ deptMap.putAll(userMap);
+ List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
+ // 处理并返回
+ return deptAndUserNodeTree;
+ }
}
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index 6fa8188..7aa2e2a 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -62,10 +62,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
@@ -634,4 +631,14 @@
}
}
}
+
+ @Override
+ public List<User> getUserListByIds(String receiveUser) {
+ return baseMapper.selectBatchIds(Arrays.asList(receiveUser.split(",")));
+ }
+
+ @Override
+ public List<User> getUserListByDeptIds(String receiveDept) {
+ return baseMapper.getUserListByDeptIds(receiveDept);
+ }
}
diff --git a/src/main/java/org/springblade/modules/system/vo/DeptVO.java b/src/main/java/org/springblade/modules/system/vo/DeptVO.java
index 59c10d1..3a5cccc 100644
--- a/src/main/java/org/springblade/modules/system/vo/DeptVO.java
+++ b/src/main/java/org/springblade/modules/system/vo/DeptVO.java
@@ -86,4 +86,9 @@
private Boolean disabled;
+ /**
+ * 保持树型结构统一
+ */
+ private String name;
+
}
diff --git a/src/main/java/org/springblade/modules/system/wrapper/DeptWrapper.java b/src/main/java/org/springblade/modules/system/wrapper/DeptWrapper.java
index ce8a7e0..970e653 100644
--- a/src/main/java/org/springblade/modules/system/wrapper/DeptWrapper.java
+++ b/src/main/java/org/springblade/modules/system/wrapper/DeptWrapper.java
@@ -70,6 +70,7 @@
List<DeptVO> collect = list.stream().peek(dept -> {
String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
Objects.requireNonNull(dept).setDeptCategoryName(category);
+ Objects.requireNonNull(dept).setName(dept.getDeptName());
}).collect(Collectors.toList());
return ForestNodeMerger.merge(collect);
}
--
Gitblit v1.9.3