浏览代码

fix: 结算数据发送到企业-修改为单独发送指定邮箱

lixuesong 1 年之前
父节点
当前提交
865ba7b34d

+ 25 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/WmScorePackageService.java

@@ -20,6 +20,8 @@ package com.qunzhixinxi.hnqz.daemon.quartz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmScorePackage;
 
+import java.time.LocalDateTime;
+
 /**
  * 积分包
  *
@@ -28,4 +30,27 @@ import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmScorePackage;
  */
 public interface WmScorePackageService extends IService<WmScorePackage> {
 
+	/**
+	 * 将本企业结算数据发送到企业
+	 *
+	 * @param deptId     部门 ID
+	 * @param toEmail    发送电子邮件至
+	 * @param startOfDay 一天开始
+	 * @param endOfDay   一天结束
+	 * @return {@link Boolean}
+	 * @throws Exception 例外
+	 */
+	Boolean sendSelfSettleDataToDept(Integer deptId, String toEmail, LocalDateTime startOfDay, LocalDateTime endOfDay) throws Exception;
+
+	/**
+	 * 将MAH结算数据发送到企业
+	 *
+	 * @param deptId     部门 ID
+	 * @param toEmail    发送电子邮件至
+	 * @param startOfDay 一天开始
+	 * @param endOfDay   一天结束
+	 * @return {@link Boolean}
+	 * @throws Exception 例外
+	 */
+	Boolean sendMAHSettleDataToDept(Integer deptId, String toEmail, LocalDateTime startOfDay, LocalDateTime endOfDay) throws Exception;
 }

+ 92 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/impl/WmScorePackageServiceImpl.java

@@ -16,19 +16,111 @@
  */
 package com.qunzhixinxi.hnqz.daemon.quartz.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.excel.EasyExcelFactory;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.feign.RemoteScorePackageService;
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.common.core.constant.SecurityConstants;
+import com.qunzhixinxi.hnqz.daemon.quartz.config.LocalDateTimeConverter;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.WmScorePackageService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
 import org.springframework.stereotype.Service;
 
+import javax.mail.internet.MimeMessage;
+import java.io.ByteArrayOutputStream;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 积分包
  *
  * @author pigx code generator
  * @date 2020-07-31 20:07:52
  */
+@Slf4j
 @Service
+@AllArgsConstructor
 public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper, WmScorePackage> implements WmScorePackageService {
 
+	private final JavaMailSender sender;
+
+	private final RemoteScorePackageService remoteScorePackageService;
+
+	@Override
+	public Boolean sendSelfSettleDataToDept(Integer deptId, String toEmail, LocalDateTime startOfDay, LocalDateTime endOfDay) throws Exception {
+		// 本企业当日结算成功数据-发送邮件
+		MimeMessage mail = sender.createMimeMessage();
+		MimeMessageHelper helper = new MimeMessageHelper(mail, true);
+
+		helper.setFrom("yaoyi_report@yaoyi.net");
+		helper.setTo(toEmail);
+
+		String title = "本企业结算成功数据(" + DateTimeFormatter.ofPattern("yyyy-MM-dd").format(startOfDay) + ")";
+		helper.setSubject(title);
+
+		// 获取指定企业当日结算的数据
+		Map<String, Object> reqParams = new HashMap<>(4);
+		reqParams.put("sendPackageDeptId", deptId);
+		reqParams.put("notifyTime", new LocalDateTime[]{startOfDay, endOfDay});
+		List<WmScorePackageSettleExcelModel> excelModels = remoteScorePackageService.exportPackageSettle(reqParams, SecurityConstants.FROM_IN);
+
+		if (CollUtil.isNotEmpty(excelModels)) {
+			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+			EasyExcelFactory.write(byteArrayOutputStream, WmScorePackageSettleExcelModel.class)
+					.registerConverter(new LocalDateTimeConverter())
+					.autoCloseStream(false).sheet("本企业结算成功数据")
+					.doWrite(excelModels);
+			helper.addAttachment(title, new ByteArrayResource(byteArrayOutputStream.toByteArray()), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+			helper.setText(String.format("当日结算成功%s条,详情数据见附件", excelModels.size()));
+
+			sender.send(mail);
+			log.info("{}本企业结算成功数据发送成功", deptId);
+		}
+
+		return Boolean.TRUE;
+	}
+
+	@Override
+	public Boolean sendMAHSettleDataToDept(Integer deptId, String toEmail, LocalDateTime startOfDay, LocalDateTime endOfDay) throws Exception {
+		// MAH当日结算成功数据-发送邮件
+		MimeMessage mail2 = sender.createMimeMessage();
+		MimeMessageHelper helper2 = new MimeMessageHelper(mail2, true);
+
+		helper2.setFrom("yaoyi_report@yaoyi.net");
+		helper2.setTo(toEmail);
+
+		String title2 = "MAH企业结算成功数据(" + DateTimeFormatter.ofPattern("yyyy-MM-dd").format(startOfDay) + ")";
+		helper2.setSubject(title2);
+
+		// 获取指定企业当日结算的数据
+		Map<String, Object> reqParams2 = new HashMap<>(4);
+		reqParams2.put("mahSettleDeptId", deptId);
+		reqParams2.put("notifyTime", new LocalDateTime[]{startOfDay, endOfDay});
+		List<WmScorePackageSettleExcelModel> excelModels2 = remoteScorePackageService.exportPackageSettleByMAH(reqParams2, SecurityConstants.FROM_IN);
+
+		if (CollUtil.isNotEmpty(excelModels2)) {
+			ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream();
+			EasyExcelFactory.write(byteArrayOutputStream2, WmScorePackageSettleExcelModel.class)
+					.registerConverter(new LocalDateTimeConverter())
+					.autoCloseStream(false).sheet("MAH企业结算成功数据")
+					.doWrite(excelModels2);
+			helper2.addAttachment(title2, new ByteArrayResource(byteArrayOutputStream2.toByteArray()), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+			helper2.setText(String.format("当日结算成功%s条,详情数据见附件", excelModels2.size()));
+
+			sender.send(mail2);
+			log.info("{}MAH企业结算成功数据发送成功", deptId);
+		}
+
+		return Boolean.TRUE;
+	}
 }

+ 8 - 60
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/task/SpringBeanTaskDemo.java

@@ -457,9 +457,9 @@ public class SpringBeanTaskDemo {
 	 * 每天发送当日结算数据给企业指定邮箱
 	 *
 	 * @param para 参数(格式为"2024-02-23,1611890565;1611890564")
-	 * @return {@link String}
+	 * @return {@link String} 结果
 	 */
-	@SneakyThrows
+	@SneakyThrows(Exception.class)
 	public String sendCurrentDaySettleDataToDeptDaily(String para) {
 		// 校验参数
 		List<String> params = null;
@@ -497,72 +497,20 @@ public class SpringBeanTaskDemo {
 		queryWrapper.eq(SysDept::getDelFlag, "0");
 		List<SysDept> depts = sysDeptMapper.selectList(queryWrapper);
 
-		LocalDate finalCurrentDay = currentDay;
 		depts.forEach(dept -> {
 			try {
 				if (ArrayUtil.isEmpty(dept.getEmails())) {
-					log.warn("{} 没有配置接收邮箱", dept.getName());
 					return;
 				}
 
-				// 本企业当日结算成功数据-发送邮件
-				MimeMessage mail = sender.createMimeMessage();
-				MimeMessageHelper helper = new MimeMessageHelper(mail, true);
-
-				helper.setFrom("yaoyi_report@yaoyi.net");
-				helper.setTo(dept.getEmails());
-
-				String title = "本企业结算成功数据(" + DateTimeFormatter.ofPattern("yyyy-MM-dd").format(finalCurrentDay) + ")";
-				helper.setSubject(title);
-
-				// 获取指定企业当日结算的数据
-				Map<String, Object> reqParams = new HashMap<>();
-				reqParams.put("sendPackageDeptId", dept.getDeptId());
-				reqParams.put("notifyTime", new LocalDateTime[]{startOfDay, endOfDay});
-				List<WmScorePackageSettleExcelModel> excelModels = remoteScorePackageService.exportPackageSettle(reqParams, SecurityConstants.FROM_IN);
-
-				if (CollUtil.isNotEmpty(excelModels)) {
-					ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-					EasyExcelFactory.write(byteArrayOutputStream, WmScorePackageSettleExcelModel.class)
-							.registerConverter(new LocalDateTimeConverter())
-							.autoCloseStream(false).sheet("本企业结算成功数据")
-							.doWrite(excelModels);
-					helper.addAttachment(title, new ByteArrayResource(byteArrayOutputStream.toByteArray()), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
-					helper.setText(String.format("当日结算成功%s条,详情数据见附件", excelModels.size()));
-
-					sender.send(mail);
-					log.info("{}本企业结算成功数据发送成功", dept.getDeptId());
+				for (String email : dept.getEmails()) {
+					// 本企业的数据, 发给指定收件人
+					wmScorePackageService.sendSelfSettleDataToDept(dept.getDeptId(), email, startOfDay, endOfDay);
+					// MAH的数据, 发给指定收件人
+					wmScorePackageService.sendMAHSettleDataToDept(dept.getDeptId(), email, startOfDay, endOfDay);
 				}
 
-				// MAH当日结算成功数据-发送邮件
-				MimeMessage mail2 = sender.createMimeMessage();
-				MimeMessageHelper helper2 = new MimeMessageHelper(mail2, true);
-
-				helper2.setFrom("yaoyi_report@yaoyi.net");
-				helper2.setTo(dept.getEmails());
-
-				String title2 = "MAH企业结算成功数据(" + DateTimeFormatter.ofPattern("yyyy-MM-dd").format(finalCurrentDay) + ")";
-				helper2.setSubject(title2);
-
-				// 获取指定企业当日结算的数据
-				Map<String, Object> reqParams2 = new HashMap<>();
-				reqParams2.put("mahSettleDeptId", dept.getDeptId());
-				reqParams2.put("notifyTime", new LocalDateTime[]{startOfDay, endOfDay});
-				List<WmScorePackageSettleExcelModel> excelModels2 = remoteScorePackageService.exportPackageSettleByMAH(reqParams2, SecurityConstants.FROM_IN);
-
-				if (CollUtil.isNotEmpty(excelModels2)) {
-					ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream();
-					EasyExcelFactory.write(byteArrayOutputStream2, WmScorePackageSettleExcelModel.class)
-							.registerConverter(new LocalDateTimeConverter())
-							.autoCloseStream(false).sheet("MAH企业结算成功数据")
-							.doWrite(excelModels2);
-					helper2.addAttachment(title2, new ByteArrayResource(byteArrayOutputStream2.toByteArray()), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
-					helper2.setText(String.format("当日结算成功%s条,详情数据见附件", excelModels2.size()));
-
-					sender.send(mail2);
-					log.info("{}MAH企业结算成功数据发送成功", dept.getDeptId());
-				}
-			} catch (MessagingException ex) {
+			} catch (Exception ex) {
 				log.error("邮件发送失败", ex);
 			}
 		});