Explorar el Código

报销数据同步
基础数据同步

verguenza hace 5 años
padre
commit
8a00e44ce1
Se han modificado 27 ficheros con 1632 adiciones y 215 borrados
  1. 10 0
      src/main/java/com/galaxis/manatee/constant/StringConstant.java
  2. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunCompanyDao.java
  3. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunCostDao.java
  4. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunGroupProjectDao.java
  5. 15 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunMaterialDao.java
  6. 25 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementDao.java
  7. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementDetailDao.java
  8. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementSubjectDao.java
  9. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunSupplierDao.java
  10. 23 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunUserCompanyDao.java
  11. 8 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/BasicDO.java
  12. 39 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/BasicSubDO.java
  13. 54 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunCompanyDO.java
  14. 57 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunCostDO.java
  15. 137 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunGroupProjectDO.java
  16. 21 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunInvoiceDO.java
  17. 6 64
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectDO.java
  18. 193 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDO.java
  19. 93 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDetailDO.java
  20. 39 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementSubjectDO.java
  21. 40 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSupplierDO.java
  22. 62 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserCompanyDO.java
  23. 100 8
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/Filter.java
  24. 10 3
      src/main/java/com/galaxis/manatee/manager/ClawFeign.java
  25. 315 0
      src/main/java/com/galaxis/manatee/service/ChuanyunBasicDataScheduledTask.java
  26. 155 140
      src/main/java/com/galaxis/manatee/service/ChuanyunScheduledTask.java
  27. 146 0
      src/main/java/com/galaxis/manatee/service/U9ScheduledTask.java

+ 10 - 0
src/main/java/com/galaxis/manatee/constant/StringConstant.java

@@ -26,4 +26,14 @@ public class StringConstant {
      * 分号
      */
     public static final String SEMICOLON=";";
+
+    /**
+     * 逗号
+     */
+    public static final String COMMA=",";
+
+    /**
+     * 下划线
+     */
+    public static final String UNDER_LINE="_";
 }

+ 14 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunCompanyDao.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunCompanyDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 5:36 下午
+ */
+@Repository
+public interface ChuanyunCompanyDao extends GalaxisRepository<ChuanyunCompanyDO,String> {
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunCostDao.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunCostDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 3:31 下午
+ */
+@Repository
+public interface ChuanyunCostDao extends GalaxisRepository<ChuanyunCostDO,String> {
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunGroupProjectDao.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 4:17 下午
+ */
+@Repository
+public interface ChuanyunGroupProjectDao extends GalaxisRepository<ChuanyunGroupProjectDO,String> {
+}

+ 15 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunMaterialDao.java

@@ -4,6 +4,7 @@ import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMaterialDO;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -17,6 +18,20 @@ public interface ChuanyunMaterialDao extends GalaxisRepository<ChuanyunMaterialD
     /**
      * 根据物料编码和版本号获得物料对象
      * @param code  物料编码
+     * @return  物料对象
+     */
+    Optional<ChuanyunMaterialDO> findByCode(String code);
+
+    /**
+     * 根据物料编号获取列表
+     * @param code  编号
+     * @return  列表
+     */
+    List<ChuanyunMaterialDO> findAllByCode(String code);
+
+    /**
+     * 根据物料编码和版本号获得物料对象
+     * @param code  物料编码
      * @param version   版本
      * @return  物料对象
      */

+ 25 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementDao.java

@@ -0,0 +1,25 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunReimbursementDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 4:18 下午
+ */
+@Repository
+public interface ChuanyunReimbursementDao extends GalaxisRepository<ChuanyunReimbursementDO,String> {
+
+    /**
+     * 获取没有下发过的报销数据
+     * @param erpFlag   下发flag
+     * @param pageable  分页
+     * @return  列表
+     */
+    Page<ChuanyunReimbursementDO> findAllByErpFlag(Integer erpFlag, Pageable pageable);
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementDetailDao.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunReimbursementDetailDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 4:19 下午
+ */
+@Repository
+public interface ChuanyunReimbursementDetailDao extends GalaxisRepository<ChuanyunReimbursementDetailDO,String> {
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementSubjectDao.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunReimbursementSubjectDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 4:28 下午
+ */
+@Repository
+public interface ChuanyunReimbursementSubjectDao extends GalaxisRepository<ChuanyunReimbursementSubjectDO,String> {
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSupplierDao.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSupplierDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 5:13 下午
+ */
+@Repository
+public interface ChuanyunSupplierDao extends GalaxisRepository<ChuanyunSupplierDO,String> {
+}

+ 23 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunUserCompanyDao.java

@@ -0,0 +1,23 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 11:38 上午
+ */
+@Repository
+public interface ChuanyunUserCompanyDao extends GalaxisRepository<ChuanyunUserCompanyDO,String> {
+
+    /**
+     * 根据用户Id获取人员公司对象
+     * @param userId    人员Id
+     * @return  返回值
+     */
+    List<ChuanyunUserCompanyDO> findAllByUserId(String userId);
+}

+ 8 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/BasicDO.java

@@ -43,6 +43,13 @@ public class BasicDO {
     @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
     @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")
     private LocalDateTime createdTime;
+
+    /**
+     * 制单人姓名
+     */
+    @JsonProperty("CreatedBy")
+    private String createBy;
+
     /**
      * 被谁修改
      */
@@ -64,6 +71,7 @@ public class BasicDO {
     /**
      * 状态(具体值的含义需要查询)
      * 0----暂存
+     * 1----结束
      * 2----提交
      */
     @JsonProperty("Status")

+ 39 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/BasicSubDO.java

@@ -0,0 +1,39 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 1:58 下午
+ */
+@Data
+@Entity(name = "BASIC_SUB_DO")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class BasicSubDO {
+
+    /**
+     * 主键
+     */
+    @Id
+    @JsonProperty("ObjectId")
+    private String objectId;
+
+    /**
+     * 数据标题
+     */
+    @JsonProperty("Name")
+    private String name;
+
+    /**
+     * 父表Id
+     */
+    @JsonProperty("ParentObjectId")
+    private String parentObjectId;
+}

+ 54 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunCompanyDO.java

@@ -0,0 +1,54 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 5:25 下午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_COMPANY")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunCompanyDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D0017899051315520a54e5cb3b3ab6e38d324fb";
+
+    @JsonProperty("F0000001")
+    private String companyName;
+
+    /**
+     * BG
+     */
+    @JsonProperty("F0000003")
+    private String businessGroup;
+
+    /**
+     * U9编码
+     */
+    @JsonProperty("F0000004")
+    private String erpCode;
+
+    /**
+     * 银行代码
+     */
+    @JsonProperty("F0000007")
+    private String bankCode;
+
+    /**
+     * 银行账号
+     */
+    @JsonProperty("F0000008")
+    private String bankAccount;
+}

+ 57 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunCostDO.java

@@ -0,0 +1,57 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 3:27 下午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_COST")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunCostDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D0017898279b702c9a841208bfbf5d3bc4105a7";
+
+    /**
+     * 公司ID
+     */
+    @JsonProperty("F0000001")
+    private String companyId;
+
+    /**
+     * 成本中心U9代码
+     */
+    @JsonProperty("F0000002")
+    private String costCode;
+
+    /**
+     * 成本中心名称
+     */
+    @JsonProperty("F0000003")
+    private String costName;
+
+    /**
+     * 成本中心负责人
+     */
+    @JsonProperty("F0000004")
+    private String costManger;
+
+    /**
+     * 成本中心分管副总
+     */
+    @JsonProperty("F0000005")
+    private String costVicePresident;
+}

+ 137 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunGroupProjectDO.java

@@ -0,0 +1,137 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.galaxis.capsule.bo.ChuanyunObject;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.StringArrayToStringDeserializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+import java.time.LocalDateTime;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/2/13 4:09 下午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_GROUP_PROJECT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunGroupProjectDO extends BasicDO {
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789SProjectbase";
+
+    /**
+     * 是否已经下发过
+     * null or false 未下发过
+     * true下发过
+     */
+    private Boolean isCreate;
+
+    /**
+     * 项目编号
+     */
+    @JsonProperty(value = "F0000002")
+    private String projectCode;
+    /**
+     * 项目名称
+     */
+    @JsonProperty(value = "F0000003")
+    private String projectName;
+    /**
+     * 项目类型
+     */
+    @JsonProperty(value = "F0000005")
+    private String projectType;
+
+    /**
+     * 业务集团
+     */
+    @JsonProperty(value = "F0000033")
+    private String businessGroup;
+
+    /**
+     * 氚云中项目立项时间
+     * U9中项目签订时间、项目启动时间
+     */
+    @JsonProperty(value = "F0000008")
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime projectStartDateTime;
+
+    /**
+     * 业务场景
+     */
+    @JsonProperty(value = "F0000009")
+    private String scene;
+
+    /**
+     * 项目总监
+     * U9项目责任人
+     */
+    @JsonProperty(value = "F0000006")
+    private String projectOwner;
+
+    /**
+     * 项目总监数据对象
+     */
+    @Transient
+    @JsonProperty(value = "F0000006Object")
+    private ChuanyunObject projectOwnerObject;
+
+    //======================================================
+    //下面是一开始张曦铭提供的项目的内容,集团总表中缺少这些信息
+    //======================================================
+
+//    /**
+//     * 下发组织机构编码
+//     */
+//    @JsonProperty(value = "F0000052")
+//    @JsonDeserialize(using = StringArrayToStringDeserializer.class)
+//    private String organizationCode;
+//
+//    /**
+//     * 氚云中结项时间
+//     * U9中项目结束时间
+//     */
+//    @JsonProperty(value = "F0000029")
+//    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+//    private LocalDateTime projectEndDateTime;
+//    /**
+//     * 客户编码
+//     * U9编码
+//     */
+//    @JsonProperty(value = "F0000054")
+//    private String customerCode;
+//
+//    /**
+//     * 签约组织成本中心编码
+//     */
+//    @JsonProperty(value = "F0000051")
+//    private String department;
+//
+//    /**
+//     * 项目经理
+//     * 多个项目经理用;隔开
+//     */
+//    @JsonProperty(value = "F0000045")
+//    @JsonDeserialize(using = StringArrayToStringDeserializer.class)
+//    private String projectManager;
+//
+//    /**
+//     * 项目经理数据对象
+//     */
+//    @Transient
+//    @JsonProperty(value = "F0000045Object")
+//    private ChuanyunObject[] projectManagerObject;
+
+}

+ 21 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunInvoiceDO.java

@@ -0,0 +1,21 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 2:08 下午
+ */
+@Slf4j
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Entity(name = "CHUANYUN_INVOICE")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunInvoiceDO extends BasicSubDO{
+}

+ 6 - 64
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectDO.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.galaxis.capsule.bo.ChuanyunObject;
 import com.galaxis.capsule.dto.ChuanyunProjectDTO;
+import com.galaxis.capsule.dto.ChuanyunProjectPrimaryKey;
 import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.StringArrayToStringDeserializer;
@@ -128,72 +129,13 @@ public class ChuanyunProjectDO extends BasicDO {
     private ChuanyunObject[] projectManagerObject;
 //    private List<ChuanyunObject> projectManagerObject;
 
-//    @JsonProperty(value = "Name")
-//    private String F0000028 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000029 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000030 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000005;
-//    @JsonProperty(value = "Name")
-//    private String F0000031;
-//    @JsonProperty(value = "Name")
-//    private String F0000010;
-//    @JsonProperty(value = "Name")
-//    private String F0000022;
-//    @JsonProperty(value = "Name")
-//    private String F0000024;
-//    @JsonProperty(value = "Name")
-//    private String F0000033;
-//    @JsonProperty(value = "Name")
-//    private String F0000032;
-//    @JsonProperty(value = "Name")
-//    private String F0000034 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000035 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000036 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000037 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000038 = null;
-//    private String F0000039 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000040 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000041 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000042 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000043 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000044 = null;
-//    @JsonProperty(value = "Name")
-//    private String OwnerDeptId;
-//    @JsonProperty(value = "Name")
-//    private String F0000023;
-//    @JsonProperty(value = "Name")
-//    private String F0000011;
-//    @JsonProperty(value = "Name")
-//    private String F0000018;
-//    @JsonProperty(value = "Name")
-//    private String F0000004;
-//    @JsonProperty(value = "Name")
-//    InformationObject CreatedByObjectObject;
-//    @JsonProperty(value = "Name")
-//    InformationObject ModifiedByObjectObject;
-//    @JsonProperty(value = "Name")
-//    InformationObject OwnerIdObjectObject;
-//    @JsonProperty(value = "Name")
-//    InformationObject F0000010ObjectObject;
-//    @JsonProperty(value = "Name")
-//    InformationObject OwnerDeptIdObjectObject;
-
     public static ChuanyunProjectDTO toChuanyunProjectDTO(ChuanyunProjectDO chuanyunProjectDO){
         ChuanyunProjectDTO chuanyunProjectDTO=new ChuanyunProjectDTO();
-        chuanyunProjectDTO.setProjectCode(chuanyunProjectDO.getProjectCode());
-        chuanyunProjectDTO.setProjectId(chuanyunProjectDO.getObjectId());
+        //制作联合主键
+        ChuanyunProjectPrimaryKey chuanyunProjectPrimaryKey=new ChuanyunProjectPrimaryKey();
+        chuanyunProjectPrimaryKey.setProjectCode(chuanyunProjectDO.getProjectCode());
+        chuanyunProjectPrimaryKey.setOwnerOrganizationCode(chuanyunProjectDO.getOrganizationCode());
+        chuanyunProjectDTO.setChuanyunProjectPrimaryKey(chuanyunProjectPrimaryKey);
         chuanyunProjectDTO.setProjectName(chuanyunProjectDO.getProjectName());
         try{
             chuanyunProjectDTO.setProjectTypeCode(ProjectType.fromTypeName(chuanyunProjectDO.getProjectTypeCode()).typeCode);

+ 193 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDO.java

@@ -0,0 +1,193 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.capsule.bo.ChuanyunObject;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 1:05 下午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_REIMBURSEMENT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunReimbursementDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D0017894ca6679fadce4b3e9641b3c78db6890c";
+
+    /**
+     * 公司编码
+     * TODO 根据beneficiaryId替换为公司编码  完成待验证
+     *
+     */
+    private String reimburseUserCompanyCode;
+
+    /**
+     * 对公/对私
+     */
+    @JsonProperty("F0000063")
+    private String privateOrPublic;
+
+    /**
+     * 流水号
+     */
+    @JsonProperty("SeqNo")
+    @Column(nullable = false)
+    private String serialNumber;
+
+    /**
+     * 业务日期
+     */
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")
+    private LocalDateTime businessDate;
+
+    /**
+     * 币种
+     */
+    private String currency;
+
+    /**
+     * 汇率
+     */
+    private BigDecimal exchangeRate;
+
+    /**
+     * 供应商ID
+     */
+    @JsonProperty("F0000064")
+    private String supplierId;
+
+    /**
+     * 供应商编码
+     * TODO 根据supplierId转化为code
+     */
+    private String supplierCode;
+
+    /**
+     * 项目
+     */
+    @JsonProperty("F0000093")
+    private String groupProjectId;
+
+    /**
+     * 集团项目编码
+     * TODO 根据groupProjectId转化为code
+     */
+    private String groupProjectCode;
+
+    /**
+     * 报销人
+     */
+    @JsonProperty("F0000001")
+    private String reimburseUserId;
+
+    /**
+     * 报销人工号
+     * TODO 根据reimburseUserId转化为code
+     */
+    private String reimburseUserCode;
+
+    /**
+     * 报销人成本中心编码
+     * TODO 从todo 从reimburseUserCompanyId获取
+     */
+    private String reimburseUserCostCode;
+
+    /**
+     * 核销方式
+     */
+    @JsonProperty("F0000054")
+    private String writeOffMethod;
+
+    /**
+     * 报销总金额
+     */
+    @JsonProperty("F0000045")
+    private BigDecimal amount;
+
+    /**
+     * 受益公司主键
+     */
+    @JsonProperty("F0000080")
+    private String beneficiaryId;
+
+    /**
+     * 受益公司银行代码
+     * TODO 根据beneficiaryId获得
+     */
+    private String beneficiaryBankCode;
+
+    /**
+     * 受益公司银行账号
+     * TODO 根据beneficiaryId获得
+     */
+    private String beneficiaryBankAccount;
+
+    /**
+     * 结算方式
+     */
+    private String settlementMethod;
+
+    /**
+     * 报销原因
+     */
+    @JsonProperty("F0000084")
+    private String reason;
+
+    /**
+     * u9传入标识
+     */
+    private Integer erpFlag;
+
+    /**
+     * 受益成本中心Id
+     */
+    @JsonProperty("F0000081")
+    private String beneficiaryCostId;
+
+    /**
+     * 受益成本中心编码
+     * todo 由beneficiaryCostId获得
+     */
+    private String beneficiaryCostCode;
+
+    /**
+     * 报销明细
+     */
+    @JsonProperty("D001789F9bd83c8c4057448aa49e5758784dbfc1")
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<ChuanyunReimbursementDetailDO> detailList;
+
+    /**
+     * 发票明细
+     */
+    @JsonProperty("D001789Fc021e038305e4f56923a3e53e1a46dfc")
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<ChuanyunInvoiceDO> invoiceList;
+
+
+    @Transient
+    @JsonProperty("F0000001Object")
+    private ChuanyunObject reimburseUserObject;
+}

+ 93 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDetailDO.java

@@ -0,0 +1,93 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 1:55 下午
+ */
+@Slf4j
+@Entity(name = "CHUANYUN_REIMBURSEMENT_DETAIL")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunReimbursementDetailDO extends BasicSubDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789F9bd83c8c4057448aa49e5758784dbfc1";
+
+    /**
+     * 税率
+     */
+    @JsonProperty("F0000037")
+    private BigDecimal taxRate;
+
+    /**
+     * 财务实核金额
+     */
+    @JsonProperty("F0000048")
+    private BigDecimal confirmAmount;
+
+    /**
+     * 财务实核税额
+     */
+    @JsonProperty("F0000049")
+    private BigDecimal confirmTax;
+
+    /**
+     * 实核未税金额
+     */
+    private BigDecimal confirmAmountWithoutTax;
+
+    /**
+     * 报销科目ID
+     */
+    @JsonProperty("F0000026")
+    private String reimburseSubjectId;
+
+    /**
+     * 报销科目
+     * todo 从reimburseSubjectId获取
+     */
+    private String reimburseSubjectName;
+
+    /**
+     * 成本费用项目
+     * 报销科目档案的U9成本费用项目栏位
+     * todo 从reimburseSubjectId获取
+     */
+    private String reimburseSubjectCode;
+
+    /**
+     * 公司编码
+     * TODO 根据父表beneficiaryId替换为公司编码
+     */
+    private String reimburseUserCompanyCode;
+
+    /**
+     * 报销人成本中心编码
+     * TODO 从父表获得
+     */
+    private String reimburseUserCostCode;
+
+    /**
+     * 项目编码
+     * todo 根据父表获得
+     */
+    private String groupProjectCode;
+    /**
+     * 备注
+     */
+    @JsonProperty("F0000042")
+    private String content;
+}

+ 39 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementSubjectDO.java

@@ -0,0 +1,39 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 4:25 下午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_REIMBURSEMENT_SUBJECT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunReimbursementSubjectDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D00178999f73a80a66d4e4a9e4af526831fc1bb";
+
+    /**
+     * 报销科目名称
+     */
+    @JsonProperty("F0000001")
+    private String subjectName;
+
+    /**
+     * 报销科目U9编码
+     */
+    @JsonProperty("F0000005")
+    private String subjectCode;
+}

+ 40 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSupplierDO.java

@@ -0,0 +1,40 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 5:10 下午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_SUPPLIER")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunSupplierDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789b57c520f4a4b4c5bb26b4d059e2a962d";
+
+    /**
+     * 供应商名称
+     */
+    @JsonProperty("F0000001")
+    private String supplierName;
+
+    /**
+     * U9代码
+     */
+    @JsonProperty("F0000002")
+    private String supplierCode;
+
+}

+ 62 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserCompanyDO.java

@@ -0,0 +1,62 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.galaxis.capsule.bo.ChuanyunObject;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 11:30 上午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_USER_COMPANY")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunUserCompanyDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789950a3fb7341840428026c7e41fc035bd";
+
+    /**
+     * 用户ID
+     */
+    @JsonProperty("F0000001")
+    private String userName;
+
+    /**
+     * 用户Id
+     */
+    private String userId;
+
+    @Transient
+    @JsonProperty("F0000001Object")
+    private ChuanyunObject user;
+
+    /**
+     * 公司Id
+     */
+    @JsonProperty("F0000002")
+    private String companyId;
+
+    /**
+     * 成本中心ID
+     */
+    @JsonProperty("F0000004")
+    private String costId;
+
+    /**
+     * 成本中心编号
+     */
+    @JsonProperty("F0000017")
+    private String costCode;
+}

+ 100 - 8
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/Filter.java

@@ -1,8 +1,13 @@
 package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.galaxis.manatee.constant.StringConstant;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 氚云批量查询过滤条件,氚云技术人员建议查询全部数据,自己进行筛选
@@ -10,19 +15,43 @@ import lombok.Setter;
  * @version 0.1
  * @date 2020/2/5 10:01 下午
  */
+@Slf4j
 @Getter
 @Setter
 public class Filter {
+
+    public static final String AND="And";
+
+    public static final String OR="Or";
+
+    /**
+     *
+     * @param fromRowNumber 从第几行开始
+     * @param toRowNumber   到第几行
+     * @param requireCount  是否需要总数
+     * @return  Filter对象
+     */
+    public synchronized static Filter instance(Integer fromRowNumber,Integer toRowNumber,Boolean requireCount){
+        return new Filter(fromRowNumber,toRowNumber,requireCount,new String[0],new String[0],AND,new ArrayList<>());
+    }
+
     /**
      *
      * @param fromRowNumber 从第几行开始
      * @param toRowNumber   到第几行
      * @param requireCount  是否需要总数
+     * @param type          条件逻辑运算
+     * @param matchers      过滤条件字符串数组
+     *                      XXXX_YY,ZZZZ
+     *                      XXXX为字段名
+     *                      YY为判断条件
+     *                      ZZZZ为查询值
      * @return  Filter对象
      */
-    public static Filter instance(Integer fromRowNumber,Integer toRowNumber,Boolean requireCount){
-        return new Filter(fromRowNumber,toRowNumber,requireCount,new String[0],new String[0],"And",new String[0]);
+    public synchronized static Filter instance(Integer fromRowNumber,Integer toRowNumber,Boolean requireCount,String type,List<String> matchers){
+        return new Filter(fromRowNumber,toRowNumber,requireCount,new String[0],new String[0],type,matchers);
     }
+
     /**
      * 分页查询,从第几条开始
      */
@@ -54,20 +83,38 @@ public class Filter {
     @JsonProperty(value = "Matcher")
     private Matcher matcher;
 
-    private Filter(Integer fromRowNumber, Integer toRowNumber, Boolean requireCount, String[] returnItem, String[] sortByCollection, String type,String[] matchers) {
+
+    private Filter(Integer fromRowNumber, Integer toRowNumber, Boolean requireCount, String[] returnItem, String[] sortByCollection,String type, List<String> matchersString) {
         this.fromRowNumber = fromRowNumber;
         this.toRowNumber = toRowNumber;
         this.requireCount = requireCount;
         this.returnItem = returnItem;
         this.sortByCollection = sortByCollection;
-        this.matcher = new Matcher(type,matchers);
+        this.matcher = new Matcher(type,stringToMatchers(matchersString));
+    }
+
+    private List<Matchers> stringToMatchers(List<String> matchersString){
+        List<Matchers> matchersList=new ArrayList<>();
+        matchersString.forEach(string->{
+            try{
+                var keyValue=string.split(StringConstant.COMMA);
+                var keyOperator=keyValue[0].split(StringConstant.UNDER_LINE);
+                var matchers=new Matchers("Item",keyOperator[0],keyOperator[1],keyValue[1]);
+                matchersList.add(matchers);
+            }catch (Exception e){
+                log.warn("查询条件解析异常");
+                e.printStackTrace();
+            }
+        });
+        return matchersList;
     }
 
     @Getter
     @Setter
-    static class Matcher{
+    public static class Matcher{
         /**
-         * 判断符号:与或非
+         * 条件连接词
+         * 默认值:and  or
          */
         @JsonProperty(value = "Type")
         private String type;
@@ -76,11 +123,56 @@ public class Filter {
          * 判断条件
          */
         @JsonProperty(value = "Matchers")
-        private String[] matchers;
+        private List<Matchers>matchers;
 
-        public Matcher(String type, String[] matchers) {
+        public Matcher(String type, List<Matchers> matchers) {
             this.type = type;
             this.matchers = matchers;
         }
     }
+
+    @Getter
+    @Setter
+    public static class Matchers{
+        /**
+         * 拼接条件时 and or
+         * 设置查询条件时 item
+         */
+        @JsonProperty("Type")
+        private String type;
+        /**
+         * 字段名
+         */
+        @JsonProperty("Name")
+        private String name;
+        /**
+         * Operator运算符:
+         * 0=大于,
+         * 1=大于等于,
+         * 2=等于
+         * 3=小于等于,
+         * 4=小于,
+         * 5=不等于,
+         * 6=在某个范围内,
+         * 7=不在某个范围内。
+         */
+        @JsonProperty("Operator")
+        private String operator;
+
+        /**
+         * 数值
+         */
+        @JsonProperty("Value")
+        private String value;
+
+        @JsonProperty("Matchers")
+        private List<Matchers> matchers;
+
+        public Matchers(String type, String name, String operator, String value) {
+            this.type = type;
+            this.name = name;
+            this.operator = operator;
+            this.value = value;
+        }
+    }
 }

+ 10 - 3
src/main/java/com/galaxis/manatee/manager/ClawFeign.java

@@ -1,11 +1,11 @@
 package com.galaxis.manatee.manager;
 
-import com.galaxis.capsule.dto.ChuanyunProjectDTO;
-import com.galaxis.capsule.dto.MaterialDTO;
-import com.galaxis.capsule.dto.PageDTO;
+import com.galaxis.capsule.dto.*;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunReimbursementDO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -42,5 +42,12 @@ public interface ClawFeign {
     @GetMapping("/chuanyunProject/save")
     ResponseEntity<ChuanyunProjectDTO> saveChuanyunProject(@RequestBody ChuanyunProjectDTO chuanyunProjectDTO);
 
+    /**
+     * 保存报销信息
+     * @param chuanyunReimbursementDTO   报销数据
+     * @return  保存结果
+     */
+    @PostMapping("/chuanyunReimbursement/save")
+    ResponseEntity<U9ResponseDTO> saveReimbursement(@RequestBody ChuanyunReimbursementDTO chuanyunReimbursementDTO);
 
 }

+ 315 - 0
src/main/java/com/galaxis/manatee/service/ChuanyunBasicDataScheduledTask.java

@@ -0,0 +1,315 @@
+package com.galaxis.manatee.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.dao.*;
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/27 5:14 下午
+ */
+@Service
+@Slf4j
+public class ChuanyunBasicDataScheduledTask {
+
+    private final Integer pageSize=20; final ObjectMapper objectMapper=new ObjectMapper();
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+    private final ChuanyunUserDao chuanyunUserDao;
+    private final ChuanyunSupplierDao chuanyunSupplierDao;
+    private final ChuanyunCompanyDao chuanyunCompanyDao;
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final ChuanyunCostDao chuanyunCostDao;
+    private final ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao;
+
+    public ChuanyunBasicDataScheduledTask(ChuanYunManager chuanYunManager, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserDao chuanyunUserDao, ChuanyunSupplierDao chuanyunSupplierDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunCostDao chuanyunCostDao, ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao) {
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+        this.chuanyunUserDao = chuanyunUserDao;
+        this.chuanyunSupplierDao = chuanyunSupplierDao;
+        this.chuanyunCompanyDao = chuanyunCompanyDao;
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunCostDao = chuanyunCostDao;
+        this.chuanyunReimbursementSubjectDao = chuanyunReimbursementSubjectDao;
+    }
+
+    /**
+     * 定时将氚云中的数据保存到manatee
+     */
+    @Scheduled(fixedDelay = 43200000L)
+    private void getDataFromChuanyun() {
+        //获取报销科目
+        getReimbursementSubject();
+        //获取成本中心
+        getCost();
+        //获取用户数据
+        getUserList();
+        //获取集团项目数据
+        getGroupProject();
+        //获取公司信息
+        getCompany();
+        //获取供应商
+        getSupplier();
+        //获取人员-归属公司信息
+        getUserCompany();
+    }
+
+    /**
+     * 从氚云中获取用户列表
+     */
+    private void getUserList() {
+        var chuanyunFindAllDTO=chuanYunManager.findAll(ChuanyunUserDO.APP_CODE,ChuanyunUserDO.ACTION_NAME,ChuanyunUserDO.CONTROLLER);
+        var totalCount=0;
+        try {
+            List<ChuanyunUserDO> userList=objectMapper.readValue(chuanyunFindAllDTO.getReturnData().getData(),new TypeReference<>(){});
+            userList.forEach(chuanyunUserDO -> {
+                if(StringUtils.isEmpty(chuanyunUserDO.getEmployeeNumber())){
+                    ChuanYunConstant.USER_EMPLOYEE_NUMBER.put(chuanyunUserDO.getObjectId(),"");
+                }else{
+                    ChuanYunConstant.USER_EMPLOYEE_NUMBER.put(chuanyunUserDO.getObjectId(),chuanyunUserDO.getEmployeeNumber());
+                }
+            });
+            totalCount=chuanyunUserDao.saveAll(userList).size();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        log.info("用户信息保存保存"+totalCount+"工号映射更新完成");
+    }
+
+    /**
+     * 从氚云获取集团项目信息
+     */
+    private void getGroupProject(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //获取项目总数
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                result.forEach(chuanyunGroupProjectDO ->  {
+                    var tmpGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunGroupProjectDO.getObjectId());
+                    tmpGroupProjectDO.ifPresent(projectDO -> chuanyunGroupProjectDO.setIsCreate(projectDO.getIsCreate()));
+                    //将projectManger和projectOwner替换为主键
+                    if(!StringUtils.isEmpty(chuanyunGroupProjectDO.getProjectOwner())){
+                        chuanyunGroupProjectDO.setProjectOwner(chuanyunGroupProjectDO.getProjectOwnerObject().getObjectId());
+                    }
+                });
+                chuanyunGroupProjectDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("集团项目信息保存保存"+totalCount+"项目映射更新完成");
+    }
+
+    /**
+     * 获取供应商信息
+     */
+    private void getSupplier(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunSupplierDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                List<ChuanyunSupplierDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //获取项目总数
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunSupplierDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("供应商信息保存保存"+totalCount);
+    }
+
+    /**
+     * 更新公司信息
+     */
+    private void getCompany(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunCompanyDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                List<ChuanyunCompanyDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //获取项目总数
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunCompanyDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("公司信息保存保存"+totalCount);
+    }
+
+    /**
+     * 更新成本中心
+     */
+    private void getCost(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunCostDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                List<ChuanyunCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //获取项目总数
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunCostDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("成本中心保存保存"+totalCount);
+    }
+
+    /**
+     * 获取人员-归属公司信息
+     */
+    private void getUserCompany(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunUserCompanyDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                List<ChuanyunUserCompanyDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //获取项目总数
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                result.forEach(chuanyunUserCompanyDO -> {
+                    try {
+                        chuanyunUserCompanyDO.setUserId(chuanyunUserCompanyDO.getUser().getObjectId());
+                    }catch (Exception exception){
+                        log.warn(chuanyunUserCompanyDO+"");
+                        log.warn(exception.getMessage());
+                    }
+                });
+                chuanyunUserCompanyDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("人员归属公司信息保存保存"+totalCount);
+    }
+
+    /**
+     * 获取报销科目
+     */
+    private void getReimbursementSubject(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunReimbursementSubjectDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                List<ChuanyunReimbursementSubjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //获取项目总数
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunReimbursementSubjectDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("报销科目信息保存保存"+totalCount);
+    }
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 155 - 140
src/main/java/com/galaxis/manatee/service/ChuanyunScheduledTask.java


+ 146 - 0
src/main/java/com/galaxis/manatee/service/U9ScheduledTask.java

@@ -0,0 +1,146 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.capsule.dto.ChuanyunReimbursementDTO;
+import com.galaxis.manatee.dao.ChuanyunProjectDao;
+import com.galaxis.manatee.dao.ChuanyunReimbursementDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunReimbursementDO;
+import com.galaxis.manatee.manager.ClawFeign;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.HttpStatus;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/28 7:27 下午
+ */
+@Service
+@Slf4j
+public class U9ScheduledTask {
+
+    private final Integer pageSize=20;
+    private final ChuanyunProjectDao chuanyunProjectDao;
+    private final ChuanyunReimbursementDao chuanyunReimbursementDao;
+    private final ClawFeign clawFeign;
+
+    public U9ScheduledTask(ChuanyunProjectDao chuanyunProjectDao, ChuanyunReimbursementDao chuanyunReimbursementDao, ClawFeign clawFeign) {
+        this.chuanyunProjectDao = chuanyunProjectDao;
+        this.chuanyunReimbursementDao = chuanyunReimbursementDao;
+        this.clawFeign = clawFeign;
+    }
+
+    /**
+     * 定时将manatee中的信息同步到claw中
+     */
+//    @Scheduled(fixedDelay = 600000L,initialDelay = 10000L)
+    private void projectInformationSync(){
+        putProjectToClaw();
+    }
+
+    /**
+     *
+     */
+    @Scheduled(fixedDelay = 43200000L)
+    private void reimbursementInformationSync(){
+        putReimbursementToClaw();
+    }
+
+    private void putReimbursementToClaw(){
+        //定时将isCreate为空的信息改为false
+        var page=0;
+        var totalPages=Integer.MAX_VALUE;
+
+        while (page<totalPages){
+            var pageable= PageRequest.of(page,pageSize);
+            var chuanyunReimbursementPage=chuanyunReimbursementDao.findAllByErpFlag(null,pageable);
+            totalPages=chuanyunReimbursementPage.getTotalPages();
+            chuanyunReimbursementPage.getContent().forEach(data->data.setErpFlag(1));
+            chuanyunReimbursementDao.saveAll(chuanyunReimbursementPage.getContent());
+            page++;
+        }
+
+        //同步项目数据
+        page=0;
+        totalPages=Integer.MAX_VALUE;
+        while (page<totalPages){
+            var pageable=PageRequest.of(page,pageSize);
+            var chuanyunReimbursementPage=chuanyunReimbursementDao.findAllByErpFlag(0,pageable);
+            chuanyunReimbursementPage.getContent().forEach(chuanyunReimbursementDO -> {
+                try{
+                    sendReimbursement(chuanyunReimbursementDO);
+                }catch (Exception exception){
+                    log.error("保存到claw失败"+chuanyunReimbursementDO.toString());
+                }
+            });
+            page++;
+        }
+    }
+
+    /**
+     * 将项目信息同步更新到U9系统中
+     */
+    private void putProjectToClaw(){
+        //定时将isCreate为空的信息改为false
+        var page=0;
+        var totalPages=Integer.MAX_VALUE;
+
+        while (page<totalPages){
+            var pageable= PageRequest.of(page,pageSize);
+            var chuanyunProjectPage=chuanyunProjectDao.findAllByIsCreate(null,pageable);
+            totalPages=chuanyunProjectPage.getTotalPages();
+            chuanyunProjectPage.getContent().forEach(data->data.setIsCreate(false));
+            chuanyunProjectDao.saveAll(chuanyunProjectPage.getContent());
+            page++;
+        }
+
+        //同步项目数据
+        page=0;
+        totalPages=Integer.MAX_VALUE;
+        while (page<totalPages){
+            var pageable=PageRequest.of(page,pageSize);
+            var chuanyunProjectPage=chuanyunProjectDao.findAllByIsCreate(false,pageable);
+            chuanyunProjectPage.getContent().forEach(chuanyunProjectDO -> {
+                try{
+                    sendProject(chuanyunProjectDO);
+                }catch (Exception exception){
+                    log.error("保存到claw失败"+chuanyunProjectDO.toString());
+                }
+            });
+            page++;
+        }
+    }
+
+    /**
+     * 调用feign发送数据
+     * @param chuanyunProjectDO 项目数据
+     */
+    @Transactional(rollbackFor = Exception.class)
+    protected void sendProject(ChuanyunProjectDO chuanyunProjectDO){
+        var responseEntity=clawFeign.saveChuanyunProject(ChuanyunProjectDO.toChuanyunProjectDTO(chuanyunProjectDO));
+        if(responseEntity.getStatusCode().equals(HttpStatus.OK)){
+            //如果已经是新写入claw服务需要修改是否为创建新数据的状态
+            if (!chuanyunProjectDO.getIsCreate()){
+                chuanyunProjectDO.setIsCreate(true);
+                chuanyunProjectDao.save(chuanyunProjectDO);
+            }
+        }
+    }
+
+    protected void sendReimbursement(ChuanyunReimbursementDO chuanyunReimbursementDO){
+        ChuanyunReimbursementDTO chuanyunReimbursementDTO=new ChuanyunReimbursementDTO();
+        BeanUtils.copyProperties(chuanyunReimbursementDO,chuanyunReimbursementDTO);
+        var responseEntity=clawFeign.saveReimbursement(chuanyunReimbursementDTO);
+        if(responseEntity.getStatusCode().equals(HttpStatus.OK)){
+            //如果已经是新写入claw服务需要修改是否为创建新数据的状态
+            if (0==chuanyunReimbursementDO.getErpFlag()){
+                chuanyunReimbursementDO.setErpFlag(1);
+                chuanyunReimbursementDao.save(chuanyunReimbursementDO);
+            }
+        }
+    }
+}