Преглед изворни кода

feature: 数据同步
1.同步教务班级时同时同步到客房系统

luo.yibo@datuai.com пре 1 година
родитељ
комит
7b16736afc
14 измењених фајлова са 446 додато и 36 уклоњено
  1. 64 0
      ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/bo/RemoteTeamBo.java
  2. 56 0
      ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/domain/vo/RemoteTeamVo.java
  3. 38 0
      ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/service/RemoteTeamService.java
  4. 7 13
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/bo/KfTeamBo.java
  5. 17 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/convert/KfTeamVoConvert.java
  6. 17 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/convert/RemoteTeamBoConvert.java
  7. 94 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteTeamServiceImpl.java
  8. 10 4
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfTeamService.java
  9. 12 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfTeamServiceImpl.java
  10. 6 0
      ruoyi-server/ruoyi-server-base/pom.xml
  11. 44 5
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/SyncRemoteDeptService.java
  12. 71 9
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/strategy/impl/TrainClassStrategyImpl.java
  13. 4 0
      ruoyi-server/ruoyi-server-common/src/main/java/org/dromara/server/common/domain/bo/ResourceDept.java
  14. 6 5
      ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncTrainService.java

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

@@ -0,0 +1,64 @@
+package org.dromara.hotel.api.domain.bo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * name: ConsumeBo
+ * package: org.dromara.backstage.consumption.domain.bo
+ * description: 酒店系统团客远程业务对象
+ * date: 2024-09-04 08:53:02 08:53
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@Data
+@Accessors(chain = true)
+public class RemoteTeamBo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 4558823680511276696L;
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 客团名称
+     */
+    private String name;
+
+    /**
+     * 入住时间
+     */
+    private Date startTime;
+
+    /**
+     * 退住时间
+     */
+    private Date endTime;
+
+    /**
+     * 预计人数
+     */
+    private Long planQuantity;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 原始数据ID
+     */
+    private String otherId;
+
+    /**
+     * 租户Id
+     */
+    private String tenantId;
+}

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

@@ -0,0 +1,56 @@
+package org.dromara.hotel.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 客团信息视图对象 t_kf_team
+ *
+ * @author LionLi
+ * @date 2024-11-15
+ */
+@Data
+public class RemoteTeamVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 客团名称
+     */
+    private String name;
+
+    /**
+     * 入住时间
+     */
+    private Date startTime;
+
+    /**
+     * 退住时间
+     */
+    private Date endTime;
+
+    /**
+     * 预计人数
+     */
+    private Long planQuantity;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 原始数据ID
+     */
+    private String otherId;
+}

+ 38 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/service/RemoteTeamService.java

@@ -0,0 +1,38 @@
+package org.dromara.hotel.api.service;
+
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
+import org.dromara.hotel.api.domain.vo.RemoteTeamVo;
+
+/**
+ * @ClassName RemoteConsumeService
+ * @Description 酒店系统团客远程服务接口
+ * @Author luoyibo
+ * @Date 2024-11-12 12:40
+ * @Version 1.0
+ * @since jdk17
+ */
+public interface RemoteTeamService {
+
+    /**
+     * 增加团客信息
+     * @param remoteBo 团客业务对象
+     * @return 修改结果
+     */
+    R<ErrorInfo> insertTeamByBo(RemoteTeamBo remoteBo);
+
+    /**
+     * 修改团客信息
+     * @param remoteBo 团客业务对象
+     * @return 修改结果
+     */
+    R<ErrorInfo> updateTeamByBo(RemoteTeamBo remoteBo);
+
+    /**
+     * 查询团客信息
+     * @param remoteBo 团客业务对象
+     * @return 团客信息
+     */
+    R<RemoteTeamVo> selectTeamByBo(RemoteTeamBo remoteBo);
+}

+ 7 - 13
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/bo/KfTeamBo.java

@@ -1,15 +1,12 @@
 package org.dromara.hotel.domain.bo;
 
-import org.dromara.hotel.domain.KfTeam;
-import org.dromara.common.mybatis.core.domain.BaseEntity;
-import org.dromara.common.core.validate.AddGroup;
-import org.dromara.common.core.validate.EditGroup;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.*;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.hotel.domain.KfTeam;
+
 import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 /**
  * 客团信息业务对象 t_kf_team
@@ -25,44 +22,41 @@ public class KfTeamBo extends BaseEntity {
     /**
      * 主键
      */
-    @NotNull(message = "主键不能为空", groups = { EditGroup.class })
     private Long id;
 
     /**
      * 客团名称
      */
-    @NotBlank(message = "客团名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String name;
 
     /**
      * 入住时间
      */
-    @NotNull(message = "入住时间不能为空", groups = { AddGroup.class, EditGroup.class })
     private Date startTime;
 
     /**
      * 退住时间
      */
-    @NotNull(message = "退住时间不能为空", groups = { AddGroup.class, EditGroup.class })
     private Date endTime;
 
     /**
      * 预计人数
      */
-    @NotNull(message = "预计人数不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long planQuantity;
 
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
     /**
      * 原始数据ID
      */
-    @NotBlank(message = "原始数据ID不能为空", groups = { AddGroup.class, EditGroup.class })
     private String otherId;
 
+    /**
+     * 租户Id
+     */
+    private String tenantId;
 
 }

+ 17 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/convert/KfTeamVoConvert.java

@@ -0,0 +1,17 @@
+package org.dromara.hotel.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.hotel.api.domain.vo.RemoteTeamVo;
+import org.dromara.hotel.domain.vo.KfTeamVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 租户转换器
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface KfTeamVoConvert extends BaseMapper<KfTeamVo, RemoteTeamVo> {
+
+}

+ 17 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/domain/convert/RemoteTeamBoConvert.java

@@ -0,0 +1,17 @@
+package org.dromara.hotel.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
+import org.dromara.hotel.domain.bo.KfTeamBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 租户转换器
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface RemoteTeamBoConvert extends BaseMapper<RemoteTeamBo, KfTeamBo> {
+
+}

+ 94 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteTeamServiceImpl.java

@@ -0,0 +1,94 @@
+package org.dromara.hotel.dubbo;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
+import org.dromara.hotel.api.domain.vo.RemoteTeamVo;
+import org.dromara.hotel.api.service.RemoteTeamService;
+import org.dromara.hotel.domain.bo.KfTeamBo;
+import org.dromara.hotel.domain.vo.KfTeamVo;
+import org.dromara.hotel.service.IKfTeamService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName RemoteOrderServiceImpl
+ * @Description 酒店团客远程服务实现
+ * @Author luoyibo
+ * @Date 2024-11-14 20:31
+ * @Version 1.0
+ * @since jdk17
+ */
+
+@Slf4j
+@Service
+@DubboService
+@RequiredArgsConstructor
+public class RemoteTeamServiceImpl implements RemoteTeamService {
+    private final IKfTeamService kfTeamService;
+
+    /**
+     * 增加团客信息
+     * @param remoteBo 团客业务对象
+     * @return 增加结果
+     */
+    @Override
+    public R<ErrorInfo> insertTeamByBo(RemoteTeamBo remoteBo) {
+        try{
+            KfTeamBo bo = MapstructUtils.convert(remoteBo, KfTeamBo.class);
+            boolean flag = kfTeamService.insertByBo(bo);
+            if(flag){
+                return R.ok("增加团客信息成功");
+            }
+            return R.fail("增加团客信息失败");
+        }catch (Exception e){
+            log.error("增加团客信息失败-{}", JsonUtils.toJsonString(remoteBo));
+            return R.fail("增加团客信息失败");
+        }
+    }
+
+    /**
+     * 修改团客信息
+     * @param remoteBo 团客业务对象
+     * @return 修改结果
+     */
+    @Override
+    public R<ErrorInfo> updateTeamByBo(RemoteTeamBo remoteBo) {
+        try{
+            KfTeamBo bo = MapstructUtils.convert(remoteBo, KfTeamBo.class);
+            boolean flag = kfTeamService.updateByBo(bo);
+            if(flag){
+                return R.ok("修改团客信息成功");
+            }
+            return R.fail("修改团客信息失败");
+        }catch (Exception e){
+            log.error("修改团客信息失败-{}", JsonUtils.toJsonString(remoteBo));
+            return R.fail("修改团客信息失败");
+        }
+    }
+
+    /**
+     * 查询已有团客信息
+     * @param remoteBo 团客业务对象
+     * @return 团客信息
+     */
+    @Override
+    public R<RemoteTeamVo> selectTeamByBo(RemoteTeamBo remoteBo) {
+        try {
+            KfTeamBo bo = MapstructUtils.convert(remoteBo, KfTeamBo.class);
+            KfTeamVo vo = kfTeamService.selectTeamByBo(bo);
+            if (ObjectUtil.isNotEmpty(vo)) {
+                return R.ok(MapstructUtils.convert(vo, RemoteTeamVo.class));
+            }
+            return R.fail("无此团客信息");
+        } catch (Exception e){
+            log.error("获取指定团客信息失败-{}", JsonUtils.toJsonString(remoteBo));
+            return R.fail("获取团客信息失败");
+        }
+    }
+}

+ 10 - 4
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfTeamService.java

@@ -1,10 +1,9 @@
 package org.dromara.hotel.service;
 
-import org.dromara.hotel.domain.KfTeam;
-import org.dromara.hotel.domain.vo.KfTeamVo;
-import org.dromara.hotel.domain.bo.KfTeamBo;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.hotel.domain.bo.KfTeamBo;
+import org.dromara.hotel.domain.vo.KfTeamVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -66,4 +65,11 @@ public interface IKfTeamService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 查询团客信息
+     * @param bo 团客业务对象
+     * @return 团客信息
+     */
+    KfTeamVo selectTeamByBo(KfTeamBo bo);
 }

+ 12 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfTeamServiceImpl.java

@@ -145,4 +145,16 @@ public class KfTeamServiceImpl implements IKfTeamService {
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    /**
+     * 查询团客信息
+     * @param bo 团客业务对象
+     * @return 团客信息
+     */
+    @Override
+    public KfTeamVo selectTeamByBo(KfTeamBo bo) {
+        LambdaQueryWrapper<KfTeam> lqw = this.buildQueryWrapper(bo);
+
+        return baseMapper.selectVoOne(lqw);
+    }
 }

+ 6 - 0
ruoyi-server/ruoyi-server-base/pom.xml

@@ -47,5 +47,11 @@
             <version>2.2.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-hotel</artifactId>
+            <version>2.2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 44 - 5
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/SyncRemoteDeptService.java

@@ -4,6 +4,10 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
+import org.dromara.hotel.api.domain.vo.RemoteTeamVo;
+import org.dromara.hotel.api.service.RemoteTeamService;
 import org.dromara.system.api.RemoteDeptService;
 import org.dromara.system.api.domain.bo.RemoteDeptBo;
 import org.dromara.system.api.domain.vo.RemoteDeptVo;
@@ -26,6 +30,8 @@ public class SyncRemoteDeptService {
 
     @DubboReference
     private final RemoteDeptService remoteDeptService;
+    @DubboReference
+    private final RemoteTeamService remoteTeamService;
 
     /**
      * 根据第三方对接的唯一标识符查询对应的部门信息
@@ -34,7 +40,7 @@ public class SyncRemoteDeptService {
      * @param tenantId 租户Id
      * @return 部门信息
      */
-    public RemoteDeptVo selectDeptByOtherId(String otherId, String tenantId){
+    public RemoteDeptVo selectDeptByOtherId(String otherId, String tenantId) {
         return remoteDeptService.selectDeptByOtherId(otherId, tenantId);
     }
 
@@ -45,11 +51,13 @@ public class SyncRemoteDeptService {
      * @param tenantId 租户Id
      * @return 部门信息
      */
-    public RemoteDeptVo selectAllDeptByOtherId(String otherId, String tenantId){
+    public RemoteDeptVo selectAllDeptByOtherId(String otherId, String tenantId) {
         return remoteDeptService.selectVoAllByOtherId(otherId, tenantId);
     }
+
     /**
      * 根据父节点Id和名称查询部门
+     *
      * @param parentId 父节点
      * @param deptName 名称
      * @return 部门信息
@@ -57,13 +65,14 @@ public class SyncRemoteDeptService {
     public RemoteDeptVo selectDeptByParentIdAndName(Long parentId, String deptName) {
         return remoteDeptService.selectDeptByParentIdAndName(parentId, deptName);
     }
+
     /**
      * 增加新部门
      *
      * @param remoteDeptBo 部门业务模型
      * @return 增加结果
      */
-    public R<Object> insertDept(RemoteDeptBo remoteDeptBo){
+    public R<Object> insertDept(RemoteDeptBo remoteDeptBo) {
         return remoteDeptService.insertDept(remoteDeptBo);
     }
 
@@ -73,7 +82,7 @@ public class SyncRemoteDeptService {
      * @param remoteDeptBo 部门业务模型
      * @return 增加结果
      */
-    public R<Object> updateDept(RemoteDeptBo remoteDeptBo){
+    public R<Object> updateDept(RemoteDeptBo remoteDeptBo) {
         return remoteDeptService.updateDept(remoteDeptBo);
     }
 
@@ -83,7 +92,37 @@ public class SyncRemoteDeptService {
      * @param otherId 第三方对接后的唯一标识符
      * @return 删除结果
      */
-    public R<Object> deleteDeptByOtherId(String otherId){
+    public R<Object> deleteDeptByOtherId(String otherId) {
         return remoteDeptService.deleteDeptByOtherId(otherId);
     }
+
+    /**
+     * 查询团客信息
+     * @param otherId 唯一标识
+     * @param tenantId 租户Id
+     * @return 团客信息
+     */
+
+    public R<RemoteTeamVo> selectTeamByOtherId(String otherId, String tenantId) {
+        RemoteTeamBo remoteBo = new RemoteTeamBo().setOtherId(otherId).setTenantId(tenantId);
+
+        return remoteTeamService.selectTeamByBo(remoteBo);
+    }
+    /**
+     * 修改团客信息
+     * @param remoteTeamBo 团客业务对象
+     * @return 修改结果
+     */
+
+    public R<ErrorInfo> updateRemoteTeam(RemoteTeamBo remoteTeamBo) {
+        return remoteTeamService.updateTeamByBo(remoteTeamBo);
+    }
+    /**
+     * 增加团客信息
+     * @param remoteTeamBo 团客业务对象
+     * @return 增加结果
+     */
+    public R<ErrorInfo> insertRemoteTeam(RemoteTeamBo remoteTeamBo) {
+        return remoteTeamService.insertTeamByBo(remoteTeamBo);
+    }
 }

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

@@ -6,8 +6,11 @@ import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
+import org.dromara.hotel.api.domain.vo.RemoteTeamVo;
 import org.dromara.server.base.service.dept.SyncRemoteDeptService;
 import org.dromara.server.base.service.dept.strategy.ISyncDeptStrategy;
 import org.dromara.server.common.constant.DefaultConstants;
@@ -41,6 +44,7 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
     @Override
     public void syncDept(List<ResourceDept> deptList) {
         List<String> syncMessage = new ArrayList<>();
+        List<String> syncTeamMessage = new ArrayList<>();
         deptList.forEach(resourceDept -> {
             R<Object> result = syncDept(resourceDept);
             if (result.getCode() == R.SUCCESS) {
@@ -48,8 +52,17 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
             } else {
                 syncMessage.add(MessageFormat.format("[同步培训班级失败]-[{0}]-[{1}]", JsonUtils.toJsonString(resourceDept), result.getMsg()));
             }
+            // 增加了同时导入客房系统的团客信息
+            R<ErrorInfo> resultTeam = syncTeam(resourceDept);
+            if (R.isSuccess(resultTeam)) {
+                syncTeamMessage.add(MessageFormat.format("[同步客房团客成功]-[{0}]", JsonUtils.toJsonString(resourceDept)));
+            } else {
+                syncTeamMessage.add(
+                    MessageFormat.format("[同步客房团客失败]-[{0}]-[{1}]", JsonUtils.toJsonString(resourceDept), resultTeam.getMsg()));
+            }
         });
         syncMessage.forEach(System.out::println);
+        syncTeamMessage.forEach(System.out::println);
     }
 
     /**
@@ -67,7 +80,7 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
         }
         String otherId = resourceDept.getDept_id();
         RemoteDeptVo remoteDeptVo = syncRemoteDeptService.selectDeptByOtherId(otherId, tenantId);
-        //将班级组装成入库的对模型
+        // 将班级组装成入库的对模型
         R<RemoteDeptBo> result = setRemoteDeptBo(resourceDept, remoteDeptVo);
         if (result.getCode() == R.SUCCESS) {
             if (remoteDeptVo != null) {
@@ -90,27 +103,27 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
      * @return 写库班级业务数据
      */
     private R<RemoteDeptBo> setRemoteDeptBo(ResourceDept resourceDept, RemoteDeptVo remoteDeptVo) {
-        //检查年份对应的部门,年份的父节点固定为127->校本部
+        // 检查年份对应的部门,年份的父节点固定为127->校本部
         Long rootId = DefaultConstants.TRAIN_PARENT_DEPT_ID;
         RemoteDeptVo yearDeptVo = doYearOrSemesterDept(resourceDept, rootId, 0);
         if (yearDeptVo == null) {
-            //处理年份对应的班级失败,直接返回失败
+            // 处理年份对应的班级失败,直接返回失败
             return R.fail("创建年份对应部门失败");
         }
-        //检查学期对应的部门
+        // 检查学期对应的部门
         RemoteDeptVo semesterDeptVo = doYearOrSemesterDept(resourceDept, yearDeptVo.getDeptId(), 1);
         if (semesterDeptVo == null) {
-            //处理学期对应的班级失败,直接返回失败
+            // 处理学期对应的班级失败,直接返回失败
             return R.fail("创建学期对应部门失败");
         }
 
-        //处理班级对应的部门
+        // 处理班级对应的部门
         String deptNum = resourceDept.getDept_num();
         String tenantId = resourceDept.getTenantId();
         RemoteDeptBo remoteDeptBo;
         if (ObjUtil.isEmpty(remoteDeptVo)) {
             remoteDeptBo = new RemoteDeptBo();
-            //班级对应的部门默认类型为 05-班级
+            // 班级对应的部门默认类型为 05-班级
             remoteDeptBo.setDeptType(DefaultConstants.CLASS_DEPT_TYPE);
         } else {
             remoteDeptBo = BeanUtil.copyProperties(remoteDeptVo, RemoteDeptBo.class);
@@ -146,13 +159,13 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
      * @return 部门
      */
     private RemoteDeptVo doYearOrSemesterDept(ResourceDept resourceDept, Long rootId, int flag) {
-        String deptName = flag == 0 ? resourceDept.getYear().toString()+"年" : resourceDept.getSemester();
+        String deptName = flag == 0 ? resourceDept.getYear().toString() + "年" : resourceDept.getSemester();
 
         RemoteDeptVo yearDeptVo = syncRemoteDeptService.selectDeptByParentIdAndName(rootId, deptName);
         if (yearDeptVo != null) {
             return yearDeptVo;
         }
-        //不存在对应的部门,需要增加
+        // 不存在对应的部门,需要增加
         RemoteDeptBo remoteDeptBo = new RemoteDeptBo();
         remoteDeptBo.setDeptName(deptName);
         remoteDeptBo.setParentId(rootId);
@@ -166,4 +179,53 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
         }
         return null;
     }
+
+    /**
+     * 处理单个班级,将班级转换成酒店系统的团客信息后入库
+     *
+     * @param resourceDept 班级数据
+     * @return 处理结果
+     */
+    private R<ErrorInfo> syncTeam(ResourceDept resourceDept) {
+        String otherId = resourceDept.getDept_id();
+        String tenantId = resourceDept.getTenantId();
+        R<RemoteTeamVo> result = syncRemoteDeptService.selectTeamByOtherId(otherId, tenantId);
+        RemoteTeamVo remoteTeamVo = result.getData();
+        R<RemoteTeamBo> getBo = setRemoteTeamBo(resourceDept, remoteTeamVo);
+        if (R.isSuccess(getBo)) {
+            if (R.isSuccess(result)) {
+                return syncRemoteDeptService.updateRemoteTeam(getBo.getData());
+            } else {
+                return syncRemoteDeptService.insertRemoteTeam(getBo.getData());
+            }
+        } else {
+            return R.fail(getBo.getMsg());
+        }
+
+    }
+
+    /**
+     * 组装写库的团客数据
+     *
+     * @param resourceDept 源数据
+     * @param remoteTeamVo 系统已有的团客数据
+     * @return 团客入库业务对象
+     */
+    private R<RemoteTeamBo> setRemoteTeamBo(ResourceDept resourceDept, RemoteTeamVo remoteTeamVo) {
+        RemoteTeamBo remoteTeamBo;
+        if (ObjUtil.isEmpty(remoteTeamVo)) {
+            remoteTeamBo = new RemoteTeamBo();
+        } else {
+            remoteTeamBo = BeanUtil.copyProperties(remoteTeamVo, RemoteTeamBo.class);
+        }
+        remoteTeamBo.setName(resourceDept.getDept_name());
+        remoteTeamBo.setStartTime(resourceDept.getBeginDate());
+        remoteTeamBo.setEndTime(resourceDept.getEndDate());
+        remoteTeamBo.setPlanQuantity(resourceDept.getPlanCount().longValue());
+        remoteTeamBo.setRemark("");
+        remoteTeamBo.setOtherId(resourceDept.getDept_id());
+        remoteTeamBo.setTenantId(resourceDept.getTenantId());
+
+        return R.ok(remoteTeamBo);
+    }
 }

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

@@ -94,5 +94,9 @@ public class ResourceDept implements Serializable {
      * 学期
      */
     private String semester;
+    /**
+     * 计划人数
+     */
+    private Integer planCount;
 
 }

+ 6 - 5
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncTrainService.java

@@ -49,7 +49,7 @@ public class SyncTrainService {
         // }
         // log.info("[全量获取到的培训班级数据]-[{}]条-[{}]", resourceDeptlist.size(), JSONUtil.toJsonStr(dataBo));
         //
-        //region 模拟测试数据
+        // region 模拟测试数据
         List<ResourceDept> resourceDeptlist = new ArrayList<>();
         ResourceDept dept = new ResourceDept();
         resourceDeptlist.add(dept);
@@ -66,9 +66,9 @@ public class SyncTrainService {
         dept.setChooseRoom("0");
         dept.setCanEat("1");
         dept.setPayCheck("0");
-
+        dept.setPlanCount(100);
         dept.setDept_num("9");
-        //endregion
+        // endregion
 
         syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
     }
@@ -489,9 +489,10 @@ public class SyncTrainService {
         dept.setChooseRoom("0");
         dept.setCanEat("1");
         dept.setPayCheck(list.get(27));
-
+        dept.setPlanCount(Integer.parseInt(list.get(10)));
         dept.setDept_num(list.get(34));
-
+        // TODO 2024-11-15 luoyibo 这处租户Id原则上是从全量接口获取,暂时设置为默认值
+        dept.setTenantId(DefaultConstants.TENANT_ID);
         return dept;
     }