Authored by zhengyouwei

mail

... ... @@ -112,7 +112,18 @@
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
package com.monitor.common.util;
import com.monitor.model.domain.Mail;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by zhengyouwei on 2016/9/9.
*/
public class MailUtil {
protected static final Logger logger = LoggerFactory.getLogger(MailUtil.class);
private static final String MAIL_SENDER = "YOHO-OPERATION@yoho.cn";
private static final String MAIL_PWD = "Yoho@9646";
private static final String MAIL_HOST = "smtp.exmail.qq.com";
private static final String MAIL_ENCODE = "utf-8";
public static void sendMail(Mail mail) {
try {
HtmlEmail htmlEmail = new HtmlEmail();
htmlEmail.setHostName(MAIL_HOST);
htmlEmail.setCharset(MAIL_ENCODE);
htmlEmail.addTo(mail.getReceivers());
if(mail.getCc() != null && mail.getCc().length > 0){
htmlEmail.addCc(mail.getCc());
}
htmlEmail.setFrom(MAIL_SENDER);
htmlEmail.setAuthentication(MAIL_SENDER,MAIL_PWD);
htmlEmail.setSubject(mail.getSubject());
htmlEmail.setMsg(mail.getMessage());
htmlEmail.send();
} catch (EmailException e) {
logger.error("send email failed", e);
}
}
public static void main(String[] args) {
Mail mail = new Mail();
mail.setSubject("test");
mail.setMessage(" <div style=\"margin-left:20%;\">sdasdas</br>sdasdas</div>");
mail.setReceivers(new String[]{"youwei.zheng@yoho.cn"});
sendMail(mail);
}
}
... ...
package com.monitor.model.domain;
import lombok.Data;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by zhengyouwei on 2016/9/9.
*/
@Data
public class Mail {
private String[] receivers;
private String subject;//主题
private String message;//消息
private String[] cc;//抄送
public static Builder Builder(String subject) {
return new Builder(subject);
}
public static class Builder {
private String TEXT_DIV_START = "<div style=\"margin-left:10%;margin-top: 50px;font-size: large;\">";
private String SIGN_DIV_START = "<div style=\"margin-left:5%;font-size: large;\">";
private String DIV_END = "</div>";
Set<String> receivers = new HashSet<>();
String subject;//主题
List<String> messages = new ArrayList<>();//消息
Set<String> ccs = new HashSet<>();
public Builder(String subject) {
this.subject = subject;
}
public void receiver(String receiver) {
receivers.add(receiver);
}
public void message(String message) {
messages.add(message);
}
public void cc(String cc) {
ccs.add(cc);
}
public Mail build() {
Mail mail = new Mail();
mail.setMessage(buildMessage());
mail.setSubject(this.subject);
String[] receiverArray = new String[receivers.size()];
mail.setReceivers(receivers.toArray(receiverArray));
String[] ccArray = new String[ccs.size()];
mail.setCc(ccs.toArray(ccArray));
return mail;
}
/**
* 编辑正文
* @return
*/
private String buildMessage() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(SIGN_DIV_START);
stringBuilder.append("<strong>工单系统有您的待办:</strong>");
stringBuilder.append(DIV_END);
//邮件正文
stringBuilder.append(TEXT_DIV_START);
for (String str : messages) {
stringBuilder.append(str);
stringBuilder.append("</br>");
}
stringBuilder.append(DIV_END);
//邮件签名
stringBuilder.append("</br></br></br>");
stringBuilder.append("<hr>");
stringBuilder.append(SIGN_DIV_START);
stringBuilder.append("<span style=\"font-size: xx-large;\"><strong>YOHO!运维系统</strong></span></br>");
stringBuilder.append("<a href=\"http://www.yohops.com/\">www.yohops.com</a></br>");
stringBuilder.append("<a href=\"http://dev.yohops.com/\">dev.yohops.com/</a>");
stringBuilder.append(DIV_END);
return stringBuilder.toString();
}
}
}
... ...
... ... @@ -122,7 +122,7 @@ public class ReleaseServiceImpl implements ReleaseService {
//插入用户待处理工单表
PendingJob pendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), releaseWorkJob.getTest(), HandlerRole.TEST, WorkStatus.PUBLISH);
workSystemSupport.addPending(pendingJob);
workSystemSupport.addPending(pendingJob,true);
return result;
}
... ... @@ -151,7 +151,7 @@ public class ReleaseServiceImpl implements ReleaseService {
releaseWorkJob.setStatus(WorkStatus.CLOSE);
releaseWorkJob.setOperator(handledJob.getHandler());
releaseWorkJobMapper.updateResult(releaseWorkJob);//关闭工单
workSystemSupport.workend(releaseWorkJob.getId(),WorkStatus.getCstatus(WorkStatus.CLOSE));
workSystemSupport.workend(releaseWorkJob.getId(),WorkType.RELEASE_PROJECT,releaseWorkJob.getTitle(),WorkStatus.getCstatus(WorkStatus.CLOSE));
return 1;
}
int currentStatus = pendingJob.getCurrentStatus();
... ... @@ -160,29 +160,29 @@ public class ReleaseServiceImpl implements ReleaseService {
releaseWorkJob.setStatus(WorkStatus.PUBLISH);
releaseWorkJobMapper.updateStatus(releaseWorkJob);
PendingJob newPendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), releaseWorkJob.getTest(), HandlerRole.TEST, WorkStatus.PUBLISH);
workSystemSupport.addPendingByRole(newPendingJob);
workSystemSupport.addPendingByRole(newPendingJob,false);
}
} else if (currentStatus == WorkStatus.PUBLISH) {//发布状态
if(handleType == HandleType.PASS){//通过测试
releaseWorkJob.setStatus(WorkStatus.TEST_PASS);
releaseWorkJobMapper.updateStatus(releaseWorkJob);
PendingJob newPendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), null, HandlerRole.OPERATOR, WorkStatus.TEST_PASS);
workSystemSupport.addPendingByRole(newPendingJob);
workSystemSupport.addPendingByRole(newPendingJob,false);
}else{//未通过测试
releaseWorkJob.setStatus(WorkStatus.CREATED);//置为初始状态
releaseWorkJobMapper.updateStatus(releaseWorkJob);
//插入用户待处理工单表
PendingJob newPendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), releaseWorkJob.getDevelop(), HandlerRole.DEVELOP, WorkStatus.CREATED);
workSystemSupport.addPending(newPendingJob);
workSystemSupport.addPending(newPendingJob,false);
}
}else if(currentStatus == WorkStatus.TEST_PASS) {//测试通过的工单
releaseWorkJob.setOperator(handledJob.getHandler());
if(handleType == HandleType.PASS){//发布成功
releaseWorkJob.setStatus(WorkStatus.EXE_SUCCESS);
workSystemSupport.workend(releaseWorkJob.getId(),WorkStatus.getCstatus(WorkStatus.EXE_SUCCESS));
workSystemSupport.workend(releaseWorkJob.getId(),WorkType.RELEASE_PROJECT,releaseWorkJob.getTitle(),WorkStatus.getCstatus(WorkStatus.EXE_SUCCESS));
}else {//发布失败
releaseWorkJob.setStatus(WorkStatus.EXE_FAILE);
workSystemSupport.workend(releaseWorkJob.getId(),WorkStatus.getCstatus(WorkStatus.EXE_FAILE));
workSystemSupport.workend(releaseWorkJob.getId(),WorkType.RELEASE_PROJECT,releaseWorkJob.getTitle(),WorkStatus.getCstatus(WorkStatus.EXE_FAILE));
}
releaseWorkJobMapper.updateResult(releaseWorkJob);//填写工单结果
}
... ...
... ... @@ -5,10 +5,13 @@ import com.model.PendingJob;
import com.model.ReleaseWorkJob;
import com.model.User;
import com.monitor.common.service.AlarmMsgService;
import com.monitor.common.util.MailUtil;
import com.monitor.model.domain.Mail;
import com.monitor.mysql.mapper.HandledJobMapper;
import com.monitor.mysql.mapper.PendingJobMapper;
import com.monitor.mysql.mapper.ReleaseWorkJobMapper;
import com.monitor.mysql.mapper.UserMapper;
import com.monitor.other.worksystem.contants.HandlerRole;
import com.monitor.other.worksystem.contants.WorkType;
import com.monitor.other.worksystem.service.HandledService;
import org.apache.commons.lang.StringUtils;
... ... @@ -46,36 +49,49 @@ public class WorkSystemSupport {
*
* @param pendingJob
*/
public void addPending(PendingJob pendingJob) {
public void addPending(PendingJob pendingJob, boolean sendLeader) {
pendingJobMapper.insert(pendingJob);
User user = userMapper.selectByName(pendingJob.getHandler());
Mail.Builder builder = buildtoDoMail(pendingJob);
if (StringUtils.isNotBlank(user.getMobile())) {
alarmMsgService.sendSms("work_system", buildSms(pendingJob), user.getMobile());
builder.receiver(user.getEmail());
}
//抄送给leader
if (sendLeader) {
addLeader(builder);
}
//发送邮件
MailUtil.sendMail(builder.build());
}
/**
* 处理结束发短信
*
* @param workid
* @param result
*/
public void workend(String workid,String result) {
public void workend(String workid, String type, String title, String result) {
List<HandledJob> list = handledJobMapper.selectByworkId(workid);
Set<String> mobileSet = new HashSet<String>();
for (HandledJob handledJob : list){
Mail.Builder builder = buildResultMail(type, workid, title,result);
for (HandledJob handledJob : list) {
User user = userMapper.selectByName(handledJob.getHandler());
if (StringUtils.isNotBlank(user.getMobile())) {
mobileSet.add(user.getMobile());
}
builder.receiver(user.getEmail());
}
StringBuilder mobileBuilder = new StringBuilder();
for (String str : mobileSet){
for (String str : mobileSet) {
mobileBuilder.append(str).append(",");
}
String sms = "您处理过的工单:" + workid +" 已经处理完毕,处理结果:"+result;
alarmMsgService.sendSms("work_system",sms, mobileBuilder.toString());
String sms = "您处理过的工单:" + workid + " 已经处理完毕,处理结果:" + result;
alarmMsgService.sendSms("work_system", sms, mobileBuilder.toString());
//发送邮件
addLeader(builder);
MailUtil.sendMail(builder.build());
}
/**
... ... @@ -83,19 +99,27 @@ public class WorkSystemSupport {
*
* @param pendingJob
*/
public void addPendingByRole(PendingJob pendingJob) {
public void addPendingByRole(PendingJob pendingJob, boolean sendLeader) {
String sms = buildSms(pendingJob);
String role = pendingJob.getHandlerRole();
List<User> list = userMapper.selectUsersByRole(role);
StringBuilder mobileBuilder = new StringBuilder();
Mail.Builder builder = buildtoDoMail(pendingJob);
for (User user : list) {
pendingJob.setHandler(user.getName());
pendingJobMapper.insert(pendingJob);
if (StringUtils.isNotBlank(user.getMobile())) {
mobileBuilder.append(user.getMobile()).append(",");
builder.receiver(user.getEmail());
}
}
alarmMsgService.sendSms("work_system", sms, mobileBuilder.toString().substring(0, mobileBuilder.toString().toString().length() - 1));
//抄送给leader
if (sendLeader) {
addLeader(builder);
}
//发送邮件
MailUtil.sendMail(builder.build());
}
/**
... ... @@ -118,5 +142,43 @@ public class WorkSystemSupport {
return stringBuilder.toString();
}
/**
* 组建待办邮件
*/
public Mail.Builder buildtoDoMail(PendingJob pendingJob) {
Mail.Builder builder = Mail.Builder(pendingJob.getType() + "_工单待办");
builder.message("<span style=\"display: inline-block;width: 100px\">工单ID:</span>"+pendingJob.getWorkId());
builder.message("<span style=\"display: inline-block;width: 100px\">工单类型:</span>"+pendingJob.getType());
builder.message("<span style=\"display: inline-block;width: 100px\">工单标题:</span>"+pendingJob.getTitle());
return builder;
}
/**
* 组建结果邮件
*/
public Mail.Builder buildResultMail(String type, String workid, String title,String reulut) {
Mail.Builder builder = Mail.Builder(type + "_工单结果");
builder.message("<span style=\"display: inline-block;width: 100px\">工单ID:</span>" + workid);
builder.message("<span style=\"display: inline-block;width: 100px\">工单类型:</span>" + type);
builder.message("<span style=\"display: inline-block;width: 100px\">工单标题:</span>" + title);
builder.message("<span style=\"display: inline-block;width: 100px\">处理结果:</span>" + reulut);
return builder;
}
/**
* 抄送给leader
*
* @param builder
*/
public void addLeader(Mail.Builder builder) {
List<User> list = userMapper.selectUsersByRole(HandlerRole.LEADER);
for (User u : list) {
builder.cc(u.getEmail());
}
}
}
... ...
... ... @@ -64,6 +64,21 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
... ...