package pwc.taxtech.atms.service.impl; import com.alibaba.fastjson.JSON; import org.apache.commons.lang3.StringUtils; import org.nutz.lang.Lang; import org.nutz.lang.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import pwc.taxtech.atms.common.util.BeanUtil; import pwc.taxtech.atms.dao.*; import pwc.taxtech.atms.dto.ebsdto.*; import pwc.taxtech.atms.entity.*; import pwc.taxtech.atms.service.EbsApiService; import pwc.taxtech.atms.vat.dao.*; import pwc.taxtech.atms.vat.entity.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Optional; import java.util.UUID; @Service public class EbsApiServiceImpl implements EbsApiService { @Resource private JournalEntryMapper journalEntryMapper; @Resource private TrialBalanceMapper trialBalanceMapper; @Resource private CashFlowMapper cashFlowMapper; @Resource private CashFlowFinalMapper cashFlowFinalMapper; @Resource private BalanceSheetMapper balanceSheetMapper; @Resource private BalanceSheetPrcMapper balanceSheetPrcMapper; @Resource private BalanceSheetFinalMapper balanceSheetFinalMapper; @Resource private BalanceSheetPrcFinalMapper balanceSheetPrcFinalMapper; @Resource private ProfitLossStatementMapper profitLossStatementMapper; @Resource private ProfitLossStatementPrcMapper profitLossStatementPrcMapper; @Resource private ProfitLossStatementFinalMapper profitLossStatementFinalMapper; @Resource private ProfitLossStatementPrcFinalMapper profitLossStatementPrcFinalMapper; @Resource private OrganizationAccountingRateMapper organizationAccountingRateMapper; @Resource private OrganizationMapper organizationMapper; @Resource private ProjectMapper projectMapper; @Resource private OrganizationEmployeeMapper organizationEmployeeMapper; @Resource private OrganizationExtraMapper organizationExtraMapper; @Resource private DataImportLogMapper dataImportLogMapper; @Resource private DistributedIdService distributedIdService; @Resource private BeanUtil beanUtil; private static final Logger logger = LoggerFactory.getLogger(EbsApiServiceImpl.class); @Override public void queryRemoteServerThenUpdateJE(Long id ,List<JournalEntryQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateJE 日记账表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS JournalEntry 日记账表 response, skip processing"); return; } logger.debug("requestJEItems 日记账表条目:" + JSON.toJSONString(items)); for (JournalEntryQueryDto a : items) { try { processJE(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateJE 日记账表,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdateTB(Long id ,List<TrialBalanceQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateTB 科目余额表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS TrialBalance 科目余额表 response, skip processing"); return; } logger.debug("requestTBItems 科目余额表条目:" + JSON.toJSONString(items)); for (TrialBalanceQueryDto a : items) { try { processTB(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateTB 科目余额表,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdateCF(Long id ,List<CashFlowQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateCF 现金流量表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS CashFlow 现金流量表 response, skip processing"); return; } logger.debug("requestCFItems 现金流量表条目:" + JSON.toJSONString(items)); for (CashFlowQueryDto a : items) { try { processCF(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateCF 现金流量表,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdateBS(Long id ,List<BalanceSheetQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateBS 资产负债表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS BalanceSheet 资产负债表 response, skip processing"); return; } logger.debug("requestBSItems 资产负债表条目:" + JSON.toJSONString(items)); for (BalanceSheetQueryDto a : items) { try { processBS(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateBS 资产负债表,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdateBSprc(Long id ,List<BalanceSheetPrcQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateBSprc 资产负债表PRC"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS BSprc 资产负债表PRC response, skip processing"); return; } logger.debug("requestBSprcItems 资产负债表PRC条目:" + JSON.toJSONString(items)); for (BalanceSheetPrcQueryDto a : items) { try { processBSprc(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateBSprc 资产负债表PRC,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdatePL(Long id ,List<ProfitLossStatementQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdatePL 利润表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS ProfitLossStatement 利润表 response, skip processing"); return; } logger.debug("requestPLItems 利润表条目:" + JSON.toJSONString(items)); for (ProfitLossStatementQueryDto a : items) { try { processPL(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdatePL 利润表,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdatePLprc(Long id ,List<ProfitLossStatementPrcQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdatePLprc 利润表PRC"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS ProfitLossStatement 利润表PRC response, skip processing"); return; } logger.debug("requestPLItems 利润表PRC条目:" + JSON.toJSONString(items)); for (ProfitLossStatementPrcQueryDto a : items) { try { processPLprc(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdatePLprc 利润表PRC,took [{}] ms", System.currentTimeMillis() - start); } @Override public void queryRemoteServerThenUpdateOAR(Long id ,List<OrganizationAccountingRateQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateOAR 汇率表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS OrganizationAccountingRate 汇率表 response, skip processing"); return; } logger.debug("requestPLItems 汇率表:" + JSON.toJSONString(items)); for (OrganizationAccountingRateQueryDto a : items) { try { processOAR(id,a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateOAR 汇率表,took [{}] ms", System.currentTimeMillis() - start); } private void processJE(Long id,JournalEntryQueryDto item) { JournalEntryExample journalEntryExample = new JournalEntryExample(); item.setTaskId(String.valueOf(id)); //日记账头ID和日记账行号 journalEntryExample.createCriteria().andHeaderIdEqualTo(item.getHeaderId()).andLineNumEqualTo(item.getLineNum()).andTaskIdNotEqualTo(item.getTaskId()); List<JournalEntry> journalEntryList = journalEntryMapper.selectByExample(journalEntryExample); //唯一则更新否则插入 JournalEntry journalEntry = new JournalEntry(); if (journalEntryList.size() == 1) { logger.debug("exist and update journalEntry headerId:{},lineNum:{},taskId:{}", item.getHeaderId(), item.getLineNum(),item.getTaskId()); journalEntry = journalEntryList.get(0); populateFieldsJE(item, journalEntry); journalEntry.setId(journalEntryList.get(0).getId()); journalEntryMapper.updateByPrimaryKeySelective(journalEntry); } else { logger.debug("miss and insert journalEntry headerId:{},lineNum:{},taskId:{}", item.getHeaderId(), item.getLineNum(),item.getTaskId()); populateFieldsJE(item, journalEntry); journalEntry.setId(distributedIdService.nextId()); journalEntry.setCreatedBy(""); journalEntry.setCreatedDate(new Date()); journalEntry.setCreateTime(new Date()); journalEntryMapper.insertSelective(journalEntry); } } private void processTB(Long id,TrialBalanceQueryDto item) { TrialBalanceExample example = new TrialBalanceExample(); item.setTaskId(String.valueOf(id)); //机构编码和期间 example.createCriteria().andSegment1EqualTo(item.getSegment1()).andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<TrialBalance> itemList = trialBalanceMapper.selectByExample(example); //唯一则更新否则插入 TrialBalance result = new TrialBalance(); if (itemList.size() >0) { logger.debug("exist and delete TrialBalance EntityCode:{},Period:{},taskId:{}", item.getSegment1(), convertPeriodStr2Int(item.getPeriod()),item.getTaskId()); trialBalanceMapper.deleteByExample(example); } logger.debug("insert TrialBalance EntityCode:{},Period:{},taskId:{}", item.getSegment1(), convertPeriodStr2Int(item.getPeriod()),item.getTaskId()); populateFieldsTB(item, result); result.setId(distributedIdService.nextId()); result.setCreateBy(getCurrentOperatorName(id)); result.setCreateTime(new Date()); trialBalanceMapper.insertSelective(result); } private void processCF(Long id,CashFlowQueryDto item) { CashFlowExample example = new CashFlowExample(); item.setTaskId(String.valueOf(id)); //机构编码和期间 example.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<CashFlow> itemList = cashFlowMapper.selectByExample(example); //唯一则更新否则插入 CashFlow result = new CashFlow(); if (itemList.size() >0) { logger.debug("exist and delete CashFlow EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); cashFlowMapper.deleteByExample(example); } logger.debug("insert CashFlow EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); populateFieldsCF(item, result); result.setId(distributedIdService.nextId()); result.setCreateTime(new Date()); result.setCreateBy(getCurrentOperatorName(id)); cashFlowMapper.insertSelective(result); logger.debug("start to insert cashFlowFinal "); // 1、写入最终表 CashFlowExample cashFlowExample = new CashFlowExample(); cashFlowExample.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(result.getPeriod()).andTaskIdNotEqualTo(item.getTaskId()); if (cashFlowFinalMapper.countByExample(cashFlowExample) > 0) { cashFlowFinalMapper.deleteByExample(cashFlowExample); } cashFlowFinalMapper.insertSelective(result); } private void processBS(Long id,BalanceSheetQueryDto item) { BalanceSheetExample example = new BalanceSheetExample(); item.setTaskId(String.valueOf(id)); //机构编码和期间 example.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<BalanceSheet> itemList = balanceSheetMapper.selectByExample(example); //唯一则更新否则插入 BalanceSheet result = new BalanceSheet(); if (itemList.size() >0) { logger.debug("exist and delete BalanceSheet EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); balanceSheetMapper.deleteByExample(example); } logger.debug("insert BalanceSheet EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); populateFieldsBS(item, result); result.setId(distributedIdService.nextId()); result.setCreateBy(getCurrentOperatorName(id)); result.setCreateTime(new Date()); balanceSheetMapper.insertSelective(result); logger.debug("start to insert balanceSheetFinal "); // 1、写入最终表 BalanceSheetExample balanceSheetExample = new BalanceSheetExample(); balanceSheetExample.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(result.getPeriod()).andTaskIdNotEqualTo(item.getTaskId()); if (balanceSheetFinalMapper.countByExample(balanceSheetExample) > 0) { balanceSheetFinalMapper.deleteByExample(balanceSheetExample); } balanceSheetFinalMapper.insertSelective(result); } private void processBSprc(Long id,BalanceSheetPrcQueryDto item) { BalanceSheetPrcExample example = new BalanceSheetPrcExample(); item.setTaskId(String.valueOf(id)); //机构编码和期间 example.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<BalanceSheetPrc> itemList = balanceSheetPrcMapper.selectByExample(example); //唯一则更新否则插入 BalanceSheetPrc result = new BalanceSheetPrc(); if (itemList.size() >0) { logger.debug("exist and delete BalanceSheetPrc EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); balanceSheetPrcMapper.deleteByExample(example); } logger.debug("insert BalanceSheetPrc EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); populateFieldsBSprc(item, result); result.setId(distributedIdService.nextId()); result.setCreateBy(getCurrentOperatorName(id)); result.setCreateTime(new Date()); balanceSheetPrcMapper.insertSelective(result); // 1、写入最终表 logger.debug("start to insert BalanceSheetPrcFinal "); BalanceSheetPrcExample balanceSheetPrcExample = new BalanceSheetPrcExample(); balanceSheetPrcExample.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(result.getPeriod()).andTaskIdNotEqualTo(item.getTaskId()); if (balanceSheetPrcFinalMapper.countByExample(balanceSheetPrcExample) > 0) { balanceSheetPrcFinalMapper.deleteByExample(balanceSheetPrcExample); } balanceSheetPrcFinalMapper.insertSelective(result); } private void processPL(Long id,ProfitLossStatementQueryDto item) { ProfitLossStatementExample example = new ProfitLossStatementExample(); item.setTaskId(String.valueOf(id)); //机构编码和期间 example.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<ProfitLossStatement> itemList = profitLossStatementMapper.selectByExample(example); //唯一则更新否则插入 ProfitLossStatement result = new ProfitLossStatement(); if (itemList.size() >0) { logger.debug("exist and delete ProfitLossStatement EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); profitLossStatementMapper.deleteByExample(example); } logger.debug("insert ProfitLossStatement EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); populateFieldsPLS(item, result); result.setId(distributedIdService.nextId()); result.setCreateTime(new Date()); result.setCreateBy(getCurrentOperatorName(id)); profitLossStatementMapper.insertSelective(result); logger.debug("start to insert profitLossStatementFinal "); // 1、写入最终表 ProfitLossStatementExample profitLossStatementExample = new ProfitLossStatementExample(); profitLossStatementExample.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(result.getPeriod()).andTaskIdNotEqualTo(item.getTaskId()); if (profitLossStatementFinalMapper.countByExample(profitLossStatementExample) > 0) { profitLossStatementFinalMapper.deleteByExample(profitLossStatementExample); } profitLossStatementFinalMapper.insertSelective(result); } private void processPLprc(Long id,ProfitLossStatementPrcQueryDto item) { ProfitLossStatementPrcExample example = new ProfitLossStatementPrcExample(); item.setTaskId(String.valueOf(id)); //机构编码和期间 example.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<ProfitLossStatementPrc> itemList = profitLossStatementPrcMapper.selectByExample(example); //唯一则更新否则插入 ProfitLossStatementPrc result = new ProfitLossStatementPrc(); if (itemList.size() >0) { logger.debug("exist and delete ProfitLossStatementPrc EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); profitLossStatementPrcMapper.deleteByExample(example); } logger.debug("insert ProfitLossStatementPrc EntityCode:{},Period:{},taskId:{}", item.getEntityCode(), item.getPeriod(),item.getTaskId()); populateFieldsPLSprc(item, result); result.setId(distributedIdService.nextId()); result.setCreateTime(new Date()); result.setCreateBy(getCurrentOperatorName(id)); profitLossStatementPrcMapper.insertSelective(result); logger.debug("start to insert profitLossStatementPrcFinal "); // 1、写入最终表 ProfitLossStatementPrcExample profitLossStatementPrcExample = new ProfitLossStatementPrcExample(); profitLossStatementPrcExample.createCriteria().andEntityCodeEqualTo(item.getEntityCode()).andPeriodEqualTo(result.getPeriod()).andTaskIdNotEqualTo(item.getTaskId()); if (profitLossStatementPrcFinalMapper.countByExample(profitLossStatementPrcExample) > 0) { profitLossStatementPrcFinalMapper.deleteByExample(profitLossStatementPrcExample); } profitLossStatementPrcFinalMapper.insertSelective(result); } private void processOAR(Long id,OrganizationAccountingRateQueryDto item) { OrganizationAccountingRateExample example = new OrganizationAccountingRateExample(); item.setTaskId(String.valueOf(id)); //期间 example.createCriteria().andPeriodEqualTo(convertPeriodStr2Int(item.getPeriod())).andTaskIdNotEqualTo(item.getTaskId()); List<OrganizationAccountingRate> itemList = organizationAccountingRateMapper.selectByExample(example); //唯一则更新否则插入 OrganizationAccountingRate result = new OrganizationAccountingRate(); if (itemList.size() >0) { logger.debug("exist and delete OrganizationAccountingRate Period:{},taskId:{}", item.getPeriod(),item.getTaskId()); organizationAccountingRateMapper.deleteByExample(example); } logger.debug("insert OrganizationAccountingRate Period:{},taskId:{}", item.getPeriod(),item.getTaskId()); populateFieldsOAR(item, result); result.setId(distributedIdService.nextId()); result.setCreateTime(new Date()); result.setCreateBy(getCurrentOperatorName(id)); organizationAccountingRateMapper.insertSelective(result); } private void populateFieldsJE(JournalEntryQueryDto item, JournalEntry result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getSegment1()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 20)); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setCurrencyCode(trimLimit(item.getCurrencyCode(), 20)); result.setStatus(item.getStatus()); result.setHeaderId(trimLimit(item.getHeaderId(), 128)); result.setLineNum(trimLimit(item.getLineNum(), 300)); result.setApprovalStatus(trimLimit(item.getApprovalStatus(), 20)); result.setPostedStatus(trimLimit(item.getPostedStatus(), 20)); result.setPeriod(originPeriod); result.setAccountingDate(ebsDateFormat(item.getAccountingDate())); result.setJournalSource(trimLimit(item.getJournalSource(), 20)); result.setCategory(trimLimit(item.getCategory(), 50)); result.setName(trimLimit(item.getName(), 300)); result.setVoucherNum(trimLimit(item.getVoucherNum(), 128)); result.setDescription(trimLimit(item.getDescription(), 500)); result.setSegment1(trimLimit(item.getSegment1(), 300)); result.setSegment2(trimLimit(item.getSegment2(), 300)); result.setSegment3(trimLimit(item.getSegment3(), 300)); result.setSegment4(trimLimit(item.getSegment4(), 300)); result.setSegment5(trimLimit(item.getSegment5(), 300)); result.setSegment6(trimLimit(item.getSegment6(), 300)); result.setSegment7(trimLimit(item.getSegment7(), 300)); result.setSegment8(trimLimit(item.getSegment8(), 300)); result.setSegment9(trimLimit(item.getSegment9(), 300)); result.setSegment10(trimLimit(item.getSegment10(), 300)); result.setSegment1Name(trimLimit(item.getSegment1Name(), 300)); result.setSegment2Name(trimLimit(item.getSegment2Name(), 300)); result.setSegment3Name(trimLimit(item.getSegment3Name(), 300)); result.setSegment4Name(trimLimit(item.getSegment4Name(), 300)); result.setSegment5Name(trimLimit(item.getSegment5Name(), 300)); result.setSegment6Name(trimLimit(item.getSegment6Name(), 300)); result.setSegment7Name(trimLimit(item.getSegment7Name(), 300)); result.setSegment8Name(trimLimit(item.getSegment8Name(), 300)); result.setSegment9Name(trimLimit(item.getSegment9Name(), 300)); result.setSegment10Name(trimLimit(item.getSegment10Name(), 300)); result.setJournalCurrencyCode(trimLimit(item.getJournalCurrencyCode(), 20)); result.setSobCurrencyCode(trimLimit(item.getSobCurrencyCode(), 20)); result.setAccountedDr(Optional.ofNullable(item.getAccountedDr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setAccountedCr(Optional.ofNullable(item.getAccountedCr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setEnteredDr(Optional.ofNullable(item.getEnteredDr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setEnteredCr(Optional.ofNullable(item.getEnteredCr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setCfItem(trimLimit(item.getCfItem(), 50)); result.setAttribute1(trimLimit(item.getAttribute1(), 300)); result.setAttribute2(ebsDateFormat(item.getAttribute2())); result.setAttribute3(trimLimit(item.getAttribute3(), 300)); result.setAttribute4(trimLimit(item.getAttribute4(), 300)); result.setAttribute5(trimLimit(item.getAttribute5(), 300)); result.setAttribute6(trimLimit(item.getAttribute6(), 300)); result.setAttribute7(trimLimit(item.getAttribute7(), 300)); result.setAttribute8(trimLimit(item.getAttribute8(), 300)); result.setAttribute9(trimLimit(item.getAttribute9(), 300)); result.setAttribute10(trimLimit(item.getAttribute10(), 300)); result.setAttribute11(trimLimit(item.getAttribute11(), 300)); result.setAttribute12(trimLimit(item.getAttribute12(), 300)); result.setAttribute13(trimLimit(item.getAttribute13(), 300)); result.setAttribute14(trimLimit(item.getAttribute14(), 300)); result.setAttribute15(trimLimit(item.getAttribute15(), 300)); result.setAttribute16(trimLimit(item.getAttribute16(), 300)); result.setLateUpdatedBy(trimLimit(item.getLateUpdatedBy(), 50)); result.setLateUpdatedDate(ebsDateFormat(item.getLateUpdatedDate())); result.setUpdateTime(new Date()); result.setCreatedBy(item.getCreatedBy()); result.setCreatedDate(ebsDateFormat(item.getCreatedDate())); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setTmsPeriod(convertPeriod); } private void populateFieldsTB(TrialBalanceQueryDto item, TrialBalance result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getSegment1()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 20)); result.setPeriod(originPeriod); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setCurrencyCode(trimLimit(item.getCurrencyCode(), 20)); result.setStatus(item.getStatus()); result.setCategory(trimLimit(item.getCategory(), 10)); result.setAccountCategory(trimLimit(item.getAccountCategory(), 20)); result.setAcctCode1(trimLimit(item.getAcctCode1(), 300)); result.setAcctName1(trimLimit(item.getAcctName1(), 300)); result.setAcctName2(trimLimit(item.getAcctName2(), 300)); result.setAcctName3(trimLimit(item.getAcctName3(), 300)); result.setSegment1(trimLimit(item.getSegment1(), 300)); result.setSegment2(trimLimit(item.getSegment2(), 300)); result.setSegment3(trimLimit(item.getSegment3(), 300)); result.setSegment4(trimLimit(item.getSegment4(), 300)); result.setSegment5(trimLimit(item.getSegment5(), 300)); result.setSegment6(trimLimit(item.getSegment6(), 300)); result.setSegment7(trimLimit(item.getSegment7(), 300)); result.setSegment8(trimLimit(item.getSegment8(), 300)); result.setSegment9(trimLimit(item.getSegment9(), 300)); result.setSegment10(trimLimit(item.getSegment10(), 300)); result.setSegment1Name(trimLimit(item.getSegment1Name(), 300)); result.setSegment2Name(trimLimit(item.getSegment2Name(), 300)); result.setSegment3Name(trimLimit(item.getSegment3Name(), 300)); result.setSegment4Name(trimLimit(item.getSegment4Name(), 300)); result.setSegment5Name(trimLimit(item.getSegment5Name(), 300)); result.setSegment6Name(trimLimit(item.getSegment6Name(), 300)); result.setSegment7Name(trimLimit(item.getSegment7Name(), 300)); result.setSegment8Name(trimLimit(item.getSegment8Name(), 300)); result.setSegment9Name(trimLimit(item.getSegment9Name(), 300)); result.setSegment10Name(trimLimit(item.getSegment10Name(), 300)); result.setBegBal(Optional.ofNullable(item.getBegBal()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setPeriodDr(Optional.ofNullable(item.getPeriodDr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setPeriodCr(Optional.ofNullable(item.getPeriodCr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setEndBal(Optional.ofNullable(item.getEndBal()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setQtdDr(Optional.ofNullable(item.getQtdDr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setQtdCr(Optional.ofNullable(item.getQtdCr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdDr(Optional.ofNullable(item.getYtdDr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdCr(Optional.ofNullable(item.getYtdCr()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setBegBalBeq(Optional.ofNullable(item.getBegBalBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setPeriodDrBeq(Optional.ofNullable(item.getPeriodDrBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setPeriodCrBeq(Optional.ofNullable(item.getPeriodCrBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setEndBalBeq(Optional.ofNullable(item.getEndBalBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setQtdDrBeq(Optional.ofNullable(item.getQtdDrBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setQtdCrBeq(Optional.ofNullable(item.getQtdCrBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdDrBeq(Optional.ofNullable(item.getYtdDrBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdCrBeq(Optional.ofNullable(item.getYtdCrBeq()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setUpdateTime(new Date()); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setTmsPeriod(convertPeriod); } private void populateFieldsCF(CashFlowQueryDto item, CashFlow result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getEntityCode()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 128)); result.setPeriod(originPeriod); result.setStatus(item.getStatus()); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setLedgerCurrencyCode(trimLimit(item.getLedgerCurrencyCode(), 128)); result.setEntityCode(trimLimit(item.getEntityCode(), 128)); result.setEntityName(trimLimit(item.getEntityName(), 300)); result.setCategory(trimLimit(item.getCategory(), 300)); result.setFrequency(trimLimit(item.getFrequency(), 300)); result.setItemName(trimLimit(item.getItemName(), 300)); result.setItemName2(trimLimit(item.getItemName2(), 300)); result.setPeriodAmt(Optional.ofNullable(item.getPeriodAmt()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdAmt(Optional.ofNullable(item.getYtdAmt()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setUpdateTime(new Date()); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setTmsPeriod(convertPeriod); } private void populateFieldsBS(BalanceSheetQueryDto item, BalanceSheet result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getEntityCode()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 20)); result.setPeriod(originPeriod); result.setStatus(item.getStatus()); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setLedgerCurrencyCode(trimLimit(item.getLedgerCurrencyCode(), 20)); result.setEntityCode(trimLimit(item.getEntityCode(), 300)); result.setEntityName(trimLimit(item.getEntityName(), 300)); result.setCategory(trimLimit(item.getCategory(), 300)); result.setFrequency(trimLimit(item.getFrequency(), 300)); result.setItemName(trimLimit(item.getItemName(), 300)); result.setEndBal(Optional.ofNullable(item.getEndBal()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setBegBal(Optional.ofNullable(item.getBegBal()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setUpdateTime(new Date()); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setTmsPeriod(convertPeriod); } private void populateFieldsBSprc(BalanceSheetPrcQueryDto item, BalanceSheetPrc result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getEntityCode()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 20)); result.setPeriod(originPeriod); result.setStatus(item.getStatus()); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setLedgerCurrencyCode(trimLimit(item.getLedgerCurrencyCode(), 20)); result.setEntityCode(trimLimit(item.getEntityCode(), 300)); result.setEntityName(trimLimit(item.getEntityName(), 300)); result.setCategory(trimLimit(item.getCategory(), 300)); result.setFrequency(trimLimit(item.getFrequency(), 300)); result.setItemName(trimLimit(item.getItemName(), 300)); result.setEndBal(Optional.ofNullable(item.getEndBal()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setBegBal(Optional.ofNullable(item.getBegBal()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setTmsPeriod(convertPeriod); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setUpdateTime(new Date()); } private void populateFieldsPLS(ProfitLossStatementQueryDto item, ProfitLossStatement result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getEntityCode()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 20)); result.setPeriod(originPeriod); result.setStatus(item.getStatus()); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setLedgerCurrencyCode(trimLimit(item.getLedgerCurrencyCode(), 20)); result.setEntityCode(trimLimit(item.getEntityCode(), 300)); result.setEntityName(trimLimit(item.getEntityName(), 300)); result.setCategory(trimLimit(item.getCategory(), 300)); result.setFrequency(trimLimit(item.getFrequency(), 300)); result.setItemName(trimLimit(item.getItemName(), 300)); result.setPeriodAmt(Optional.ofNullable(item.getPeriodAmt()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdAmt(Optional.ofNullable(item.getYtdAmt()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setTmsPeriod(convertPeriod); result.setUpdateTime(new Date()); } private void populateFieldsPLSprc(ProfitLossStatementPrcQueryDto item, ProfitLossStatementPrc result) { Integer originPeriod=convertPeriodStr2Int(item.getPeriod()); Integer convertPeriod=convertPeriod12(item.getPeriod()); result.setOrganizationId(getOrganizationByEbsCode(item.getEntityCode()).getId()); result.setProjectId(getProjectByEbsCodeAndPeriod(result.getOrganizationId(),convertPeriod).getId()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 20)); result.setPeriod(originPeriod); result.setStatus(item.getStatus()); result.setLedgerId(trimLimit(item.getLedgerId(), 128)); result.setLedgerName(trimLimit(item.getLedgerName(), 300)); result.setLedgerCurrencyCode(trimLimit(item.getLedgerCurrencyCode(), 20)); result.setEntityCode(trimLimit(item.getEntityCode(), 300)); result.setEntityName(trimLimit(item.getEntityName(), 300)); result.setCategory(trimLimit(item.getCategory(), 300)); result.setFrequency(trimLimit(item.getFrequency(), 300)); result.setItemName(trimLimit(item.getItemName(), 300)); result.setPeriodAmt(Optional.ofNullable(item.getPeriodAmt()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setYtdAmt(Optional.ofNullable(item.getYtdAmt()) .map(x -> x.setScale(4, RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO)); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setUpdateTime(new Date()); result.setTmsPeriod(convertPeriod); } private void populateFieldsOAR(OrganizationAccountingRateQueryDto item, OrganizationAccountingRate result) { //汇率表period存放格式原始yyyyMMdd Integer convertPeriod=convertPeriodStr2Int(item.getPeriod()); result.setDate(ebsDateFormat(item.getDate())); result.setSource(trimLimit(item.getSource(), 128)); result.setPeriod(convertPeriod); result.setConvertionType(trimLimit(item.getConvertionType(), 100)); result.setCurrencyFrom(trimLimit(item.getCurrencyFrom(), 10)); result.setCurrencyTo(trimLimit(item.getCurrencyTo(), 10)); result.setEndDate(ebsDateFormat(item.getInvalidDate())); result.setRate(item.getRate().floatValue()); result.setTaskId(trimLimit(item.getTaskId(), 128)); result.setUpdateTime(new Date()); } @Override public void queryRemoteServerThenUpdateOrg(Long id , List<OrganizationQueryDto> items) { long start = System.currentTimeMillis(); logger.debug("start queryRemoteServerThenUpdateOrg 机构表"); //判断数据是否存在 if (items.size() == 0) { logger.error("empty EBS Organization 机构表 response, skip processing"); return; } logger.debug("organization 汇率表:" + JSON.toJSONString(items)); for (OrganizationQueryDto a : items) { try { processORG(a); } catch (Exception e) { logger.error("break loop as catch:" + e, e); } } updateDataImportLog(id,items.size()); logger.debug("end queryRemoteServerThenUpdateOrg 机构表,took [{}] ms", System.currentTimeMillis() - start); } @Override public void changeCallBackStatus(EbsCallBackDto ebsCallBackDto) { DataImportLog dataImportLog = new DataImportLog(); dataImportLog.setId(ebsCallBackDto.getTaskId()); dataImportLog.setImportResult(ebsCallBackDto.getTaskStatus().equals("S")?true:false); dataImportLog.setErrorMsg(ebsCallBackDto.getTaskDesc()); dataImportLog.setUpdateTime(new Date()); int res = dataImportLogMapper.updateByPrimaryKeySelective(dataImportLog); if (res < 0) { logger.warn(String.format("warn callBack end [%s]", ebsCallBackDto.getTaskId())); } } private void processORG(OrganizationQueryDto a) { // 机构信息 OrganizationExample organizationExample = new OrganizationExample(); organizationExample.createCriteria().andTaxPayerNumberEqualTo(a.getTaxPayerNumber()); List<Organization> orgs = organizationMapper.selectByExample(organizationExample); Organization org = beanUtil.copyProperties(a,new Organization()); OrganizationExample orgExample = new OrganizationExample(); orgExample.createCriteria().andNameEqualTo(a.getParentName()); List<Organization> orgParents = organizationMapper.selectByExample(organizationExample); String orgId = ""; if(orgParents.size()>0){ org.setParentId(orgParents.get(0).getId()); } if(orgs.size()<1){ orgId = UUID.randomUUID().toString(); org.setId(orgId); org.setApiUpdateFlag(true); organizationMapper.insertSelective(org); }else{ orgId = orgs.get(0).getId(); org.setId(orgs.get(0).getId()); org.setApiUpdateFlag(true); org.setUpdateTime(new Date()); organizationMapper.updateByPrimaryKeySelective(org); } // 机构其他信息 OrganizationExtraExample organizationExtraExample = new OrganizationExtraExample(); organizationExtraExample.createCriteria().andOrganizationIdEqualTo(org.getId()); List<OrganizationExtra> orgExs = organizationExtraMapper.selectByExample(organizationExtraExample); OrganizationExtra orgEx = beanUtil.copyProperties(a,new OrganizationExtra()); orgEx.setReportingCurrency(a.getCurrencyCode()); if(orgExs.size()<1){ orgEx.setId(distributedIdService.nextId()); orgEx.setOrganizationId(orgId); organizationExtraMapper.insertSelective(orgEx); }else{ orgEx.setId(orgExs.get(0).getId()); orgEx.setOrganizationId(orgId); orgEx.setUpdateTime(new Date()); organizationExtraMapper.updateByExampleSelective(orgEx,organizationExtraExample); } // 雇员信息 OrganizationEmployee oe = new OrganizationEmployee(); oe.setId(distributedIdService.nextId()); oe.setOrganizationId(orgId); oe.setEmployeesNumEnd(a.getStaffSize()); organizationEmployeeMapper.insertSelective(oe); } private void updateDataImportLog(Long id, int size) { DataImportLog dataImportLog = new DataImportLog(); dataImportLog.setId(id); dataImportLog.setRecordSize(size); dataImportLog.setImportResult(true); dataImportLog.setUpdateTime(new Date()); int res = dataImportLogMapper.updateByPrimaryKeySelective(dataImportLog); if (res < 0) { logger.warn(String.format("无调用记录[%s]", id)); } } /** * 获取操作人信息 * @param id * @return */ private String getCurrentOperatorName(Long id){ DataImportLog dataImportLog= dataImportLogMapper.selectByPrimaryKey(id); String operator=dataImportLog!=null?dataImportLog.getOperator():""; return operator; } /** * 获取格式化时间 * 返回时间类型 yyyy-MM-dd HH:mm:ss * @param date * @return */ private Date ebsDateFormat(String date){ if(date!=null){ try { Integer x= date.split("-").length-1; SimpleDateFormat simpleDateFormat=null; Date dateFm=null; if(x==1) { simpleDateFormat=new SimpleDateFormat("yyyy-MM"); dateFm=simpleDateFormat.parse(date); return dateFm; } Integer y= date.split(":").length-1; if(y==2) { simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dateFm=simpleDateFormat.parse(date); return dateFm; } if(x==2) { simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); dateFm=simpleDateFormat.parse(date); return dateFm; } }catch (ParseException px){ px.printStackTrace(); } } return null; } /**对拓展字段进行查询赋值 * 根据Ebs返回的数据机构编码查询到具体机构 * @param code * @return */ private Organization getOrganizationByEbsCode(String code){ OrganizationExample example=new OrganizationExample(); example.createCriteria().andCodeEqualTo(code); List<Organization> list=organizationMapper.selectByExample(example); Organization organization=new Organization(); organization.setId(""); if(list.size()>0){ organization.setId(list.get(0).getId()); } return organization; } /** * *对拓展字段进行查询赋值 * 根据Ebs返回的数据机构编码和期间查询到具体机构,期间到年yyyy=period/100 * @param orgId * @param period * @return */ private Project getProjectByEbsCodeAndPeriod(String orgId,Integer period){ ProjectExample example=new ProjectExample(); example.createCriteria().andOrganizationIdEqualTo(orgId).andYearEqualTo(period/100); List<Project> list=projectMapper.selectByExample(example); Project project=new Project(); project.setId(""); if(list.size()>0){ project.setId(list.get(0).getId()); } return project; } /** * 期间格式转换为原始的int类型 * @param periodStr * @return */ private Integer convertPeriodStr2Int(String periodStr){ periodStr=StringUtils.replace(periodStr, "-", ""); Integer period=Integer.parseInt(periodStr); return period; } /** * 期间格式转换yyyy13均改为yyyy12 * 返回的数据与用户在税务系统选择的期间需一致, * 但用户选择12期时请求的数据应为YYYY-12和YYYY-13即12期和13期的数据, * EBS返回的数据可以包含YYYY-12和YYYY-13 * @param periodStr * @return */ private Integer convertPeriod12(String periodStr){ Integer period= convertPeriodStr2Int(periodStr); if(period%100>12){ period= (period/100)*100+12; } return period; } /** * Trim字符串,并限定字符串的长度. 如果是输入值是空指针,会返回空字符串 */ public String trimLimit(String str, int limit) { if (Strings.isBlank(str)) { return ""; } String tmp = str.trim(); String result = cutString(tmp, limit); if (result == null) { result = ""; } return result; } /** * 限定字符串的长度. */ public String cutString(String s, int length) { if (Lang.isEmpty(length) || Lang.isEmpty(s)) { return ""; } else if (s.length() <= length) { return s; } else { return s.substring(0, length); } } }