|
@@ -16,7 +16,7 @@ import com.simuwang.base.common.exception.ReportParseException;
|
|
import com.simuwang.base.common.util.*;
|
|
import com.simuwang.base.common.util.*;
|
|
import com.simuwang.base.config.DaqProperties;
|
|
import com.simuwang.base.config.DaqProperties;
|
|
import com.simuwang.base.config.EmailRuleConfig;
|
|
import com.simuwang.base.config.EmailRuleConfig;
|
|
-import com.simuwang.base.mapper.*;
|
|
|
|
|
|
+import com.simuwang.base.mapper.daq.*;
|
|
import com.simuwang.base.pojo.dos.*;
|
|
import com.simuwang.base.pojo.dos.*;
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
@@ -517,48 +517,51 @@ public class EmailParseService {
|
|
updateNavDoList = updateNavDoList.stream().sorted(Comparator.comparing(NavDO::getPriceDate)).collect(Collectors.toList());
|
|
updateNavDoList = updateNavDoList.stream().sorted(Comparator.comparing(NavDO::getPriceDate)).collect(Collectors.toList());
|
|
}
|
|
}
|
|
//因为要做振幅检测,所以不能使用批量插入的方式
|
|
//因为要做振幅检测,所以不能使用批量插入的方式
|
|
|
|
+ List<NavDO> finallyNavDOList = new ArrayList<>();
|
|
for(NavDO insertDO : insertNavDoList){
|
|
for(NavDO insertDO : insertNavDoList){
|
|
- boolean amplitudeException = amplitudeNav(insertDO);
|
|
|
|
- if(amplitudeException){
|
|
|
|
- //超过净值振幅不能入库,同时需要修改采集库的入库状态和异常信息
|
|
|
|
- saveAmplitudeFundNav(insertDO,fileId);
|
|
|
|
|
|
+ BigDecimal amplitude = amplitudeNav(insertDO);
|
|
|
|
+ if(amplitude.compareTo(BigDecimal.valueOf(1)) >= 0){
|
|
|
|
+ //振幅超过100%不可以入库,要给出提示信息
|
|
|
|
+ saveAmplitudeFundNav(insertDO,fileId,NavParseStatusConst.AMPLITUDE_ERROR,0);
|
|
}else{
|
|
}else{
|
|
- navMapper.batchInsert(ListUtil.toList(insertDO));
|
|
|
|
|
|
+ //振幅超过20%可以入库,但要给出提示信息
|
|
|
|
+ if(amplitude.compareTo(BigDecimal.valueOf(0.2)) >= 0){
|
|
|
|
+ saveAmplitudeFundNav(insertDO,fileId,NavParseStatusConst.AMPLITUDE_EXCEPTION,1);
|
|
|
|
+ }
|
|
|
|
+ finallyNavDOList.add(insertDO);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if(CollUtil.isEmpty(finallyNavDOList)){
|
|
|
|
+ navMapper.batchInsert(finallyNavDOList);
|
|
|
|
+ }
|
|
|
|
+ List<NavDO> finallyUpdateNavDOList = new ArrayList<>();
|
|
for(NavDO updateDO : updateNavDoList){
|
|
for(NavDO updateDO : updateNavDoList){
|
|
- boolean amplitudeException = amplitudeNav(updateDO);
|
|
|
|
- if(amplitudeException){
|
|
|
|
|
|
+ BigDecimal amplitude = amplitudeNav(updateDO);
|
|
|
|
+ if(amplitude.compareTo(BigDecimal.valueOf(1)) >= 0){
|
|
//超过净值振幅不能入库,同时需要修改采集库的入库状态和异常信息
|
|
//超过净值振幅不能入库,同时需要修改采集库的入库状态和异常信息
|
|
- saveAmplitudeFundNav(updateDO,fileId);
|
|
|
|
|
|
+ saveAmplitudeFundNav(updateDO,fileId,NavParseStatusConst.AMPLITUDE_ERROR,0);
|
|
}else{
|
|
}else{
|
|
- navMapper.batchUpdate(ListUtil.toList(updateDO));
|
|
|
|
|
|
+ if(amplitude.compareTo(BigDecimal.valueOf(0.2)) >= 0){
|
|
|
|
+ saveAmplitudeFundNav(updateDO,fileId,NavParseStatusConst.AMPLITUDE_EXCEPTION,1);
|
|
|
|
+ }
|
|
|
|
+ finallyUpdateNavDOList.add(updateDO);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-// if (CollUtil.isNotEmpty(insertNavDoList)) {
|
|
|
|
-// Map<Date, List<NavDO>> priceDateNavDoListMap = insertNavDoList.stream().collect(Collectors.groupingBy(NavDO::getPriceDate));
|
|
|
|
-// boolean hasDuplicationDateData = priceDateNavDoListMap.values().stream().map(List::size).anyMatch(e -> e > 1);
|
|
|
|
-// if (!hasDuplicationDateData) {
|
|
|
|
-// navMapper.batchInsert(insertNavDoList);
|
|
|
|
-// }
|
|
|
|
-// // 要插入的数据中存在相同日期的数据 -> 只能一条一条的插入数据了
|
|
|
|
-// insertNavDoList.forEach(e -> saveNavDo(ListUtil.toList(e)));
|
|
|
|
-// }
|
|
|
|
-// if (CollUtil.isNotEmpty(updateNavDoList)) {
|
|
|
|
-// navMapper.batchUpdate(updateNavDoList);
|
|
|
|
-// }
|
|
|
|
|
|
+ if(CollUtil.isEmpty(finallyNavDOList)){
|
|
|
|
+ navMapper.batchUpdate(finallyUpdateNavDOList);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void saveAmplitudeFundNav(NavDO insertDO,Integer fileId) {
|
|
|
|
|
|
+ private void saveAmplitudeFundNav(NavDO insertDO,Integer fileId,Integer exceptionStatus,Integer isStored) {
|
|
EmailFundNavDO fundNavDO = new EmailFundNavDO();
|
|
EmailFundNavDO fundNavDO = new EmailFundNavDO();
|
|
fundNavDO.setFundId(insertDO.getFundId());
|
|
fundNavDO.setFundId(insertDO.getFundId());
|
|
fundNavDO.setNav(insertDO.getNav());
|
|
fundNavDO.setNav(insertDO.getNav());
|
|
fundNavDO.setPriceDate(insertDO.getPriceDate());
|
|
fundNavDO.setPriceDate(insertDO.getPriceDate());
|
|
fundNavDO.setCumulativeNavWithdrawal(insertDO.getCumulativeNavWithdrawal());
|
|
fundNavDO.setCumulativeNavWithdrawal(insertDO.getCumulativeNavWithdrawal());
|
|
fundNavDO.setFileId(fileId);
|
|
fundNavDO.setFileId(fileId);
|
|
- fundNavDO.setExceptionStatus(NavParseStatusConst.AMPLITUDE_EXCEPTION);
|
|
|
|
- fundNavDO.setIsStored(0);
|
|
|
|
|
|
+ fundNavDO.setExceptionStatus(exceptionStatus);
|
|
|
|
+ fundNavDO.setIsStored(isStored);
|
|
fundNavDO.setUpdateTime(new Date());
|
|
fundNavDO.setUpdateTime(new Date());
|
|
emailFundNavMapper.update(fundNavDO);
|
|
emailFundNavMapper.update(fundNavDO);
|
|
}
|
|
}
|
|
@@ -747,20 +750,17 @@ public class EmailParseService {
|
|
fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
|
|
fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
|
|
}
|
|
}
|
|
//振幅检测
|
|
//振幅检测
|
|
- private boolean amplitudeNav(NavDO navDO) {
|
|
|
|
|
|
+ private BigDecimal amplitudeNav(NavDO navDO) {
|
|
String fundId = navDO.getFundId();
|
|
String fundId = navDO.getFundId();
|
|
String priceDate = DateUtils.format(navDO.getPriceDate(), DateUtils.YYYY_MM_DD);
|
|
String priceDate = DateUtils.format(navDO.getPriceDate(), DateUtils.YYYY_MM_DD);
|
|
//上一期单位净值
|
|
//上一期单位净值
|
|
NavDO preNavDO = navMapper.queryNavByFundIdDate(fundId,priceDate);
|
|
NavDO preNavDO = navMapper.queryNavByFundIdDate(fundId,priceDate);
|
|
if(preNavDO == null){
|
|
if(preNavDO == null){
|
|
- return false;
|
|
|
|
|
|
+ return BigDecimal.valueOf(0);
|
|
}
|
|
}
|
|
- //|(当期-上期)/ 上期 | >= 0.2
|
|
|
|
|
|
+ //|(当期-上期)/ 上期 |
|
|
BigDecimal amplitudeRate = navDO.getNav().subtract(preNavDO.getNav()).divide(preNavDO.getNav(),4, BigDecimal.ROUND_HALF_UP);
|
|
BigDecimal amplitudeRate = navDO.getNav().subtract(preNavDO.getNav()).divide(preNavDO.getNav(),4, BigDecimal.ROUND_HALF_UP);
|
|
- if(amplitudeRate.abs().compareTo(new BigDecimal(0.2)) > 0 ){
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
|
|
+ return amplitudeRate.abs();
|
|
}
|
|
}
|
|
|
|
|
|
private void saveFundAlias(String fundName, String registerNumber, List<String> fundIdList) {
|
|
private void saveFundAlias(String fundName, String registerNumber, List<String> fundIdList) {
|