feat(upms): 重构连接器导入功能,支持钉钉和企业微信Excel导入

- 优化钉钉部门同步逻辑,提取常量到 ConnectConstants
- 新增企业微信部门及用户Excel导入功能
- 实现钉钉部门和用户Excel导入功能
- 移除API同步功能,统一使用导入方式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
PIGCLOUDandClaude Opus 4.5 committed 2026-03-08 14:58:10 +08:00
1 parent 31ad1fbeb8
commit d2f49723d6
10 files changed
+776 -330

No files matched your search

@@ -0,0 +1,73 @@
package com.pig4cloud.pigx.admin.api.constant;
/**
* 第三方连接常量类
* <p>
* 用于定义第三方平台(如钉钉)连接相关的字段名称和常量值
*
* @author lengleng
* @date 2026/01/10
*/
public interface ConnectConstants {
/**
* JSON字段名: 手机号
*/
String FIELD_MOBILE = "mobile";
/**
* JSON字段名: 头像
*/
String FIELD_AVATAR = "avatar";
/**
* JSON字段名: 昵称
*/
String FIELD_NICKNAME = "nickname";
/**
* JSON字段名: 姓名
*/
String FIELD_NAME = "name";
/**
* JSON字段名: 邮箱
*/
String FIELD_EMAIL = "email";
/**
* JSON字段名: 部门ID
*/
String FIELD_DEPT_ID = "dept_id";
/**
* JSON字段名: 父部门ID
*/
String FIELD_PARENT_ID = "parent_id";
/**
* JSON字段名: 部门顺序列表
*/
String FIELD_DEPT_ORDER_LIST = "dept_order_list";
/**
* JSON字段名: 用户ID列表
*/
String FIELD_USERID_LIST = "userid_list";
/**
* JSON字段名: 返回结果
*/
String FIELD_RESULT = "result";
/**
* 语言代码: 简体中文
*/
String LANGUAGE_ZH_CN = "zh_CN";
/**
* 钉钉根部门ID
*/
Long ROOT_DEPT_ID = 1L;
}
@@ -0,0 +1,35 @@
package com.pig4cloud.pigx.admin.api.vo;
import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty;
import com.pig4cloud.pigx.common.excel.annotation.ExcelLine;
import lombok.Data;
import java.io.Serializable;
/**
* 钉钉部门导入VO
* 用于解析钉钉导出的Excel中的部门数据
*
* @author lengleng
* @date 2026-01-10
*/
@Data
public class DingTalkDeptExcelVO implements Serializable {
/**
* 导入时回显行号(用于错误定位)
*/
@ExcelLine
@ExcelIgnore
private Long lineNum;
/**
* 部门路径
* 格式: "公司/部门A/子部门B" (用"/"表示层级关系)
* 同一行可能包含多个部门路径,用";"分隔
*/
@ExcelProperty("部门")
private String deptPath;
}
@@ -39,17 +39,24 @@ public class DingUserExcelVo implements Serializable {
private String name;
/**
* 部门名称
* 部门路径
* 格式: "公司/部门A/子部门B" (用"/"表示层级关系)
* 支持多部门: "部门1;部门2" (用英文分号分隔,第一个为主部门)
*/
@NotBlank(message = "部门不能为空")
@ExcelProperty("部门")
private String deptName;
private String deptPath;
/**
* 邮箱
*/
@ExcelProperty("邮箱")
private String email;
/**
* 锁定标记
* 0: 正常(激活)
* 9: 锁定(未激活)
*/
@ExcelProperty("激活状态,0:是,9:否")
private String lockFlag;
@@ -0,0 +1,36 @@
package com.pig4cloud.pigx.admin.api.vo;
import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty;
import com.pig4cloud.pigx.common.excel.annotation.ExcelLine;
import lombok.Data;
import java.io.Serializable;
/**
* 企业微信部门导入VO
* 用于解析企业微信导出的通讯录Excel中的部门数据
*
* @author lengleng
* @date 2026-01-10
*/
@Data
public class WeChatDeptExcelVO implements Serializable {
/**
* 导入时回显行号(用于错误定位)
*/
@ExcelLine
@ExcelIgnore
private Long lineNum;
/**
* 部门路径
* 格式: "腾讯公司/微信事业群/广州研发部" (用"/"表示层级关系)
* 同一行可能包含多个部门路径,用";"分隔,如: "部门路径1;部门路径2"
* 企业微信Excel中对应"部门"列(第5列,索引4)
*/
@ExcelProperty(value = "部门", index = 4)
private String deptPath;
}
@@ -0,0 +1,85 @@
package com.pig4cloud.pigx.admin.api.vo;
import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty;
import com.pig4cloud.pigx.common.excel.annotation.ExcelLine;
import lombok.Data;
import java.io.Serializable;
/**
* 企业微信用户导入VO
* 用于解析企业微信导出的通讯录Excel中的用户数据
*
* @author lengleng
* @date 2026-01-10
*/
@Data
public class WeChatUserExcelVO implements Serializable {
/**
* 导入时回显行号(用于错误定位)
*/
@ExcelLine
@ExcelIgnore
private Long lineNum;
/**
* 姓名
*/
@ExcelProperty(value = "姓名", index = 0)
private String name;
/**
* 账号 (userid)
* 企业微信中的唯一标识
*/
@ExcelProperty(value = "账号", index = 1)
private String account;
/**
* 别名
*/
@ExcelProperty(value = "别名", index = 2)
private String alias;
/**
* 职务
*/
@ExcelProperty(value = "职务", index = 3)
private String position;
/**
* 部门路径
* 格式: "腾讯公司/微信事业群/广州研发部"
* 支持多部门: "部门1;部门2" (用英文分号分隔,第一个为主部门)
* 实际Excel列:第5列(索引4)
*/
@ExcelProperty(value = "部门", index = 4)
private String deptPath;
/**
* 性别 (男/女)
*/
@ExcelProperty(value = "性别", index = 5)
private String gender;
/**
* 手机号 (关键字段,用于判重)
*/
@ExcelProperty(value = "手机", index = 6)
private String phone;
/**
* 座机
*/
@ExcelProperty(value = "座机", index = 7)
private String telephone;
/**
* 邮箱
*/
@ExcelProperty(value = "邮箱", index = 8)
private String email;
}