Browse Source

向U9更新项目信息

verguenza 5 years ago
parent
commit
ef7481701a
34 changed files with 798 additions and 237 deletions
  1. 5 0
      src/main/java/com/galaxis/manatee/constant/ChuanYunConstant.java
  2. 5 0
      src/main/java/com/galaxis/manatee/constant/StringConstant.java
  3. 7 7
      src/main/java/com/galaxis/manatee/controller/ChuanyunTestController.java
  4. 4 4
      src/main/java/com/galaxis/manatee/controller/ClawController.java
  5. 6 5
      src/main/java/com/galaxis/manatee/controller/DataStructureTestController.java
  6. 1 2
      src/main/java/com/galaxis/manatee/controller/JwtAuthenticationFilter.java
  7. 24 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunProjectDao.java
  8. 14 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunUserDao.java
  9. 0 14
      src/main/java/com/galaxis/manatee/dao/ProjectDao.java
  10. 1 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/BasicDO.java
  11. 271 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectDO.java
  12. 48 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserDO.java
  13. 0 113
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ProjectDO.java
  14. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/BaseChuanyunResponse.java
  15. 3 3
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindAllResponse.java
  16. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindAllReturnData.java
  17. 23 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindAllDTO.java
  18. 21 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindAllReturnData.java
  19. 3 3
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindResponse.java
  20. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindReturnData.java
  21. 23 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindDTO.java
  22. 19 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindReturnData.java
  23. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveAllResponse.java
  24. 1 1
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveAllReturnData.java
  25. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveResponse.java
  26. 1 1
      src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveReturnData.java
  27. 1 1
      src/main/java/com/galaxis/manatee/entity/chuanyun/Filter.java
  28. 27 5
      src/main/java/com/galaxis/manatee/manager/ChuanYunManager.java
  29. 14 2
      src/main/java/com/galaxis/manatee/manager/ClawFeign.java
  30. 64 15
      src/main/java/com/galaxis/manatee/manager/impl/DefaultChuanyunManagerImpl.java
  31. 155 47
      src/main/java/com/galaxis/manatee/service/ChuanyunScheduledTask.java
  32. 2 2
      src/main/java/com/galaxis/manatee/service/DingTalkScheduledTask.java
  33. 2 2
      src/main/java/com/galaxis/manatee/util/AliSmsUtil.java
  34. 43 0
      src/main/java/com/galaxis/manatee/util/StringArrayToStringDeserializer.java

+ 5 - 0
src/main/java/com/galaxis/manatee/constant/ChuanYunConstant.java

@@ -18,6 +18,11 @@ public class ChuanYunConstant {
      * 保存项目号、项目ObjectId的映射关系
      */
     public static Map<String,String> PROJECT_CODE=new HashMap<>(2048);
+
+    /**
+     * 保存用户ID和工号的映射关系
+     */
+    public static Map<String,String> USER_EMPLOYEE_NUMBER=new HashMap<>(2048);
     /**
      * 调用地址
      */

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

@@ -21,4 +21,9 @@ public class StringConstant {
      * 空格字符串
      */
     public static final String SPACE_STRING=" ";
+
+    /**
+     * 分号
+     */
+    public static final String SEMICOLON=";";
 }

+ 7 - 7
src/main/java/com/galaxis/manatee/controller/ChuanyunTestController.java

@@ -2,10 +2,10 @@ package com.galaxis.manatee.controller;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.galaxis.manatee.entity.chuanyun.*;
 import com.galaxis.manatee.entity.chuanyun.bo.MaterialResendBO;
-import com.galaxis.manatee.entity.chuanyun.data.object.ProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ProjectLogDO;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import org.hibernate.Session;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -42,7 +42,7 @@ public class ChuanyunTestController {
     @GetMapping("/testEntity")
     public void test() throws JsonProcessingException {
         Session session=entityManager.unwrap(Session.class);
-        List<Object> testList=session.createSQLQuery("select * from baba").list();
+        List<?> testList=session.createSQLQuery("select * from baba").list();
         ObjectMapper objectMapper=new ObjectMapper();
         System.out.println(objectMapper.writeValueAsString(testList));
     }
@@ -54,7 +54,7 @@ public class ChuanyunTestController {
     @GetMapping("/chuanyunTest/testFind")
     public String testFind() throws JsonProcessingException {
         ObjectMapper objectMapper=new ObjectMapper();
-        ChuanyunFindResponse<ProjectLogDO> logTemplateChuanYunFindResponse =chuanYunManager.find(ProjectLogDO.SCHEMA_CODE,"ae5f74e9-a8f8-4d20-9e94-b594e57c12bc");
+        ChuanyunFindBizDTO<ProjectLogDO> logTemplateChuanYunFindResponse =chuanYunManager.find(ProjectLogDO.SCHEMA_CODE,"ae5f74e9-a8f8-4d20-9e94-b594e57c12bc");
         return objectMapper.writeValueAsString(logTemplateChuanYunFindResponse);
     }
 
@@ -66,7 +66,7 @@ public class ChuanyunTestController {
     public String testFindList() throws JsonProcessingException {
         ObjectMapper objectMapper=new ObjectMapper();
         Filter testFilter=Filter.instance(0,20,true);
-        ChuanyunFindAllResponse<ProjectDO> logTemplateChuanYunFindAllResponse =chuanYunManager.findAll(ProjectDO.SCHEMA_CODE,testFilter);
+        ChuanyunFindAllBizDTO<ChuanyunProjectDO> logTemplateChuanYunFindAllResponse =chuanYunManager.findAll(ChuanyunProjectDO.SCHEMA_CODE,testFilter);
         return objectMapper.writeValueAsString(logTemplateChuanYunFindAllResponse);
     }
 
@@ -80,7 +80,7 @@ public class ChuanyunTestController {
         resendVO.setRequestDate(LocalDate.now());
         resendVO.setRequestType("test");
         ObjectMapper objectMapper=new ObjectMapper();
-        ChuanyunSaveResponse chuanyunSaveResponse= chuanYunManager.save(MaterialResendBO.SCHEMA_CODE,objectMapper.writeValueAsString(resendVO),true);
+        ChuanyunSaveDTO chuanyunSaveResponse= chuanYunManager.save(MaterialResendBO.SCHEMA_CODE,objectMapper.writeValueAsString(resendVO),true);
         return objectMapper.writeValueAsString(chuanyunSaveResponse);
     }
 
@@ -99,7 +99,7 @@ public class ChuanyunTestController {
         List<String> strings=new ArrayList<>();
         strings.add(objectMapper.writeValueAsString(resend1));
         strings.add(objectMapper.writeValueAsString(resend2));
-        ChuanyunSaveAllResponse chuanyunSaveAllResponse= chuanYunManager.saveAll(MaterialResendBO.SCHEMA_CODE,strings,true);
+        ChuanyunSaveAllDTO chuanyunSaveAllResponse= chuanYunManager.saveAll(MaterialResendBO.SCHEMA_CODE,strings,true);
         return objectMapper.writeValueAsString(chuanyunSaveAllResponse);
     }
 }

+ 4 - 4
src/main/java/com/galaxis/manatee/controller/ClawController.java

@@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.context.request.WebRequest;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,7 +23,7 @@ import java.util.Map;
 @Slf4j
 public class ClawController {
 
-    private ClawFeign clawFeign;
+    private final ClawFeign clawFeign;
 
 
     public ClawController(ClawFeign clawFeign) {
@@ -38,10 +37,11 @@ public class ClawController {
      * @return  返回结果
      */
     @ExceptionHandler(value = {Exception.class})
-    public ResponseEntity vehicleNotFound(Exception exception, WebRequest request) {
+    public ResponseEntity<Exception> vehicleNotFound(Exception exception, WebRequest request) {
+        log.info(request.getContextPath());
         log.warn("clawController异常");
         exception.printStackTrace();
-        return new ResponseEntity(exception, HttpStatus.BAD_REQUEST);
+        return new ResponseEntity<>(exception, HttpStatus.BAD_REQUEST);
     }
 
     @GetMapping("/test/claw")

+ 6 - 5
src/main/java/com/galaxis/manatee/controller/DataStructureTestController.java

@@ -4,10 +4,12 @@ import com.dingtalk.api.response.OapiProcessinstanceGetResponse;
 import com.galaxis.manatee.dao.DingTalkProcessInstanceDao;
 import com.galaxis.manatee.entity.ding.DingTalkProcessInstance;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * @author zcj
@@ -26,11 +28,10 @@ public class DataStructureTestController {
 
     @GetMapping("/testData")
     public void testData(){
-        DingTalkProcessInstance dingTalkProcessInstance=dingTalkProcessInstanceDao.findById("774cd621-e754-4893-8d84-e1fc96fc5e2c").get();
-        OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceTopVo=dingTalkProcessInstance.getProcessInstance();
+        Optional<DingTalkProcessInstance> dingTalkProcessInstance=dingTalkProcessInstanceDao.findById("774cd621-e754-4893-8d84-e1fc96fc5e2c");
+        Assert.isTrue(dingTalkProcessInstance.isPresent(),"dingTalkProcessInstance is null");
+        OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceTopVo=dingTalkProcessInstance.get().getProcessInstance();
         List<OapiProcessinstanceGetResponse.FormComponentValueVo> list= processInstanceTopVo.getFormComponentValues();
-        list.forEach(a->{
-            log.info(a.getName()+"///"+a.getValue());
-        });
+        list.forEach(a->log.info(a.getName()+"///"+a.getValue()));
     }
 }

+ 1 - 2
src/main/java/com/galaxis/manatee/controller/JwtAuthenticationFilter.java

@@ -11,7 +11,6 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
 import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -54,7 +53,7 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
     protected void successfulAuthentication(HttpServletRequest req,
                                             HttpServletResponse res,
                                             FilterChain chain,
-                                            Authentication auth) throws IOException, ServletException {
+                                            Authentication auth) {
 
         String token = JWT.create()
                 .withSubject(((org.springframework.security.core.userdetails.User) auth.getPrincipal()).getUsername())

+ 24 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunProjectDao.java

@@ -0,0 +1,24 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/2/13 4:39 下午
+ */
+@Repository
+public interface ChuanyunProjectDao extends JpaRepository<ChuanyunProjectDO,String> {
+
+    /**
+     * 根据是否下发过获取分页数据
+     * @param isCreate  是否下发过
+     * @param pageable  分页对象
+     * @return  分页项目数据对象
+     */
+    Page<ChuanyunProjectDO> findAllByIsCreate(Boolean isCreate, Pageable pageable);
+}

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

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

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

@@ -1,14 +0,0 @@
-package com.galaxis.manatee.dao;
-
-import com.galaxis.manatee.entity.chuanyun.data.object.ProjectDO;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author zcj
- * @version 0.1
- * @date 2020/2/13 4:39 下午
- */
-@Repository
-public interface ProjectDao extends JpaRepository<ProjectDO,String> {
-}

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

@@ -15,6 +15,7 @@ import javax.persistence.InheritanceType;
 import java.time.LocalDateTime;
 
 /**
+ * 氚云基础数据类型
  * @author zcj
  * @version 0.1
  * @date 2020/2/13 5:22 下午

+ 271 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectDO.java

@@ -0,0 +1,271 @@
+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.capsule.dto.ChuanyunProjectDTO;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.StringArrayToStringDeserializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+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_PROJECT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunProjectDO extends BasicDO {
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="ldx1vawvx19gf8iqxxkusjy05";
+
+    /**
+     * 是否已经下发过
+     * null or false 未下发过
+     * true下发过
+     */
+
+    private Boolean isCreate;
+
+    /**
+     * 项目编号
+     */
+    @JsonProperty(value = "F0000002")
+    private String projectCode;
+    /**
+     * 项目名称
+     */
+    @JsonProperty(value = "F0000001")
+    private String projectName;
+    /**
+     * 项目类型
+     */
+    @JsonProperty(value = "F0000046")
+    private String projectTypeCode;
+
+    /**
+     * 下发组织机构编码
+     */
+    @JsonProperty(value = "F0000052")
+    @JsonDeserialize(using = StringArrayToStringDeserializer.class)
+    private String organizationCode;
+    /**
+     * 氚云中项目立项时间
+     * U9中项目签订时间、项目启动时间
+     */
+    @JsonProperty(value = "F0000028")
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime projectStartDateTime;
+
+    /**
+     * 氚云中结项时间
+     * U9中项目结束时间
+     */
+    @JsonProperty(value = "F0000029")
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime projectEndDateTime;
+    /**
+     * 客户编码
+     * U9编码
+     */
+    @JsonProperty(value = "F0000054")
+    private String customerCode;
+
+    /**
+     * 业务场景
+     */
+    @JsonProperty(value = "F0000055")
+    private String scene;
+
+    /**
+     * 签约组织成本中心编码
+     */
+    @JsonProperty(value = "F0000051")
+    private String departmentCode;
+
+    /**
+     * 项目总监
+     * U9项目责任人
+     */
+    @JsonProperty(value = "F0000031")
+    private String projectOwner;
+
+    /**
+     * 项目总监数据对象
+     */
+    @Transient
+    @JsonProperty(value = "F0000031Object")
+    private ChuanyunObject projectOwnerObject;
+
+    /**
+     * 项目经理
+     * 多个项目经理用;隔开
+     */
+    @JsonProperty(value = "F0000045")
+    @JsonDeserialize(using = StringArrayToStringDeserializer.class)
+    private String projectManager;
+
+    /**
+     * 项目经理数据对象
+     */
+    @Transient
+    @JsonProperty(value = "F0000045Object")
+    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());
+        chuanyunProjectDTO.setProjectName(chuanyunProjectDO.getProjectName());
+        try{
+            chuanyunProjectDTO.setProjectTypeCode(ProjectType.fromTypeName(chuanyunProjectDO.getProjectTypeCode()).typeCode);
+        }catch (Exception e){
+            log.warn(e.getMessage());
+        }
+        chuanyunProjectDTO.setProjectSignDateTime(chuanyunProjectDO.getProjectStartDateTime());
+        chuanyunProjectDTO.setCustomerCode(chuanyunProjectDO.getCustomerCode());
+        chuanyunProjectDTO.setScene(chuanyunProjectDO.getScene());
+        chuanyunProjectDTO.setDepartmentCode(chuanyunProjectDO.getDepartmentCode());
+        chuanyunProjectDTO.setPlanStartDate(chuanyunProjectDO.getProjectStartDateTime());
+        chuanyunProjectDTO.setPlanEndDate(chuanyunProjectDO.getProjectEndDateTime());
+        chuanyunProjectDTO.setProjectManager(ChuanYunConstant.USER_EMPLOYEE_NUMBER.get(chuanyunProjectDO.getProjectManager()));
+        chuanyunProjectDTO.setProjectOwner(ChuanYunConstant.USER_EMPLOYEE_NUMBER.get(chuanyunProjectDO.getProjectOwner()));
+        return chuanyunProjectDTO;
+    }
+
+    /**
+     * 项目类型映射枚举
+     */
+    @Getter
+    enum ProjectType{
+        /**
+         * 设备相关项目
+         */
+        EQUIPMENT("纯设备","10"),
+        /**
+         * 硬集成项目
+         */
+        EQUIPMENT_INTEGRATION("硬集成(含设备)","20"),
+        /**
+         * 软集成项目
+         */
+        SOFTWARE_INTEGRATION("软集成(不含设备)","30"),
+        /**
+         * 纯软件
+         */
+        SOFTWARE("纯软件","40"),
+        /**
+         * 售后
+         */
+        MAINTENANCE("售后项目","50"),
+        /**
+         * 规划咨询
+         */
+        CONSULTATION("纯规划咨询","60"),
+        /**
+         * 其他
+         */
+        OTHER("其他","100");
+        private final String typeName;
+        private final String typeCode;
+
+        ProjectType(String typeName, String typeCode) {
+            this.typeName = typeName;
+            this.typeCode = typeCode;
+        }
+
+        /**
+         * 根据类型名称获取类型枚举
+         * @param typeName  类型名称
+         * @return  枚举
+         */
+        static ProjectType fromTypeName(String typeName) throws Exception {
+            for (ProjectType projectType:ProjectType.values()){
+                if (projectType.typeName.equals(typeName)){
+                    return projectType;
+                }
+            }
+            throw new Exception("peojectType枚举类型不匹配");
+        }
+
+
+    }
+}

+ 48 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserDO.java

@@ -0,0 +1,48 @@
+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 javax.persistence.Entity;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/12 9:18 上午
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_USER")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunUserDO extends BasicDO{
+
+    /**
+     * appCode
+     */
+    public static final String APP_CODE="D001789dev";
+
+    /**
+     * actionName
+     */
+    public static final String ACTION_NAME="findUserList";
+
+    /**
+     * controller
+     */
+    public static final String CONTROLLER="UserListController";
+
+    /**
+     * 职位
+     */
+    @JsonProperty(value = "Title")
+    private String title;
+
+
+    /**
+     * 工号
+     */
+    @JsonProperty(value = "EmployeeNumber")
+    private String employeeNumber;
+}

+ 0 - 113
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ProjectDO.java

@@ -1,113 +0,0 @@
-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 javax.persistence.Entity;
-
-/**
- * @author zcj
- * @version 0.1
- * @date 2020/2/13 4:09 下午
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Entity(name = "CHUANYUN_PROJECT")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class ProjectDO extends BasicDO {
-
-    /**
-     * 表名
-     */
-    public static final String SCHEMA_CODE ="ldx1vawvx19gf8iqxxkusjy05";
-    /**
-     * 项目编号
-     */
-    @JsonProperty(value = "F0000002")
-    private String projectCode;
-    /**
-     * 项目名称
-     */
-    @JsonProperty(value = "F0000001")
-    private String projectName;
-//    @JsonProperty(value = "Name")
-//    private String F0000007;
-//    @JsonProperty(value = "Name")
-//    private String F0000025 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000026 = null;
-//
-//    @JsonProperty(value = "Name")
-//    private String F0000027 = null;
-//    @JsonProperty(value = "Name")
-//    private String F0000019;
-//    @JsonProperty(value = "Name")
-//    private String F0000015;
-//    @JsonProperty(value = "Name")
-//    private String F0000021;
-//    @JsonProperty(value = "Name")
-//    private String F0000016;
-//    @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;
-}

+ 2 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/BaseChuanyunResponse.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -11,7 +11,7 @@ import lombok.Data;
  */
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class  BaseChuanyunResponse {
+public class BaseChuanyunDTO {
     /**
      * 是否获取成功
      */

+ 3 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindAllResponse.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -12,11 +12,11 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ChuanyunFindAllResponse<T> extends BaseChuanyunResponse{
+public class ChuanyunFindAllBizDTO<T> extends BaseChuanyunDTO {
 
     /**
      * 返回数据(重要)
      */
     @JsonProperty("ReturnData")
-    private ChuanyunFindAllReturnData<T> returnData;
+    private ChuanyunFindAllBizReturnData<T> returnData;
 }

+ 2 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindAllReturnData.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
@@ -10,7 +10,7 @@ import java.util.List;
  * @version 0.1
  */
 @Data
-public class ChuanyunFindAllReturnData<T> {
+public class ChuanyunFindAllBizReturnData<T> {
 
     /**
      * 总行数

+ 23 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindAllDTO.java

@@ -0,0 +1,23 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/14 4:32 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunFindAllDTO extends BaseChuanyunDTO{
+
+    /**
+     * 返回数据(重要)
+     */
+    @JsonProperty("ReturnData")
+    private ChuanyunFindAllReturnData returnData;
+}

+ 21 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindAllReturnData.java

@@ -0,0 +1,21 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/14 4:48 下午
+ */
+@Data
+public class ChuanyunFindAllReturnData {
+
+    /**
+     * 数据
+     */
+    @JsonProperty(value = "data")
+    private String data;
+}

+ 3 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindResponse.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -13,11 +13,11 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ChuanyunFindResponse<T> extends BaseChuanyunResponse {
+public class ChuanyunFindBizDTO<T> extends BaseChuanyunDTO {
 
     /**
      * 返回数据(重要)
      */
     @JsonProperty("ReturnData")
-    private ChuanyunFindReturnData<T> returnData;
+    private ChuanyunFindBizReturnData<T> returnData;
 }

+ 2 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunFindReturnData.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
@@ -9,7 +9,7 @@ import lombok.Data;
  * @date 2020/2/5 6:12 下午
  */
 @Data
-public class ChuanyunFindReturnData<T> {
+public class ChuanyunFindBizReturnData<T> {
     /**
      * 返回数据
      */

+ 23 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindDTO.java

@@ -0,0 +1,23 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/14 4:32 下午
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunFindDTO extends BaseChuanyunDTO{
+
+    /**
+     * 返回数据(重要)
+     */
+    @JsonProperty("ReturnData")
+    private ChuanyunFindReturnData returnData;
+}

+ 19 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunFindReturnData.java

@@ -0,0 +1,19 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/14 4:49 下午
+ */
+@Data
+public class ChuanyunFindReturnData {
+
+    /**
+     * 数据
+     */
+    @JsonProperty(value = "data")
+    private String data;
+}

+ 2 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveAllResponse.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
@@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
-public class ChuanyunSaveAllResponse extends BaseChuanyunResponse{
+public class ChuanyunSaveAllDTO extends BaseChuanyunDTO {
 
     /**
      * 返回数据

+ 1 - 1
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveAllReturnData.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;

+ 2 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveResponse.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ChuanyunSaveResponse extends BaseChuanyunResponse{
+public class ChuanyunSaveDTO extends BaseChuanyunDTO {
     /**
      * 返回数据(重要)
      */

+ 1 - 1
src/main/java/com/galaxis/manatee/entity/chuanyun/ChuanyunSaveReturnData.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;

+ 1 - 1
src/main/java/com/galaxis/manatee/entity/chuanyun/Filter.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.entity.chuanyun;
+package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Getter;

+ 27 - 5
src/main/java/com/galaxis/manatee/manager/ChuanYunManager.java

@@ -1,7 +1,7 @@
 package com.galaxis.manatee.manager;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.galaxis.manatee.entity.chuanyun.*;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
 
 import java.util.List;
 
@@ -20,7 +20,18 @@ public interface ChuanYunManager {
      * @param <T>         查询数据类型
      * @return 单条数据返回结果
      */
-    <T> ChuanyunFindResponse<T> find(String schemaCode, String bizObjectId);
+    <T> ChuanyunFindBizDTO<T> find(String schemaCode, String bizObjectId);
+
+    /**
+     * 自定义数据查询接口
+     * @param appCode       appCode自定义接口所在应用的应用编码,
+     *                      查看应用编码的方法:列表页面点击左上角应用名后的设置按钮,
+     *                      再点击重命名,在弹窗中可以看到当前应用的应用编码
+     * @param actionName    用来给自定义接口判断本次请求的动作
+     * @param controller    是自定义接口的类名
+     * @return              氚云返回数据
+     */
+    ChuanyunFindDTO find(String appCode, String actionName, String controller);
 
     /**
      * 根据filter批量查询
@@ -31,7 +42,18 @@ public interface ChuanYunManager {
      * @throws JsonProcessingException 抛出异常
      * @return 批量返回结果
      */
-    <T> ChuanyunFindAllResponse<T> findAll(String schemaCode, Filter filter) throws JsonProcessingException;
+    <T> ChuanyunFindAllBizDTO<T> findAll(String schemaCode, Filter filter) throws JsonProcessingException;
+
+    /**
+     * 自定义数据查询接口
+     * @param appCode       appCode自定义接口所在应用的应用编码,
+     *                      查看应用编码的方法:列表页面点击左上角应用名后的设置按钮,
+     *                      再点击重命名,在弹窗中可以看到当前应用的应用编码
+     * @param actionName    用来给自定义接口判断本次请求的动作
+     * @param controller    是自定义接口的类名
+     * @return              氚云返回数据
+     */
+    ChuanyunFindAllDTO findAll(String appCode, String actionName, String controller);
 
     /**
      * 保存
@@ -41,7 +63,7 @@ public interface ChuanYunManager {
      * @param bizObject  数据字符串
      * @return 保存结果
      */
-    ChuanyunSaveResponse save(String schemaCode, String bizObject, Boolean isSubmit);
+    ChuanyunSaveDTO save(String schemaCode, String bizObject, Boolean isSubmit);
 
     /**
      * 批量保存
@@ -50,5 +72,5 @@ public interface ChuanYunManager {
      * @param bizObjectArray 数据字符串
      * @return 保存结果
      */
-    ChuanyunSaveAllResponse saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit);
+    ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit);
 }

+ 14 - 2
src/main/java/com/galaxis/manatee/manager/ClawFeign.java

@@ -3,7 +3,9 @@ package com.galaxis.manatee.manager;
 import com.galaxis.capsule.dto.ChuanyunProjectDTO;
 import com.galaxis.capsule.dto.PageDTO;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.Map;
@@ -17,9 +19,19 @@ import java.util.Map;
 public interface ClawFeign {
     /**
      * 测试
-     * @param map
-     * @return
+     * @param map   查询参数
+     * @return  请求结果
      */
     @GetMapping("/chuanyunProject/findAllByParameters")
     PageDTO<ChuanyunProjectDTO> findChuanyunProjectPageable(@RequestParam Map<String,String> map);
+
+    /**
+     * 测试
+     * @param chuanyunProjectDTO    保存DTO数据
+     * @return  请求结果
+     */
+    @GetMapping("/chuanyunProject/save")
+    ResponseEntity<ChuanyunProjectDTO> saveChuanyunProject(@RequestBody ChuanyunProjectDTO chuanyunProjectDTO);
+
+
 }

+ 64 - 15
src/main/java/com/galaxis/manatee/manager/impl/DefaultChuanyunManagerImpl.java

@@ -4,8 +4,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.galaxis.manatee.constant.ChuanYunConstant;
-import com.galaxis.manatee.entity.chuanyun.*;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
 import com.galaxis.manatee.manager.ChuanYunManager;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpEntity;
@@ -24,14 +25,60 @@ import java.util.List;
 @Service
 public class DefaultChuanyunManagerImpl implements ChuanYunManager {
 
-    private ObjectMapper objectMapper;
+    private final ObjectMapper objectMapper;
 
     public DefaultChuanyunManagerImpl(ObjectMapper objectMapper) {
         this.objectMapper = objectMapper;
     }
 
     @Override
-    public <T> ChuanyunFindResponse<T> find(String schemaCode, String bizObjectId) {
+    public ChuanyunFindDTO find(String appCode, String actionName, String controller) {
+        @Data
+        @AllArgsConstructor
+        class Find{
+            @JsonProperty(value = "ActionName")
+            private String actionName;
+            @JsonProperty(value = "Controller")
+            private String controller;
+            @JsonProperty(value = "AppCode")
+            private String appCode;
+        }
+        Find find=new Find(actionName,controller,appCode);
+        //请求客户端
+        RestTemplate restTemplate=new RestTemplate();
+        HttpHeaders httpHeaders=new HttpHeaders();
+        httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
+        httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
+        HttpEntity<Find> httpEntity=new HttpEntity<>(find,httpHeaders);
+        ChuanyunFindDTO chuanyunFindAllResponse =new ChuanyunFindDTO();
+        return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity,chuanyunFindAllResponse.getClass() );
+    }
+
+    @Override
+    public ChuanyunFindAllDTO findAll(String appCode, String actionName, String controller) {
+        @Data
+        @AllArgsConstructor
+        class FindAll{
+            @JsonProperty(value = "ActionName")
+            private String actionName;
+            @JsonProperty(value = "Controller")
+            private String controller;
+            @JsonProperty(value = "AppCode")
+            private String appCode;
+        }
+        FindAll findAll=new FindAll(actionName,controller,appCode);
+        //请求客户端
+        RestTemplate restTemplate=new RestTemplate();
+        HttpHeaders httpHeaders=new HttpHeaders();
+        httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
+        httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
+        HttpEntity<FindAll> httpEntity=new HttpEntity<>(findAll,httpHeaders);
+        ChuanyunFindAllDTO chuanyunFindAllResponse =new ChuanyunFindAllDTO();
+        return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity,chuanyunFindAllResponse.getClass() );
+    }
+
+    @Override
+    public <T> ChuanyunFindBizDTO<T> find(String schemaCode, String bizObjectId) {
         @Data
         class Find{
             @JsonProperty(value = "ActionName")
@@ -40,23 +87,25 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
             private String schemaCode;
             @JsonProperty(value = "BizObjectId")
             private String bizObjectId;
+
+            public Find(String schemaCode, String bizObjectId) {
+                this.schemaCode = schemaCode;
+                this.bizObjectId = bizObjectId;
+            }
         }
-        //构建请求体
-        Find find=new Find();
-        find.setSchemaCode(schemaCode);
-        find.setBizObjectId(bizObjectId);
+        Find find=new Find(schemaCode,bizObjectId);
         //请求客户端
         RestTemplate restTemplate=new RestTemplate();
         HttpHeaders httpHeaders=new HttpHeaders();
         httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
         httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
         HttpEntity<Find> httpEntity=new HttpEntity<>(find,httpHeaders);
-        ChuanyunFindResponse<T> chuanyunFindResponse =new ChuanyunFindResponse<>();
-        return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunFindResponse.getClass());
+        ChuanyunFindBizDTO<T> chuanyunFindResponse =new ChuanyunFindBizDTO<>();
+        return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity,chuanyunFindResponse.getClass() );
     }
 
     @Override
-    public <T> ChuanyunFindAllResponse<T> findAll(String schemaCode, Filter filter) throws JsonProcessingException {
+    public <T> ChuanyunFindAllBizDTO<T> findAll(String schemaCode, Filter filter) throws JsonProcessingException {
         @Data
         class FindList{
             @JsonProperty(value = "ActionName")
@@ -79,12 +128,12 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
         httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
         HttpEntity<FindList> httpEntity=new HttpEntity<>(findList,httpHeaders);
-        ChuanyunFindAllResponse<T> chuanyunFindAllResponse =new ChuanyunFindAllResponse<>();
+        ChuanyunFindAllBizDTO<T> chuanyunFindAllResponse =new ChuanyunFindAllBizDTO<>();
         return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunFindAllResponse.getClass());
     }
 
     @Override
-    public ChuanyunSaveResponse save(String schemaCode, String bizObject, Boolean isSubmit) {
+    public ChuanyunSaveDTO save(String schemaCode, String bizObject, Boolean isSubmit) {
         @Data
         class Save{
             @JsonProperty(value = "ActionName")
@@ -109,12 +158,12 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
         httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
         HttpEntity<Save> httpEntity=new HttpEntity<>(save,httpHeaders);
-        ChuanyunSaveResponse chuanyunSaveResponse =new ChuanyunSaveResponse();
+        ChuanyunSaveDTO chuanyunSaveResponse =new ChuanyunSaveDTO();
         return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveResponse.getClass());
     }
 
     @Override
-    public ChuanyunSaveAllResponse saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit) {
+    public ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit) {
         @Data
         class SaveAll{
             @JsonProperty(value = "ActionName")
@@ -139,7 +188,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
         httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
         HttpEntity<SaveAll> httpEntity=new HttpEntity<>(saveAll,httpHeaders);
-        ChuanyunSaveAllResponse chuanyunSaveAllResponse =new ChuanyunSaveAllResponse();
+        ChuanyunSaveAllDTO chuanyunSaveAllResponse =new ChuanyunSaveAllDTO();
         return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveAllResponse.getClass());
     }
 }

+ 155 - 47
src/main/java/com/galaxis/manatee/service/ChuanyunScheduledTask.java

@@ -5,23 +5,29 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.galaxis.capsule.bo.ChuanyunObject;
 import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.constant.DingTalkConstant;
+import com.galaxis.manatee.constant.StringConstant;
+import com.galaxis.manatee.dao.ChuanyunUserDao;
 import com.galaxis.manatee.dao.DingTalkProcessInstanceDao;
-import com.galaxis.manatee.dao.ProjectDao;
-import com.galaxis.manatee.entity.chuanyun.ChuanyunFindAllResponse;
-import com.galaxis.manatee.entity.chuanyun.ChuanyunSaveAllResponse;
-import com.galaxis.manatee.entity.chuanyun.Filter;
-import com.galaxis.manatee.entity.chuanyun.data.object.ProjectDO;
+import com.galaxis.manatee.dao.ChuanyunProjectDao;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectDO;
 import com.galaxis.manatee.entity.chuanyun.bo.MaterialResendBO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDO;
 import com.galaxis.manatee.entity.ding.DingTalkProcessInstance;
 import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.manager.ClawFeign;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.domain.Example;
 import org.springframework.data.domain.Page;
 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;
+import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,38 +42,173 @@ import java.util.List;
 public class ChuanyunScheduledTask {
 
     private final ChuanYunManager chuanYunManager;
-    private final ProjectDao projectDao;
+    private final ChuanyunProjectDao chuanyunProjectDao;
+    private final ChuanyunUserDao chuanyunUserDao;
     private final DingTalkProcessInstanceDao dingTalkProcessInstanceDao;
+    private final ClawFeign clawFeign;
 
-    public ChuanyunScheduledTask(ChuanYunManager chuanYunManager, ProjectDao projectDao, DingTalkProcessInstanceDao dingTalkProcessInstanceDao) {
+    public ChuanyunScheduledTask(ChuanYunManager chuanYunManager, ChuanyunProjectDao chuanyunProjectDao, ChuanyunUserDao chuanyunUserDao, DingTalkProcessInstanceDao dingTalkProcessInstanceDao, ClawFeign clawFeign) {
         this.chuanYunManager = chuanYunManager;
-        this.projectDao = projectDao;
+        this.chuanyunProjectDao = chuanyunProjectDao;
+        this.chuanyunUserDao = chuanyunUserDao;
         this.dingTalkProcessInstanceDao = dingTalkProcessInstanceDao;
+        this.clawFeign = clawFeign;
     }
 
-
     /**
-     * 定时将氚云中的数据保存到
+     * 定时将氚云中的数据保存到manatee
      */
     @Scheduled(fixedDelay = 300000L)
-    private void getProcessInstanceFromChuanyun(){
+    private void getDataFromChuanyun(){
+        //获取用户数据
+        getUserListFromChuanyun();
         //获取项目数据
         getProjectInformationFromChuanyun();
     }
 
+    private void getUserListFromChuanyun() {
+        ChuanyunFindAllDTO chuanyunFindAllDTO=chuanYunManager.findAll(ChuanyunUserDO.APP_CODE,ChuanyunUserDO.ACTION_NAME,ChuanyunUserDO.CONTROLLER);
+        ObjectMapper objectMapper=new ObjectMapper();
+        Integer 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+"工号映射更新完成");
+    }
+
     /**
      * 定时将钉钉同步的审批记录同步到氚云当中
      */
     @Scheduled(fixedDelay = 600000L)
     private void putProcessInstanceToChuanyun(){
-        //同步物料补发数据,已经停用,数据结构发生变化,请不要使用
-//        putMaterialResendInstance();
+    }
+
+    /**
+     * 定时将manatee中的信息同步到claw中
+     */
+    @Scheduled(fixedDelay = 600000L,initialDelay = 10000L)
+    private void putDataToClaw(){
+        putProjectToClaw();
+    }
+
+    /**
+     * 将项目信息同步更新到U9系统中
+     */
+    private void putProjectToClaw(){
+        //定时将isCreate为空的信息改为false
+        var page=0;
+        var totalPages=Integer.MAX_VALUE;
+
+        while (page<totalPages){
+            var pageable=PageRequest.of(page,20);
+            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,20);
+            var chuanyunProjectPage=chuanyunProjectDao.findAllByIsCreate(false,pageable);
+            chuanyunProjectPage.getContent().forEach(chuanyunProjectDO -> {
+                try{
+                    send(chuanyunProjectDO);
+                }catch (Exception exception){
+                    log.error("保存到claw失败"+chuanyunProjectDO.toString());
+                }
+            });
+            page++;
+        }
+    }
+
+    /**
+     * 调用feign发送数据
+     * @param chuanyunProjectDO 项目数据
+     */
+    @Transactional(rollbackFor = Exception.class)
+    protected void send(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);
+            }
+        }
+    }
+
+    /**
+     * 定时更新项目信息
+     */
+    private void getProjectInformationFromChuanyun(){
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                Filter filter=Filter.instance(start,start+20,true);
+                ChuanyunFindAllBizDTO<ChuanyunProjectDO> chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+20){
+                    start+=20;
+                }else{
+                    flag=false;
+                }
+                //转化为POJO
+                ObjectMapper objectMapper=new ObjectMapper();
+                List<ChuanyunProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //更新缓存中的项目映射表
+                result.forEach(projectBO -> ChuanYunConstant.PROJECT_CODE.put(projectBO.getProjectCode(),projectBO.getObjectId()));
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                result.forEach(chuanyunProjectDO -> {
+                    var tmpProjectDO=chuanyunProjectDao.findById(chuanyunProjectDO.getObjectId());
+                    tmpProjectDO.ifPresent(projectDO -> chuanyunProjectDO.setIsCreate(projectDO.getIsCreate()));
+                    //将projectManger和projectOwner替换为主键
+                    if(!StringUtils.isEmpty(chuanyunProjectDO.getProjectManager())){
+                        var projectManagerIds=new StringBuilder();
+                        for (ChuanyunObject object:chuanyunProjectDO.getProjectManagerObject()){
+                            projectManagerIds.append(object.getObjectId()).append(StringConstant.SEMICOLON);
+                        }
+                        chuanyunProjectDO.setProjectManager(projectManagerIds.toString());
+                    }
+                    if(!StringUtils.isEmpty(chuanyunProjectDO.getProjectOwner())){
+                        chuanyunProjectDO.setProjectOwner(chuanyunProjectDO.getProjectOwnerObject().getObjectId());
+                    }
+                });
+                chuanyunProjectDao.saveAll(result);
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        log.info("项目信息保存保存"+totalCount+"项目映射更新完成");
     }
 
     /**
      * 将物料补发数据同步到氚云
      * 预计2020年4月份之后逐步将各个部门物料补发数据迁移到氚云进行审批,这个功能逐步废弃
+     * 不能调用这个方法!!!!!
      */
+    @Deprecated
     private void putMaterialResendInstance(){
         var currentPage=0;
         var totalPage=Integer.MAX_VALUE;
@@ -101,7 +242,7 @@ public class ChuanyunScheduledTask {
                     }
                 }
             });
-            ChuanyunSaveAllResponse chuanyunSaveAllResponse= chuanYunManager.saveAll(MaterialResendBO.SCHEMA_CODE,strings,true);
+            ChuanyunSaveAllDTO chuanyunSaveAllResponse= chuanYunManager.saveAll(MaterialResendBO.SCHEMA_CODE,strings,true);
             log.info("氚云保存物料补发数据结果的错误信息为 "+chuanyunSaveAllResponse.getErrorMessage());
             log.info(chuanyunSaveAllResponse+"");
             pageList.getContent().forEach(content->content.setUpdatedInChuanyun(true));
@@ -111,37 +252,4 @@ public class ChuanyunScheduledTask {
             currentPage++;
         }
     }
-
-    /**
-     * 定时更新项目信息
-     */
-    private void getProjectInformationFromChuanyun(){
-        var start=0;
-        var totalCount=0L;
-        var flag=true;
-        while (flag){
-            try {
-                //从氚云查询数据
-                Filter filter=Filter.instance(start,start+20,true);
-                ChuanyunFindAllResponse<ProjectDO> chuanyunFindAllResponse=chuanYunManager.findAll(ProjectDO.SCHEMA_CODE,filter);
-                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+20){
-                    start+=20;
-                }else{
-                    flag=false;
-                }
-                //转化为POJO
-                ObjectMapper objectMapper=new ObjectMapper();
-                List<ProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                //更新缓存中的项目映射表
-                result.forEach(projectBO -> ChuanYunConstant.PROJECT_CODE.put(projectBO.getProjectCode(),projectBO.getObjectId()));
-                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
-                //保存
-                projectDao.saveAll(result);
-            }catch (Exception e){
-                log.error(e.getMessage());
-            }
-        }
-        log.info("项目信息保存保存"+totalCount+"项目映射更新完成");
-    }
-
 }

+ 2 - 2
src/main/java/com/galaxis/manatee/service/DingTalkScheduledTask.java

@@ -59,7 +59,7 @@ public class DingTalkScheduledTask {
     /**
      * 每个小时定期更新出差申请数据
      */
-    @Scheduled(fixedDelay = 3600000L)
+    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
     void updateBusinessTripProcessInstanceIdList() throws ApiException {
         updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_BUSINESS_TRIP);
     }
@@ -67,7 +67,7 @@ public class DingTalkScheduledTask {
     /**
      * 每小时根据出差申请Id跟新出差申请信息。
      */
-    @Scheduled(fixedDelay = 3600000L)
+    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
     void updateProcessInstanceList() throws ApiException {
         updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_MATERIAL_RESEND);
     }

+ 2 - 2
src/main/java/com/galaxis/manatee/util/AliSmsUtil.java

@@ -22,7 +22,7 @@ public class AliSmsUtil {
     /**
      * 手机号校验正则表达式
      */
-    private static final Pattern mobilePattern=Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
+    private static final Pattern MOBILE_PATTERN =Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
 
     /**
      * 手机号验证
@@ -30,7 +30,7 @@ public class AliSmsUtil {
      * @return 验证通过返回true
      */
     public static boolean isMobile(final String phoneNumber) {
-        return mobilePattern.matcher(phoneNumber).matches();
+        return MOBILE_PATTERN.matcher(phoneNumber).matches();
     }
 
     /**

+ 43 - 0
src/main/java/com/galaxis/manatee/util/StringArrayToStringDeserializer.java

@@ -0,0 +1,43 @@
+package com.galaxis.manatee.util;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.util.ObjectBuffer;
+import com.galaxis.manatee.constant.StringConstant;
+
+import java.io.IOException;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/12 12:16 下午
+ */
+public class StringArrayToStringDeserializer extends JsonDeserializer<String> {
+
+    @Override
+    public String deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException
+    {
+        // Ok: must point to START_ARRAY (or equivalent)
+        if (!p.isExpectedStartArrayToken()) {
+            return "";
+        }
+        var stringBuilder=new StringBuilder();
+        while (true) {
+            var value = p.nextTextValue();
+
+            if (value == null) {
+                var t = p.getCurrentToken();
+
+                if (t == JsonToken.END_ARRAY) {
+                    break;
+                }
+                if (t == JsonToken.VALUE_NULL) {
+                    continue;
+                }
+            }
+            stringBuilder.append(value).append(StringConstant.SEMICOLON);
+        }
+        return stringBuilder.toString();
+    }
+}