package com.zhitan.model.service.impl; import com.zhitan.common.enums.CalcType; import com.zhitan.common.enums.TimeType; import com.zhitan.common.utils.StringUtils; import com.zhitan.model.domain.*; import com.zhitan.model.mapper.IndexStorageMapper; import com.zhitan.model.service.IEnergyIndexService; import com.zhitan.model.service.IIndexStorageService; import com.zhitan.model.service.IndexFormulaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; @Service public class IndexStorageServiceImpl implements IIndexStorageService { @Autowired private IndexStorageMapper indexStorageMapper; @Autowired private IndexFormulaService indexFormulaService; @Autowired private IEnergyIndexService energyIndexService; @Override public void saveIndexStorage(String indexId, List indexStorage) { indexStorage.forEach(storage -> { storage.setIndexId(indexId); if (StringUtils.isEmpty(storage.getId())) { storage.setId(UUID.randomUUID().toString()); indexStorageMapper.insertIndexStorage(storage); } else { indexStorageMapper.updateIndexStorage(storage); } indexStorageMapper.saveParams(storage.getId(), storage.getParamIndex()); }); } @Override @Transactional(rollbackFor = Exception.class) public void saveFormulaAndStorage(IndexFormula indexFormula, List indexStorage, String indexId) { indexFormulaService.saveIndexFormula(indexFormula); String calcText = indexFormula.getFormulaText(); List paramNames = new ArrayList<>(); for (IndexFormulaParam param : indexFormula.getIndexFormulaParams()) { calcText = calcText .replace("(" + param.getParamName() + ")", "(" + String.format("'%s'", param.getParamValue()) + ")"); paramNames.add(param.getParamValue()); } List energyIndexList = energyIndexService.getEnergyIndexByCodes(paramNames); List paramIndex = energyIndexList.stream() .map(EnergyIndex::getIndexId) .collect(Collectors.toList()); for (IndexStorage storage : indexStorage) { storage.setCalcText(calcText); storage.setIsPvCalc(indexFormula.getIsPvCalc()); storage.getParamIndex().addAll(paramIndex); } saveIndexStorage(indexId, indexStorage); } @Override public List getIndexStorage(String indexId) { return indexStorageMapper.getIndexStorage(indexId); } @Override public List getAllCalcIndexStorage() { List indexStorageList = indexStorageMapper.getAllCalcIndexStorage(CalcType.CALC); List params = indexStorageMapper.getAllParameter(); indexStorageList.forEach(storage -> { List indexIds = params.stream() .filter(f -> equalsIgnoreCase(f.getStorageId(), storage.getId())) .map(IndexStorageParam::getIndexId) .collect(Collectors.toList()); if (!indexIds.isEmpty()) { storage.getParamIndex().addAll(indexIds); } }); return indexStorageList; } @Override public IndexStorage getIndexStorage(String indexId, TimeType timeType) { return indexStorageMapper.getWithTimetype(indexId, timeType); } }