package com.simuwang.manage.api.email; import com.simuwang.base.common.support.MybatisPage; import com.simuwang.base.common.util.EncodeUtil; import com.simuwang.base.common.util.FileUtil; import com.simuwang.base.pojo.dto.query.EmailFileQuery; import com.simuwang.base.pojo.dto.query.EmailParseQuery; import com.simuwang.base.pojo.vo.*; import com.simuwang.daq.service.EmailParseApiService; import com.simuwang.logging.SystemLog; import com.simuwang.manage.service.ParseEmailService; import com.smppw.common.pojo.ResultVo; import com.smppw.common.pojo.enums.TimeRange; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; import org.apache.ibatis.annotations.Param; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.io.*; import java.util.List; import java.util.Map; /** * 解析详情管理 * Author: chenjianhua * Date: 2024/9/10 11:21 * Description: ${DESCRIPTION} */ @SystemLog(value = "解析详情管理") @RestController @RequestMapping("/v1/parse") public class ParseEmailController{ private static final Logger logger = LoggerFactory.getLogger(ParseEmailController.class); @Autowired private ParseEmailService parseEmailService; @Autowired private EmailParseApiService emailParseApiService; /** * 保存邮件类型识别配置 * @param emailTypeRuleVO * @return */ @SystemLog(value = "保存邮件类型识别配置",type = SystemLog.Type.INSERT) @PostMapping("/save-email-type") public boolean saveEmailType(@RequestBody EmailTypeRuleVO emailTypeRuleVO){ parseEmailService.saveEmailType(emailTypeRuleVO); return true; } /** * 查询邮件类型识别配置 * @param * @return */ @SystemLog(value = "查询邮件类型识别配置") @GetMapping("/search-email-type") public ResultVo searchEmailType(){ EmailTypeRuleVO emailTypeRuleVO = parseEmailService.searchEmailType(); return ResultVo.ok(emailTypeRuleVO); } /** * 解析页面展示查询 * @param emailParseQuery * @return */ @SystemLog(value = "解析页面展示查询") @GetMapping("/search-email-list") public MybatisPage searchEmailList(EmailParseQuery emailParseQuery){ MybatisPage result = parseEmailService.searchEmailList(emailParseQuery); return result; } /** * 详情查询 * @param emailFileQuery * @return */ @SystemLog(value = "详情查询") @GetMapping("/detail") public MybatisPage searchEmailDetail(EmailFileQuery emailFileQuery){ MybatisPage result = parseEmailService.searchEmailDetailById(emailFileQuery); return result; } /** * 解析邮件数据统计 * @param timeRange Last1Week-近一周,Last1Month-近一个月,Last3Months-近三月,LastHalfYear-近半年,Last1Year-近一年,FromSetup-全部,Custom-自定义 * @return */ @SystemLog(value = "解析邮件数据统计") @GetMapping("/search-email-count") public ResultVo searchEmailCount(@RequestParam("timeRange") TimeRange timeRange,@RequestParam(value = "startDate",required = false)String startDate,@RequestParam(value = "endDate",required = false)String endDate){ Map result = parseEmailService.searchEmailCount(timeRange,startDate,endDate); return ResultVo.ok(result); } /** * 根据fileId下载邮件附件 * @param fileId * @return */ @SystemLog(value = "下载附件", type = SystemLog.Type.DOWNLOAD_OR_EXPORT) @PostMapping("/download-email-file") public void downloadEmailFile(@RequestBody FileIdVO fileId,HttpServletResponse response, HttpServletRequest request){ EmailFileInfoVO emailFileInfoVO = parseEmailService.getEmailFileById(fileId.getFileId()); try { response.addHeader("Content-Disposition", "attachment;filename=" + EncodeUtil.encodeUTF8(emailFileInfoVO.getFileName())); OutputStream outputStream = response.getOutputStream(); FileUtils.copyFile(new File(emailFileInfoVO.getFilePath()),outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { logger.error(e.getMessage(),e); try{ OutputStream outputStream = response.getOutputStream(); FileUtils.copyFile(new File(emailFileInfoVO.getFilePath()),outputStream); outputStream.flush(); outputStream.close(); }catch (Exception e1){ logger.error(e1.getMessage(),e1); } } } /** * 根据邮件ID重新解析 * @param idListVO * @return */ @SystemLog(value = "根据邮件ID重新解析") @PostMapping("/reparse") public ResultVo reparse(@RequestBody IdListVO idListVO){ for(Integer emailid : idListVO.getIdList()){ emailParseApiService.reparseEmail(emailid); } return ResultVo.ok(true); } }