From 834d64779f950cab6b28bc38e2d49cf04b1dd9d1 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Fri, 10 Apr 2026 09:00:46 +0800
Subject: [PATCH] opt:机构同步优化

---
 drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java |   63 +++++++++++++++++++++++--------
 1 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java b/drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java
index 9975960..cc4fe11 100644
--- a/drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java
+++ b/drone-service/drone-system/src/main/java/org/sxkj/system/controller/DeptController.java
@@ -16,6 +16,7 @@
  */
 package org.sxkj.system.controller;
 
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -42,24 +43,25 @@
 import org.springblade.core.tool.utils.Func;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.multipart.MultipartFile;
+import org.sxkj.common.constant.WordOrderConstant;
 import org.sxkj.common.node.TreeStringNode;
 import org.sxkj.common.utils.HeaderUtils;
+import org.sxkj.common.utils.OrderNumUtils;
 import org.sxkj.system.cache.DictCache;
 import org.sxkj.system.cache.UserCache;
 import org.sxkj.system.entity.Dept;
 import org.sxkj.system.entity.Region;
 import org.sxkj.system.entity.User;
 import org.sxkj.system.enums.DictEnum;
-import org.sxkj.system.excel.DeptExcel;
-import org.sxkj.system.excel.DeptImporter;
-import org.sxkj.system.excel.RegionExcel;
-import org.sxkj.system.excel.RegionImporter;
+import org.sxkj.system.excel.*;
 import org.sxkj.system.mapper.DeptMapper;
 import org.sxkj.system.mapper.UserMapper;
 import org.sxkj.system.param.DeptAddParam;
 import org.sxkj.system.param.DeptExportParam;
 import org.sxkj.system.param.DeptPageParam;
 import org.sxkj.system.service.IDeptService;
+import org.sxkj.system.util.excel.DeptSheetWriteHandler;
+import org.sxkj.system.util.excel.RegionSheetWriteHandler;
 import org.sxkj.system.vo.DeptVO;
 import org.sxkj.system.wrapper.DeptWrapper;
 import org.springframework.web.bind.annotation.*;
@@ -67,10 +69,10 @@
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
@@ -100,8 +102,8 @@
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入dept")
 	public R<DeptVO> detail(Dept dept) {
-		Dept detail = deptService.getOne(Condition.getQueryWrapper(dept));
-		return R.data(DeptWrapper.build().entityVO(detail));
+		DeptVO detail = deptService.getDetailWithAreaName(dept);
+		return R.data(detail);
 	}
 
 	/**
@@ -160,8 +162,8 @@
 	@GetMapping("/tree")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "树形结构", notes = "树形结构")
-	public R<List<DeptVO>> tree(String tenantId, BladeUser bladeUser) {
-		List<DeptVO> tree = deptService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
+	public R<List<DeptVO>> tree(String tenantId, @RequestParam(value = "sysType", required = false) String sysType, BladeUser bladeUser) {
+		List<DeptVO> tree = deptService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), sysType);
 		return R.data(tree);
 	}
 
@@ -201,10 +203,16 @@
 	@ApiLog("组织机构信息新增或修改")
 	public R submit(@Valid @RequestBody DeptAddParam dept) {
 		Dept deptEntity = Objects.requireNonNull(BeanUtil.copy(dept, Dept.class));
+		String times = OrderNumUtils.initOrderNum2(WordOrderConstant.ORG_CODE);
+		String deptCode = WordOrderConstant.ORG_PREFIX + times;
+		deptEntity.setDeptCode(deptCode);
+		deptEntity.setCreateTime(new Date());
+		deptEntity.setUpdateTime(new Date());
 		if (deptService.submit(deptEntity)) {
 			CacheUtil.clear(SYS_CACHE);
 			CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-			List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getDeptId, dept.getId()));
+			// 根据部门ID查询用户列表
+			List<User> userList = userMapper.selectUsersByDeptId(String.valueOf(dept.getId()));
 			if (!userList.isEmpty()) {
 				List<Long> userIds = userList.stream().map(User::getId).collect(Collectors.toList());
 				userMapper.updateUserAreaCode(dept.getAreaCode(), userIds);
@@ -344,7 +352,7 @@
 	@ApiOperation(value = "导入机构", notes = "传入excel")
 	public R importRegion(MultipartFile file, Integer isCovered) {
 		DeptImporter deptImporter = new DeptImporter(deptService, isCovered == 1);
-		ExcelUtil.save(file, deptImporter, DeptExcel.class);
+		ExcelUtil.save(file, deptImporter, DeptImportExcel.class);
 		return R.success("操作成功");
 	}
 
@@ -365,9 +373,30 @@
 	@GetMapping("export-template")
 	@ApiOperationSupport(order = 16)
 	@ApiOperation(value = "导出模板")
-	public void exportUser(HttpServletResponse response) {
-		List<DeptExcel> list = new ArrayList<>();
-		ExcelUtil.export(response, "机构模板", "机构表", list, DeptExcel.class);
+	public void exportUser(HttpServletResponse response) throws IOException {
+		// 设置响应头
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding(StandardCharsets.UTF_8.name());
+		String fileName = URLEncoder.encode("机构模板", StandardCharsets.UTF_8.name());
+		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+
+		// 准备示例数据列表
+		List<DeptImportExcel> list = new ArrayList<>();
+		// 创建示例数据对象
+		DeptImportExcel example = new DeptImportExcel();
+		// 设置示例数据
+		example.setDeptName("示例机构");
+		example.setAreaCode("360800000000");
+		example.setRemark("这是一个示例机构");
+		example.setStatus("1"); // 假设1表示启用状态
+		// 将示例数据添加到列表
+		list.add(example);
+
+		// 使用EasyExcel导出,并注册RegionSheetWriteHandler
+		EasyExcel.write(response.getOutputStream(), DeptImportExcel.class)
+				.registerWriteHandler(new DeptSheetWriteHandler())
+				.sheet("机构表")
+				.doWrite(list);
 	}
 
 }

--
Gitblit v1.9.3