瀏覽代碼

更新了获取物料信息的功能

verguenza 5 年之前
父節點
當前提交
0e09472678

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

@@ -0,0 +1,23 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMaterialDO;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/15 10:58 上午
+ */
+@Repository
+public interface ChuanyunMaterialDao extends GalaxisRepository<ChuanyunMaterialDO,String> {
+
+    /**
+     * 根据物料编码获取物料对象
+     * @param code  物料编码
+     * @return  物料对象
+     */
+    Optional<ChuanyunMaterialDO> findByCode(String code);
+}

+ 93 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMaterialDO.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 com.galaxis.capsule.dto.MaterialDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+
+import javax.persistence.Entity;
+import javax.persistence.Index;
+import javax.persistence.Table;
+import java.util.UUID;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/4/15 10:14 上午
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Entity(name = "CHUANYUN_MATERIAL")
+@Table(indexes = {@Index(name = "code",  columnList="code", unique = true)})
+public class ChuanyunMaterialDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="shat8v8ojpb62v3gcmduw7aq0";
+
+    /**
+     * 物料编号
+     */
+    @JsonProperty(value = "F0000002")
+    private String code;
+
+    /**
+     * 品名
+     */
+    @JsonProperty(value = "F0000001")
+    private String title;
+
+    /**
+     * 名称(标签)
+     */
+    @JsonProperty(value = "F0000007")
+    private String label;
+
+    /**
+     * 型号
+     */
+    @JsonProperty(value = "F0000008")
+    private String model;
+
+    /**
+     * 品牌
+     */
+    @JsonProperty(value = "F0000009")
+    private String brand;
+
+    /**
+     * 版本
+     */
+    @JsonProperty(value = "F0000010")
+    private String version;
+
+    /**
+     * 库存分类
+     */
+    @JsonProperty(value = "F0000005")
+    private String type;
+
+    /**
+     * 形态属性
+     */
+    @JsonProperty(value = "F0000006")
+    private String property;
+
+    /**
+     * 根据materialDTO获得chuanyunMaterialBO
+     * @param materialDTO   传输数据
+     * @return  保存数据
+     */
+    public static ChuanyunMaterialDO fromMaterialDTO(MaterialDTO materialDTO){
+        ChuanyunMaterialDO chuanyunMaterialDO =new ChuanyunMaterialDO();
+        BeanUtils.copyProperties(materialDTO, chuanyunMaterialDO);
+        chuanyunMaterialDO.setObjectId(UUID.randomUUID().toString());
+        return chuanyunMaterialDO;
+    }
+}

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

@@ -203,7 +203,7 @@ public class ChuanyunProjectDO extends BasicDO {
         chuanyunProjectDTO.setProjectSignDateTime(chuanyunProjectDO.getProjectStartDateTime());
         chuanyunProjectDTO.setCustomerCode(chuanyunProjectDO.getCustomerCode());
         chuanyunProjectDTO.setScene(chuanyunProjectDO.getScene());
-        chuanyunProjectDTO.setDepartmentCode(chuanyunProjectDO.getDepartment());
+        chuanyunProjectDTO.setDepartment(chuanyunProjectDO.getDepartment());
         chuanyunProjectDTO.setPlanStartDate(chuanyunProjectDO.getProjectStartDateTime());
         chuanyunProjectDTO.setPlanEndDate(chuanyunProjectDO.getProjectEndDateTime());
         chuanyunProjectDTO.setProjectManager(ChuanYunConstant.USER_EMPLOYEE_NUMBER.get(chuanyunProjectDO.getProjectManager()));

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

@@ -16,7 +16,7 @@ public class BaseChuanyunDTO {
      * 是否获取成功
      */
     @JsonProperty("Successful")
-    protected boolean successful;
+    protected Boolean successful;
     /**
      * 错误信息
      */
@@ -26,5 +26,5 @@ public class BaseChuanyunDTO {
      * 默认为0
      */
     @JsonProperty("DataType")
-    protected int dataType;
+    protected Integer dataType;
 }

+ 10 - 0
src/main/java/com/galaxis/manatee/manager/ChuanYunManager.java

@@ -73,4 +73,14 @@ public interface ChuanYunManager {
      * @return 保存结果
      */
     ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit);
+
+    /**
+     * 保存
+     *
+     * @param schemaCode 表单编码
+     * @param bizObjectId   主键
+     * @param bizObject  数据字符串
+     * @return 保存结果
+     */
+    ChuanyunSaveDTO update(String schemaCode,String bizObjectId, String bizObject);
 }

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

@@ -1,6 +1,7 @@
 package com.galaxis.manatee.manager;
 
 import com.galaxis.capsule.dto.ChuanyunProjectDTO;
+import com.galaxis.capsule.dto.MaterialDTO;
 import com.galaxis.capsule.dto.PageDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.ResponseEntity;
@@ -18,7 +19,15 @@ import java.util.Map;
 @FeignClient(name = "claw",url = "http://localhost:8081")
 public interface ClawFeign {
     /**
-     * 测试
+     * 查询物料信息
+     * @param map   查询参数
+     * @return  请求结果
+     */
+    @GetMapping("/material/findAllByParameters")
+    PageDTO<MaterialDTO> findMaterialPageable(@RequestParam Map<String,String> map);
+
+    /**
+     * 查询项目信息
      * @param map   查询参数
      * @return  请求结果
      */

+ 30 - 0
src/main/java/com/galaxis/manatee/manager/impl/DefaultChuanyunManagerImpl.java

@@ -191,4 +191,34 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         ChuanyunSaveAllDTO chuanyunSaveAllResponse =new ChuanyunSaveAllDTO();
         return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveAllResponse.getClass());
     }
+
+    @Override
+    public ChuanyunSaveDTO update(String schemaCode, String bizObjectId, String bizObject) {
+        @Data
+        class Update{
+            @JsonProperty(value = "ActionName")
+            private String actionName="UpdateBizObject";
+            @JsonProperty(value = "SchemaCode")
+            private String schemaCode;
+            @JsonProperty(value = "BizObject")
+            private String bizObject;
+            @JsonProperty(value = "BizObjectId")
+            private String bizObjectId;
+
+            public Update(String schemaCode, String bizObject,String bizObjectId) {
+                this.schemaCode = schemaCode;
+                this.bizObject = bizObject;
+                this.bizObjectId=bizObjectId;
+            }
+        }
+        Update update=new Update(schemaCode,bizObject,bizObjectId);
+        //请求客户端
+        RestTemplate restTemplate=new RestTemplate();
+        HttpHeaders httpHeaders=new HttpHeaders();
+        httpHeaders.add("EngineCode",ChuanYunConstant.ENGINE_CODE);
+        httpHeaders.add("EngineSecret",ChuanYunConstant.ENGINE_SECRET);
+        HttpEntity<Update> httpEntity=new HttpEntity<>(update,httpHeaders);
+        ChuanyunSaveDTO chuanyunSaveResponse =new ChuanyunSaveDTO();
+        return restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveResponse.getClass());
+    }
 }

+ 110 - 21
src/main/java/com/galaxis/manatee/service/ChuanyunScheduledTask.java

@@ -6,12 +6,15 @@ 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.capsule.dto.MaterialDTO;
 import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.constant.DingTalkConstant;
 import com.galaxis.manatee.constant.StringConstant;
+import com.galaxis.manatee.dao.ChuanyunMaterialDao;
 import com.galaxis.manatee.dao.ChuanyunUserDao;
 import com.galaxis.manatee.dao.DingTalkProcessInstanceDao;
 import com.galaxis.manatee.dao.ChuanyunProjectDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMaterialDO;
 import com.galaxis.manatee.entity.chuanyun.dto.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectDO;
 import com.galaxis.manatee.entity.chuanyun.bo.MaterialResendBO;
@@ -29,8 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author zcj
@@ -44,13 +46,15 @@ public class ChuanyunScheduledTask {
     private final ChuanYunManager chuanYunManager;
     private final ChuanyunProjectDao chuanyunProjectDao;
     private final ChuanyunUserDao chuanyunUserDao;
+    private final ChuanyunMaterialDao chuanyunMaterialDao;
     private final DingTalkProcessInstanceDao dingTalkProcessInstanceDao;
     private final ClawFeign clawFeign;
 
-    public ChuanyunScheduledTask(ChuanYunManager chuanYunManager, ChuanyunProjectDao chuanyunProjectDao, ChuanyunUserDao chuanyunUserDao, DingTalkProcessInstanceDao dingTalkProcessInstanceDao, ClawFeign clawFeign) {
+    public ChuanyunScheduledTask(ChuanYunManager chuanYunManager, ChuanyunProjectDao chuanyunProjectDao, ChuanyunUserDao chuanyunUserDao, ChuanyunMaterialDao chuanyunMaterialDao, DingTalkProcessInstanceDao dingTalkProcessInstanceDao, ClawFeign clawFeign) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunProjectDao = chuanyunProjectDao;
         this.chuanyunUserDao = chuanyunUserDao;
+        this.chuanyunMaterialDao = chuanyunMaterialDao;
         this.dingTalkProcessInstanceDao = dingTalkProcessInstanceDao;
         this.clawFeign = clawFeign;
     }
@@ -58,7 +62,7 @@ public class ChuanyunScheduledTask {
     /**
      * 定时将氚云中的数据保存到manatee
      */
-    @Scheduled(fixedDelay = 300000L)
+    @Scheduled(fixedDelay = 43200000L)
     private void getDataFromChuanyun(){
         //获取用户数据
         getUserListFromChuanyun();
@@ -66,24 +70,89 @@ public class ChuanyunScheduledTask {
         getProjectInformationFromChuanyun();
     }
 
-    private void getUserListFromChuanyun() {
-        ChuanyunFindAllDTO chuanyunFindAllDTO=chuanYunManager.findAll(ChuanyunUserDO.APP_CODE,ChuanyunUserDO.ACTION_NAME,ChuanyunUserDO.CONTROLLER);
+    /**
+     * 将U9中物料信息更新到氚云
+     */
+    @Scheduled(fixedDelay = 86400000L)
+    private void putMaterialToChuanyun(){
+        int page=1;
+        int size=50;
+        var totalAmount=0;
+        var totalPage=Integer.MAX_VALUE;
+        Map<String,String> parameters=new HashMap<>(2);
+        parameters.put("page", Integer.toString(page));
+        parameters.put("size", Integer.toString(size));
+        List<ChuanyunMaterialDO> toSave=new ArrayList<>();
+        while (page<=totalPage){
+            //获取U9中的物料数据
+            Page<MaterialDTO> result=clawFeign.findMaterialPageable(parameters);
+            totalPage=result.getTotalPages();
+            List<ChuanyunMaterialDO> chuanyunMaterialList=new ArrayList<>();
+            //遍历获取的数据,如果系统中已经存在就不进行保存
+            result.getContent().forEach(materialDTO -> {
+                Optional<ChuanyunMaterialDO> optionalChuanyunMaterialDO=chuanyunMaterialDao.findByCode(materialDTO.getCode());
+                if (!optionalChuanyunMaterialDO.isPresent()){
+                    ChuanyunMaterialDO chuanyunMaterialDO=ChuanyunMaterialDO.fromMaterialDTO(materialDTO);
+                    chuanyunMaterialList.add(chuanyunMaterialDO);
+                    toSave.add(chuanyunMaterialDO);
+                }
+            });
+            chuanyunMaterialDao.saveAll(chuanyunMaterialList);
+            totalAmount+=chuanyunMaterialList.size();
+            page++;
+        }
+        log.info("更新U9物料数据结束,共更新数据"+totalAmount);
+
         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(),"");
+        List<String> toSaveString=new ArrayList<>();
+        toSave.forEach(chuanyunMaterialDO -> {
+            try {
+                toSaveString.add(objectMapper.writeValueAsString(chuanyunMaterialDO));
+            } catch (JsonProcessingException e) {
+                log.info(chuanyunMaterialDO+"");
+                e.printStackTrace();
+            }
+        });
+        //将新增加的数据更新到氚云
+        chuanYunManager.saveAll(ChuanyunMaterialDO.SCHEMA_CODE,toSaveString,true);
+    }
+
+    /**
+     * 定时将物料信息从氚云中同步
+     */
+    @Scheduled(fixedDelay = 86400000L)
+    private void getMaterialFromChuanyun(){
+        var pageSize=100;
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                //从氚云查询数据
+                var filter=Filter.instance(start,start+pageSize,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMaterialDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
                 }else{
-                    ChuanYunConstant.USER_EMPLOYEE_NUMBER.put(chuanyunUserDO.getObjectId(),chuanyunUserDO.getEmployeeNumber());
+                    flag=false;
                 }
-            });
-            totalCount=chuanyunUserDao.saveAll(userList).size();
-        } catch (Exception e) {
-            e.printStackTrace();
+                //转化为POJO
+                var objectMapper=new ObjectMapper();
+                List<ChuanyunMaterialDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                //保存
+                result.removeIf(chuanyunMaterialDO -> chuanyunMaterialDao.findById(chuanyunMaterialDO.getObjectId()).isPresent());
+                chuanyunMaterialDao.saveAll(result);
+                totalCount+=result.size();
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
         }
-        log.info("用户信息保存保存"+totalCount+"工号映射更新完成");
+        log.info("物料信息保存保存"+totalCount);
     }
 
     /**
@@ -161,8 +230,8 @@ public class ChuanyunScheduledTask {
         while (flag){
             try {
                 //从氚云查询数据
-                Filter filter=Filter.instance(start,start+20,true);
-                ChuanyunFindAllBizDTO<ChuanyunProjectDO> chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectDO.SCHEMA_CODE,filter);
+                var filter=Filter.instance(start,start+20,true);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectDO.SCHEMA_CODE,filter);
                 if(chuanyunFindAllResponse.getReturnData()==null){
                     flag=false;
                     continue;
@@ -173,7 +242,7 @@ public class ChuanyunScheduledTask {
                     flag=false;
                 }
                 //转化为POJO
-                ObjectMapper objectMapper=new ObjectMapper();
+                var objectMapper=new ObjectMapper();
                 List<ChuanyunProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
                 //更新缓存中的项目映射表
                 result.forEach(projectBO -> ChuanYunConstant.PROJECT_CODE.put(projectBO.getProjectCode(),projectBO.getObjectId()));
@@ -252,4 +321,24 @@ public class ChuanyunScheduledTask {
             currentPage++;
         }
     }
+
+    private void getUserListFromChuanyun() {
+        var chuanyunFindAllDTO=chuanYunManager.findAll(ChuanyunUserDO.APP_CODE,ChuanyunUserDO.ACTION_NAME,ChuanyunUserDO.CONTROLLER);
+        var objectMapper=new ObjectMapper();
+        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+"工号映射更新完成");
+    }
 }

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

@@ -58,18 +58,20 @@ public class DingTalkScheduledTask {
 
     /**
      * 每个小时定期更新出差申请数据
+     * 出差申请信息暂时不进行更新
      */
     @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
     void updateBusinessTripProcessInstanceIdList() throws ApiException {
-        updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_BUSINESS_TRIP);
+//        updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_BUSINESS_TRIP);
     }
 
     /**
      * 每小时根据出差申请Id跟新出差申请信息。
+     * 出差申请信息暂时不进行更新
      */
     @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
     void updateProcessInstanceList() throws ApiException {
-        updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_MATERIAL_RESEND);
+//        updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_MATERIAL_RESEND);
     }
 
     private void updateProcessInstanceIdList(String businessTripProcessCode) throws ApiException {