فهرست منبع

feature: 同步服务完善
1.全量人员双向同步

luoyb 1 سال پیش
والد
کامیت
ab318094d0

+ 12 - 12
pom.xml

@@ -85,31 +85,31 @@
             </properties>
             <activation>
                 <!-- 默认环境 -->
-                <activeByDefault>false</activeByDefault>
+                <activeByDefault>true</activeByDefault>
             </activation>
         </profile>
         <profile>
             <id>prod</id>
             <properties>
-                <profiles.active>prod</profiles.active>
-                <nacos.server>10.32.23.157:8848</nacos.server>
-                <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
-                <nacos.config.group>DEFAULT_GROUP</nacos.config.group>
-                <nacos.username>nacos</nacos.username>
-                <nacos.password>nacos</nacos.password>
-                <logstash.address>10.32.23.157:4560</logstash.address>
-                <!-- 党校本地环境 -->
 <!--                <profiles.active>prod</profiles.active>-->
-<!--                <nacos.server>172.16.137.72:8848</nacos.server>-->
+<!--                <nacos.server>10.32.23.157:8848</nacos.server>-->
 <!--                <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>-->
 <!--                <nacos.config.group>DEFAULT_GROUP</nacos.config.group>-->
 <!--                <nacos.username>nacos</nacos.username>-->
 <!--                <nacos.password>nacos</nacos.password>-->
-<!--                <logstash.address>172.16.137.72:4560</logstash.address>-->
+<!--                <logstash.address>10.32.23.157:4560</logstash.address>-->
+                <!-- 党校本地环境 -->
+                <profiles.active>prod</profiles.active>
+                <nacos.server>172.16.137.72:8848</nacos.server>
+                <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
+                <nacos.config.group>DEFAULT_GROUP</nacos.config.group>
+                <nacos.username>nacos</nacos.username>
+                <nacos.password>nacos</nacos.password>
+                <logstash.address>172.16.137.72:4560</logstash.address>
             </properties>
             <activation>
                 <!-- 默认环境 -->
-                <activeByDefault>true</activeByDefault>
+                <activeByDefault>false</activeByDefault>
             </activation>
         </profile>
     </profiles>

+ 7 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -160,4 +160,11 @@ public interface RemoteUserService {
      * @return 用户信息
      */
     RemoteUserVo selectUserVoByUserName(String userName);
+
+    /**
+     * 根据Id查询用户信息
+     * @param userId 用户Id
+     * @return 用户信息视图
+     */
+    RemoteUserVo selectUserById(Long userId);
 }

+ 10 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -381,6 +381,16 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         SysUserVo vo = userService.selectUserVoByUserName(userName);
         return BeanUtil.copyProperties(vo, RemoteUserVo.class);
     }
+    /**
+     * 根据Id查询用户信息
+     * @param userId 用户Id
+     * @return 用户信息视图
+     */
+    @Override
+    public RemoteUserVo selectUserById(Long userId) {
+        SysUserVo vo = userService.selectUserById(userId);
+        return BeanUtil.copyProperties(vo, RemoteUserVo.class);
+    }
 
     private void setUserDept(SysUserBo bo, RemoteUserBo remoteBo){
         List<UserDeptBo> userDeptBoList = new ArrayList<>();

+ 46 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/consumer/SyncKafkaConsumer.java

@@ -0,0 +1,46 @@
+package org.dromara.server.mq.consumer;
+
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.dromara.common.message.kafka.domain.KafkaMessage;
+import org.dromara.server.mq.event.kafka.EventStrategyContext;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * name: SyncKafkaConsumer
+ * package: org.dromara.server.mq.consumer
+ * description: 本地kafka消息消费
+ * date: 2024-10-26 11:12:56 11:12
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@RequiredArgsConstructor
+@Slf4j
+@Component
+@ConditionalOnExpression("'local'.equals('${locationFlag}')")
+public class SyncKafkaConsumer {
+    private final EventStrategyContext eventStrategyContext;
+
+    @KafkaListener(topics = "eventBus", groupId = "test-group-id")
+    public void kafkaReceiveHandler(ConsumerRecord<String, String> record) {
+        KafkaMessage<?> receiveMsg = JSONUtil.toBean(record.value(), KafkaMessage.class);
+        String eventType = receiveMsg.getHeader().getEventType();
+        String sender = receiveMsg.getHeader().getSender();
+        JSONObject eventMsg = JSONUtil.parseObj(receiveMsg.getBody());
+        if (ObjUtil.notEqual(sender, "005")) {
+            try {
+                eventStrategyContext.doMsgHandle(eventType, eventMsg);
+            } catch (Exception e) {
+                log.error("[业中kafka消息处理失败]-[消息:{}-[错误:{}]", receiveMsg, e.getMessage());
+            }
+        }
+    }
+}

+ 46 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/PushUserEventStrategyImpl.java

@@ -0,0 +1,46 @@
+package org.dromara.server.mq.event.kafka.impl.cloud;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.constant.CloudMqEventConstants;
+import org.dromara.server.mq.event.kafka.IEventStrategy;
+import org.dromara.system.api.RemoteDeptService;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.bo.RemoteDeptBo;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+import org.dromara.system.api.domain.vo.RemoteDeptVo;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName PushUserEventStrategyImpl
+ * @Description 处理用户消息队列
+ * @Author luoyibo
+ * @Date 2024-11-12 11:52
+ * @Version 1.0
+ * @since jdk17
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(CloudMqEventConstants.USER)
+public class PushUserEventStrategyImpl implements IEventStrategy {
+    @DubboReference
+    private final RemoteUserService remoteUserService;
+
+    @Override
+    public void doMsgHandle(JSONObject data) {
+        RemoteUserBo remoteBo = JSONUtil.toBean(data, RemoteUserBo.class);
+        log.info("[处理云端用户同步请求]-[用户信息:{}]", JSONUtil.toJsonStr(remoteBo));
+        RemoteUserVo remoteVo = remoteUserService.selectUserById(remoteBo.getUserId());
+        if(ObjectUtil.isEmpty(remoteVo)){
+            remoteUserService.insertUser(remoteBo);
+        } else {
+            remoteUserService.updateUser(remoteBo);
+        }
+
+    }
+}

+ 27 - 27
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncHrService.java

@@ -45,7 +45,7 @@ public class SyncHrService {
      */
     public Boolean syncDept() {
         HttpRequest req = CreateHttpRequest.createRequest();
-        req.body(getQueryBodyForDept());
+        //req.body(getQueryBodyForDept());
 
         // try (HttpResponse res = req.execute()) {
         //     SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
@@ -61,7 +61,7 @@ public class SyncHrService {
         ResourceDept dept = new ResourceDept();
         dept.setParent_id("001000000000");
         dept.setDept_id("1850785191038996481");
-        dept.setDept_name("双向同步测试");
+        dept.setDept_name("双向同步测试部门");
         dept.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
         dept.setTenantId(defaultConfig.getTenantId());
         resourceDeptlist.add(dept);
@@ -78,33 +78,33 @@ public class SyncHrService {
      */
     public Boolean syncTeacher() {
         HttpRequest req = CreateHttpRequest.createRequest();
-        req.body(getQueryBodyForTeacher());
-        try (HttpResponse res = req.execute()) {
-            SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
-            List<ResourcePerson> resourcePersonList = getResourcePeopleList(dataBo);
-            log.info("[全量获取到的教职工数据]-[共{}条]-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(dataBo));
-            syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TEACHER);
-            return true;
-        } catch (Exception e) {
-            throw new ServiceException(e.getMessage());
-        }
+        //req.body(getQueryBodyForTeacher());
+        //try (HttpResponse res = req.execute()) {
+        //    SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
+        //    List<ResourcePerson> resourcePersonList = getResourcePeopleList(dataBo);
+        //    log.info("[全量获取到的教职工数据]-[共{}条]-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(dataBo));
+        //    syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TEACHER);
+        //    return true;
+        //} catch (Exception e) {
+        //    throw new ServiceException(e.getMessage());
+        //}
         // region 模拟测试数据
-        // List<ResourcePerson> resourcePersonList = new ArrayList<>();
-        // ResourcePerson person = new ResourcePerson();
-        // person.setUserId("00314200");
-        // person.setDeptId("001001001000");
-        // person.setPostCode(DefaultConstants.TEACHER_CODE);
-        // person.setRealName("康重文");
-        // person.setSex("1");
-        // person.setPhone("13875850616");
-        // person.setCategory("1");
-        // person.setRemark("");
-        // person.setUserState("on");
-        // person.setTenantId(defaultConfig.getTenantId());
-        // resourcePersonList.add(person);
-        // syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TEACHER);
+         List<ResourcePerson> resourcePersonList = new ArrayList<>();
+         ResourcePerson person = new ResourcePerson();
+         person.setUserId("1850785191038996482");
+         person.setDeptId("1850785191038996481");
+         person.setPostCode(DefaultConstants.TEACHER_CODE);
+         person.setRealName("双向同步测试人员");
+         person.setSex("1");
+         person.setPhone("18938022014");
+         person.setCategory("1");
+         person.setRemark("");
+         person.setUserState("on");
+         person.setTenantId(defaultConfig.getTenantId());
+         resourcePersonList.add(person);
+         syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TEACHER);
+         return true;
         // endregion
-
     }
 
     /**