From b82f8f6f82f0d9348997abb77e5d72deac078fa2 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Sun, 23 Apr 2023 15:40:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.java            |   12 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.xml             |    5 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/ISmsRecordService.java         |    7 
 skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java           |    7 
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java             |   27 +++
 skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java                                |   41 +++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java                     |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/vo/SmsRecordVO.java                    |   12 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsRecordController.java    |   98 ++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsRecordServiceImpl.java |   14 +
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java          |    8 +
 skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java                             |   17 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/entity/SmsRecord.java                  |   44 +++++
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java     |   15 +
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java  |   17 ++
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml              |   75 +++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java          |   41 ++++
 17 files changed, 434 insertions(+), 8 deletions(-)

diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java
new file mode 100644
index 0000000..b5bea1e
--- /dev/null
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java
@@ -0,0 +1,17 @@
+package cn.gistack.common.node;
+
+import lombok.Data;
+
+/**
+ * 部门用户树node
+ * @author zhongrj
+ * @date 2023-04-23
+ */
+@Data
+public class DeptUserTreeNode extends TreeNode{
+
+	/**
+	 * 手机号
+	 */
+	private String phone;
+}
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java
index 082799b..ca9864a 100644
--- a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java
@@ -1,7 +1,9 @@
 package cn.gistack.common.utils;
 
+import cn.gistack.common.node.DeptUserTreeNode;
 import cn.gistack.common.node.TreeNode;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -32,6 +34,45 @@
 	}
 
 	/**
+	 * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表)
+	 * @param treeMap
+	 * @return
+	 */
+	public  static List<TreeNode> getDeptAndUserNodeTree(Map<String, DeptUserTreeNode> treeMap){
+		List<TreeNode> 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())) {
+							treeMap.get(treeNode.getParentId()).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;
+	}
+
+	/**
 	 * list 转 tree 组织机构
 	 * @param parentList
 	 * @param childrenList
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java
index 9c694b9..849d203 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java
@@ -16,10 +16,8 @@
  */
 package cn.gistack.system.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
@@ -109,6 +107,7 @@
 	 * 组件路径
 	 */
 	@ApiModelProperty(value = "组件路径")
+	@TableField(value = "COMPONENT_PATH",updateStrategy = FieldStrategy.IGNORED)
 	private String componentPath;
 
 	/**
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
index 781717b..9a8347b 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -2,6 +2,8 @@
 
 import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
 import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
+import cn.gistack.sm.sms.entity.SmsRecord;
+import cn.gistack.sm.sms.service.ISmsRecordService;
 import cn.gistack.sm.sms.util.SmsUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -19,9 +21,42 @@
 @AllArgsConstructor
 public class SmsController {
 
-	@GetMapping("/test")
-	public R test(SMSSendRequest request){
-		return R.data(SmsUtils.sendMsg(request));
+	private final ISmsRecordService smsRecordService;
+
+	/**
+	 * 发送登录验证码
+	 * request 必须包含手机号(多个手机号以英文逗号分隔)
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/sendCode")
+	public R test(@RequestBody SMSSendRequest request){
+		//设置模板相关信息
+		String templateId = "2431012205498";
+		String content = "您的登录验证码是" + SmsUtils.getRandNumber() + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
+		request.setMessageContent(content);
+		request.setTemplateId(templateId);
+		// 发送操作
+		String sendMsg = SmsUtils.sendMsg(request);
+		// 记录发送记录操作
+		saveSendRecord(request,sendMsg);
+		// 返回发送信息
+		return R.data(sendMsg);
+	}
+
+	/**
+	 * 发送记录保存
+	 * @param request 发送信息
+	 * @param sendMsg 响应数据
+	 */
+	private void saveSendRecord(SMSSendRequest request, String sendMsg) {
+		SmsRecord smsRecord = new SmsRecord();
+		smsRecord.setPhone(request.getUserNumber());
+		smsRecord.setContent(request.getMessageContent());
+		smsRecord.setTemplateId(request.getTemplateId());
+		smsRecord.setResContent(sendMsg);
+		//插入记录
+		smsRecordService.save(smsRecord);
 	}
 
 	@PostMapping("/test1")
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsRecordController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsRecordController.java
new file mode 100644
index 0000000..2715095
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsRecordController.java
@@ -0,0 +1,98 @@
+package cn.gistack.sm.sms.controller;
+
+import cn.gistack.sm.sms.entity.SmsRecord;
+import cn.gistack.sm.sms.service.ISmsRecordService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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.springframework.web.bind.annotation.*;
+import java.util.Arrays;
+
+/**
+ * 短信发送记录控制层
+ * @author zhongrj
+ * @date 2023-04-23
+*/
+@Slf4j
+@Api(tags="短信发送记录")
+@RestController
+@RequestMapping("/smsRecord/smsRecord")
+@AllArgsConstructor
+public class SmsRecordController extends BladeController {
+
+   private ISmsRecordService smsRecordService;
+
+   /**
+    * 分页列表查询
+    * @return
+    */
+   @ApiOperation(value="短信发送记录-分页列表查询", notes="短信发送记录-分页列表查询")
+   @GetMapping(value = "/list")
+   public R queryPageList(SmsRecord smsRecord, Query query) {
+   	   IPage<SmsRecord> pageList = smsRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(smsRecord));
+       return R.data(pageList);
+   }
+
+   /**
+    * 添加
+    */
+   @ApiOperation(value="短信发送记录-添加", notes="短信发送记录-添加")
+   @PostMapping(value = "/add")
+   public R add(@RequestBody SmsRecord smsRecord) {
+       return R.data(smsRecordService.save(smsRecord));
+   }
+
+   /**
+    * 编辑
+    * @return
+    */
+   @ApiOperation(value="短信发送记录-编辑", notes="短信发送记录-编辑")
+   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+   public R edit(@RequestBody SmsRecord smsRecord) {
+       return R.data(smsRecordService.updateById(smsRecord));
+   }
+
+   /**
+    * 通过id删除
+    *
+    * @param id
+    * @return
+    */
+   @ApiOperation(value="短信发送记录-通过id删除", notes="短信发送记录-通过id删除")
+   @DeleteMapping(value = "/delete")
+   public R delete(@RequestParam(name="id",required=true) String id) {
+       return R.data(smsRecordService.removeById(id));
+   }
+
+   /**
+    * 批量删除
+    *
+    * @param ids
+    * @return
+    */
+   @ApiOperation(value="短信发送记录-批量删除", notes="短信发送记录-批量删除")
+   @DeleteMapping(value = "/deleteBatch")
+   public R deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+       return R.data(smsRecordService.removeByIds(Arrays.asList(ids.split(","))));
+   }
+
+   /**
+    * 通过id查询
+    *
+    * @param id
+    * @return
+    */
+   @ApiOperation(value="短信发送记录-通过id查询", notes="短信发送记录-通过id查询")
+   @GetMapping(value = "/queryById")
+   public R queryById(@RequestParam(name="id",required=true) String id) {
+       SmsRecord SmsRecord = smsRecordService.getById(id);
+       return R.data(SmsRecord);
+   }
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/entity/SmsRecord.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/entity/SmsRecord.java
new file mode 100644
index 0000000..66356aa
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/entity/SmsRecord.java
@@ -0,0 +1,44 @@
+package cn.gistack.sm.sms.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 短信发送记录
+ */
+@Data
+@TableName("sm_sms_record")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "sm_sms_record对象", description = "短信发送记录")
+public class SmsRecord extends TenantEntity {
+	/**
+	 * 模板id
+	 */
+	@ApiModelProperty(value = "模板id")
+	private String templateId;
+
+	/**
+	 * 手机号(可能有多个,以英文逗号分隔)
+	 */
+	@ApiModelProperty(value = "手机号(可能有多个,以英文逗号分隔)")
+	private String phone;
+
+	/**
+	 * 消息内容
+	 */
+	@ApiModelProperty(value = "消息内容")
+	private String content;
+
+	/**
+	 * 响应内容
+	 */
+	@ApiModelProperty(value = "响应内容")
+	private String resContent;
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.java
new file mode 100644
index 0000000..0d7226a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.java
@@ -0,0 +1,12 @@
+package cn.gistack.sm.sms.mapper;
+
+import cn.gistack.sm.sms.entity.SmsRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 短信发送记录
+ * @author zhongrj
+ */
+public interface SmsRecordMapper extends BaseMapper<SmsRecord> {
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.xml
new file mode 100644
index 0000000..13bf836
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.xml
@@ -0,0 +1,5 @@
+<?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="cn.gistack.sm.sms.mapper.SmsRecordMapper">
+
+</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/ISmsRecordService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/ISmsRecordService.java
new file mode 100644
index 0000000..83229ea
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/ISmsRecordService.java
@@ -0,0 +1,7 @@
+package cn.gistack.sm.sms.service;
+
+import cn.gistack.sm.sms.entity.SmsRecord;
+import org.springblade.core.mp.base.BaseService;
+
+public interface ISmsRecordService extends BaseService<SmsRecord> {
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsRecordServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsRecordServiceImpl.java
new file mode 100644
index 0000000..ac45c1c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsRecordServiceImpl.java
@@ -0,0 +1,14 @@
+package cn.gistack.sm.sms.service.impl;
+
+import cn.gistack.sm.patrol.mapper.PatrolGroupMapper;
+import cn.gistack.sm.sms.entity.SmsRecord;
+import cn.gistack.sm.sms.mapper.SmsRecordMapper;
+import cn.gistack.sm.sms.service.ISmsRecordService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+
+/**
+ * 短信发送记录
+ * @author zhongrj
+ */
+public class SmsRecordServiceImpl extends BaseServiceImpl<SmsRecordMapper, SmsRecord> implements ISmsRecordService {
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
index 67c6e68..6b0d1d1 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
@@ -63,7 +63,7 @@
 	 * 获取随机字符串
 	 * @return
 	 */
-	private String getRandNumber() {
+	public static String getRandNumber() {
 		// 计算token
 //		Date date = new Date();
 //		String dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date);
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/vo/SmsRecordVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/vo/SmsRecordVO.java
new file mode 100644
index 0000000..82d34e1
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/vo/SmsRecordVO.java
@@ -0,0 +1,12 @@
+package cn.gistack.sm.sms.vo;
+
+import cn.gistack.sm.sms.entity.SmsRecord;
+import lombok.Data;
+
+/**
+ * 短信发送记录vo
+ * @author zhongrj
+ */
+@Data
+public class SmsRecordVO extends SmsRecord {
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
index fd8aab6..50a79de 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
@@ -16,6 +16,9 @@
  */
 package cn.gistack.system.controller;
 
+import cn.gistack.common.node.DeptUserTreeNode;
+import cn.gistack.common.node.TreeNode;
+import cn.gistack.common.utils.NodeTreeUtil;
 import cn.gistack.system.vo.DeptVO;
 import cn.gistack.system.wrapper.DeptWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -176,4 +179,16 @@
 	}
 
 
+	/**
+	 * 查询组织机构树数据(下级包含人员信息)
+	 * @param treeNode
+	 * @return
+	 */
+	@GetMapping("/getDeptAndUserTree")
+	@ApiOperation(value = "查询组织机构树数据(下级包含人员信息)")
+	public R getDeptAndUserTree(DeptUserTreeNode treeNode) {
+		return R.data(deptService.getDeptAndUserTree(treeNode));
+	}
+
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
index 739575b..00d489d 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
@@ -16,9 +16,13 @@
  */
 package cn.gistack.system.mapper;
 
+import cn.gistack.common.node.DeptUserTreeNode;
+import cn.gistack.common.node.TreeNode;
 import cn.gistack.system.entity.Dept;
 import cn.gistack.system.vo.DeptVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.MapKey;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -65,4 +69,27 @@
 	 */
 	List<String> getDeptNames(Long[] ids);
 
+	/**
+	 * 查询组织机构树数据(下级包含人员信息)
+	 * @param treeNode
+	 * @return
+	 */
+	@MapKey(value = "id")
+    Map<String, DeptUserTreeNode> getDeptAndUserTree(@Param("treeNode") DeptUserTreeNode treeNode);
+
+	/**
+	 * 查询组织机构树
+	 * @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/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
index 654eb1d..2d88964 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
@@ -112,4 +112,79 @@
         and is_deleted = 0
     </select>
 
+    <!--查询组织机构树数据(下级包含人员信息)-->
+    <select id="getDeptAndUserTree" resultType="cn.gistack.common.node.DeptUserTreeNode">
+        (
+            SELECT
+            dept.id,
+            dept.parent_id parentId,
+            dept.dept_name AS name,
+            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>
+        )
+        union
+        (
+            select
+            bu.id,
+            bu.dept_id parentId,
+            bu.account AS name,
+            bu.phone,
+            0 as hasChildren
+            from blade_user bu left join blade_dept bd on bd.id = bu.dept_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="getDeptMap" resultType="cn.gistack.common.node.DeptUserTreeNode">
+        SELECT
+        dept.id,
+        dept.parent_id parentId,
+        dept.dept_name AS name,
+        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="cn.gistack.common.node.DeptUserTreeNode">
+        select
+        bu.id,
+        bu.dept_id parentId,
+        bu.account AS name,
+        bu.phone,
+        0 as hasChildren
+        from blade_user bu left join blade_dept bd on bd.id = bu.dept_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>
+
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
index c2c1312..8a04daf 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
@@ -16,6 +16,8 @@
  */
 package cn.gistack.system.service;
 
+import cn.gistack.common.node.DeptUserTreeNode;
+import cn.gistack.common.node.TreeNode;
 import cn.gistack.system.entity.Dept;
 import cn.gistack.system.vo.DeptVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -116,4 +118,10 @@
 	 */
 	List<DeptVO> search(String deptName, Long parentId);
 
+	/**
+	 * 查询组织机构树数据(下级包含人员信息)
+	 * @param treeNode
+	 * @return
+	 */
+	List<TreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
index e1b62e9..9817c4f 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
@@ -16,6 +16,9 @@
  */
 package cn.gistack.system.service.impl;
 
+import cn.gistack.common.node.DeptUserTreeNode;
+import cn.gistack.common.node.TreeNode;
+import cn.gistack.common.utils.NodeTreeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -170,4 +173,18 @@
 		return DeptWrapper.build().listNodeVO(deptList);
 	}
 
+	/**
+	 * 查询组织机构树数据(下级包含人员信息)
+	 * @param treeNode
+	 * @return
+	 */
+	@Override
+	public List<TreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) {
+		// 查询数据
+		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
+		Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode);
+		deptMap.putAll(userMap);
+		// 处理并返回
+		return NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
+	}
 }

--
Gitblit v1.9.3