From 59720dcab8b2d6d4c1b0b2f8ce661a5aa22983b9 Mon Sep 17 00:00:00 2001 From: du <1725534722@qq.com> Date: Fri, 20 Dec 2024 09:35:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=91=E9=80=81=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/pom.xml | 5 ++ .../declaration/component/EmailEnterImpl.java | 83 +++++++++++++++++++ .../component/EmailEnterService.java | 13 +++ .../component/TimingRemindImpl.java | 21 ++++- .../BmsEnterpriseDirectoryController.java | 11 +++ .../declaration/regular/SmsEnterChange.java | 7 ++ .../jjh/declaration/regular/TimeChange.java | 6 +- .../single/controller/ChiefController.java | 2 +- .../controller/SingleLoginController.java | 2 +- .../single/service/SingleLoginService.java | 2 +- .../service/impl/SingleLoginServiceImpl.java | 3 +- .../src/main/resources/application.yml | 7 ++ .../service/impl/SysUserServiceImpl.java | 21 +++++ 13 files changed, 176 insertions(+), 7 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterService.java diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index cfdeab1..a12935a 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -16,6 +16,11 @@ + + com.sun.mail + javax.mail + 1.6.2 + org.jsoup jsoup diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterImpl.java new file mode 100644 index 0000000..662c69e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterImpl.java @@ -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; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterService.java new file mode 100644 index 0000000..0fbf6c7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/EmailEnterService.java @@ -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); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/TimingRemindImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/TimingRemindImpl.java index d0b2d92..c905cd7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/TimingRemindImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/component/TimingRemindImpl.java @@ -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 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); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java index 930bb79..a4dd6d1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java @@ -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); + } + + /** * 查询企业名录列表 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/SmsEnterChange.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/SmsEnterChange.java index b3e4bee..9a026da 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/SmsEnterChange.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/SmsEnterChange.java @@ -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()); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/TimeChange.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/TimeChange.java index f5a8c15..3f3cb82 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/TimeChange.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/regular/TimeChange.java @@ -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()); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/ChiefController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/ChiefController.java index 0fe42a5..adf3987 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/ChiefController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/ChiefController.java @@ -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("登陆失败"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/SingleLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/SingleLoginController.java index 391c841..b8f8e72 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/SingleLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/controller/SingleLoginController.java @@ -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); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/SingleLoginService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/SingleLoginService.java index 81e8e94..6ba031d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/SingleLoginService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/SingleLoginService.java @@ -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); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/impl/SingleLoginServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/impl/SingleLoginServiceImpl.java index f978d48..e8278b3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/impl/SingleLoginServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/single/service/impl/SingleLoginServiceImpl.java @@ -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; diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 7d80836..632a266 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -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 + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 6ae3cc8..6e681c6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -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 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 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); }