|
@@ -0,0 +1,143 @@
|
|
|
|
+package com.galaxis.manatee.task;
|
|
|
|
+
|
|
|
|
+import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
+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.math.BigDecimal;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @author zcj
|
|
|
|
+ * @version 0.1
|
|
|
|
+ * @date 2020/5/1 4:25 下午
|
|
|
|
+ */
|
|
|
|
+@Slf4j
|
|
|
|
+@Service
|
|
|
|
+public class ChuanyunFinancialScheduledTask {
|
|
|
|
+
|
|
|
|
+ private final Integer pageSize=20;
|
|
|
|
+ private final ChuanYunManager chuanYunManager;
|
|
|
|
+ private final ChuanyunReimbursementDao chuanyunReimbursementDao;
|
|
|
|
+ private final ChuanyunCompanyDao chuanyunCompanyDao;
|
|
|
|
+ private final ChuanyunSupplierDao chuanyunSupplierDao;
|
|
|
|
+ private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
|
|
|
|
+ private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
|
|
|
|
+ private final ChuanyunUserDao chuanyunUserDao;
|
|
|
|
+ private final ChuanyunCostDao chuanyunCostDao;
|
|
|
|
+ private final ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao;
|
|
|
|
+
|
|
|
|
+ public ChuanyunFinancialScheduledTask(ChuanYunManager chuanYunManager, ChuanyunReimbursementDao chuanyunReimbursementDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunSupplierDao chuanyunSupplierDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunUserDao chuanyunUserDao, ChuanyunCostDao chuanyunCostDao, ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao) {
|
|
|
|
+ this.chuanYunManager = chuanYunManager;
|
|
|
|
+ this.chuanyunReimbursementDao = chuanyunReimbursementDao;
|
|
|
|
+ this.chuanyunCompanyDao = chuanyunCompanyDao;
|
|
|
|
+ this.chuanyunSupplierDao = chuanyunSupplierDao;
|
|
|
|
+ this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
|
|
|
|
+ this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
|
|
|
|
+ this.chuanyunUserDao = chuanyunUserDao;
|
|
|
|
+ this.chuanyunCostDao = chuanyunCostDao;
|
|
|
|
+ this.chuanyunReimbursementSubjectDao = chuanyunReimbursementSubjectDao;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 将报销信息从氚云中同步
|
|
|
|
+ */
|
|
|
|
+ @Scheduled(fixedDelay = 27600000L,initialDelay = 10000L)
|
|
|
|
+ private void reimbursementInformationSync(){
|
|
|
|
+ getReimbursementFromChuanyun();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取报销单
|
|
|
|
+ */
|
|
|
|
+ protected void getReimbursementFromChuanyun(){
|
|
|
|
+ var objectMapper=new ObjectMapper();
|
|
|
|
+ var start=0;
|
|
|
|
+ var totalCount=0L;
|
|
|
|
+ var flag=true;
|
|
|
|
+ List<String> matchersString=new ArrayList<>();
|
|
|
|
+ matchersString.add("Status_2,1");
|
|
|
|
+ while (flag){
|
|
|
|
+ try {
|
|
|
|
+ //从氚云查询数据
|
|
|
|
+ var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
|
|
|
|
+ var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunReimbursementDO.SCHEMA_CODE,filter);
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData()==null){
|
|
|
|
+ flag=false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
|
|
|
|
+ start+=pageSize;
|
|
|
|
+ }else{
|
|
|
|
+ flag=false;
|
|
|
|
+ }
|
|
|
|
+ //转化为POJO
|
|
|
|
+ List<ChuanyunReimbursementDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
|
|
+ //获取项目总数
|
|
|
|
+ totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
|
|
|
|
+ //保存
|
|
|
|
+ result.removeIf(chuanyunReimbursementDO->chuanyunReimbursementDao.findById(chuanyunReimbursementDO.getObjectId()).isPresent());
|
|
|
|
+ result.forEach(chuanyunReimbursementDO -> {
|
|
|
|
+ //将报销单中关联信息的id转化为具体的数据
|
|
|
|
+ try{
|
|
|
|
+ ChuanyunCompanyDO chuanyunCompanyDO=chuanyunCompanyDao.findById(chuanyunReimbursementDO.getBeneficiaryId()).orElseThrow();
|
|
|
|
+ if("对公".equals(chuanyunReimbursementDO.getPrivateOrPublic())&&!StringUtils.isEmpty(chuanyunReimbursementDO.getSupplierId())){
|
|
|
|
+ ChuanyunSupplierDO chuanyunSupplierDO=chuanyunSupplierDao.findById(chuanyunReimbursementDO.getSupplierId()).orElseThrow();
|
|
|
|
+ chuanyunReimbursementDO.setSupplierCode(chuanyunSupplierDO.getSupplierCode());
|
|
|
|
+ }
|
|
|
|
+ StringBuilder chuanyunGroupProjectCode=new StringBuilder();
|
|
|
|
+ if(!StringUtils.isEmpty(chuanyunReimbursementDO.getGroupProjectId())){
|
|
|
|
+ ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunReimbursementDO.getGroupProjectId()).orElseThrow();
|
|
|
|
+ chuanyunReimbursementDO.setGroupProjectCode(chuanyunGroupProjectDO.getProjectCode());
|
|
|
|
+ chuanyunGroupProjectCode.append(chuanyunGroupProjectDO.getProjectCode());
|
|
|
|
+ }
|
|
|
|
+ chuanyunReimbursementDO.setReimburseUserId(chuanyunReimbursementDO.getReimburseUserObject().getObjectId());
|
|
|
|
+ ChuanyunUserDO chuanyunUserDO=chuanyunUserDao.findById(chuanyunReimbursementDO.getReimburseUserId()).orElseThrow();
|
|
|
|
+ List<ChuanyunUserCompanyDO> userCompanyList=chuanyunUserCompanyDao.findAllByUserId(chuanyunReimbursementDO.getReimburseUserId());
|
|
|
|
+ if(userCompanyList.size()!=1){
|
|
|
|
+ log.error(chuanyunUserDO.getName()+chuanyunReimbursementDO.getReimburseUserId());
|
|
|
|
+ }else{
|
|
|
|
+ ChuanyunUserCompanyDO chuanyunUserCompany=userCompanyList.get(0);
|
|
|
|
+ chuanyunReimbursementDO.setReimburseUserCostCode(chuanyunUserCompany.getCostCode());
|
|
|
|
+ }
|
|
|
|
+ ChuanyunCostDO chuanyunCostDO=chuanyunCostDao.findById(chuanyunReimbursementDO.getBeneficiaryCostId()).orElseThrow();
|
|
|
|
+ chuanyunReimbursementDO.setBusinessDate(chuanyunReimbursementDO.getCreatedTime());
|
|
|
|
+ chuanyunReimbursementDO.setReimburseUserCompanyCode(chuanyunCompanyDO.getErpCode());
|
|
|
|
+ chuanyunReimbursementDO.setReimburseUserCode(chuanyunUserDO.getEmployeeNumber());
|
|
|
|
+ chuanyunReimbursementDO.setBeneficiaryBankCode(chuanyunCompanyDO.getBankCode());
|
|
|
|
+ chuanyunReimbursementDO.setBeneficiaryBankAccount(chuanyunCompanyDO.getBankAccount());
|
|
|
|
+ chuanyunReimbursementDO.setBeneficiaryCostCode(chuanyunCostDO.getCostCode());
|
|
|
|
+ chuanyunReimbursementDO.setCurrency("C001");
|
|
|
|
+ chuanyunReimbursementDO.setExchangeRate(new BigDecimal("1"));
|
|
|
|
+ chuanyunReimbursementDO.setSettlementMethod("101");
|
|
|
|
+ chuanyunReimbursementDO.setErpFlag(0);
|
|
|
|
+ chuanyunReimbursementDO.getDetailList().forEach(chuanyunReimbursementDetailDO -> {
|
|
|
|
+ ChuanyunReimbursementSubjectDO chuanyunReimbursementSubjectDO=chuanyunReimbursementSubjectDao.findById(chuanyunReimbursementDetailDO.getReimburseSubjectId()).orElseThrow();
|
|
|
|
+ chuanyunReimbursementDetailDO.setReimburseSubjectCode(chuanyunReimbursementSubjectDO.getSubjectCode());
|
|
|
|
+ chuanyunReimbursementDetailDO.setReimburseSubjectName(chuanyunReimbursementSubjectDO.getSubjectName());
|
|
|
|
+ chuanyunReimbursementDetailDO.setReimburseUserCompanyCode(chuanyunCompanyDO.getErpCode());
|
|
|
|
+ chuanyunReimbursementDetailDO.setGroupProjectCode(chuanyunGroupProjectCode.toString());
|
|
|
|
+ chuanyunReimbursementDetailDO.setReimburseUserCostCode(chuanyunCostDO.getCostCode());
|
|
|
|
+ });
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.warn(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ chuanyunReimbursementDao.saveAll(result);
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ log.info("报销信息保存保存"+totalCount);
|
|
|
|
+ }
|
|
|
|
+}
|