ParseEmailServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package com.simuwang.manage.service.impl;
  2. import com.simuwang.base.common.enums.ParseStatus;
  3. import com.simuwang.base.common.support.MybatisPage;
  4. import com.simuwang.base.common.util.DateUtils;
  5. import com.simuwang.base.common.util.StringUtil;
  6. import com.simuwang.base.mapper.*;
  7. import com.simuwang.base.pojo.dos.EmailFileInfoDO;
  8. import com.simuwang.base.pojo.dos.EmailParseDetailDO;
  9. import com.simuwang.base.pojo.dos.EmailParseInfoDO;
  10. import com.simuwang.base.pojo.dos.EmailTypeRuleDO;
  11. import com.simuwang.base.pojo.dto.query.EmailFileQuery;
  12. import com.simuwang.base.pojo.dto.query.EmailParseQuery;
  13. import com.simuwang.base.pojo.vo.EmailFileInfoVO;
  14. import com.simuwang.base.pojo.vo.EmailParseDetailVO;
  15. import com.simuwang.base.pojo.vo.EmailParseInfoVO;
  16. import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
  17. import com.simuwang.manage.service.ParseEmailService;
  18. import com.smppw.common.pojo.enums.TimeRange;
  19. import com.smppw.utils.DateUtil;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. /**
  25. * FileName: ParseEmailServiceImpl
  26. * Author: chenjianhua
  27. * Date: 2024/9/10 11:26
  28. * Description: ${DESCRIPTION}
  29. */
  30. @Service
  31. public class ParseEmailServiceImpl implements ParseEmailService {
  32. @Autowired
  33. private EmailTypeRuleMapper emailTypeRuleMapper;
  34. @Autowired
  35. private EmailParseInfoMapper emailParseInfoMapper;
  36. @Autowired
  37. private EmailFileInfoMapper emailFileInfoMapper;
  38. @Autowired
  39. private EmailFundNavMapper emailFundNavMapper;
  40. @Autowired
  41. private EmailFundAssetMapper emailFundAssetMapper;
  42. @Override
  43. public void saveEmailType(EmailTypeRuleVO emailTypeRuleVO) {
  44. EmailTypeRuleDO ruleDO = new EmailTypeRuleDO();
  45. ruleDO.setId(emailTypeRuleVO.getId());
  46. ruleDO.setNav(emailTypeRuleVO.getNav());
  47. ruleDO.setReport(emailTypeRuleVO.getReport());
  48. ruleDO.setValuation(emailTypeRuleVO.getValuation());
  49. ruleDO.setUpdateTime(new Date());
  50. if(ruleDO.getId() == null){
  51. ruleDO.setCreateTime(new Date());
  52. emailTypeRuleMapper.saveEmailType(ruleDO);
  53. }else{
  54. emailTypeRuleMapper.updateEmailType(ruleDO);
  55. }
  56. }
  57. @Override
  58. public EmailTypeRuleVO searchEmailType() {
  59. EmailTypeRuleVO emailTypeRuleVO = new EmailTypeRuleVO();
  60. EmailTypeRuleDO emailTypeRuleDO = emailTypeRuleMapper.searchEmailType();
  61. if(emailTypeRuleDO == null){
  62. return emailTypeRuleVO;
  63. }
  64. emailTypeRuleVO.setId(emailTypeRuleDO.getId());
  65. emailTypeRuleVO.setNav(emailTypeRuleDO.getNav());
  66. emailTypeRuleVO.setValuation(emailTypeRuleDO.getValuation());
  67. emailTypeRuleVO.setReport(emailTypeRuleDO.getReport());
  68. return emailTypeRuleVO;
  69. }
  70. @Override
  71. public MybatisPage<EmailParseInfoVO> searchEmailList(EmailParseQuery emailParseQuery){
  72. if(emailParseQuery.getTimeRange().equals(TimeRange.FromSetup)){
  73. emailParseQuery.setEndDate(DateUtil.getTodayDate());
  74. }
  75. if(!emailParseQuery.getTimeRange().equals(TimeRange.Custom) && !emailParseQuery.getTimeRange().equals(TimeRange.FromSetup)){
  76. emailParseQuery.setEndDate(DateUtils.getAroundToday(1));
  77. emailParseQuery.setStartDate( DateUtil.RangeTime(emailParseQuery.getTimeRange().getFloatDateSymbel(),DateUtil.getTodayDate()));
  78. }else{
  79. //自定义时间,把结束时间延后一天,确保时间判断能查到结束日期当天的数据
  80. emailParseQuery.setEndDate(DateUtil.getAroundDate(DateUtils.parse(emailParseQuery.getEndDate(),DateUtils.YYYY_MM_DD),1));
  81. }
  82. List<EmailParseInfoDO> emailParseInfoDOList = emailParseInfoMapper.searchEmailList(emailParseQuery);
  83. List<EmailParseInfoVO> emailParseInfoVOList = emailParseInfoDOList.stream()
  84. .map(EmailParseInfoDO::toVO).collect(Collectors.toList());
  85. for(EmailParseInfoVO vo : emailParseInfoVOList){
  86. List<EmailFileInfoDO> emailFileInfoList = emailFileInfoMapper.getEmailFileByEmailId(vo.getId());
  87. List<EmailFileInfoVO> emailFileInfoVOList = emailFileInfoList.stream().map(EmailFileInfoDO::toVO).collect(Collectors.toList());
  88. vo.setEmailFileInfoList(emailFileInfoVOList);
  89. }
  90. long total = emailParseInfoMapper.countEmailList(emailParseQuery);
  91. return MybatisPage.of(total,emailParseInfoVOList);
  92. }
  93. @Override
  94. public Map<String, Integer> searchEmailCount(TimeRange timeRange,String startDate,String endDate) {
  95. if(timeRange.equals(TimeRange.FromSetup)){
  96. endDate= DateUtil.getTodayDate();
  97. }
  98. if(!timeRange.equals(TimeRange.Custom) && !timeRange.equals(TimeRange.FromSetup)){
  99. endDate = DateUtils.getAroundToday(1);
  100. startDate = DateUtil.RangeTime(timeRange.getFloatDateSymbel(),DateUtil.getTodayDate());
  101. }else{
  102. //自定义时间,把结束时间延后一天,确保时间判断能查到结束日期当天的数据
  103. endDate = DateUtil.getAroundDate(DateUtils.parse(endDate,DateUtils.YYYY_MM_DD),1);
  104. }
  105. Map<String, Integer> result = new HashMap<>();
  106. Integer parseTotal = emailParseInfoMapper.searchEmailCount(startDate,endDate,null);
  107. result.put("parseTotal",parseTotal);
  108. Integer parseSuccess = emailParseInfoMapper.searchEmailCount(startDate,endDate, ParseStatus.Success.getCode());
  109. result.put("parseSuccess",parseSuccess);
  110. Integer parseFail = emailParseInfoMapper.searchEmailCount(startDate,endDate, ParseStatus.Fail.getCode());
  111. result.put("parseFail",parseFail);
  112. return result;
  113. }
  114. private String getParseDate(TimeRange timeRange, String date) {
  115. String preDate =DateUtil.RangeTime(timeRange.getFloatDateSymbel(),date);
  116. return preDate;
  117. }
  118. @Override
  119. public EmailFileInfoVO getEmailFileById(Integer fileId) {
  120. EmailFileInfoDO emailFileInfoDO = emailFileInfoMapper.getEmailFileById(fileId);
  121. EmailFileInfoVO fileInfoVO = new EmailFileInfoVO();
  122. if(emailFileInfoDO != null){
  123. fileInfoVO.setId(emailFileInfoDO.getId());
  124. fileInfoVO.setEmailId(emailFileInfoDO.getEmailId());
  125. fileInfoVO.setFilePath(emailFileInfoDO.getFilePath());
  126. fileInfoVO.setFileName(emailFileInfoDO.getFileName());
  127. }
  128. return fileInfoVO;
  129. }
  130. @Override
  131. public MybatisPage<EmailParseDetailVO> searchEmailDetailById(EmailFileQuery emailFileQuery) {
  132. //根据邮件ID获取附件信息
  133. Integer fileId = emailFileQuery.getFileId();
  134. List<String> priceDateList = emailFileInfoMapper.getAllPriceDateByFileId(fileId);
  135. List<EmailParseDetailDO> dataList = new ArrayList<>();
  136. for(String priceDate : priceDateList){
  137. List<EmailParseDetailDO> navList = emailFundNavMapper.selectFundNavByFielId(fileId,priceDate);
  138. List<EmailParseDetailDO> assetList = emailFundAssetMapper.selectFundAssetByFielId(fileId,priceDate);
  139. //整合
  140. if(navList.size() > 0){
  141. //先处理净值
  142. for(EmailParseDetailDO navDO : navList){
  143. for(EmailParseDetailDO assetDO : assetList){
  144. if(navDO.getFundId() != null && navDO.getFundId().equals(assetDO.getFundId())){
  145. navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus());
  146. navDO.setAssetIsStored(assetDO.getAssetIsStored());
  147. navDO.setAssetNet(assetDO.getAssetNet());
  148. navDO.setAssetShare(assetDO.getAssetShare());
  149. }else if(navDO.getRegisterNumber() != null && navDO.getRegisterNumber().equals(assetDO.getRegisterNumber())){
  150. navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus());
  151. navDO.setAssetIsStored(assetDO.getAssetIsStored());
  152. navDO.setAssetNet(assetDO.getAssetNet());
  153. navDO.setAssetShare(assetDO.getAssetShare());
  154. }else if(navDO.getFundName() != null && navDO.getFundName().equals(assetDO.getFundName())){
  155. navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus());
  156. navDO.setAssetIsStored(assetDO.getAssetIsStored());
  157. navDO.setAssetNet(assetDO.getAssetNet());
  158. navDO.setAssetShare(assetDO.getAssetShare());
  159. }
  160. }
  161. dataList.add(navDO);
  162. }
  163. //处理规模
  164. for(EmailParseDetailDO assetDO : assetList){
  165. int idx=0;
  166. for(EmailParseDetailDO dataDO : dataList){
  167. if((dataDO.getFundId() != null && dataDO.getFundId().equals(assetDO.getFundId()))
  168. || (dataDO.getRegisterNumber() != null && dataDO.getRegisterNumber().equals(assetDO.getRegisterNumber()))
  169. || (dataDO.getFundName() != null && dataDO.getFundName().equals(assetDO.getFundName()))){
  170. idx++;
  171. }
  172. }
  173. //没有找到说明只有规模没有净值
  174. if(idx == 0){
  175. dataList.add(assetDO);
  176. }
  177. }
  178. }
  179. }
  180. long total = dataList.size();
  181. List<EmailParseDetailDO> resultDO = null;
  182. long current = emailFileQuery.getCurrent();
  183. long pageSize = emailFileQuery.getPageSize();
  184. long offset = emailFileQuery.getOffset();
  185. if(pageSize >= dataList.size()){
  186. resultDO = dataList.subList(Integer.parseInt(offset+""),dataList.size());
  187. }else{
  188. if(current*pageSize > dataList.size()){
  189. resultDO = dataList.subList(Integer.parseInt(offset+""),dataList.size());
  190. }else{
  191. resultDO = dataList.subList(Integer.parseInt(offset+""),Integer.parseInt(current*pageSize+""));
  192. }
  193. }
  194. List<EmailParseDetailVO> result = resultDO.stream().filter(e -> StringUtil.isNotNull(e)).map(EmailParseDetailDO::toVO).collect(Collectors.toList());
  195. return MybatisPage.of(total,result);
  196. }
  197. }