|
@@ -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);
|
|
|
|
+ }
|
|
|
|
+}
|