Переглянути джерело

feature: 数据同步
1.完善注释及代码格式化

luo.yibo@datuai.com 1 рік тому
батько
коміт
b0f54aad93

+ 4 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/bo/RemoteTeamBo.java

@@ -61,4 +61,8 @@ public class RemoteTeamBo implements Serializable {
      * 租户Id
      */
     private String tenantId;
+    /**
+     * 操作员Id
+     */
+    private Long operatorId;
 }

+ 4 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/vo/RemoteTeamVo.java

@@ -53,4 +53,8 @@ public class RemoteTeamVo implements Serializable {
      * 原始数据ID
      */
     private String otherId;
+    /**
+     * 操作员Id
+     */
+    private Long operatorId;
 }

+ 9 - 4
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteDeptBo.java

@@ -1,9 +1,5 @@
 package org.dromara.system.api.domain.bo;
 
-import jakarta.validation.constraints.Email;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
 import lombok.Data;
 
 import java.io.Serial;
@@ -121,4 +117,13 @@ public class RemoteDeptBo implements Serializable {
      * 部门状态
      */
     private String delFlag;
+
+    /**
+     * 创建者
+     */
+    private Long createdBy;
+    /**
+     * 更新者
+     */
+    private Long updatedBy;
 }

+ 2 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java

@@ -113,6 +113,7 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
     public R<Object> insertDept(RemoteDeptBo remoteDeptBo) {
         String message = MessageFormat.format("[增加部门失败]-[{0}]", JSONUtil.toJsonStr(remoteDeptBo));
         SysDeptBo deptBo = BeanUtil.copyProperties(remoteDeptBo, SysDeptBo.class);
+        deptBo.setCreateBy(remoteDeptBo.getCreatedBy());
         SysDeptVo vo = sysDeptService.insertDeptBo(deptBo);
         if(vo!=null){
             RemoteDeptVo remoteDeptVo = BeanUtil.copyProperties(vo, RemoteDeptVo.class);
@@ -131,8 +132,8 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
     @Override
     public R<Object> updateDept(RemoteDeptBo remoteDeptBo) {
         String message = MessageFormat.format("[修改部门失败]-[{0}]", JSONUtil.toJsonStr(remoteDeptBo));
-        //SysDeptBo deptBo = MapstructUtils.convert(remoteDeptBo, SysDeptBo.class);
         SysDeptBo deptBo = BeanUtil.copyProperties(remoteDeptBo, SysDeptBo.class);
+        deptBo.setUpdateBy(remoteDeptBo.getUpdatedBy());
         return sysDeptService.updateDept(deptBo) > 0 ? R.ok() : R.fail(message);
     }
 

+ 8 - 1
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/strategy/impl/TrainClassStrategyImpl.java

@@ -125,8 +125,10 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
             remoteDeptBo = new RemoteDeptBo();
             // 班级对应的部门默认类型为 05-班级
             remoteDeptBo.setDeptType(DefaultConstants.CLASS_DEPT_TYPE);
+            remoteDeptBo.setCreatedBy(resourceDept.getOperatorId());
         } else {
             remoteDeptBo = BeanUtil.copyProperties(remoteDeptVo, RemoteDeptBo.class);
+            remoteDeptBo.setUpdatedBy(resourceDept.getOperatorId());
         }
         remoteDeptBo.setDeptName(resourceDept.getDept_name());
         remoteDeptBo.setOtherId(resourceDept.getDept_id());
@@ -171,8 +173,9 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
         remoteDeptBo.setParentId(rootId);
         remoteDeptBo.setDeptType(DefaultConstants.YEAR_DEPT_TYPE);
         if (StringUtils.isNotEmpty(resourceDept.getTenantId())) {
-            remoteDeptBo.setTenantId(remoteDeptBo.getTenantId());
+            remoteDeptBo.setTenantId(resourceDept.getTenantId());
         }
+        remoteDeptBo.setCreatedBy(resourceDept.getOperatorId());
         R<Object> result = syncRemoteDeptService.insertDept(remoteDeptBo);
         if (result.getCode() == R.SUCCESS) {
             return (RemoteDeptVo) result.getData();
@@ -180,6 +183,8 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
         return null;
     }
 
+
+    //region 培训班级转团客
     /**
      * 处理单个班级,将班级转换成酒店系统的团客信息后入库
      *
@@ -225,7 +230,9 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
         remoteTeamBo.setRemark("");
         remoteTeamBo.setOtherId(resourceDept.getDept_id());
         remoteTeamBo.setTenantId(resourceDept.getTenantId());
+        remoteTeamBo.setOperatorId(resourceDept.getOperatorId());
 
         return R.ok(remoteTeamBo);
     }
+    //endregion
 }

+ 4 - 0
ruoyi-server/ruoyi-server-common/src/main/java/org/dromara/server/common/domain/bo/ResourceDept.java

@@ -98,5 +98,9 @@ public class ResourceDept implements Serializable {
      * 计划人数
      */
     private Integer planCount;
+        /**
+     * 操作员Id
+     */
+    private Long operatorId;
 
 }

+ 6 - 4
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/controller/SyncTest.java

@@ -1,6 +1,7 @@
 package org.dromara.server.sync.controller;
 
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
 import org.dromara.server.sync.service.SyncTrainService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -23,11 +24,12 @@ public class SyncTest {
     private final SyncTrainService syncTrainService;
 
     @GetMapping("/sync/trainee")
-    public void syncTrainee() {
-        syncTrainService.syncTrainee();
+    public R<Void> syncTrainee() {
+        return syncTrainService.syncTrainee() ? R.ok() : R.fail();
     }
+
     @GetMapping("/sync/train/class")
-    public void syncTrainClass() {
-        syncTrainService.syncTrainClass();
+    public R<Void> syncTrainClass() {
+        return syncTrainService.syncTrainClass() ? R.ok() : R.fail();
     }
 }

+ 97 - 79
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncTrainService.java

@@ -1,8 +1,12 @@
 package org.dromara.server.sync.service;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.exception.ServiceException;
 import org.dromara.server.base.service.dept.strategy.SyncDeptStrategyContent;
 import org.dromara.server.base.service.user.strategy.SyncUserStrategyContent;
 import org.dromara.server.common.constant.DefaultConstants;
@@ -34,100 +38,113 @@ public class SyncTrainService {
     private final SyncDeptStrategyContent syncDeptStrategyContent;
     private final SyncUserStrategyContent syncUserStrategyContent;
 
-    public void syncTrainClass() {
-        // HttpRequest req = CreateHttpRequest.createRequest();
-        // req.body(getQueryBodyForClass());
-        //
-        // SyncFullDataBo dataBo = JSONUtil.toBean(req.execute().body(), SyncFullDataBo.class);
-        //
+    public Boolean syncTrainClass() {
+        HttpRequest req = CreateHttpRequest.createRequest();
+        req.body(getQueryBodyForClass());
+        try (HttpResponse res = req.execute()) {
+            SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
+            List<ResourceDept> resourceDeptlist = new ArrayList<>();
+            for (List<String> list : dataBo.getResponseParam().getResourceInfos().get(0).getDataInfo()) {
+                ResourceDept dept = convertClassToDept(list);
+                resourceDeptlist.add(dept);
+            }
+            log.info("[全量获取到的培训班级数据]-[{}]条-[{}]", resourceDeptlist.size(), JSONUtil.toJsonStr(dataBo));
+            syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
+            return true;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new ServiceException(e.getMessage());
+        }
+
+        // region 模拟测试数据
         // List<ResourceDept> resourceDeptlist = new ArrayList<>();
-        // for (List<String> list : dataBo.getResponseParam().getResourceInfos().get(0).getDataInfo()) {
-        //     ResourceDept dept = convertClassToDept(list);
-        //     resourceDeptlist.add(dept);
-        // }
-        // log.info("[全量获取到的培训班级数据]-[{}]条-[{}]", resourceDeptlist.size(), JSONUtil.toJsonStr(dataBo));
+        // ResourceDept dept = new ResourceDept();
+        // resourceDeptlist.add(dept);
+        // dept.setDept_id("1828720861385904129");
+        // dept.setDept_name("2024年秋季学期乡镇长进修班");
+        // dept.setYear(2004);
+        // dept.setSemester("1");
         //
-        // region 模拟测试数据
-        List<ResourceDept> resourceDeptlist = new ArrayList<>();
-        ResourceDept dept = new ResourceDept();
-        resourceDeptlist.add(dept);
-        dept.setDept_id("1828720861385904129");
-        dept.setDept_name("2024年秋季学期乡镇长进修班");
-        dept.setYear(2004);
-        dept.setSemester("1");
-
-        dept.setPayBegin(DateUtil.parse("2024-08-28 00:00:00"));
-        dept.setCheckDate(DateUtil.parseDate("2024-08-28 00:00:00"));
-        dept.setBeginDate(DateUtil.parseDate("2024-08-31 00:00:00"));
-        dept.setEndDate(DateUtil.parse("2024-09-30 00:00:00", "yyyy-MM-dd HH:mm:ss"));
-        dept.setPayEnd(DateUtil.parse("2024-09-30 00:00:00", "yyyy-MM-dd HH:mm:ss"));
-        dept.setChooseRoom("0");
-        dept.setCanEat("1");
-        dept.setPayCheck("0");
-        dept.setPlanCount(100);
-        dept.setDept_num("9");
-        dept.setTenantId(DefaultConstants.TENANT_ID);
+        // dept.setPayBegin(DateUtil.parse("2024-08-28 00:00:00"));
+        // dept.setCheckDate(DateUtil.parseDate("2024-08-28 00:00:00"));
+        // dept.setBeginDate(DateUtil.parseDate("2024-08-31 00:00:00"));
+        // dept.setEndDate(DateUtil.parse("2024-09-30 00:00:00", "yyyy-MM-dd HH:mm:ss"));
+        // dept.setPayEnd(DateUtil.parse("2024-09-30 00:00:00", "yyyy-MM-dd HH:mm:ss"));
+        // dept.setChooseRoom("0");
+        // dept.setCanEat("1");
+        // dept.setPayCheck("0");
+        // dept.setPlanCount(100);
+        // dept.setDept_num("9");
+        // dept.setTenantId(DefaultConstants.TENANT_ID);
+        // syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
+        // return true
         // endregion
 
-        syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
     }
 
-    public void syncTrainee() {
-        // List<ResourcePerson> resourcePersonList = new ArrayList<>();
-        // SyncFullDataBo traineeDataBo = new SyncFullDataBo();
-        // HttpRequest req = CreateHttpRequest.createRequest();
-        // req.body(getQueryBodyForTrainee());
-        // // 获取到培训学员数据
-        // try(HttpResponse res = req.execute()) {
-        //     traineeDataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
-        //     resourcePersonList = getResourcePeople(traineeDataBo);
-        // } catch (Exception e){
-        //     log.error(e.getMessage());
-        // }
-        // // 获取到的学员与培训班对应关系
-        // List<ResourcePersonDept> resourcePersonDeptList = new ArrayList<>();
-        // req.body(getQueryBodyForClassTrainee());
-        // try (HttpResponse res = req.execute()) {
-        //     SyncFullDataBo classTraineeDataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
-        //     resourcePersonDeptList = getResourcePersonDeptList(classTraineeDataBo);
-        // } catch (Exception e) {
-        //     log.error(e.getMessage());
-        // }
-        // region 模拟测试数据
-        List<ResourcePerson> resourcePersonList = new ArrayList<>();
-        ResourcePerson person = new ResourcePerson();
-        person.setTenantId(DefaultConstants.TENANT_ID);
-        person.setUserId("1799827959791554562");
-        person.setDeptId("1828720861385904129");
-        person.setPostCode(DefaultConstants.TRAINEE_CODE);
-        person.setRealName("赵开羽");
-        person.setSex("1");
-        person.setPhone("18974390367");
-        person.setIdNumber("XP4aO5yhQyNPUctSqDOU9Syh9KUo/DN8");
-        person.setCategory("2");
-        person.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
-        resourcePersonList.add(person);
+    public Boolean syncTrainee() {
+        HttpRequest req = CreateHttpRequest.createRequest();
+        req.body(getQueryBodyForTrainee());
+        // 获取到培训学员数据
+        try (HttpResponse res = req.execute()) {
+            SyncFullDataBo traineeDataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
+            List<ResourcePerson> resourcePersonList = getResourcePeople(traineeDataBo);
 
-        List<ResourcePersonDept> resourcePersonDeptList = new ArrayList<>();
-        ResourcePersonDept personDept = new ResourcePersonDept();
-        personDept.setUserId("1799827959791554562");
-        personDept.setDeptId("1828720861385904129");
-        personDept.setPostCode(DefaultConstants.TRAINEE_CODE);
-        personDept.setDelFlag("0");
-        resourcePersonDeptList.add(personDept);
+            // 获取到的学员与培训班对应关系
+            req.body(getQueryBodyForClassTrainee());
+            try (HttpResponse resTraineeClass = req.execute()) {
+                SyncFullDataBo classTraineeDataBo = JSONUtil.toBean(resTraineeClass.body(), SyncFullDataBo.class);
+                List<ResourcePersonDept> resourcePersonDeptList = getResourcePersonDeptList(classTraineeDataBo);
 
+                getResourcePeople(resourcePersonDeptList, resourcePersonList);
+                log.info("[全量获取到的培训学员数据]-[{}]条-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(traineeDataBo));
+
+                syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+                return true;
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                throw new ServiceException(e.getMessage());
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new ServiceException(e.getMessage());
+        }
+
+        // region 模拟测试数据
+        // List<ResourcePerson> resourcePersonList = new ArrayList<>();
+        // ResourcePerson person = new ResourcePerson();
+        // person.setTenantId(DefaultConstants.TENANT_ID);
+        // person.setUserId("1799827959791554562");
+        // person.setDeptId("1828720861385904129");
+        // person.setPostCode(DefaultConstants.TRAINEE_CODE);
+        // person.setRealName("赵开羽");
+        // person.setSex("1");
+        // person.setPhone("18974390367");
+        // person.setIdNumber("XP4aO5yhQyNPUctSqDOU9Syh9KUo/DN8");
+        // person.setCategory("2");
+        // person.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
+        // resourcePersonList.add(person);
+        //
+        // List<ResourcePersonDept> resourcePersonDeptList = new ArrayList<>();
+        // ResourcePersonDept personDept = new ResourcePersonDept();
+        // personDept.setUserId("1799827959791554562");
+        // personDept.setDeptId("1828720861385904129");
+        // personDept.setPostCode(DefaultConstants.TRAINEE_CODE);
+        // personDept.setDelFlag("0");
+        // resourcePersonDeptList.add(personDept);
+        //
         // personDept = new ResourcePersonDept();
         // personDept.setUserId("1799827959791554562");
         // personDept.setDeptId("ffe051b8cf2e45ddb899d596108699d7");
         // personDept.setPostCode(DefaultConstants.TRAINEE_CODE);
         // personDept.setDelFlag("0");
         // resourcePersonDeptList.add(personDept);
-        // endregion
-
-        getResourcePeople(resourcePersonDeptList, resourcePersonList);
-        // log.info("[全量获取到的培训学员数据]-[{}]条-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(traineeDataBo));
+        // getResourcePeople(resourcePersonDeptList, resourcePersonList);
+        //
+        // syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
 
-        syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+        // return true;
+        // endregion
     }
 
     /**
@@ -501,6 +518,7 @@ public class SyncTrainService {
         dept.setDept_num(list.get(34));
         // TODO 2024-11-15 luoyibo 这处租户Id原则上是从全量接口获取,暂时设置为默认值
         dept.setTenantId(DefaultConstants.TENANT_ID);
+        dept.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
         return dept;
     }