Browse Source

用户表增加授权码字段、邮件发送功能

liyuan 6 months ago
parent
commit
b22bc39537

+ 1 - 5
blade-common/pom.xml

@@ -90,11 +90,7 @@
             <version>2.0</version>
         </dependency>
 
-        <dependency>
-            <groupId>com.echepei</groupId>
-            <artifactId>common-utils</artifactId>
-            <version>1.0</version>
-        </dependency>
+
     </dependencies>
 
     <build>

+ 54 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/vo/GenerateMailVo.java

@@ -0,0 +1,54 @@
+package org.springblade.los.business.sea.vo;
+
+import lombok.Data;
+
+/**
+ * @author Rain
+ */
+@Data
+public class GenerateMailVo {
+
+	/**
+	 * 文件内容
+	 */
+	private byte[] fileContent;
+
+	/**
+	 * 文件名
+	 */
+	private String fileName;
+
+	/**
+	 * 文件类型
+	 */
+	private String fileType;
+
+	/**
+	 * 接收人
+	 * 多个以 ; 分号间隔
+	 */
+	private String sendTo;
+
+	/**
+	 * 抄送人
+	 * 多个以 ; 分号间隔
+	 */
+	private String sendCc;
+
+	/**
+	 * 密松人
+	 * 多个以 ; 分号间隔
+	 */
+	private String sendBcc;
+
+	/**
+	 * 邮件标题
+	 */
+	private String mailTitle;
+
+	/**
+	 * 	邮件内容
+	 */
+	private String mailContent;
+
+}

+ 6 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java

@@ -69,6 +69,12 @@ public class User extends TenantEntity {
 	 * 邮箱
 	 */
 	private String email;
+
+	/**
+	 * 邮箱授权码
+	 */
+	private String emailAuthorization;
+
 	/**
 	 * 手机
 	 */

+ 9 - 3
blade-service/blade-los/pom.xml

@@ -13,11 +13,11 @@
 
     <dependencies>
         <!-- 邮件依赖,配置hutool工具包发送邮件  -->
-        <dependency>
+<!--        <dependency>
             <groupId>com.sun.mail</groupId>
             <artifactId>javax.mail</artifactId>
             <version>1.6.2</version>
-        </dependency>
+        </dependency>-->
         <!-- 模板引擎,制作邮件模板 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -168,7 +168,13 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
-        <!-- PDF -->
+
+
+        <dependency>
+            <groupId>com.echepei</groupId>
+            <artifactId>common-utils</artifactId>
+            <version>1.2</version>
+        </dependency>
     </dependencies>
     <repositories>
         <repository>

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/controller/ReportsController.java

@@ -35,6 +35,7 @@ import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.reports.entity.Reports;
 import org.springblade.los.basic.reports.service.IReportsService;
 import org.springblade.los.basic.reports.vo.ReportsVO;
+import org.springblade.los.business.sea.vo.GenerateMailVo;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -186,4 +187,9 @@ public class ReportsController extends BladeController {
 	}
 
 
+	@PostMapping("/generateMailFileAndSend")
+	public R<String> generateMailFileAndSend(@RequestBody GenerateMailVo generateMailVo) {
+		return reportsService.generateMailFileAndSend(generateMailVo);
+	}
+
 }

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/IReportsService.java

@@ -21,6 +21,7 @@ import org.springblade.los.basic.reports.entity.Reports;
 import org.springblade.los.basic.reports.vo.ReportsVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.business.sea.vo.GenerateMailVo;
 
 import java.util.List;
 
@@ -55,4 +56,12 @@ public interface IReportsService extends IService<Reports> {
 					String itemIds,String type,String curCode);
 
     List<Reports> getReports(Reports reports);
+
+	/**
+	 * 生成邮件文件并发送
+	 *
+	 * @param generateMailVo 参数
+	 * @return 结果
+	 */
+    R<String> generateMailFileAndSend(GenerateMailVo generateMailVo);
 }

+ 78 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -20,8 +20,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.echepei.dto.mail.MailDto;
+import com.echepei.enums.MailTypeEnum;
+import com.echepei.utils.mail.SendMailUtil;
 import lombok.AllArgsConstructor;
 import org.springblade.common.enums.CommonEnum;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -47,6 +51,7 @@ import org.springblade.los.business.customsDeclaration.service.ICustomsDeclarati
 import org.springblade.los.business.sea.dto.ContainersReports;
 import org.springblade.los.business.sea.entity.*;
 import org.springblade.los.business.sea.service.*;
+import org.springblade.los.business.sea.vo.GenerateMailVo;
 import org.springblade.los.enums.AmendType;
 import org.springblade.los.finance.agreement.entity.AgreementPrice;
 import org.springblade.los.finance.agreement.entity.AgreementPriceItems;
@@ -78,11 +83,19 @@ import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.MathContext;
 import java.math.RoundingMode;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
@@ -6690,6 +6703,71 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 		return baseMapper.getReports(reports);
 	}
 
+	@Override
+	public R<String> generateMailFileAndSend(GenerateMailVo generateMailVo) {
+		String baseFilePath = sysClient.getParamService("stimulsoft.send.mail.path");
+		if (!StringUtils.hasText(baseFilePath)) {
+			return R.fail("请配置发送邮件文件路径");
+		}
+		BladeUser bladeUser = AuthUtil.getUser();
+		R<User> userInfoResult = userClient.userInfoById(bladeUser.getUserId());
+		if (!userInfoResult.isSuccess()) {
+			return R.fail(userInfoResult.getMsg());
+		}
+		User userInfo = userInfoResult.getData();
+		if (org.springframework.util.ObjectUtils.isEmpty(userInfo)) {
+			return R.fail("用户不存在,请重新登录");
+		}
+		String userMail = userInfo.getEmail();
+		String userMailAuthorization = userInfo.getEmailAuthorization();
+		if (!StringUtils.hasText(userMail) || !StringUtils.hasText(userMailAuthorization)) {
+			R<List<DictBiz>> bizResult = dictBizClient.getList("mail_send");
+			if (!bizResult.isSuccess()) {
+				return R.fail("请完善邮箱信息");
+			}
+			List<DictBiz> dictBizList = bizResult.getData();
+			if (CollectionUtils.isEmpty(dictBizList)) {
+				return R.fail("请完善邮箱信息");
+			}
+			DictBiz dictBiz = dictBizList.stream().filter(db -> db.getTenantId().equals(bladeUser.getTenantId())
+				&& db.getIsDeleted() == 0 && db.getIsSealed() == 0).sorted(Comparator.comparingInt(DictBiz::getSort)).findFirst().orElse(null);
+			if (dictBiz == null) {
+				return R.fail("请完善有效的邮箱信息");
+			}
+			userMail = dictBiz.getDictKey();
+			userMailAuthorization = dictBiz.getDictValue();
+			if (!StringUtils.hasText(userMail) || !StringUtils.hasText(userMailAuthorization)) {
+				return R.fail("请维护邮箱信息");
+			}
+		}
+		LocalDate nowDate = LocalDate.now();
+		baseFilePath = baseFilePath + "/" + nowDate.getYear() + "/" + nowDate.getMonthValue() + "/" + nowDate.getDayOfMonth();
+		if (!Files.exists(Paths.get(baseFilePath))) {
+			new File(baseFilePath).mkdirs();
+		}
+		String realFileName = generateMailVo.getFileName() + "." + generateMailVo.getFileType().toLowerCase();
+		String filePath =  baseFilePath + "/" + realFileName;
+		try {
+			Files.write(Paths.get(filePath), generateMailVo.getFileContent());
+		} catch (Exception e) {
+			log.error(e.toString());
+			return R.fail("文件写入失败");
+		}
+		MailDto mailDto = new MailDto();
+		mailDto.setMailFrom(userMail);
+		mailDto.setMailUserName(userMail);
+		mailDto.setMailPassword(userMailAuthorization);
+		mailDto.setMailType(MailTypeEnum.QQ.mailType);
+		mailDto.setMailTo(generateMailVo.getSendTo());
+		mailDto.setMailCc(generateMailVo.getSendCc());
+		mailDto.setMailBcc(generateMailVo.getSendBcc());
+		mailDto.setMailTitle(generateMailVo.getMailTitle());
+		mailDto.setMailContent(generateMailVo.getMailContent());
+		mailDto.setMailFilePath(Arrays.asList(filePath));
+		SendMailUtil.sendHtmlFileMail(mailDto);
+		return R.data("发送成功");
+	}
+
 
 	private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
 		Set<Object> seen = ConcurrentHashMap.newKeySet();

+ 1 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -19,6 +19,7 @@
         <result column="name" property="name"/>
         <result column="real_name" property="realName"/>
         <result column="email" property="email"/>
+        <result column="email_authorization" property="emailAuthorization"/>
         <result column="phone" property="phone"/>
         <result column="birthday" property="birthday"/>
         <result column="sex" property="sex"/>