package com.simuwang.manage.task; import com.simuwang.base.common.enums.TaskType; import com.simuwang.base.common.util.DateUtils; import com.simuwang.base.mapper.daq.ChannelEmailMapper; import com.simuwang.base.mapper.daq.CompanyEmailConfigMapper; import com.simuwang.base.mapper.daq.ContactInformationMapper; import com.simuwang.base.mapper.daq.EmailTaskInfoMapper; import com.simuwang.base.pojo.dos.CompanyEmailConfigDO; import com.simuwang.base.pojo.dos.ContactInformationDO; import com.simuwang.base.pojo.dos.EmailTaskInfoDO; import com.simuwang.manage.service.CompanyEmailConfigService; import com.simuwang.shiro.utils.UserUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * FileName: SendCompanyEmailTask * Author: chenjianhua * Date: 2024/9/20 22:45 * Description: ${DESCRIPTION} */ @Component public class SendCompanyEmailTask { private static final Logger log = LoggerFactory.getLogger(SendCompanyEmailTask.class); @Autowired private ContactInformationMapper contactInformationMapper; @Autowired private CompanyEmailConfigService companyEmailConfigService; @Autowired private EmailTaskInfoMapper emailTaskInfoMapper; @Autowired private ChannelEmailMapper channelEmailMapper; public void sendEmail(){ EmailTaskInfoDO emailTaskInfoDO = startEmailTask(null, 1); try{ List contactInformationDOList = contactInformationMapper.getAllRecords(); Map> companyIdEmailMap = new HashMap<>(); //按渠道分组 for (ContactInformationDO contactInformationDO : contactInformationDOList) { try{ String companyId = contactInformationDO.getCompanyId(); String email = contactInformationDO.getContactEmail(); if(companyIdEmailMap.containsKey(companyId)){ List channelEmailList = companyIdEmailMap.get(companyId); channelEmailList.add(email); companyIdEmailMap.put(companyId,channelEmailList); }else{ List channelEmailList = new ArrayList<>(); channelEmailList.add(email); companyIdEmailMap.put(companyId,channelEmailList); } }catch (Exception e){ log.error(e.getMessage(),e); } } for(String companyId : companyIdEmailMap.keySet()){ List emailList = companyIdEmailMap.get(companyId); StringBuffer emails = new StringBuffer(); for(String email : emailList){ emails.append(email).append(";"); } companyEmailConfigService.sendEmail(companyId,emails.toString()); } }catch (Exception e){ log.error(e.getMessage(),e); endEmailTask(emailTaskInfoDO.getId(),-1); return; } endEmailTask(emailTaskInfoDO.getId(),2); } 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()); } } private EmailTaskInfoDO startEmailTask(String email,Integer taskStatus) { EmailTaskInfoDO emailTaskInfoDO = new EmailTaskInfoDO(); try{ emailTaskInfoDO.setTaskName(TaskType.DELETION_NOTIFICATIONS.getInfo()); emailTaskInfoDO.setTaskType(TaskType.DELETION_NOTIFICATIONS.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; } }