Merge branch 'v1.4' of https://github.com/metersphere/metersphere into v1.4
This commit is contained in:
commit
f5f5b35968
|
@ -9,13 +9,14 @@ import io.metersphere.commons.constants.NoticeConstants;
|
||||||
import io.metersphere.commons.constants.TestPlanTestCaseStatus;
|
import io.metersphere.commons.constants.TestPlanTestCaseStatus;
|
||||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||||
import io.metersphere.notice.domain.MessageDetail;
|
import io.metersphere.notice.domain.MessageDetail;
|
||||||
import io.metersphere.notice.domain.MessageSettingDetail;
|
import io.metersphere.notice.domain.MessageSettingDetail;
|
||||||
import io.metersphere.notice.domain.NoticeDetail;
|
|
||||||
import io.metersphere.notice.service.DingTaskService;
|
import io.metersphere.notice.service.DingTaskService;
|
||||||
import io.metersphere.notice.service.MailService;
|
import io.metersphere.notice.service.MailService;
|
||||||
import io.metersphere.notice.service.NoticeService;
|
import io.metersphere.notice.service.NoticeService;
|
||||||
import io.metersphere.notice.service.WxChatTaskService;
|
import io.metersphere.notice.service.WxChatTaskService;
|
||||||
|
import io.metersphere.service.SystemParameterService;
|
||||||
import io.metersphere.track.service.TestPlanTestCaseService;
|
import io.metersphere.track.service.TestPlanTestCaseService;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.jmeter.assertions.AssertionResult;
|
import org.apache.jmeter.assertions.AssertionResult;
|
||||||
|
@ -24,7 +25,6 @@ import org.apache.jmeter.visualizers.backend.AbstractBackendListenerClient;
|
||||||
import org.apache.jmeter.visualizers.backend.BackendListenerContext;
|
import org.apache.jmeter.visualizers.backend.BackendListenerContext;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
|
|
||||||
import javax.mail.MessagingException;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -174,51 +174,55 @@ public class APIBackendListenerClient extends AbstractBackendListenerClient impl
|
||||||
MailService mailService = CommonBeanFactory.getBean(MailService.class);
|
MailService mailService = CommonBeanFactory.getBean(MailService.class);
|
||||||
DingTaskService dingTaskService = CommonBeanFactory.getBean(DingTaskService.class);
|
DingTaskService dingTaskService = CommonBeanFactory.getBean(DingTaskService.class);
|
||||||
WxChatTaskService wxChatTaskService = CommonBeanFactory.getBean(WxChatTaskService.class);
|
WxChatTaskService wxChatTaskService = CommonBeanFactory.getBean(WxChatTaskService.class);
|
||||||
if (StringUtils.equals(NoticeConstants.SCHEDULE, report.getTriggerMode())) {
|
SystemParameterService systemParameterService = CommonBeanFactory.getBean(SystemParameterService.class);
|
||||||
List<NoticeDetail> noticeList = noticeService.queryNotice(testResult.getTestId());
|
if (StringUtils.equals(NoticeConstants.API, report.getTriggerMode()) || StringUtils.equals(NoticeConstants.SCHEDULE, report.getTriggerMode())) {
|
||||||
mailService.sendApiNotification(report, noticeList);
|
|
||||||
}
|
|
||||||
if (StringUtils.equals(NoticeConstants.API, report.getTriggerMode())) {
|
|
||||||
List<String> userIds = new ArrayList<>();
|
List<String> userIds = new ArrayList<>();
|
||||||
MessageSettingDetail messageSettingDetail = noticeService.searchMessage();
|
List<MessageDetail> taskList = new ArrayList<>();
|
||||||
List<MessageDetail> taskList = messageSettingDetail.getJenkinsTask();
|
String successContext = "";
|
||||||
String contextSuccess = "jenkins任务通知" + report.getName() + "执行成功";
|
String failedContext = "";
|
||||||
String contextFailed = "jenkins任务通知" + report.getName() + "执行失败";
|
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
||||||
|
String url = baseSystemConfigDTO.getUrl() + "/#/api/report/view/" + report.getId();
|
||||||
|
if (StringUtils.equals(NoticeConstants.API, report.getTriggerMode())) {
|
||||||
|
MessageSettingDetail messageSettingDetail = noticeService.searchMessage();
|
||||||
|
taskList = messageSettingDetail.getJenkinsTask();
|
||||||
|
successContext = "jenkins任务通知:" + report.getName() + "执行成功" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
failedContext = "jenkins任务通知:" + report.getName() + "执行失败" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
}
|
||||||
|
if (StringUtils.equals(NoticeConstants.SCHEDULE, report.getTriggerMode())) {
|
||||||
|
taskList = noticeService.searchMessageSchedule(testResult.getTestId());
|
||||||
|
successContext = "定时任务通知:" + report.getName() + "执行成功" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
failedContext = "定时任务通知:" + report.getName() + "执行失败" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
}
|
||||||
|
String finalSuccessContext = successContext;
|
||||||
|
String finalFailedContext = failedContext;
|
||||||
taskList.forEach(r -> {
|
taskList.forEach(r -> {
|
||||||
switch (r.getType()) {
|
switch (r.getType()) {
|
||||||
case NoticeConstants.NAIL_ROBOT:
|
case NoticeConstants.NAIL_ROBOT:
|
||||||
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(report.getStatus(), "Success")) {
|
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(report.getStatus(), "Success")) {
|
||||||
dingTaskService.sendNailRobot(r, userIds, contextSuccess, NoticeConstants.EXECUTE_SUCCESSFUL);
|
dingTaskService.sendNailRobot(r, userIds, finalSuccessContext, NoticeConstants.EXECUTE_SUCCESSFUL);
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(report.getStatus(), "Error")) {
|
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(report.getStatus(), "Error")) {
|
||||||
dingTaskService.sendNailRobot(r, userIds, contextFailed, NoticeConstants.EXECUTE_FAILED);
|
dingTaskService.sendNailRobot(r, userIds, finalFailedContext, NoticeConstants.EXECUTE_FAILED);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NoticeConstants.WECHAT_ROBOT:
|
case NoticeConstants.WECHAT_ROBOT:
|
||||||
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(report.getStatus(), "Success")) {
|
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(report.getStatus(), "Success")) {
|
||||||
wxChatTaskService.sendWechatRobot(r, userIds, contextSuccess, NoticeConstants.EXECUTE_SUCCESSFUL);
|
wxChatTaskService.sendWechatRobot(r, userIds, finalSuccessContext, NoticeConstants.EXECUTE_SUCCESSFUL);
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(report.getStatus(), "Error")) {
|
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(report.getStatus(), "Error")) {
|
||||||
wxChatTaskService.sendWechatRobot(r, userIds, contextFailed, NoticeConstants.EXECUTE_FAILED);
|
wxChatTaskService.sendWechatRobot(r, userIds, finalFailedContext, NoticeConstants.EXECUTE_FAILED);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NoticeConstants.EMAIL:
|
case NoticeConstants.EMAIL:
|
||||||
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(report.getStatus(), "Success")) {
|
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(report.getStatus(), "Success")) {
|
||||||
try {
|
mailService.sendApiNotification(r, report, NoticeConstants.EXECUTE_SUCCESSFUL);
|
||||||
mailService.sendApiJenkinsNotification(contextSuccess, r);
|
}
|
||||||
} catch (MessagingException messagingException) {
|
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(report.getStatus(), "Error")) {
|
||||||
messagingException.printStackTrace();
|
mailService.sendApiNotification(r, report, NoticeConstants.EXECUTE_FAILED);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(report.getStatus(), "Error")) {
|
|
||||||
try {
|
|
||||||
mailService.sendApiJenkinsNotification(contextFailed, r);
|
|
||||||
} catch (MessagingException messagingException) {
|
|
||||||
messagingException.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package io.metersphere.base.domain;
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class MessageTask implements Serializable {
|
public class MessageTask implements Serializable {
|
||||||
private String id;
|
private String id;
|
||||||
|
@ -23,5 +24,7 @@ public class MessageTask implements Serializable {
|
||||||
|
|
||||||
private String organizationId;
|
private String organizationId;
|
||||||
|
|
||||||
|
private String testId;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
|
@ -723,6 +723,76 @@ public class MessageTaskExample {
|
||||||
addCriterion("organization_id not between", value1, value2, "organizationId");
|
addCriterion("organization_id not between", value1, value2, "organizationId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdIsNull() {
|
||||||
|
addCriterion("test_id is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdIsNotNull() {
|
||||||
|
addCriterion("test_id is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdEqualTo(String value) {
|
||||||
|
addCriterion("test_id =", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdNotEqualTo(String value) {
|
||||||
|
addCriterion("test_id <>", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdGreaterThan(String value) {
|
||||||
|
addCriterion("test_id >", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("test_id >=", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdLessThan(String value) {
|
||||||
|
addCriterion("test_id <", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("test_id <=", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdLike(String value) {
|
||||||
|
addCriterion("test_id like", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdNotLike(String value) {
|
||||||
|
addCriterion("test_id not like", value, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdIn(List<String> values) {
|
||||||
|
addCriterion("test_id in", values, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdNotIn(List<String> values) {
|
||||||
|
addCriterion("test_id not in", values, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdBetween(String value1, String value2) {
|
||||||
|
addCriterion("test_id between", value1, value2, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andTestIdNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("test_id not between", value1, value2, "testId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Criteria extends GeneratedCriteria {
|
public static class Criteria extends GeneratedCriteria {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<result column="identification" jdbcType="VARCHAR" property="identification" />
|
<result column="identification" jdbcType="VARCHAR" property="identification" />
|
||||||
<result column="is_set" jdbcType="BIT" property="isSet" />
|
<result column="is_set" jdbcType="BIT" property="isSet" />
|
||||||
<result column="organization_id" jdbcType="VARCHAR" property="organizationId" />
|
<result column="organization_id" jdbcType="VARCHAR" property="organizationId" />
|
||||||
|
<result column="test_id" jdbcType="VARCHAR" property="testId"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<sql id="Example_Where_Clause">
|
<sql id="Example_Where_Clause">
|
||||||
<where>
|
<where>
|
||||||
|
@ -71,7 +72,8 @@
|
||||||
</where>
|
</where>
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, `type`, event, user_id, task_type, webhook, identification, is_set, organization_id
|
id, `type`, event, user_id, task_type, webhook, identification, is_set, organization_id,
|
||||||
|
test_id
|
||||||
</sql>
|
</sql>
|
||||||
<select id="selectByExample" parameterType="io.metersphere.base.domain.MessageTaskExample" resultMap="BaseResultMap">
|
<select id="selectByExample" parameterType="io.metersphere.base.domain.MessageTaskExample" resultMap="BaseResultMap">
|
||||||
select
|
select
|
||||||
|
@ -104,14 +106,14 @@
|
||||||
</if>
|
</if>
|
||||||
</delete>
|
</delete>
|
||||||
<insert id="insert" parameterType="io.metersphere.base.domain.MessageTask">
|
<insert id="insert" parameterType="io.metersphere.base.domain.MessageTask">
|
||||||
insert into message_task (id, `type`, event,
|
insert into message_task (id, `type`, event,
|
||||||
user_id, task_type, webhook,
|
user_id, task_type, webhook,
|
||||||
identification, is_set, organization_id
|
identification, is_set, organization_id,
|
||||||
)
|
test_id)
|
||||||
values (#{id,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{event,jdbcType=VARCHAR},
|
values (#{id,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{event,jdbcType=VARCHAR},
|
||||||
#{userId,jdbcType=VARCHAR}, #{taskType,jdbcType=VARCHAR}, #{webhook,jdbcType=VARCHAR},
|
#{userId,jdbcType=VARCHAR}, #{taskType,jdbcType=VARCHAR}, #{webhook,jdbcType=VARCHAR},
|
||||||
#{identification,jdbcType=VARCHAR}, #{isSet,jdbcType=BIT}, #{organizationId,jdbcType=VARCHAR}
|
#{identification,jdbcType=VARCHAR}, #{isSet,jdbcType=BIT}, #{organizationId,jdbcType=VARCHAR},
|
||||||
)
|
#{testId,jdbcType=VARCHAR})
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="io.metersphere.base.domain.MessageTask">
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.MessageTask">
|
||||||
insert into message_task
|
insert into message_task
|
||||||
|
@ -143,6 +145,9 @@
|
||||||
<if test="organizationId != null">
|
<if test="organizationId != null">
|
||||||
organization_id,
|
organization_id,
|
||||||
</if>
|
</if>
|
||||||
|
<if test="testId != null">
|
||||||
|
test_id,
|
||||||
|
</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="id != null">
|
<if test="id != null">
|
||||||
|
@ -172,6 +177,9 @@
|
||||||
<if test="organizationId != null">
|
<if test="organizationId != null">
|
||||||
#{organizationId,jdbcType=VARCHAR},
|
#{organizationId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="testId != null">
|
||||||
|
#{testId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
<select id="countByExample" parameterType="io.metersphere.base.domain.MessageTaskExample" resultType="java.lang.Long">
|
<select id="countByExample" parameterType="io.metersphere.base.domain.MessageTaskExample" resultType="java.lang.Long">
|
||||||
|
@ -210,6 +218,9 @@
|
||||||
<if test="record.organizationId != null">
|
<if test="record.organizationId != null">
|
||||||
organization_id = #{record.organizationId,jdbcType=VARCHAR},
|
organization_id = #{record.organizationId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.testId != null">
|
||||||
|
test_id = #{record.testId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
</set>
|
</set>
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
|
@ -218,14 +229,15 @@
|
||||||
<update id="updateByExample" parameterType="map">
|
<update id="updateByExample" parameterType="map">
|
||||||
update message_task
|
update message_task
|
||||||
set id = #{record.id,jdbcType=VARCHAR},
|
set id = #{record.id,jdbcType=VARCHAR},
|
||||||
`type` = #{record.type,jdbcType=VARCHAR},
|
`type` = #{record.type,jdbcType=VARCHAR},
|
||||||
event = #{record.event,jdbcType=VARCHAR},
|
event = #{record.event,jdbcType=VARCHAR},
|
||||||
user_id = #{record.userId,jdbcType=VARCHAR},
|
user_id = #{record.userId,jdbcType=VARCHAR},
|
||||||
task_type = #{record.taskType,jdbcType=VARCHAR},
|
task_type = #{record.taskType,jdbcType=VARCHAR},
|
||||||
webhook = #{record.webhook,jdbcType=VARCHAR},
|
webhook = #{record.webhook,jdbcType=VARCHAR},
|
||||||
identification = #{record.identification,jdbcType=VARCHAR},
|
identification = #{record.identification,jdbcType=VARCHAR},
|
||||||
is_set = #{record.isSet,jdbcType=BIT},
|
is_set = #{record.isSet,jdbcType=BIT},
|
||||||
organization_id = #{record.organizationId,jdbcType=VARCHAR}
|
organization_id = #{record.organizationId,jdbcType=VARCHAR},
|
||||||
|
test_id = #{record.testId,jdbcType=VARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
</if>
|
</if>
|
||||||
|
@ -257,19 +269,23 @@
|
||||||
<if test="organizationId != null">
|
<if test="organizationId != null">
|
||||||
organization_id = #{organizationId,jdbcType=VARCHAR},
|
organization_id = #{organizationId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="testId != null">
|
||||||
|
test_id = #{testId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
</set>
|
</set>
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.MessageTask">
|
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.MessageTask">
|
||||||
update message_task
|
update message_task
|
||||||
set `type` = #{type,jdbcType=VARCHAR},
|
set `type` = #{type,jdbcType=VARCHAR},
|
||||||
event = #{event,jdbcType=VARCHAR},
|
event = #{event,jdbcType=VARCHAR},
|
||||||
user_id = #{userId,jdbcType=VARCHAR},
|
user_id = #{userId,jdbcType=VARCHAR},
|
||||||
task_type = #{taskType,jdbcType=VARCHAR},
|
task_type = #{taskType,jdbcType=VARCHAR},
|
||||||
webhook = #{webhook,jdbcType=VARCHAR},
|
webhook = #{webhook,jdbcType=VARCHAR},
|
||||||
identification = #{identification,jdbcType=VARCHAR},
|
identification = #{identification,jdbcType=VARCHAR},
|
||||||
is_set = #{isSet,jdbcType=BIT},
|
is_set = #{isSet,jdbcType=BIT},
|
||||||
organization_id = #{organizationId,jdbcType=VARCHAR}
|
organization_id = #{organizationId,jdbcType=VARCHAR},
|
||||||
|
test_id = #{testId,jdbcType=VARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
|
@ -1,9 +1,8 @@
|
||||||
package io.metersphere.notice.controller;
|
package io.metersphere.notice.controller;
|
||||||
|
|
||||||
import io.metersphere.notice.controller.request.MessageRequest;
|
import io.metersphere.notice.controller.request.MessageRequest;
|
||||||
import io.metersphere.notice.controller.request.NoticeRequest;
|
import io.metersphere.notice.domain.MessageDetail;
|
||||||
import io.metersphere.notice.domain.MessageSettingDetail;
|
import io.metersphere.notice.domain.MessageSettingDetail;
|
||||||
import io.metersphere.notice.domain.NoticeDetail;
|
|
||||||
import io.metersphere.notice.service.NoticeService;
|
import io.metersphere.notice.service.NoticeService;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@ -16,16 +15,6 @@ public class NoticeController {
|
||||||
@Resource
|
@Resource
|
||||||
private NoticeService noticeService;
|
private NoticeService noticeService;
|
||||||
|
|
||||||
@PostMapping("/save")
|
|
||||||
public void saveNotice(@RequestBody NoticeRequest noticeRequest) {
|
|
||||||
noticeService.saveNotice(noticeRequest);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/query/{testId}")
|
|
||||||
public List<NoticeDetail> queryNotice(@PathVariable String testId) {
|
|
||||||
return noticeService.queryNotice(testId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("save/message/task")
|
@PostMapping("save/message/task")
|
||||||
public void saveMessage(@RequestBody MessageRequest messageRequest) {
|
public void saveMessage(@RequestBody MessageRequest messageRequest) {
|
||||||
noticeService.saveMessageTask(messageRequest);
|
noticeService.saveMessageTask(messageRequest);
|
||||||
|
@ -36,6 +25,11 @@ public class NoticeController {
|
||||||
return noticeService.searchMessage();
|
return noticeService.searchMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/search/message/{testId}")
|
||||||
|
public List<MessageDetail> searchMessageSchedule(@PathVariable String testId) {
|
||||||
|
return noticeService.searchMessageSchedule(testId);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/delete/message/{identification}")
|
@GetMapping("/delete/message/{identification}")
|
||||||
public int deleteMessage(@PathVariable String identification) {
|
public int deleteMessage(@PathVariable String identification) {
|
||||||
return noticeService.delMessage(identification);
|
return noticeService.delMessage(identification);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package io.metersphere.notice.domain;
|
package io.metersphere.notice.domain;
|
||||||
|
|
||||||
import io.metersphere.base.domain.MessageTask;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -16,4 +15,5 @@ public class MessageDetail {
|
||||||
private String identification;
|
private String identification;
|
||||||
private String organizationId;
|
private String organizationId;
|
||||||
private Boolean isSet;
|
private Boolean isSet;
|
||||||
|
private String testId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.metersphere.notice.service;
|
package io.metersphere.notice.service;
|
||||||
|
|
||||||
import io.metersphere.base.domain.ApiTestReport;
|
import io.metersphere.base.domain.ApiTestReport;
|
||||||
import io.metersphere.base.domain.LoadTestWithBLOBs;
|
import io.metersphere.base.domain.LoadTestReportWithBLOBs;
|
||||||
import io.metersphere.base.domain.SystemParameter;
|
import io.metersphere.base.domain.SystemParameter;
|
||||||
import io.metersphere.base.domain.TestCaseWithBLOBs;
|
import io.metersphere.base.domain.TestCaseWithBLOBs;
|
||||||
import io.metersphere.commons.constants.APITestStatus;
|
import io.metersphere.commons.constants.APITestStatus;
|
||||||
|
@ -14,7 +14,6 @@ import io.metersphere.commons.utils.LogUtil;
|
||||||
import io.metersphere.dto.BaseSystemConfigDTO;
|
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||||
import io.metersphere.i18n.Translator;
|
import io.metersphere.i18n.Translator;
|
||||||
import io.metersphere.notice.domain.MessageDetail;
|
import io.metersphere.notice.domain.MessageDetail;
|
||||||
import io.metersphere.notice.domain.NoticeDetail;
|
|
||||||
import io.metersphere.notice.domain.UserDetail;
|
import io.metersphere.notice.domain.UserDetail;
|
||||||
import io.metersphere.service.SystemParameterService;
|
import io.metersphere.service.SystemParameterService;
|
||||||
import io.metersphere.service.UserService;
|
import io.metersphere.service.UserService;
|
||||||
|
@ -27,7 +26,6 @@ import org.apache.commons.collections4.MapUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.RegExUtils;
|
import org.apache.commons.lang3.RegExUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.mail.MailException;
|
|
||||||
import org.springframework.mail.javamail.JavaMailSenderImpl;
|
import org.springframework.mail.javamail.JavaMailSenderImpl;
|
||||||
import org.springframework.mail.javamail.MimeMessageHelper;
|
import org.springframework.mail.javamail.MimeMessageHelper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -49,32 +47,33 @@ public class MailService {
|
||||||
@Resource
|
@Resource
|
||||||
private SystemParameterService systemParameterService;
|
private SystemParameterService systemParameterService;
|
||||||
|
|
||||||
public void sendPerformanceNotification(List<NoticeDetail> noticeList, String status, LoadTestWithBLOBs loadTest, String id) {
|
//接口和性能测试
|
||||||
|
public void sendLoadNotification(MessageDetail messageDetail, LoadTestReportWithBLOBs loadTestReport, String eventType) {
|
||||||
|
List<String> userIds = new ArrayList<>();
|
||||||
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
||||||
Map<String, String> context = new HashMap<>();
|
Map<String, String> context = new HashMap<>();
|
||||||
context.put("title", "Performance" + Translator.get("timing_task_result_notification"));
|
context.put("title", "Performance" + Translator.get("timing_task_result_notification"));
|
||||||
context.put("testName", loadTest.getName());
|
context.put("testName", loadTestReport.getName());
|
||||||
context.put("id", id);
|
context.put("id", loadTestReport.getId());
|
||||||
context.put("type", "performance");
|
context.put("type", "performance");
|
||||||
context.put("url", baseSystemConfigDTO.getUrl());
|
context.put("url", baseSystemConfigDTO.getUrl());
|
||||||
String performanceTemplate = "";
|
String performanceTemplate = "";
|
||||||
try {
|
try {
|
||||||
if (StringUtils.equals(status, PerformanceTestStatus.Completed.name())) {
|
if (StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Completed.name())) {
|
||||||
performanceTemplate = IOUtils.toString(this.getClass().getResource("/mail/successPerformance.html"), StandardCharsets.UTF_8);
|
performanceTemplate = IOUtils.toString(this.getClass().getResource("/mail/PerformanceApiSuccessNotification.html"), StandardCharsets.UTF_8);
|
||||||
} else if (StringUtils.equals(status, PerformanceTestStatus.Error.name())) {
|
} else if (StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Error.name())) {
|
||||||
performanceTemplate = IOUtils.toString(this.getClass().getResource("/mail/failPerformance.html"), StandardCharsets.UTF_8);
|
performanceTemplate = IOUtils.toString(this.getClass().getResource("/mail/PerformanceFailedNotification.html"), StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
sendHtmlTimeTasks(noticeList, status, context, performanceTemplate);
|
sendApiOrLoadNotification(addresseeIdList(messageDetail, userIds, eventType), context, performanceTemplate, loadTestReport.getTriggerMode());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendApiNotification(MessageDetail messageDetail, ApiTestReport apiTestReport, String eventType) {
|
||||||
public void sendApiNotification(ApiTestReport apiTestReport, List<NoticeDetail> noticeList) {
|
List<String> userIds = new ArrayList<>();
|
||||||
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
||||||
Map<String, String> context = new HashMap<>();
|
Map<String, String> context = new HashMap<>();
|
||||||
context.put("title", "api" + Translator.get("timing_task_result_notification"));
|
|
||||||
context.put("testName", apiTestReport.getName());
|
context.put("testName", apiTestReport.getName());
|
||||||
context.put("type", "api");
|
context.put("type", "api");
|
||||||
context.put("url", baseSystemConfigDTO.getUrl());
|
context.put("url", baseSystemConfigDTO.getUrl());
|
||||||
|
@ -82,76 +81,63 @@ public class MailService {
|
||||||
String apiTemplate = "";
|
String apiTemplate = "";
|
||||||
try {
|
try {
|
||||||
if (StringUtils.equals(APITestStatus.Success.name(), apiTestReport.getStatus())) {
|
if (StringUtils.equals(APITestStatus.Success.name(), apiTestReport.getStatus())) {
|
||||||
apiTemplate = IOUtils.toString(this.getClass().getResource("/mail/success.html"), StandardCharsets.UTF_8);
|
apiTemplate = IOUtils.toString(this.getClass().getResource("/mail/ApiSuccessfulNotification.html"), StandardCharsets.UTF_8);
|
||||||
} else if (StringUtils.equals(APITestStatus.Error.name(), apiTestReport.getStatus())) {
|
} else if (StringUtils.equals(APITestStatus.Error.name(), apiTestReport.getStatus())) {
|
||||||
apiTemplate = IOUtils.toString(this.getClass().getResource("/mail/fail.html"), StandardCharsets.UTF_8);
|
apiTemplate = IOUtils.toString(this.getClass().getResource("/mail/ApiFailedNotification.html"), StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
sendHtmlTimeTasks(noticeList, apiTestReport.getStatus(), context, apiTemplate);
|
sendApiOrLoadNotification(addresseeIdList(messageDetail, userIds, eventType), context, apiTemplate, apiTestReport.getTriggerMode());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//jenkins
|
private void sendApiOrLoadNotification(List<String> userIds, Map<String, String> context, String Template, String type) throws MessagingException {
|
||||||
public void sendApiJenkinsNotification(String context, MessageDetail messageDetail) throws MessagingException {
|
if (CollectionUtils.isEmpty(userIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
JavaMailSenderImpl javaMailSender = getMailSender();
|
JavaMailSenderImpl javaMailSender = getMailSender();
|
||||||
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
||||||
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
||||||
helper.setFrom(javaMailSender.getUsername());
|
helper.setFrom(javaMailSender.getUsername());
|
||||||
helper.setSubject("MeterSphere平台" + Translator.get("task_notification"));
|
if (StringUtils.equals(type, NoticeConstants.API)) {
|
||||||
helper.setText(context);
|
helper.setSubject("MeterSphere平台" + Translator.get("task_notification"));
|
||||||
List<UserDetail> list = userService.queryTypeByIds(messageDetail.getUserIds());
|
}
|
||||||
List<String> EmailList = new ArrayList<>();
|
if (StringUtils.equals(type, NoticeConstants.SCHEDULE)) {
|
||||||
|
helper.setSubject("MeterSphere平台" + Translator.get("timing_task_notification"));
|
||||||
|
}
|
||||||
|
String[] users;
|
||||||
|
List<String> emails = new ArrayList<>();
|
||||||
|
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
||||||
list.forEach(u -> {
|
list.forEach(u -> {
|
||||||
EmailList.add(u.getEmail());
|
emails.add(u.getEmail());
|
||||||
});
|
});
|
||||||
helper.setTo(EmailList.toArray(new String[0]));
|
users = emails.toArray(new String[0]);
|
||||||
try {
|
helper.setText(getContent(Template, context), true);
|
||||||
javaMailSender.send(mimeMessage);
|
helper.setTo(users);
|
||||||
} catch (MailException e) {
|
javaMailSender.send(mimeMessage);
|
||||||
LogUtil.error(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendHtmlTimeTasks(List<NoticeDetail> noticeList, String status, Map<String, String> context, String template) throws MessagingException {
|
|
||||||
JavaMailSenderImpl javaMailSender = getMailSender();
|
|
||||||
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
|
||||||
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
|
||||||
helper.setFrom(javaMailSender.getUsername());
|
|
||||||
helper.setSubject(Translator.get("timing_task_result_notification"));
|
|
||||||
helper.setText(getContent(template, context), true);
|
|
||||||
helper.setTo(getRecipientEmail(noticeList, status));
|
|
||||||
try {
|
|
||||||
javaMailSender.send(mimeMessage);
|
|
||||||
} catch (MailException e) {
|
|
||||||
LogUtil.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//测试评审
|
//测试评审
|
||||||
|
|
||||||
public void sendEndNotice(MessageDetail messageDetail, List<String> userIds, SaveTestCaseReviewRequest reviewRequest, String eventType) {
|
public void sendEndNotice(MessageDetail messageDetail, List<String> userIds, SaveTestCaseReviewRequest reviewRequest, String eventType) {
|
||||||
Map<String, String> context = getReviewContext(reviewRequest);
|
Map<String, String> context = getReviewContext(reviewRequest);
|
||||||
try {
|
try {
|
||||||
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/end.html"), StandardCharsets.UTF_8);
|
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/ReviewEnd.html"), StandardCharsets.UTF_8);
|
||||||
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendDeleteNotice(MessageDetail messageDetail, List<String> userIds, SaveTestCaseReviewRequest reviewRequest, String eventType) {
|
public void sendDeleteNotice(MessageDetail messageDetail, List<String> userIds, SaveTestCaseReviewRequest reviewRequest, String eventType) {
|
||||||
Map<String, String> context = getReviewContext(reviewRequest);
|
Map<String, String> context = getReviewContext(reviewRequest);
|
||||||
try {
|
try {
|
||||||
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/deleteReview.html"), StandardCharsets.UTF_8);
|
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/ReviewDelete.html"), StandardCharsets.UTF_8);
|
||||||
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendCommentNotice(MessageDetail messageDetail, List<String> userIds, SaveCommentRequest request, TestCaseWithBLOBs testCaseWithBLOBs, String eventType) {
|
public void sendCommentNotice(MessageDetail messageDetail, List<String> userIds, SaveCommentRequest request, TestCaseWithBLOBs testCaseWithBLOBs, String eventType) {
|
||||||
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
||||||
Map<String, String> context = new HashMap<>();
|
Map<String, String> context = new HashMap<>();
|
||||||
|
@ -161,74 +147,139 @@ public class MailService {
|
||||||
context.put("url", baseSystemConfigDTO.getUrl());
|
context.put("url", baseSystemConfigDTO.getUrl());
|
||||||
context.put("id", testCaseWithBLOBs.getId());
|
context.put("id", testCaseWithBLOBs.getId());
|
||||||
try {
|
try {
|
||||||
String commentTemplate = IOUtils.toString(this.getClass().getResource("/mail/comment.html"), StandardCharsets.UTF_8);
|
String commentTemplate = IOUtils.toString(this.getClass().getResource("/mail/ReviewComments.html"), StandardCharsets.UTF_8);
|
||||||
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, commentTemplate);
|
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, commentTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*新建评审*/
|
|
||||||
public void sendReviewerNotice(MessageDetail messageDetail, List<String> userIds, SaveTestCaseReviewRequest reviewRequest, String eventType) {
|
public void sendReviewerNotice(MessageDetail messageDetail, List<String> userIds, SaveTestCaseReviewRequest reviewRequest, String eventType) {
|
||||||
Map<String, String> context = getReviewContext(reviewRequest);
|
Map<String, String> context = getReviewContext(reviewRequest);
|
||||||
try {
|
try {
|
||||||
String reviewerTemplate = IOUtils.toString(this.getClass().getResource("/mail/reviewer.html"), StandardCharsets.UTF_8);
|
String reviewerTemplate = IOUtils.toString(this.getClass().getResource("/mail/ReviewInitiate.html"), StandardCharsets.UTF_8);
|
||||||
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, reviewerTemplate);
|
sendReviewNotice(addresseeIdList(messageDetail, userIds, eventType), context, reviewerTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendReviewNotice(List<String> userIds, Map<String, String> context, String Template) throws MessagingException {
|
||||||
|
if (CollectionUtils.isEmpty(userIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JavaMailSenderImpl javaMailSender = getMailSender();
|
||||||
|
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
||||||
|
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
||||||
|
helper.setFrom(javaMailSender.getUsername());
|
||||||
|
helper.setSubject("MeterSphere平台" + Translator.get("test_review_task_notice"));
|
||||||
|
String[] users;
|
||||||
|
List<String> emails = new ArrayList<>();
|
||||||
|
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
||||||
|
list.forEach(u -> {
|
||||||
|
emails.add(u.getEmail());
|
||||||
|
});
|
||||||
|
users = emails.toArray(new String[0]);
|
||||||
|
helper.setText(getContent(Template, context), true);
|
||||||
|
helper.setTo(users);
|
||||||
|
if (users.length > 0) {
|
||||||
|
javaMailSender.send(mimeMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//测试计划
|
//测试计划
|
||||||
|
|
||||||
public void sendTestPlanStartNotice(MessageDetail messageDetail, List<String> userIds, AddTestPlanRequest testPlan, String eventType) {
|
public void sendTestPlanStartNotice(MessageDetail messageDetail, List<String> userIds, AddTestPlanRequest testPlan, String eventType) {
|
||||||
Map<String, String> context = getTestPlanContext(testPlan);
|
Map<String, String> context = getTestPlanContext(testPlan);
|
||||||
context.put("creator", testPlan.getCreator());
|
context.put("creator", testPlan.getCreator());
|
||||||
try {
|
try {
|
||||||
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/testPlanStart.html"), StandardCharsets.UTF_8);
|
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/TestPlanStart.html"), StandardCharsets.UTF_8);
|
||||||
sendTestPlanNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
sendTestPlanNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendTestPlanEndNotice(MessageDetail messageDetail, List<String> userIds, AddTestPlanRequest testPlan, String eventType) {
|
public void sendTestPlanEndNotice(MessageDetail messageDetail, List<String> userIds, AddTestPlanRequest testPlan, String eventType) {
|
||||||
Map<String, String> context = getTestPlanContext(testPlan);
|
Map<String, String> context = getTestPlanContext(testPlan);
|
||||||
context.put("creator", userIds.toString());
|
context.put("creator", userIds.toString());
|
||||||
try {
|
try {
|
||||||
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/testPlanEnd.html"), StandardCharsets.UTF_8);
|
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/TestPlanEnd.html"), StandardCharsets.UTF_8);
|
||||||
sendTestPlanNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
sendTestPlanNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendTestPlanDeleteNotice(MessageDetail messageDetail, List<String> userIds, AddTestPlanRequest testPlan, String eventType) {
|
public void sendTestPlanDeleteNotice(MessageDetail messageDetail, List<String> userIds, AddTestPlanRequest testPlan, String eventType) {
|
||||||
Map<String, String> context = getTestPlanContext(testPlan);
|
Map<String, String> context = getTestPlanContext(testPlan);
|
||||||
context.put("creator", userIds.toString());
|
context.put("creator", userIds.toString());
|
||||||
try {
|
try {
|
||||||
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/testPlanDelete.html"), StandardCharsets.UTF_8);
|
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/TestPlanDelete.html"), StandardCharsets.UTF_8);
|
||||||
sendTestPlanNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
sendTestPlanNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendTestPlanNotice(List<String> userIds, Map<String, String> context, String Template) throws MessagingException {
|
||||||
|
if (CollectionUtils.isEmpty(userIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JavaMailSenderImpl javaMailSender = getMailSender();
|
||||||
|
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
||||||
|
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
||||||
|
helper.setFrom(javaMailSender.getUsername());
|
||||||
|
helper.setSubject("MeterSphere平台" + Translator.get("test_plan_notification"));
|
||||||
|
String[] users;
|
||||||
|
List<String> emails = new ArrayList<>();
|
||||||
|
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
||||||
|
list.forEach(u -> {
|
||||||
|
emails.add(u.getEmail());
|
||||||
|
});
|
||||||
|
users = emails.toArray(new String[0]);
|
||||||
|
helper.setText(getContent(Template, context), true);
|
||||||
|
helper.setTo(users);
|
||||||
|
javaMailSender.send(mimeMessage);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//缺陷任务
|
//缺陷任务
|
||||||
public void sendIssuesNotice(MessageDetail messageDetail, List<String> userIds, IssuesRequest issuesRequest, String eventType, SessionUser user) {
|
public void sendIssuesNotice(MessageDetail messageDetail, List<String> userIds, IssuesRequest issuesRequest, String eventType, SessionUser user) {
|
||||||
Map<String, String> context = new HashMap<>();
|
Map<String, String> context = new HashMap<>();
|
||||||
context.put("issuesName", issuesRequest.getTitle());
|
context.put("issuesName", issuesRequest.getTitle());
|
||||||
context.put("creator", user.getName());
|
context.put("creator", user.getName());
|
||||||
try {
|
try {
|
||||||
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/issuesCreate.html"), StandardCharsets.UTF_8);
|
String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/IssuesCreate.html"), StandardCharsets.UTF_8);
|
||||||
sendIssuesNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
sendIssuesNotice(addresseeIdList(messageDetail, userIds, eventType), context, endTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e);
|
LogUtil.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendIssuesNotice(List<String> userIds, Map<String, String> context, String Template) throws MessagingException {
|
||||||
|
if (CollectionUtils.isEmpty(userIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JavaMailSenderImpl javaMailSender = getMailSender();
|
||||||
|
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
||||||
|
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
||||||
|
helper.setFrom(javaMailSender.getUsername());
|
||||||
|
helper.setSubject("MeterSphere平台" + Translator.get("task_defect_notification"));
|
||||||
|
String[] users;
|
||||||
|
List<String> emails = new ArrayList<>();
|
||||||
|
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
||||||
|
list.forEach(u -> {
|
||||||
|
emails.add(u.getEmail());
|
||||||
|
});
|
||||||
|
users = emails.toArray(new String[0]);
|
||||||
|
helper.setText(getContent(Template, context), true);
|
||||||
|
helper.setTo(users);
|
||||||
|
javaMailSender.send(mimeMessage);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//评审内容
|
||||||
private Map<String, String> getReviewContext(SaveTestCaseReviewRequest reviewRequest) {
|
private Map<String, String> getReviewContext(SaveTestCaseReviewRequest reviewRequest) {
|
||||||
Long startTime = reviewRequest.getCreateTime();
|
Long startTime = reviewRequest.getCreateTime();
|
||||||
Long endTime = reviewRequest.getEndTime();
|
Long endTime = reviewRequest.getEndTime();
|
||||||
|
@ -255,6 +306,7 @@ public class MailService {
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//计划内容
|
||||||
private Map<String, String> getTestPlanContext(AddTestPlanRequest testPlan) {
|
private Map<String, String> getTestPlanContext(AddTestPlanRequest testPlan) {
|
||||||
Long startTime = testPlan.getPlannedStartTime();
|
Long startTime = testPlan.getPlannedStartTime();
|
||||||
Long endTime = testPlan.getPlannedEndTime();
|
Long endTime = testPlan.getPlannedEndTime();
|
||||||
|
@ -280,72 +332,8 @@ public class MailService {
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendReviewNotice(List<String> userIds, Map<String, String> context, String Template) throws MessagingException {
|
|
||||||
if (CollectionUtils.isEmpty(userIds)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JavaMailSenderImpl javaMailSender = getMailSender();
|
|
||||||
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
|
||||||
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
|
||||||
helper.setFrom(javaMailSender.getUsername());
|
|
||||||
helper.setSubject("MeterSphere平台" + Translator.get("test_review_task_notice"));
|
|
||||||
String[] users;
|
|
||||||
List<String> emails = new ArrayList<>();
|
|
||||||
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
|
||||||
list.forEach(u -> {
|
|
||||||
emails.add(u.getEmail());
|
|
||||||
});
|
|
||||||
users = emails.toArray(new String[0]);
|
|
||||||
helper.setText(getContent(Template, context), true);
|
|
||||||
helper.setTo(users);
|
|
||||||
if (users.length > 0) {
|
|
||||||
javaMailSender.send(mimeMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendTestPlanNotice(List<String> userIds, Map<String, String> context, String Template) throws MessagingException {
|
|
||||||
if (CollectionUtils.isEmpty(userIds)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JavaMailSenderImpl javaMailSender = getMailSender();
|
|
||||||
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
|
||||||
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
|
||||||
helper.setFrom(javaMailSender.getUsername());
|
|
||||||
helper.setSubject("MeterSphere平台" + Translator.get("test_plan_notification"));
|
|
||||||
String[] users;
|
|
||||||
List<String> emails = new ArrayList<>();
|
|
||||||
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
|
||||||
list.forEach(u -> {
|
|
||||||
emails.add(u.getEmail());
|
|
||||||
});
|
|
||||||
users = emails.toArray(new String[0]);
|
|
||||||
helper.setText(getContent(Template, context), true);
|
|
||||||
helper.setTo(users);
|
|
||||||
javaMailSender.send(mimeMessage);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendIssuesNotice(List<String> userIds, Map<String, String> context, String Template) throws MessagingException {
|
|
||||||
if (CollectionUtils.isEmpty(userIds)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JavaMailSenderImpl javaMailSender = getMailSender();
|
|
||||||
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
|
|
||||||
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
|
|
||||||
helper.setFrom(javaMailSender.getUsername());
|
|
||||||
helper.setSubject("MeterSphere平台" + Translator.get("task_defect_notification"));
|
|
||||||
String[] users;
|
|
||||||
List<String> emails = new ArrayList<>();
|
|
||||||
List<UserDetail> list = userService.queryTypeByIds(userIds);
|
|
||||||
list.forEach(u -> {
|
|
||||||
emails.add(u.getEmail());
|
|
||||||
});
|
|
||||||
users = emails.toArray(new String[0]);
|
|
||||||
helper.setText(getContent(Template, context), true);
|
|
||||||
helper.setTo(users);
|
|
||||||
javaMailSender.send(mimeMessage);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private JavaMailSenderImpl getMailSender() {
|
private JavaMailSenderImpl getMailSender() {
|
||||||
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
|
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
|
||||||
|
@ -385,7 +373,7 @@ public class MailService {
|
||||||
for (String k : context.keySet()) {
|
for (String k : context.keySet()) {
|
||||||
if (StringUtils.isNotBlank(context.get(k))) {
|
if (StringUtils.isNotBlank(context.get(k))) {
|
||||||
template = RegExUtils.replaceAll(template, "\\$\\{" + k + "}", context.get(k));
|
template = RegExUtils.replaceAll(template, "\\$\\{" + k + "}", context.get(k));
|
||||||
}else{
|
} else {
|
||||||
template = RegExUtils.replaceAll(template, "\\$\\{" + k + "}", "");
|
template = RegExUtils.replaceAll(template, "\\$\\{" + k + "}", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -393,62 +381,32 @@ public class MailService {
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] getRecipientEmail(List<NoticeDetail> noticeList, String status) {
|
|
||||||
String[] recipientEmails;
|
|
||||||
List<String> successEmailList = new ArrayList<>();
|
|
||||||
List<String> failEmailList = new ArrayList<>();
|
|
||||||
if (noticeList.size() > 0) {
|
|
||||||
for (NoticeDetail n : noticeList) {
|
|
||||||
if (StringUtils.equals(n.getEnable(), "true") && StringUtils.equals(n.getEvent(), NoticeConstants.EXECUTE_SUCCESSFUL)) {
|
|
||||||
List<UserDetail> list = userService.queryTypeByIds(n.getUserIds());
|
|
||||||
list.forEach(u -> {
|
|
||||||
successEmailList.add(u.getEmail());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (StringUtils.equals(n.getEnable(), "true") && StringUtils.equals(n.getEvent(), NoticeConstants.EXECUTE_FAILED)) {
|
|
||||||
List<UserDetail> list = userService.queryTypeByIds(n.getUserIds());
|
|
||||||
list.forEach(u -> {
|
|
||||||
failEmailList.add(u.getEmail());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LogUtil.error("Recipient information is empty");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.equalsAny(status, PerformanceTestStatus.Completed.name(), APITestStatus.Success.name())) {
|
|
||||||
recipientEmails = successEmailList.toArray(new String[0]);
|
|
||||||
} else {
|
|
||||||
recipientEmails = failEmailList.toArray(new String[0]);
|
|
||||||
}
|
|
||||||
return recipientEmails;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> addresseeIdList(MessageDetail messageDetail, List<String> userIds, String eventType) {
|
private List<String> addresseeIdList(MessageDetail messageDetail, List<String> userIds, String eventType) {
|
||||||
List<String> addresseeIdList = new ArrayList<>();
|
List<String> addresseeIdList = new ArrayList<>();
|
||||||
if (StringUtils.equals(eventType, messageDetail.getEvent())) {
|
if (StringUtils.equals(eventType, messageDetail.getEvent())) {
|
||||||
messageDetail.getUserIds().forEach(u -> {
|
messageDetail.getUserIds().forEach(u -> {
|
||||||
if (!StringUtils.equals(NoticeConstants.EXECUTOR, u) && !StringUtils.equals(NoticeConstants.EXECUTOR, u) && !StringUtils.equals(NoticeConstants.MAINTAINER, u)) {
|
if (!StringUtils.equals(NoticeConstants.EXECUTOR, u) && !StringUtils.equals(NoticeConstants.EXECUTOR, u) && !StringUtils.equals(NoticeConstants.MAINTAINER, u)) {
|
||||||
addresseeIdList.add(u);
|
addresseeIdList.add(u);
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(NoticeConstants.CREATE, eventType) && StringUtils.equals(NoticeConstants.EXECUTOR, u)) {
|
if (StringUtils.equals(NoticeConstants.CREATE, eventType) && StringUtils.equals(NoticeConstants.EXECUTOR, u)) {
|
||||||
addresseeIdList.addAll(userIds);
|
addresseeIdList.addAll(userIds);
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(NoticeConstants.UPDATE, eventType) && StringUtils.equals(NoticeConstants.FOUNDER, u)) {
|
if (StringUtils.equals(NoticeConstants.UPDATE, eventType) && StringUtils.equals(NoticeConstants.FOUNDER, u)) {
|
||||||
addresseeIdList.addAll(userIds);
|
addresseeIdList.addAll(userIds);
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(NoticeConstants.DELETE, eventType) && StringUtils.equals(NoticeConstants.FOUNDER, u)) {
|
if (StringUtils.equals(NoticeConstants.DELETE, eventType) && StringUtils.equals(NoticeConstants.FOUNDER, u)) {
|
||||||
addresseeIdList.addAll(userIds);
|
addresseeIdList.addAll(userIds);
|
||||||
}
|
}
|
||||||
if (StringUtils.equals(NoticeConstants.COMMENT, eventType) && StringUtils.equals(NoticeConstants.MAINTAINER, u)) {
|
if (StringUtils.equals(NoticeConstants.COMMENT, eventType) && StringUtils.equals(NoticeConstants.MAINTAINER, u)) {
|
||||||
addresseeIdList.addAll(userIds);
|
addresseeIdList.addAll(userIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return addresseeIdList;
|
return addresseeIdList;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,19 +2,13 @@ package io.metersphere.notice.service;
|
||||||
|
|
||||||
import io.metersphere.base.domain.MessageTask;
|
import io.metersphere.base.domain.MessageTask;
|
||||||
import io.metersphere.base.domain.MessageTaskExample;
|
import io.metersphere.base.domain.MessageTaskExample;
|
||||||
import io.metersphere.base.domain.Notice;
|
|
||||||
import io.metersphere.base.domain.NoticeExample;
|
|
||||||
import io.metersphere.base.mapper.MessageTaskMapper;
|
import io.metersphere.base.mapper.MessageTaskMapper;
|
||||||
import io.metersphere.base.mapper.NoticeMapper;
|
|
||||||
import io.metersphere.commons.constants.NoticeConstants;
|
import io.metersphere.commons.constants.NoticeConstants;
|
||||||
import io.metersphere.commons.user.SessionUser;
|
import io.metersphere.commons.user.SessionUser;
|
||||||
import io.metersphere.commons.utils.SessionUtils;
|
import io.metersphere.commons.utils.SessionUtils;
|
||||||
import io.metersphere.notice.controller.request.MessageRequest;
|
import io.metersphere.notice.controller.request.MessageRequest;
|
||||||
import io.metersphere.notice.controller.request.NoticeRequest;
|
|
||||||
import io.metersphere.notice.domain.MessageDetail;
|
import io.metersphere.notice.domain.MessageDetail;
|
||||||
import io.metersphere.notice.domain.MessageSettingDetail;
|
import io.metersphere.notice.domain.MessageSettingDetail;
|
||||||
import io.metersphere.notice.domain.NoticeDetail;
|
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@ -22,79 +16,22 @@ import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static io.metersphere.commons.constants.NoticeConstants.EXECUTE_FAILED;
|
|
||||||
import static io.metersphere.commons.constants.NoticeConstants.EXECUTE_SUCCESSFUL;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public class NoticeService {
|
public class NoticeService {
|
||||||
@Resource
|
|
||||||
private NoticeMapper noticeMapper;
|
|
||||||
@Resource
|
@Resource
|
||||||
private MessageTaskMapper messageTaskMapper;
|
private MessageTaskMapper messageTaskMapper;
|
||||||
|
|
||||||
public void saveNotice(NoticeRequest noticeRequest) {
|
|
||||||
NoticeExample example = new NoticeExample();
|
|
||||||
example.createCriteria().andTestIdEqualTo(noticeRequest.getTestId());
|
|
||||||
List<Notice> notices = noticeMapper.selectByExample(example);
|
|
||||||
if (notices.size() > 0) {
|
|
||||||
noticeMapper.deleteByExample(example);
|
|
||||||
}
|
|
||||||
noticeRequest.getNotices().forEach(n -> {
|
|
||||||
if (CollectionUtils.isNotEmpty(n.getUserIds())) {
|
|
||||||
for (String x : n.getUserIds()) {
|
|
||||||
Notice notice = new Notice();
|
|
||||||
notice.setId(UUID.randomUUID().toString());
|
|
||||||
notice.setEvent(n.getEvent());
|
|
||||||
notice.setEnable(n.getEnable());
|
|
||||||
notice.setTestId(noticeRequest.getTestId());
|
|
||||||
notice.setUserId(x);
|
|
||||||
notice.setType(n.getType());
|
|
||||||
noticeMapper.insert(notice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<NoticeDetail> queryNotice(String id) {
|
|
||||||
NoticeExample example = new NoticeExample();
|
|
||||||
example.createCriteria().andTestIdEqualTo(id);
|
|
||||||
List<Notice> notices = noticeMapper.selectByExample(example);
|
|
||||||
List<NoticeDetail> result = new ArrayList<>();
|
|
||||||
List<String> successList = new ArrayList<>();
|
|
||||||
List<String> failList = new ArrayList<>();
|
|
||||||
NoticeDetail notice1 = new NoticeDetail();
|
|
||||||
NoticeDetail notice2 = new NoticeDetail();
|
|
||||||
if (notices.size() > 0) {
|
|
||||||
for (Notice n : notices) {
|
|
||||||
if (n.getEvent().equals(EXECUTE_SUCCESSFUL)) {
|
|
||||||
successList.add(n.getUserId());
|
|
||||||
notice1.setEnable(n.getEnable());
|
|
||||||
notice1.setTestId(id);
|
|
||||||
notice1.setType(n.getType());
|
|
||||||
notice1.setEvent(n.getEvent());
|
|
||||||
}
|
|
||||||
if (n.getEvent().equals(EXECUTE_FAILED)) {
|
|
||||||
failList.add(n.getUserId());
|
|
||||||
notice2.setEnable(n.getEnable());
|
|
||||||
notice2.setTestId(id);
|
|
||||||
notice2.setType(n.getType());
|
|
||||||
notice2.setEvent(n.getEvent());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
notice1.setUserIds(successList);
|
|
||||||
notice2.setUserIds(failList);
|
|
||||||
result.add(notice1);
|
|
||||||
result.add(notice2);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveMessageTask(MessageRequest messageRequest) {
|
public void saveMessageTask(MessageRequest messageRequest) {
|
||||||
String identification = UUID.randomUUID().toString();
|
|
||||||
SessionUser user = SessionUtils.getUser();
|
SessionUser user = SessionUtils.getUser();
|
||||||
String orgId = user.getLastOrganizationId();
|
String orgId = user.getLastOrganizationId();
|
||||||
messageRequest.getMessageDetail().forEach(list -> {
|
messageRequest.getMessageDetail().forEach(list -> {
|
||||||
|
MessageTaskExample example = new MessageTaskExample();
|
||||||
|
example.createCriteria().andIdentificationEqualTo(list.getIdentification());
|
||||||
|
List<MessageTask> messageTaskLists = messageTaskMapper.selectByExample(example);
|
||||||
|
if (messageTaskLists.size() > 0) {
|
||||||
|
delMessage(list.getIdentification());
|
||||||
|
String identification = UUID.randomUUID().toString();
|
||||||
list.getUserIds().forEach(m -> {
|
list.getUserIds().forEach(m -> {
|
||||||
MessageTask message = new MessageTask();
|
MessageTask message = new MessageTask();
|
||||||
message.setId(UUID.randomUUID().toString());
|
message.setId(UUID.randomUUID().toString());
|
||||||
|
@ -106,9 +43,52 @@ public class NoticeService {
|
||||||
message.setIdentification(identification);
|
message.setIdentification(identification);
|
||||||
message.setIsSet(list.getIsSet());
|
message.setIsSet(list.getIsSet());
|
||||||
message.setOrganizationId(orgId);
|
message.setOrganizationId(orgId);
|
||||||
|
message.setTestId(list.getTestId());
|
||||||
messageTaskMapper.insert(message);
|
messageTaskMapper.insert(message);
|
||||||
});
|
});
|
||||||
});
|
} else {
|
||||||
|
String identification = UUID.randomUUID().toString();
|
||||||
|
list.getUserIds().forEach(m -> {
|
||||||
|
MessageTask message = new MessageTask();
|
||||||
|
message.setId(UUID.randomUUID().toString());
|
||||||
|
message.setEvent(list.getEvent());
|
||||||
|
message.setTaskType(list.getTaskType());
|
||||||
|
message.setUserId(m);
|
||||||
|
message.setType(list.getType());
|
||||||
|
message.setWebhook(list.getWebhook());
|
||||||
|
message.setIdentification(identification);
|
||||||
|
message.setIsSet(list.getIsSet());
|
||||||
|
message.setOrganizationId(orgId);
|
||||||
|
message.setTestId(list.getTestId());
|
||||||
|
messageTaskMapper.insert(message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageDetail> searchMessageSchedule(String testId) {
|
||||||
|
MessageTaskExample example = new MessageTaskExample();
|
||||||
|
example.createCriteria().andTestIdEqualTo(testId);
|
||||||
|
List<MessageTask> messageTaskLists = messageTaskMapper.selectByExample(example);
|
||||||
|
List<MessageDetail> scheduleMessageTask = new ArrayList<>();
|
||||||
|
Map<String, List<MessageTask>> MessageTaskMap = messageTaskLists.stream().collect(Collectors.groupingBy(e -> e.getIdentification()));
|
||||||
|
MessageTaskMap.forEach((k, v) -> {
|
||||||
|
Set userIds = new HashSet();
|
||||||
|
MessageDetail messageDetail = new MessageDetail();
|
||||||
|
for (MessageTask m : v) {
|
||||||
|
userIds.add(m.getUserId());
|
||||||
|
messageDetail.setEvent(m.getEvent());
|
||||||
|
messageDetail.setTaskType(m.getTaskType());
|
||||||
|
messageDetail.setWebhook(m.getWebhook());
|
||||||
|
messageDetail.setIdentification(m.getIdentification());
|
||||||
|
messageDetail.setType(m.getType());
|
||||||
|
messageDetail.setIsSet(m.getIsSet());
|
||||||
|
}
|
||||||
|
messageDetail.setUserIds(new ArrayList(userIds));
|
||||||
|
scheduleMessageTask.add(messageDetail);
|
||||||
|
});
|
||||||
|
return scheduleMessageTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageSettingDetail searchMessage() {
|
public MessageSettingDetail searchMessage() {
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
package io.metersphere.performance.notice;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.LoadTestReportWithBLOBs;
|
||||||
|
import io.metersphere.commons.constants.NoticeConstants;
|
||||||
|
import io.metersphere.commons.constants.PerformanceTestStatus;
|
||||||
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||||
|
import io.metersphere.notice.domain.MessageDetail;
|
||||||
|
import io.metersphere.notice.domain.MessageSettingDetail;
|
||||||
|
import io.metersphere.notice.service.DingTaskService;
|
||||||
|
import io.metersphere.notice.service.MailService;
|
||||||
|
import io.metersphere.notice.service.NoticeService;
|
||||||
|
import io.metersphere.notice.service.WxChatTaskService;
|
||||||
|
import io.metersphere.service.SystemParameterService;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PreDestroy;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class PerformanceNoticeTask {
|
||||||
|
@Resource
|
||||||
|
private NoticeService noticeService;
|
||||||
|
@Resource
|
||||||
|
private DingTaskService dingTaskService;
|
||||||
|
@Resource
|
||||||
|
private WxChatTaskService wxChatTaskService;
|
||||||
|
@Resource
|
||||||
|
private MailService mailService;
|
||||||
|
@Resource
|
||||||
|
private SystemParameterService systemParameterService;
|
||||||
|
private final ExecutorService executorService = Executors.newFixedThreadPool(20);
|
||||||
|
private boolean isRunning = true;
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
public void preDestroy() {
|
||||||
|
isRunning = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerNoticeTask(LoadTestReportWithBLOBs loadTestReport) {
|
||||||
|
executorService.submit(() -> {
|
||||||
|
while (isRunning) {
|
||||||
|
if (StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Completed.name())) {
|
||||||
|
isRunning = false;
|
||||||
|
sendSuccessNotice(loadTestReport);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Error.name())) {
|
||||||
|
isRunning = false;
|
||||||
|
sendFailNotice(loadTestReport);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000 * 60);// 每分钟检查 loadtest 的状态
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
LogUtil.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendSuccessNotice(LoadTestReportWithBLOBs loadTestReport) {
|
||||||
|
List<String> userIds = new ArrayList<>();
|
||||||
|
List<MessageDetail> taskList = new ArrayList<>();
|
||||||
|
String successContext = "";
|
||||||
|
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
||||||
|
String url = baseSystemConfigDTO.getUrl() + "/#/performance/report/view/" + loadTestReport.getId();
|
||||||
|
if (StringUtils.equals(NoticeConstants.API, loadTestReport.getTriggerMode())) {
|
||||||
|
MessageSettingDetail messageSettingDetail = noticeService.searchMessage();
|
||||||
|
taskList = messageSettingDetail.getJenkinsTask();
|
||||||
|
successContext = "jenkins性能测试任务通知" + loadTestReport.getName() + "执行成功" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
}
|
||||||
|
if (StringUtils.equals(NoticeConstants.SCHEDULE, loadTestReport.getTriggerMode())) {
|
||||||
|
taskList = noticeService.searchMessageSchedule(loadTestReport.getId());
|
||||||
|
successContext = "定时任务性能测试任务通知" + loadTestReport.getName() + "执行成功" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
}
|
||||||
|
String finalSuccessContext = successContext;
|
||||||
|
taskList.forEach(r -> {
|
||||||
|
switch (r.getType()) {
|
||||||
|
case NoticeConstants.NAIL_ROBOT:
|
||||||
|
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Completed.name())) {
|
||||||
|
dingTaskService.sendNailRobot(r, userIds, finalSuccessContext, NoticeConstants.EXECUTE_SUCCESSFUL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NoticeConstants.WECHAT_ROBOT:
|
||||||
|
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Completed.name())) {
|
||||||
|
wxChatTaskService.sendWechatRobot(r, userIds, finalSuccessContext, NoticeConstants.EXECUTE_SUCCESSFUL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NoticeConstants.EMAIL:
|
||||||
|
if (StringUtils.equals(NoticeConstants.EXECUTE_SUCCESSFUL, r.getEvent()) && StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Completed.name())) {
|
||||||
|
mailService.sendLoadNotification(r, loadTestReport, NoticeConstants.EXECUTE_SUCCESSFUL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sendFailNotice(LoadTestReportWithBLOBs loadTestReport) {
|
||||||
|
List<String> userIds = new ArrayList<>();
|
||||||
|
List<MessageDetail> taskList = new ArrayList<>();
|
||||||
|
String failedContext = "";
|
||||||
|
BaseSystemConfigDTO baseSystemConfigDTO = systemParameterService.getBaseInfo();
|
||||||
|
String url = baseSystemConfigDTO.getUrl() + "/#/performance/report/view/" + loadTestReport.getId();
|
||||||
|
if (StringUtils.equals(NoticeConstants.API, loadTestReport.getTriggerMode())) {
|
||||||
|
MessageSettingDetail messageSettingDetail = noticeService.searchMessage();
|
||||||
|
taskList = messageSettingDetail.getJenkinsTask();
|
||||||
|
failedContext = "jenkins性能测试任务通知" + loadTestReport.getName() + "执行失败" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
}
|
||||||
|
if (StringUtils.equals(NoticeConstants.SCHEDULE, loadTestReport.getTriggerMode())) {
|
||||||
|
taskList = noticeService.searchMessageSchedule(loadTestReport.getId());
|
||||||
|
failedContext = "定时任务性能测试任务通知" + loadTestReport.getName() + "执行失败" + "请点击下面链接进入测试报告页面" + url;
|
||||||
|
}
|
||||||
|
String finalFailedContext = failedContext;
|
||||||
|
taskList.forEach(r -> {
|
||||||
|
switch (r.getType()) {
|
||||||
|
case NoticeConstants.NAIL_ROBOT:
|
||||||
|
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Error.name())) {
|
||||||
|
dingTaskService.sendNailRobot(r, userIds, finalFailedContext, NoticeConstants.EXECUTE_FAILED);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NoticeConstants.WECHAT_ROBOT:
|
||||||
|
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Error.name())) {
|
||||||
|
wxChatTaskService.sendWechatRobot(r, userIds, finalFailedContext, NoticeConstants.EXECUTE_FAILED);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NoticeConstants.EMAIL:
|
||||||
|
if (StringUtils.equals(NoticeConstants.EXECUTE_FAILED, r.getEvent()) && StringUtils.equals(loadTestReport.getStatus(), PerformanceTestStatus.Error.name())) {
|
||||||
|
mailService.sendLoadNotification(r, loadTestReport, NoticeConstants.EXECUTE_FAILED);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -24,10 +24,10 @@ import io.metersphere.notice.service.MailService;
|
||||||
import io.metersphere.notice.service.NoticeService;
|
import io.metersphere.notice.service.NoticeService;
|
||||||
import io.metersphere.performance.engine.Engine;
|
import io.metersphere.performance.engine.Engine;
|
||||||
import io.metersphere.performance.engine.EngineFactory;
|
import io.metersphere.performance.engine.EngineFactory;
|
||||||
|
import io.metersphere.performance.notice.PerformanceNoticeTask;
|
||||||
import io.metersphere.service.FileService;
|
import io.metersphere.service.FileService;
|
||||||
import io.metersphere.service.QuotaService;
|
import io.metersphere.service.QuotaService;
|
||||||
import io.metersphere.service.ScheduleService;
|
import io.metersphere.service.ScheduleService;
|
||||||
import io.metersphere.service.TestResourceService;
|
|
||||||
import io.metersphere.track.request.testplan.*;
|
import io.metersphere.track.request.testplan.*;
|
||||||
import io.metersphere.track.service.TestCaseService;
|
import io.metersphere.track.service.TestCaseService;
|
||||||
import org.apache.commons.collections4.ListUtils;
|
import org.apache.commons.collections4.ListUtils;
|
||||||
|
@ -68,25 +68,21 @@ public class PerformanceTestService {
|
||||||
@Resource
|
@Resource
|
||||||
private ExtLoadTestReportDetailMapper extLoadTestReportDetailMapper;
|
private ExtLoadTestReportDetailMapper extLoadTestReportDetailMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private LoadTestReportLogMapper loadTestReportLogMapper;
|
|
||||||
@Resource
|
|
||||||
private LoadTestReportResultMapper loadTestReportResultMapper;
|
private LoadTestReportResultMapper loadTestReportResultMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private TestResourceService testResourceService;
|
|
||||||
@Resource
|
|
||||||
private ReportService reportService;
|
private ReportService reportService;
|
||||||
@Resource
|
@Resource
|
||||||
private KafkaProperties kafkaProperties;
|
private KafkaProperties kafkaProperties;
|
||||||
@Resource
|
@Resource
|
||||||
private ScheduleService scheduleService;
|
private ScheduleService scheduleService;
|
||||||
@Resource
|
@Resource
|
||||||
private TestCaseMapper testCaseMapper;
|
|
||||||
@Resource
|
|
||||||
private TestCaseService testCaseService;
|
private TestCaseService testCaseService;
|
||||||
@Resource
|
@Resource
|
||||||
private NoticeService noticeService;
|
private NoticeService noticeService;
|
||||||
@Resource
|
@Resource
|
||||||
private MailService mailService;
|
private MailService mailService;
|
||||||
|
@Resource
|
||||||
|
private PerformanceNoticeTask performanceNoticeTask;
|
||||||
|
|
||||||
public List<LoadTestDTO> list(QueryTestPlanRequest request) {
|
public List<LoadTestDTO> list(QueryTestPlanRequest request) {
|
||||||
request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders()));
|
request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders()));
|
||||||
|
@ -238,14 +234,10 @@ public class PerformanceTestService {
|
||||||
}
|
}
|
||||||
|
|
||||||
startEngine(loadTest, engine, request.getTriggerMode());
|
startEngine(loadTest, engine, request.getTriggerMode());
|
||||||
List<NoticeDetail> noticeList = null;
|
|
||||||
if (request.getTriggerMode().equals("SCHEDULE")) {
|
LoadTestReportWithBLOBs loadTestReport = loadTestReportMapper.selectByPrimaryKey(engine.getReportId());
|
||||||
try {
|
if (StringUtils.equals(NoticeConstants.API, loadTestReport.getTriggerMode()) || StringUtils.equals(NoticeConstants.SCHEDULE, loadTestReport.getTriggerMode())) {
|
||||||
noticeList = noticeService.queryNotice(loadTest.getId());
|
performanceNoticeTask.registerNoticeTask(loadTestReport);
|
||||||
mailService.sendPerformanceNotification(noticeList, PerformanceTestStatus.Completed.name(), loadTest, engine.getReportId());
|
|
||||||
} catch (Exception e) {
|
|
||||||
LogUtil.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return engine.getReportId();
|
return engine.getReportId();
|
||||||
}
|
}
|
||||||
|
@ -319,9 +311,9 @@ public class PerformanceTestService {
|
||||||
loadTest.setStatus(PerformanceTestStatus.Error.name());
|
loadTest.setStatus(PerformanceTestStatus.Error.name());
|
||||||
loadTest.setDescription(e.getMessage());
|
loadTest.setDescription(e.getMessage());
|
||||||
loadTestMapper.updateByPrimaryKeySelective(loadTest);
|
loadTestMapper.updateByPrimaryKeySelective(loadTest);
|
||||||
if (triggerMode.equals("SCHEDULE")) {
|
LoadTestReportWithBLOBs loadTestReport = loadTestReportMapper.selectByPrimaryKey(engine.getReportId());
|
||||||
noticeList = noticeService.queryNotice(loadTest.getId());
|
if (StringUtils.equals(NoticeConstants.API, loadTestReport.getTriggerMode()) || StringUtils.equals(NoticeConstants.SCHEDULE, loadTestReport.getTriggerMode())) {
|
||||||
mailService.sendPerformanceNotification(noticeList, loadTest.getStatus(), loadTest, loadTest.getId());
|
performanceNoticeTask.registerNoticeTask(loadTestReport);
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
@ -447,12 +439,12 @@ public class PerformanceTestService {
|
||||||
reportService.updateStatus(reportId, PerformanceTestStatus.Completed.name());
|
reportService.updateStatus(reportId, PerformanceTestStatus.Completed.name());
|
||||||
List<NoticeDetail> noticeList = null;
|
List<NoticeDetail> noticeList = null;
|
||||||
if (loadTestReport.getTriggerMode().equals("SCHEDULE")) {
|
if (loadTestReport.getTriggerMode().equals("SCHEDULE")) {
|
||||||
try {
|
/* try {
|
||||||
noticeList = noticeService.queryNotice(loadTest.getId());
|
noticeList = noticeService.queryNotice(loadTest.getId());
|
||||||
mailService.sendPerformanceNotification(noticeList, loadTestReport.getStatus(), loadTest, loadTestReport.getId());
|
mailService.sendPerformanceNotification(noticeList, loadTestReport.getStatus(), loadTest, loadTestReport.getId());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtil.error(e.getMessage(), e);
|
LogUtil.error(e.getMessage(), e);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
alter table message_task
|
||||||
|
add test_id varchar(255) null;
|
|
@ -155,7 +155,6 @@ email_subject=Metersphere timing task result notification
|
||||||
import_xmind_count_error=The number of use cases imported into the mind map cannot exceed 500
|
import_xmind_count_error=The number of use cases imported into the mind map cannot exceed 500
|
||||||
import_xmind_not_found=Test case not found
|
import_xmind_not_found=Test case not found
|
||||||
license_valid_license_error=Authorization authentication failed
|
license_valid_license_error=Authorization authentication failed
|
||||||
timing_task_result_notification=Timing task result notification
|
|
||||||
test_review_task_notice=Test review task notice
|
test_review_task_notice=Test review task notice
|
||||||
test_track.length_less_than=The title is too long, the length must be less than
|
test_track.length_less_than=The title is too long, the length must be less than
|
||||||
# check owner
|
# check owner
|
||||||
|
@ -169,6 +168,7 @@ upload_content_is_null=Imported content is empty
|
||||||
test_plan_notification=Test plan notification
|
test_plan_notification=Test plan notification
|
||||||
task_defect_notification=Task defect notification
|
task_defect_notification=Task defect notification
|
||||||
task_notification=Jenkins Task notification
|
task_notification=Jenkins Task notification
|
||||||
|
timing_task_notification=Timing task result notification
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,7 @@ email_subject=MeterSphere定时任务结果通知
|
||||||
import_xmind_count_error=思维导图导入用例数量不能超过 500 条
|
import_xmind_count_error=思维导图导入用例数量不能超过 500 条
|
||||||
license_valid_license_error=授权认证失败
|
license_valid_license_error=授权认证失败
|
||||||
import_xmind_not_found=未找到测试用例
|
import_xmind_not_found=未找到测试用例
|
||||||
timing_task_result_notification=定时任务结果通知
|
|
||||||
test_review_task_notice=测试评审任务通知
|
test_review_task_notice=测试评审任务通知
|
||||||
test_track.length_less_than=标题过长,字数必须小于
|
test_track.length_less_than=标题过长,字数必须小于
|
||||||
# check owner
|
# check owner
|
||||||
|
@ -168,4 +168,5 @@ check_owner_comment=当前用户没有操作此评论的权限
|
||||||
upload_content_is_null=导入内容为空
|
upload_content_is_null=导入内容为空
|
||||||
test_plan_notification=测试计划通知
|
test_plan_notification=测试计划通知
|
||||||
task_defect_notification=缺陷任务通知
|
task_defect_notification=缺陷任务通知
|
||||||
task_notification=jenkins任务通知
|
task_notification=jenkins任务通知
|
||||||
|
timing_task_notification=定时任务结果通知
|
|
@ -156,7 +156,7 @@ license_valid_license_code=授權碼已經存在
|
||||||
email_subject=MeterSphere定時任務結果通知
|
email_subject=MeterSphere定時任務結果通知
|
||||||
import_xmind_count_error=思維導圖導入用例數量不能超過 500 條
|
import_xmind_count_error=思維導圖導入用例數量不能超過 500 條
|
||||||
import_xmind_not_found=未找到测试用例
|
import_xmind_not_found=未找到测试用例
|
||||||
timing_task_result_notification=定時任務結果通知
|
|
||||||
test_review_task_notice=測試評審任務通知
|
test_review_task_notice=測試評審任務通知
|
||||||
test_track.length_less_than=標題過長,字數必須小於
|
test_track.length_less_than=標題過長,字數必須小於
|
||||||
# check owner
|
# check owner
|
||||||
|
@ -170,4 +170,5 @@ upload_content_is_null=導入內容為空
|
||||||
test_plan_notification=測試計畫通知
|
test_plan_notification=測試計畫通知
|
||||||
task_defect_notification=缺陷任務通知
|
task_defect_notification=缺陷任務通知
|
||||||
task_notification=jenkins任務通知
|
task_notification=jenkins任務通知
|
||||||
|
timing_task_notification=定時任務通知
|
||||||
|
|
||||||
|
|
|
@ -6,15 +6,12 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<div style="text-align: left">
|
|
||||||
<h3>${title}</h3>
|
|
||||||
</div>
|
|
||||||
<div style="text-align: left">
|
<div style="text-align: left">
|
||||||
<p>尊敬的用户:</p>
|
<p>尊敬的用户:</p>
|
||||||
<p style="margin-left: 60px">您好:
|
<p style="margin-left: 60px">您好:
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-left: 100px">
|
<div style="margin-left: 100px">
|
||||||
<p>您所执行的 ${testName} 运行失败<br/>
|
<p>您所执行的 ${testName} 接口测试运行失败<br/>
|
||||||
请点击下面链接进入测试报告页面</p>
|
请点击下面链接进入测试报告页面</p>
|
||||||
<a href="${url}/#/${type}/report/view/${id}">${url}/#/${type}/report/view/${id}</a>
|
<a href="${url}/#/${type}/report/view/${id}">${url}/#/${type}/report/view/${id}</a>
|
||||||
</div>
|
</div>
|
|
@ -13,7 +13,7 @@
|
||||||
<p style="margin-left: 60px">您好:
|
<p style="margin-left: 60px">您好:
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-left: 100px">
|
<div style="margin-left: 100px">
|
||||||
<p>您所执行的 ${testName} 运行成功<br/>
|
<p>您所执行的 ${testName} 接口测试运行成功<br/>
|
||||||
请点击下面链接进入测试报告页面</p>
|
请点击下面链接进入测试报告页面</p>
|
||||||
<a href="${url}/#/${type}/report/view/${id}">${url}/#/${type}/report/view/${id}</a>
|
<a href="${url}/#/${type}/report/view/${id}">${url}/#/${type}/report/view/${id}</a>
|
||||||
</div>
|
</div>
|
|
@ -5,9 +5,6 @@
|
||||||
<title>MeterSphere</title>
|
<title>MeterSphere</title>
|
||||||
</head>
|
</head>
|
||||||
<body style="text-align: left">
|
<body style="text-align: left">
|
||||||
<div style="text-align: left">
|
|
||||||
<h3>${title}</h3>
|
|
||||||
</div>
|
|
||||||
<div style="text-align: left">
|
<div style="text-align: left">
|
||||||
<p>尊敬的用户:</p>
|
<p>尊敬的用户:</p>
|
||||||
<p style="margin-left: 60px">您好:
|
<p style="margin-left: 60px">您好:
|
|
@ -6,9 +6,6 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<div style="text-align: left">
|
|
||||||
<h3>${title}</h3>
|
|
||||||
</div>
|
|
||||||
<div style="text-align: left">
|
<div style="text-align: left">
|
||||||
<p>尊敬的用户:</p>
|
<p>尊敬的用户:</p>
|
||||||
<p style="margin-left: 60px">您好:
|
<p style="margin-left: 60px">您好:
|
|
@ -3,7 +3,7 @@
|
||||||
@close="close">
|
@close="close">
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
<el-tabs v-model="activeName">
|
||||||
|
|
||||||
<el-tab-pane :label="$t('schedule.edit_timer_task')" name="first">
|
<el-tab-pane :label="$t('schedule.edit_timer_task')" name="first">
|
||||||
<el-form :model="form" :rules="rules" ref="from">
|
<el-form :model="form" :rules="rules" ref="from">
|
||||||
|
@ -31,60 +31,7 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane :label="$t('schedule.task_notification')" name="second">
|
<el-tab-pane :label="$t('schedule.task_notification')" name="second">
|
||||||
<template>
|
<schedule-task-notification :test-id="testId" :schedule-receiver-options="scheduleReceiverOptions"></schedule-task-notification>
|
||||||
<el-table
|
|
||||||
:data="tableData"
|
|
||||||
style="width: 100%">
|
|
||||||
<el-table-column
|
|
||||||
prop="event"
|
|
||||||
:label="$t('schedule.event')">
|
|
||||||
<template v-slot:default="{row}">
|
|
||||||
<span v-if="row.event === 'EXECUTE_SUCCESSFUL'"> {{ $t('schedule.event_success') }}</span>
|
|
||||||
<span v-else-if="row.event === 'EXECUTE_FAILED'"> {{ $t('schedule.event_failed') }}</span>
|
|
||||||
<span v-else>{{ row.event }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
prop="name"
|
|
||||||
:label="$t('schedule.receiver')"
|
|
||||||
width="240"
|
|
||||||
>
|
|
||||||
<template v-slot:default="{row}">
|
|
||||||
<el-select v-model="row.userIds" filterable multiple
|
|
||||||
:placeholder="$t('commons.please_select')"
|
|
||||||
@click.native="userList()" style="width: 100%;">
|
|
||||||
<el-option
|
|
||||||
v-for="item in options"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
prop="type"
|
|
||||||
:label="$t('schedule.receiving_mode')"
|
|
||||||
>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('test_resource_pool.enable_disable')"
|
|
||||||
prop="enable"
|
|
||||||
>
|
|
||||||
<template v-slot:default="{row}">
|
|
||||||
<el-switch
|
|
||||||
v-model="row.enable"
|
|
||||||
active-value="true"
|
|
||||||
inactive-value="false"
|
|
||||||
inactive-color="#DCDFE6"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<div style="padding-top: 20px;">
|
|
||||||
<el-button type="primary" @click="saveNotice">{{ $t('commons.save') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
|
@ -93,19 +40,19 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import {getCurrentUser} from "@/common/js/utils";
|
||||||
import Crontab from "../cron/Crontab";
|
import Crontab from "../cron/Crontab";
|
||||||
import CrontabResult from "../cron/CrontabResult";
|
import CrontabResult from "../cron/CrontabResult";
|
||||||
import {cronValidate} from "@/common/js/cron";
|
import {cronValidate} from "@/common/js/cron";
|
||||||
import {listenGoBack, removeGoBackListener} from "@/common/js/utils";
|
import {listenGoBack, removeGoBackListener} from "@/common/js/utils";
|
||||||
|
import ScheduleTaskNotification from "../../settings/organization/components/ScheduleTaskNotification";
|
||||||
function defaultCustomValidate() {
|
function defaultCustomValidate() {
|
||||||
return {pass: true};
|
return {pass: true};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "MsScheduleEdit",
|
name: "MsScheduleEdit",
|
||||||
components: {CrontabResult, Crontab},
|
components: {CrontabResult, Crontab,ScheduleTaskNotification},
|
||||||
props: {
|
props: {
|
||||||
testId: String,
|
testId: String,
|
||||||
save: Function,
|
save: Function,
|
||||||
|
@ -144,29 +91,13 @@ export default {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
|
scheduleReceiverOptions:[],
|
||||||
operation: true,
|
operation: true,
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
showCron: false,
|
showCron: false,
|
||||||
form: {
|
form: {
|
||||||
cronValue: ""
|
cronValue: ""
|
||||||
},
|
},
|
||||||
tableData: [
|
|
||||||
{
|
|
||||||
event: "EXECUTE_SUCCESSFUL",
|
|
||||||
type: "EMAIL",
|
|
||||||
userIds: [],
|
|
||||||
enable: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
event: "EXECUTE_FAILED",
|
|
||||||
type: "EMAIL",
|
|
||||||
userIds: [],
|
|
||||||
enable: false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
options: [{}],
|
|
||||||
enable: true,
|
|
||||||
type: "",
|
|
||||||
activeName: 'first',
|
activeName: 'first',
|
||||||
rules: {
|
rules: {
|
||||||
cronValue: [{required: true, validator: validateCron, trigger: 'blur'}],
|
cronValue: [{required: true, validator: validateCron, trigger: 'blur'}],
|
||||||
|
@ -174,28 +105,26 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
userList() {
|
currentUser: () => {
|
||||||
this.result = this.$get('user/list', response => {
|
return getCurrentUser();
|
||||||
this.options = response.data
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
handleClick() {
|
initUserList() {
|
||||||
if (this.activeName === "second") {
|
let param = {
|
||||||
this.result = this.$get('notice/query/' + this.testId, response => {
|
name: '',
|
||||||
if (response.data.length > 0) {
|
organizationId: this.currentUser().lastOrganizationId
|
||||||
this.tableData = response.data
|
};
|
||||||
|
this.result = this.$post('user/org/member/list/all', param, response => {
|
||||||
|
this.scheduleReceiverOptions = response.data
|
||||||
|
|
||||||
this.tableData[0].event = "EXECUTE_SUCCESSFUL"
|
});
|
||||||
this.tableData[0].type = "EMAIL"
|
|
||||||
this.tableData[1].event = "EXECUTE_FAILED"
|
|
||||||
this.tableData[1].type = "EMAIL"
|
|
||||||
} else {
|
|
||||||
this.tableData[0].userIds = []
|
|
||||||
this.tableData[1].userIds = []
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
/* handleClick() {
|
||||||
|
if (this.activeName === "second") {
|
||||||
|
this.result = this.$get('/notice/search/message/'+this.testId, response => {
|
||||||
|
this.scheduleTask = response.data;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},*/
|
||||||
buildParam() {
|
buildParam() {
|
||||||
let param = {};
|
let param = {};
|
||||||
param.notices = this.tableData
|
param.notices = this.tableData
|
||||||
|
@ -203,10 +132,10 @@ export default {
|
||||||
return param;
|
return param;
|
||||||
},
|
},
|
||||||
open() {
|
open() {
|
||||||
|
this.initUserList();
|
||||||
this.dialogVisible = true;
|
this.dialogVisible = true;
|
||||||
this.form.cronValue = this.schedule.value;
|
this.form.cronValue = this.schedule.value;
|
||||||
listenGoBack(this.close);
|
listenGoBack(this.close);
|
||||||
this.handleClick()
|
|
||||||
this.activeName = 'first'
|
this.activeName = 'first'
|
||||||
},
|
},
|
||||||
crontabFill(value, resultList) {
|
crontabFill(value, resultList) {
|
||||||
|
|
|
@ -79,6 +79,12 @@
|
||||||
@click.native.prevent="removeRowTask(scope.$index,form.defectTask)"
|
@click.native.prevent="removeRowTask(scope.$index,form.defectTask)"
|
||||||
>{{ $t('commons.cancel') }}
|
>{{ $t('commons.cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-show="!scope.row.isSet"
|
||||||
|
@click="handleEditTask(scope.$index,scope.row)"
|
||||||
|
>{{ $t('commons.edit') }}</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-delete"
|
||||||
|
@ -141,6 +147,9 @@ export default {
|
||||||
data.isReadOnly = !data.isReadOnly
|
data.isReadOnly = !data.isReadOnly
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleEditTask(index,data){
|
||||||
|
data.isSet = true
|
||||||
|
},
|
||||||
handleAddTaskModel(type) {
|
handleAddTaskModel(type) {
|
||||||
let Task = {};
|
let Task = {};
|
||||||
Task.event = [];
|
Task.event = [];
|
||||||
|
|
|
@ -79,6 +79,13 @@
|
||||||
@click.native.prevent="removeRowTask(scope.$index,form.jenkinsTask)"
|
@click.native.prevent="removeRowTask(scope.$index,form.jenkinsTask)"
|
||||||
>{{ $t('commons.cancel') }}
|
>{{ $t('commons.cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-show="!scope.row.isSet"
|
||||||
|
@click="handleEditTask(scope.$index,scope.row)"
|
||||||
|
>{{ $t('commons.edit') }}
|
||||||
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-delete"
|
||||||
|
@ -168,7 +175,6 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleAddTask(index, data) {
|
handleAddTask(index, data) {
|
||||||
|
|
||||||
if (data.event && data.userIds.length > 0 && data.type) {
|
if (data.event && data.userIds.length > 0 && data.type) {
|
||||||
console.log(data.type)
|
console.log(data.type)
|
||||||
if (data.type === 'NAIL_ROBOT' || data.type === 'WECHAT_ROBOT') {
|
if (data.type === 'NAIL_ROBOT' || data.type === 'WECHAT_ROBOT') {
|
||||||
|
@ -184,6 +190,9 @@ export default {
|
||||||
this.$warning(this.$t('organization.message.message'));
|
this.$warning(this.$t('organization.message.message'));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleEditTask(index,data){
|
||||||
|
data.isSet = true
|
||||||
|
},
|
||||||
addTask(data) {
|
addTask(data) {
|
||||||
let list = []
|
let list = []
|
||||||
data.isSet = false
|
data.isSet = false
|
||||||
|
|
|
@ -0,0 +1,222 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="10">
|
||||||
|
<el-button icon="el-icon-circle-plus-outline" plain size="mini" @click="handleAddTaskModel('scheduleTask')">
|
||||||
|
{{ $t('organization.message.create_new_notification') }}
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-table
|
||||||
|
:data="form.scheduleTask"
|
||||||
|
class="tb-edit"
|
||||||
|
border
|
||||||
|
size="mini"
|
||||||
|
:cell-style="rowClass"
|
||||||
|
:header-cell-style="headClass">
|
||||||
|
<el-table-column :label="$t('schedule.event')" min-width="20%" prop="events">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-select v-model="scope.row.event"
|
||||||
|
:placeholder="$t('organization.message.select_events')"
|
||||||
|
prop="events" :disabled="!scope.row.isSet">
|
||||||
|
<el-option
|
||||||
|
v-for="item in scheduleEventOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column :label="$t('schedule.receiver')" prop="userIds" min-width="20%">
|
||||||
|
<template v-slot:default="{row}">
|
||||||
|
<el-select v-model="row.userIds" filterable multiple
|
||||||
|
:placeholder="$t('commons.please_select')" style="width: 100%;" :disabled="!row.isSet">
|
||||||
|
<el-option
|
||||||
|
v-for="item in scheduleReceiverOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column :label="$t('schedule.receiving_mode')" min-width="20%" prop="type">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-select v-model="scope.row.type" :placeholder="$t('organization.message.select_receiving_method')"
|
||||||
|
:disabled="!scope.row.isSet" @change="handleEdit(scope.$index, scope.row)"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in receiveTypeOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="webhook" min-width="20%" prop="webhook">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<el-input v-model="scope.row.webhook" placeholder="webhook地址"
|
||||||
|
:disabled="!scope.row.isSet||!scope.row.isReadOnly"></el-input>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column :label="$t('commons.operating')" min-width="20%" prop="result">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-show="scope.row.isSet"
|
||||||
|
@click="handleAddTask(scope.$index,scope.row)"
|
||||||
|
>{{ $t('commons.add') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
v-show="scope.row.isSet"
|
||||||
|
@click.native.prevent="removeRowTask(scope.$index,form.scheduleTask)"
|
||||||
|
>{{ $t('commons.cancel') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-show="!scope.row.isSet"
|
||||||
|
@click="handleEditTask(scope.$index,scope.row)"
|
||||||
|
>{{ $t('commons.edit') }}</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
v-show="!scope.row.isSet"
|
||||||
|
@click.native.prevent="deleteRowTask(scope.$index,scope.row)"
|
||||||
|
></el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "ScheduleTaskNotification",
|
||||||
|
props: {
|
||||||
|
testId:String,
|
||||||
|
scheduleReceiverOptions:Array,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
scheduleTask: [{
|
||||||
|
taskType: "scheduleTask",
|
||||||
|
event: "",
|
||||||
|
userIds: [],
|
||||||
|
type: [],
|
||||||
|
webhook: "",
|
||||||
|
isSet: true,
|
||||||
|
identification: "",
|
||||||
|
isReadOnly: false,
|
||||||
|
testId:this.testId,
|
||||||
|
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
scheduleEventOptions: [
|
||||||
|
{value: 'EXECUTE_SUCCESSFUL', label: this.$t('schedule.event_success')},
|
||||||
|
{value: 'EXECUTE_FAILED', label: this.$t('schedule.event_failed')}
|
||||||
|
],
|
||||||
|
receiveTypeOptions: [
|
||||||
|
{value: 'EMAIL', label: this.$t('organization.message.mail')},
|
||||||
|
{value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')},
|
||||||
|
{value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
this.initForm()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initForm(){
|
||||||
|
this.result = this.$get('/notice/search/message/'+this.testId, response => {
|
||||||
|
console.log(response.data);
|
||||||
|
this.form.scheduleTask = response.data;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleEdit(index, data) {
|
||||||
|
data.isReadOnly = true;
|
||||||
|
if (data.type === 'EMAIL') {
|
||||||
|
data.isReadOnly = !data.isReadOnly
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleAddTaskModel(type) {
|
||||||
|
let Task = {};
|
||||||
|
Task.event = [];
|
||||||
|
Task.userIds = [];
|
||||||
|
Task.type = "";
|
||||||
|
Task.webhook = "";
|
||||||
|
Task.isSet = true;
|
||||||
|
Task.identification = "";
|
||||||
|
if (type === 'scheduleTask') {
|
||||||
|
Task.taskType = 'SCHEDULE_TASK'
|
||||||
|
Task.testId=this.testId
|
||||||
|
this.form.scheduleTask.push(Task)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleEditTask(index,data){
|
||||||
|
data.isSet = true
|
||||||
|
data.testId=this.testId
|
||||||
|
},
|
||||||
|
handleAddTask(index, data) {
|
||||||
|
if (data.event && data.userIds.length > 0 && data.type) {
|
||||||
|
console.log(data.type)
|
||||||
|
if (data.type === 'NAIL_ROBOT' || data.type === 'WECHAT_ROBOT') {
|
||||||
|
if (!data.webhook) {
|
||||||
|
this.$warning(this.$t('organization.message.message_webhook'));
|
||||||
|
} else {
|
||||||
|
this.addTask(data)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.addTask(data)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$warning(this.$t('organization.message.message'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addTask(data) {
|
||||||
|
let list = []
|
||||||
|
data.isSet = false
|
||||||
|
list.push(data)
|
||||||
|
let param = {};
|
||||||
|
param.messageDetail = list
|
||||||
|
this.result = this.$post("/notice/save/message/task", param, () => {
|
||||||
|
this.initForm()
|
||||||
|
this.$success(this.$t('commons.save_success'));
|
||||||
|
})
|
||||||
|
},
|
||||||
|
removeRowTask(index, data) { //移除
|
||||||
|
data.splice(index, 1)
|
||||||
|
},
|
||||||
|
deleteRowTask(index, data) { //删除
|
||||||
|
this.result = this.$get("/notice/delete/message/" + data.identification, response => {
|
||||||
|
this.$success(this.$t('commons.delete_success'));
|
||||||
|
this.initForm()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
rowClass() {
|
||||||
|
return "text-align:center"
|
||||||
|
},
|
||||||
|
headClass() {
|
||||||
|
return "text-align:center;background:'#ededed'"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-row {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -79,6 +79,12 @@
|
||||||
@click.native.prevent="removeRowTask(scope.$index,form.testCasePlanTask)"
|
@click.native.prevent="removeRowTask(scope.$index,form.testCasePlanTask)"
|
||||||
>{{ $t('commons.cancel') }}
|
>{{ $t('commons.cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-show="!scope.row.isSet"
|
||||||
|
@click="handleEditTask(scope.$index,scope.row)"
|
||||||
|
>{{ $t('commons.edit') }}</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-delete"
|
||||||
|
@ -147,6 +153,9 @@ export default {
|
||||||
data.isReadOnly = !data.isReadOnly
|
data.isReadOnly = !data.isReadOnly
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleEditTask(index,data){
|
||||||
|
data.isSet = true
|
||||||
|
},
|
||||||
handleAddTaskModel(type) {
|
handleAddTaskModel(type) {
|
||||||
let Task = {};
|
let Task = {};
|
||||||
Task.event = [];
|
Task.event = [];
|
||||||
|
|
|
@ -80,6 +80,12 @@
|
||||||
@click.native.prevent="removeRowTask(scope.$index,form.reviewTask)"
|
@click.native.prevent="removeRowTask(scope.$index,form.reviewTask)"
|
||||||
>{{ $t('commons.cancel') }}
|
>{{ $t('commons.cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-show="!scope.row.isSet"
|
||||||
|
@click="handleEditTask(scope.$index,scope.row)"
|
||||||
|
>{{ $t('commons.edit') }}</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-delete"
|
||||||
|
@ -148,6 +154,9 @@ export default {
|
||||||
data.isReadOnly = !data.isReadOnly
|
data.isReadOnly = !data.isReadOnly
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleEditTask(index,data){
|
||||||
|
data.isSet = true
|
||||||
|
},
|
||||||
handleAddTaskModel(type) {
|
handleAddTaskModel(type) {
|
||||||
let Task = {};
|
let Task = {};
|
||||||
Task.event = [];
|
Task.event = [];
|
||||||
|
|
Loading…
Reference in New Issue