|
@@ -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+"项目映射更新完成");
|
|
|
- }
|
|
|
-
|
|
|
}
|