增加发送邮件功能

master
杜函宇 4 months ago
parent 40fda3defd
commit 59720dcab8

@ -16,6 +16,11 @@
</description>
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>

@ -0,0 +1,83 @@
package com.ruoyi.jjh.declaration.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
*
* @author du
* @since 2024/12/12 9:55
*/
@Component("EmailEnterImpl")
public class EmailEnterImpl implements EmailEnterService{
/**
*
*/
@Value("${isTiming}")
private Boolean isTiming;
/**
* SMTP
*/
@Value("${smtp}")
private String smtp;
/**
* SMTP IP
*/
@Value("${smtpIp}")
private String smtpIp;
/**
* SMTP
*/
@Value("${smtpDk}")
private String smtpDk;
/**
*
*/
@Override
public Boolean toEnter(String subject, String body,String toEmail) {
// 发件人邮箱的登录凭证
String username = "jjdn@sipac.gov.cn"; // 发件人邮箱用户名(一般为邮箱地址)
String password = "N!4lsU.T_#2T2Z"; // 发件人邮箱的授权码
// 设置邮件服务器属性
Properties properties = new Properties();
properties.put("mail.smtp.host", smtpIp);
properties.put("mail.smtp.port", smtpDk);
properties.put("mail.smtp.auth", "true"); // 启用身份验证
properties.put("mail.smtp.starttls.enable", "true"); // 启用 TLS
// 获取邮件会话
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
// 获取邮件会话
try {
// 创建邮件消息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
message.setSubject(subject);
message.setText(body);
// 发送邮件
Transport.send(message);
System.out.println("邮件发送成功");
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,13 @@
package com.ruoyi.jjh.declaration.component;
/**
*
* @author du
* @since 2024/12/12 9:50
*/
public interface EmailEnterService {
/**
*
*/
Boolean toEnter(String subject, String body,String toEmail);
}

@ -20,6 +20,7 @@ import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
*
@ -65,6 +66,8 @@ public class TimingRemindImpl implements TimingRemindService {
@Resource
private SmsAlertsService smsAlertsService;
@Resource
private EmailEnterService emailEnterService;
/**
*
@ -103,6 +106,9 @@ public class TimingRemindImpl implements TimingRemindService {
//可在导入或者新增的时候将该常用联系人的手机号添加进工单
smsAlertsService.enterSms(y.getEnterpriseName(), s, y.getContactPhone());
log.info(y.getEnterpriseName() + "发送短信成功!");
//发送邮件
emailEnterService.toEnter(y.getEnterpriseName(), s + "此邮件为系统自动发送,无需回复!", y.getContactEmail());
log.info(y.getEnterpriseName() + "发送邮件成功!");
});
} else {
List<JContacts> list = jContactsService.lambdaQuery().eq(JContacts::getTyshxydm, code)
@ -113,6 +119,9 @@ public class TimingRemindImpl implements TimingRemindService {
//可在导入或者新增的时候将该常用联系人的手机号添加进工单
smsAlertsService.enterSms(y.getQymc(), s, y.getYddh());
log.info(y.getQymc() + "发送短信成功!");
//发送邮件
emailEnterService.toEnter(y.getQymc(), s + "此邮件为系统自动发送,无需回复!", y.getDzyx());
log.info(y.getQymc() + "发送邮件成功!");
});
}
}
@ -140,11 +149,19 @@ public class TimingRemindImpl implements TimingRemindService {
}
sd.setZwId(x.getUserId());
if (isTiming) {
if (sd.getProjectId() != null & !x.getPhonenumber().isEmpty()) {
if (sd.getProjectId() != null && x.getPhonenumber() != null) {
smsAlertsService.enterSms("政府人员-" + x.getNickName(), "您有1个项目自定义通知,请前往工作台查看," + "登录网址为:https://idp.sipac.gov.cn/bms/#/login", x.getPhonenumber());
if(!Objects.equals(x.getEmail(), "") &&x.getEmail()!=null){
//发送邮件
emailEnterService.toEnter("政府人员-" + x.getNickName(), "您有1个项目自定义通知,请前往工作台查看," + "登录网址为:https://idp.sipac.gov.cn/bms/#/login" + "此邮件为系统自动发送,无需回复!", x.getEmail());
}
}
if (!x.getPhonenumber().isEmpty() & sd.getProjectId() == null) {
if (x.getPhonenumber() != null && sd.getProjectId() == null) {
smsAlertsService.enterSms("政府人员-" + x.getNickName(), "您有1个全局自定义通知,请前往工作台查看," + "登录网址为:https://idp.sipac.gov.cn/bms/#/login", x.getPhonenumber());
if(!Objects.equals(x.getEmail(), "") &&x.getEmail()!=null) {
//发送邮件
emailEnterService.toEnter("政府人员-" + x.getNickName(), "您有1个全局自定义通知,请前往工作台查看," + "登录网址为:https://idp.sipac.gov.cn/bms/#/login" + "此邮件为系统自动发送,无需回复!", x.getEmail());
}
}
}
listAdd.add(sd);

@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.jjh.declaration.component.EmailEnterService;
import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo;
import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory;
import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService;
@ -44,6 +45,16 @@ public class BmsEnterpriseDirectoryController extends BaseController {
@Resource
private JContactsService jContactsService;
@Resource
private EmailEnterService emailEnterService;
@ApiOperation(value = "导出用名字和企业库名字做对比企业库没有的企业")
@PostMapping(value = "/g1")
public void check(String email,String user,String toEmail) {
emailEnterService.toEnter(email,user,toEmail);
}
/**
*
*/

@ -1,6 +1,7 @@
package com.ruoyi.jjh.declaration.regular;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.jjh.declaration.component.EmailEnterService;
import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords;
import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService;
import com.ruoyi.jjh.ent.service.SmsAlertsService;
@ -35,6 +36,9 @@ public class SmsEnterChange {
@Value("${isTiming}")
private Boolean isTiming;
@Resource
private EmailEnterService emailEnterService;
// 每三小时执行一次
@Scheduled(cron = "0 0 */12 * * *")
private void runTask() {
@ -48,6 +52,7 @@ public class SmsEnterChange {
list1.removeIf(x -> x.getPhonenumber().isEmpty());
for (SysUser items : list1) {
if("0".equals(items.getDelFlag()) & "0".equals(items.getStatus())) {
emailEnterService.toEnter("政府人员-" + items.getNickName(),"您有" + count + "个新的申报审核任务[待初审],"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login"+"此邮件为系统自动发送,无需回复!",items.getEmail());
smsAlertsService.enterSms("政府人员-" + items.getNickName(), "您有" + count + "个新的申报审核任务[待初审],"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login", items.getPhonenumber());
}
}
@ -61,6 +66,7 @@ public class SmsEnterChange {
list2.removeIf(x -> x.getPhonenumber().isEmpty());
for (SysUser items : list2) {
if("0".equals(items.getDelFlag()) & "0".equals(items.getStatus())) {
emailEnterService.toEnter("政府人员-" + items.getNickName(),"您有" + count1 + "个新的申报审核任务[待复审],"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login"+"此邮件为系统自动发送,无需回复!",items.getEmail());
smsAlertsService.enterSms("政府人员-" + items.getNickName(), "您有" + count1 + "个新的申报审核任务[待复审],"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login", items.getPhonenumber());
}
}
@ -74,6 +80,7 @@ public class SmsEnterChange {
list3.removeIf(x -> x.getPhonenumber().isEmpty());
for (SysUser items : list3) {
if("0".equals(items.getDelFlag()) & "0".equals(items.getStatus())) {
emailEnterService.toEnter("政府人员-" + items.getNickName(),"您有" + count2 + "个新的申报审核任务[待终审],"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login"+"此邮件为系统自动发送,无需回复!",items.getEmail());
smsAlertsService.enterSms("政府人员-" + items.getNickName(), "您有" + count2 + "个新的申报审核任务[待终审],"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login", items.getPhonenumber());
}
}

@ -6,6 +6,7 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.jjh.declaration.component.EmailEnterService;
import com.ruoyi.jjh.declaration.component.TimingRemindService;
import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo;
import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo;
@ -127,6 +128,9 @@ public class TimeChange {
@Resource
private JProjectService jProjectService;
@Resource
private EmailEnterService emailEnterService;
/**
*
*/
@ -279,7 +283,6 @@ public class TimeChange {
y.setAlertTime(y.getEndTime().minusDays(qy.getDaysAdvance()));
if (y.getTyshxydm() != null) {
if (isTiming) {
//发送短信
timingRemindImpl.getContact(y.getTyshxydm(), "您有1个申报任务即将结束,请前往系统首页查看");
}
}
@ -303,6 +306,7 @@ public class TimeChange {
y.setZwId(o.getUserId());
bmsDeclarationRecords.add(y);
if (isTiming) {
emailEnterService.toEnter("政府人员-" + o.getNickName(),"您有1个项目即将建设完成,请前往工作台查看。"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login"+"此邮件为系统自动发送,无需回复!",o.getEmail());
smsAlertsService.enterSms("政府人员-" + o.getNickName(), "您有1个项目即将建设完成,请前往工作台查看。"+"登录网址为:https://idp.sipac.gov.cn/bms/#/login", o.getPhonenumber());
}
}

@ -92,7 +92,7 @@ public class ChiefController {
ChiefResponse bean = JSONUtil.toBean(dataJson, ChiefResponse.class);
//判断几个政务端用户,等待商量结果
//lj 102 其他是100 //要给dept部门id
bean.setToken(singleLoginService.singleLogin(bean.getAccountName(), bean.getName(), null, "02", bean.getMobile()));
bean.setToken(singleLoginService.singleLogin(bean.getAccountName(), bean.getName(), null, "02", bean.getMobile(),bean.getEmail()));
return AjaxResult.success(bean);
} else {
throw new ServiceException("登陆失败");

@ -131,7 +131,7 @@ public class SingleLoginController {
id = bmsEnterpriseBasicInfo.getId();
}
// 设置过期时间为8小时
String token = singleLoginService.singleLogin(req.getUscc(), req.getEpname(), id, "01", null);
String token = singleLoginService.singleLogin(req.getUscc(), req.getEpname(), id, "01", null,null);
res.setToken(token);
res.setMain(req);
redisCache.setCacheObject(key, res, expirationSeconds, TimeUnit.MINUTES);

@ -11,6 +11,6 @@ public interface SingleLoginService {
/**
* token
*/
String singleLogin(String userName, String nickName, Long id, String userType, String phone);
String singleLogin(String userName, String nickName, Long id, String userType, String phone,String email);
}

@ -50,7 +50,7 @@ public class SingleLoginServiceImpl implements SingleLoginService {
* token
*/
@Override
public String singleLogin(String userName, String nickName, Long id, String userType, String phone) {
public String singleLogin(String userName, String nickName, Long id, String userType, String phone,String email) {
// 用户验证
Authentication authentication;
try {
@ -59,6 +59,7 @@ public class SingleLoginServiceImpl implements SingleLoginService {
user.setNickName(nickName);
user.setPassword("admin123");
user.setPhonenumber(phone);
user.setEmail(email);
Long[] roles = new Long[1];
if ("01".equals(userType)) {
roles[0] = 101L;

@ -121,6 +121,13 @@ getInfoId: https://qyt.sipac.gov.cn/enterprise-gateway/sipsg-enterprise/sys/thir
getAllInfo: http://uid.sipac.gov.cn/open/api/identity/data/FindUserById
#法人库-企业联络人员(统一社会信用代码)和法人库-法人基本信息(统一社会信用代码)生产环境
enterpriseUrl: http://172.21.10.46/api/invoke
#SMTP 服务器
smtp: smtp.sipac.gov.cn
#SMTP IP
smtpIp: 172.16.1.68
#SMTP 端口
smtpDk: 25

@ -323,6 +323,27 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
userPostMapper.deleteUserPostByUserId(userId);
// 新增用户与岗位管理
insertUserPost(user);
if ("02".equals(user.getUserType()) & isTiming) {
if (user.getPhonenumber() != null) {
Digester sha256 = new Digester(DigestAlgorithm.SHA256);
String timestamp = String.valueOf(Instant.now().getEpochSecond());
String str = RandomUtil.randomString(30);
//请求头
HashMap<String, String> headers = new HashMap<>();//存放请求头,可以存放多个请求头
headers.put("x-tif-paasid", paaSID);
headers.put("x-tif-signature", sha256.digestHex(timestamp + smsToken + str + timestamp).toUpperCase());
headers.put("x-tif-timestamp", timestamp);
headers.put("x-tif-nonce", str);
Map<String, Object> js1 = new HashMap<>();//存放参数
js1.put("orderId", code);
js1.put("nums", user.getPhonenumber());
HttpResponse response = HttpRequest.post(smsPhoneAdd)
.addHeaders(headers)
.form(js1)
.execute();
System.out.println(response.body());
}
}
return userMapper.updateUser(user);
}

Loading…
Cancel
Save