diff --git a/src/main/java/yi/master/business/advanced/action/InterfaceMockAction.java b/src/main/java/yi/master/business/advanced/action/InterfaceMockAction.java index 96ffe7002a0fcc226e50fcb7687ad4acec11574b..af8757d1c7e7947355b007020258823792f1b691 100644 --- a/src/main/java/yi/master/business/advanced/action/InterfaceMockAction.java +++ b/src/main/java/yi/master/business/advanced/action/InterfaceMockAction.java @@ -24,6 +24,7 @@ import yi.master.util.FrameworkUtil; import yi.master.util.PracticalUtils; import yi.master.util.cache.CacheUtil; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -57,8 +58,19 @@ public class InterfaceMockAction extends BaseAction { super.setBaseService(interfaceMockService); this.interfaceMockService = interfaceMockService; } - - + + + + @Override + public String[] prepareList() { + List conditions = new ArrayList(); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + public String updateStatus() { interfaceMockService.updateStatus(model.getMockId(), model.getStatus()); MockServer.handleMockServer(model.getMockId()); @@ -91,7 +103,7 @@ public class InterfaceMockAction extends BaseAction { * @return {@link String} */ public String parseSceneToMockInfo () { - interfaceMockService.parseSceneToMock(messageSceneId); + interfaceMockService.parseSceneToMock(messageSceneId, projectId); return SUCCESS; } diff --git a/src/main/java/yi/master/business/advanced/action/InterfaceProbeAction.java b/src/main/java/yi/master/business/advanced/action/InterfaceProbeAction.java index fef83d14693f974a935b4a63b9d3ac883e0a52ff..3da2d2b36c4417172325284509cd2e02cc51cd00 100644 --- a/src/main/java/yi/master/business/advanced/action/InterfaceProbeAction.java +++ b/src/main/java/yi/master/business/advanced/action/InterfaceProbeAction.java @@ -18,6 +18,8 @@ import yi.master.exception.YiException; import yi.master.util.FrameworkUtil; import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; @Controller @Scope("prototype") @@ -48,6 +50,16 @@ public class InterfaceProbeAction extends BaseAction { this.interfaceProbeService = interfaceProbeService; } + @Override + public String[] prepareList() { + List conditions = new ArrayList(); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + /** * 获取所有探测任务的总览视图数据 * @return diff --git a/src/main/java/yi/master/business/advanced/action/PerformanceTestConfigAction.java b/src/main/java/yi/master/business/advanced/action/PerformanceTestConfigAction.java index 00b03518d54e915174f38ba04baa289ac87e8ee0..d1f378d3d0de09aabe60a414e1c5e41535955662 100644 --- a/src/main/java/yi/master/business/advanced/action/PerformanceTestConfigAction.java +++ b/src/main/java/yi/master/business/advanced/action/PerformanceTestConfigAction.java @@ -1,20 +1,15 @@ package yi.master.business.advanced.action; -import java.util.Map; - import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.advanced.bean.PerformanceTestConfig; import yi.master.business.advanced.service.PerformanceTestConfigService; import yi.master.business.base.action.BaseAction; import yi.master.business.user.bean.User; -import yi.master.constant.ReturnCodeConsts; import yi.master.coretest.message.test.performance.PerformanceTestObject; import yi.master.exception.AppErrorCode; import yi.master.exception.YiException; @@ -23,6 +18,10 @@ import yi.master.util.PracticalUtils; import yi.master.util.cache.CacheUtil; import yi.master.util.jsonlib.JsonDateValueProcessor; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * 性能测试配置相关接口 * @author xuwangcheng @@ -47,7 +46,18 @@ public class PerformanceTestConfigAction extends BaseAction conditions = new ArrayList(); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + @Override public String edit() { if (model.getPtId() == null || model.getUser() == null) { @@ -169,6 +179,9 @@ public class PerformanceTestConfigAction extends BaseAction + + + diff --git a/src/main/java/yi/master/business/advanced/bean/InterfaceMock.java b/src/main/java/yi/master/business/advanced/bean/InterfaceMock.java index 257b3b663edf13ca866711462b76e74efc17b4b1..54b8651e75cde5befb09483a0fe1fb60a784e5f7 100644 --- a/src/main/java/yi/master/business/advanced/bean/InterfaceMock.java +++ b/src/main/java/yi/master/business/advanced/bean/InterfaceMock.java @@ -1,20 +1,19 @@ package yi.master.business.advanced.bean; -import java.io.Serializable; -import java.sql.Timestamp; - import org.apache.commons.lang3.StringUtils; import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.user.bean.User; import yi.master.constant.MessageKeys; import yi.master.constant.SystemConsts; import yi.master.coretest.message.test.mock.MockServer; -import yi.master.coretest.message.test.mock.MockSocketServer; import yi.master.util.cache.CacheUtil; +import java.io.Serializable; +import java.sql.Timestamp; + /** * 接口mock * @author xuwangcheng @@ -37,6 +36,12 @@ public class InterfaceMock implements Serializable { * 自定义路径 */ private String mockUrl; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; + /** * 请求验证规则,json串 */ @@ -156,6 +161,15 @@ public class InterfaceMock implements Serializable { this.requestValidate = requestValidate; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + public String getResponseMock() { return responseMock; } diff --git a/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.hbm.xml b/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.hbm.xml index c0dc091a210ceedaaed806a6065d66a83ab260e0..118dd96ee445320003079fcfe7de48eab30d9e7d 100644 --- a/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.hbm.xml +++ b/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.hbm.xml @@ -19,6 +19,9 @@ + + + diff --git a/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.java b/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.java index 2be47aa2bc281b9e18cd0ba1f3f8cd0fbf56a085..e313ea1083ff07d552a5b96e85d3f74d39161c94 100644 --- a/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.java +++ b/src/main/java/yi/master/business/advanced/bean/InterfaceProbe.java @@ -1,16 +1,9 @@ package yi.master.business.advanced.bean; -import java.io.Serializable; -import java.sql.Timestamp; -import java.util.HashSet; -import java.util.Set; - import net.sf.json.JSONObject; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.CustomConditionSetting; import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; @@ -18,10 +11,16 @@ import yi.master.business.advanced.bean.config.probe.ProbeConfig; import yi.master.business.advanced.service.InterfaceProbeService; import yi.master.business.message.bean.MessageScene; import yi.master.business.message.bean.TestResult; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.user.bean.User; import yi.master.util.FrameworkUtil; +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Set; + /** * 接口探测信息表 * @@ -73,6 +72,11 @@ public class InterfaceProbe implements Serializable, Cloneable { private ProbeConfig config; private String probeConfigJson; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; private Set results = new HashSet(); @@ -146,6 +150,15 @@ public class InterfaceProbe implements Serializable, Cloneable { this.firstCallTimeText = firstCallTimeText; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + public String getCreateUserName() { return createUserName; } diff --git a/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.hbm.xml b/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.hbm.xml index c4bf9d41c95757c4988184f770ca2cea4b03fc9f..05b1e21d7edc6a7d4b87757205546cb4f1169b1c 100644 --- a/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.hbm.xml +++ b/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.hbm.xml @@ -13,6 +13,9 @@ + + + diff --git a/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.java b/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.java index 1596f5e1ccb1068504f18650b88ea7e37ff20af2..e31e5690ff2f946e209ea8e9b15cbc6305c2d216 100644 --- a/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.java +++ b/src/main/java/yi/master/business/advanced/bean/PerformanceTestConfig.java @@ -1,21 +1,21 @@ package yi.master.business.advanced.bean; -import java.io.Serializable; -import java.sql.Timestamp; -import java.util.HashSet; -import java.util.Set; - import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.CustomConditionSetting; import yi.master.annotation.FieldNameMapper; import yi.master.business.advanced.enums.PtKeepAlive; import yi.master.business.advanced.enums.PtParameterGetType; import yi.master.business.message.bean.MessageScene; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.user.bean.User; import yi.master.constant.SystemConsts; +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Set; + /** * 接口性能测试配置 * @author xuwangcheng @@ -104,6 +104,11 @@ public class PerformanceTestConfig implements Serializable { * 创建时间 */ private Timestamp createTime = new Timestamp(System.currentTimeMillis()); + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; /** * 备注 */ @@ -311,6 +316,15 @@ public class PerformanceTestConfig implements Serializable { this.mark = mark; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + @Override public String toString() { diff --git a/src/main/java/yi/master/business/advanced/service/InterfaceMockService.java b/src/main/java/yi/master/business/advanced/service/InterfaceMockService.java index 47da07772292ab6dd5e50f8d5adc79d21af75cc1..d1a1b2fffd5b6162c17f79ac89dd6469cbce1fba 100644 --- a/src/main/java/yi/master/business/advanced/service/InterfaceMockService.java +++ b/src/main/java/yi/master/business/advanced/service/InterfaceMockService.java @@ -51,5 +51,5 @@ public interface InterfaceMockService extends BaseService { * @param sceneId sceneId * @return {@link boolean} */ - boolean parseSceneToMock (Integer sceneId); + boolean parseSceneToMock (Integer sceneId, Integer projectId); } diff --git a/src/main/java/yi/master/business/advanced/service/impl/InterfaceMockServiceImpl.java b/src/main/java/yi/master/business/advanced/service/impl/InterfaceMockServiceImpl.java index acbea5522a15d9dc7201eb7ef1ae2b21eaf5bff8..9dd0fde62fa3ba433b8e8d575ad84e53057eb7ca 100644 --- a/src/main/java/yi/master/business/advanced/service/impl/InterfaceMockServiceImpl.java +++ b/src/main/java/yi/master/business/advanced/service/impl/InterfaceMockServiceImpl.java @@ -16,7 +16,9 @@ import yi.master.business.message.bean.InterfaceInfo; import yi.master.business.message.bean.Message; import yi.master.business.message.bean.MessageScene; import yi.master.business.message.dao.MessageSceneDao; +import yi.master.business.system.bean.ProjectInfo; import yi.master.constant.MessageKeys; +import yi.master.constant.SystemConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.exception.AppErrorCode; import yi.master.exception.YiException; @@ -72,7 +74,7 @@ public class InterfaceMockServiceImpl extends BaseServiceImpl imp } @Override - public boolean parseSceneToMock(Integer sceneId) { + public boolean parseSceneToMock(Integer sceneId, Integer projectId) { MessageScene messageScene = messageSceneDao.get(sceneId); if (messageScene == null) { throw new YiException(AppErrorCode.SCENE_INFO_NOT_EXIST); @@ -106,6 +108,7 @@ public class InterfaceMockServiceImpl extends BaseServiceImpl imp mockInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); mockInfo.setMark("由接口场景自动生成"); mockInfo.setMockName(interfaceInfo.getInterfaceName()); + mockInfo.setProjectInfo(new ProjectInfo(projectId == null ? SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId() : projectId)); //获取mockUrl地址,按照优先级获取 String requestUrl = ""; diff --git a/src/main/java/yi/master/business/base/action/BaseAction.java b/src/main/java/yi/master/business/base/action/BaseAction.java index 4b85519a7fe84285c990842646fa865555e8112f..9a05182117404aefb08cb31dba29179c56fb2e28 100644 --- a/src/main/java/yi/master/business/base/action/BaseAction.java +++ b/src/main/java/yi/master/business/base/action/BaseAction.java @@ -1,25 +1,21 @@ package yi.master.business.base.action; -import java.lang.reflect.ParameterizedType; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.ModelDriven; import org.apache.commons.lang3.ArrayUtils; import org.apache.log4j.Logger; import org.apache.struts2.json.annotations.JSON; - -import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.ModelDriven; - import yi.master.annotation.util.AnnotationUtil; import yi.master.business.base.bean.PageModel; import yi.master.business.base.bean.PageReturnJSONObject; import yi.master.business.base.bean.ReturnJSONObject; import yi.master.business.base.service.BaseService; -import yi.master.constant.ReturnCodeConsts; import yi.master.util.FrameworkUtil; +import java.lang.reflect.ParameterizedType; +import java.util.List; +import java.util.Map; + /** * 通用Action类,默认继承ActionSupport并实现ModelDriven接口 * @author xuwangcheng @@ -103,6 +99,11 @@ public class BaseAction extends ActionSupport implements ModelDriven { * queryMode="advanced" */ protected String queryMode; + + /** + * 项目ID + */ + protected Integer projectId; public void setBaseService(BaseService baseService) { this.baseService = baseService; @@ -295,6 +296,9 @@ public class BaseAction extends ActionSupport implements ModelDriven { this.queryMode = queryMode; } + public void setProjectId(Integer projectId) { + this.projectId = projectId; + } public ReturnJSONObject getJsonObject() { return jsonObject; diff --git a/src/main/java/yi/master/business/message/action/AutoTaskAction.java b/src/main/java/yi/master/business/message/action/AutoTaskAction.java index dbd9c629a56f667ac06028bcddaf17b25fa2d300..4058fe3b27ed7961b1057ba3adf392ba98c2087e 100644 --- a/src/main/java/yi/master/business/message/action/AutoTaskAction.java +++ b/src/main/java/yi/master/business/message/action/AutoTaskAction.java @@ -1,24 +1,22 @@ package yi.master.business.message.action; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.base.action.BaseAction; import yi.master.business.message.bean.AutoTask; import yi.master.business.message.bean.TestSet; import yi.master.business.message.service.AutoTaskService; import yi.master.business.message.service.TestSetService; -import yi.master.business.user.bean.User; -import yi.master.constant.ReturnCodeConsts; import yi.master.constant.SystemConsts; import yi.master.coretest.task.JobManager; import yi.master.exception.AppErrorCode; import yi.master.exception.YiException; -import yi.master.util.PracticalUtils; import yi.master.util.FrameworkUtil; +import yi.master.util.PracticalUtils; + +import java.util.ArrayList; +import java.util.List; @Controller @Scope("prototype") @@ -41,9 +39,17 @@ public class AutoTaskAction extends BaseAction { this.autoTaskService = autoTaskService; } - - - + + @Override + public String[] prepareList() { + List conditions = new ArrayList(); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + @Override public String edit() { diff --git a/src/main/java/yi/master/business/message/action/ComplexSceneAction.java b/src/main/java/yi/master/business/message/action/ComplexSceneAction.java index 729ed896185ee53a38d6b9a7f679a1eb6ac1bf64..c5ae29c46e81100ee77d2551e328e18d1ed087be 100644 --- a/src/main/java/yi/master/business/message/action/ComplexSceneAction.java +++ b/src/main/java/yi/master/business/message/action/ComplexSceneAction.java @@ -1,21 +1,20 @@ package yi.master.business.message.action; -import java.util.HashMap; -import java.util.Map; - import net.sf.json.JSONArray; import net.sf.json.JSONObject; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.base.action.BaseAction; import yi.master.business.message.bean.ComplexScene; import yi.master.business.message.bean.ComplexSceneConfig; import yi.master.business.message.service.ComplexSceneService; import yi.master.business.message.service.MessageSceneService; -import yi.master.constant.ReturnCodeConsts; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Controller @Scope("prototype") @@ -42,8 +41,18 @@ public class ComplexSceneAction extends BaseAction { public String sequenceNums; public String config; - - + + @Override + public String[] prepareList() { + List conditions = new ArrayList(); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + + /** * 获取保存变量名列表,传入sequenceNum代表获取的为在此执行顺序之前的保存变量 * @return diff --git a/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java b/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java index b1fed470212a624d6643ee94443f9e030d0dba5c..b2741387483b5ea9871d374266a28e3671687d45 100644 --- a/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java +++ b/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java @@ -1,23 +1,11 @@ package yi.master.business.message.action; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; import yi.master.business.base.action.BaseAction; import yi.master.business.base.dto.ParseMessageToNodesOutDTO; import yi.master.business.message.bean.InterfaceInfo; @@ -31,7 +19,6 @@ import yi.master.business.message.service.TestDataService; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.testconfig.service.BusinessSystemService; import yi.master.business.user.bean.User; -import yi.master.constant.ReturnCodeConsts; import yi.master.constant.SystemConsts; import yi.master.exception.AppErrorCode; import yi.master.exception.YiException; @@ -41,6 +28,9 @@ import yi.master.util.excel.ExportInterfaceInfo; import yi.master.util.excel.ImportInterfaceInfo; import yi.master.util.excel.PoiExcelUtil; +import java.sql.Timestamp; +import java.util.*; + /** * 接口自动化 * 接口信息Action @@ -86,12 +76,14 @@ public class InterfaceInfoAction extends BaseAction { @Override public String[] prepareList() { - List conditions = new ArrayList(); if (systemId != null) { conditions.add("exists (select 1 from InterfaceInfo o join o.systems s where s.systemId=" + systemId + " and o.interfaceId=t.interfaceId)"); } + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } this.filterCondition = conditions.toArray(new String[0]); return this.filterCondition; @@ -152,7 +144,7 @@ public class InterfaceInfoAction extends BaseAction { public String importFromExcel () { Map result = null; try { - result = ImportInterfaceInfo.importToDB(path); + result = ImportInterfaceInfo.importToDB(path, projectId); } catch (Exception e) { throw new YiException(AppErrorCode.INTERNAL_SERVER_ERROR.getCode(), "读取文件内容失败!"); } diff --git a/src/main/java/yi/master/business/message/action/MessageAction.java b/src/main/java/yi/master/business/message/action/MessageAction.java index 8f542d062628ba493d294733b5c3e8d0032e77c1..d6ce7702c170f20bd3b9df6d345f2367ce605b90 100644 --- a/src/main/java/yi/master/business/message/action/MessageAction.java +++ b/src/main/java/yi/master/business/message/action/MessageAction.java @@ -1,25 +1,15 @@ package yi.master.business.message.action; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - import net.sf.json.JSONObject; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.base.action.BaseAction; import yi.master.business.message.bean.InterfaceInfo; import yi.master.business.message.bean.Message; -import yi.master.business.message.bean.MessageScene; import yi.master.business.message.bean.Parameter; import yi.master.business.message.service.*; import yi.master.business.user.bean.User; -import yi.master.constant.ReturnCodeConsts; import yi.master.constant.SystemConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.exception.AppErrorCode; @@ -27,6 +17,12 @@ import yi.master.exception.YiException; import yi.master.util.FrameworkUtil; import yi.master.util.excel.ImportMessage; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * 接口报文Action * @@ -73,11 +69,13 @@ public class MessageAction extends BaseAction{ @Override public String[] prepareList() { - List conditions = new ArrayList(); if (this.interfaceId != null) { conditions.add("interfaceInfo.interfaceId=" + interfaceId); } + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } this.filterCondition = conditions.toArray(new String[0]); return this.filterCondition; } @@ -94,7 +92,7 @@ public class MessageAction extends BaseAction{ throw new YiException(AppErrorCode.INTERNAL_SERVER_ERROR.getCode(), "接口信息不存在"); } - Map result = ImportMessage.importToDB(path, info); + Map result = ImportMessage.importToDB(path, info, projectId); setData(result); return SUCCESS; diff --git a/src/main/java/yi/master/business/message/action/MessageSceneAction.java b/src/main/java/yi/master/business/message/action/MessageSceneAction.java index 61f70b85079a1fb1f574b4790131e59e6e682874..57c89d0092e33d37ab9292359b159e3310859859 100644 --- a/src/main/java/yi/master/business/message/action/MessageSceneAction.java +++ b/src/main/java/yi/master/business/message/action/MessageSceneAction.java @@ -1,43 +1,23 @@ package yi.master.business.message.action; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.base.action.BaseAction; import yi.master.business.base.dto.ParseMessageToNodesOutDTO; -import yi.master.business.message.bean.InterfaceInfo; -import yi.master.business.message.bean.Message; -import yi.master.business.message.bean.MessageScene; -import yi.master.business.message.bean.Parameter; -import yi.master.business.message.bean.SceneValidateRule; -import yi.master.business.message.bean.TestData; -import yi.master.business.message.enums.CommonStatus; -import yi.master.business.message.enums.TestDataStatus; -import yi.master.business.message.service.MessageSceneService; -import yi.master.business.message.service.MessageService; -import yi.master.business.message.service.SceneValidateRuleService; -import yi.master.business.message.service.TestDataService; -import yi.master.business.message.service.TestSetService; +import yi.master.business.message.bean.*; +import yi.master.business.message.service.*; import yi.master.business.testconfig.bean.BusinessSystem; -import yi.master.business.testconfig.bean.GlobalVariable; import yi.master.business.testconfig.service.GlobalVariableService; -import yi.master.constant.ReturnCodeConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.exception.AppErrorCode; import yi.master.exception.YiException; import yi.master.util.PracticalUtils; import yi.master.util.excel.ImportMessageScene; +import java.util.*; + /** * 报文场景Action * @@ -154,10 +134,14 @@ public class MessageSceneAction extends BaseAction{ @Override public String[] prepareList() { - + List conditions = new ArrayList(); if (messageId != null) { - this.filterCondition = new String[]{"message.messageId=" + messageId}; + conditions.add("t.message.messageId=" + messageId); + } + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); } + this.filterCondition = conditions.toArray(new String[0]); return this.filterCondition; } @@ -171,7 +155,7 @@ public class MessageSceneAction extends BaseAction{ throw new YiException(AppErrorCode.MESSAGE_INFO_NOT_EXITS); } - Map result = ImportMessageScene.importToDB(path, message); + Map result = ImportMessageScene.importToDB(path, message, projectId); setData(result); return SUCCESS; diff --git a/src/main/java/yi/master/business/message/action/TestReportAction.java b/src/main/java/yi/master/business/message/action/TestReportAction.java index 774ae36f789313fe3d37fe6ab047dbee0ef580f0..ed802608cab196fa76b660f2f8157cda10a3ff47 100644 --- a/src/main/java/yi/master/business/message/action/TestReportAction.java +++ b/src/main/java/yi/master/business/message/action/TestReportAction.java @@ -18,6 +18,7 @@ import yi.master.util.notify.mail.NotifyMail; import yi.master.util.notify.mail.ReportEmailCreator; import java.io.File; +import java.util.ArrayList; import java.util.List; /** @@ -48,6 +49,16 @@ public class TestReportAction extends BaseAction { this.testReportService = testReportService; } + @Override + public String[] prepareList() { + List conditions = new ArrayList(); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + @Override public String get() { model = testReportService.get(model.getReportId()); diff --git a/src/main/java/yi/master/business/message/action/TestSetAction.java b/src/main/java/yi/master/business/message/action/TestSetAction.java index c3323fdea425f4b35d7d46843ba6916ff5657f7b..a023ffa1eb519e20cb62de6a97dbb4887bddbfa1 100644 --- a/src/main/java/yi/master/business/message/action/TestSetAction.java +++ b/src/main/java/yi/master/business/message/action/TestSetAction.java @@ -1,14 +1,8 @@ package yi.master.business.message.action; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.base.action.BaseAction; import yi.master.business.base.bean.PageModel; import yi.master.business.base.bean.PageReturnJSONObject; @@ -19,11 +13,13 @@ import yi.master.business.testconfig.bean.GlobalVariable; import yi.master.business.testconfig.bean.TestConfig; import yi.master.business.testconfig.service.GlobalVariableService; import yi.master.business.testconfig.service.TestConfigService; -import yi.master.business.user.bean.User; -import yi.master.constant.ReturnCodeConsts; -import yi.master.constant.SystemConsts; import yi.master.util.FrameworkUtil; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * 接口自动化
* 测试集Action @@ -72,6 +68,10 @@ public class TestSetAction extends BaseAction { List conditions = new ArrayList(); conditions.add("parented=1"); + if (projectId != null) { + conditions.add("t.projectInfo.projectId=" + projectId); + } + this.filterCondition = conditions.toArray(new String[0]); return this.filterCondition; } @@ -81,7 +81,7 @@ public class TestSetAction extends BaseAction { * @return */ public String getCategoryNodes () { - List rootSets = testSetService.getRootSet(); + List rootSets = testSetService.getRootSet(projectId); List> sets = new ArrayList>(); for (TestSet set:rootSets) { @@ -128,7 +128,7 @@ public class TestSetAction extends BaseAction { Map dt = FrameworkUtil.getDTParameters(MessageScene.class); PageModel pm = testSetService.listSetMessageScene(model.getSetId(), start, length ,(String)dt.get("orderDataName"),(String)dt.get("orderType") - ,(String)dt.get("searchValue"),(List>)dt.get("dataParams"), Integer.parseInt(mode)); + ,(String)dt.get("searchValue"),(List>)dt.get("dataParams"), Integer.parseInt(mode), "m1.projectInfo.projectId=" + projectId); jsonObject = new PageReturnJSONObject(draw, pm.getRecordCount(), pm.getFilteredCount()); jsonObject.data(processListData(pm.getDatas())); @@ -166,7 +166,7 @@ public class TestSetAction extends BaseAction { * @return */ public String getMySet () { - setData(testSetService.findAll("parented=1")); + setData(testSetService.findAll("parented=1", "projectInfo.projectId=" + projectId)); return SUCCESS; } diff --git a/src/main/java/yi/master/business/message/bean/AutoTask.hbm.xml b/src/main/java/yi/master/business/message/bean/AutoTask.hbm.xml index d0817b555762a6a55dba4508593567b5f0a3a901..f7bd6ece2d090310385b0f5ee0bbcb7ca1b1e8c7 100644 --- a/src/main/java/yi/master/business/message/bean/AutoTask.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/AutoTask.hbm.xml @@ -16,6 +16,9 @@ + + + diff --git a/src/main/java/yi/master/business/message/bean/AutoTask.java b/src/main/java/yi/master/business/message/bean/AutoTask.java index 1cc5c6ec690186a5ff79a5ce6f6ba684e2a48426..02bb69a6ec72290ab5c6e09947667847604dffb8 100644 --- a/src/main/java/yi/master/business/message/bean/AutoTask.java +++ b/src/main/java/yi/master/business/message/bean/AutoTask.java @@ -1,13 +1,13 @@ package yi.master.business.message.bean; -import java.sql.Timestamp; - import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.user.bean.User; +import java.sql.Timestamp; + /** * * 自动化定时测试任务 @@ -74,6 +74,11 @@ public class AutoTask { private String setName = ""; private User user; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; @FieldNameMapper(fieldPath="user.realName") private String createUserName; @@ -202,6 +207,15 @@ public class AutoTask { this.status = status; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + @Override public String toString() { return "AutoTask [taskId=" + taskId + ", taskName=" + taskName diff --git a/src/main/java/yi/master/business/message/bean/ComplexScene.hbm.xml b/src/main/java/yi/master/business/message/bean/ComplexScene.hbm.xml index 9d5480e2ed0e5d4ef2bd5178cea27edab9b3e775..afcd6da72e4aca27debcdb9b8db153abe9178d1a 100644 --- a/src/main/java/yi/master/business/message/bean/ComplexScene.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/ComplexScene.hbm.xml @@ -12,7 +12,10 @@ - +
+ + + diff --git a/src/main/java/yi/master/business/message/bean/ComplexScene.java b/src/main/java/yi/master/business/message/bean/ComplexScene.java index 0efd3378d15b773611fe92b5a98a00c4400f9cd6..fba193afa6a12eaa0246b5efa899a90409a722b5 100644 --- a/src/main/java/yi/master/business/message/bean/ComplexScene.java +++ b/src/main/java/yi/master/business/message/bean/ComplexScene.java @@ -8,6 +8,7 @@ import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; import yi.master.business.message.service.ComplexSceneService; import yi.master.business.message.service.MessageSceneService; +import yi.master.business.system.bean.ProjectInfo; import yi.master.util.FrameworkUtil; import yi.master.util.PracticalUtils; @@ -62,6 +63,10 @@ public class ComplexScene implements Serializable { */ @FieldRealSearch(names = {"是", "否"}, values = {"0", "1"}) private String newClient; + /** + * 关联项目 + */ + private ProjectInfo projectInfo; /** * 对应测试集 @@ -282,6 +287,14 @@ public class ComplexScene implements Serializable { this.testSets = testSets; } + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + + public ProjectInfo getProjectInfo() { + return projectInfo; + } + @Override public String toString() { return "ComplexScene [id=" + id + ", complexSceneName=" diff --git a/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml b/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml index d440cbbb64f73408a982427264c2ef3fa621b486..d2707a5ffd2cf20283e6dbbe8275b58a03568234 100644 --- a/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml @@ -13,6 +13,9 @@ + + + diff --git a/src/main/java/yi/master/business/message/bean/InterfaceInfo.java b/src/main/java/yi/master/business/message/bean/InterfaceInfo.java index 210537ef72374d10cc2cb8c39fd8018f7e569cec..726ad3a046a27314f83b1480fc4e3ec2c21273d3 100644 --- a/src/main/java/yi/master/business/message/bean/InterfaceInfo.java +++ b/src/main/java/yi/master/business/message/bean/InterfaceInfo.java @@ -1,19 +1,20 @@ package yi.master.business.message.bean; // default package -import java.io.Serializable; -import java.sql.Timestamp; -import java.util.HashSet; -import java.util.Set; - import org.apache.commons.lang.StringUtils; import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.CustomConditionSetting; import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.user.bean.User; +import yi.master.util.FrameworkUtil; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Set; /** @@ -24,7 +25,7 @@ import yi.master.business.user.bean.User; * @version 1.0.0.0,2017.2.13 */ -public class InterfaceInfo implements Serializable { +public class InterfaceInfo implements Serializable,Cloneable { // Fields @@ -119,6 +120,11 @@ public class InterfaceInfo implements Serializable { @FieldNameMapper(fieldPath="size(messages)",ifSearch=false) @CustomConditionSetting(conditionType="") private Integer messagesNum; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; /** * 所属测试环境 @@ -243,12 +249,19 @@ public class InterfaceInfo implements Serializable { public Set getParameters() { return parameters; } - - + public void setParameters(Set parameters) { this.parameters = parameters; } + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + public void setInterfaceId(Integer interfaceId) { this.interfaceId = interfaceId; } @@ -366,7 +379,7 @@ public class InterfaceInfo implements Serializable { public void setMark(String mark) { this.mark = mark; } - + public String getMark() { if (StringUtils.isBlank(mark)) { return ""; @@ -374,6 +387,26 @@ public class InterfaceInfo implements Serializable { return mark; } + + @Override + protected InterfaceInfo clone() throws CloneNotSupportedException { + InterfaceInfo interfaceInfo = new InterfaceInfo(); + interfaceInfo.setInterfaceCnName(this.interfaceCnName); + interfaceInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); + interfaceInfo.setInterfaceName(this.interfaceName); + interfaceInfo.setInterfaceProtocol(this.interfaceProtocol); + interfaceInfo.setInterfaceType(this.interfaceType); + interfaceInfo.setMark(this.mark); + interfaceInfo.setParameters(this.parameters); + interfaceInfo.setStatus(this.status); + interfaceInfo.setUser(FrameworkUtil.getLoginUser()); + interfaceInfo.setSystems(this.systems); + interfaceInfo.setRequestUrlReal(this.requestUrlReal); + interfaceInfo.setLastModifyUser(FrameworkUtil.getLoginUser().getRealName()); + + return interfaceInfo; + } + @Override public String toString() { return "InterfaceInfo [interfaceName=" + interfaceName diff --git a/src/main/java/yi/master/business/message/bean/Message.hbm.xml b/src/main/java/yi/master/business/message/bean/Message.hbm.xml index 3a6db697dc4a3145df5cecbb9efe8bad6cad7807..0f6ec3ef2c71dc506bbbf69c656d8554ded3ff1f 100644 --- a/src/main/java/yi/master/business/message/bean/Message.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/Message.hbm.xml @@ -13,6 +13,9 @@ + + + diff --git a/src/main/java/yi/master/business/message/bean/Message.java b/src/main/java/yi/master/business/message/bean/Message.java index c8a508c2bda9e6c267aefe5994235d791602a63e..1a3df0db58fd624170d44a0a8baf320dcf8c77b1 100644 --- a/src/main/java/yi/master/business/message/bean/Message.java +++ b/src/main/java/yi/master/business/message/bean/Message.java @@ -1,20 +1,20 @@ package yi.master.business.message.bean; // default package -import java.io.Serializable; -import java.sql.Timestamp; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.user.bean.User; import yi.master.util.PracticalUtils; +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + /** * 接口自动化 @@ -71,6 +71,11 @@ public class Message implements Serializable{ * 调用参数 */ private String callParameter; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; private String createMessageScene; @@ -224,18 +229,23 @@ public class Message implements Serializable{ public Integer getSceneNum() { return this.scenes.size(); } - - public String getCallParameter() { return callParameter; } - public void setCallParameter(String callParameter) { this.callParameter = callParameter; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } public void setSceneNum(Integer sceneNum) { this.sceneNum = sceneNum; diff --git a/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml b/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml index 9a75a81c16b8a78c1e324460e19b4ec613687484..823d0fd72ebb8eebf21f57957923e4e206563afd 100644 --- a/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml @@ -23,7 +23,11 @@ - + + + + + diff --git a/src/main/java/yi/master/business/message/bean/MessageScene.java b/src/main/java/yi/master/business/message/bean/MessageScene.java index 5dc40e5398816cc41ce5a0620334287b551338a1..604deec4b91dfe8c6c3590001340dccddc5a057e 100644 --- a/src/main/java/yi/master/business/message/bean/MessageScene.java +++ b/src/main/java/yi/master/business/message/bean/MessageScene.java @@ -8,6 +8,7 @@ import yi.master.annotation.FieldNameMapper; import yi.master.business.advanced.bean.InterfaceProbe; import yi.master.business.advanced.bean.PerformanceTestConfig; import yi.master.business.message.service.TestDataService; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.constant.MessageKeys; import yi.master.util.FrameworkUtil; @@ -67,6 +68,11 @@ public class MessageScene implements Serializable, Cloneable { * 该场景的返回报文示例 */ private String responseExample; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; private Timestamp createTime; /** @@ -408,6 +414,15 @@ public class MessageScene implements Serializable, Cloneable { this.testDatas = testDatas; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + public void setRequestUrl(String requestUrl) { this.requestUrl = requestUrl; } diff --git a/src/main/java/yi/master/business/message/bean/TestReport.hbm.xml b/src/main/java/yi/master/business/message/bean/TestReport.hbm.xml index db240049bd52a5cf0070f25e180c454393ee9cd1..260dda8c742f1fc23bf7502704d20d4f1197b42c 100644 --- a/src/main/java/yi/master/business/message/bean/TestReport.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/TestReport.hbm.xml @@ -16,6 +16,9 @@ + + + diff --git a/src/main/java/yi/master/business/message/bean/TestReport.java b/src/main/java/yi/master/business/message/bean/TestReport.java index 1d569b45ca5d33773fdf3fb367bd489fc1f7659c..d1def072a4009021832de4228ffd1c86e455edce 100644 --- a/src/main/java/yi/master/business/message/bean/TestReport.java +++ b/src/main/java/yi/master/business/message/bean/TestReport.java @@ -4,6 +4,7 @@ import org.apache.struts2.json.annotations.JSON; import yi.master.annotation.CustomConditionSetting; import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.user.bean.User; import yi.master.constant.SystemConsts; import yi.master.util.PracticalUtils; @@ -99,6 +100,11 @@ public class TestReport implements Serializable{ @CustomConditionSetting(conditionType=CustomConditionSetting.DATETIME_TYPE) @FieldNameMapper(fieldPath="createTime") private String createTimeText; + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; private Set trs = new HashSet(); @@ -278,6 +284,15 @@ public class TestReport implements Serializable{ this.mark = mark; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + @Override public String toString() { return "TestReport [reportId=" + reportId + ", testMode=" + testMode diff --git a/src/main/java/yi/master/business/message/bean/TestSet.hbm.xml b/src/main/java/yi/master/business/message/bean/TestSet.hbm.xml index 2fe0cd3c544220f4489008bc0aac48df7a262dd5..4d9372fc87a7c61b4cea5021a00194c11a2ab647 100644 --- a/src/main/java/yi/master/business/message/bean/TestSet.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/TestSet.hbm.xml @@ -14,7 +14,9 @@ - + + + diff --git a/src/main/java/yi/master/business/message/bean/TestSet.java b/src/main/java/yi/master/business/message/bean/TestSet.java index dff5a91586518fda3c595ac5b016c2e838afdea8..0af772da4427284aa19d36418e3540acbd8d8587 100644 --- a/src/main/java/yi/master/business/message/bean/TestSet.java +++ b/src/main/java/yi/master/business/message/bean/TestSet.java @@ -1,22 +1,17 @@ package yi.master.business.message.bean; -import java.io.Serializable; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.struts2.json.annotations.JSON; - import yi.master.annotation.FieldNameMapper; import yi.master.annotation.FieldRealSearch; import yi.master.business.message.service.TestSetService; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.TestConfig; import yi.master.business.user.bean.User; +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.*; + /** * 测试集实体类 * @@ -92,7 +87,12 @@ public class TestSet implements Serializable { */ @FieldNameMapper(fieldPath="size(complexMs)",ifSearch=false) private Integer complexSceneNum; - + + /** + * 所属项目 + */ + private ProjectInfo projectInfo; + private Integer parentId; public TestSet(Integer setId, String setName, User user, @@ -265,6 +265,15 @@ public class TestSet implements Serializable { return complexMs; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + @Override public String toString() { return "TestSet [setId=" + setId + ", setName=" + setName diff --git a/src/main/java/yi/master/business/message/dao/TestSetDao.java b/src/main/java/yi/master/business/message/dao/TestSetDao.java index 116013d7a25574336848e4720737acdd46f0f718..013e7ac5942b9f401e61e8406f52a0ae12707646 100644 --- a/src/main/java/yi/master/business/message/dao/TestSetDao.java +++ b/src/main/java/yi/master/business/message/dao/TestSetDao.java @@ -1,13 +1,13 @@ package yi.master.business.message.dao; -import java.util.List; - import yi.master.business.base.bean.PageModel; import yi.master.business.base.dao.BaseDao; import yi.master.business.message.bean.MessageScene; import yi.master.business.message.bean.TestSet; import yi.master.business.testconfig.bean.TestConfig; +import java.util.List; + /** * * @author xuwangcheng @@ -57,7 +57,7 @@ public interface TestSetDao extends BaseDao { * 获取测试集目录树根节点 * @return */ - List getRootSet (); + List getRootSet (Integer projectId); /** * 移动测试集到指定文件夹下 diff --git a/src/main/java/yi/master/business/message/dao/impl/TestSetDaoImpl.java b/src/main/java/yi/master/business/message/dao/impl/TestSetDaoImpl.java index 2e43c2eb44bc92e5fa294bf1024925e4b089bbed..f6fc0d97f885bdf2aa0fbf135e8ebe985f0e896a 100644 --- a/src/main/java/yi/master/business/message/dao/impl/TestSetDaoImpl.java +++ b/src/main/java/yi/master/business/message/dao/impl/TestSetDaoImpl.java @@ -141,10 +141,9 @@ public class TestSetDaoImpl extends BaseDaoImpl implements TestSetDao { @SuppressWarnings("unchecked") @Override - public List getRootSet() { - - String hql = "from TestSet t where t.parentSet=null"; - return getSession().createQuery(hql).setCacheable(true).list(); + public List getRootSet(Integer projectId) { + String hql = "from TestSet t where t.parentSet=null and t.projectInfo.projectId=:projectId"; + return getSession().createQuery(hql).setInteger("projectId", projectId).setCacheable(true).list(); } @Override diff --git a/src/main/java/yi/master/business/message/service/InterfaceInfoService.java b/src/main/java/yi/master/business/message/service/InterfaceInfoService.java index d770bf8a8c7e9c9c1c2fc231dc1bc5390fec49e4..011ede3bf4ed833e09ca1a2c307faf29321e49a0 100644 --- a/src/main/java/yi/master/business/message/service/InterfaceInfoService.java +++ b/src/main/java/yi/master/business/message/service/InterfaceInfoService.java @@ -1,10 +1,10 @@ package yi.master.business.message.service; -import java.util.List; - import yi.master.business.base.service.BaseService; import yi.master.business.message.bean.InterfaceInfo; +import java.util.List; + /** * 接口信息Service接口 * @author xuwangcheng @@ -33,4 +33,14 @@ public interface InterfaceInfoService extends BaseService { * @return InterfaceInfo 符合条件的接口信息 */ InterfaceInfo findInterfaceByName(String interfaceName); + + /** + * 复制接口 + * @author xuwangcheng + * @date 2020/8/3 15:20 + * @param interfaceInfo interfaceInfo + * @param copyParams copyParams + * @return + */ + void copyInterfaceInfo (InterfaceInfo interfaceInfo, List copyParams); } diff --git a/src/main/java/yi/master/business/message/service/MessageSceneService.java b/src/main/java/yi/master/business/message/service/MessageSceneService.java index cce4d404092a1e4172df250c587c7b37a776afcf..e1b2f99fa9b800507f5c0b1ec2e18cb58b71b401 100644 --- a/src/main/java/yi/master/business/message/service/MessageSceneService.java +++ b/src/main/java/yi/master/business/message/service/MessageSceneService.java @@ -1,12 +1,12 @@ package yi.master.business.message.service; -import java.util.List; - import yi.master.business.base.service.BaseService; import yi.master.business.message.bean.InterfaceInfo; import yi.master.business.message.bean.Message; import yi.master.business.message.bean.MessageScene; +import java.util.List; + /** * 报文场景service接口 * @author xuwangcheng @@ -60,4 +60,14 @@ public interface MessageSceneService extends BaseService{ * @return {@link Integer} id */ Integer save(MessageScene messageScene, Boolean createDefaultData, Integer variableId); + + /** + * 复制场景 + * @author xuwangcheng + * @date 2020/8/3 15:42 + * @param scenes scenes + * @param copyParams copyParams + * + */ + void copyScene (List scenes, List copyParams); } diff --git a/src/main/java/yi/master/business/message/service/MessageService.java b/src/main/java/yi/master/business/message/service/MessageService.java index 17df637e3946ba55f59a44279d405eb8d1fb65a8..4aa93b117d8ccee464ec52d8f318781327bfa661 100644 --- a/src/main/java/yi/master/business/message/service/MessageService.java +++ b/src/main/java/yi/master/business/message/service/MessageService.java @@ -3,6 +3,8 @@ package yi.master.business.message.service; import yi.master.business.base.service.BaseService; import yi.master.business.message.bean.Message; +import java.util.List; + /** * 接口报文Service接口 * @@ -20,4 +22,14 @@ public interface MessageService extends BaseService { * @return {@link Integer} */ Integer save(Message message, Boolean createDefaultScene); + + /** + * 复制报文 + * @author xuwangcheng + * @date 2020/8/3 15:41 + * @param messages messages + * @param copyParams copyParams + * @return + */ + void copyMessage (List messages, List copyParams); } diff --git a/src/main/java/yi/master/business/message/service/TestSetService.java b/src/main/java/yi/master/business/message/service/TestSetService.java index 027aadbb6f8b1342cec6a5bbf9d4bbac6768e25f..3ef2ae27391dea396ce26c40a72800a559e5698c 100644 --- a/src/main/java/yi/master/business/message/service/TestSetService.java +++ b/src/main/java/yi/master/business/message/service/TestSetService.java @@ -1,13 +1,13 @@ package yi.master.business.message.service; -import java.util.List; - import yi.master.business.base.bean.PageModel; import yi.master.business.base.service.BaseService; import yi.master.business.message.bean.MessageScene; import yi.master.business.message.bean.TestSet; import yi.master.business.testconfig.bean.TestConfig; +import java.util.List; + /** * * @author xuwangcheng @@ -57,7 +57,7 @@ public interface TestSetService extends BaseService { * 获取测试集目录树根节点 * @return */ - List getRootSet (); + List getRootSet (Integer projectId); /** * 移动测试集到指定文件夹下 diff --git a/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java index f06dca52d2055751c24f7c1398ba8602d13e2bf4..c414a026aee61007609ead9e3626d8d13ab55c0c 100644 --- a/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java @@ -1,14 +1,14 @@ package yi.master.business.message.service.impl; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import yi.master.business.base.service.impl.BaseServiceImpl; import yi.master.business.message.bean.InterfaceInfo; import yi.master.business.message.dao.InterfaceInfoDao; import yi.master.business.message.service.InterfaceInfoService; +import yi.master.business.message.service.MessageService; + +import java.util.List; /** * 接口信息Service实现 @@ -19,6 +19,8 @@ import yi.master.business.message.service.InterfaceInfoService; public class InterfaceInfoServiceImpl extends BaseServiceImpl implements InterfaceInfoService { private InterfaceInfoDao interfaceInfoDao; + @Autowired + private MessageService messageService; @Autowired public void setInterfaceInfoDao(InterfaceInfoDao interfaceInfoDao) { @@ -45,6 +47,9 @@ public class InterfaceInfoServiceImpl extends BaseServiceImpl imp return interfaceInfoDao.findInterfaceByName(interfaceName); } - - + + @Override + public void copyInterfaceInfo(InterfaceInfo interfaceInfo, List copyParams) { + //todo 接口复制,包括接口信息和参数信息,报文信息 + } } diff --git a/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java index 1a79d87277abf393a538d4e4d1e8464b4a24e3f7..dc3e9fd2c22ebd24d5cf5219caa2fd3cce46d350 100644 --- a/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java @@ -1,11 +1,7 @@ package yi.master.business.message.service.impl; -import java.sql.Timestamp; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import yi.master.business.base.service.impl.BaseServiceImpl; import yi.master.business.message.bean.*; import yi.master.business.message.dao.MessageSceneDao; @@ -17,6 +13,9 @@ import yi.master.business.message.service.MessageSceneService; import yi.master.business.testconfig.bean.GlobalVariable; import yi.master.business.testconfig.dao.GlobalVariableDao; +import java.sql.Timestamp; +import java.util.List; + /** * 报文场景service实现 * @author xuwangcheng @@ -104,4 +103,9 @@ public class MessageSceneServiceImpl extends BaseServiceImpl imple return messageScene.getMessageSceneId(); } + @Override + public void copyScene(List scenes, List copyParams) { + // TODO 场景复制 + } + } diff --git a/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java index 0fd4f7018afbc63930747cffd228293200aeda60..cb2661b666a81c0b9134412c3d5f64af20e0b39b 100644 --- a/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java @@ -10,6 +10,8 @@ import yi.master.business.message.dao.MessageDao; import yi.master.business.message.service.MessageSceneService; import yi.master.business.message.service.MessageService; +import java.util.List; + /** * 接口报文Service接口实现 * @@ -44,6 +46,7 @@ public class MessageServiceImpl extends BaseServiceImpl implements Mess if (createDefaultScene == true) { MessageScene messageScene = new MessageScene(); messageScene.setMessage(message); + messageScene.setProjectInfo(message.getProjectInfo()); messageScene.setSceneName("默认场景"); messageScene.setSystems(message.getSystems()); messageScene.setMark("这是自动创建的测试场景"); @@ -53,4 +56,9 @@ public class MessageServiceImpl extends BaseServiceImpl implements Mess return message.getMessageId(); } + + @Override + public void copyMessage(List messages, List copyParams) { + //TODO 报文信息复制 + } } diff --git a/src/main/java/yi/master/business/message/service/impl/TestSetServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/TestSetServiceImpl.java index 0d733376ab89069cf13ff3ae3fb59c83898890a2..ae2269d9798229bb3d05048f5d8a637df764ad89 100644 --- a/src/main/java/yi/master/business/message/service/impl/TestSetServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/TestSetServiceImpl.java @@ -1,10 +1,7 @@ package yi.master.business.message.service.impl; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import yi.master.business.base.bean.PageModel; import yi.master.business.base.service.impl.BaseServiceImpl; import yi.master.business.message.bean.MessageScene; @@ -13,6 +10,8 @@ import yi.master.business.message.dao.TestSetDao; import yi.master.business.message.service.TestSetService; import yi.master.business.testconfig.bean.TestConfig; +import java.util.List; + /** * * @author xuwangcheng @@ -62,9 +61,9 @@ public class TestSetServiceImpl extends BaseServiceImpl implements Test } @Override - public List getRootSet() { + public List getRootSet(Integer projectId) { - return testSetDao.getRootSet(); + return testSetDao.getRootSet(projectId); } @Override diff --git a/src/main/java/yi/master/business/system/action/ProjectInfoAction.java b/src/main/java/yi/master/business/system/action/ProjectInfoAction.java new file mode 100644 index 0000000000000000000000000000000000000000..bd496cb3951b56ba11ba479825218a019cd1b01c --- /dev/null +++ b/src/main/java/yi/master/business/system/action/ProjectInfoAction.java @@ -0,0 +1,182 @@ +package yi.master.business.system.action; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import yi.master.business.base.action.BaseAction; +import yi.master.business.base.bean.PageModel; +import yi.master.business.base.bean.PageReturnJSONObject; +import yi.master.business.message.bean.InterfaceInfo; +import yi.master.business.message.service.InterfaceInfoService; +import yi.master.business.system.bean.ProjectInfo; +import yi.master.business.system.service.ProjectInfoService; +import yi.master.business.user.bean.User; +import yi.master.constant.SystemConsts; +import yi.master.exception.AppErrorCode; +import yi.master.exception.YiException; +import yi.master.util.FrameworkUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 项目信息 + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 10:30 + */ +@Controller +@Scope("prototype") +public class ProjectInfoAction extends BaseAction { + private static final long serialVersionUID = 1L; + + private ProjectInfoService projectInfoService; + @Autowired + private InterfaceInfoService interfaceInfoService; + + /** + * (1)、添加还是删除用户,0-删除 1-增加
+ * (2)、查询被关联到项目或者没有关联到项目的用户列表,0-已被关联到项目的用户 1-没有被关联到项目的用户
+ */ + private String mode; + private Integer userId; + private Integer userProjectId; + private String copyParams; + private Integer interfaceId; + + @Autowired + public void setProjectInfoService(ProjectInfoService projectInfoService) { + super.setBaseService(projectInfoService); + this.projectInfoService = projectInfoService; + } + + @Override + public String[] prepareList() { + List conditions = new ArrayList(); + conditions.add("t.projectId!=" + SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId()); + this.filterCondition = conditions.toArray(new String[0]); + return this.filterCondition; + } + + + @Override + public String edit() { + if (model.getProjectId() == null) { + model.setCreateUser(FrameworkUtil.getLoginUser()); + } + return super.edit(); + } + + /** + * 新增用户到项目或者删除用户 + * @author xuwangcheng + * @date 2020/7/29 15:05 + * @param + * @return {@link String} + */ + public String addOrDelUser () { + // 关联用户到项目 + if ("1".equals(mode)) { + projectInfoService.addUserToProject(userId == null ? id : userId, model.getProjectId()); + } + + if ("0".equals(mode)) { + projectInfoService.delUserFromProject(userId == null ? id : userId, model.getProjectId()); + } + + return SUCCESS; + } + + /** + * 获取当前项目关联的或者没有关联的用户 + * @author xuwangcheng + * @date 2020/7/29 15:13 + * @param + * @return {@link String} + */ + public String queryUsers () { + Map dt = FrameworkUtil.getDTParameters(User.class); + PageModel pm = projectInfoService.listProjectUsers(userProjectId, start, length + ,(String)dt.get("orderDataName"),(String)dt.get("orderType") + ,(String)dt.get("searchValue"),(List>)dt.get("dataParams"), Integer.parseInt(mode)); + + jsonObject = new PageReturnJSONObject(draw, pm.getRecordCount(), pm.getFilteredCount()); + jsonObject.data(processListData(pm.getDatas())); + + return SUCCESS; + } + + /** + * 查询包含在项目的接口或者不包含的 + * @author xuwangcheng + * @date 2020/8/3 10:56 + * @param + * @return {@link String} + */ + public String queryInterfaces () { + Map dt = FrameworkUtil.getDTParameters(InterfaceInfo.class); + String[] querys = new String[]{ "projectInfo.projectId" + ("1".equals(mode) ? "!=" : "=") + userProjectId }; + PageModel pm = interfaceInfoService.findByPager(start, length + ,(String)dt.get("orderDataName"),(String)dt.get("orderType") + ,(String)dt.get("searchValue"),(List>)dt.get("dataParams") + , querys); + + jsonObject = new PageReturnJSONObject(draw, pm.getRecordCount(), pm.getFilteredCount()); + jsonObject.data(pm.getDatas()); + + return SUCCESS; + } + + /** + * 项目移动接口,复制接口,删除接口操作 + * @author xuwangcheng + * @date 2020/8/3 14:42 + * @param + * @return {@link String} + */ + public String moveOrCopyOrDelInterface () { + if ("0".equals(mode)) { + interfaceInfoService.delete(interfaceId); + } + if ("1".equals(mode)) { + throw new YiException(AppErrorCode.ILLEGAL_HANDLE.getCode(), "该功能还未完成,敬请期待或者去群里催催作者!"); + } + return SUCCESS; + } + + + /** + * 查询用户拥有的项目 + * @author xuwangcheng + * @date 2020/7/29 16:11 + * @param + * @return {@link String} + */ + public String listUserProjects () { + setData(projectInfoService.listUserProjects(FrameworkUtil.getLoginUser().getUserId())); + return SUCCESS; + } + + /*******************************************************************************************************************************/ + public void setMode(String mode) { + this.mode = mode; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public void setUserProjectId(Integer userProjectId) { + this.userProjectId = userProjectId; + } + + public void setCopyParams(String copyParams) { + this.copyParams = copyParams; + } + + public void setInterfaceId(Integer interfaceId) { + this.interfaceId = interfaceId; + } +} diff --git a/src/main/java/yi/master/business/system/bean/ProjectInfo.hbm.xml b/src/main/java/yi/master/business/system/bean/ProjectInfo.hbm.xml new file mode 100644 index 0000000000000000000000000000000000000000..cce408762221aa868f97a0cfd3e46bcf151fd634 --- /dev/null +++ b/src/main/java/yi/master/business/system/bean/ProjectInfo.hbm.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/yi/master/business/system/bean/ProjectInfo.java b/src/main/java/yi/master/business/system/bean/ProjectInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..eec85a4f0a4ededa649cec4241e22aead01879e3 --- /dev/null +++ b/src/main/java/yi/master/business/system/bean/ProjectInfo.java @@ -0,0 +1,159 @@ +package yi.master.business.system.bean; + +import org.apache.struts2.json.annotations.JSON; +import yi.master.annotation.FieldNameMapper; +import yi.master.business.message.bean.InterfaceInfo; +import yi.master.business.user.bean.User; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Set; + +/** + * 项目信息 + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 9:16 + */ +public class ProjectInfo implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer projectId; + private String projectName; + private String details; + private String status; + private User createUser; + private Timestamp createTime; + private String mark; + + private Set users = new HashSet<>(); + private Set interfaces = new HashSet<>(); + + @FieldNameMapper(fieldPath="size(users)", ifSearch=false) + private Integer userNum; + @FieldNameMapper(fieldPath="size(interfaces)", ifSearch = false) + private Integer interfaceNum; + + public ProjectInfo() { + } + + public ProjectInfo(Integer projectId) { + this.projectId = projectId; + } + + public ProjectInfo(Integer projectId, String projectName, String details, String status, User createUser, Timestamp createTime, String mark) { + this.projectId = projectId; + this.projectName = projectName; + this.details = details; + this.status = status; + this.createUser = createUser; + this.createTime = createTime; + this.mark = mark; + } + + public void setUsers(Set users) { + this.users = users; + } + + @JSON(serialize = false) + public Set getUsers() { + return users; + } + + public Integer getProjectId() { + return projectId; + } + + public void setProjectId(Integer projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getDetails() { + return details; + } + + public void setDetails(String details) { + this.details = details; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public User getCreateUser() { + return createUser; + } + + public void setCreateUser(User createUser) { + this.createUser = createUser; + } + + @JSON(format="yyyy-MM-dd HH:mm:ss") + public Timestamp getCreateTime() { + return createTime; + } + + public void setCreateTime(Timestamp createTime) { + this.createTime = createTime; + } + + public String getMark() { + return mark; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public void setUserNum(Integer userNum) { + this.userNum = userNum; + } + + public Integer getUserNum() { + return this.users.size(); + } + + public void setInterfaceNum(Integer interfaceNum) { + this.interfaceNum = interfaceNum; + } + + public Integer getInterfaceNum() { + return this.interfaces.size(); + } + + public void setInterfaces(Set interfaces) { + this.interfaces = interfaces; + } + + @JSON(serialize = false) + public Set getInterfaces() { + return interfaces; + } + + @Override + public String toString() { + return "ProjectInfo{" + + "projectId=" + projectId + + ", projectName='" + projectName + '\'' + + ", details='" + details + '\'' + + ", status='" + status + '\'' + + ", createUser=" + createUser + + ", createTime=" + createTime + + ", mark='" + mark + '\'' + + '}'; + } +} diff --git a/src/main/java/yi/master/business/system/dao/ProjectInfoDao.java b/src/main/java/yi/master/business/system/dao/ProjectInfoDao.java new file mode 100644 index 0000000000000000000000000000000000000000..5f3c34b252b916e2f1bf98768caceb2a181f2ecd --- /dev/null +++ b/src/main/java/yi/master/business/system/dao/ProjectInfoDao.java @@ -0,0 +1,63 @@ +package yi.master.business.system.dao; + +import yi.master.business.base.bean.PageModel; +import yi.master.business.base.dao.BaseDao; +import yi.master.business.system.bean.ProjectInfo; +import yi.master.business.user.bean.User; + +import java.util.List; + +/** + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 10:17 + */ +public interface ProjectInfoDao extends BaseDao { + /** + * 关联用户到对应项目 + * @author xuwangcheng + * @date 2020/7/29 11:07 + * @param userId userId + * @param projectId projectId + * @return + */ + void addUserToProject (Integer userId, Integer projectId); + /** + * 取消关联到项目的用户 + * @author xuwangcheng + * @date 2020/7/29 11:07 + * @param userId userId + * @param projectId projectId + * @return + */ + void delUserFromProject (Integer userId, Integer projectId); + + /** + * 分页查询已经给关联或者没有关联指定项目的用户列表 + * @author xuwangcheng + * @date 2020/7/29 11:22 + * @param projectId projectId + * @param dataNum dataNum + * @param pageSize pageSize + * @param orderDataName orderDataName + * @param orderType orderType + * @param searchValue searchValue + * @param dataParams dataParams + * @param mode mode + * @param filterCondition filterCondition + * @return {@link PageModel} + */ + PageModel listProjectUsers (Integer projectId, int dataNum, int pageSize, String orderDataName, String orderType + , String searchValue, List> dataParams, int mode, String ...filterCondition); + + + /** + * 查询用户可供选择的项目 + * @author xuwangcheng + * @date 2020/7/29 11:31 + * @param userId userId + * @return {@link List} + */ + List listUserProjects (Integer userId); +} diff --git a/src/main/java/yi/master/business/system/dao/impl/ProjectInfoDaoImpl.java b/src/main/java/yi/master/business/system/dao/impl/ProjectInfoDaoImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..76e241c733bbe2cd24100c7adb94c636934688c5 --- /dev/null +++ b/src/main/java/yi/master/business/system/dao/impl/ProjectInfoDaoImpl.java @@ -0,0 +1,118 @@ +package yi.master.business.system.dao.impl; + +import org.springframework.stereotype.Repository; +import yi.master.business.base.bean.PageModel; +import yi.master.business.base.dao.impl.BaseDaoImpl; +import yi.master.business.message.bean.InterfaceInfo; +import yi.master.business.system.bean.ProjectInfo; +import yi.master.business.system.dao.ProjectInfoDao; +import yi.master.business.system.enums.ProjectStatus; +import yi.master.business.user.bean.User; +import yi.master.constant.SystemConsts; + +import java.util.List; + +/** + * 项目信息 + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 10:18 + */ +@Repository("projectInfoDao") +public class ProjectInfoDaoImpl extends BaseDaoImpl implements ProjectInfoDao { + + + @Override + public void addUserToProject(Integer userId, Integer projectId) { + String sql = "insert into at_project_user (project_id, user_id) values (:projectId, :userId)"; + getSession().createSQLQuery(sql).setInteger("projectId", projectId).setInteger("userId", userId).executeUpdate(); + } + + @Override + public void delUserFromProject(Integer userId, Integer projectId) { + String sql = "delete from at_project_user where user_id = :userId and project_id = :projectId"; + getSession().createSQLQuery(sql).setInteger("projectId", projectId).setInteger("userId", userId).executeUpdate(); + } + + @Override + public PageModel listProjectUsers(Integer projectId, int dataNum, int pageSize, String orderDataName, String orderType, String searchValue, List> dataParams, int mode, String... filterCondition) { + PageModel pm = new PageModel<>(orderDataName, orderType, searchValue, dataParams, dataNum, pageSize); + StringBuilder hql = new StringBuilder("from User u1 where"); + //mode=0 查询存在的 mode=1查询不存在的 + hql.append(mode == 1 ? " not" : ""); + + hql.append(" exists (select 1 from User u2 join u2.projects s " + + "where s.projectId=" + projectId + " and u1.userId=u2.userId) "); + LOGGER.info("The query HQL String: \n" + hql.toString()); + pm.setRecordCount(getHqlCount("select count(u1) " + hql.toString())); + + //增加搜索条件 + if (searchValue != "") { + hql.append(" and ("); + int i = 1; + for (List ss : dataParams) { + i++; + String columnName = ss.get(0); + + if (ss.size() == 1) { + hql.append(columnName + " like '%" + searchValue + "%'"); + } + + if (ss.size() > 1) { + for (int m = 1;m < ss.size();m ++) { + hql.append(columnName + " like '%" + ss.get(m) + "%'"); + if (m + 1 < ss.size()) { + hql.append(" or "); + } + } + } + + if (i <= dataParams.size()) { + hql.append(" or "); + } + } + hql.append(")"); + } + + //增加自定义的条件 + if (filterCondition != null && filterCondition.length > 0) { + hql.append(" and "); + + int i = 1; + for (String s : filterCondition) { + hql.append(s); + i++; + if (i <= filterCondition.length) { + hql.append(" and "); + } + } + } + + LOGGER.info("The query HQL String: \n" + hql.toString()); + pm.setFilteredCount(getHqlCount("select count(u1) " + hql.toString())); + + //增加排序 + if (!orderDataName.isEmpty()) { + hql.append(" order by " + orderDataName + " " + orderType); + } + + LOGGER.info("The query HQL String: \n" + hql.toString()); + + pm.setDatas(getSession().createQuery(hql.toString()) + .setFirstResult(dataNum) + .setMaxResults(pageSize) + .setCacheable(true).list()); + + return pm; + } + + @Override + public List listUserProjects(Integer userId) { + String hql = "from ProjectInfo p1 where (exists (select 1 from ProjectInfo p2 join p2.users u " + + "where u.userId=:userId and p1.projectId=p2.projectId) or p1.createUser.userId=:userId or p1.projectId=:defaultProjectId) and p1.status!=" + ProjectStatus.DISABLED.getStatus(); + LOGGER.info("The query HQL String: \n" + hql.toString()); + + return getSession().createQuery(hql).setInteger("userId", userId).setInteger("defaultProjectId", SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId()).setCacheable(true).list(); + } +} diff --git a/src/main/java/yi/master/business/system/enums/ProjectStatus.java b/src/main/java/yi/master/business/system/enums/ProjectStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..fe0dded7d8d64d9eb80fd05fd09701090ac3a1a4 --- /dev/null +++ b/src/main/java/yi/master/business/system/enums/ProjectStatus.java @@ -0,0 +1,53 @@ +package yi.master.business.system.enums; + +/** + * 项目状态 + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 9:24 + */ +public enum ProjectStatus { + /** + * 0 - 未开始 + */ + NOT_STARTED("0"), + /** + * 1 - 设计中 + */ + UNDER_DESIGN("1"), + /** + * 2 - 开发中 + */ + DEVELOPING("2"), + /** + * 3 - 测试中 + */ + TESTING("3"), + /** + * 4 - 已上线 + */ + ONLINE("4"), + /** + * 5 - 验收测试 + */ + UAT("5"), + /** + * 6 - 已完成 + */ + FINISHED("6"), + /** + * 7 - 禁用 + */ + DISABLED("7"); + + private String status; + + ProjectStatus (String status) { + this.status = status; + } + + public String getStatus() { + return status; + } +} diff --git a/src/main/java/yi/master/business/system/service/ProjectInfoService.java b/src/main/java/yi/master/business/system/service/ProjectInfoService.java new file mode 100644 index 0000000000000000000000000000000000000000..0c48e29e628c0b2f11c970b29e84ed1201ad18c2 --- /dev/null +++ b/src/main/java/yi/master/business/system/service/ProjectInfoService.java @@ -0,0 +1,63 @@ +package yi.master.business.system.service; + +import yi.master.business.base.bean.PageModel; +import yi.master.business.base.service.BaseService; +import yi.master.business.system.bean.ProjectInfo; +import yi.master.business.user.bean.User; + +import java.util.List; + +/** + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 10:21 + */ +public interface ProjectInfoService extends BaseService { + /** + * 关联用户到对应项目 + * @author xuwangcheng + * @date 2020/7/29 11:07 + * @param userId userId + * @param projectId projectId + * @return + */ + void addUserToProject (Integer userId, Integer projectId); + /** + * 取消关联到项目的用户 + * @author xuwangcheng + * @date 2020/7/29 11:07 + * @param userId userId + * @param projectId projectId + * @return + */ + void delUserFromProject (Integer userId, Integer projectId); + + /** + * 分页查询已经给关联或者没有关联指定项目的用户列表 + * @author xuwangcheng + * @date 2020/7/29 11:22 + * @param projectId projectId + * @param dataNum dataNum + * @param pageSize pageSize + * @param orderDataName orderDataName + * @param orderType orderType + * @param searchValue searchValue + * @param dataParams dataParams + * @param mode mode + * @param filterCondition filterCondition + * @return {@link PageModel} + */ + PageModel listProjectUsers (Integer projectId, int dataNum, int pageSize, String orderDataName, String orderType + , String searchValue, List> dataParams, int mode, String ...filterCondition); + + + /** + * 查询用户可供选择的项目 + * @author xuwangcheng + * @date 2020/7/29 11:31 + * @param userId userId + * @return {@link List} + */ + List listUserProjects (Integer userId); +} diff --git a/src/main/java/yi/master/business/system/service/impl/ProjectInfoServiceImpl.java b/src/main/java/yi/master/business/system/service/impl/ProjectInfoServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..27aabc544b68034a86bd421cf4893e122397e5fd --- /dev/null +++ b/src/main/java/yi/master/business/system/service/impl/ProjectInfoServiceImpl.java @@ -0,0 +1,99 @@ +package yi.master.business.system.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import yi.master.business.base.bean.PageModel; +import yi.master.business.base.service.impl.BaseServiceImpl; +import yi.master.business.system.bean.ProjectInfo; +import yi.master.business.system.dao.ProjectInfoDao; +import yi.master.business.system.service.ProjectInfoService; +import yi.master.business.user.bean.User; +import yi.master.exception.AppErrorCode; +import yi.master.exception.YiException; + +import java.util.List; + +/** + * @author xuwangcheng14@163.com + * @version 1.0.0 + * @description + * @date 2020/7/28 10:22 + */ +@Service("projectInfoService") +public class ProjectInfoServiceImpl extends BaseServiceImpl implements ProjectInfoService { + + private ProjectInfoDao projectInfoDao; + + @Autowired + public void setProjectInfoDao(ProjectInfoDao projectInfoDao) { + super.setBaseDao(projectInfoDao); + this.projectInfoDao = projectInfoDao; + } + + @Override + public void addUserToProject(Integer userId, Integer projectId) { + projectInfoDao.addUserToProject(userId, projectId); + } + + @Override + public void delUserFromProject(Integer userId, Integer projectId) { + projectInfoDao.delUserFromProject(userId, projectId); + } + + @Override + public PageModel listProjectUsers(Integer projectId, int dataNum, int pageSize, String orderDataName, String orderType, String searchValue, List> dataParams, int mode, String... filterCondition) { + return projectInfoDao.listProjectUsers(projectId, dataNum, pageSize, orderDataName, orderType, searchValue, dataParams, mode, filterCondition); + } + + @Override + public List listUserProjects(Integer userId) { + return projectInfoDao.listUserProjects(userId); + } + + @Override + public void delete(int id) { + // 验证是否有关联的信息,包括接口、报文、场景、测试集、接口Mock、接口探测、接口性能测试、定时任务、测试报告、测试集、组合场景 + String hql = "select count(*) from InterfaceInfo where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from Message where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from MessageScene where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from ComplexScene where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from InterfaceMock where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from InterfaceProbe where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from PerformanceTestConfig where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from AutoTask where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from TestReport where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + hql = "select count(*) from TestSet where projectInfo.projectId=" + id; + if (projectInfoDao.getHqlCount(hql) > 0) { + throw new YiException(AppErrorCode.PROJECT_CAN_NOT_DELETE); + } + + super.delete(id); + } +} diff --git a/src/main/java/yi/master/business/user/bean/User.hbm.xml b/src/main/java/yi/master/business/user/bean/User.hbm.xml index 2dc90bd1d90d010d91be04bc4884d6bb6ed2939b..190387a3196a4a32ea9c1dbec43a24b49aab29d3 100644 --- a/src/main/java/yi/master/business/user/bean/User.hbm.xml +++ b/src/main/java/yi/master/business/user/bean/User.hbm.xml @@ -40,5 +40,9 @@ + + + + diff --git a/src/main/java/yi/master/business/user/bean/User.java b/src/main/java/yi/master/business/user/bean/User.java index 1a3f176f6309916e790a93dc7e5081eef19621cc..43b934bc02135a10c8c3ab45a329cd23c6a1e26a 100644 --- a/src/main/java/yi/master/business/user/bean/User.java +++ b/src/main/java/yi/master/business/user/bean/User.java @@ -1,12 +1,14 @@ package yi.master.business.user.bean; +import org.apache.struts2.json.annotations.JSON; +import yi.master.annotation.FieldRealSearch; +import yi.master.business.system.bean.ProjectInfo; + import java.io.Serializable; import java.sql.Timestamp; import java.util.Date; - -import org.apache.struts2.json.annotations.JSON; - -import yi.master.annotation.FieldRealSearch; +import java.util.HashSet; +import java.util.Set; /** @@ -72,6 +74,11 @@ public class User implements Serializable { * 登录标识 */ private String loginIdentification; + + /** + * 所属项目 + */ + private Set projects = new HashSet<>(); // Constructors @@ -186,7 +193,16 @@ public class User implements Serializable { return realName; } - @Override + public void setProjects(Set projects) { + this.projects = projects; + } + + @JSON(serialize = false) + public Set getProjects() { + return projects; + } + + @Override public String toString() { return "User [userId=" + userId + ", username=" + username + ", createTime=" + createTime + ", status=" + status + ", lastLoginTime=" + lastLoginTime diff --git a/src/main/java/yi/master/constant/SystemConsts.java b/src/main/java/yi/master/constant/SystemConsts.java index 4b50a71571c2c76239c04e28479aa156fc30685b..c49f2b108c793fe27a311137e3dab737cd1d00f0 100644 --- a/src/main/java/yi/master/constant/SystemConsts.java +++ b/src/main/java/yi/master/constant/SystemConsts.java @@ -13,7 +13,7 @@ public interface SystemConsts { /** * 当前版本号 */ - String VERSION = "1.0.5"; + String VERSION = "1.1.0"; /** @@ -119,7 +119,11 @@ public interface SystemConsts { /** * 特殊参数的ID:Array对象 对应外层 */ - PARAMETER_OUTER_ARRAY(4); + PARAMETER_OUTER_ARRAY(4), + /** + * 默认项目ID + */ + DEFAULT_PROJECT_ID(1); private int id; diff --git a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java index c846927b612adb672f245ff349cc160935ecf217..7d980dfd5279037e0079d15e53e285ff34b5de8c 100644 --- a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java +++ b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java @@ -12,6 +12,7 @@ import yi.master.business.message.bean.*; import yi.master.business.message.enums.ComplexSceneSuccessFlag; import yi.master.business.message.enums.ComplexSceneTestClientType; import yi.master.business.message.service.*; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.testconfig.bean.TestConfig; import yi.master.business.testconfig.enums.TestRunType; @@ -499,7 +500,7 @@ public class MessageAutoTest { * @param guid guid 唯一测试标识:外包API调用时才会有 * @return {@link int[]} */ - public int[] batchTest (User user, Integer setId, String testMark, String guid) { + public int[] batchTest (User user, Integer setId, String testMark, String guid) { List scenes = null; List complexScenes = null; @@ -532,6 +533,11 @@ public class MessageAutoTest { //测试报告 final TestReport report = new TestReport(); + if (set != null) { + report.setProjectInfo(set.getProjectInfo()); + } else { + report.setProjectInfo(new ProjectInfo(SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId())); + } report.setUser(user); report.setFinishFlag(SystemConsts.FinishedFlag.N.name()); report.setTestMode(String.valueOf(setId)); diff --git a/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java b/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java index 713eff097091e9797c7e8d8b155dfffdff13c851..ff8b50a9e8b7e6a9a314ec97826b96a32fdc044e 100644 --- a/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java +++ b/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java @@ -62,6 +62,8 @@ public class PerformanceTestObject { private static Integer object_id = 0; private Integer objectId; + + private Integer projectId; private User testUser; @@ -131,6 +133,7 @@ public class PerformanceTestObject { super(); this.config = config; this.testUser = testUser; + this.projectId = config.getProjectInfo().getProjectId(); this.objectId = ++object_id; CacheUtil.addPtObject(testUser.getUserId(), this); } @@ -448,8 +451,15 @@ public class PerformanceTestObject { public boolean isRunning() { return running; } - - + + public void setProjectId(Integer projectId) { + this.projectId = projectId; + } + + public Integer getProjectId() { + return projectId; + } + /** * 解析参数化文件 * @param parameterizedFile txt格式化的参数化文件,并且指定了分隔符 diff --git a/src/main/java/yi/master/exception/AppErrorCode.java b/src/main/java/yi/master/exception/AppErrorCode.java index e950e1679b6cbef34d6588ff11ba16d5190ff756..a27a5fac55801deadc90d2cb19314cb87fe531cf 100644 --- a/src/main/java/yi/master/exception/AppErrorCode.java +++ b/src/main/java/yi/master/exception/AppErrorCode.java @@ -76,7 +76,10 @@ public enum AppErrorCode { MOCK_URL_EXIST(360002, "已存在Url路径为{}的Mock信息,请重新选择或者修改接口场景中的请求路径!"), //场景相关 - SCENE_INFO_NOT_EXIST(370001, "测试场景不存在") + SCENE_INFO_NOT_EXIST(370001, "测试场景不存在"), + + //项目相关 + PROJECT_CAN_NOT_DELETE(380001, "该项目下仍有关联信息,请手动删除这些信息或者将该项目设置为禁用状态!") ; private Integer code; diff --git a/src/main/java/yi/master/interceptor/InterceptorAction.java b/src/main/java/yi/master/interceptor/InterceptorAction.java index cfd2d10c027c69edee4c551ed298de4fa6e3afbd..b9a6636e14f9bfc9975b8fafa03bed2fda3d5425 100644 --- a/src/main/java/yi/master/interceptor/InterceptorAction.java +++ b/src/main/java/yi/master/interceptor/InterceptorAction.java @@ -52,7 +52,6 @@ public class InterceptorAction extends ActionSupport { logger.error("系统内部错误:\n" + exDetails); jsonObject.setReturnCode(AppErrorCode.INTERNAL_SERVER_ERROR.getCode()); jsonObject.setMsg(AppErrorCode.INTERNAL_SERVER_ERROR.getMsg()); - jsonObject.data(exDetails); return SUCCESS; } diff --git a/src/main/java/yi/master/listener/VersionUpdateUtil.java b/src/main/java/yi/master/listener/VersionUpdateUtil.java index 1a93b5175dbcc7af4ce242a7e95ace2af3e4ac3c..18878d9e86879c17ef9186cb0395dc3b2e0f9ee7 100644 --- a/src/main/java/yi/master/listener/VersionUpdateUtil.java +++ b/src/main/java/yi/master/listener/VersionUpdateUtil.java @@ -51,6 +51,7 @@ public class VersionUpdateUtil { ALL_VERSION_LIST.add("1.0.3"); ALL_VERSION_LIST.add("1.0.4"); ALL_VERSION_LIST.add("1.0.5"); + ALL_VERSION_LIST.add("1.1.0"); } /** diff --git a/src/main/java/yi/master/util/excel/ImportInterfaceInfo.java b/src/main/java/yi/master/util/excel/ImportInterfaceInfo.java index 22a9624683261e2772cac4e0f4b0edbb07854a27..fa4ee1ee7e85fce63db4584779fa695e9e47b428 100644 --- a/src/main/java/yi/master/util/excel/ImportInterfaceInfo.java +++ b/src/main/java/yi/master/util/excel/ImportInterfaceInfo.java @@ -12,7 +12,10 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import yi.master.business.message.bean.*; import yi.master.business.message.service.*; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.user.bean.User; +import yi.master.constant.MessageKeys; +import yi.master.constant.SystemConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.coretest.message.protocol.TestClient; import yi.master.util.FrameworkUtil; @@ -38,7 +41,10 @@ public class ImportInterfaceInfo { * @param path * @return */ - public static Map importToDB (String path) { + public static Map importToDB (String path, Integer projectId) { + if (projectId == null) { + projectId = SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId(); + } List infos = importValue(path); Map result = new HashMap(); @@ -73,6 +79,7 @@ public class ImportInterfaceInfo { User user = FrameworkUtil.getLoginUser(); info.setUser(user); info.setLastModifyUser(user.getRealName()); + info.setProjectInfo(new ProjectInfo(projectId)); //解析参数 MessageParse parse = MessageParse.getParseInstance(info.getMessageType()); @@ -92,6 +99,7 @@ public class ImportInterfaceInfo { message.setMessageType(info.getMessageType()); message.setRequestUrl(""); message.setStatus("0"); + message.setProjectInfo(new ProjectInfo(projectId)); } MessageScene scene = null; @@ -101,6 +109,7 @@ public class ImportInterfaceInfo { scene.setCreateTime(new Timestamp(System.currentTimeMillis())); scene.setSceneName(info.getCreateScene()); scene.setMark(""); + scene.setProjectInfo(new ProjectInfo(projectId)); } //开始进行数据库保存 @@ -175,8 +184,8 @@ public class ImportInterfaceInfo { return obj; } - if (!"SL".equalsIgnoreCase(info.getInterfaceType()) && !"CX".equalsIgnoreCase(info.getInterfaceType())) { - info.setInterfaceType("CX"); + if (!MessageKeys.InterfaceBusiType.SL.name().equalsIgnoreCase(info.getInterfaceType()) && !MessageKeys.InterfaceBusiType.CX.name().equalsIgnoreCase(info.getInterfaceType())) { + info.setInterfaceType(MessageKeys.InterfaceBusiType.CX.name()); tigs.append("接口类型不正确,已默认设置为查询类型(CX);"); } diff --git a/src/main/java/yi/master/util/excel/ImportMessage.java b/src/main/java/yi/master/util/excel/ImportMessage.java index 3fc2fc7c5d6b9e43db15016b3d3559d5e698080e..1734632726c45daba4bf53a97a5b0ae9f90f75ed 100644 --- a/src/main/java/yi/master/util/excel/ImportMessage.java +++ b/src/main/java/yi/master/util/excel/ImportMessage.java @@ -1,14 +1,5 @@ package yi.master.util.excel; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; @@ -19,21 +10,27 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; - -import yi.master.business.message.bean.InterfaceInfo; -import yi.master.business.message.bean.Message; -import yi.master.business.message.bean.MessageScene; -import yi.master.business.message.bean.Parameter; -import yi.master.business.message.bean.TestData; +import yi.master.business.message.bean.*; import yi.master.business.message.service.MessageSceneService; import yi.master.business.message.service.MessageService; import yi.master.business.message.service.TestDataService; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.GlobalVariable; import yi.master.business.testconfig.service.GlobalVariableService; import yi.master.business.user.bean.User; +import yi.master.constant.SystemConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.util.FrameworkUtil; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * 从指定excel中读取对象内容 * @author xuwangcheng @@ -50,8 +47,10 @@ public class ImportMessage { * @param path * @return */ - public static Map importToDB (String path, InterfaceInfo interfaceInfo) { - + public static Map importToDB (String path, InterfaceInfo interfaceInfo, Integer projectId) { + if (projectId == null) { + projectId = SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId(); + } MessageService messageService = (MessageService) FrameworkUtil.getSpringBean("messageService"); MessageSceneService messageSceneService = (MessageSceneService) FrameworkUtil.getSpringBean("messageSceneService"); TestDataService testDataService = (TestDataService) FrameworkUtil.getSpringBean("testDataService"); @@ -84,6 +83,7 @@ public class ImportMessage { info.setUser(user); info.setLastModifyUser(user.getRealName()); info.setInterfaceInfo(interfaceInfo); + info.setProjectInfo(new ProjectInfo(projectId)); MessageParse parse = MessageParse.getParseInstance(info.getMessageType()); info.setComplexParameter(parse.parseMessageToObject(info.getParameterJson(), new ArrayList(interfaceInfo.getParameters()))); @@ -99,6 +99,7 @@ public class ImportMessage { scene.setSceneName(info.getCreateMessageScene()); scene.setMessage(info); scene.setMark(""); + scene.setProjectInfo(new ProjectInfo(projectId)); scene.setMessageSceneId(messageSceneService.save(scene)); //设置一条默认数据 diff --git a/src/main/java/yi/master/util/excel/ImportMessageScene.java b/src/main/java/yi/master/util/excel/ImportMessageScene.java index 3a3ae346b13c829d0bbf8faa695da18cdd445187..2cb9c19847293b05fc723164b0baa168607f92c8 100644 --- a/src/main/java/yi/master/util/excel/ImportMessageScene.java +++ b/src/main/java/yi/master/util/excel/ImportMessageScene.java @@ -1,14 +1,5 @@ package yi.master.util.excel; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; @@ -19,7 +10,6 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; - import yi.master.business.message.bean.Message; import yi.master.business.message.bean.MessageScene; import yi.master.business.message.bean.SceneValidateRule; @@ -27,10 +17,21 @@ import yi.master.business.message.bean.TestData; import yi.master.business.message.service.MessageSceneService; import yi.master.business.message.service.SceneValidateRuleService; import yi.master.business.message.service.TestDataService; +import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.GlobalVariable; import yi.master.business.testconfig.service.GlobalVariableService; +import yi.master.constant.SystemConsts; import yi.master.util.FrameworkUtil; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * 从指定excel中读取对象内容 * @author xuwangcheng @@ -47,8 +48,11 @@ public class ImportMessageScene { * @param path * @return */ - public static Map importToDB (String path, Message message) { - + public static Map importToDB (String path, Message message, Integer projectId) { + if (projectId == null) { + projectId = SystemConsts.DefaultObjectId.DEFAULT_PROJECT_ID.getId(); + } + MessageSceneService messageSceneService = (MessageSceneService) FrameworkUtil.getSpringBean("messageSceneService"); TestDataService testDataService = (TestDataService) FrameworkUtil.getSpringBean("testDataService"); SceneValidateRuleService sceneValidateRuleService = (SceneValidateRuleService) FrameworkUtil.getSpringBean("sceneValidateRuleService"); @@ -75,6 +79,7 @@ public class ImportMessageScene { try { info.setCreateTime(new Timestamp(System.currentTimeMillis())); info.setMessage(message); + info.setProjectInfo(new ProjectInfo(projectId)); //保存场景信息 到数据库 info.setMessageSceneId(messageSceneService.save(info)); diff --git a/src/main/resources/struts.xml b/src/main/resources/struts.xml index 1b2b9890790f3b1fe2610e81a571a69cde9b818f..c2516f0dec57fda3ba3aacfaaea30807785c5d4b 100644 --- a/src/main/resources/struts.xml +++ b/src/main/resources/struts.xml @@ -268,6 +268,16 @@ checkNameFlag + + + + + + + jsonObject + false + + diff --git a/src/main/resources/update/1.1.0 b/src/main/resources/update/1.1.0 new file mode 100644 index 0000000000000000000000000000000000000000..d0ea930049cb44c72e3e9cb29c32bcf4c3fc5463 --- /dev/null +++ b/src/main/resources/update/1.1.0 @@ -0,0 +1,53 @@ +CREATE TABLE `at_project_info` (`project_id` int(11) NOT NULL AUTO_INCREMENT,`project_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,`details` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,`user_id` int(11) NULL DEFAULT NULL,`create_time` datetime(0) NULL DEFAULT NULL,`mark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,PRIMARY KEY (`project_id`) USING BTREE,UNIQUE INDEX `project_name`(`project_name`) USING BTREE,INDEX `at_project_fk_user_id`(`user_id`) USING BTREE,CONSTRAINT `at_project_fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `at_user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Compact; +CREATE TABLE `at_project_user` (`project_id` int(11) NOT NULL,`user_id` int(11) NOT NULL,PRIMARY KEY (`project_id`, `user_id`) USING BTREE,INDEX `at_project_user_fk_user_id`(`user_id`) USING BTREE,CONSTRAINT `at_project_user_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE CASCADE ON UPDATE RESTRICT,CONSTRAINT `at_project_user_fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `at_user` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Compact; +ALTER TABLE `at_complex_scene` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '关联项目' AFTER `mark`; +ALTER TABLE `at_complex_scene` ADD CONSTRAINT `at_complex_scene_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_complex_scene` ADD INDEX `at_complex_scene_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_interface_info` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '关联项目' AFTER `mark`; +ALTER TABLE `at_interface_info` ADD CONSTRAINT `at_interface_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_interface_info` ADD INDEX `at_interface_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_interface_mock` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '项目ID' AFTER `mark`; +ALTER TABLE `at_interface_mock` ADD CONSTRAINT `at_interface_mock_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_interface_mock` ADD INDEX `at_interface_mock_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_interface_probe` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '项目ID' AFTER `probe_config_json`; +ALTER TABLE `at_interface_probe` ADD CONSTRAINT `at_interface_probe_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE CASCADE ON UPDATE RESTRICT; +ALTER TABLE `at_interface_probe` ADD INDEX `at_interface_probe_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_message` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '关联项目ID' AFTER `process_parameter`; +ALTER TABLE `at_message` ADD CONSTRAINT `at_message_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_message` ADD INDEX `at_message_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_message_scene` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '项目ID' AFTER `create_time`; +ALTER TABLE `at_message_scene` ADD CONSTRAINT `at_message_scene_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_message_scene` ADD INDEX `at_message_scene_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_performance_test_config` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '项目ID' AFTER `mark`; +ALTER TABLE `at_performance_test_config` ADD CONSTRAINT `ptc_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_performance_test_config` ADD INDEX `project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_set_scene` DROP FOREIGN KEY `at_set_scene_fk_set_id`; +ALTER TABLE `at_set_scene` ADD CONSTRAINT `at_set_scene_fk_set_id` FOREIGN KEY (`set_id`) REFERENCES `at_test_set` (`set_id`) ON DELETE CASCADE ON UPDATE RESTRICT; +ALTER TABLE `at_task` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '关联项目ID' AFTER `mail_notify`; +ALTER TABLE `at_task` ADD CONSTRAINT `at_task_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_task` ADD INDEX `at_task_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_test_report` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '项目ID' AFTER `guid`; +ALTER TABLE `at_test_report` ADD CONSTRAINT `at_test_report_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_test_report` ADD INDEX `at_test_report_fk_project_id`(`project_id`) USING BTREE; +ALTER TABLE `at_test_result` KEY_BLOCK_SIZE = 0; +ALTER TABLE `at_test_set` ADD COLUMN `project_id` int(11) NULL DEFAULT NULL COMMENT '项目ID' AFTER `mark`; +ALTER TABLE `at_test_set` ADD CONSTRAINT `at_test_set_fk_project_id` FOREIGN KEY (`project_id`) REFERENCES `at_project_info` (`project_id`) ON DELETE RESTRICT ON UPDATE RESTRICT; +ALTER TABLE `at_test_set` ADD INDEX `at_test_set_fk_project_id`(`project_id`) USING BTREE; +INSERT INTO `at_busi_menu_info`(`menu_id`, `menu_name`, `menu_url`, `icon_name`, `parent_id`, `node_level`, `seq`, `status`, `create_time`, `create_user`, `mark`) VALUES (55, '项目管理', 'resource/system/projectInfo.html', '', 49, 2, 1, '1', '2020-07-28 14:19:47', 1, ''); +INSERT INTO `at_operation_interface`(`op_id`, `op_name`, `call_name`, `is_parent`, `op_type`, `mark`, `status`, `parent_op_id`, `permission_mark`, `page_name`) VALUES (1139, '项目管理', 'project', 'true', NULL, '', '0', 13, '', ''); +INSERT INTO `at_operation_interface`(`op_id`, `op_name`, `call_name`, `is_parent`, `op_type`, `mark`, `status`, `parent_op_id`, `permission_mark`, `page_name`) VALUES (1140, '删除项目', 'project-del', 'false', NULL, '', '0', 1139, '.object-del', 'projectInfo'); +INSERT INTO `at_operation_interface`(`op_id`, `op_name`, `call_name`, `is_parent`, `op_type`, `mark`, `status`, `parent_op_id`, `permission_mark`, `page_name`) VALUES (1141, '新增编辑项目信息', 'project-edit', 'false', NULL, '', '0', 1139, '.object-edit', 'projectInfo'); +INSERT INTO `at_operation_interface`(`op_id`, `op_name`, `call_name`, `is_parent`, `op_type`, `mark`, `status`, `parent_op_id`, `permission_mark`, `page_name`) VALUES (1142, '项目列表', 'project-list', 'false', NULL, '', '0', 1139, '', ''); +INSERT INTO `at_operation_interface`(`op_id`, `op_name`, `call_name`, `is_parent`, `op_type`, `mark`, `status`, `parent_op_id`, `permission_mark`, `page_name`) VALUES (1143, '管理项目成员', 'project-addOrDelUser', 'false', NULL, '', '0', 1139, '', ''); +INSERT INTO `at_role_menu`(`role_Id`, `menu_id`) VALUES (1, 55); +INSERT INTO `at_project_info`(`project_id`, `project_name`, `details`, `status`, `user_id`, `create_time`, `mark`) VALUES (1, '默认项目', '所有未分类到指定项目的内容,所有人都有访问权限', '6', 1, '2020-07-31 16:36:44', ''); +update at_complex_scene set project_id = 1; +update at_interface_info set project_id = 1; +update at_message set project_id = 1; +update at_interface_mock set project_id = 1; +update at_interface_probe set project_id = 1; +update at_message_scene set project_id = 1; +update at_performance_test_config set project_id = 1; +update at_task set project_id = 1; +update at_test_report set project_id = 1; +update at_test_set set project_id = 1; \ No newline at end of file diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 5021f8a1aa36b23784680513fae645d4d10eb2aa..b4916b9bf646c5f93802063680305b33fe607beb 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -28,7 +28,7 @@