From b6b7cb1bce540c97eeecdcb38627a55896cbc9b7 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Mon, 27 Jul 2020 11:21:33 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=9B=86=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=A4=AA=E9=95=BF=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/resource/message/setCategoryList.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/webapp/resource/message/setCategoryList.html b/src/main/webapp/resource/message/setCategoryList.html index f3dcfb7..d76384c 100644 --- a/src/main/webapp/resource/message/setCategoryList.html +++ b/src/main/webapp/resource/message/setCategoryList.html @@ -22,6 +22,11 @@ + -- Gitee From c90f8fac3068cae0c350737f6f3a94ea32d4f2bf Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Mon, 27 Jul 2020 17:49:28 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=BB=86=E5=BE=AE=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/update/1.0.6 | 0 src/main/webapp/login.html | 2 +- update.md | 5 +++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/update/1.0.6 diff --git a/src/main/resources/update/1.0.6 b/src/main/resources/update/1.0.6 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/login.html b/src/main/webapp/login.html index dfeb5f0..b49591f 100644 --- a/src/main/webapp/login.html +++ b/src/main/webapp/login.html @@ -61,7 +61,7 @@ - + diff --git a/update.md b/update.md index 80be661..f20700f 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,8 @@ +### v1.0.6 +#### 2020.7.27 +- 修复:测试集名称过长不显示的问题; + + ### v1.0.5 #### 2020.7.13 - 修复:报文中URL格式的参数保存顺序不正确的问题; -- Gitee From 1a7ee954fe5f58dd297d326542af64a349b1e1bd Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Wed, 29 Jul 2020 22:16:50 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../advanced/bean/InterfaceMock.hbm.xml | 3 + .../business/advanced/bean/InterfaceMock.java | 24 +- .../advanced/bean/InterfaceProbe.hbm.xml | 3 + .../advanced/bean/InterfaceProbe.java | 27 +- .../bean/PerformanceTestConfig.hbm.xml | 3 + .../advanced/bean/PerformanceTestConfig.java | 26 +- .../business/base/action/BaseAction.java | 24 +- .../message/action/AutoTaskAction.java | 12 +- .../business/message/bean/AutoTask.hbm.xml | 3 + .../business/message/bean/AutoTask.java | 20 +- .../message/bean/InterfaceInfo.hbm.xml | 3 + .../business/message/bean/InterfaceInfo.java | 29 ++- .../business/message/bean/Message.hbm.xml | 3 + .../master/business/message/bean/Message.java | 30 ++- .../message/bean/MessageScene.hbm.xml | 6 +- .../business/message/bean/MessageScene.java | 15 ++ .../business/message/bean/TestReport.hbm.xml | 3 + .../business/message/bean/TestReport.java | 15 ++ .../business/message/bean/TestSet.hbm.xml | 4 +- .../master/business/message/bean/TestSet.java | 31 ++- .../system/action/ProjectInfoAction.java | 111 +++++++++ .../business/system/bean/ProjectInfo.hbm.xml | 37 +++ .../business/system/bean/ProjectInfo.java | 138 +++++++++++ .../business/system/dao/ProjectInfoDao.java | 63 +++++ .../system/dao/impl/ProjectInfoDaoImpl.java | 114 +++++++++ .../business/system/enums/ProjectStatus.java | 49 ++++ .../system/service/ProjectInfoService.java | 63 +++++ .../service/impl/ProjectInfoServiceImpl.java | 50 ++++ .../yi/master/business/user/bean/User.hbm.xml | 4 + .../yi/master/business/user/bean/User.java | 26 +- src/main/resources/struts.xml | 10 + src/main/webapp/index.html | 7 +- src/main/webapp/index.js | 40 +++ src/main/webapp/js/globalConstant.js | 23 ++ .../webapp/resource/system/projectInfo.html | 64 +++++ .../webapp/resource/system/projectInfo.js | 230 ++++++++++++++++++ .../webapp/resource/system/projectUser.html | 58 +++++ .../webapp/resource/system/projectUser.js | 164 +++++++++++++ src/main/webapp/welcome.js | 6 +- 39 files changed, 1462 insertions(+), 79 deletions(-) create mode 100644 src/main/java/yi/master/business/system/action/ProjectInfoAction.java create mode 100644 src/main/java/yi/master/business/system/bean/ProjectInfo.hbm.xml create mode 100644 src/main/java/yi/master/business/system/bean/ProjectInfo.java create mode 100644 src/main/java/yi/master/business/system/dao/ProjectInfoDao.java create mode 100644 src/main/java/yi/master/business/system/dao/impl/ProjectInfoDaoImpl.java create mode 100644 src/main/java/yi/master/business/system/enums/ProjectStatus.java create mode 100644 src/main/java/yi/master/business/system/service/ProjectInfoService.java create mode 100644 src/main/java/yi/master/business/system/service/impl/ProjectInfoServiceImpl.java create mode 100644 src/main/webapp/resource/system/projectInfo.html create mode 100644 src/main/webapp/resource/system/projectInfo.js create mode 100644 src/main/webapp/resource/system/projectUser.html create mode 100644 src/main/webapp/resource/system/projectUser.js diff --git a/src/main/java/yi/master/business/advanced/bean/InterfaceMock.hbm.xml b/src/main/java/yi/master/business/advanced/bean/InterfaceMock.hbm.xml index 1c2413e..63fcedf 100644 --- a/src/main/java/yi/master/business/advanced/bean/InterfaceMock.hbm.xml +++ b/src/main/java/yi/master/business/advanced/bean/InterfaceMock.hbm.xml @@ -12,6 +12,9 @@ + + + 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 257b3b6..54b8651 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 c0dc091..118dd96 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 2be47aa..e313ea1 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 c4bf9d4..05b1e21 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 1596f5e..e31e569 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/base/action/BaseAction.java b/src/main/java/yi/master/business/base/action/BaseAction.java index 4b85519..9a05182 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 dbd9c62..f618ef1 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,21 @@ 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.List; @Controller @Scope("prototype") @@ -40,9 +37,6 @@ public class AutoTaskAction extends BaseAction { super.setBaseService(autoTaskService); this.autoTaskService = autoTaskService; } - - - @Override public String edit() { 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 d0817b5..f7bd6ec 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 1cc5c6e..02bb69a 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/InterfaceInfo.hbm.xml b/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml index d440cbb..d2707a5 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 210537e..40df416 100644 --- a/src/main/java/yi/master/business/message/bean/InterfaceInfo.java +++ b/src/main/java/yi/master/business/message/bean/InterfaceInfo.java @@ -1,20 +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 java.io.Serializable; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Set; + /** * 接口自动化 @@ -62,6 +62,11 @@ public class InterfaceInfo implements Serializable { */ private String requestUrlReal; + /** + * 所属项目 + */ + private ProjectInfo projectInfo; + @FieldRealSearch(names = {"查询类", "受理类"}, values = {"CX", "SL"}) @CustomConditionSetting(operator="=") private String interfaceType; @@ -243,12 +248,20 @@ public class InterfaceInfo implements Serializable { public Set getParameters() { return parameters; } - - + public void setParameters(Set parameters) { this.parameters = parameters; } + @JSON(serialize=false) + public ProjectInfo getProjectInfo() { + return projectInfo; + } + + public void setProjectInfo(ProjectInfo projectInfo) { + this.projectInfo = projectInfo; + } + public void setInterfaceId(Integer interfaceId) { this.interfaceId = interfaceId; } 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 3a6db69..0f6ec3e 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 c8a508c..1a3df0d 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 9a75a81..823d0fd 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 5dc40e5..604deec 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 db24004..260dda8 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 1d569b4..d1def07 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 2fe0cd3..4d9372f 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 dff5a91..0af772d 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/system/action/ProjectInfoAction.java b/src/main/java/yi/master/business/system/action/ProjectInfoAction.java new file mode 100644 index 0000000..a4a1161 --- /dev/null +++ b/src/main/java/yi/master/business/system/action/ProjectInfoAction.java @@ -0,0 +1,111 @@ +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.system.bean.ProjectInfo; +import yi.master.business.system.service.ProjectInfoService; +import yi.master.business.user.bean.User; +import yi.master.util.FrameworkUtil; + +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; + + /** + * (1)、添加还是删除用户,0-增加 1-删除
+ * (2)、查询被关联到项目或者没有关联到项目的用户列表,0-已被关联到项目的用户 1-没有被关联到项目的用户
+ */ + private String mode; + private Integer userId; + + @Autowired + public void setProjectInfoService(ProjectInfoService projectInfoService) { + super.setBaseService(projectInfoService); + this.projectInfoService = projectInfoService; + } + + @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 listUsers () { + Map dt = FrameworkUtil.getDTParameters(User.class); + PageModel pm = projectInfoService.listProjectUsers(model.getProjectId(), 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/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; + } +} 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 0000000..9036014 --- /dev/null +++ b/src/main/java/yi/master/business/system/bean/ProjectInfo.hbm.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 0000000..d3e4b41 --- /dev/null +++ b/src/main/java/yi/master/business/system/bean/ProjectInfo.java @@ -0,0 +1,138 @@ +package yi.master.business.system.bean; + +import org.apache.struts2.json.annotations.JSON; +import yi.master.annotation.FieldNameMapper; +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<>(); + + @FieldNameMapper(fieldPath="size(users)", ifSearch=false) + private Integer userNum; + + 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(); + } + + @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 0000000..5f3c34b --- /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 0000000..093421c --- /dev/null +++ b/src/main/java/yi/master/business/system/dao/impl/ProjectInfoDaoImpl.java @@ -0,0 +1,114 @@ +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.system.bean.ProjectInfo; +import yi.master.business.system.dao.ProjectInfoDao; +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: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"; + LOGGER.info("The query HQL String: \n" + hql.toString()); + + return getSession().createQuery(hql).setInteger("userId", userId).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 0000000..8d7cae7 --- /dev/null +++ b/src/main/java/yi/master/business/system/enums/ProjectStatus.java @@ -0,0 +1,49 @@ +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"); + + 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 0000000..0c48e29 --- /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 0000000..b46eb49 --- /dev/null +++ b/src/main/java/yi/master/business/system/service/impl/ProjectInfoServiceImpl.java @@ -0,0 +1,50 @@ +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 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); + } +} 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 2dc90bd..190387a 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 1a3f176..43b934b 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/resources/struts.xml b/src/main/resources/struts.xml index 1b2b989..52b9d40 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/webapp/index.html b/src/main/webapp/index.html index 5021f8a..3b6babe 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -28,7 +28,7 @@