现在请求获取集团员工部门数据,是通过集团将数据以xml文件格式放置到ftp服务器上,我们连接ftp服务器获取集团数据,更新到对应库中。所以梳理哪些场景使用到这些数据,以及为什么使用
调研得到使用FTP请求集团数据集中在项目:job-scheduler-for-opentrade;通过调用 ftp-center 服务获取集团xml数据文件
集团FTP同步员工信息 集团FTP同步组织信息 集团FTP同步人事范围_大区_区域信息
接口方法 | 作用 | 备注 |
---|---|---|
iGeneralMemberService.findMember | 根据身份证查询会员数据 | |
iGeneralMemberService.updateMemberType | 更新会员类型,是个人 / 员工 | |
fEmployeeService.saveOrUpdateEmployees | 保存/更新员工信息 |
我们的员工信息全部是以集团推送信息为主,集团推送的员工数据包括:
<employee> <employee_no>80820230</employee_no> <name>王超</name> <personnel_id>9611</personnel_id> <organization_id>15010413</organization_id> <position_code>15008735</position_code> <position_desc>门店合伙人成员</position_desc> <employee_status>0</employee_status> <employee_type>3</employee_type> <induction_time>20180710</induction_time> <idcard_no>1111111111111111</idcard_no> <sex>1</sex> <mobile>15899999999</mobile> </employee>
扩展
1.员工登录中台需要认证
2.正式员工如何开通企业微信
先回答第二个问题,fEmployeeService.saveOrUpdateEmployees里面都做了什么?可以看到其中会发送集团员工数据更新消息topic jt-employee-msg
企业微信项目 enterprise-wechat-center 监听了这个消息 ,同步员工信息到企业微信。
这是正式员工的同步,那么外包员工是如何同步至企业微信的?
答:企业微信管理员在企业微信后台创建的。
第一个问题,由于集团同步过来的员工信息存在多个账号使用一个手机号的情况,由于企业微信员工手机号是唯一的,所以中台需要认证更新员工手机号,再同步至企业微信
接口方法 | 作用 | 备注 |
---|---|---|
fOrganizationService.saveOrUpdateOrganization | 新增/更新组织信息 |
<ITEM> <id>50675636</id> <pid>50675635</pid> <name>店长办公室</name> <status>1</status> <leader_no>80007056</leader_no> <org_type>8</org_type> <org_attr>3</org_attr> <cost_center_no>0094790100</cost_center_no> <cost_center_name>深圳市南山茂业店-店长办公室</cost_center_name> <company_code>2122</company_code> <company_name>深圳市永辉超市有限公司</company_name> <profit_center_code>0000009479</profit_center_code> <create_at>20160301</create_at> <last_update_at>20181227</last_update_at> <superior_reporting_dep>20181227</superior_reporting_dep> </ITEM>
和员工信息一样,组织信息变化了employee-center也会发送消息topic jt-organization-msg ,emterprise-wechat-center监听到消息后,对应企业微信相关操作
接口方法 | 作用 | 备注 |
---|---|---|
fPersonnelService.saveOrUpdatePersonnel | 创建/更新人事数据 | 更新数据至t_oa_personnel,没有其他操作 |
fAreaService.saveOrUpdateArea | 创建/更新区域数据 | 更新数据至t_oa_area,没有其他操作 |
fRegionService.saveOrUpdateRegion | 创建/更新大区数据 | 更新数据至t_oa_region,没有其他操作 |
企业微信同步时监听到 员工组织变化的消息后 会更新至 企业微信,详细操作流程可以见下图
之前使用FTP可能存在的问题:
需要全部整体同步至企业微信流程:
集团员工消息jt-employee-msg除了enterprise-wechat-center监听,还有风控内部员工离职 也在监听这个消息
集团组织消息jt-organization-msg 只有enterprise-wechat-center 监听。
enterprise-wechat-center 获取到变化信息使用了企业微信如下接口(为什么使用这些接口,还有没有其他实现的方案,参考企业微信API:https://work.weixin.qq.com/api/doc#90001/90143/90331)
企业微信接口 | 作用 | 备注 |
---|---|---|
/user/create | 创建成员 | userid为唯一标识,企业微信内唯一;手机号码,企业微信内必须唯一,与email二者不能同时为空;email企业微信也必须唯一 |
/user/get | 读取成员 | 更具userid查询成员信息 |
/user/update | 更新成员 | 根据userid更新成员;若企业成员已经激活企业微信,手机号需要成员自行修改。 |
/department/list | 获取部门列表 | 根据可以根据部门id查询,如果不传返回全量组织架构 |
/department/create | 创建部门 | 必填部门名称和父部门id;部门id如果不传会自动生成;以我们系统的部门id为准 |
/department/update | 更新部门 | 根据部门id更新字段,可以更新部门name,父部门id以及在父部门的排序。 |
集团同步员工/组织信息的作用:集团员工能使用企业微信,并且员工离职后禁用其账号
集团同步员工信息还有一个作用是将员工变化信息通知到风控系统,供其做相关操作
本次改造只涉及到 员工同步和组织同步 同步至 企业微信数据
集团将员工和组织信息更新到中间表中,我们检测更新数据同步到employee_db中。
和集团公共使用数据库: enterprise_ihr ;
创建公共使用表:
DROP TABLE IF EXISTS `mdm_employee`;CREATE TABLE `mdm_employee` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `employee_code` varchar(100) NOT NULL COMMENT '人员编号', `employee_name` varchar(199) DEFAULT NULL COMMENT '人员姓名', `gender` varchar(100) DEFAULT NULL COMMENT '性别代码,空:未知;1男;2女', `mobile` varchar(100) DEFAULT NULL COMMENT '移动电话号码', `employee_status` varchar(100) DEFAULT NULL COMMENT '雇佣状态,3在职,0离职', `employee_group` varchar(100) DEFAULT NULL COMMENT '人事范围编码', `pos_position_code` varchar(199) DEFAULT NULL COMMENT '职位代码,职位ID (流水号)', `employee_type` varchar(100) DEFAULT NULL COMMENT '员工组', `id_number` varchar(100) DEFAULT NULL COMMENT '身份证号', `begin_date` datetime(6) DEFAULT NULL COMMENT '入职时间', `orgunit_code` varchar(100) DEFAULT NULL COMMENT '人员所在组织ID', `pos_title_name` varchar(199) DEFAULT NULL COMMENT '职务名称', `last_update_time` varchar(100) DEFAULT NULL COMMENT '修改时间', `db_flag` varchar(10) DEFAULT '0' COMMENT '是否已处理', `db_last_updated_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '最后更新时间', PRIMARY KEY (`id`), KEY `idx_mdm_employee_db_last_updated_at` (`db_last_updated_at`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MDM推送人员';DROP TABLE IF EXISTS `mdm_organization`;CREATE TABLE `mdm_organization` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `org_unit_code` varchar(100) NOT NULL COMMENT '组织编号', `sapa262` char(100) DEFAULT NULL COMMENT '上级汇报部门', `status` varchar(100) DEFAULT NULL COMMENT '组织状态,1 激活的(可使用)2 已计划3 已提交4 已批准 5 已拒绝', `cost_center_code` varchar(100) DEFAULT NULL COMMENT '成本中心编号', `cost_center_name` varchar(199) DEFAULT NULL COMMENT '成本中心名称', `profit_center_code` varchar(100) DEFAULT NULL COMMENT '利润中心代码', `company_code` varchar(100) DEFAULT NULL COMMENT '公司代码', `company_name` varchar(199) DEFAULT NULL COMMENT '公司名称', `org_unit_name` varchar(199) DEFAULT NULL COMMENT '组织名称', `leader_code` varchar(100) DEFAULT NULL COMMENT '组织负责人ID', `parent_code` varchar(100) DEFAULT NULL COMMENT '父组织编号(相关对象的标识),当对象类型为O时,如有值,则表示该部门的上级组织编码', `effective_date` varchar(100) DEFAULT NULL COMMENT '开始日期', `sap_org_type` varchar(100) DEFAULT NULL COMMENT 'SAP组织类型,当对象类型为O时,如有值,则1集团,2大区/分子公司,3门店', `sap_dept_type` varchar(100) DEFAULT NULL COMMENT 'SAP部门属性,当对象类型为O时,如有值,则1中心,2部门,3组', `last_update_time` varchar(100) DEFAULT NULL COMMENT '修改时间', `db_flag` varchar(10) DEFAULT '0' COMMENT '是否已处理', `db_last_updated_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '最后更新时间', PRIMARY KEY (`id`), KEY `idx_mdm_organization_last_updated_at` (`db_last_updated_at`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MDM推送组织数据';
集团连接stage的用户名:jt_test/icm2kravib
集团连接我们的测试环境需要联系dba配置外网访问白名单。
线上配置地址:10.9.187.184:3305 数据库:enterprise_ihr 集团使用账户: yh_jt/icm2kravib 业务组:yh_jt/icm2kravib ;也是需要配置公网访问白名单
设计方案:
employee-center中配置双数据源,访问中间数据库(和DBA、运维已确认)
员工同步有两步操作
从数据库中查询用户信息,写入employee-center中
enterprise-wechat-center监听消息同步至企业微信
组织同步也是两步
从数据库中查询组织信息,写入employee-center中
流程图如下:
员工同步 组织同步
第二版
在此基础上进行开发
预案:
集团大批次数据推送错误,导致企业微信员工禁用
1.立刻关闭同步job;并联系集团系统同时排查
2.统计错误数据范围,确定是从哪个时间段之后的数据出现问题;
3.得到推送出错的员工id;
4.查询错误时间之前该员工的最新推送数据,将数据状态修改为 未推送;
其他:
联系 DBA 获取错误时间段 员工表的所有操作 SQL,逆向操作恢复数据。