package com.simuwang.manage.task; import cn.hutool.core.bean.BeanUtil; import com.simuwang.base.common.conts.NavParseStatusConst; import com.simuwang.base.common.enums.Frequency; import com.simuwang.base.common.enums.TaskType; import com.simuwang.base.common.util.DateUtils; import com.simuwang.base.mapper.daq.EmailTaskInfoMapper; import com.simuwang.base.mapper.daq.FundReportFrequencyMapper; import com.simuwang.base.mapper.daq.NavMapper; import com.simuwang.base.pojo.dos.EmailFundNavDO; import com.simuwang.base.pojo.dos.EmailTaskInfoDO; import com.simuwang.base.pojo.dos.FundReportFrequencyDO; import com.simuwang.base.pojo.dos.NavDO; import com.simuwang.base.pojo.vo.FundReportFrequencyVO; import com.simuwang.manage.service.EmailFundNavService; import com.simuwang.manage.service.FundReportFrequencyService; import com.simuwang.shiro.utils.UserUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; /** * FileName: NavFrequencyComputeTask * Author: chenjianhua * Date: 2024/12/9 15:46 * Description: ${DESCRIPTION} */ @Component public class NavFrequencyComputeTask { private static final Logger log = LoggerFactory.getLogger(NavFrequencyComputeTask.class); @Autowired private NavMapper navMapper; @Autowired private EmailTaskInfoMapper emailTaskInfoMapper; @Autowired private FundReportFrequencyMapper fundReportFrequencyMapper; /** * 取近一月(35天)净值数量判断 * 净值数 >= 8, 设置为“日频” * 2 < 净值数 < 8, 设置为“周频” * 1 <= 净值数 <= 2, 设置为“月频” * 不满足上述规则,默认为空。 */ public void navFrequencyCompute(){ EmailTaskInfoDO emailTaskInfoDO = startEmailTask(null, 1); //获取净值振幅错误的数据总量 List fundIdList = navMapper.getAllFundId(); String priceDate = DateUtils.getAroundToday(-35); for (String fundId : fundIdList) { FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId); if(fundReportFrequencyDO != null && fundReportFrequencyDO.getCreatorId() != null){ continue; } List navDOList = navMapper.selectNavByFundIdAndDate(fundId,priceDate); FundReportFrequencyDO fundReportFrequency = new FundReportFrequencyDO(); if(fundReportFrequencyDO != null){ fundReportFrequency.setId(fundReportFrequencyDO.getId()); } fundReportFrequency.setFundId(fundId); if(navDOList.size() >= 8){ fundReportFrequency.setNavFrequency(Frequency.DAY.getCode()); } if(navDOList.size() > 2 && navDOList.size() < 8){ fundReportFrequency.setNavFrequency(Frequency.WEEK.getCode()); } if(navDOList.size() >= 1 && navDOList.size() <= 2){ fundReportFrequency.setNavFrequency(Frequency.MONTH.getCode()); } if(fundReportFrequency.getNavFrequency() != null){ fundReportFrequency.setIsvalid(1); fundReportFrequency.setCreateTime(new Date()); fundReportFrequency.setUpdateTime(new Date()); fundReportFrequencyMapper.insert(fundReportFrequency); } } endEmailTask(emailTaskInfoDO.getId(),2); } private EmailTaskInfoDO startEmailTask(String email,Integer taskStatus) { EmailTaskInfoDO emailTaskInfoDO = new EmailTaskInfoDO(); try{ emailTaskInfoDO.setTaskName(TaskType.NAV_FREQUENCY.getInfo()); emailTaskInfoDO.setTaskType(TaskType.NAV_FREQUENCY.getType()); emailTaskInfoDO.setTaskStatus(taskStatus); emailTaskInfoDO.setStartTime(DateUtils.getNowDate()); emailTaskInfoDO.setIsvalid(1); emailTaskInfoDO.setEmail(email); emailTaskInfoDO.setCreateTime(DateUtils.getNowDate()); emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate()); try{ emailTaskInfoDO.setCreatorId(UserUtils.getLoginUser().getUserId()); emailTaskInfoDO.setUpdaterId(UserUtils.getLoginUser().getUserId()); }catch (Exception e){ emailTaskInfoDO.setCreatorId(1); emailTaskInfoDO.setUpdaterId(1); } emailTaskInfoMapper.insert(emailTaskInfoDO); }catch (Exception e){ log.error(e.getMessage()); } return emailTaskInfoDO; } private void endEmailTask(Integer id, Integer taskStatus) { try{ EmailTaskInfoDO emailTaskInfoDO = new EmailTaskInfoDO(); emailTaskInfoDO.setId(id); emailTaskInfoDO.setTaskStatus(taskStatus); emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate()); emailTaskInfoDO.setEndTime(DateUtils.getNowDate()); emailTaskInfoMapper.updateTaskStatusById(emailTaskInfoDO); }catch (Exception e){ log.error(e.getMessage()); } } }