数字底座组织机构同步
功能引入
risenet-y9boot-starter-listener-kafka 做的工作就是接收 kafka 的 topic 的消息,然后再发布为 spring 的事件,其他工程即可直接利用spring的事件机制处理消息,无需编写kafka的相关逻辑代码了。
注:默认将组织身份同步监听集成进来,将接收到的消息转化为spring事件。
maven pom.xml 修改
(1)修改pom.xml
xml
<repositories>
<repository>
<id>y9-internet-repo</id>
<url>https://svn.youshengyun.com:9900/nexus/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<!-- <updatePolicy>always</updatePolicy> -->
<!-- always,daily(default),interval:XXX,never -->
</snapshots>
</repository>
</repositories>
(2)将 risenet-y9boot-starter-listener-kafka 添加到 pom.xml 的依赖列表里.
xml
<dependency>
<groupId>net.risesoft</groupId>
<artifactId>risenet-y9boot-starter-listener-kafka</artifactId>
<version>[最新版本]</version>
</dependency>
修改属性文件 application.properties
properties
spring.kafka.consumer.bootstrap-servers=localhost:9092
spring.kafka.consumer.auto-commit-interval=1000
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.group-id=y9
#开启监听
y9.feature.listener.kafka.enabled=true
yaml
spring:
kafka:
#Kafka消费者配置
consumer:
bootstrap-servers: localhost:9092
auto-commit-interval: 1000
enable-auto-commit: true
group-id: y9demo-sync
y9:
feature:
listener:
kafka:
enabled: true
使用示例
注:消息类 Y9EventOrg,在 risenet-y9boot-common-util.jar 里 定义:
eventType:表示消息类型,在 Y9OrgEventTypeConst 类里定义;
eventTarget:表示消息发送的对象,可以定向对某个应用发送消息,一般是ALL,表示全部应用都可以接收这个消息;
orgObj:表示实际传输的消息体,是 Serializable 对象。
java
package com.example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import net.risesoft.enums.platform.OrgTypeEnum;
import net.risesoft.model.platform.Department;
import net.risesoft.model.platform.Group;
import net.risesoft.model.platform.Organization;
import net.risesoft.model.platform.Person;
import net.risesoft.model.platform.PersonsGroups;
import net.risesoft.model.platform.PersonsPositions;
import net.risesoft.model.platform.Position;
import net.risesoft.model.platform.SyncOrgUnits;
import net.risesoft.y9.pubsub.constant.Y9OrgEventTypeConst;
import net.risesoft.y9.pubsub.event.Y9EventOrg;
@Component
public class Y9OrgListener implements ApplicationListener<Y9EventOrg> {
protected final Logger log = LoggerFactory.getLogger(Y9OrgListener.class);
public Y9OrgListener() {
log.info("init SpringEventListener...");
}
@Override
public void onApplicationEvent(Y9EventOrg event) {
log.info(event.getEventType());
if (Y9OrgEventTypeConst.ORGANIZATION_ADD.equals(event.getEventType())) {
Organization org = (Organization)event.getOrgObj();
log.info("--------------------------添加组织机构-------------------------------");
log.info("--------------------" + org.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.DEPARTMENT_ADD.equals(event.getEventType())) {
Department newDept = (Department)event.getOrgObj();
log.info("--------------------------添加部门-------------------------------");
log.info("--------------------" + newDept.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.GROUP_ADD.equals(event.getEventType())) {
Group group = (Group)event.getOrgObj();
log.info("--------------------------添加用户组-------------------------------");
log.info("--------------------" + group.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.POSITION_ADD.equals(event.getEventType())) {
Position position = (Position)event.getOrgObj();
log.info("--------------------------添加岗位-------------------------------");
log.info("--------------------" + position.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.PERSON_ADD.equals(event.getEventType())) {
Person person = (Person)event.getOrgObj();
log.info("--------------------------添加人员-------------------------------");
log.info("--------------------" + person.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.ORGANIZATION_UPDATE.equals(event.getEventType())) {
Organization org = (Organization)event.getOrgObj();
log.info("--------------------------修改组织机构-------------------------------");
log.info("--------------------" + org.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.DEPARTMENT_UPDATE.equals(event.getEventType())) {
Department newDept = (Department)event.getOrgObj();
log.info("--------------------------修改部门-------------------------------");
log.info("--------------------" + newDept.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.GROUP_UPDATE.equals(event.getEventType())) {
Group group = (Group)event.getOrgObj();
log.info("--------------------------修改用户组-------------------------------");
log.info("--------------------" + group.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.POSITION_UPDATE.equals(event.getEventType())) {
Position position = (Position)event.getOrgObj();
log.info("--------------------------修改岗位-------------------------------");
log.info("--------------------" + position.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.PERSON_UPDATE.equals(event.getEventType())) {
Person person = (Person)event.getOrgObj();
log.info("--------------------------修改人员-------------------------------");
log.info("--------------------" + person.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.ORGANIZATION_DELETE.equals(event.getEventType())) {
Organization org = (Organization)event.getOrgObj();
log.info("--------------------------删除组织机构-------------------------------");
log.info("--------------------" + org.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.DEPARTMENT_DELETE.equals(event.getEventType())) {
Department newDept = (Department)event.getOrgObj();
log.info("--------------------------删除部门-------------------------------");
log.info("--------------------" + newDept.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.GROUP_DELETE.equals(event.getEventType())) {
Group group = (Group)event.getOrgObj();
log.info("--------------------------删除用户组-------------------------------");
log.info("--------------------" + group.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.POSITION_DELETE.equals(event.getEventType())) {
Position position = (Position)event.getOrgObj();
log.info("--------------------------删除岗位-------------------------------");
log.info("--------------------" + position.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.PERSON_DELETE.equals(event.getEventType())) {
Person person = (Person)event.getOrgObj();
log.info("--------------------------删除人员-------------------------------");
log.info("--------------------" + person.getName() + "---------------------");
} else if (Y9OrgEventTypeConst.GROUP_ADD_PERSON.equals(event.getEventType())) {
PersonsGroups personsGroups = (PersonsGroups)event.getOrgObj();
log.info("--------------------------用户组添加人员-------------------------------");
log.info("--------------------" + personsGroups.getPersonOrder() + "---------------------");
} else if (Y9OrgEventTypeConst.GROUP_REMOVE_PERSON.equals(event.getEventType())) {
PersonsGroups personsGroups = (PersonsGroups)event.getOrgObj();
log.info("--------------------------用户组删除人员-------------------------------");
log.info("--------------------" + personsGroups.getPersonOrder() + "---------------------");
} else if (Y9OrgEventTypeConst.GROUP_ORDER.equals(event.getEventType())) {
PersonsGroups personsGroups = (PersonsGroups)event.getOrgObj();
log.info("--------------------------用户组-人员排序-------------------------------");
log.info("--------------------" + personsGroups.getGroupOrder() + "---------------------");
log.info("--------------------" + personsGroups.getPersonOrder() + "---------------------");
} else if (Y9OrgEventTypeConst.POSITION_ADD_PERSON.equals(event.getEventType())) {
PersonsPositions personsPositions = (PersonsPositions)event.getOrgObj();
log.info("--------------------------岗位添加人员-------------------------------");
log.info("--------------------" + personsPositions.getPersonOrder() + "---------------------");
} else if (Y9OrgEventTypeConst.POSITION_REMOVE_PERSON.equals(event.getEventType())) {
PersonsPositions personsPositions = (PersonsPositions)event.getOrgObj();
log.info("--------------------------岗位删除人员-------------------------------");
log.info("--------------------" + personsPositions.getPersonOrder() + "---------------------");
} else if (Y9OrgEventTypeConst.POSITION_ORDER.equals(event.getEventType())) {
PersonsPositions personsPositions = (PersonsPositions)event.getOrgObj();
log.info("--------------------------岗位-人员排序-------------------------------");
log.info("--------------------" + personsPositions.getPositionOrder() + "---------------------");
log.info("--------------------" + personsPositions.getPersonOrder() + "---------------------");
} else if (Y9OrgEventTypeConst.SYNC.equals(event.getEventType())) {
SyncOrgUnits syncOrgUnits = (SyncOrgUnits)event.getOrgObj();
OrgTypeEnum orgType = syncOrgUnits.getOrgTypeEnum();
switch (orgType) {
case ORGANIZATION:
log.info("--------------------------同步-组织机构-------------------------------");
OrganizationUtil.syncOrganization(syncOrgUnits);
break;
case DEPARTMENT:
log.info("--------------------------同步-部门-------------------------------");
DepartmentUtil.syncDepartment(syncOrgUnits);
break;
case PERSON:
log.info("--------------------------同步-人员-------------------------------");
PersonUtil.syncPerson(syncOrgUnits.getPersons().get(0));
break;
case GROUP:
log.info("--------------------------同步-用户组-------------------------------");
GroupUtil.syncGroup(syncOrgUnits);
break;
case POSITION:
log.info("--------------------------同步-岗位-------------------------------");
PositionUtil.syncPosition(syncOrgUnits);
break;
default:
break;
}
}
}
}
示例代码
码云地址:https://gitee.com/risesoft-y9/y9-core
该示例代码路径地址:https://gitee.com/risesoft-y9/y9-core/tree/main/y9-digitalbase-example/risenet-y9demo-sync-kafka