package com.simuwang.manage.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.listener.PageReadListener; import com.alibaba.excel.support.ExcelTypeEnum; import com.simuwang.base.common.conts.ExcelConst; import com.simuwang.base.common.enums.DistributeType; import com.simuwang.base.common.support.MybatisPage; import com.simuwang.base.common.util.DateUtils; import com.simuwang.base.common.util.StringUtil; import com.simuwang.base.mapper.AssetMapper; import com.simuwang.base.mapper.FundInfoMapper; import com.simuwang.base.mapper.FundNavAssetMapper; import com.simuwang.base.mapper.NavMapper; import com.simuwang.base.pojo.dos.AssetDO; import com.simuwang.base.pojo.dos.FundNavAssetDO; import com.simuwang.base.pojo.dos.NavDO; import com.simuwang.base.pojo.dto.DistributionExcelData; import com.simuwang.base.pojo.dto.NavAssetExcelData; import com.simuwang.base.pojo.dto.query.FundNavAssetPageQuery; import com.simuwang.base.pojo.vo.*; import com.simuwang.manage.service.FundNavAssetService; import com.simuwang.shiro.utils.UserUtils; import com.smppw.common.pojo.ResultVo; import com.smppw.common.pojo.enums.status.ResultCode; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * FileName: FundNavAssetServiceImpl * Author: chenjianhua * Date: 2024/9/15 16:58 * Description: ${DESCRIPTION} */ @Service public class FundNavAssetServiceImpl implements FundNavAssetService { @Autowired private FundNavAssetMapper fundNavAssetMapper; @Autowired private AssetMapper assetMapper; @Autowired private NavMapper navMapper; @Autowired private FundInfoMapper fundInfoMapper; @Value("${email.file.path}") private String path; private static final Logger logger = LoggerFactory.getLogger(FundNavAssetServiceImpl.class); @Override public MybatisPage searchNavAssetList(FundNavAssetPageQuery fundNavAssetPageQuery) { List fundNavAssetDOList = fundNavAssetMapper.searchNavAssetList(fundNavAssetPageQuery); List fundNavAssetVOList = fundNavAssetDOList.stream().map(FundNavAssetDO::toVo).collect(Collectors.toList()); long total = fundNavAssetMapper.countNavAssetList(fundNavAssetPageQuery); return MybatisPage.of(total,fundNavAssetVOList); } @Override public void saveFundAsset(FundAssetVO fundAssetVO) { List assetDOList = new ArrayList<>(); AssetDO assetDO = new AssetDO(); assetDO.setAssetNet(fundAssetVO.getAssetNet()); assetDO.setAssetShare(fundAssetVO.getAssetShare()); assetDO.setPriceDate(DateUtils.parse(fundAssetVO.getPriceDate(),DateUtils.YYYY_MM_DD)); assetDO.setFundId(fundAssetVO.getFundId()); assetDO.setUpdateTime(DateUtils.getNowDate()); assetDO.setCreatorId(UserUtils.getLoginUser().getUserId()); assetDO.setUpdaterId(UserUtils.getLoginUser().getUserId()); assetDO.setIsvalid(1); AssetDO oldAssetDO = assetMapper.queryFundAsset(assetDO); if(StringUtil.isNull(oldAssetDO)){ assetDO.setCreateTime(DateUtils.getNowDate()); assetDOList.add(assetDO); assetMapper.batchInsert(assetDOList); }else{ oldAssetDO.setAssetShare(assetDO.getAssetShare()); oldAssetDO.setAssetNet(assetDO.getAssetNet()); assetDOList.add(oldAssetDO); assetMapper.batchUpdate(assetDOList); } } @Override public void saveFundNav(FundNavVO fundNavVO) { List navDOList = new ArrayList<>(); NavDO navDO = new NavDO(); navDO.setCumulativeNavWithdrawal(fundNavVO.getCumulativeNavWithdrawal()); navDO.setNav(fundNavVO.getNav()); navDO.setFundId(fundNavVO.getFundId()); navDO.setNav(fundNavVO.getNav()); navDO.setPriceDate(DateUtils.parse(fundNavVO.getPriceDate(),DateUtils.YYYY_MM_DD)); navDO.setIsvalid(1); navDO.setCreatorId(UserUtils.getLoginUser().getUserId()); navDO.setUpdaterId(UserUtils.getLoginUser().getUserId()); navDO.setUpdateTime(DateUtils.getNowDate()); NavDO oldNav = navMapper.queryFundNav(navDO); if(StringUtil.isNull(oldNav)){ navDO.setCreateTime(DateUtils.getNowDate()); navDOList.add(navDO); navMapper.batchInsert(navDOList); }else{ oldNav.setUpdateTime(DateUtils.getNowDate()); oldNav.setCumulativeNav(navDO.getCumulativeNav()); oldNav.setCumulativeNavWithdrawal(navDO.getCumulativeNavWithdrawal()); oldNav.setNav(navDO.getNav()); navDOList.add(oldNav); navMapper.batchUpdate(navDOList); } } @Override public void deleteFundNavAsset(FundNavAssetDelListVO fundNavAssetDelListVO) { List delVOList = fundNavAssetDelListVO.getFundNavAssetDelVOList(); Integer userId = UserUtils.getLoginUser().getUserId(); for(FundNavAssetDelVO delVO : delVOList){ navMapper.deleteNav(delVO.getFundId(),delVO.getPriceDate(),userId); assetMapper.deleteAsset(delVO.getFundId(),delVO.getPriceDate(),userId); } } @Override public ResultVo uploadNavAsset(MultipartFile excelFile) { ResultVo vo = new ResultVo(ResultCode.SUCCESS); File file = null; try{ InputStream inputStream = excelFile.getInputStream(); file = new File(path+"/upload/"+ System.currentTimeMillis()+"/"+excelFile.getOriginalFilename()); FileUtils.copyInputStreamToFile(inputStream,file); List list = parseDistributionFile(file); vo.setData(parseResult(list)); }catch (Exception e){ logger.error(e.getMessage(),e); vo.setMsg("文件解析异常"); vo.setData(false); return vo; } return vo; } private Map parseResult(List list) { Map result = new HashMap<>(); int startRow = 3; List successDataVOList = new ArrayList<>(); List excelFailDataVOList = new ArrayList<>(); for(int dataIdx=1;dataIdx parseDistributionFile(File file) { // 创建一个 list 存储每行的数据,即 ExcelData 对象 List list = new ArrayList<>(); // 直接使用 EasyExcel 的 read 方法,同时定义表头的类型,以便将列中数据映射为 ExcelData 对象 EasyExcel.read(file, NavAssetExcelData.class, new PageReadListener(dataList -> { // 并且每行数据,并将其 add 至 list 中 for (NavAssetExcelData excelData : dataList) { if (excelData != null) { list.add(excelData); } } })).excelType(ExcelTypeEnum.XLSX).sheet().doRead(); return list; } }