From 29bc506704259ca5fa750f1600cf5ac14d96025b Mon Sep 17 00:00:00 2001 From: "youhong.ai" Date: Wed, 26 Jul 2023 12:38:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youhong.ai/pcn/workflow_code_block.js | 4 +- .../java/aiyh/utils/GenerateFileUtil.java | 212 +- .../aiyh/utils/annotation/webdoc/Api.java | 22 + .../utils/annotation/webdoc/ApiModel.java | 24 + .../annotation/webdoc/ApiModelProperty.java | 30 + .../utils/annotation/webdoc/ApiOperation.java | 21 + .../utils/annotation/webdoc/ApiParam.java | 37 + .../utils/annotation/webdoc/ApiParams.java | 18 + .../api/test/aiyh/controller/TestServlet.java | 5 +- .../controller/SsoLoginAuthController.java | 8 + .../controller/WorkflowTaskController.java | 60 +- .../todolist/mapper/WorkflowTaskMapper.java | 111 +- .../todolist/service/WorkflowTaskService.java | 107 +- .../ai/guojun/todolist/vo/CreateItemVo.java | 50 + .../ai/guojun/todolist/vo/DraftItemVo.java | 43 + .../ai/guojun/todolist/vo/ExtendInfoVo.java | 20 + .../ai/guojun/todolist/vo/TodoItemVo.java | 49 + .../sso/impl/SsoGuoXiaoJunPocImpl.java | 18 + .../datasmultilingual/MultilingualUtil.java | 2 +- .../impl/RequestFormServiceAddUserIdImpl.java | 34 + .../RequestFormServiceMultilingualImpl.java | 80 +- src/main/java/weaver/general/BaseBean.java | 45 + src/main/java/weaver/search/SearchClause.java | 180 ++ .../copy_attachment/CopyAttachmentAction.java | 216 +- src/test/java/youhong/ai/pcn/Test01.java | 8 + .../ai/pcn/multilingual/MultilingualTest.java | 59 +- src/test/resources/WEB-INF/eas.zip | Bin 0 -> 54643 bytes .../WEB-INF/ecology/cportal/work_sm.jsp | 576 ++++++ .../WEB-INF/ecology/eas/ViewRequest.jsp | 97 + .../WEB-INF/ecology/eas/ViewRequest.jsp.bak | 57 + .../ecology/eas/ViewRequest.jsp.bak.20200113 | 58 + .../WEB-INF/ecology/eas/ViewRequest0331.jsp | 57 + .../ecology/eas/ViewRequest0613 - 副本.jsp | 47 + .../WEB-INF/ecology/eas/ViewRequest2.jsp | 76 + .../WEB-INF/ecology/eas/ViewRequest222.jsp | 47 + .../WEB-INF/ecology/eas/ViewRequest2222.jsp | 68 + .../WEB-INF/ecology/eas/css/login.css | 85 + .../WEB-INF/ecology/eas/css/login2.css | 1009 ++++++++++ .../WEB-INF/ecology/eas/imgs/1-24.png | Bin 0 -> 1442 bytes .../WEB-INF/ecology/eas/imgs/1-25.png | Bin 0 -> 1275 bytes .../WEB-INF/ecology/eas/imgs/1-26.png | Bin 0 -> 1907 bytes .../WEB-INF/ecology/eas/imgs/1-27.png | Bin 0 -> 1702 bytes .../WEB-INF/ecology/eas/imgs/1-28.png | Bin 0 -> 1423 bytes .../resources/WEB-INF/ecology/eas/index.html | 210 ++ .../resources/WEB-INF/ecology/eas/loginSM.jsp | 57 + .../WEB-INF/ecology/eas/loginSM.jsp1 | 54 + .../WEB-INF/ecology/eas/loginSM1.jsp | 73 + .../WEB-INF/ecology/eas/loginSMNew.jsp | 62 + .../WEB-INF/ecology/eas/loginSMNew.jsp.bak | 57 + .../WEB-INF/ecology/eas/requestpage.jsp | 130 ++ .../WEB-INF/ecology/eas/requestsearch.jsp | 426 ++++ .../WEB-INF/ecology/eas/requestsearchtab.jsp | 70 + .../WEB-INF/ecology/eas/viewrequest.jsp1 | 44 + .../WEB-INF/ecology/eas/wfLaunch.jsp | 297 +++ .../WEB-INF/ecology/eas/wfSupervise.jsp | 487 +++++ .../workflow/request/MyRequestView.jsp | 812 ++++++++ .../request/MyRequestViewAjaxCount.jsp | 557 ++++++ .../workflow/request/RequestHandled.jsp | 701 +++++++ .../request/RequestHandledAjaxCount.jsp | 428 ++++ .../workflow/request/RequestListOperation.jsp | 751 +++++++ .../ecology/workflow/request/RequestView.jsp | 884 +++++++++ .../workflow/request/RequestViewAjaxCount.jsp | 865 ++++++++ .../workflow/search/WFSearchResult.jsp | 1729 ++++++++++++++++ .../ecology/workflow/search/WFSearchTemp.jsp | 1744 +++++++++++++++++ .../workflow/search/WFSuperviseList.jsp | 723 +++++++ .../ecology/workflow/search/wfTabFrame.jsp | 327 ++++ .../workflow/search/wfTabFrameCount.jsp | 161 ++ .../ecology/workflow/search/wfTabNewFrame.jsp | 194 ++ 68 files changed, 15292 insertions(+), 191 deletions(-) create mode 100644 src/main/java/aiyh/utils/annotation/webdoc/Api.java create mode 100644 src/main/java/aiyh/utils/annotation/webdoc/ApiModel.java create mode 100644 src/main/java/aiyh/utils/annotation/webdoc/ApiModelProperty.java create mode 100644 src/main/java/aiyh/utils/annotation/webdoc/ApiOperation.java create mode 100644 src/main/java/aiyh/utils/annotation/webdoc/ApiParam.java create mode 100644 src/main/java/aiyh/utils/annotation/webdoc/ApiParams.java create mode 100644 src/main/java/com/api/youhong/ai/guojun/todolist/vo/CreateItemVo.java create mode 100644 src/main/java/com/api/youhong/ai/guojun/todolist/vo/DraftItemVo.java create mode 100644 src/main/java/com/api/youhong/ai/guojun/todolist/vo/ExtendInfoVo.java create mode 100644 src/main/java/com/api/youhong/ai/guojun/todolist/vo/TodoItemVo.java create mode 100644 src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceAddUserIdImpl.java create mode 100644 src/main/java/weaver/general/BaseBean.java create mode 100644 src/main/java/weaver/search/SearchClause.java create mode 100644 src/test/resources/WEB-INF/eas.zip create mode 100755 src/test/resources/WEB-INF/ecology/cportal/work_sm.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak.20200113 create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest0331.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest0613 - 副本.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest2.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest222.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/ViewRequest2222.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/css/login.css create mode 100644 src/test/resources/WEB-INF/ecology/eas/css/login2.css create mode 100644 src/test/resources/WEB-INF/ecology/eas/imgs/1-24.png create mode 100644 src/test/resources/WEB-INF/ecology/eas/imgs/1-25.png create mode 100644 src/test/resources/WEB-INF/ecology/eas/imgs/1-26.png create mode 100644 src/test/resources/WEB-INF/ecology/eas/imgs/1-27.png create mode 100644 src/test/resources/WEB-INF/ecology/eas/imgs/1-28.png create mode 100644 src/test/resources/WEB-INF/ecology/eas/index.html create mode 100644 src/test/resources/WEB-INF/ecology/eas/loginSM.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/loginSM.jsp1 create mode 100644 src/test/resources/WEB-INF/ecology/eas/loginSM1.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp.bak create mode 100644 src/test/resources/WEB-INF/ecology/eas/requestpage.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/requestsearch.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/requestsearchtab.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/viewrequest.jsp1 create mode 100644 src/test/resources/WEB-INF/ecology/eas/wfLaunch.jsp create mode 100644 src/test/resources/WEB-INF/ecology/eas/wfSupervise.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/MyRequestView.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/MyRequestViewAjaxCount.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/RequestHandled.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/RequestHandledAjaxCount.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/RequestListOperation.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/RequestView.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/request/RequestViewAjaxCount.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/search/WFSearchResult.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/search/WFSearchTemp.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/search/WFSuperviseList.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrame.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrameCount.jsp create mode 100755 src/test/resources/WEB-INF/ecology/workflow/search/wfTabNewFrame.jsp diff --git a/javascript/youhong.ai/pcn/workflow_code_block.js b/javascript/youhong.ai/pcn/workflow_code_block.js index 5029599..2b146f2 100644 --- a/javascript/youhong.ai/pcn/workflow_code_block.js +++ b/javascript/youhong.ai/pcn/workflow_code_block.js @@ -1029,7 +1029,9 @@ $(() => { targetDetail: { tableName: '', testQuestionField: '' - } + }, + // 橘色id + roleId: 88, } diff --git a/src/main/java/aiyh/utils/GenerateFileUtil.java b/src/main/java/aiyh/utils/GenerateFileUtil.java index e443f6e..399efaa 100644 --- a/src/main/java/aiyh/utils/GenerateFileUtil.java +++ b/src/main/java/aiyh/utils/GenerateFileUtil.java @@ -4,8 +4,17 @@ import aiyh.utils.annotation.ActionDefaultTestValue; import aiyh.utils.annotation.ActionDesc; import aiyh.utils.annotation.ActionOptionalParam; import aiyh.utils.annotation.RequiredMark; +import aiyh.utils.annotation.webdoc.Api; +import aiyh.utils.annotation.webdoc.ApiModelProperty; +import aiyh.utils.annotation.webdoc.ApiOperation; +import aiyh.utils.annotation.webdoc.ApiParam; import aiyh.utils.entity.ActionTemplate; import aiyh.utils.excention.CustomerException; +import aiyh.utils.tool.cn.hutool.core.bean.BeanUtil; +import aiyh.utils.tool.cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; import org.apache.log4j.Logger; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; @@ -14,12 +23,11 @@ import org.apache.velocity.app.VelocityEngine; import weaver.interfaces.schedule.BaseCronJob; import weaver.interfaces.workflow.action.Action; +import javax.ws.rs.*; import java.io.*; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.lang.reflect.Method; +import java.util.*; /** *

生成文档工具类

@@ -221,5 +229,201 @@ public class GenerateFileUtil { throw new CustomerException("创建模版文件失败!", e); } } + + + public static void createApiDoc(Class... classes) { + if (Objects.isNull(classes)) { + return; + } + List> docInfoList = new ArrayList<>(); + for (Class aClass : classes) { + if (Objects.isNull(aClass)) { + continue; + } + Map apiDocMap = createApiDocMap(aClass); + docInfoList.add(apiDocMap); + } + System.out.println(JSON.toJSONString(docInfoList)); + } + + + private static Map createApiDocMap(Class aClass) { + Map result = new HashMap<>(8); + List> apiList = new ArrayList<>(); + result.put("apiList", apiList); + if (aClass.isAnnotationPresent(Api.class) && aClass.isAnnotationPresent(Path.class)) { + Api api = aClass.getAnnotation(Api.class); + Path path = aClass.getAnnotation(Path.class); + String urlPath = path.value(); + if (!urlPath.endsWith("/")) { + urlPath = urlPath + "/"; + } + if (!urlPath.startsWith("/")) { + urlPath = "/" + urlPath; + } + String description = api.description(); + String tag = api.tag(); + result.put("description", description); + result.put("tag", tag); + Method[] declaredMethods = aClass.getDeclaredMethods(); + for (Method method : declaredMethods) { + if (method.isAnnotationPresent(ApiOperation.class) && method.isAnnotationPresent(Path.class)) { + Map methodMap = new HashMap<>(8); + Path methodPath = method.getAnnotation(Path.class); + String methodUrlPath = methodPath.value(); + String requestUrl = ""; + if (!methodUrlPath.startsWith("/")) { + requestUrl = "/api" + urlPath + methodUrlPath; + } else { + requestUrl = "/api" + urlPath + methodUrlPath.substring(1); + } + ApiOperation apiOperation = method.getAnnotation(ApiOperation.class); + String desc = apiOperation.desc(); + String methodType = getMethodType(method); + methodMap.put("description", desc); + methodMap.put("methodType", methodType); + methodMap.put("url", requestUrl); + getMethodParams(methodMap, apiOperation); + apiList.add(methodMap); + } + } + } + return result; + } + + private static void getMethodParams(Map methodMap, ApiOperation apiOperation) { + ApiParam[] apiParams = apiOperation.value(); + JSONObject json = new JSONObject(); + List> params = new ArrayList<>(); + methodMap.put("params", params); + for (ApiParam apiParam : apiParams) { + Map apiParamMap = new HashMap<>(8); + String description = apiParam.description(); + String example = apiParam.example(); + String name = apiParam.name(); + Class type = apiParam.type(); + Class itemType = apiParam.itemType(); + boolean required = apiParam.required(); + apiParamMap.put("description", description); + apiParamMap.put("example", example); + apiParamMap.put("name", name); + apiParamMap.put("required", required); + putJsonExample(json, type, itemType, example, name, apiParam); + apiParamMap.put("type", type.getSimpleName()); + if (Collection.class.isAssignableFrom(type)) { + apiParamMap.put("type", "List"); + } + if (Map.class.isAssignableFrom(type) || BeanUtil.isBean(type)) { + apiParamMap.put("type", "Object"); + } + params.add(apiParamMap); + } + + methodMap.put("jsonCode", JSON.toJSONString(json, SerializerFeature.PrettyFormat)); + + } + + private static void putJsonExample(JSONObject json, + Class type, + Class itemType, + String example, + String name, + ApiParam apiParam) { + if (Number.class.isAssignableFrom(type) || double.class.equals(type) + || float.class.equals(type) || int.class.equals(type)) { + if (StrUtil.isNotBlank(example)) { + if (example.contains(".")) { + json.put(name, Double.parseDouble(example)); + } else { + json.put(name, Integer.parseInt(example)); + } + } else { + if (Double.class.isAssignableFrom(type) || Float.class.isAssignableFrom(type) || + double.class.equals(type) || float.class.equals(type)) { + json.put(name, Double.parseDouble(example)); + } else { + json.put(name, Integer.parseInt(example)); + } + } + return; + } + if (Boolean.class.isAssignableFrom(type) || boolean.class.equals(type)) { + if (StrUtil.isBlank(example)) { + example = "false"; + } + json.put(name, Boolean.parseBoolean(example)); + return; + } + if (Collection.class.isAssignableFrom(type)) { + List examList = new ArrayList<>(); + if (Map.class.isAssignableFrom(itemType)) { + JSONObject itemJson = new JSONObject(); + ApiModelProperty[] apiModelProperties = apiParam.apiProperties(); + for (ApiModelProperty apiModelProperty : apiModelProperties) { + itemJson.put(apiModelProperty.name(), getExamTypeValue(apiModelProperty.type(), apiModelProperty.example())); + } + examList.add(itemJson); + } + json.put(name, examList); + } + if (Map.class.isAssignableFrom(type)) { + JSONObject itemJson = new JSONObject(); + ApiModelProperty[] apiModelProperties = apiParam.apiProperties(); + for (ApiModelProperty apiModelProperty : apiModelProperties) { + itemJson.put(apiModelProperty.name(), getExamTypeValue(apiModelProperty.type(), apiModelProperty.example())); + } + json.put(name, itemJson); + } + + if (String.class.equals(type)) { + json.put(name, StrUtil.isBlank(example) ? "string" : example); + } + + } + + private static Object getExamTypeValue(Class type, String example) { + if (Number.class.isAssignableFrom(type) || double.class.equals(type) + || float.class.equals(type) || int.class.equals(type)) { + if (StrUtil.isNotBlank(example)) { + if (example.contains(".")) { + return Double.parseDouble(example); + } else { + return Integer.parseInt(example); + } + } else { + if (Double.class.isAssignableFrom(type) || Float.class.isAssignableFrom(type) || + double.class.equals(type) || float.class.equals(type)) { + return Double.parseDouble(example); + } else { + return Integer.parseInt(example); + } + } + } + if (Boolean.class.isAssignableFrom(type) || boolean.class.equals(type)) { + if (StrUtil.isBlank(example)) { + example = "false"; + } + return Boolean.parseBoolean(example); + } + return example; + } + + + private static String getMethodType(Method method) { + + if (method.isAnnotationPresent(GET.class)) { + return "GET"; + } + if (method.isAnnotationPresent(POST.class)) { + return "POST"; + } + if (method.isAnnotationPresent(PUT.class)) { + return "PUT"; + } + if (method.isAnnotationPresent(DELETE.class)) { + return "DELETE"; + } + return "Unknown"; + } } diff --git a/src/main/java/aiyh/utils/annotation/webdoc/Api.java b/src/main/java/aiyh/utils/annotation/webdoc/Api.java new file mode 100644 index 0000000..3be2f98 --- /dev/null +++ b/src/main/java/aiyh/utils/annotation/webdoc/Api.java @@ -0,0 +1,22 @@ +package aiyh.utils.annotation.webdoc; + +import java.lang.annotation.*; + +/** + *

controller描述器

+ * + *

create: 2023/7/20 19:12

+ * + * @author youHong.ai + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Api { + + /** 标签 */ + String tag(); + + /** 描述 */ + String description(); +} diff --git a/src/main/java/aiyh/utils/annotation/webdoc/ApiModel.java b/src/main/java/aiyh/utils/annotation/webdoc/ApiModel.java new file mode 100644 index 0000000..003c5e2 --- /dev/null +++ b/src/main/java/aiyh/utils/annotation/webdoc/ApiModel.java @@ -0,0 +1,24 @@ +package aiyh.utils.annotation.webdoc; + +import java.lang.annotation.*; + +/** + *

实体类接口参数描述

+ * + *

create: 2023/7/20 19:17

+ * + * @author youHong.ai + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Documented +public @interface ApiModel { + /** 名称 */ + String value(); + + /** 描述 */ + String description(); + + /** 字段描述 */ + ApiModelProperty[] properties() default {}; +} diff --git a/src/main/java/aiyh/utils/annotation/webdoc/ApiModelProperty.java b/src/main/java/aiyh/utils/annotation/webdoc/ApiModelProperty.java new file mode 100644 index 0000000..9b09639 --- /dev/null +++ b/src/main/java/aiyh/utils/annotation/webdoc/ApiModelProperty.java @@ -0,0 +1,30 @@ +package aiyh.utils.annotation.webdoc; + +import java.lang.annotation.*; + +/** + *

接口实体类或map的描述信息

+ * + *

create: 2023/7/20 19:21

+ * + * @author youHong.ai + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD}) +@Documented +public @interface ApiModelProperty { + /** 参数描述 */ + String description(); + + /** 参数名 */ + String name(); + + /** 参数类型 */ + Class type() default String.class; + + /** 是否必填 */ + boolean required() default true; + + /** 示例值 */ + String example() default ""; +} diff --git a/src/main/java/aiyh/utils/annotation/webdoc/ApiOperation.java b/src/main/java/aiyh/utils/annotation/webdoc/ApiOperation.java new file mode 100644 index 0000000..172f4df --- /dev/null +++ b/src/main/java/aiyh/utils/annotation/webdoc/ApiOperation.java @@ -0,0 +1,21 @@ +package aiyh.utils.annotation.webdoc; + +import java.lang.annotation.*; + +/** + *

接口描述

+ * + *

create: 2023/7/20 19:15

+ * + * @author youHong.ai + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ApiOperation { + /** 接口描述 */ + String desc(); + + /** 接口参数 */ + ApiParam[] value() default {}; +} diff --git a/src/main/java/aiyh/utils/annotation/webdoc/ApiParam.java b/src/main/java/aiyh/utils/annotation/webdoc/ApiParam.java new file mode 100644 index 0000000..016d15d --- /dev/null +++ b/src/main/java/aiyh/utils/annotation/webdoc/ApiParam.java @@ -0,0 +1,37 @@ +package aiyh.utils.annotation.webdoc; + +import java.lang.annotation.*; + +/** + *

接口参数描述

+ * + *

create: 2023/7/20 19:17

+ * + * @author youHong.ai + */ + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +@Documented +public @interface ApiParam { + + /** 参数名 */ + String name(); + + /** 参数类型 */ + Class type(); + + Class itemType() default String.class; + + /** 参数描述 */ + String description(); + + /** 是否必填 */ + boolean required() default false; + + /** 示例值 */ + String example() default ""; + + ApiModelProperty[] apiProperties() default {}; + +} diff --git a/src/main/java/aiyh/utils/annotation/webdoc/ApiParams.java b/src/main/java/aiyh/utils/annotation/webdoc/ApiParams.java new file mode 100644 index 0000000..78c53a0 --- /dev/null +++ b/src/main/java/aiyh/utils/annotation/webdoc/ApiParams.java @@ -0,0 +1,18 @@ +package aiyh.utils.annotation.webdoc; + +import java.lang.annotation.*; + +/** + *

接口文档参数

+ * + *

create: 2023/7/20 19:38

+ * + * @author youHong.ai + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Documented +public @interface ApiParams { + + ApiParam[] value(); +} diff --git a/src/main/java/com/api/test/aiyh/controller/TestServlet.java b/src/main/java/com/api/test/aiyh/controller/TestServlet.java index 9525e65..7404889 100644 --- a/src/main/java/com/api/test/aiyh/controller/TestServlet.java +++ b/src/main/java/com/api/test/aiyh/controller/TestServlet.java @@ -17,12 +17,13 @@ import java.io.IOException; * * @author youHong.ai */ -@WebServlet("/test/servlet/v1") +@WebServlet("/cusapi/*") public class TestServlet extends HttpServlet { + @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { - String success = ApiResult.success("成功!"); + String success = ApiResult.success("成功!" + req.getRequestURI()); res.setContentType(MediaType.APPLICATION_JSON + ";charset=utf-8"); res.getWriter().write(success); } diff --git a/src/main/java/com/api/youhong/ai/guojun/sso/controller/SsoLoginAuthController.java b/src/main/java/com/api/youhong/ai/guojun/sso/controller/SsoLoginAuthController.java index 179e6da..f7c7e15 100644 --- a/src/main/java/com/api/youhong/ai/guojun/sso/controller/SsoLoginAuthController.java +++ b/src/main/java/com/api/youhong/ai/guojun/sso/controller/SsoLoginAuthController.java @@ -1,6 +1,9 @@ package com.api.youhong.ai.guojun.sso.controller; import aiyh.utils.Util; +import aiyh.utils.annotation.webdoc.Api; +import aiyh.utils.annotation.webdoc.ApiOperation; +import aiyh.utils.annotation.webdoc.ApiParam; import com.sun.jersey.api.view.Viewable; import org.apache.log4j.Logger; import weaver.integration.util.SessionUtil; @@ -20,11 +23,16 @@ import javax.ws.rs.core.Context; * @author youHong.ai */ @Path("aiyh/guojun/sso") +@Api(description = "国君集成", tag = "国君集成") public class SsoLoginAuthController { private final Logger log = Util.getLogger(); @GET @Path("/auth") + @ApiOperation(desc = "国君小程序免密接口", value = { + @ApiParam(name = "account", description = "国小君账号", type = String.class, required = true, example = "login_account"), + @ApiParam(name = "redirectChannel", description = "国小君小程序配置的认证成功后的跳转地址", type = String.class, required = true, example = "/wui/index.html") + }) public Viewable authSso(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("account") String account, @QueryParam("redirectChannel") String redirectChannel) { diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/controller/WorkflowTaskController.java b/src/main/java/com/api/youhong/ai/guojun/todolist/controller/WorkflowTaskController.java index 7bb2d76..453ad24 100644 --- a/src/main/java/com/api/youhong/ai/guojun/todolist/controller/WorkflowTaskController.java +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/controller/WorkflowTaskController.java @@ -1,8 +1,11 @@ package com.api.youhong.ai.guojun.todolist.controller; import aiyh.utils.ApiResult; +import aiyh.utils.Util; +import aiyh.utils.annotation.webdoc.Api; +import aiyh.utils.tool.cn.hutool.core.util.StrUtil; import com.api.youhong.ai.guojun.todolist.service.WorkflowTaskService; -import weaver.hrm.HrmUserVarify; +import org.apache.log4j.Logger; import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; @@ -21,9 +24,11 @@ import javax.ws.rs.core.MediaType; * * @author youHong.ai */ +@Api(tag = "统一待办", description = "国君小程序调用免密登录接口") @Path("/aiyh/guojun/workflow-task") public class WorkflowTaskController { + private final Logger log = Util.getLogger(); private final WorkflowTaskService service = new WorkflowTaskService(); @Path("/todo-list") @@ -33,10 +38,61 @@ public class WorkflowTaskController { public String getTodoList(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { - User user = HrmUserVarify.getUser(request, response); + // User user = HrmUserVarify.getUser(request, response); + String authorization = request.getHeader("Authorization"); + log.info("Authorization: " + authorization); + String userId = Util.getCusConfigValue(authorization); + if (StrUtil.isBlank(userId)) { + return ApiResult.error(-1, "can not find user by Authorization [" + authorization + "]"); + } + User user = new User(Integer.parseInt(userId)); + return ApiResult.success(service.getTodoList(user), 0, "成功"); } catch (Exception e) { return ApiResult.error(-1, "system error"); } } + + @Path("draft-list") + @GET + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + public String getDraftList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + try { + // User user = HrmUserVarify.getUser(request, response); + String authorization = request.getHeader("Authorization"); + log.info("Authorization: " + authorization); + String userId = Util.getCusConfigValue(authorization); + if (StrUtil.isBlank(userId)) { + return ApiResult.error(-1, "can not find user by Authorization [" + authorization + "]"); + } + User user = new User(Integer.parseInt(userId)); + return ApiResult.success(service.getDraftList(user), 0, "成功"); + } catch (Exception e) { + return ApiResult.error(-1, "system error"); + } + } + + @Path("create-list") + @GET + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + public String getCreateList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + try { + // User user = HrmUserVarify.getUser(request, response); + String authorization = request.getHeader("Authorization"); + log.info("Authorization: " + authorization); + String userId = Util.getCusConfigValue(authorization); + if (StrUtil.isBlank(userId)) { + return ApiResult.error(-1, "can not find user by Authorization [" + authorization + "]"); + } + User user = new User(Integer.parseInt(userId)); + return ApiResult.success(service.getCreateList(user), 0, "成功"); + } catch (Exception e) { + return ApiResult.error(-1, "system error"); + } + } + } diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/mapper/WorkflowTaskMapper.java b/src/main/java/com/api/youhong/ai/guojun/todolist/mapper/WorkflowTaskMapper.java index 2d54e83..d2b96ad 100644 --- a/src/main/java/com/api/youhong/ai/guojun/todolist/mapper/WorkflowTaskMapper.java +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/mapper/WorkflowTaskMapper.java @@ -1,5 +1,6 @@ package com.api.youhong.ai.guojun.todolist.mapper; +import aiyh.utils.annotation.recordset.Select; import aiyh.utils.annotation.recordset.SqlMapper; import java.util.List; @@ -16,5 +17,113 @@ import java.util.Map; public interface WorkflowTaskMapper { - List> selectTodoList(); + @Select("select distinct\n" + + " wbs.WORKFLOWNAME workflow_name,\n" + + " wrb.requestname request_name,wrb.workflowid workflow_id,wrb.requestid request_id,wrb.creater,\n" + + " wrb.createdate create_date,\n" + + " wrb.CREATETIME create_time,\n" + + " (\n" + + " case creater\n" + + " when 1 then '系统管理员'\n" + + " else (select lastname from hrmresource where id = wrb.creater)\n" + + " end\n" + + " )creater_name,\n" + + " (\n" + + " case wrb.requestlevel\n" + + " when 0 then '正常'\n" + + " when 1 then '重要'\n" + + " else '紧急'\n" + + " end\n" + + " )request_level_desc,\n" + + " wcp.receivedate receive_date,wcp.nodeid node_id,wnb.nodeName node_name,wrb.status,wrb.requestlevel request_level,wcp.userid user_id,\n" + + " (\n" + + " case wcp.userid\n" + + " when 1 then '系统管理员'\n" + + " else (select lastname from hrmresource where id = wcp.userid)\n" + + " end\n" + + " )user_name\n" + + "from workflow_requestbase wrb\n" + + " inner join workflow_currentoperator wcp on wrb.requestid = wcp.requestid\n" + + " inner join workflow_nodebase wnb on wcp.nodeid = wnb.id\n" + + " inner join workflow_base wbs on wbs.id = wrb.WORKFLOWID\n" + + "where ((isremark='0'and (takisremark is null or takisremark=0)) or isremark in ('1','5','7','8','9','11'))\n" + + " and islasttimes=1\n" + + " and (wrb.deleted<>1 or wrb.deleted is null or wrb.deleted='')\n" + + " and (wcp.isprocessing = '' or wcp.isprocessing is null)\n" + + " and usertype in (0,1)\n" + + " and ((wcp.isremark not in('1','8','9','11') or (wcp.isremark='1' and wcp.takisremark='2'))) " + + " and wcp.userid = #{userId} ") + List> selectTodoList(Integer userId); + + + @Select("select distinct\n" + + " wbs.WORKFLOWNAME workflow_name,\n" + + " wrb.requestname request_name,wrb.workflowid workflow_id,wrb.requestid request_id,wrb.creater,\n" + + " wrb.createdate create_date,\n" + + " wrb.CREATETIME create_time,\n" + + " (\n" + + " case creater\n" + + " when 1 then '系统管理员'\n" + + " else (select lastname from hrmresource where id = wrb.creater)\n" + + " end\n" + + " )creater_name,\n" + + " (\n" + + " case wrb.requestlevel\n" + + " when 0 then '正常'\n" + + " when 1 then '重要'\n" + + " else '紧急'\n" + + " end\n" + + " )request_level_desc,\n" + + " wcp.receivedate receive_date,wcp.nodeid node_id,wnb.nodeName node_name,wrb.status,wrb.requestlevel request_level,wcp.userid user_id,\n" + + " (\n" + + " case wcp.userid\n" + + " when 1 then '系统管理员'\n" + + " else (select lastname from hrmresource where id = wcp.userid)\n" + + " end\n" + + " )user_name\n" + + "from workflow_requestbase wrb\n" + + " inner join workflow_currentoperator wcp on wrb.requestid = wcp.requestid\n" + + " inner join workflow_nodebase wnb on wcp.nodeid = wnb.id\n" + + " inner join workflow_base wbs on wbs.id = wrb.WORKFLOWID\n" + + "where " + + " (wrb.deleted<>1 or wrb.deleted is null or wrb.deleted='')\n" + + " and usertype in (0,1)\n" + + " and wcp.userid = #{userId} and wrb.CURRENTNODETYPE = 0") + List> selectDraftList(Integer userId); + + + @Select("select distinct\n" + + " wbs.WORKFLOWNAME workflow_name,\n" + + " wrb.requestname request_name,wrb.workflowid workflow_id,wrb.requestid request_id,wrb.creater,\n" + + " wrb.createdate create_date,\n" + + " wrb.CREATETIME create_time,\n" + + " (\n" + + " case creater\n" + + " when 1 then '系统管理员'\n" + + " else (select lastname from hrmresource where id = wrb.creater)\n" + + " end\n" + + " )creater_name,\n" + + " (\n" + + " case wrb.requestlevel\n" + + " when 0 then '正常'\n" + + " when 1 then '重要'\n" + + " else '紧急'\n" + + " end\n" + + " )request_level_desc,\n" + + " wcp.receivedate receive_date,wcp.nodeid node_id,wnb.nodeName node_name,wrb.status,wrb.requestlevel request_level,wcp.userid user_id,\n" + + " (\n" + + " case wcp.userid\n" + + " when 1 then '系统管理员'\n" + + " else (select lastname from hrmresource where id = wcp.userid)\n" + + " end\n" + + " )user_name\n" + + "from workflow_requestbase wrb\n" + + " inner join workflow_currentoperator wcp on wrb.requestid = wcp.requestid\n" + + " inner join workflow_nodebase wnb on wcp.nodeid = wnb.id\n" + + " inner join workflow_base wbs on wbs.id = wrb.WORKFLOWID\n" + + "where " + + " (wrb.deleted<>1 or wrb.deleted is null or wrb.deleted='')\n" + + " and usertype in (0,1)\n" + + " and wcp.CREATER = #{userId}") + List> selectCreateList(Integer userId); } diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/service/WorkflowTaskService.java b/src/main/java/com/api/youhong/ai/guojun/todolist/service/WorkflowTaskService.java index ab3cc76..3410694 100644 --- a/src/main/java/com/api/youhong/ai/guojun/todolist/service/WorkflowTaskService.java +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/service/WorkflowTaskService.java @@ -1,9 +1,18 @@ package com.api.youhong.ai.guojun.todolist.service; import aiyh.utils.Util; +import aiyh.utils.tool.cn.hutool.core.collection.CollectionUtil; import com.api.youhong.ai.guojun.todolist.mapper.WorkflowTaskMapper; +import com.api.youhong.ai.guojun.todolist.vo.CreateItemVo; +import com.api.youhong.ai.guojun.todolist.vo.DraftItemVo; +import com.api.youhong.ai.guojun.todolist.vo.TodoItemVo; import weaver.hrm.User; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + /** *

* @@ -17,7 +26,101 @@ public class WorkflowTaskService { private final WorkflowTaskMapper mapper = Util.getMapper(WorkflowTaskMapper.class); public Object getTodoList(User user) { - - return null; + List> todoList = mapper.selectTodoList(user.getUID()); + if (CollectionUtil.isEmpty(todoList)) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + String ecHost = Util.getCusConfigValue("ECOLOGY_HOST_URL"); + for (Map map : todoList) { + TodoItemVo todoItemVo = new TodoItemVo(); + todoItemVo.setGroup("ITA"); + todoItemVo.setTitle(Util.null2String(map.get("requestName"))); + todoItemVo.setTaskId(Util.null2String(map.get("requestId"))); + todoItemVo.setNodeKey(Util.null2String(map.get("nodeId"))); + todoItemVo.setNodeName(Util.null2String(map.get("nodeName"))); + todoItemVo.setArrivalTime(Util.null2String(map.get("receiveDate"))); + todoItemVo.setInstId(Util.null2String(map.get("requestId"))); + todoItemVo.setBizKey(Util.null2String(map.get("requestId"))); + todoItemVo.setBizName(Util.null2String(map.get("workflowName"))); + todoItemVo.setDrafterId(Util.null2String("10024473")); + todoItemVo.setStartUserId(Util.null2String("10024473")); + todoItemVo.setStartTime(Util.null2String(map.get("createDate")) + " " + Util.null2String(map.get("createTime"))); + todoItemVo.setPriority(Integer.parseInt(Util.null2String(map.get("requestLevel")))); + todoItemVo.setProgress(20); + todoItemVo.setClaimState(Util.null2String("10024473")); + todoItemVo.setDepartmentCode("FF05"); + todoItemVo.set_claim_do("/do/2850.22?id=107750"); + todoItemVo.set_unclaim_do("/do/2850.23?id=107750"); + todoItemVo.set_detail_url(ecHost + "/spa/workflow/static4mobileform/index.html#/req?requestid=" + map.get("requestId")); + result.add(todoItemVo); + } + return result; + } + + public Object getDraftList(User user) { + List> draftList = mapper.selectDraftList(user.getUID()); + if (CollectionUtil.isEmpty(draftList)) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + String ecHost = Util.getCusConfigValue("ECOLOGY_HOST_URL"); + for (Map map : draftList) { + DraftItemVo draftItemVo = new DraftItemVo(); + draftItemVo.setGroup("ITA"); + draftItemVo.setAccess(true); + draftItemVo.setTitle(Util.null2String(map.get("requestName"))); + draftItemVo.setTaskId(Util.null2String(map.get("requestId"))); + draftItemVo.setNodeKey(Util.null2String(map.get("nodeId"))); + draftItemVo.setNodeName(Util.null2String(map.get("nodeName"))); + draftItemVo.setArrivalTime(Util.null2String(map.get("receiveDate"))); + draftItemVo.setInstId(Util.null2String(map.get("requestId"))); + draftItemVo.setBizKey(Util.null2String(map.get("requestId"))); + draftItemVo.setBizName(Util.null2String(map.get("workflowName"))); + draftItemVo.setDrafterId(Util.null2String("10024473")); + draftItemVo.setStartUserId(Util.null2String("10024473")); + draftItemVo.setStartTime(Util.null2String(map.get("createDate")) + " " + Util.null2String(map.get("createTime"))); + draftItemVo.setPriority(Integer.parseInt(Util.null2String(map.get("requestLevel")))); + draftItemVo.setProgress(20); + draftItemVo.setDepartmentCode("FF05"); + draftItemVo.set_stop_do("/do/2850.29?id=107688"); + draftItemVo.set_detail_url(ecHost + "/spa/workflow/static4mobileform/index.html#/req?requestid=" + map.get("requestId")); + result.add(draftItemVo); + } + return result; + } + + + public Object getCreateList(User user) { + List> createList = mapper.selectCreateList(user.getUID()); + if (CollectionUtil.isEmpty(createList)) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + String ecHost = Util.getCusConfigValue("ECOLOGY_HOST_URL"); + for (Map map : createList) { + CreateItemVo createItemVo = new CreateItemVo(); + createItemVo.setGroup("ITA"); + createItemVo.setTitle(Util.null2String(map.get("requestName"))); + createItemVo.setTaskId(Util.null2String(map.get("requestId"))); + createItemVo.setNodeKey(Util.null2String(map.get("nodeId"))); + createItemVo.setRuNodeKeys(Util.null2String(map.get("nodeId"))); + createItemVo.setNodeName(Util.null2String(map.get("nodeName"))); + createItemVo.setRuNodeNames(Util.null2String(map.get("nodeName"))); + createItemVo.setArrivalTime(Util.null2String(map.get("receiveDate"))); + createItemVo.setInstId(Util.null2String(map.get("requestId"))); + createItemVo.setBizKey(Util.null2String(map.get("requestId"))); + createItemVo.setBizName(Util.null2String(map.get("workflowName"))); + createItemVo.setDrafterId(Util.null2String("10024473")); + createItemVo.setStartUserId(Util.null2String("10024473")); + createItemVo.setStartTime(Util.null2String(map.get("createDate")) + " " + Util.null2String(map.get("createTime"))); + createItemVo.setPriority(Integer.parseInt(Util.null2String(map.get("requestLevel")))); + createItemVo.setProgress(20); + createItemVo.setDepartmentCode("FF05"); + createItemVo.set_stop_do("/do/2850.29?id=107688"); + createItemVo.set_detail_url(ecHost + "/spa/workflow/static4mobileform/index.html#/req?requestid=" + map.get("requestId")); + result.add(createItemVo); + } + return result; } } diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/vo/CreateItemVo.java b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/CreateItemVo.java new file mode 100644 index 0000000..b71f53d --- /dev/null +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/CreateItemVo.java @@ -0,0 +1,50 @@ +package com.api.youhong.ai.guojun.todolist.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +/** + *

响应对象vo

+ * + *

create: 2023/7/18 14:08

+ * + * @author youHong.ai + */ +@Getter +@Setter +@ToString +public class CreateItemVo { + + private String Group; + private String Title; + private String TaskId; + private String NodeKey; + private String NodeName; + private String ArrivalTime; + private String LastSaverId; + private String LastSaveTime; + private String InstId; + private String BizKey; + private String BizName; + private String DrafterId; + private String StartUserId; + private String StartTime; + private String FinishTime; + private String Finale; + private String StopReason; + private String RuNodeNames; + private String RuNodeKeys; + private Long InstDuration; + private Integer Priority; + private Integer Progress; + + + private List ExtendInfo; + private String DepartmentCode; + private String _stop_do; + private String _detail_url; + +} diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/vo/DraftItemVo.java b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/DraftItemVo.java new file mode 100644 index 0000000..e560e0a --- /dev/null +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/DraftItemVo.java @@ -0,0 +1,43 @@ +package com.api.youhong.ai.guojun.todolist.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +/** + *

响应对象vo

+ * + *

create: 2023/7/18 14:08

+ * + * @author youHong.ai + */ +@Getter +@Setter +@ToString +public class DraftItemVo { + + private String Group; + private boolean Access; + private String Title; + private String TaskId; + private String NodeKey; + private String NodeName; + private String ArrivalTime; + private String LastSaverId; + private String LastSaveTime; + private String InstId; + private String BizKey; + private String BizName; + private String DrafterId; + private String StartUserId; + private String StartTime; + private Integer Priority; + private Integer Progress; + private List ExtendInfo; + private String DepartmentCode; + private String _stop_do; + private String _detail_url; + +} diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/vo/ExtendInfoVo.java b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/ExtendInfoVo.java new file mode 100644 index 0000000..2682bad --- /dev/null +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/ExtendInfoVo.java @@ -0,0 +1,20 @@ +package com.api.youhong.ai.guojun.todolist.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + *

+ * + *

create: 2023/7/18 14:13

+ * + * @author youHong.ai + */ +@Getter +@Setter +@ToString +public class ExtendInfoVo { + private String label; + private String value; +} diff --git a/src/main/java/com/api/youhong/ai/guojun/todolist/vo/TodoItemVo.java b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/TodoItemVo.java new file mode 100644 index 0000000..169a91e --- /dev/null +++ b/src/main/java/com/api/youhong/ai/guojun/todolist/vo/TodoItemVo.java @@ -0,0 +1,49 @@ +package com.api.youhong.ai.guojun.todolist.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +/** + *

响应对象vo

+ * + *

create: 2023/7/18 14:08

+ * + * @author youHong.ai + */ +@Getter +@Setter +@ToString +public class TodoItemVo { + + private String Group; + private String Title; + private String TaskId; + private String NodeKey; + private String NodeName; + private String ArrivalTime; + private String FirstReaderId; + private String FirstReadTime; + private String LastSaverId; + private String LastSaveTime; + private String InstId; + private String BizKey; + private String BizName; + private String DrafterId; + private String StartUserId; + private String StartTime; + private Integer Priority; + private Integer Progress; + private String ClaimState; + private boolean CanClaim; + private boolean CanUnclaim; + private List ExtendInfo; + private String DepartmentCode; + private String _claim_do; + private String _unclaim_do; + private String _flow_detail_do; + private String _detail_url; + +} diff --git a/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java b/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java index fbd4647..3ac4932 100644 --- a/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java +++ b/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java @@ -2,6 +2,7 @@ package com.customization.youhong.guoxiaojun.sso.impl; import aiyh.utils.Util; import aiyh.utils.tool.cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.weaverboot.frame.ioc.anno.classAnno.WeaSsoIocComponent; import com.weaverboot.frame.ioc.anno.methodAnno.WeaSsoIoc; import com.weaverboot.frame.ioc.handler.replace.weaReplaceParam.impl.WeaSsoParam; @@ -28,6 +29,7 @@ public class SsoGuoXiaoJunPocImpl { public static final String API_SSO_URL = "/api/aiyh/guoxiaojun/sso"; public static final String API_CHECK_OUT_URI = "/api/hrm/login/checkLogout"; + public static final String LOGIN_OALOGIN_JSP = "/login/OALogin.jsp"; private final Logger log = Util.getLogger(); /** @@ -40,12 +42,21 @@ public class SsoGuoXiaoJunPocImpl { try { HttpServletRequest request = weaSsoParam.getRequest(); String requestURI = request.getRequestURI(); + log.info("请求地址: " + requestURI); + boolean login = requestURI.contains("login") && requestURI.endsWith(".jsp"); + if (LOGIN_OALOGIN_JSP.equalsIgnoreCase(requestURI) || login) { + return; + } HttpServletResponse response = weaSsoParam.getResponse(); HttpSession session = request.getSession(true); Object weaverUser = session.getAttribute("weaver_user@bean"); + log.info("用户信息:" + JSON.toJSONString(weaverUser)); if (Objects.isNull(weaverUser)) { session.removeAttribute("outUserId"); + } else { + return; } + if (requestURI.equals(API_SSO_URL)) { // 登录oa系统 loginOa(request, response); @@ -56,6 +67,10 @@ public class SsoGuoXiaoJunPocImpl { session.removeAttribute("outUserId"); return; } + boolean htmlOrJsp = !requestURI.endsWith(".html") && !requestURI.endsWith(".jsp"); + if (requestURI.contains("/api") || htmlOrJsp) { + return; + } // sso 认证 if (session.getAttribute("outUserId") == null) { authorSso(response); @@ -75,10 +90,13 @@ public class SsoGuoXiaoJunPocImpl { private void loginOa(HttpServletRequest request, HttpServletResponse response) throws IOException { HttpSession session; String outUserId = request.getHeader("X-Credential-Identifier"); + log.info("获取的用户id:" + outUserId); // 登录处理 // String userId = Util.getCusConfigValueNullOrEmpty(outUserId,"1"); String userId = Util.getCusConfigValue(outUserId); + log.info("查询到的配置oa用户id:" + userId); if (StrUtil.isBlank(userId)) { + response.setStatus(500); return; } SessionUtil.createSession(userId, request, response); diff --git a/src/main/java/com/customization/youhong/pcn/datasmultilingual/MultilingualUtil.java b/src/main/java/com/customization/youhong/pcn/datasmultilingual/MultilingualUtil.java index 77fa9d7..4b63b86 100644 --- a/src/main/java/com/customization/youhong/pcn/datasmultilingual/MultilingualUtil.java +++ b/src/main/java/com/customization/youhong/pcn/datasmultilingual/MultilingualUtil.java @@ -95,7 +95,7 @@ public class MultilingualUtil { return null; } // 构建正则表达式模式 - String pattern = Pattern.quote(startPattern) + "(.*?)" + Pattern.quote(endPattern); + String pattern = Pattern.quote(startPattern) + "([\\s\\S]*?)" + Pattern.quote(endPattern); Pattern regex = Pattern.compile(pattern); Matcher matcher = regex.matcher(input); if (matcher.find()) { diff --git a/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceAddUserIdImpl.java b/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceAddUserIdImpl.java new file mode 100644 index 0000000..9ac9252 --- /dev/null +++ b/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceAddUserIdImpl.java @@ -0,0 +1,34 @@ +package com.customization.youhong.pcn.datasmultilingual.impl; + +import com.weaverboot.frame.ioc.anno.classAnno.WeaSsoIocComponent; +import com.weaverboot.frame.ioc.anno.methodAnno.WeaSsoIoc; +import com.weaverboot.frame.ioc.handler.replace.weaReplaceParam.impl.WeaSsoParam; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; + +/** + *

放入用户信息

+ * + *

create: 2023/7/18 16:51

+ * + * @author youHong.ai + */ + +@WeaSsoIocComponent("RequestFormServiceAddUserIdService") +public class RequestFormServiceAddUserIdImpl { + + public static final String API_WORKFLOW_REQFORM_DETAIL_DATA = "/api/workflow/reqform/detailData"; + public static final ThreadLocal USER_THREAD_LOCAL = new ThreadLocal<>(); + + @WeaSsoIoc(order = 1, description = "放入用户信息到指定地方") + public void setUserToLocal(WeaSsoParam weaSsoParam) { + HttpServletRequest request = weaSsoParam.getRequest(); + String requestURI = request.getRequestURI(); + if (API_WORKFLOW_REQFORM_DETAIL_DATA.equals(requestURI)) { + User user = HrmUserVarify.getUser(request, weaSsoParam.getResponse()); + USER_THREAD_LOCAL.set(user); + } + } +} diff --git a/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceMultilingualImpl.java b/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceMultilingualImpl.java index 7a6cfed..11cca70 100644 --- a/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceMultilingualImpl.java +++ b/src/main/java/com/customization/youhong/pcn/datasmultilingual/impl/RequestFormServiceMultilingualImpl.java @@ -6,8 +6,8 @@ import aiyh.utils.tool.cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.customization.youhong.pcn.datasmultilingual.MultilingualUtil; -import com.engine.common.constant.ParamConstant; import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.cfg.annotation.ServiceMethodDynamicProxy; import com.engine.core.impl.aop.AbstractServiceProxy; import com.engine.workflow.entity.requestForm.AutoApproveEntity; import com.engine.workflow.entity.requestForm.FieldValueBean; @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -40,8 +39,6 @@ public class RequestFormServiceMultilingualImpl extends AbstractServiceProxy imp private final Logger log = Util.getLogger(); - private final Map ipLanguageMap = new ConcurrentHashMap<>(); - private final String startPattern = "~`~`"; private final String endPattern = "`~`~"; @@ -51,13 +48,11 @@ public class RequestFormServiceMultilingualImpl extends AbstractServiceProxy imp } @Override + @ServiceMethodDynamicProxy(desc = "流程加载主表信息") public String loadForm(HttpServletRequest request) { String o = (String) executeMethod(request); - log.info("加载主表数据信息:" + JSON.toJSONString(o)); try { User user = HrmUserVarify.getUser(request, null); - String ipAddr = Util.getIpAddr(request); - ipLanguageMap.put(ipAddr, user.getUID()); JSONObject jsonObject = JSON.parseObject(o); Object mainData = jsonObject.get("maindata"); if (Objects.isNull(mainData)) { @@ -66,7 +61,7 @@ public class RequestFormServiceMultilingualImpl extends AbstractServiceProxy imp String mainDataStr = JSON.toJSONString(mainData); // 构建正则表达式模式 - String pattern = Pattern.quote(startPattern) + "(.*?)" + Pattern.quote(endPattern); + String pattern = Pattern.quote(startPattern) + "([\\s\\S]*?)" + Pattern.quote(endPattern); Pattern regex = Pattern.compile(pattern); Matcher matcher = regex.matcher(mainDataStr); List valueList = new ArrayList<>(); @@ -82,7 +77,7 @@ public class RequestFormServiceMultilingualImpl extends AbstractServiceProxy imp for (String value : valueList) { mainDataStr = mainDataStr.replaceFirst(pattern, value); } - jsonObject.put("maindata", mainDataStr); + jsonObject.put("maindata", JSON.parseObject(mainDataStr)); return jsonObject.toJSONString(); } catch (Exception e) { log.error("解析转换失败:" + Util.getErrString(e)); @@ -96,37 +91,28 @@ public class RequestFormServiceMultilingualImpl extends AbstractServiceProxy imp } @Override + @ServiceMethodDynamicProxy(desc = "流程加载明细数据") public Map loadDetailData(Map map) { Map o = (Map) executeMethod(map); - log.info("加载明细数据信息:" + JSON.toJSONString(o)); try { - String ip = Util.null2String(o.get(ParamConstant.PARAM_IP)); - Integer languageId = ipLanguageMap.get(ip); + Integer languageId = 7; + User user = RequestFormServiceAddUserIdImpl.USER_THREAD_LOCAL.get(); + if (Objects.nonNull(user)) { + languageId = user.getLanguage(); + } for (Map.Entry entry : o.entrySet()) { Object value = entry.getValue(); - if (value instanceof Map) { - Map valueMap = (Map) value; - for (Map.Entry valueEntry : valueMap.entrySet()) { - Object filed = valueEntry.getValue(); - if (filed instanceof FieldValueBean) { - FieldValueBean filedValueBean = (FieldValueBean) filed; - String filedValue = filedValueBean.getValue(); - String multilingualStr = MultilingualUtil.findString(filedValue, startPattern, endPattern); - if (StrUtil.isNotBlank(multilingualStr)) { - Map languageMap = MultilingualUtil.getLanguageMap(multilingualStr); - String parseValue = languageMap.get(languageId); - filedValueBean.setValue(parseValue); - } - } - } - } + findFieldValueBean(value, languageId); } } catch (Exception e) { log.error("解析转换明细失败:" + Util.getErrString(e)); + } finally { + RequestFormServiceAddUserIdImpl.USER_THREAD_LOCAL.remove(); } return o; } + @Override public Map saveDetailPaging(Map params) { return null; @@ -143,8 +129,44 @@ public class RequestFormServiceMultilingualImpl extends AbstractServiceProxy imp } @Override + @ServiceMethodDynamicProxy(desc = "字段联动多语言处理") public Map getLinkageResult(HttpServletRequest request, String type) { - return null; + Map result = (Map) executeMethod(request, type); + try { + User user = HrmUserVarify.getUser(request, null); + for (Map.Entry entry : result.entrySet()) { + findFieldValueBean(entry.getValue(), user.getLanguage()); + } + } catch (Exception e) { + log.error("解析转换字段联动失败:" + Util.getErrString(e)); + } + return result; + } + + + private void findFieldValueBean(Object obj, Integer languageId) { + if (obj instanceof Map) { + Map map = (Map) obj; + for (Map.Entry entry : map.entrySet()) { + findFieldValueBean(entry.getValue(), languageId); + } + } + if (obj instanceof List) { + List list = (List) obj; + for (Object item : list) { + findFieldValueBean(item, languageId); + } + } + if (obj instanceof FieldValueBean) { + FieldValueBean filedValueBean = (FieldValueBean) obj; + String filedValue = filedValueBean.getValue(); + String multilingualStr = MultilingualUtil.findString(filedValue, startPattern, endPattern); + if (StrUtil.isNotBlank(multilingualStr)) { + Map languageMap = MultilingualUtil.getLanguageMap(multilingualStr); + String parseValue = languageMap.get(languageId); + filedValueBean.setValue(parseValue); + } + } } @Override diff --git a/src/main/java/weaver/general/BaseBean.java b/src/main/java/weaver/general/BaseBean.java new file mode 100644 index 0000000..f4daf88 --- /dev/null +++ b/src/main/java/weaver/general/BaseBean.java @@ -0,0 +1,45 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package weaver.general; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.file.LogMan; +import weaver.file.Prop; + +import java.util.Properties; + +public class BaseBean { + private static final Prop prop = Prop.getInstance(); + private static final LogMan log = LogMan.getInstance(); + + public BaseBean() { + } + + public String getPropValue(String var1, String var2) { + Prop var10000 = prop; + return Prop.getPropValue(var1, var2); + } + + public Properties LoadTemplateProp(String var1) { + Prop var10000 = prop; + return Prop.loadTemplateProp(var1); + } + + public void writeLog(Object var1) { + this.writeLog(this.getClass().getName(), var1); + } + + public void writeLog(String var1, Object var2) { + Log var3 = LogFactory.getLog(var1); + if (var2 instanceof Exception) { + var3.error(var1, (Exception) var2); + } else { + var3.error(var2); + } + + } +} diff --git a/src/main/java/weaver/search/SearchClause.java b/src/main/java/weaver/search/SearchClause.java new file mode 100644 index 0000000..2ca7188 --- /dev/null +++ b/src/main/java/weaver/search/SearchClause.java @@ -0,0 +1,180 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package weaver.search; + +import weaver.general.BaseBean; + +import java.io.Serializable; + +public class SearchClause extends BaseBean implements Serializable { + private static final long serialVersionUID = -8607280947214957731L; + private String whereclause = ""; + private String whereclause2 = ""; + private String orderclause = ""; + private String orderclause2 = ""; + private String workflowid = ""; + private String nodetype = ""; + private String fromdate = ""; + private String todate = ""; + private String creatertype = ""; + private String createrid = ""; + private String requestlevel = ""; + private String requestname = ""; + private String fromdate2 = ""; + private String todate2 = ""; + private String departmentid = ""; + private String requestmark = ""; + + public SearchClause() { + } + + public void resetClause() { + this.whereclause = ""; + this.whereclause2 = ""; + this.orderclause = ""; + this.orderclause2 = ""; + this.workflowid = ""; + this.nodetype = ""; + this.fromdate = ""; + this.todate = ""; + this.creatertype = ""; + this.createrid = ""; + this.requestlevel = ""; + this.requestname = ""; + this.fromdate2 = ""; + this.todate2 = ""; + this.departmentid = ""; + this.requestmark = ""; + } + + public void setWhereClause(String var1) { + this.whereclause = var1; + } + + public void setOrderClause(String var1) { + this.orderclause = var1; + } + + public void setOrderClause2(String var1) { + this.orderclause2 = var1; + } + + public void setWorkflowId(String var1) { + this.workflowid = var1; + } + + public void setNodeType(String var1) { + this.nodetype = var1; + } + + public void setFromDate(String var1) { + this.fromdate = var1; + } + + public void setToDate(String var1) { + this.todate = var1; + } + + public void setCreaterType(String var1) { + this.creatertype = var1; + } + + public void setCreaterId(String var1) { + this.createrid = var1; + } + + public void setRequestLevel(String var1) { + this.requestlevel = var1; + } + + public void setRequestName(String var1) { + this.requestname = var1; + } + + public void setFromDate2(String var1) { + this.fromdate2 = var1; + } + + public void setToDate2(String var1) { + this.todate2 = var1; + } + + public String getWhereclause2() { + return this.whereclause2; + } + + public void setWhereclause2(String var1) { + this.whereclause2 = var1; + } + + public String getDepartmentid() { + return this.departmentid; + } + + public void setDepartmentid(String var1) { + this.departmentid = var1; + } + + public String getWhereClause() { + return this.whereclause; + } + + public String getOrderClause() { + return this.orderclause; + } + + public String getOrderClause2() { + return this.orderclause2; + } + + public String getWorkflowId() { + return this.workflowid; + } + + public String getNodeType() { + return this.nodetype; + } + + public String getFromDate() { + return this.fromdate; + } + + public String getToDate() { + return this.todate; + } + + public String getCreaterType() { + return this.creatertype; + } + + public String getCreaterId() { + return this.createrid; + } + + public String getRequestLevel() { + return this.requestlevel; + } + + public String getRequestName() { + return this.requestname; + } + + public String getFromDate2() { + return this.fromdate2; + } + + public String getToDate2() { + return this.todate2; + } + + public String getRequestmark() { + return this.requestmark; + } + + public void setRequestmark(String var1) { + this.requestmark = var1; + } +} diff --git a/src/main/youhong_ai_old_src/weaver/aiyh_pcn/copy_attachment/CopyAttachmentAction.java b/src/main/youhong_ai_old_src/weaver/aiyh_pcn/copy_attachment/CopyAttachmentAction.java index db91c13..7469a35 100644 --- a/src/main/youhong_ai_old_src/weaver/aiyh_pcn/copy_attachment/CopyAttachmentAction.java +++ b/src/main/youhong_ai_old_src/weaver/aiyh_pcn/copy_attachment/CopyAttachmentAction.java @@ -4,15 +4,15 @@ import aiyh.utils.Util; import aiyh.utils.mapUtil.ParaMap; import aiyh.utils.sqlUtil.sqlResult.impl.PrepSqlResultImpl; import aiyh.utils.zwl.common.ToolUtil; +import com.alibaba.fastjson.JSON; import com.api.aiyh_pcn.copy_attachment.dao.ConfigTableData; import com.api.aiyh_pcn.copy_attachment.model.ConfigEmpty; +import org.apache.log4j.Logger; import weaver.conn.RecordSet; import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.RequestInfo; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author EBU7-dev1-ayh @@ -22,111 +22,121 @@ import java.util.Map; public class CopyAttachmentAction extends ToolUtil implements Action { - //当前类名称 - private final String className = "AddCustomer_Action"; - private String overrideField; - - - @Override - public String execute(RequestInfo requestInfo) { - this.writeDebuggerLog(className + "======>" + overrideField); - try { - String workflowid = requestInfo.getWorkflowid(); - //流程请求ID - String requestid = Util.null2String(requestInfo.getRequestid()); - //流程表单名称 - String tableName = requestInfo.getRequestManager().getBillTableName(); - ConfigEmpty config = ConfigTableData.getConfig(workflowid); + + /** 覆盖附件的字段id */ + private String overrideField; + + private final Logger log = Util.getLogger(); + + + @Override + public String execute(RequestInfo requestInfo) { + try { + String workflowid = requestInfo.getWorkflowid(); + // 流程请求ID + String requestid = Util.null2String(requestInfo.getRequestid()); + // 流程表单名称 + String tableName = requestInfo.getRequestManager().getBillTableName(); + ConfigEmpty config = ConfigTableData.getConfig(workflowid); // 查询是流程数据 - String query = "select * from " + tableName + " where requestid = ?"; - RecordSet rs = new RecordSet(); - rs.executeQuery(query, requestid); - Map requestMap = Util.recordSet2Map(rs); - if (requestMap == null || config == null) { - return Action.SUCCESS; - } - if (!requestMap.get(config.getShowField()).equals(config.getShowValue())) { - return Action.SUCCESS; - } + String query = "select * from " + tableName + " where requestid = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(query, requestid); + Map requestMap = Util.recordSet2Map(rs); + if (requestMap == null || config == null) { + return Action.SUCCESS; + } + if (!requestMap.get(config.getShowField()).equals(config.getShowValue())) { + return Action.SUCCESS; + } // 需要模板覆盖 - String attachmentValue = String.valueOf(requestMap.get(config.getAttachmentField())); - String overrideValue = String.valueOf(requestMap.get(overrideField)); - this.writeDebuggerLog(requestMap.toString()); + String attachmentValue = String.valueOf(requestMap.get(config.getAttachmentField())); + String overrideValue = String.valueOf(requestMap.get(overrideField)); + log.info(JSON.toJSONString(requestMap)); // 查询这些文件的相关信息 - query = "select distinct docid,imagefilename from docimagefile where docid in (" + attachmentValue + ")"; - this.writeDebuggerLog("查询附件信息说sql:" + query); - rs.executeQuery(query); - List attachmentList = Util.recordeSet2Array(rs, AttachmentIdName.class); - query = "select distinct docid,imagefilename from docimagefile where docid in (" + overrideValue + ")"; - rs.executeQuery(query); - this.writeDebuggerLog("查询覆盖文件信息:" + query); - List overrideList = Util.recordeSet2Array(rs, AttachmentIdName.class); - this.writeDebuggerLog(attachmentList.toString()); - this.writeDebuggerLog(overrideList.toString()); - if (attachmentList.size() != overrideList.size()) { - requestInfo.getRequestManager().setMessagecontent("合同模板与上传模板数量不一致"); - requestInfo.getRequestManager().setMessageid("合同模板与上传模板数量不一致"); - return Action.FAILURE_AND_CONTINUE; - } + query = "select distinct docid,imagefilename from docimagefile where docid in (" + attachmentValue + ")"; + rs.executeQuery(query); + List attachmentList = Util.recordeSet2Array(rs, AttachmentIdName.class); + query = "select distinct docid,imagefilename from docimagefile where docid in (" + overrideValue + ")"; + rs.executeQuery(query); + List overrideList = Util.recordeSet2Array(rs, AttachmentIdName.class); + Set docSet = new HashSet<>(); + Set overridSet = new HashSet<>(); + for (AttachmentIdName attachmentIdName : attachmentList) { + docSet.add(attachmentIdName.getDocid()); + } + for (AttachmentIdName attachmentIdName : overrideList) { + overridSet.add(attachmentIdName.getDocid()); + } + + if (docSet.size() != overridSet.size()) { + requestInfo.getRequestManager().setMessagecontent("合同模板与上传模板数量不一致"); + requestInfo.getRequestManager().setMessageid("合同模板与上传模板数量不一致"); + return Action.FAILURE_AND_CONTINUE; + } // 需要移除的文件 - List removeFile = new ArrayList<>(); + List removeFile = new ArrayList<>(); // 移除所有的pdf文件 - for (AttachmentIdName overrideIdName : overrideList) { - String fileName = overrideIdName.getImagefilename(); - String extension = ""; - this.writeDebuggerLog(overrideIdName.toString()); - int index = fileName.lastIndexOf('.'); - if (index > 0) { - extension = fileName.substring(index + 1); - } - this.writeDebuggerLog(extension); - if ("pdf".equalsIgnoreCase(extension)) { - removeFile.add(overrideIdName); - } - } + for (AttachmentIdName overrideIdName : overrideList) { + String fileName = overrideIdName.getImagefilename(); + String extension = ""; + log.info(overrideIdName.toString()); + int index = fileName.lastIndexOf('.'); + if (index > 0) { + extension = fileName.substring(index + 1); + } + if ("pdf".equalsIgnoreCase(extension)) { + removeFile.add(overrideIdName); + } + } // 删除文件 - for (AttachmentIdName overrideIdName : removeFile) { - overrideList.remove(overrideIdName); - } + for (AttachmentIdName overrideIdName : removeFile) { + overrideList.remove(overrideIdName); + } // 添加pdf文件 - for (AttachmentIdName attachmentIdName : attachmentList) { - String fileName = attachmentIdName.getImagefilename(); - String extension = ""; - this.writeDebuggerLog(attachmentIdName.toString()); - int index = fileName.lastIndexOf('.'); - if (index > 0) { - extension = fileName.substring(index + 1); - } - this.writeDebuggerLog(extension); - if ("pdf".equalsIgnoreCase(extension)) { - overrideList.add(attachmentIdName); - } - } - if (attachmentList.size() != overrideList.size()) { - requestInfo.getRequestManager().setMessagecontent("合同模板与上传模板数量不一致"); - requestInfo.getRequestManager().setMessageid("合同模板与上传模板数量不一致"); - return Action.FAILURE_AND_CONTINUE; - } - StringBuilder overrideBuilder = new StringBuilder(); - for (AttachmentIdName overrideIdName : overrideList) { - overrideBuilder.append(",").append(overrideIdName.getDocid()); - } - String overrideResult = Util.removeSeparator(overrideBuilder); - this.writeDebuggerLog(overrideResult); - PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(tableName, ParaMap.create().put(this.overrideField, overrideResult), - Util.createPrepWhereImpl().whereAnd("requestid").whereEqual(requestid)); - rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs()); - } catch (Exception e) { - this.writeErrorLog(e.getMessage()); - } - return Action.SUCCESS; - } - - public String getOverrideField() { - return overrideField; - } - - public void setOverrideField(String overrideField) { - this.overrideField = overrideField; - } + for (AttachmentIdName attachmentIdName : attachmentList) { + String fileName = attachmentIdName.getImagefilename(); + String extension = ""; + int index = fileName.lastIndexOf('.'); + if (index > 0) { + extension = fileName.substring(index + 1); + } + if ("pdf".equalsIgnoreCase(extension)) { + overrideList.add(attachmentIdName); + } + } + docSet.clear(); + overridSet.clear(); + for (AttachmentIdName attachmentIdName : attachmentList) { + docSet.add(attachmentIdName.getDocid()); + } + for (AttachmentIdName attachmentIdName : overrideList) { + overridSet.add(attachmentIdName.getDocid()); + } + if (docSet.size() != overridSet.size()) { + requestInfo.getRequestManager().setMessagecontent("合同模板与上传模板数量不一致"); + requestInfo.getRequestManager().setMessageid("合同模板与上传模板数量不一致"); + return Action.FAILURE_AND_CONTINUE; + } + StringBuilder overrideBuilder = new StringBuilder(); + for (AttachmentIdName overrideIdName : overrideList) { + overrideBuilder.append(",").append(overrideIdName.getDocid()); + } + String overrideResult = Util.removeSeparator(overrideBuilder); + PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(tableName, ParaMap.create().put(this.overrideField, overrideResult), + Util.createPrepWhereImpl().whereAnd("requestid").whereEqual(requestid)); + rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs()); + } catch (Exception e) { + this.log.error(e.getMessage()); + } + return Action.SUCCESS; + } + + public String getOverrideField() { + return overrideField; + } + + public void setOverrideField(String overrideField) { + this.overrideField = overrideField; + } } diff --git a/src/test/java/youhong/ai/pcn/Test01.java b/src/test/java/youhong/ai/pcn/Test01.java index fd04386..b378df7 100644 --- a/src/test/java/youhong/ai/pcn/Test01.java +++ b/src/test/java/youhong/ai/pcn/Test01.java @@ -1,6 +1,8 @@ package youhong.ai.pcn; +import aiyh.utils.GenerateFileUtil; import basetest.BaseTest; +import com.api.youhong.ai.guojun.sso.controller.SsoLoginAuthController; import com.api.youhong.ai.pcn.download.service.EncryptionFileIdUtil; import com.api.youhong.ai.pcn.ssoyunzhao.service.SsoYunZhaoService; import org.junit.Test; @@ -36,4 +38,10 @@ public class Test01 extends BaseTest { String decode = URLDecoder.decode(encode, "UTF-8"); System.out.println(EncryptionFileIdUtil.decrypt(decode)); } + + @Test + public void test() { + // System.out.println(Double.class.isAssignableFrom(double.class)); + GenerateFileUtil.createApiDoc(SsoLoginAuthController.class); + } } diff --git a/src/test/java/youhong/ai/pcn/multilingual/MultilingualTest.java b/src/test/java/youhong/ai/pcn/multilingual/MultilingualTest.java index e8a7695..3db0678 100644 --- a/src/test/java/youhong/ai/pcn/multilingual/MultilingualTest.java +++ b/src/test/java/youhong/ai/pcn/multilingual/MultilingualTest.java @@ -1,11 +1,10 @@ package youhong.ai.pcn.multilingual; import basetest.BaseTest; +import com.alibaba.fastjson.JSON; +import com.customization.youhong.pcn.datasmultilingual.MultilingualUtil; import org.junit.Test; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** *

ceshi

* @@ -18,51 +17,19 @@ public class MultilingualTest extends BaseTest { @Test public void test() { - String mainDataStr = "{\n" + - " \"detail_1\":\n" + - " {\n" + - " \"indexnum\": 1,\n" + - " \"rowDatas\":\n" + - " {\n" + - " \"row_0\":\n" + - " {\n" + - " \"field24478\":\n" + - " {\n" + - " \"value\": \"A:\\nB:\\nC:\\nD:\"\n" + - " },\n" + - " \"field24632\":\n" + - " {\n" + - " \"value\": \"\"\n" + - " },\n" + - " \"field24631\":\n" + - " {\n" + - " \"value\": \"~`~`7当与商业伙伴、客户或第三方打交道时,必须避免留下任何保时捷进行不寻常的业务实践或有针对性的措施以对业务决策施加不公平的影响的印象。因此,如果向商业伙伴、客户或第三方提供/收取的利益不符合以下容许标准,或者发现给予方的动机不纯正时,则不得寻求或鼓励、且应拒绝从商业伙伴、客户或第三方那里获得或向其提供利益。\\n(1) 无(潜在)利益冲突:根据员工和直线经理的评估,以及经咨询集团或本地合规咨询平台(如适用),提供或收取利益不构成利益冲突。\\n(2) 不得给予好处:不得采取意在影响商业决策或获得对价、超出内部批准的促销或客户保留措施、无法被定义为一般商业惯例或显示不公平的动机的措施。\\n(3) 非关键时刻:不得于例如招标邀请时、合同谈判和谈判结束时或进行业务关系审计时(或于接近的时间)收取或提供利益。\\n(4) 适当价值:利益应当有符合社交的适当需要(即利益价值应当与接收者或提供者的生活水平相符),或符合第三方的惯例(即与行业水平相当或是在相关措施的背景下)。且遵守礼物的价格限额:每份礼物为800元人民币(税前)或每一项邀请为1600元人民币(税前)。提供或接受的邀请,主办方代表应同样参加。\\n(5) 不得形成固定惯例:利益不得由同一人定期地或频繁地收取或提供,即,每个商业伙伴,一年之内,仅限一份总价值为800元人民币的礼物或两份总价值不超过800元人民币的礼物。\\n(6) 非私人场合:应在商业背景下,而非私人活动(例如生日或婚礼)的场合中提供或接受利益。\\n(7) 批准:在上述容许范围内向商业伙伴、客户或第三方收取或提供利益前需获得直线经理的批准。任何上述容许范围的例外情形及提供给或自政府工作人员收取的利益必须由合规咨询平台检查和批准。`~`8When dealing with Business Partners, Customers or Third Parties, it is essential to avoid any impression that PCN engages in unusual business practices or targeted measures to exercise unfair influence on business decisions. Therefore, benefits from / to Business Partners, Customers or Third Parties must not be solicited or encouraged but should be rejected, if these are not in accordance with the following admissibility criteria or if unfair motivation of the giver is identified.\\n(1) No (potential) conflict of interest: On the basis of the assessment by the employee and the Line Manager and, if applicable, after consultation with the central or local Compliance Helpdesk, granting or accepting the benefit does not cause a Conflict of Interest.\\n(2) No granting of advantages: No measures have been taken which are specifically intended to influence a business decision or in the expectation of consideration, which either exceed an internally approved sales promotion or customer retention measures, which cannot be regarded as customary business practice, or which reveals an unfair motivation.\\n(3) No critical timing: Benefits are not granted or accepted in connection with (or close in time to), for instance, an invitation of tender, contract negotiations and the conclusion of such negotiations or auditing the business relationship.\\n(4) Appropriate value: Benefits are socially appropriate (i.e. the value of the benefit is consistent with the standard of living of the recipient or giver) or customary among Third Parties (i.e. comparable in the industry or in the context of the measure) and stay within the value limits for gifts of RMB 800 (pre-tax) per gift or RMB 1600 (pre-tax) per invitation. An invitation should only be granted or accepted if the host's representative(s) participate in the event.\\n(5) Not applied practice: The benefits are not granted or accepted by the same person on a regular or frequent basis, i.e. only one gift with a total value of RMB 800 or two gifts up to a maximum limit of RMB 800 per Business Partner per year are permitted.\\n(6) No personal occasion: Benefits are granted or accepted in a business context and not on the occasion of a personal event such as a birthday or a wedding.\\n(7) Approval: Benefits to/from Business Partner(s) or from Customers or Third Parties within the above mentioned admissibility criteria must be checked and approved by the Line Manager. Exceptions to the above admissibility criteria and benefits to/from Public Official(s) must be checked and approved by the Compliance Helpdesk.`~`~\"\n" + - " },\n" + - " \"field24629\":\n" + - " {\n" + - " \"value\": \"当与商业伙伴、客户或第三方打交道时,必须避免留下任何保时捷进行不寻常的业务实践或有针对性的措施以对业务决策施加不公平的影响的印象。因此,如果向商业伙伴、客户或第三方提供/收取的利益不符合以下容许标准,或者发现给予方的动机不纯正时,则不得寻求或鼓励、且应拒绝从商业伙伴、客户或第三方那里获得或向其提供利益。\\n(1) 无(潜在)利益冲突:根据员工和直线经理的评估,以及经咨询集团或本地合规咨询平台(如适用),提供或收取利益不构成利益冲突。\\n(2) 不得给予好处:不得采取意在影响商业决策或获得对价、超出内部批准的促销或客户保留措施、无法被定义为一般商业惯例或显示不公平的动机的措施。\\n(3) 非关键时刻:不得于例如招标邀请时、合同谈判和谈判结束时或进行业务关系审计时(或于接近的时间)收取或提供利益。\\n(4) 适当价值:利益应当有符合社交的适当需要(即利益价值应当与接收者或提供者的生活水平相符),或符合第三方的惯例(即与行业水平相当或是在相关措施的背景下)。且遵守礼物的价格限额:每份礼物为800元人民币(税前)或每一项邀请为1600元人民币(税前)。提供或接受的邀请,主办方代表应同样参加。\\n(5) 不得形成固定惯例:利益不得由同一人定期地或频繁地收取或提供,即,每个商业伙伴,一年之内,仅限一份总价值为800元人民币的礼物或两份总价值不超过800元人民币的礼物。\\n(6) 非私人场合:应在商业背景下,而非私人活动(例如生日或婚礼)的场合中提供或接受利益。\\n(7) 批准:在上述容许范围内向商业伙伴、客户或第三方收取或提供利益前需获得直线经理的批准。任何上述容许范围的例外情形及提供给或自政府工作人员收取的利益必须由合规咨询平台检查和批准。\"\n" + - " },\n" + - " \"field24631\":\n" + - " {\n" + - " \"value\": \"~`~`7当与商业伙伴、客户或第三方打交道时,益不符合以下容许标准,或者发现给予方益冲突:根据员工和直线经理的评估,以及得给予好处:近的时间)收取或提供利益。\\n(4) 适当价值:利益应当有符合社交的适当需要(即利益价值应当与接收者或提供者的生活水平相符),或符合第三方的惯例(即与行业水平相当或是在相关措施的背景下)。且遵守礼物的价格限额:每份礼物为台检查和批准。`~`8When dealing with Business Partners, Customers or Third Parties, it is essential to avoid any impression that PCN engages in unusual business practices or targeted measures to exercise unfair influence on business decisions. Therefore, benefits from / to Business Partners, Customers or Thirdmer retention measures, which cannot be regarded as customary business practice, or which reveals an unfair motivation.\\n(3) No critical timing: Benefits are not granted or accepted in connection with (or close in time to), for instance, an invitation of tender, contract negotiations and the conclusion of such negotiations or auditing the business relationship.\\n(4) Appropriate value: Benefits are socially appropriate (i.e. the value of the benefit is consistent with the standard of living of the recipient or giver) or customary among Third Parties (i.e. comparable in the industry or in the context of the measure) and stay within the value limits for gifts of RMB 800 (pre-tax) per gift or RMB 1600 (pre-tax) per invitation. An invitation should only be granted or accepted if the host's representative(s) participate in the event.\\n(5) Not applied practice: The benefits are not granted or accepted by the same person on a regular or frequent basis, i.e. only one gift with a total value of RMB 800 or two gifts up to a maximum limit of RMB 800 per Business Partner per year are permitted.\\n(6) No ps to/from Public Official(s) must be checked and approved by the Compliance Helpdesk.`~`~\"\n" + - " },\n" + - " \"keyid\": 65,\n" + - " \"field24476\":\n" + - " {\n" + - " \"value\": \"When dealing with Business Partners, Customers or Third Parties, it is essential to avoid any impression that PCN engages in unusual business practices or targeted measures to exercise unfair influence on business decisions. Therefore, benefits from / to Business Partners, Customers or Third Parties must not be solicited or encouraged but should be rejected, if these are not in accordance with the following admissibility criteria or if unfair motivation of the giver is identified.\\n(1) No (potential) conflict of interest: On the basis of the assessment by the employee and the Line Manager and, if applicable, after consultation with the central or local Compliance Helpdesk, granting or accepting the benefit does not cause a Conflict of Interest.\\n(2) No granting of advantages: No measures have been taken which are specifically intended to influence a business decision or in the expectation of consideration, which either exceed an internally approved sales promotion or customer retention measures, which cannot be regarded as customary business practice, or which reveals an unfair motivation.\\n(3) No critical timing: Benefits are not granted or accepted in connection with (or close in time to), for instance, an invitation of tender, contract negotiations and the conclusion of such negotiations or auditing the business relationship.\\n(4) Appropriate value: Benefits are socially appropriate (i.e. the value of the benefit is consistent with the standard of living of the recipient or giver) or customary among Third Parties (i.e. comparable in the industry or in the context of the measure) and stay within the value limits for gifts of RMB 800 (pre-tax) per gift or RMB 1600 (pre-tax) per invitation. An invitation should only be granted or accepted if the host's representative(s) participate in the event.\\n(5) Not applied practice: The benefits are not granted or accepted by the same person on a regular or frequent basis, i.e. only one gift with a total value of RMB 800 or two gifts up to a maximum limit of RMB 800 per Business Partner per year are permitted.\\n(6) No personal occasion: Benefits are granted or accepted in a business context and not on the occasion of a personal event such as a birthday or a wedding.\\n(7) Approval: Benefits to/from Business Partner(s) or from Customers or Third Parties within the above mentioned admissibility criteria must be checked and approved by the Line Manager. Exceptions to the above admissibility criteria and benefits to/from Public Official(s) must be checked and approved by the Compliance Helpdesk.\"\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}"; + String mainDataStr = "~`~`7当与商业伙伴、客户或第三方打交道时,必须避免留下任何保时捷进行不寻常的业务实践或有针对性的措施以对业务决策施加不公平的影响的印象。因此,如果向商业伙伴、客户或第三方提供/收取的利益不符合以下容许标准,或者发现给予方的动机不纯正时,则不得寻求或鼓励、且应拒绝从商业伙伴、客户或第三方那里获得或向其提供利益。\n" + + "(1) 无(潜在)利益冲突:根据员工和直线经理的评估,以及经咨询集团或本地合规咨询平台(如适用),提供或收取利益不构成利益冲突。\n" + + "(2) 不得给予好处:不得采取意在影响商业决策或获得对价、超出内部批准的促销或客户保留措施、无法被定义为一般商业惯例或显示不公平的动机的措施。\n" + + "(3) 非关键时刻:不得于例如招标邀请时、合同谈判和谈判结束时或进行业务关系审计时(或于接近的时间)收取或提供利益。\n" + + "(4) 适当价值:利益应当有符合社交的适当需要(即利益价值应当与接收者或提供者的生活水平相符),或符合第三方的惯例(即与行业水平相当或是在相关措施的背景下)。且遵守礼物的价格限额:每份礼物为800元人民币(税前)或每一项邀请为1600元人民币(税前)。提供或接受的邀请,主办方代表应同样参加。\n" + + "(5) 不得形成固定惯例:利益不得由同一人定期地或频繁地收取或提供,即,每个商业伙伴,一年之内,仅限一份总价值为800元人民币的礼物或两份总价值不超过800元人民币的礼物。\n" + + "(6) 非私人场合:应在商业背景下,而非私人活动(例如生日或婚礼)的场合中提供或接受利益。\n" + + "(7) 批准:在上述容许范围内向商业伙伴、客户或第三方收取或提供利益前需获得直线经理的批准。任何上述容许范围的例外情形及提供给或自政府工作人员收取的利益必须由合规咨询平台检查和批准。`~`8intRow size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs`~`~ "; String startPattern = "~`~`"; String endPattern = "`~`~"; // 构建正则表达式模式 - String pattern = Pattern.quote(startPattern) + "(.*?)" + Pattern.quote(endPattern); - Pattern regex = Pattern.compile(pattern); - Matcher matcher = regex.matcher(mainDataStr); - while (matcher.find()) { - System.out.println(matcher.group(1)); - } + String string = MultilingualUtil.findString(mainDataStr, startPattern, endPattern); + System.out.println(string); + System.out.println(JSON.toJSONString(MultilingualUtil.getLanguageMap(string))); } } diff --git a/src/test/resources/WEB-INF/eas.zip b/src/test/resources/WEB-INF/eas.zip new file mode 100644 index 0000000000000000000000000000000000000000..0a00774921f20eadbc737e99af6870ff2e5ed34a GIT binary patch literal 54643 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%0DkK2(drz2@nqtf(!h?IFQC(oxD_Q6PY!s^iF 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 G!~*~coIrd4 literal 0 HcmV?d00001 diff --git a/src/test/resources/WEB-INF/ecology/cportal/work_sm.jsp b/src/test/resources/WEB-INF/ecology/cportal/work_sm.jsp new file mode 100755 index 0000000..1f8949d --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/cportal/work_sm.jsp @@ -0,0 +1,576 @@ +<%@page import="weaver.conn.RecordSet"%> +<%@page import="weaver.hrm.company.DepartmentComInfo"%> +<%@page import="weaver.hrm.company.SubCompanyComInfo"%> +<%@page import="weaver.hrm.settings.BirthdayReminder"%> +<%@ page isELIgnored="false"%> +<%@ include file="/cportal/common/init.jsp" %> +<%@ page import="weaver.general.GCONST" %> +<%@ page language="java" contentType="text/html; charset=GBK" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="cp" tagdir="/WEB-INF/tags/cportal" %> +<%@ taglib prefix="cdata" tagdir="/WEB-INF/tags/cportal/data" %> +<%@ taglib prefix="csnip" tagdir="/WEB-INF/tags/cportal/snip" %> +<%@ taglib prefix="oscache" uri="http://www.opensymphony.com/oscache" %> +<%@ page import="weaver.systeminfo.SystemEnv"%> +<%@ page import="weaver.hrm.HrmUserVarify"%> +<%@ page import="weaver.hrm.User"%> +<%@ page import="weaver.general.StaticObj" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.rtx.RTXConfig" %> +<%@ page import="java.util.*" %> +<%@ page import="java.text.*" %> +<%@ page import="java.sql.Timestamp" %> +<%@ page import="weaver.general.GCONST" %> +<%@ page import="weaver.general.IsGovProj" %> + +<%@ include file="/times.jsp" %> + + + + + + + + + + + + +<% + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html;charset=UTF-8"); + String workflowType=Util.null2String(request.getParameter("workflowType")); + + String operateType = Util.null2String(request.getParameter("operateType")); + + String moreUrl=""; + String src0 = ""; + if("doing".equals(workflowType) || "".equals(workflowType)){ + moreUrl="/workflow/search/WFSearchTemp.jsp?method=all&iscomplete=0"; + } else if("done".equals(workflowType)){ + moreUrl="/workflow/search/WFSearchTemp.jsp?method=all&viewType=2&viewScope=done&complete=2"; + } else if("myrequest".equals(workflowType)){ + moreUrl="/workflow/search/WFSearchTemp.jsp?method=myall"; + } else if("supervice".equals(workflowType)){ + moreUrl = "/workflow/search/RequestSupervise.jsp"; + } + + +%> + + + + Ϻó̳-ƽ̨ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + + + + + + + + +
Ѱҵ  + +
+
+ +
+
 
+ + + + + + + + + +
+ ½ + + ѯ + + ̼ + + ̱ + + +
+
 
+ + + + + + + <% + String select_sql = "select top(8) * from uf_QuickButton where isShow =1 order by showorder "; + if(rs.executeSql(select_sql)){ + int k = 0; + int num = rs.getCounts(); + while(rs.next()){ + String icon = Util.null2String(rs.getString("icon")); + String iconOver = Util.null2String(rs.getString("iconOver")); + String link = Util.null2String(rs.getString("link")); + String name = Util.null2String(rs.getString("name")); + + if(k == 0){ + out.println(""); + } + if((k++)%4==0 && k > 0){ + out.println(""); + } + + %> + + + + <% if(k == num){ + out.println(""); + } + } + } + %> + + +
ݹ + +
 
 
+ + + + + + <%=name %> + +
+ +
+ +
+ + + + + + + + +
ҵĻ + +
+ + + + + + + +
+ + + + + ½ + + + + + + Դ +
+
+
 
+ +
+ + + + + + + + +
Ϣ + +
+ +
+
 
+ + + + + + + + +
ǿϢ + +
+ +
+
 
+ + + + + + + + +
չֳ񹤵Ϣ + +
+ +
+
+
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp b/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp new file mode 100644 index 0000000..33186e8 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp @@ -0,0 +1,97 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.conn.RecordSet" %> +<%@ page import="weaver.eas.MD5Util,weaver.general.BaseBean,weaver.general.Util" %> +<%@ page import="weaver.hrm.HrmUserVarify" %> +<%@ page import="weaver.hrm.User" %> + +<% + RecordSet rs = new RecordSet(); + User user = HrmUserVarify.getUser(request, response); + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid"), "true"); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill"), "88888888"); + String isweb = Util.null2String(request.getParameter("isweb"), "true"); + String host = Util.null2String(b.getPropValue("eas", "eas_host")); + String port = Util.null2String(b.getPropValue("eas", "eas_port")); + String dcname = Util.null2String(b.getPropValue("eas", "dcname")); + String eas_host = host + (port.equals("") ? "" : ":" + port); + + String eas_requestinfotodo = Util.null2String(rs.getPropValue("eas", "TODOView")); + String eas_linkname = Util.null2String(rs.getPropValue("eas", "linkname")); + + rs.executeSql("select * from openquery(" + eas_linkname + ",''select fweb from SM20230606.T_SM_VWorkFlowToDo where fpersonusernumber=''" + loginid + "'' and FASSIGNID=''" + requestid + "''')"); + if (rs.next()) { + isweb = rs.getString(1); + } + response.setHeader("Access-Control-Allow-Origin", "*"); +%> + + 查看流程 + + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak b/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak new file mode 100644 index 0000000..7ff0171 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak @@ -0,0 +1,57 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*,weaver.general.*,weaver.conn.*" %> + +<% + RecordSet rs = new RecordSet(); + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid"),"true"); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill"),"88888888"); + String isweb = Util.null2String(request.getParameter("isweb"),"true"); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); + + String eas_requestinfotodo = Util.null2String(rs.getPropValue("eas","TODOView")); + String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + + rs.executeSql("select * from openquery("+eas_linkname+",''select fweb from SM20230606.T_SM_VWorkFlowToDo where fpersonusernumber=''"+loginid+"'' and FASSIGNID=''"+requestid+"''')"); + if(rs.next()){ + isweb = rs.getString(1); + } +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak.20200113 b/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak.20200113 new file mode 100644 index 0000000..d13e9ff --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest.jsp.bak.20200113 @@ -0,0 +1,58 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*,weaver.general.*,weaver.conn.*" %> + +<% + RecordSet rs = new RecordSet(); + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid"),"true"); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill"),"88888888"); + String isweb = Util.null2String(request.getParameter("isweb"),"true"); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); + + String eas_requestinfotodo = Util.null2String(rs.getPropValue("eas","TODOView")); + String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + + rs.executeSql("select * from openquery("+eas_linkname+",''select fweb from SM20230606.T_SM_VWorkFlowToDo where fpersonusernumber=''"+loginid+"'' and FASSIGNID=''"+requestid+"''')"); + if(rs.next()){ + isweb = rs.getString(1); + } +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest0331.jsp b/src/test/resources/WEB-INF/ecology/eas/ViewRequest0331.jsp new file mode 100644 index 0000000..9f0aaa0 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest0331.jsp @@ -0,0 +1,57 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*,weaver.general.*,weaver.conn.*" %> + +<% + RecordSet rs = new RecordSet(); + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill"),"88888888"); + String isweb = Util.null2String(request.getParameter("isweb"),"true"); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); + + String eas_requestinfotodo = Util.null2String(rs.getPropValue("eas","TODOView")); + String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + + rs.executeSql("select * from openquery("+eas_linkname+",''select fweb from SM20180328.T_SM_VWorkFlowToDo where fpersonusernumber=''"+loginid+"'' and FASSIGNID=''"+requestid+"''')"); + if(rs.next()){ + isweb = rs.getString(1); + } +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest0613 - 副本.jsp b/src/test/resources/WEB-INF/ecology/eas/ViewRequest0613 - 副本.jsp new file mode 100644 index 0000000..957d627 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest0613 - 副本.jsp @@ -0,0 +1,47 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*,weaver.general.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest2.jsp b/src/test/resources/WEB-INF/ecology/eas/ViewRequest2.jsp new file mode 100644 index 0000000..83dc46c --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest2.jsp @@ -0,0 +1,76 @@ +<%@page import="weaver.conn.RecordSet"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="java.util.*" %> + + + +<%@ page import="weaver.hrm.*,weaver.general.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); + + String sqlWhere_eas = " and FWORKFLOWID = ''"+requestid+"' "; + String eas_workflowinfo= Util.null2String(rs.getPropValue("eas","workflowtypeview")); + String eas_requestinfo = Util.null2String(rs.getPropValue("eas","VWorkFlowDo")); + String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + //String isWeb = ""; + String ceshi = ""; + String sql = "select * from openquery("+eas_linkname+",'select * from "+eas_requestinfo+" where 1=1 AND FWorkFlowID=''"+requestid+"'' ')"; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select * from "+eas_requestinfo+" where 1=1 AND FWorkFlowID=''"+requestid+"'' ')"); + RecordSet.next(); + String isWeb = RecordSet.getString("FWEB"); + /*while(RecordSet.next()){ + ceshi = "tt"; + isWeb = RecordSet.getString("FWEB"); + + + }*/ + + + +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest222.jsp b/src/test/resources/WEB-INF/ecology/eas/ViewRequest222.jsp new file mode 100644 index 0000000..957d627 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest222.jsp @@ -0,0 +1,47 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*,weaver.general.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/ViewRequest2222.jsp b/src/test/resources/WEB-INF/ecology/eas/ViewRequest2222.jsp new file mode 100644 index 0000000..97ee4ff --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/ViewRequest2222.jsp @@ -0,0 +1,68 @@ +<%@page import="weaver.conn.RecordSet"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="java.util.*" %> + + + +<%@ page import="weaver.hrm.*,weaver.general.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + BaseBean b = new BaseBean(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); + + + String eas_workflowinfo= Util.null2String(rs.getPropValue("eas","workflowtypeview")); + String eas_requestinfo = Util.null2String(rs.getPropValue("eas","VWorkFlowDo")); + String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + + String sql = "select * from openquery("+eas_linkname+",'select * from "+eas_requestinfo+" where 1=1 "+ + " AND FWorkFlowID=''"+requestid+"'' ')"; + rs1.executeSql(sql); + rs1.next(); + String isWeb = rs1.getString("FWEB"); + + +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/css/login.css b/src/test/resources/WEB-INF/ecology/eas/css/login.css new file mode 100644 index 0000000..b75e0b0 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/css/login.css @@ -0,0 +1,85 @@ +@charset "utf-8"; + +/* Բ */ +.br2 {-webkit-border-radius: 2px;-moz-border-radius: 2px;border-radius: 2px;} +.br3 {-webkit-border-radius: 3px;-moz-border-radius: 3px;border-radius: 3px;} +.br5,.d-b-list:hover {-webkit-border-radius: 5px; -moz-border-radius: 5px;border-radius: 5px;} +.brtl5 {-webkit-border-top-left-radius: 5px;-moz-border-radius-topleft: 5px;border-top-left-radius: 5px;} +.brbl5 {-webkit-border-bottom-left-radius: 5px;-moz-border-radius-bottomleft: 5px;border-bottom-left-radius: 5px;} +.brtltr5 {-webkit-border-radius: 5px 5px 0 0;-moz-border-radius: 5px 5px 0 0;border-radius: 5px 5px 0 0;} + +.btn-login, .btn-register {-moz-text-shadow: 0 1px 1px #000;-webkit-text-shadow: 0 1px 1px #000;text-shadow: 0 1px 1px #000;} + +/* ============= banner ================ */ + +.download{-webkit-box-shadow: 0 2px 2px #333;-moz-box-shadow: 0 2px 3px #333;box-shadow: 0 2px 2px #333;} + +.login-mod {background: none; +position: absolute;left:537px;top:160px;} +.login-mod{background:rgb(255,255,255) none repeat scroll !important; /*ʵFF͸ֲ͸*/ +background:#fff; filter:Alpha(opacity=80);/*ʵIE͸*/} + .login-mod{ position:relative; border: 1px solid #999;}/*ʵIEֲ͸*/ + +.title-tip {background: #fff;} + +/*.user-box { + background: url(../img/weixin.png) no-repeat 320px 8px; +} +*/ +.login-btn{background: #0075eb; +} +.login-box .register-btn {color: #4d4d4d;background: #fff;border: 1px solid #ccc; +} + +.remember-input {-moz-border-radius: 8px;-webkit-border-radius: 8px;border-radius: 8px;} + +.d-b-list,.registered-btn,.topNav li a{-webkit-transition: background .3s ease; + -moz-transition: background .3s ease; + -ms-transition: background .3s ease; + -o-transition: background .3s ease; + transition: background .3s ease;} + +.curr-bor{-webkit-transition: border-color .4s ease; + -moz-transition: border-color .4s ease; + -ms-transition: border-color .4s ease; + -o-transition: border-color .4s ease; + transition: border-color .4s ease;} + +@media only screen and (max-width: 1000px) { + .wrap-1000{ + width: 90%; + } + .login-bg-wrap{ + display: none; + } + .login-box { + width: 100%; + height: 646px; + margin: 0 auto; + top: 0; + left: 0; + } + .login-mod{ + left: 0; + margin: 0 auto; + } + .footer .f-c-left .service-list , .footer .f-c-left .clear , .f-c-right{ + display:none; + } + .copyright { + text-align: center; + margin-top: 25px; + /* margin: 0 auto; */ + } + .copyright-text { + width: 100%; + text-align: left; + text-align: center; + } + .f-c-left { + margin-top: 85px; + margin: 0 auto; + width: 100%; + } +} +.mod-shadow{ -webkit-box-shadow:1px 2px 25px 2px #CCCCCC; -moz-box-shadow:1px 2px 25px 2px #CCCCCC; box-shadow:1px 2px 25px 2px #CCCCCC;} \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/css/login2.css b/src/test/resources/WEB-INF/ecology/eas/css/login2.css new file mode 100644 index 0000000..20b778f --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/css/login2.css @@ -0,0 +1,1009 @@ +@charset "utf-8"; + +html,body,h1,h2,h3,h4,h5,h6,hr,p,iframe,dl,dt,dd,ul,ol,li,pre,form,fieldset,button,input,textarea,th,td{margin:0;padding:0;} +body{background-color:#fafafa; font-size: 12px;} +h1,h2,h3,h4,h5,h6{font-size:100%} +ul,ol{list-style:none;} +fieldset,img{border:0 none;} +img{-ms-interpolation-mode:bicubic;} +i,em{font-style:normal;} +table{border-collapse:collapse;border-spacing:0;} +th {text-align:inherit;} +iframe {display:block;} +input,select,textarea,button{font-size:100%;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} +button,input[type=button],input[type=submit]{cursor:pointer;} +input[type=search]{-webkit-appearance:textfield;} +textarea{overflow-y:auto;resize:vertical;} +.clear,.clearfix{zoom:1;} +.clear:after,.clearfix:after,.cf:before, .cf:after, .md-clear:after{content:' ';display:block;clear:both;height:0;visibility:hidden;} +.hidden,.hide{display:none;} +hr {-moz-box-sizing: content-box;box-sizing: content-box;height: 0;} +a{color:#333;text-decoration:none;} +a:hover{text-decoration:underline;} +.t-2{font-size: 60px;display: block;} +.t-3{font-size: 24px;font-weight: bold;} + +.error-msg {width:342px; height:40px; line-height:40px; border:2px solid #e57b5e; border-radius:6px; position:absolute; left:40px; top:95px;display:none; z-index:100; background-color:#f8ded7;font-size: 14px;color:#BD3A16;} +.error-msg em {height:16px; width:17px; display:inline-block; margin-left:45px; background: url(../img/images/s-icons2.png) no-repeat scroll -298px -80px transparent; cursor:pointer; vertical-align:middle;} + +.msg{width:100%;margin:0 auto;} +.msg-bg-1{width:961px;height:396px;background: url(../img/msg1.jpg) no-repeat center 0;} +.msg-bg-2{width:961px;height:396px;background: url(../img/msg2.jpg) no-repeat center 0;} +.case-title{text-align: center;margin: 75px auto;font-size: 60px;color:#333;} +.case-title .c-t-1{height: 50px;font-size: 45px;line-height: 50px;font-weight: normal;color:#444;} +.case-title .c-t-2{font-size:30px;line-height:30px;font-weight: normal;color:#888;margin-top:15px;} + +/* p.css */ +.handy-dialog.warn b {background-position: -313px -55px;} + +.handy-dialog .layer-bd {color: #999;padding: 8px;} + +.handy-dialog b {background: url(images/s-icons.png?201406241426) no-repeat scroll -253px -55px transparent;display: inline-block;height: 16px;margin-right: 3px;overflow: hidden; vertical-align: -4px;width: 16px;} + +.layer {position: absolute; text-align: left;} + +.layer-bd {padding: 10px; position: relative;} +.layer-arrow {position: absolute;overflow: hidden;background: url(images/s-icons.png?201406241426) no-repeat -32px -148px; + _background-image: url(images/s-icons-png8.png?201406241426);} +.handy-dialog .layer-bd {color: #999;padding: 8px;} + +.layer-arrow.p7, .layer-arrow.p8, .layer-arrow.p9 {background-position: -32px -157px;bottom: -10px;} +.layer-arrow.p1, .layer-arrow.p2, .layer-arrow.p3, .layer-arrow.p7, .layer-arrow.p8, .layer-arrow.p9 {height: 10px;width: 21px;} +.br5 {border-radius: 5px;} +.layer-arrow.p2, .layer-arrow.p8 {left: 50%;margin-left: -10px;} + +.handy-dialog { text-align: center;word-wrap: break-word;} + +.layer-main {background-color: #FFFFFF;border: 1px solid #CCCCCC;position: relative;} +.layer-shim {padding: 6px;} + +/*============= FOOTER ================*/ +.footer{ + height:275px; + width:100%; + overflow: hidden; + color: #d7d3d3; +} +.footer .footer-content{ + height: 230px; + background: #4b4a4a; + font-size: 16px; +} +.footer-content .footer-title{ + margin: 50px 0 20px; + font-size: 18px; +} +.footer-content ul li{ + margin: 10px 0; +} +.footer-content ul li .qrcode{ + height: 105px; + width: 105px; +} +.footer-content ul li a{ + text-decoration: none; + color: #d7d3d3; + +} +.footer .footer-left{ + float: left; + margin-left: 150px; +} +.footer-left ul{ + float: left; + width: 150px; +} +.footer .footer-right{ + float: right; + margin-right: 150px; +} +.copyright{ + height: 50px; + line-height: 50px; + text-align:center; + background: #212121; + font-size: 12px; +} +.copyright a{ + color: #fff; + text-decoration: none; +} +.copyright a:hover{ + text-decoration: none; +} + + +/*============= register ================*/ +.registered{ + right: 50%; + top:170px; + position: absolute; + text-align: center; + width: 430px; + margin-right: -460px; + overflow: hidden; + z-index: 23; +} +.log{z-index: 24;} +.registered-bottom { + position:relative; + top:0px; + left:0; + height:100px; +} +.regForm-main {margin-top:150px; + overflow: hidden; + z-index: 23; +} +.wrap-1000.registered-bottom { + position:relative; + top:0; + left:0; + text-align: center; + margin: 0 auto 70px; +} + +.regForm-main { + overflow: hidden; + font-size: 20px; + text-align: center; + _zoom:1; +} + +.do-registered, .share-registered{ + position: relative; + right: 0; + top: 0; + width: 1000px; + margin: 0 auto; + text-align: left;overflow: inherit; +} +.do-registered .regForm-main, .share-registered .regForm-main{ + text-align: left; +} +.do-registered .regForm-main, .share-registered .regForm-main, .registered-bottom .regForm-main{ + margin-top: 0; +} +.do-registered .regForm input, .share-registered .regForm input{display: block;} +.do-bg .do-registered .registered-btn,.share-bg .share-registered .registered-btn{background-color: #59c600;color: #fff;} +.do-registered .regForm .registered-User::-webkit-input-placeholder , .share-registered .regForm .registered-User::-webkit-input-placeholder{ +color:#808080 !important;} +.do-registered .regForm .registered-User:-moz-placeholder , .share-registered .regForm .registered-User:-moz-placeholder{color: #808080;} +.do-registered .regForm .registered-User::-moz-placeholder , .share-registered .regForm .registered-User::-moz-placeholder{color: #808080;} +.do-registered .regForm .registered-User:-ms-input-placeholder , .share-registered .regForm .registered-User::-moz-placeholder{color: #808080;} +.do-registered .regForm input , .share-registered .regForm input{ + display: block; +} + +.registered-User, .registered-btn{ + width: 370px; + height: 48px; + border-radius: 5px; + font-family: 'Helvetica Neue','Hiragino Sans GB','WenQuanYi Micro Hei','Microsoft Yahei',sans-serif; + text-align: center; + line-height: 48px; + margin-bottom: 16px; + outline: none; + font-size: 18px; + background-color: #fff; + border: 1px solid #ccc; +} +.registered-btn{ + background: #44bbfc; + border: 1px solid #44bbfc; + color: #fff; +} +.registered-bottom .registered-btn{ + color: #fff; + background-color: #0075eb; +} +.registered-btn:hover{ + background-color:#5dc5fc; +} +.registered-btn:active{ + background-color:#3da9e3; +} +.registered-bottom .tips-text { + text-align: left; + margin-left: 200px; +} +.registered .tips-text a{ + text-decoration: underline;color:#2ea5f2; +} + +.do-registered .registered-btn , .share-registered .registered-btn{ + width: 348px; + height: 60px; + color: #000; + font-family: microsoft yahei; + background-color: #fff; + border-radius: 50px; + border: none; + outline: none; +} +.do-registered .registered-User, .share-registered .registered-User{ + width: 250px; + height: 60px; + margin-bottom: 16px; + padding: 0 30px 0 65px; + color: #000; + line-height: 60px\9; + font-family: microsoft yahei; + text-align: left; + border-radius: 50px; + border: 2px solid #fff; + outline: none; +} +.b_a1 .registered{ + right: 45%; + top: 290px; +} +.b_a4 .registered{ + right: 50%; + top: 273px; + margin-right: -215px; +} +.flow-bg { + background-position: center top; + background-repeat: no-repeat; + width:100%; + height:810px; +} + +#share-flow-1 { + background: url(../img/flow_01.png?201502032045) no-repeat center;background-color: rgb(247,247,247); +} + +#share-flow-2 { + background: url(../img/flow_02.png?201502032045) no-repeat center; +} + +#share-flow-3 { + background: url(../img/flow_03.png?201502032045) no-repeat center;background-color: rgb(247,247,247); +} + +#share-flow-4 { + background: url(../img/flow_04.png?201502032045) no-repeat center; +} + +#share-flow-5 { + background: url(../img/flow_05.png?201502032045) no-repeat center;background-color: rgb(247,247,247); +} + +#do-flow-1 { + background: url(../img/do_flow_01.png?201502032045) no-repeat center; +} + +#do-flow-2 { + background: url(../img/do_flow_02.png?201502032045) no-repeat center;background-color: rgb(247,247,247); +} + +#do-flow-3 { + background: url(../img/do_flow_03.png?201502032045) no-repeat center; +} + +#do-flow-4 { + background: url(../img/do_flow_04.png?201502032045) no-repeat center;background-color: rgb(247,247,247); +} + +/* Firefoxʾȱʧͼռλ*/ +img{-moz-force-broken-image-icon: 1;} + +/* ==================== HTML5 ==================== */ +.placeholder {color: #999 !important} +input::-webkit-input-placeholder {color: #999 !important} +input:-moz-placeholder {color: #999 !important} +textarea::-webkit-input-placeholder {color: #999 !important} +textarea:-moz-placeholder {color: #999 !important} + +/* ==================== ҳṹ ==================== */ +.wrapper {width: 100%;position: relative;margin-top:90px;font-family: 'Microsoft Yahei';background: #fff;color: #333;} + +/* ============= ͷ ================ */ +.header {position: fixed;width: 100%;height:90px;min-width:1150px; top:0;background: #fff;z-index: 999;border-bottom: 1px solid #bdbbbc;} +.wrap-1000 {width: 1000px;position:relative;margin: 0 auto;} +.logo h1 {width:167px;float: left;margin:30px 0 0 100px;} +.logo h1 img{ + width: 135px; +} +.topNav { position: absolute;right: 80px;top: 0px;color: #fff; +left: 75%;} +.topNav p{ + margin: 10px 0 8px; + color: #4c4c4c; + font-size: 14px; +} +.topNav p span{ + font: italic bold 24px Microsoft Yahei; +} +.topNav .curr-bor{border:1px solid #d9d9d9;} +.topNav .curr-bor a:hover{ + background: #f2f2f2; +} +.topNav .curr-bor a:active{ + background: #e6e6e6; +} +.topNav li .big-link{background: #44bbfc;color: #fff;} +.topNav li .big-link:hover{ + background: #5dc5fc; +} +.topNav li .big-link:active{ + background: #3da9e3; +} +.topNav li {float: right;width:106px;height:32px;text-align: center;margin-right:18px;} +.topNav li a{line-height:32px;display: block;color: #666; text-decoration:none;font-size:16px;} +.header-nav{ + width: 1000px; + margin: 25px auto 0; + height: 50px; +} +.header-nav li{float: left;} +.header-nav li a{ + display:block; + height:60px; + padding:0 15px; + margin:0 10px; + line-height:60px; + color: #666; + font-size: 16px; + text-decoration: none; +} +.header-nav li a:hover, .header-nav .nav-curr{ + border-bottom: 3px solid #44bbfc; + color:#44bbfc; +} +.product-nav ul{ + width: 110px; + overflow: hidden; + margin-top: 2px; + border: 1px solid #d9d9d9; + background: #fff; +} +.product-nav ul li{ + /*position: absolute;*/ + clear: both; + width: 123px; + height: 32px; + /*float: left;*/ +} +.product-nav ul li a{ + height: 32px; + width: 113px; + padding: 0 0 0 10px; + margin: 0; + line-height: 32px; + font-size: 14px; +} +.product-nav ul li a:hover{ + background: #44bbfc; + color: #fff; +} +.product-nav-ul{ + display: none; +} + +/* login page css */ +.login-bg-wrap{width:100%;height:485px;position:absolute;top:85px;left:0;} +.login-bg-01{width: 100%;height:485px;} +.login-bg-01 .wrap-1000{height: 485px; margin-top: 50px;background: url(../img/device.png) 20px 190px no-repeat;} +.login-bg-01 h2{ padding: 20px 0 27px 0;font-weight: normal;font-size: 3.5em;line-height: 1.3em;color: #333;} +.login-bg-01 p{ color: #fff; line-height: 25px; font-size: 14px;} +.login-bg-01 a{ width: 299px; height: 53px; line-height: 53px; display: block; text-align: center; font-size: 22px;} +.login-bg-01 a.green{ background: #00dd53; color: #fff; margin:60px 0 10px 0;} +.login-bg-01 a.white{ background: #fff; color: #1a85ff;} +.login-bg-01 a.green:hover,.login-bg-01 a.white:hover{ text-decoration: none;} + +.pd-banner-bg {background: url(../img/pd.jpg) no-repeat center 0;height: 377px;} + +.login-con-bg {height:650px;} +.img-gif {width: 615px;height: 353px;position: absolute;top: 24px;left: -30px;} + +.login-mod {width:434px; height:444px;} +.title-tip { height:80px;font-size:24px;color: #4c4c4c;;font-weight: normal; line-height:80px; text-align: center; border-bottom: 1px solid #b2b2b2;} +.login-box, .client-box {position: absolute;top:0;left:50%;margin-left:-500px;} +.login-box{ height: 646px; width: 0;} +.log-b1{ background:url(../img/log_bg1.jpg) no-repeat center 0; height:495px;width:100%;} +.log-b2{ background:url(../img/log_bg2.jpg) no-repeat center 0; height:151px; width:100%;} + +a.ie-video{ display:none;} + +a.top-abs{width:40px; height:40px;background:url(../img/top.png) no-repeat 0 0; position:fixed; right:100px;bottom:50px; display:inline-block; z-index:100;} +a.top-abs:hover{background:url(../img/top.png) no-repeat 0 -41px;} + +.video-mod{ position:absolute;left:70px;top:224px;} + +.login-margin{ margin:0 35px; padding-top: 20px;} +.user-box {position:relative; height: 52px;overflow:hidden; margin:0 0 20px 0;background: rgb(255,255,241); /* Old browsers */} + +.user-infor { width:55px; height:52px;float: right;line-height: 38px; background: url(../img/input_icon.png) no-repeat 20px -27px;} + +.username-input, .password-input {position:relative;*top:-1px;*left:-15px;_margin-bottom:-2px;width: 300px;height:30px;border:none;background:#fff;padding:10px 50px 10px 10px;color: #909090; font-size:14px;line-height:30px;border: 1px solid #999;-webkit-transition: border-color .3s ease-in-out;-moz-transition: border-color .3s ease-in-out;-o-transition: border-color .3s ease-in-out;transition: border-color .3s ease-in-out;*margin-left:-20px} +.username-input:focus , .password-input:focus {outline: none;border-color: #09f;} +.user-box span{display: block;position: absolute;top: 0;right: 0;width: 50px;height: 50px;background: url(../img/input_icon.png) no-repeat 10px -27px;} +.user-box .password-icon{background-position: 10px 22px;} +.login-box .login-btn{ color:#fff; margin-top:15px;} +.login-box .register-btn {color:#333;background: rgb(255,255,255);} +.login-box .login-btn, .login-box .register-btn {width: 100%;height: 52px; font-size:18px; font-family:\5FAE\8F6F\96C5\9ED1;margin-bottom:15px;text-align:center; line-height:52px; display:inline-block;} +.login-box .login-btn{border: 0;} +.disabled{background: #dedede !important;} +.find-password a {float:right; font-size:14px; color: #666;text-decoration: none;} +.remmberMe { font-size:14px; color: #666} +.remember-input {margin:0 7px 0 0;vertical-align: -2px;} +.Yahei-size {font-family: \5FAE\8F6F\96C5\9ED1;} +.pro-price .title-3, .package-fee .title-3 {width: 139px;float: left;font-size: 14px;} +.package-fee .title-4 {text-align: center;font-size: 14px;} +.pro-price li span {width: 138px;} +.package-fee {width: 370px;margin-left: 0;} +.package-fee li {height: auto;overflow: hidden;} +.oth-style-1 {width: 67px;margin: 0 35px;text-align: center;float: left;line-height: 116px;font-weight: bold;font-size: 14px;} +.oth-style-p {margin-left: 19px;width: 155px;float: left;line-height: 38px;} +.go-user-login {margin: 0 0 0 52px;} +.go-user-login a {color: #333;} + +/* p.css */ +.br5 {border-radius: 5px;} + +.do{border-right:1px solid #ccc; } +.d-b-list{float: left;width: 497px;height: 321px;text-align: center;padding:60px 0;} +a.d-b-list{text-decoration: none;} +.d-b-hover .d-b-list:hover{background-color: #f9f9f9;} +.d-b-hover .d-b-list p{font-size: 30px;} +.tab-yd .d-b-list{height:333px;padding-top: 37px;} +.pc .d-b-list{padding: 80px 0 0 0;} +.d-b-list p.logo{margin:50px auto 0 auto;} +.d-b-list p.logo span{text-align: center;font-size: 24px;margin-top: 15px;display: block} + +.client-con-bg{height: 680px;} +.client-box{top:80px;height: auto;} +.client-tab{overflow: hidden;position: relative;margin-bottom:30px;} +.client-tab a{float: left;width: 245px;height: 60px;text-align: center;line-height: 60px;text-decoration:none;font-size: 30px;color:#4c4c4c;margin:0 0 0 65px;border:1px solid #e6e6e6;} +.client-main{width:1000px;height:455px;background-color: #fff;overflow: hidden;} +.tab-yd .d-b-list p{font-size: 14px;padding:5px 0;} +.tab-yd p.t-4{color:#4c4c4c;font-size: 12px;} +.tab-yd .d-b-list p.logo{margin-top: 30px;} + +#home .slider {width: 100%;height:700px;position: relative; overflow: hidden;} +#home .slider-list {width:100%;height:700px;display: block;margin-left: auto;margin-right: auto;position: relative;} +#home .slider-list .slider-box { + position: relative; + width: 100%; + max-width: 100%; + height:700px; + top: 0; + left: 0; + display: none; + -moz-background-size : cover; + background-size: cover; + overflow: hidden; +} +#home .slider-list .slider-box:first-child { display: block} +.qrcode-box{ + position: absolute; + z-index: 10; + top: 18px; + left: 18px; + background: #fff; + height: 120px; + width: 100px; + border: 1px #ccc solid; +} +.qrcode-box img{ + width: 100px; +} +.qrcode-box p{ + text-align: center; +} +.slider-box .buy-btn{ + width: 240px; + height: 50px; + display: block; + margin: 530px auto; + line-height: 50px; + text-align: center; + font-size: 20px; + border-radius: 4px; + background: #fa4844; + color: #fff; +} +.slider-box .buy-btn:hover{ + text-decoration: none; +} +#home .slider-bottom-banner{ + position: absolute; + left: 50%; + bottom: 20px; + text-align: left; + color: #fff; + font-size: 14px; +} +#home .slider-bottom-banner .company-intro{ + margin: 10px 0 20px; + font-size: 30px; +} +#home .slider-bottom-banner .company-video{ + width: 170px; + border-radius: 3px; + border: 1px #fff solid; + text-align: center; + height: 40px; + line-height: 40px; +} +#home .slider-bottom-banner .company-video:hover{ + cursor: pointer; +} +#home .slider-bottom-banner img{ + vertical-align: middle; + padding-right: 10px; +} +#home .dot-list {position: absolute;bottom:40px;right: 110px;text-align: center;z-index: 9;width:150px;} +#home .dot-list a {display: inline-block;border-radius:50%;margin-right: 10px;width: 16px;height: 16px;background:#fff;} +#home .dot-list a:hover,#home .dot-list a.active {opacity: 1;background-color:#ccc;} +@media only screen and (min-width: 1700px){ + #home .slider-bottom-banner{ + bottom: 5px; + } + #home .slider-bottom-banner .company-intro{ + margin: 10px 0 4px; + } +} + +ul.tabs li a {float: left;width: 245px;height: 60px;text-align: center;line-height: 60px;text-decoration:none;font-size: 30px;color:#4c4c4c;margin:0 0 0 65px;border:1px solid #e6e6e6;} +.client-tab li.ccc a, .client-tab li.ccc a:hover {color:#53a4ff;border:1px solid #53a4ff;border-radius:5px;} +@media only screen and (min-width: 100%){#home .slider-list{width:100%;}} +.b_a2{background:url(../img/fde.jpg) no-repeat center center;} +.b_a3{background:url(../img/lg.jpg) no-repeat center center;} +#home .slider-list .b_a1{padding: 18px; background: #fdb830; width: auto;height: 660px;} +.slider-jinjiren{ + display: block; + background:url(../img/bwjjr.jpg) no-repeat center center; + width: 100%; + height: 100%; + -webkit-background-size: cover; + background-size: cover; +} +.slider-zhaopin{ + display: block; + background:url(../img/zhaopin.jpg) no-repeat center center; + width: 100%; + height: 100%; + -webkit-background-size: cover; + background-size: cover; +} +.b_a4{background:url(../img/wps.jpg) no-repeat center center;} + +/*Ʒб*/ +.content{ + padding-bottom: 20px; + text-align: center; +} +.content .product-list-title{ + margin-top: 60px; + text-align: center; + font-size: 48px; + color: #4d4d4d; +} +.product-list{ + overflow: hidden; +} +.product-list li{ + width: 20%; + float: left; + margin-top: 50px; + text-align: center; +} +.product-list li a{ + display: block; + text-decoration: none; + color: #333; +} +.product-list li a h4{ + margin-bottom: 10px; + font-size: 20px; + font-weight: normal; + color: #4d4d4d; +} +.product-list li a p{ + font-size: 14px; + color: #808080; +} +.product-list .product-icon{ + height: 73px; + width: 69px; + margin: 0 auto 20px; + background: url('../img/product-icons.png?201509211041'); +} +.product-list .communication{ + background-position: -32px -20px; +} +.product-list .message{ + background-position: -198px -20px; +} +.product-list .file{ + background-position: -368px -20px; +} +.product-list .buluo{ + background-position: -535px -20px; +} +.product-list .signin{ + background-position: -368px -20px; +} +.product-list .task{ + background-position: -868px -20px; +} +.product-list .application{ + background-position: -1032px -20px; +} +.product-list .conference{ + background-position: -1377px -13px; +} +.product-list .community{ + background-position: -1201px -20px; +} +.product-list .approval{ + background-position: -1554px -20px; +} +/*Ŷ̬*/ +.news-slider-wrap{ + width: 100%; + height: 60px; + overflow: hidden; + line-height: 60px; + border-bottom: 1px solid #d9d9d9; +} +.news-slider{ + overflow: hidden; + height: 60px; + padding-left: 50px; + background: url('../img/news-icon.png') no-repeat 0 20px; + text-align: left; +} +.news-slider .item{ + margin-top: 0; + display: block; + height: 60px; + font-size: 18px; + color: #4c4c4c; +} +.news-slider .item:hover{ + text-decoration: none; +} +/*ͻ*/ +.customer-case-describe{ + position: relative; + overflow: hidden; + height: 80px; + border-bottom: 1px solid #d9d9d9; + padding: 10px 50px; + text-align: center; +} +.customer-case-describe .item{ + position: absolute; + height: 105px; + width: 900px; + padding: 0 50px; + font-size: 24px; + color: #666; +} +.customer-case-describe .left{ + left: -1400px; +} +.customer-case-describe .active{ + display: block; +} +.customer-case{ + overflow: hidden; + margin-bottom: 20px; +} +.customer-case .case{ + height: 160px; + width: 200px; + float: left; + text-align: center; + opacity: .5; + filter: alpha(opacity=50); + background: url('../img/customer-logo.png?201509211641') no-repeat; +} +.customer-case .case:hover{ + cursor: pointer; +} +.customer-case .case.is-cur{ + opacity: 1; + filter: alpha(opacity=100); +} +.customer-case .case p{ + margin-top: 120px; + font-size: 14px; +} +.customer-case .vanke{ + background-position: -16px 0px; +} +.customer-case .haier{ + background-position: -257px 0px; +} +.customer-case .guowuyuan{ + background-position: -500px 0px; +} +.customer-case .newworld{ + background-position: -754px 0px; +} +.customer-case .tongji{ + background-position: -983px 0px; +} +.customer-case .luge{ + background-position: -16px -145px; +} +.customer-case .wangle{ + background-position: -257px -145px; +} +.customer-case .tuopai{ + background-position: -500px -145px; +} +.customer-case .liantong{ + background-position: -754px -145px; +} +.customer-case .litian{ + background-position: -983px -145px; +} + +/*video*/ +.video-overlay{ + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + z-index: 999; + background: #000; + opacity: .8; + filter: alpha(opacity=80); + display: none; +} +.video-wrapper .video-close{ + position: absolute; + height: 50px; + width: 50px; + top: 10px; + right: 10px; + text-align: center; + line-height: 50px; + font-size: 50px; + color: #fff; +} +.video-wrapper .video-close:hover{ + cursor: pointer; +} +.video-wrapper{ + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + z-index: 1000; + background-color: transparent; + display: none; +} +.video-container{ + margin: 200px auto; + width: 640px; + height: 370px; + z-index: 1000; +} +#jp-container{ + margin: 100px auto; +} + +/*ҳ*/ +.ldy-bannerBox{ + width:100%; + position: relative; + height:600px; + left:0px; + text-align: center; + background: url('../img/ldy/head.jpg') no-repeat center center; + -moz-background-size : cover; + background-size: cover; +} +.ldy-bannerBox p{ + padding-bottom: 15px; + font-size: 24px; + color: #fff; +} +.ldy-bannerBox .ldy-title{ + padding: 230px 0 30px; + font-size: 48px; +} +.ldy-registered{ + position: relative; + top: 70px; + left: 0; + overflow: visible; + width: inherit; + margin: 0; +} +.ldy-registered input{ + font-size: 18px; +} +.ldy-registered .registered-User{ + width: 420px; + text-align: left; + text-indent: 22px; +} +.ldy-registered .registered-btn{ + width: 210px; +} +.ldy-registered .error-msg{ + position: absolute; + left: 50%; + margin-left: -280px; + top: -50px; + text-align: center; +} +.ldy-container { + padding: 30px 15% 0; + color: #4d4d4d; +} +@media only screen and (min-width: 1700px){ + .ldy-container { + padding: 70px 20% 0; + } +} +.ldy-container p{ + font-size: 18px; + color: #808080; +} +.ldy-container .title{ + margin: 15px 0; + font-size: 40px; + color: #4d4d4d; +} +.left-right-style .fl{ + float: left; +} +.left-right-style .fr{ + float: right; +} +.left-right-style img{ + width: 35%; +} +.left-right-style div{ + margin-top: 50px; + width: 55%; +} +.file img{ + width: 50%; +} +.file div{ + width: 50%; +} +.message img{ + width: 50%; +} +.message div{ + width: 40%; +} +.ldy-bg{ + background: #f0f2f5; +} +.top-bottom-style{ + text-align: center; +} +.top-bottom-style img{ + margin-top: 30px; + width: 80%; +} +.ldy-footer{ + height: 200px; + background: url(../img/ldy/ldy-footer.jpg); +} +/*Ʒ*/ +.func-nav{ + overflow: hidden; + width: 90%; + margin: 0 auto; +} +.func-nav li{ + width: 10%; + float: left; + margin-top: 20px; + text-align: center; +} +.func-nav li a{ + display: block; + text-decoration: none; + color: #333; +} +.func-nav li a h4{ + margin-bottom: 10px; + font-size: 16px; + font-weight: normal; + color: #4d4d4d; +} +.func-nav li a p{ + font-size: 14px; + color: #808080; +} +.func-nav .func-icon{ + height: 62px; + width: 60px; + margin: 0 auto; + background: url('../img/func-nav.png?201509211642'); +} +.func-nav .communication{ + background-position: -15px -7px; +} +.func-nav .message{ + background-position: -122px -7px; +} +.func-nav .file{ + background-position: -228px -7px; +} +.func-nav .buluo{ + background-position: -336px -7px; +} +.func-nav .signin{ + background-position: -442px -7px; +} +.func-nav .task{ + background-position: -550px -7px; +} +.func-nav .application{ + background-position: -654px -7px; +} +.func-nav .community{ + background-position: -764px -7px; +} +.func-nav .conference{ + background-position: -877px -4px; +} +.func-nav .approval{ + background-position: -989px -7px; +} +/** zhuce layer **/ +.login-dialog {width: 490px;border: 4px solid #0074bd; position: absolute; background: #fff;} +.login-dialog.layer-shim {padding: 0;} +.login-dialog .layer-main {border: none; position: relative;} +.login-dialog .layer-hd {background: #e9f2f7;} +.login-dialog .layer-bd {/* padding: 20px 56px 10px 56px; */padding: 20px 77px;} +.login-dialog .layer-bd h3 {font-size: 14px;height: 34px;} +.login-dialog .layer-bd p {margin-bottom: 10px;} +.login-dialog .layer-bd p.opt {margin-bottom: 0;} +.login-dialog .layer-bd input {width: 320px;height: 30px;line-height: normal;line-height: 30px\9;padding: 0 5px;border: 1px solid #abadb3;} +.login-dialog .layer-bd input[type="checkbox"] {border: none;} +.login-dialog .layer-bd input[type="checkbox"], +.login-dialog .layer-bd .opt label,.login-dialog .opt a{display: inline-block;*display: inline;*zoom: 1;height: 30px;line-height: 30px;width:auto;vertical-align: middle;} +.login-dialog .opt #login_rmb {margin-left: 20px;} +.login-dialog .opt .forget-pwd {float: right;} +.login-dialog .layer-bd .login-submit {display: inline-block;*display: inline;*zoom: 1;height: 31px;line-height: 30px;background: #6ab301 url(../img/green-btn.png) no-repeat 0 0;width: 80px;margin-left: 0;text-align: center;padding: 0;font-size: 16px;} +/*zhuce layer*/ +.invited-tips-dialog {width: 532px;} +.invited-tips-dialog .layer-bd {padding: 20px 30px;} +.invited-tips-dialog .layer-bd p{line-height: 25px;} +.invited-tips-dialog .layer-bd p.tips {color: #999;margin-top: 5px;} +.overlay{position: fixed;_position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: #333;opacity: 0.3;filter: alpha(opacity = 30);} +/* logo roll */ +.to-signup-dialog {width: 437px;font-size: 14px; font-family:\5FAE\8F6F\96C5\9ED1;} +.to-signup-dialog .layer-bd {padding: 14px 49px 18px 50px;} +.to-signup-dialog .layer-bd .ctrl {margin-top:30px;font-size: 12px; text-align: center;} +.to-signup-dialog .layer-bd .btn {margin-right: 40px;width: 48px;height: 25px; line-height: 25px;text-align: center; } +.btn-blue {background-color: #1577BB;} + +.btn-blue:hover {background-color: #1888d9;} +.btn {cursor: pointer;color: #666;height: 22px;padding: 0 10px;line-height: 22px;background-color: #bdbdbd;display: inline-block;*zoom: 1;vertical-align: middle;} +.btn em { color: #fff;} +.btn-close {position: absolute;top: 0; right: 0;width: 28px;height: 28px;background: url(images/s-icons.png?20140626) no-repeat 0 -117px;_background-image: url(images/s-icons-png8.png?20140626);} + +.layer-hd {height: 30px;line-height: 30px;padding: 0 10px;overflow: hidden;background: #e0e0e0;} +.layer-hd h2 {font-weight: normal;font-size: 14px;} +.layer-bd {position: relative;padding: 10px;} +.overlay,.overlay-change-network {position: fixed;_position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: #333;opacity: 0.3;filter: alpha(opacity = 30);} +.overlay-change-network {opacity: 0;filter: alpha(opacity = 0);} + +/***ȫlogoʽ*****/ +.anquan-logo{ + position: relative; + top: 9px; + vertical-align: middle; +} +.anquan-logo img{ + height: 33px; + width: 87px; +} \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/imgs/1-24.png b/src/test/resources/WEB-INF/ecology/eas/imgs/1-24.png new file mode 100644 index 0000000000000000000000000000000000000000..4700bf8483c23abe601c2ca9ada54c9c95b44cf2 GIT binary patch literal 1442 zcmV;T1zq}yP)^! z@=+5K4<0Ou3E^TEV`3thlqiWtqdWvGAa$mEz(QxXGdnZe-O?}FblFU|-~RS{&P?#- z^LbR21M%quGBPsKjX%0o-*uwcYInRZ2?lpBU4 zKzO0Rd0AmN280s|DmM&Afp9=U<%Z!n5P*^qDB7klj7Y`wGA0O7{1Jm#5fc3RGQ^f7 zhLiRz5XcyD0MVuBwhIIdK1Ox)F*=(&0%6pKHHcVE911}90)civskyN`6k~`5VlY|P z0l_dL&|ic&->?C(fhOc$VS#%^Rn3to0Rk>E!QuaD2#yBleZvrgq8xE(ScMBo1L1(7 z#NRpNk~9=4AdpU9SPU7%M?zIbfXtP^#{-LDw`J0^Z6ILI8O9samIXMhWf>YqThjwF z^C8I+3Tc61ns14~Zyl8o=;qu65q?7nMk6Nmb_Agq7ElI2NBu4XwT8j44qN^UE`aP< zl|>vQpu(axiX96{Fkp>=uR+jLYwr_T9HC_2@B4;8=Sf;?`4QAA_o!nOhsGUzi;#GS`ij8~FN-y}ujhrqQ4C*U?tX zX~+D{u^6&?;U>xlYQ>bp0E08nQSJB7l?P-y*p5~P@1V_&9^vnveE-@pAOYl{5Gce_ z%+feFgBs>%c3rD)5UrmXM82&YYRDS<*L~ZYsOHyKM_k91X*XX}R{&EEscy@x0&x+L zy?Ubx1TsbQ+b1Zn@}mlbWQe-OkA-XzoOxErBBg|9jAzqsK2Ue?pcqQiyGiu7J6y;n zW;Y_|1RjA=pEa2GC_50&={w8%W2>bTKkOn{%;NsJS%?*pqv-ohZH0Tt2zdscX4J75 zvfh71xOCsOj9RpY`x&>zkO=LqiCW3;$S}%v_T#R$spNPvhKwcO5w#A6ZV{C+q-c_M zr!i=&0{wI3ZPQA3St;nY`m^LS$XH0x&HgpDD>2dSU>o&ZMi{z9lmLMhx1t5At=3K@ z%5Qe`7OaLGdN`%DGyi(TgR9!Ags+X#NSE!bh{888L`Q76OEOHP`5ecPWL0P zh=s1qEgaNMcN`mXD?z9m1pT4}D@c;G6+}O8Ay$DBqE+BD3t2+PN3tb>z+!Rg7{C~# wEsQgFGK1?hS11gFwTsDD{g*q3<-Y&}07n=?lY(TUJOBUy07*qoM6N<$f*%Zr2LJ#7 literal 0 HcmV?d00001 diff --git a/src/test/resources/WEB-INF/ecology/eas/imgs/1-25.png b/src/test/resources/WEB-INF/ecology/eas/imgs/1-25.png new file mode 100644 index 0000000000000000000000000000000000000000..ac102349f65215952396ea0d97f66a78abe97f47 GIT binary patch literal 1275 zcmV|D)G+dvRrhfw;X5`@}AMJ2+a2YSI(58PnKzIV^6V&hmqz_Oj zeFEIxdJ89x4N_4LMaT^*l=74A&@tUCyRqY+jUDYsE64e~-u0KA`DOOSRE64DtRBWIJ3<5(%Nl9Cpc`Kii%(n3f<6)9;U zq)3~sBG9IVkTu#~Nn%QQ=n1*FGfq0$TYfLkr$S}I*d-;TJ^z~Ay(zu_Cf)u)jPpO~ zlHJgG%=p7AQbacX2M_ZG&2F(ZRNhOrdf1Ms6zD#rS-Jq>T z=kD|yLoCU@WEun979F&S#3hZ4G6v#l4$9#(SwVuTpH12vu${mK;uUC%ajJ~XxL7_R z5AS&N$;ki%s_yh*Ou;gG;c?TCw1JVNDQJAvRbvF03;@j*Tl=W}i3$ z%Me$LYPFijAer+qmsPyB37vZlte6njcIdoJCYC_T59jZE+;#`H2pL>*IiGU@B5Wo? zTOPlHYMVoKxiXk5{(!#v0(qhs@)ny{B+s*M0`-s6safR=z?d*LV}66Y@HuY~0)FWF zqKBF63AhI&Q`hM?^Er-8mQCP}p1>9 z$)F6z<~DmyWGjUFpRd;esQ)#qwbk#&<;5d7hoUg-LRtS-VcElPyaeyT+U@QC*E3)9;Gh!?O5Stj@W($>B}x!%LkD#Z3xo#I`_F3ZVS@yy5w3BZh7Ep3BdpdabSbC_p~k1 z?;0FlVDPTgA3rZ52CcvbO}v+j!#zv^zQp07f@)}$;nQ|zUqf(zVRN{N=MID0Tp%qY zUhjdo5O3g0Om?=rzoFIhQ0zx1&+!_MUXasQ?izMSO za#35)WG>@(7du2&>y^x9JTgyUvNA+uRJ`84_EZ_X!3-8*(&$2aIQJPpuc90JzeDK6 lOcSCB(S&G1Vza*j3;>06|Aqan-$Vca002ovPDHLkV1le?QKtX^ literal 0 HcmV?d00001 diff --git a/src/test/resources/WEB-INF/ecology/eas/imgs/1-26.png b/src/test/resources/WEB-INF/ecology/eas/imgs/1-26.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5dee07cc007fd6f60092cd6dfd96e91be629d7 GIT binary patch literal 1907 zcmV-(2aNcMP)x zxk~Rv=CblPD{J_EVPU~LH-Hcb%v93ult~zjGJC1Bl26Iy5sWGWWx3-3VPGIDCRP92f8#nFTpNIco_;vG zaEW~$IQ9F5Ker*X{|s`wPayZlHv9aGPV;jNl&OvZgn>~HbCJW>dtuKh!n1*!J_tq~ zWZ+!<{SkEkd>^uVJJww&XA=wr;_17?J`hn20mSRET-x3Y0|xtmfxHxFJYBZHzya)j z@G%_Z-$^WByy)%s>&+a#fSmWM=r7Lj@UXMKzP^$=APkIYS^Zx}e76&WZQ2FhA$F@%AEN^@02Z)61@C~aA8=Lz(#-}U2+z)CEh7=x0H zs59z9X1sShH89W)m<#QE_=)W2I`!2qAmks%r|97O%ylKRbI9sLnRugW`!X#b|78DbOr{#?#=I6 zXD|A|nF=!#Lxvzz;;oWg6 zs!(MEPft`Og7R9^wF=6Ajxgm?)}3*58B*p~usZDU8`#@D_4)GVcfK3hG7Rw8H_n7N zG!7tRZS=gZw?4sDD{nmyzLJTlL~KvYlCh*2a+;bN>_8@n29Ap}oAE@Vhmv6k$@Dfc zB%o!Raq$9^I8(uRBAF3l8}<$Rs56!*3~8%mUqg{1J2;`V!lu4C%3G+W$=D|8V5U!7JBzxaZ>`}2Ay`~hTdu-e0F>q6?9+Sy3s&y>0L2fkJ;p3irL@}6L>YeV>(5ku zaS4o2SxTT(*j<|>d7W>yfd$t+&)>S?-)T%A9`w8^TnizPT}%MBvh`hzttbei2*8ZO zT~@(t`w{Qw}MwGD`P)Pee5 z(;2I&4w;AJ(>kdglZ-jDp_|}3>5i@rkxBPy2;a-VN-A-uVv9f^BbF5L22V0hYc2oj zkFFxvEp;$CRA9IwFjV=Fk_r@JQm3(FQUyj>EXrs!FdgE97)yp!i#_sXC#s8)3p7=+ zi{jr#NMGk=%+Sr4wcMvb($^Dcj3tduVvyco?^kuU0s_~L;x#nLEe-iETEuzO_ks!x zErtl_C{mgY%BBkk1?|VLT4&c?KHp0JM@ERw#!HV$g&Y8!(E%b7Ak^@NBv&GBSapt7 z(=Y*5(O56>!E?x@ktj#1Dw3sijZQO*+^z~-LfHfeVn!u|wRKtk#e-rs=cL+^eF`{ZqxY4Xr2YH$^a+)9$vtwbP z0IgwWl9KwwiW-DJWDqN7l1ZSGDo{Lfqxq=GX>zkWUu2SqU3k7=b9nn{eq#v^9q6#Z>KRprra)=08a zD-R)(+#ajMOmnIDj>5GVKr`$ z5^yM|;+_YWDGKz1iPi|K>rBTGRFp%3yojd&qIHa6h^{?1F+`*&D~5HH(o(>-7_vxr t6@^qG33*L*6yRiAbP-;eefwX40RY6m2(4ZW#F792002ovPDHLkV1iRSa0mbZ literal 0 HcmV?d00001 diff --git a/src/test/resources/WEB-INF/ecology/eas/imgs/1-27.png b/src/test/resources/WEB-INF/ecology/eas/imgs/1-27.png new file mode 100644 index 0000000000000000000000000000000000000000..acbab0e5ffa3cc72cf84467383cdc190b5519236 GIT binary patch literal 1702 zcmV;X23h%uP)|9N68$}qNb^MXi#16C-hepDD^bl02dnzZoIrN+WKOpuW2!TIP^9$4!n#Gwv|Lk|eI2P(vuE47F!w6c?sFDEhYyO~{&C%Zc{YmdDwex=bW>)G|pGw;Xq zzB7)|>2%0gx)K{h&@1s_e%bQ!auzPw8mp_TjW7aY=r$Pu!Gy~Sv;~)szl2r>aH^39 z1b~=<3r_U9ME7-Q`7mgW7C-=u99(M9G768ipqT(lJyL*B&A>^$#%Vx_H4O?{kuxO( zB@6wUQF5w94vYd!u*`R&ny?7K#M2z78-kG`fPrx=#3)6niF4L3)w1PFjp^*f}Xm_h21bknJSF0#1Y26 z0g*Nt`sJ07fKg$=7+G>h*@xs?R%Yg zlI&%#lHF{MbP_4o=aSEUBa@9fNxXQcK5Z!)nS`C4jdiV{iF$hY7_bWjFX|gYYmo|OCsCj|q(*LTL529(m1IGTv zIkNrk4W&UND4W;PBz^xb3rZE;0bAwQ8FsV8yV&F=c_06EvmY=VKa;)ypnSxed2uK_ zgs!$plQ2=c4gI}L%Ng+TnQ8LR-23Wud~<`m^viv#9fOJOzICl{fFa@(xN&Xj z+PP;Zh+x>vGre=y3Z)22P%v2k7gJa%5y84b24B5*eA2|urgQTs-8G;1*54Kgi5E|l zz%bhTyh~^X4ZD2t*)RPTZH|l1nmM0gvStf%5u8x!=_3Y|FM1vnX$Atw%_%Ss;fv3v z7a$Uw<1K1tUeT%6P11h1K(PIV%~owtRKT#__t&qeN=aT5wJ}u+lxTB2<5y#$Ksl>- zrcoD8Tm}qFyZ-z+$=s@Hub5#12%r>*e^I(g#6|0}oy#D*+?$;P3ZFj3En+Z9j6|5k ziDc@**KM>KTT9t8fNttO2<}p%;XZ>7bNYv`oTy^UURK_hqlqOq8VR>tNq4q8C{63p zB0H+^Q9>3BtckF-9e#gDmb#;J6KzsebRBh~#iI%f%FOq7_(ON}o!P-TG zEf^tVwOK0`n$foyM~B-J+s{*QwS7gBD}m;{LcNL)L36n0)hOo}1}H_UmFuTg7fcDk ziMO6jF<`J-@fkdy^UKO(lGMPD;;P^r^lt{sTs9=x}!#XLQYOd7loN}fbq0g zW=Hdv%!o{=X0usX47~EkHRe?veGowE>|r*Kf!Lq%CzMsC5cD)*P|-=<^L>JWvKHjv zTqpsdE8Fh@o64|%E)v9Ka@0&tRkb|0L!SJHBnTiG60WmmBQcpe4PPUn?xE8VOt2`& z$O%9r{|i8vtg}WUF5^RYV?ctN3?E*@E;-$RL^`~VO-2QfDDa0tQ2|y%3K0XN5M-a3 w{}JL0iN>$1>OnW%jq!h&89P;9`B#7e079?qCGytf{Qv*}07*qoM6N<$f{S4p!vFvP literal 0 HcmV?d00001 diff --git a/src/test/resources/WEB-INF/ecology/eas/imgs/1-28.png b/src/test/resources/WEB-INF/ecology/eas/imgs/1-28.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d466c7442f2ace972c6386c4459c67124db0c7 GIT binary patch literal 1423 zcmV;A1#tR_P)(R}J|Id#qU=^<*g7-2 zo7i64#Urhf#%quF&70ZT^|*{xa!WR{R&a1|;P8(YZ@av?ym`{$1+-J%{Nv-}#hnEN zfEWQ7j^Sx@-i92Q`JDoUgV6ynoHZ}u^Va3Sgrx_BgE8SBofIx5+^5Y!2}%n{ieN+{ z7}B%}N-ae&-fF-&5f7 znEd>1nHZuPNHY!wAN(}{@K<;r@pl8>97K24pkg`4|{;BE$40m+638bros)DdA#;b{UU|AD9ed z$HYSKjI(T{NXo2BErV-*#(spUw*d*7EPW(~4y=#tr?|wrsPKRs zVY3emN@kNE3#w5z+l+w`rT9z0+t>z3V=W^Fa6#lG4Qvqn9I^J9@?$5+wa$n*)Q$Hq z^76k=SXIa&AIR7+>zxo_2zE3|vmYW^-Bav|Oku?uB0%&Mn@d)A&C&!!MfZ3R4yCDB zw}Q3eDv1H%0JOle@wH8wS!YPhVj;NVq7aKa$TMaZ4CW}@(1ls65Yz6U09kfDi*3c) zn(XjcF=S8#h74G7#7mncn=7)z#n|!fo}CeKdTT4qmmh3)wXyMy8aTQYgJTWT={B>Z0h zFL|!gSl|LS|iTrpG`c4vp!PvjIt7P3C3^vj|lOI~a z_mK^kai#BA`J_kmO>3!+>A~*DNh5}wu6R>eK}(P!Ao3s=$Z^?a>V~cukbppeoG8?v zL&KErO8vzR$VGMIm>*-M-V5pas)p&_lXRaTx&w{wAf}@!*S%>=suZt~HFSk=;O`g2 zc7ku9ThM=oShQjAQX}=Mn)1H2F$DHOLL#_2iW_nmUUn6lfB}N(b|84_bWbp5>WpX_ zRIzI18w-FHG0UD4K73>vEP%?C?lY`d2B!E6Libds)2Ip&5It+pGSA1L)t>%y^M*N1@y3Md;cJHx|H+t+U~r zs2Um0YunIWTjRzWY_*!Mxyg)VpxXz7WU4z!C9|MtkI}D(`LMQ_vy=sb_CBFIdc}3R dj_yAK3;-7W58AHW3F!a;002ovPDHLkV1jc?leYi> literal 0 HcmV?d00001 diff --git a/src/test/resources/WEB-INF/ecology/eas/index.html b/src/test/resources/WEB-INF/ecology/eas/index.html new file mode 100644 index 0000000..19ea166 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + + 上海世贸商城 + + + + + +
+ +
+ +
+ + + +
+ +
+ +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+ +
+ +
+
+
+ + + +
+
+ 关闭 +
+
    +
  • 1
  • +
  • 2
  • +
  • 3
  • +
  • 4
  • +
  • 5
  • +
  • 6
  • +
  • 7
  • +
  • 8
  • +
  • 9
  • +
  • 0
  • +
+
    +
  • Q
  • +
  • W
  • +
  • E
  • +
  • R
  • +
  • T
  • +
  • Y
  • +
  • U
  • +
  • I
  • +
  • O
  • +
  • P
  • +
+
    +
  • A
  • +
  • S
  • +
  • D
  • +
  • F
  • +
  • G
  • +
  • H
  • +
  • J
  • +
  • K
  • +
  • L
  • +
+
    +
  • 返回
  • +
  • Z
  • +
  • X
  • +
  • C
  • +
  • V
  • +
  • B
  • +
  • N
  • +
  • M
  • +
  • +
+
+
+
+ + + + + +
+ +
+ + + + + + diff --git a/src/test/resources/WEB-INF/ecology/eas/loginSM.jsp b/src/test/resources/WEB-INF/ecology/eas/loginSM.jsp new file mode 100644 index 0000000..1434bc7 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/loginSM.jsp @@ -0,0 +1,57 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util,weaver.general.*"%> +<%@ page import="weaver.hrm.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + BaseBean b = new BaseBean(); + String redirectTo = Util.null2String(request.getParameter("redirectTo")); + if(redirectTo.equals("")){ + redirectTo = "/"; + } + String isNotCheckRelogin = Util.null2String(request.getParameter("isNotCheckRelogin")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String assid = Util.null2String(request.getParameter("assid")); + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); +%> + +单点登录 + + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/loginSM.jsp1 b/src/test/resources/WEB-INF/ecology/eas/loginSM.jsp1 new file mode 100644 index 0000000..fd7ed55 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/loginSM.jsp1 @@ -0,0 +1,54 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util,weaver.general.Util"%> +<%@ page import="weaver.hrm.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + + String redirectTo = Util.null2String(request.getParameter("redirectTo")); + if(redirectTo.equals("")){ + redirectTo = "/"; + } + String isNotCheckRelogin = Util.null2String(request.getParameter("isNotCheckRelogin")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String assid = Util.null2String(request.getParameter("assid")); + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + +%> + +单点登录 + + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/loginSM1.jsp b/src/test/resources/WEB-INF/ecology/eas/loginSM1.jsp new file mode 100644 index 0000000..54dac48 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/loginSM1.jsp @@ -0,0 +1,73 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + String hashkey = MD5Util.getUserMd5String(user.getLoginid()); +%> + +单点登录 + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp b/src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp new file mode 100644 index 0000000..f829037 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp @@ -0,0 +1,62 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util,weaver.general.BaseBean" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.hrm.HrmUserVarify" %> +<%@ page import="weaver.hrm.User" %> + +<% + User user = HrmUserVarify.getUser(request, response); + BaseBean b = new BaseBean(); + String redirectTo = Util.null2String(request.getParameter("redirectTo")); + if (redirectTo.equals("")) { + redirectTo = "/"; + } + String isNotCheckRelogin = Util.null2String(request.getParameter("isNotCheckRelogin")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String assid = Util.null2String(request.getParameter("assid")); + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String host = Util.null2String(b.getPropValue("eas", "eas_host")); + String port = Util.null2String(b.getPropValue("eas", "eas_port")); + String dcname = Util.null2String(b.getPropValue("eas", "dcname")); + String eas_host = host + (port.equals("") ? "" : ":" + port); +%> + + 单点登录 + + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp.bak b/src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp.bak new file mode 100644 index 0000000..5ed977b --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/loginSMNew.jsp.bak @@ -0,0 +1,57 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util,weaver.general.*"%> +<%@ page import="weaver.hrm.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + BaseBean b = new BaseBean(); + String redirectTo = Util.null2String(request.getParameter("redirectTo")); + if(redirectTo.equals("")){ + redirectTo = "/"; + } + String isNotCheckRelogin = Util.null2String(request.getParameter("isNotCheckRelogin")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + String assid = Util.null2String(request.getParameter("assid")); + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String host = Util.null2String(b.getPropValue("eas","eas_host")); + String port = Util.null2String(b.getPropValue("eas","eas_port")); + String eas_host = host+(port.equals("")?"":":"+port); +%> + +单点登录 + + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/requestpage.jsp b/src/test/resources/WEB-INF/ecology/eas/requestpage.jsp new file mode 100644 index 0000000..652dff8 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/requestpage.jsp @@ -0,0 +1,130 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%> +<%@ taglib uri="/browser" prefix="brow"%> + + + + +<%@ include file="/systeminfo/init_wev8.jsp" %> + + + + + + + + + + <%@ include file="/hrm/resource/simpleHrmResource_wev8.jsp" %> + + <% + String loginid = easutl.getLoginid(user); + //type:0-代办 1-已办 2-我的请求 3-督办 + String type = Util.null2String(request.getParameter("type"));//获取操作类型 + String eas_workflowinfo = Util.null2String(rs.getPropValue("eas","workflowtypeview")); + String eas_requestinfo = Util.null2String(rs.getPropValue("eas","VWorkFlowDo")); + String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + String userid = user.getUID()+""; + int precount = 12 ; + String sqlwhere_oa = " and t2.userid="+userid+" and t2.usertype='0' and islasttimes=1 and t.workflowid in (select id from workflow_base where (isvalid='1' or isvalid='3') ) "; + String sqlwhere_eas = " and FPersonUserNumber='"+loginid+"'"; + if(type.equals("0")){ + sqlwhere_oa += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and (t.deleted=0 or t.deleted is null) and t2.islasttimes=1 and (isnull(t.currentstatus,-1) = -1 or (isnull(t.currentstatus,-1)=0 ))"; + sqlwhere_eas += " and FState='1' "; + }else if(type.equals("1")){ + sqlwhere_oa += " and t2.isremark='2' "; + sqlwhere_eas += " and FState='16' "; + }else if(type.equals("2")){ + sqlwhere_oa += " and t.creater="+userid; + sqlwhere_eas += " and FCreatorNumber='"+loginid+"'"; + } + %> + + + + + +
+<% + String searchsql = "SELECT '0' AS systemname,CAST(t.requestid as varchar(100)) as requestid,requestname,requestmark,cast(creater as varchar(100)) as creater,'0' as createrstr,CAST(t.currentnodeid AS VARCHAR(100)) as currentnodeid,CAST(t2.userid as varchar(100)) as userid,t2.receivedate,t2.receivetime,CAST(t.workflowid as varchar(100)) AS workflowid,'0' AS billid,'' as undo FROM workflow_requestbase t, workflow_currentoperator t2"+ + " WHERE t.requestid=t2.requestid "+sqlwhere_oa+ + " UNION "+ + " SELECT '1' AS systemname,FASSIGNID AS requestid , FSubject AS requestname ,FProcdeFNumber AS requestmark , FCreatorNumber AS creater,FCreator as createrstr , FActdeFName as currentnodeid,(SELECT id FROM HrmResource WHERE loginid=FPersonUserNumber) AS userid ,SUBSTRING(CONVERT(VARCHAR(20),FActTime,120),0,11) AS receivedate ,SUBSTRING(CONVERT(VARCHAR(20),FActTime,120),12,19) AS receivetime ,FworkflowID AS workflowid,Fbillid AS billid,FPersonUserName as undo FROM ( SELECT * FROM OPENQUERY("+eas_linkname+",'select * from "+eas_requestinfo+"')) t "+ + " where 1=1 "+sqlwhere_eas;//ORDER BY receivedate desc, receivetime desc + +%> + + + + + <% + String sql = "SELECT TOP "+precount+" * FROM ("+searchsql+") temp ORDER BY receivedate desc, receivetime desc"; + rs.executeSql(sql); + System.out.println(sql); + while(rs.next()){ + String requestid = rs.getString("requestid"); + String workflowid = rs.getString("workflowid"); + String typeid = rs.getString("systemname"); + String _userid = Util.null2String(rs.getString("userid")); + if(_userid.equals(""))_userid="0"; + String _undo = rs.getString("undo"); + + %> + + + + + + + + + + + <%} %> +
系统流程编号创建人请求标题接受时间当前节点未操作者
<%=easutl.getSystemName(typeid,"") %><%=rs.getString("requestmark") %><%=easutl.getUserName(rs.getString("creater"),typeid+"+"+Util.null2String(rs.getString("createrstr"))) %><%=easutl.getRequestNameLink(requestid,rs.getString("requestname")+"+"+typeid+"+"+_userid+"+"+user.getLanguage()) %><%=rs.getString("receivedate") %> <%=rs.getString("receivetime").substring(0,5) %><%=easutl.getNodeName(rs.getString("currentnodeid"),typeid) %><%=easutl.getUnOperators(requestid,user.getLanguage()+"+"+_userid+"+"+_userid+"+"+typeid+"+"+_undo) %>
+
+ + + diff --git a/src/test/resources/WEB-INF/ecology/eas/requestsearch.jsp b/src/test/resources/WEB-INF/ecology/eas/requestsearch.jsp new file mode 100644 index 0000000..75d8a95 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/requestsearch.jsp @@ -0,0 +1,426 @@ + +<%@ page import="weaver.general.Util,org.apache.commons.lang3.*" %> +<%@ page import="weaver.conn.*" %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%> +<%@ taglib uri="/browser" prefix="brow"%> + + + + + + + + + + + + +<% +boolean isedit = true; +String pageId = "EAS:wfeas_tablelist"; +String imagefilename = "/images/hdMaintenance_wev8.gif"; +String titlename = SystemEnv.getHtmlLabelName(82487,user.getLanguage()); +String needfav ="1"; +String needhelp =""; + +String eas_workflowinfo = Util.null2String(rs.getPropValue("eas","workflowtypeview")); +String eas_requestinfo = Util.null2String(rs.getPropValue("eas","VWorkFlowDo")); +String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); + +String requestname = Util.null2String(request.getParameter("requestname")); +String requestmark = Util.null2String(request.getParameter("requestmark")); +String workflowtypeid = Util.null2String(request.getParameter("workflowtypeid")); +String workflowid = Util.null2String(request.getParameter("workflowid")); +String creater = Util.null2String(request.getParameter("creater")); +String craetedateselect = Util.null2String(request.getParameter("craetedateselect")); +String createsdate = Util.null2String(request.getParameter("createsdate")); +String createedate = Util.null2String(request.getParameter("createedate")); +String status = Util.null2String(request.getParameter("status")); +String unoperator = Util.null2String(request.getParameter("unoperator")); + +%> + +<%@ include file="/systeminfo/TopTitle_wev8.jsp" %> +<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %> +<% +RCMenu += "{搜索,javaScript:dosearch(),_self} " ; +RCMenuHeight += RCMenuHeightStep ; +RCMenu += "{重置,javaScript:doreset(),_self} " ; +RCMenuHeight += RCMenuHeightStep ; +%> +<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %> + + + + + +
+
+ + + + + +
+ + + +
+ +
+ + + 标题 + + 编号 + + + 类型 + + + + + 流程 + + + + + 创建日期 + + + + + + + 创建人 + + + + + 处理状态 + + + + 未操作者 + + + + + + +
+ +
+<% +String loginid = EASUtil.getLoginid(user); +String sqlWhere_oa = " and islasttimes=1 "; +String sqlWhere_eas = " and FPersonUserNumber=''"+loginid+"''"; +//只取正常的流程 +//sqlWhere += " and EXISTS (select 1 from workflow_base WHERE isvalid='1' and id=workflowid )" ; +/* +System.out.println("requestname = "+requestname); +System.out.println("requestmark = "+requestmark); +System.out.println("workflowtypeid = "+workflowtypeid); +System.out.println("workflowid = "+workflowid); +System.out.println("createsdate = "+createsdate); +System.out.println("createedate = "+createedate); +System.out.println("creater = "+creater); +System.out.println("status = "+status); +System.out.println("unoperator = "+unoperator); +*/ +if(!requestname.equals("")){ + sqlWhere_oa += " and requestname like '%"+requestname+"%'"; + sqlWhere_eas += " and fsubject like ''%"+requestname+"%''" ; +} +if(!requestmark.equals("")){ + sqlWhere_oa += " and requestmark like '%"+requestmark+"%'"; + sqlWhere_eas += " and FProcdeFNumber like ''%"+requestmark+"%''" ; +} +if(!workflowtypeid.equals("")){ + //sqlWhere += " and workflowtype='"+workflowtypeid+"'"; + sqlWhere_oa += " and ( t.workflowid IN (SELECT id FROM workflow_base WHERE workflowtype="+workflowtypeid+"))"; + sqlWhere_eas += " and fworkflowid IN (SELECT FworkflowID FROM "+eas_workflowinfo+" WHERE FCategoryID="+workflowtypeid+")" ; +} +if(!workflowid.equals("")){ + sqlWhere_oa += " and t.workflowid="+workflowid; + sqlWhere_eas += " and fworkflowid=(select fworkflowid from "+eas_workflowinfo+" where fid="+workflowid+") "; +} +if(!creater.equals("")){ + sqlWhere_oa += " and creater="+creater ; + sqlWhere_eas += " and FCreatorNumber=''"+EASUtil.getLoginid(creater)+"'' "; +} +if(!unoperator.equals("")){ + sqlWhere_oa += " and userid='"+unoperator+"' "; + sqlWhere_eas += " and FPersonUserNumber=''"+EASUtil.getLoginid(unoperator)+"'' "; +} +if(!status.equals("")){ + //TODO 代办 + if(status.equals("1")){ + sqlWhere_oa += " and isremark in ('0','1','5','7','8','9') "; + sqlWhere_eas += " and fstate=''1'' " ; + }else if(status.equals("2")){ + //已办 + sqlWhere_oa += " and isremark in (2,4) "; + sqlWhere_eas += " and fstate=''16'' " ; + }else{ + //全部 + } +} +if(!createsdate.equals("")){ + sqlWhere_oa += " and createdate>='"+createsdate+"'" ; + sqlWhere_eas += " and to_char(fcreatedtime, ''yyyy-mm-dd'') >=''"+createsdate+"'' " ; +} +if(!createedate.equals("")){ + sqlWhere_oa += " and createdate<='"+createedate+"'" ; + sqlWhere_eas += " and to_char(fcreatedtime, ''yyyy-mm-dd'') <=''"+createedate+"'' " ; +} + +String sqltemp = "SELECT '0' AS systemtype ,"+ + "CAST(t.requestid AS VARCHAR(200)) AS requestid ,"+ + "requestname ,"+ + "requestmark ,"+ + "creater ,'' as createrstr,"+ + "CAST(t.currentnodeid AS VARCHAR(100)) AS currentnodeid ,"+ + "t2.userid ,"+ + "t.createdate,"+ + "t.createtime,"+ + "t2.receivedate ,"+ + "t2.receivetime ,"+ + "t2.isremark, "+ + "CAST(t.workflowid AS VARCHAR(100)) AS workflowid,'0' as undo "+ + " FROM workflow_requestbase t ,"+ + " workflow_currentoperator t2"+ + " WHERE t.requestid = t2.requestid"+ + " AND t2.userid = "+user.getUID()+" "+ + " AND t2.usertype = '0'"+ + " AND islasttimes = 1"+ + " AND EXISTS (SELECT 1 FROM workflow_base WHERE id=t.workflowid AND isvalid=1)"+sqlWhere_oa+ + " UNION "+ + " SELECT '1' AS systemtype ,"+ + " FASSIGNID AS requestid ,"+ + " FSubject AS requestname ,"+ + " FProcdeFNumber AS requestmark ,"+ + " FCreatorNumber AS creater,FCreator AS createrstr ,"+ + "FActdeFName AS currentnodeid ,"+ + "FPersonUserNumber AS userid ,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FCreatedTime, 120), 0, 11) AS createdate ,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FCreatedTime, 120), 12, 19) AS createtime ,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FActTime, 120), 0, 11) AS receivedate ,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FActTime, 120), 12, 19) AS receivetime ,"+ + "FState as isremark , "+ + " FWorkFlowID AS workflowid,FPersonUserName as undo "+ + " FROM (select * from openquery("+eas_linkname+",'select * from "+eas_requestinfo+" where 1=1 "+sqlWhere_eas+" ')) w "+ + " WHERE 1 = 1"+ + //" AND FPersonUserName = 'qiong.li'"+ + //" AND FState = '0' "+ + ""; +String sqlWhere = ""; +String orderby ="receivedate,receivetime"; +String tableString = ""; +String backfields = " systemtype,requestid,requestname ,requestmark ,creater ,createrstr,currentnodeid ,userid ,createdate,createtime,receivedate ,receivetime ,workflowid,undo"; +String fromSql = " ("+sqltemp+") t "; +System.out.println("select "+backfields+" from "+fromSql+" where "+sqlWhere); +String param = user.getLanguage()+"+column:userid+column:userid+column:systemtype+column:undo"; +tableString = " "+ + //" "+ + " "+ + " "+ + " "+ + " "+ + " "+ + " "+ + " "+ + " "+ + " "+ + " "+ + " "+ + "
"; +%> + + + + + +
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/requestsearchtab.jsp b/src/test/resources/WEB-INF/ecology/eas/requestsearchtab.jsp new file mode 100644 index 0000000..e1cee54 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/requestsearchtab.jsp @@ -0,0 +1,70 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="java.util.*" %> + + + + + + + + + + +<% + String navName = "查询流程"; +%> + + + +
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/src/test/resources/WEB-INF/ecology/eas/viewrequest.jsp1 b/src/test/resources/WEB-INF/ecology/eas/viewrequest.jsp1 new file mode 100644 index 0000000..8c3643e --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/viewrequest.jsp1 @@ -0,0 +1,44 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.eas.MD5Util"%> +<%@ page import="weaver.hrm.*,weaver.general.*" %> + +<% + User user = HrmUserVarify.getUser (request , response) ; + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String loginid = eu.getLoginid(user); + String hashkey = MD5Util.getUserMd5String(loginid); + String requestid = Util.null2String(request.getParameter("requestid")); + String isNotCheckRelogin = Util.null2String(request.getParameter("rwid")); + String isAwokeAtUserReLoginForPortal = Util.null2String(request.getParameter("isAwokeAtUserReLoginForPortal")); + String bill = Util.null2String(request.getParameter("bill")); + System.out.println("udcsso = "+hashkey); + System.out.println("assid = "+requestid); +%> + +查看流程 + + + +
+ +
+ + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/wfLaunch.jsp b/src/test/resources/WEB-INF/ecology/eas/wfLaunch.jsp new file mode 100644 index 0000000..ae53db4 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/wfLaunch.jsp @@ -0,0 +1,297 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8"%> +<%@ page import="weaver.general.Util"%> +<%@ page import="weaver.conn.*"%> +<%@ include file="/systeminfo/init_wev8.jsp" %> + + + +EAS创建流程列表 + + + + + +<% +RecordSet rs = new RecordSet(); +ArrayList typeids = new ArrayList(); +ArrayList typenames = new ArrayList(); +ArrayList typecounts = new ArrayList(); +String eas_workflowinfo = Util.null2String(rs.getPropValue("eas","workflowtypeview")); +String eas_linkname = Util.null2String(rs.getPropValue("eas","linkname")); +rs.executeSql("select FCategoryID,FCategory,FCategorySeq,count from openquery("+eas_linkname+",'SELECT a.FCategoryID,a.FCategory,a.FCategorySeq,(SELECT COUNT(fid) FROM "+eas_workflowinfo+" WHERE FCategoryID=a.FCategoryID and fstatus=1) as count FROM "+eas_workflowinfo+" a GROUP BY a.FCategoryID,a.FCategory,a.FCategorySeq ORDER BY a.FCategorySeq ')"); +while(rs.next()){ + String typeid = rs.getString(1); + String typename = rs.getString(2); + System.out.println("typeid = "+typeid+" typename="+typename); + int count = Util.getIntValue(rs.getString(4),0); + if(count>0){ + typeids.add(typeid); + typenames.add(typename); + typecounts.add(count+""); + } +} + +int ls = typeids.size()%3; +int hs = typeids.size()/3; +String[] color={"#166ca5","#953735","#01b0f1","#767719","#f99d52","#cf39a4"}; +%> + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + +
+ <% + int idx = 0; + Random r = new Random(); + for(int i = 0 ; i < typeids.size(); i++){ + String typeid = typeids.get(i).toString(); + String typename = typenames.get(i).toString(); + String typecount = typecounts.get(i).toString(); + + int j = r.nextInt(6); + %> +
+
+
(<%=typecount %>)
+
+ <% + rs.executeSql("select fid,fname,fsearchurl from openquery("+eas_linkname+",'SELECT FID,FName,fsearchurl,fexeurl FROM "+eas_workflowinfo+" WHERE FCategoryID="+typeid+" and fstatus=1 ')"); + while(rs.next()){ + String fid = rs.getString(1); + String fname = rs.getString(2); + String faddurl = rs.getString(3); + %> +
+
+ + <%=fname %> +
+
+ <%} %> +
+ <% + System.out.println("idx = "+idx); + if(idx==2){ + idx=0; + %> +
+
+
+ <% + }else{ + %> +
+
  +
+ <% + } + idx++; + %> + <%} %> +
+
+
+
+ + + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/eas/wfSupervise.jsp b/src/test/resources/WEB-INF/ecology/eas/wfSupervise.jsp new file mode 100644 index 0000000..9f78bc7 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/eas/wfSupervise.jsp @@ -0,0 +1,487 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea" %> +<%@ taglib uri="/browserTag" prefix="brow"%> + +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.workflow.search.WfAdvanceSearchUtil" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.general.*,weaver.workflow.request.WFWorkflows,weaver.workflow.request.WFWorkflowTypes"%> + + + + + + + + + + + + + + + + + + + +<% + String imagefilename = "/images/hdDOC_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(197, user.getLanguage()) + ":" + SystemEnv.getHtmlLabelName(648, user.getLanguage()); + String needfav = "1"; + String needhelp = ""; +%> + +
+<% + String method = Util.null2String(request.getParameter("method")); + String objid = Util.null2String(request.getParameter("objid")); + String workflowid = Util.null2String(request.getParameter("workflowid")); + String nodetype = Util.null2String(request.getParameter("nodetype")); + String creatertype = Util.null2String(request.getParameter("creatertype")); + String requestlevel = Util.null2String(request.getParameter("requestlevel")); + //菜单点击:workflow 点击的是流程 type 点击的是流程类型 + String menutype = Util.null2String(request.getParameter("menutype")); + //菜单点击:workflowid or worktypeid 依据menutype而定 + String menuid = Util.null2String(request.getParameter("menuid")); + //菜单点击:flowAll 所有流程;flowNew 未读流程;flowResponse 反馈的;flowOut 超时的 + String complete = Util.null2String(request.getParameter("complete")); + //已督办:2;未督办:1 + String isdo = Util.null2String(request.getParameter("isdo")); + //创建日期标识 + String datecondition=Util.null2String(request.getParameter("createdateselect")); + //接收日期标识 + String recievedateselect = Util.null2String(request.getParameter("recievedateselect")); + + int ownerdepartmentid = Util.getIntValue(request.getParameter("ownerdepartmentid"),0); + int creatersubcompanyid=Util.getIntValue(request.getParameter("creatersubcompanyid"),0); + int createrid = Util.getIntValue(request.getParameter("createrid"),0); + int createrid2=Util.getIntValue(request.getParameter("createrid2"),0); + int unophrmid=Util.getIntValue(request.getParameter("unophrmid"),0); + + String sqlwhere=""; + boolean isnew = false; + + //根据页面上(用户所输入的)查询方式来设置查询条件 + if (method.equals("type")&&!objid.trim().equals("")) { + workflowid = ""; + sqlwhere=" b.workflowtype="+objid; + } + if (method.equals("workflow")&&!objid.trim().equals("")) { + workflowid = objid; + sqlwhere=" b.id="+objid; + } + if (method.equals("request")&&!objid.trim().equals("")) { + String level = Util.null2String(request.getParameter("level")); + //类型级别 + if (level.equals("1")) + { + workflowid = ""; + sqlwhere=" b.workflowtype="+objid; + }else if (level.equals("2")) + { + workflowid = objid; + sqlwhere=" b.id="+objid; + } + isnew = true; + } + + + //如果当前流程ID列表为空,则对其进行二次赋值 + if(workflowid.equals("")){ + //如果当前流程类型不为空,则将流程类型的所有流程设置为流程ID列表 + if(method.equals("type")&&!objid.trim().equals("")){ + RecordSet.execute("select id from workflow_base where workflowtype="+objid); + while(RecordSet.next()){ + int id_tmp = Util.getIntValue(RecordSet.getString(1), 0); + workflowid += (id_tmp+","); + } + if(!workflowid.equals("")){ + workflowid = workflowid.substring(0, workflowid.length()-1); + } + }else{ + //如果当前流程类型为空,则从会话作用域中来获取流程ID列表 + workflowid = SearchClause.getWorkflowId(); + } + } + ArrayList flowList=Util.TokenizerString(workflowid,","); + + + //调用WFUrgerManager类获取当前用户的所有流程的流程督办的配置信息 + int logintype = Util.getIntValue(user.getLogintype(),1); + int userID = user.getUID(); + WFUrgerManager.setLogintype(logintype); + WFUrgerManager.setUserid(userID); + WFUrgerManager.setSqlwhere(sqlwhere); + WFUrgerManager.setWorkflowIDs(workflowid); + ArrayList wftypes=WFUrgerManager.getWrokflowTree(); + String tmpTableName = WFUrgerManager.getTmpTableName(); + + + String requestids = ""; + String requestSql = ""; + Map mapRequestIDs = new HashMap(); + for(int i=0;i0) break; + WFWorkflows wfObj=(WFWorkflows)workflows.get(j); + String tempWorkflow=wfObj.getWorkflowid()+""; + //查询的流程ID列表为空,或者流程ID列表包含 + if("".equals(workflowid) || flowList.contains(tempWorkflow)) { + ArrayList requests = null; + + if(isnew){ + requests=wfObj.getNewrequestids(); + }else{ + requests=wfObj.getReqeustids(); + } + + for(int k=0;k0 "; + //未督办 + else if(isdo.equals("1")) + sqlWhere += " and (select count(0) from workflow_requestlog where requestid =t2.requestid and logtype='s' and operator="+user.getUID()+")=0 "; + + if(menutype.equals("workflow")) + sqlWhere += " and t1.workflowid='"+menuid+"' "; + else if(menutype.equals("type")) + sqlWhere += " and (select count(0) from workflow_base where id=t1.workflowid and workflowtype='"+menuid+"')>0 "; + //未读流程 + if(complete.equals("3")) + sqlWhere += " and (select count(0) from workflow_requestviewlog where id=t2.requestid and currentnodeid = t1.currentnodeid and viewer="+user.getUID()+")=0"; + //反馈流程 + else if(complete.equals("4")); + //超时流程 + else if(complete.equals("8")); + + String popeUrgepara = "column:requestid+column:workflowid+"+user.getUID()+"+"+(logintype-1)+"+"+ user.getLanguage(); + + String operateString= ""; + operateString = ""; + + operateString +=" "; + + //operateString +=" "; + operateString +=""; + + String orderby = " t1.receivedatetime "; + %> + + + + + <% + WorkFlowTransMethod wtm = new WorkFlowTransMethod(); + String sql = "selct "+backfields +" "+fromSql+" where 1=1 "+sqlWhere+" order by "+orderby+" desc"; + RecordSet.executeSql(sql); + while(RecordSet.next()){ + String requestid = RecordSet.getString("requestid"); + String requestname = RecordSet.getString("requestname"); + String _workflowid = RecordSet.getString("workflowid"); + String _userid = Util.null2String(RecordSet.getString("userid")); + String para2 = requestid+"+"+_workflowid+"+"+userID+"+"+(logintype-1)+"+"+ user.getLanguage(); + %> + + + + + + + + + + <%} %> +
流程编号创建人请求标题接受时间当前节点未操作者
<%=RecordSet.getString("requestmark") %><%=ResourceComInfo.getMulResourcename1(RecordSet.getString("creater")) %><%=wtm.getWfNewLinkByUrger(requestname,"")%><%=RecordSet.getString("receivedatetime") %><%=wtm.getCurrentNode(RecordSet.getString("currentnodeid")) %><%=wtm.getUnOperators(requestid,user.getLanguage()+"+"+user.getUID()) %>
+
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/MyRequestView.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/MyRequestView.jsp new file mode 100755 index 0000000..b66268d --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/MyRequestView.jsp @@ -0,0 +1,812 @@ +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.conn.*" %> +<%@ page import="java.util.*" %> +<%@page import="org.json.JSONObject"%> +<%@page import="org.json.JSONArray"%> + + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> + + + + + + + + +<% +Enumeration em = request.getParameterNames(); +boolean isinit = true; +while(em.hasMoreElements()) +{ + String paramName = (String)em.nextElement(); + if(!paramName.equals("")) + isinit = false; + break; +} +//是否需要加载树 +String offical = Util.null2String(request.getParameter("offical")); +int officalType = Util.getIntValue(request.getParameter("officalType"),-1); +String loadtree = Util.null2String(request.getParameter("loadtree")); +int date2during = Util.getIntValue(request.getParameter("date2during"),0); +String imagefilename = "/images/hdReport_wev8.gif"; +String titlename = SystemEnv.getHtmlLabelName(1210,user.getLanguage()) +":"+SystemEnv.getHtmlLabelName(367,user.getLanguage()); +String needfav ="1"; +String needhelp =""; + +String resourceid=""+user.getUID(); +session.removeAttribute("RequestViewResource"); +String logintype = ""+user.getLogintype(); +int usertype = 0; + +/* edited by wdl 2006-06-14 left menu advanced menu */ +int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"),0); +String selectedContent = Util.null2String(request.getParameter("selectedContent")); +String menuType = Util.null2String(request.getParameter("menuType")); +int infoId = Util.getIntValue(request.getParameter("infoId"),0); +if(selectedContent!=null && selectedContent.startsWith("key_")){ + String menuid = selectedContent.substring(4); + RecordSet.executeSql("select * from menuResourceNode where contentindex = '"+menuid+"'"); + selectedContent = ""; + while(RecordSet.next()){ + String keyVal = RecordSet.getString(2); + selectedContent += keyVal +"|"; + } + if(selectedContent.indexOf("|")!=-1) + selectedContent = selectedContent.substring(0,selectedContent.length()-1); +} + if(fromAdvancedMenu == 1){ + response.sendRedirect("/workflow/search/WFSearchCustom.jsp?offical="+offical+"&officalType="+officalType+"&fromadvancedmenu=1&infoId="+infoId+"&selectedContent="+selectedContent+"&menuType="+menuType); + return; + } +String selectedworkflow = ""; +LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); +LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); +if(info!=null){ + selectedworkflow = info.getSelectedContent(); +} +if(!"".equals(selectedContent)) +{ + selectedworkflow = selectedContent; +} +selectedworkflow+="|"; +/* edited end */ + +if(logintype.equals("2")) + usertype= 1; +char flag = Util.getSeparator(); + +int olddate2during = 0; +BaseBean baseBean = new BaseBean(); +String date2durings = ""; +try +{ + date2durings = Util.null2String(baseBean.getPropValue("wfdateduring", "wfdateduring")); +} +catch(Exception e) +{} +String[] date2duringTokens = Util.TokenizerString2(date2durings,","); +if(date2duringTokens.length>0) +{ + olddate2during = Util.getIntValue(date2duringTokens[0],0); +} +if(olddate2during<0||olddate2during>36) +{ + olddate2during = 0; +} +if(isinit) +{ + date2during = olddate2during; +} + +%> + + + + + + + + +<% // if(HrmUserVarify.checkUserRight("requestview:Add", user)){ %> + + +<% // }%> + +<% + ArrayList wftypes=new ArrayList(); + ArrayList wftypecounts=new ArrayList(); + ArrayList workflows=new ArrayList(); + ArrayList wftypecountsy=new ArrayList(); + ArrayList workflowcounts=new ArrayList();//未归档的 + ArrayList workflowcountsy=new ArrayList();//归档 + ArrayList newcountslist = new ArrayList();//未读 + ArrayList supedcountslist = new ArrayList();//反馈 + ArrayList overcountslist = new ArrayList();//超时 + + + Map workflowcountsMap=new Hashtable();//未归档的数量 + Map workflowcountsyMap=new Hashtable();//归档数量 + Map newcountsMap=new Hashtable(); //未读 + Map supedcountsMap=new Hashtable();//反馈数量 + Map overcountsMap = new Hashtable(); //超时数量 + + String _viewtype = ""; // + int totalcount=0; + int totalcounty=0; + String currworkflowtype=""; + + String currworkflowid=""; + String currentnodetype=""; + String _wftypes = ""; + String demoLeftMenus = ""; + if(loadtree.equals("true")){ + StringBuffer sqlsb = new StringBuffer(); + sqlsb.append("select count(distinct t1.requestid) typecount, "); + sqlsb.append(" t2.workflowtype, "); + sqlsb.append(" t1.workflowid, "); + sqlsb.append(" t1.currentnodetype "); + sqlsb.append(" from workflow_requestbase t1, workflow_base t2,workflow_currentoperator t3 "); + sqlsb.append(" where t1.creater = ").append(resourceid); + sqlsb.append(" and t1.creatertype = ").append(usertype); + sqlsb.append(" and t1.workflowid = t2.id "); + sqlsb.append(" and t1.requestid = t3.requestid "); + sqlsb.append(" and t3.islasttimes=1 "); + sqlsb.append(" and (t2.isvalid='1' or t2.isvalid='3') "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(t1.currentstatus,-1) = -1 or (isnull(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "); + } + sqlsb.append(" and exists "); + sqlsb.append(" (select 1 "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where workflow_currentoperator.islasttimes='1' "); + sqlsb.append(" and workflow_currentoperator.userid = " + resourceid + WorkflowComInfo.getDateDuringSql(date2during) +") "); + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and t1.workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and isvalid=1)"); + }else if(officalType==2){ + sqlsb.append(" and t1.workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and isvalid=1)"); + } + } + sqlsb.append("group by t2.workflowtype, t1.workflowid, t1.currentnodetype"); + RecordSet.executeSql(sqlsb.toString()); + //System.out.println("sqlsb.toString():"+sqlsb.toString()); + //RecordSet.executeProc("workflow_requestbase_MyRequest",resourceid+flag+usertype); + while (RecordSet.next()) + { + currworkflowtype = RecordSet.getString("workflowtype"); + currworkflowid = RecordSet.getString("workflowid"); + + currworkflowid = WorkflowVersion.getActiveVersionWFID(currworkflowid); + + currentnodetype=RecordSet.getString("currentnodetype"); + _viewtype = RecordSet.getString("viewtype"); + int theworkflowcount=RecordSet.getInt("typecount"); + if(selectedworkflow.indexOf("T"+currworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+currworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + int temps=wftypes.indexOf(currworkflowtype); + if (temps!=-1) + { + if (currentnodetype.equals("3")) + wftypecountsy.set(temps,""+(Util.getIntValue((String)wftypecountsy.get(temps),0)+theworkflowcount)); + else + wftypecounts.set(temps,""+(Util.getIntValue((String)wftypecounts.get(temps),0)+theworkflowcount)); + } + else + { + wftypes.add(currworkflowtype); + if (currentnodetype.equals("3")) + { + wftypecountsy.add(""+RecordSet.getString("typecount")); + wftypecounts.add(""+0); + } + else + { + wftypecounts.add(""+RecordSet.getString("typecount")); + wftypecountsy.add(""+0); + } + } + temps=workflows.indexOf(currworkflowid); + if (temps!=-1) + { + if (currentnodetype.equals("3")) + workflowcountsy.set(temps,""+(Util.getIntValue((String)workflowcountsy.get(temps),0)+theworkflowcount)); + else + workflowcounts.set(temps,""+(Util.getIntValue((String)workflowcounts.get(temps),0)+theworkflowcount)); + } + else + { + workflows.add(currworkflowid); + if (currentnodetype.equals("3")) + { + workflowcountsy.add(""+RecordSet.getString("typecount")); + workflowcounts.add(""+0); + } + else + { + workflowcounts.add(""+RecordSet.getString("typecount")); + workflowcountsy.add(""+0); + } + } + + if (currentnodetype.equals("3")) + totalcounty+=theworkflowcount; + else + totalcount+=theworkflowcount; + } + + //左侧树 json 数据生成逻辑 + demoLeftMenus+="["; + String typeid=""; + String typecount=""; //未归档的type数量 + String typecounty = ""; //已归档的type数量 + String typename=""; + String workflowid=""; + String workflowcount=""; //未归档的数量 + String workflowcounty = ""; //归档的数量 + String wfnewcount = ""; //未读 + String wfrescount = ""; //反馈 + String wfoutcount = ""; //超时 + String workflowname=""; + + //System.out.println("wftypes.size():流程类型总数==>"+wftypes.size()); //流程类型总数 + for(int i=0;i maps=new ArrayList(0); + for(int j=0;j0 ){ + //demoLeftMenus+=","; + } + while(rs.next()){ + String _typeid = rs.getString(1); + String _typename = rs.getString(2); + + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select * from "+eas_requestinfo+" where FCreatorNumber=''"+loginid+"'' and fworkflowid in (select fworkflowid from "+eas_workflowinfo+" where FCategoryID=''"+_typeid+"'') ')"); + int allwfcount = RecordSet.getCounts(); + if(allwfcount==0){ + continue ; + } + System.out.println("_typeid = "+_typeid+" _typename="+_typename); + if(demoLeftMenus.length()>10){ + demoLeftMenus +=",{"; + }else{ + demoLeftMenus +="{"; + } + demoLeftMenus += "\"name\":\""+_typename+"\","; + demoLeftMenus+="\"__domid__\":\"__type_"+_typeid+"\","; + demoLeftMenus += "\"hasChildren\":"+true+","; + demoLeftMenus += "\"isOpen\":"+true+","; + demoLeftMenus += "\"submenus\":["; + int eas_wf_count = 0 ; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select fid,fname,fworkflowid from "+eas_workflowinfo+" where FCategoryID="+_typeid+" order by fseq')");//查询EAS流程 + eas_wf_count = RecordSet.getCounts(); + int wfcountall = 0 ; + while(RecordSet.next()){ + String _wfid = RecordSet.getString(1); + String _wfname = RecordSet.getString(2); + String fworkflowid = Util.null2String(RecordSet.getString("fworkflowid")); + rs1.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FCreatorNumber=''"+loginid+"'' and fworkflowid=''"+fworkflowid+"'' ')"); + int wfcount = 0; + if(rs1.next()){ + wfcount = Util.getIntValue(rs1.getString(1),0); + } + if(wfcount==0){ + continue ; + } + wfcountall += wfcount ; + demoLeftMenus += "{"; + demoLeftMenus += "\"name\":\""+_wfname+"\","; + demoLeftMenus+="\"__domid__\":\"__wf_"+_wfid+"\","; + demoLeftMenus += "\"hasChildren\":false,"; + demoLeftMenus+="\"attr\":{"; + demoLeftMenus+="\"workflowid\":"+_wfid+","; + demoLeftMenus+="\"date2during\":\""+date2during+"\""; + demoLeftMenus+="},"; + demoLeftMenus+="\"numbers\":{"; + demoLeftMenus+="\"flowAll\":"+wfcount+","; + demoLeftMenus+="\"flowNew\":0,"; + demoLeftMenus+="\"flowResponse\":0,"; + demoLeftMenus+="\"flowOut\":0"; + demoLeftMenus+="}"; + demoLeftMenus += "}"; + demoLeftMenus += ","; + } + if(demoLeftMenus.endsWith(",")){ + demoLeftMenus = demoLeftMenus.substring(0,demoLeftMenus.length()-1); + } + demoLeftMenus += "],"; + demoLeftMenus+="\"attr\":{"; + demoLeftMenus+="\"typeid\":"+typeid+","; + demoLeftMenus+="\"fromAdvancedMenu\":"+fromAdvancedMenu+","; + demoLeftMenus+="\"infoId\":"+infoId+","; + demoLeftMenus+="\"selectedContent\":\""+selectedContent+"\","; + demoLeftMenus+="\"menuType\":\""+menuType+"\","; + demoLeftMenus+="\"date2during\":\""+date2during+"\""; + demoLeftMenus += "},"; + + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus+="\"flowAll\":"+wfcountall+","; + demoLeftMenus+="\"flowNew\":0,"; + demoLeftMenus+="\"flowResponse\":0,"; + demoLeftMenus+="\"flowOut\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + } + + + demoLeftMenus += "]"; + out.clear(); + out.print(demoLeftMenus); + System.out.println(demoLeftMenus); + return; + } + + boolean isUseOldWfMode=sysInfo.isUseOldWfMode(); + if(!isUseOldWfMode){ + String typeid=""; + String typecount=""; + String typename=""; + String workflowid=""; + String workflowcount=""; + String workflowname=""; + int typerowcounts=wftypes.size(); + + JSONArray jsonFinishedWfTypeArray = new JSONArray(); + JSONArray jsonUnFinishedWfTypeArray = new JSONArray(); + + for(int i=0;i"+typename+" ("+typecount+")"); + jsonWfType.put("cls","wfTreeFolderNode"); + + //if(typeid.equals("24")) continue; + + JSONArray jsonWfTypeChildrenArray = new JSONArray(); + for(int j=0;j"+workflowname+"  ("; + + wfText+=Util.toScreen(workflowcount,user.getLanguage())+")"; + + jsonWfTypeChild.put("text",wfText); + jsonWfTypeChild.put("iconCls","btn_dot"); + jsonWfTypeChild.put("cls","wfTreeLeafNode"); + jsonWfTypeChildrenArray.put(jsonWfTypeChild); + } + } + + jsonWfType.put("children",jsonWfTypeChildrenArray); + jsonUnFinishedWfTypeArray.put(jsonWfType); + } + } + + for(int i=0;i"+typename+" ("+typecount+")"); + jsonWfType.put("cls","wfTreeFolderNode"); + + //if(typeid.equals("24")) continue; + + JSONArray jsonWfTypeChildrenArray = new JSONArray(); + for(int j=0;j"+workflowname+"  ("; + + wfText+=Util.toScreen(workflowcount,user.getLanguage())+")"; + + jsonWfTypeChild.put("text",wfText); + jsonWfTypeChild.put("iconCls","btn_dot"); + jsonWfTypeChild.put("cls","wfTreeLeafNode"); + jsonWfTypeChildrenArray.put(jsonWfTypeChild); + } + } + + jsonWfType.put("children",jsonWfTypeChildrenArray); + jsonFinishedWfTypeArray.put(jsonWfType); + } + } + + session.setAttribute("finished",jsonFinishedWfTypeArray); + session.setAttribute("unfinished",jsonUnFinishedWfTypeArray); + session.setAttribute("finishedCount",""+totalcounty); + session.setAttribute("unfinishedCount",""+totalcount); + + response.sendRedirect("/workflow/request/ext/Request.jsp?offical="+offical+"&officalType="+officalType+"&type=myrequest"); //type: view,表待办 handled表已办 + + return; + } + +%> +<%@ include file="/systeminfo/TopTitle_wev8.jsp" %> +<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %> + + + +<% +/* edited by wdl 2006-06-14 left menu advanced menu */ +if(date2during==0) +{ + //显示部分 + RCMenu += "{"+SystemEnv.getHtmlLabelName(89,user.getLanguage())+SystemEnv.getHtmlLabelName(15154,user.getLanguage())+",javascript:changeShowType(),_self}" ; + RCMenuHeight += RCMenuHeightStep ; +} +else +{ + //显示全部 + RCMenu += "{"+SystemEnv.getHtmlLabelName(89,user.getLanguage())+SystemEnv.getHtmlLabelName(332,user.getLanguage())+",javascript:changeShowType(),_self}" ; + RCMenuHeight += RCMenuHeightStep ; +} +if(fromAdvancedMenu!=1){ + + RCMenuWidth = 160; + RCMenu += "{"+SystemEnv.getHtmlLabelName(16342,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=myall&complete=0&viewType=4,_self} " ; + RCMenuHeight += RCMenuHeightStep; + + RCMenu += "{"+SystemEnv.getHtmlLabelName(16343,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=myall&complete=1&viewType=4,_self} " ; + RCMenuHeight += RCMenuHeightStep; + +} +/* edited end */ +%> +<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %> + + + <%@ include file="/systeminfo/leftMenuCommon.jsp" %> + + + + + + + + + + +
+ + + <%=SystemEnv.getHtmlLabelName(21979,user.getLanguage()) %> + + +   + + + +
+
+ +
+
+
+
+
+ + + diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/MyRequestViewAjaxCount.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/MyRequestViewAjaxCount.jsp new file mode 100755 index 0000000..db19f98 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/MyRequestViewAjaxCount.jsp @@ -0,0 +1,557 @@ +<%@page import="weaver.systeminfo.SystemEnv"%> +<%@page import="weaver.hrm.User"%> +<%@page import="weaver.hrm.HrmUserVarify"%> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.conn.*" %> +<%@ page import="java.util.*" %> +<%@page import="org.json.JSONObject"%> +<%@page import="org.json.JSONArray"%> + + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> +<%@ page import="weaver.general.BaseBean" %> + + + + + + +<% +User user = HrmUserVarify.getUser (request , response) ; +if(user==null) { + return; +} +Enumeration em = request.getParameterNames(); +boolean isinit = true; +while(em.hasMoreElements()) +{ + String paramName = (String)em.nextElement(); + if(!paramName.equals("")) + isinit = false; + break; +} +//是否需要加载树 +String offical = Util.null2String(request.getParameter("offical")); +int officalType = Util.getIntValue(request.getParameter("officalType"),-1); +String loadtree = Util.null2String(request.getParameter("loadtree")); +int date2during = Util.getIntValue(request.getParameter("date2during"),0); +String imagefilename = "/images/hdReport_wev8.gif"; +String titlename = SystemEnv.getHtmlLabelName(1210,user.getLanguage()) +":"+SystemEnv.getHtmlLabelName(367,user.getLanguage()); +String needfav ="1"; +String needhelp =""; + +String resourceid=""+user.getUID(); +session.removeAttribute("RequestViewResource"); +String logintype = ""+user.getLogintype(); +int usertype = 0; + +/* edited by wdl 2006-06-14 left menu advanced menu */ +int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"),0); +String selectedContent = Util.null2String(request.getParameter("selectedContent")); +String menuType = Util.null2String(request.getParameter("menuType")); +int infoId = Util.getIntValue(request.getParameter("infoId"),0); +if(selectedContent!=null && selectedContent.startsWith("key_")){ + String menuid = selectedContent.substring(4); + RecordSet.executeSql("select * from menuResourceNode where contentindex = '"+menuid+"'"); + selectedContent = ""; + while(RecordSet.next()){ + String keyVal = RecordSet.getString(2); + selectedContent += keyVal +"|"; + } + if(selectedContent.indexOf("|")!=-1) + selectedContent = selectedContent.substring(0,selectedContent.length()-1); +} +if(fromAdvancedMenu == 1){ + response.sendRedirect("/workflow/search/WFSearchCustom.jsp?offical="+offical+"&officalType="+officalType+"&fromadvancedmenu=1&infoId="+infoId+"&selectedContent="+selectedContent+"&menuType="+menuType); + return; +} +String selectedworkflow = ""; +LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); +LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); +if(info!=null){ + selectedworkflow = info.getSelectedContent(); +} +if(!"".equals(selectedContent)) +{ + selectedworkflow = selectedContent; +} +selectedworkflow+="|"; +/* edited end */ + +if(logintype.equals("2")) + usertype= 1; +char flag = Util.getSeparator(); + +int olddate2during = 0; +BaseBean baseBean = new BaseBean(); +String date2durings = ""; +try +{ + date2durings = Util.null2String(baseBean.getPropValue("wfdateduring", "wfdateduring")); +} +catch(Exception e) +{} +String[] date2duringTokens = Util.TokenizerString2(date2durings,","); +if(date2duringTokens.length>0) +{ + olddate2during = Util.getIntValue(date2duringTokens[0],0); +} +if(olddate2during<0||olddate2during>36) +{ + olddate2during = 0; +} +if(isinit) +{ + date2during = olddate2during; +} + +ArrayList wftypes=new ArrayList(); +ArrayList wftypecounts=new ArrayList(); +ArrayList workflows=new ArrayList(); +ArrayList wftypecountsy=new ArrayList(); +ArrayList workflowcounts=new ArrayList();//未归档的 +ArrayList workflowcountsy=new ArrayList();//归档 +ArrayList newcountslist = new ArrayList();//未读 +ArrayList supedcountslist = new ArrayList();//反馈 +ArrayList overcountslist = new ArrayList();//超时 + +Map workflowcountsMap=new Hashtable();//未归档的数量 +Map workflowcountsyMap=new Hashtable();//归档数量 +Map newcountsMap=new Hashtable(); //未读 +Map supedcountsMap=new Hashtable();//反馈数量 +Map overcountsMap = new Hashtable(); //超时数量 + +String _viewtype = ""; // +int totalcount=0; +int totalcounty=0; +String currworkflowtype=""; + +String currworkflowid=""; +String currentnodetype=""; +String _wftypes = ""; +String demoLeftMenus = ""; + +StringBuffer sqlsb = new StringBuffer(); +sqlsb.append("select count(distinct t1.requestid) typecount, "); +sqlsb.append(" t2.workflowtype, "); +sqlsb.append(" t1.workflowid, "); +sqlsb.append(" t1.currentnodetype "); +sqlsb.append(" from workflow_requestbase t1, workflow_base t2,workflow_currentoperator t3 "); +sqlsb.append(" where t1.creater = ").append(resourceid); +sqlsb.append(" and t1.creatertype = ").append(usertype); +sqlsb.append(" and t1.workflowid = t2.id "); +sqlsb.append(" and t1.requestid = t3.requestid "); +sqlsb.append(" and t3.islasttimes=1 "); +sqlsb.append(" and (t2.isvalid='1' or t2.isvalid='3') "); +if(RecordSet.getDBType().equals("oracle")) +{ + sqlsb.append(" and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "); +} +else +{ + sqlsb.append(" and (isnull(t1.currentstatus,-1) = -1 or (isnull(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "); +} +sqlsb.append(" and exists "); +sqlsb.append(" (select 1 "); +sqlsb.append(" from workflow_currentoperator "); +sqlsb.append(" where workflow_currentoperator.islasttimes='1' "); +sqlsb.append(" and workflow_currentoperator.userid = " + resourceid + WorkflowComInfo.getDateDuringSql(date2during) +") "); +if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and t1.workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and isvalid=1)"); + }else if(officalType==2){ + sqlsb.append(" and t1.workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and isvalid=1)"); + } +} +sqlsb.append("group by t2.workflowtype, t1.workflowid, t1.currentnodetype"); +RecordSet.executeSql(sqlsb.toString()); +//System.out.println("sqlsb.toString():"+sqlsb.toString()); + //RecordSet.executeProc("workflow_requestbase_MyRequest",resourceid+flag+usertype); +while (RecordSet.next()) +{ + currworkflowtype = RecordSet.getString("workflowtype"); + currworkflowid = RecordSet.getString("workflowid"); + + currworkflowid = WorkflowVersion.getActiveVersionWFID(currworkflowid); + + currentnodetype=RecordSet.getString("currentnodetype"); + _viewtype = RecordSet.getString("viewtype"); + int theworkflowcount=RecordSet.getInt("typecount"); + if(selectedworkflow.indexOf("T"+currworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+currworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + int temps=wftypes.indexOf(currworkflowtype); + if (temps!=-1) + { + if (currentnodetype.equals("3")) + wftypecountsy.set(temps,""+(Util.getIntValue((String)wftypecountsy.get(temps),0)+theworkflowcount)); + else + wftypecounts.set(temps,""+(Util.getIntValue((String)wftypecounts.get(temps),0)+theworkflowcount)); + } + else + { + wftypes.add(currworkflowtype); + if (currentnodetype.equals("3")) + { + wftypecountsy.add(""+RecordSet.getString("typecount")); + wftypecounts.add(""+0); + } + else + { + wftypecounts.add(""+RecordSet.getString("typecount")); + wftypecountsy.add(""+0); + } + } + temps=workflows.indexOf(currworkflowid); + if (temps!=-1) + { + if (currentnodetype.equals("3")) + workflowcountsy.set(temps,""+(Util.getIntValue((String)workflowcountsy.get(temps),0)+theworkflowcount)); + else + workflowcounts.set(temps,""+(Util.getIntValue((String)workflowcounts.get(temps),0)+theworkflowcount)); + } + else + { + workflows.add(currworkflowid); + if (currentnodetype.equals("3")) + { + workflowcountsy.add(""+RecordSet.getString("typecount")); + workflowcounts.add(""+0); + } + else + { + workflowcounts.add(""+RecordSet.getString("typecount")); + workflowcountsy.add(""+0); + } + } + + if (currentnodetype.equals("3")) + totalcounty+=theworkflowcount; + else + totalcount+=theworkflowcount; +} + +StringBuffer wftypesb = new StringBuffer(); + StringBuffer wfsb = new StringBuffer(); + StringBuffer wfnodesb = new StringBuffer(); + +for(int x=0;x 0) { + wftypesb = wftypesb.delete(0, 1); + wfsb = wfsb.delete(0, 1); + } + if (wfnodesb.indexOf(",") == 0) { + wfnodesb = wfnodesb.delete(0, 1); + } + + + sqlsb = new StringBuffer(); + sqlsb.append(" select t3.workflowtype, t3.workflowid, count(distinct t1.requestid) viewcount,t3.viewtype,t3.isremark "); + sqlsb.append(" from workflow_requestbase t1, workflow_base t2,workflow_currentoperator t3 "); + sqlsb.append(" where t1.creater = ").append(resourceid); + sqlsb.append(" and t3.userid = ").append(resourceid); + sqlsb.append(" and t1.creatertype = ").append(usertype); + sqlsb.append(" and t1.workflowid = t2.id "); + sqlsb.append(" and t3.workflowtype in ( ").append(wftypesb).append(") "); + sqlsb.append(" and t3.workflowid in (").append(wfsb).append(")"); + sqlsb.append(" and t1.requestid = t3.requestid "); + sqlsb.append(" and t3.islasttimes=1 "); + sqlsb.append(" and (t2.isvalid='1' or t2.isvalid='3') "); + sqlsb.append(" and (t1.deleted=0 or t1.deleted is null) and ((t3.isremark in('2','4') and t1.currentnodetype = '3') or t1.currentnodetype <> '3' ) "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(t1.currentstatus,-1) = -1 or (isnull(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "); + } + sqlsb.append(" and exists "); + sqlsb.append(" (select 1 "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where workflow_currentoperator.islasttimes='1' "); + sqlsb.append(" and workflow_currentoperator.userid = " + resourceid + WorkflowComInfo.getDateDuringSql(date2during) +") "); + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and t1.workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and isvalid=1)"); + }else if(officalType==2){ + sqlsb.append(" and t1.workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and isvalid=1)"); + } + } + sqlsb.append(" group by viewtype,t3.isremark, t3.workflowtype, t3.workflowid"); + RecordSet.execute(sqlsb.toString()); + //System.out.println(sqlsb.toString()); + int _newcount = 0; + int _rescount = 0; + int _outcount = 0; + while(RecordSet.next()) { + + String tworkflowtype = Util.null2String(RecordSet.getString("workflowtype")); + String tworkflowid = WorkflowVersion.getActiveVersionWFID(Util.null2String(RecordSet.getString("workflowid"))); + + + int _vc = Util.getIntValue(RecordSet.getString("viewcount"),0); + + String _im = RecordSet.getString("isremark"); + String _vt = RecordSet.getString("viewtype"); + //System.out.println(WorkflowComInfo.getWorkflowname(_wfid) +" 有"+(_vt.equals("-1")?"反馈":(_vt.equals("0")?"未读":"一般"))+"流程 :"+_vc+" 条"); + int wfindex = workflows.indexOf(tworkflowid) ; + if(wfindex != -1) { + if(_im.equals("5")) { + //_outcount += _vc; + Object tempobj = overcountsMap.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + overcountsMap.put(tworkflowid, wf0countindex + _vc); + } else { + overcountsMap.put(tworkflowid, _vc); + } + }else{ + + if(_vt.equals("-1")) { + + Object tempobj = supedcountsMap.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + supedcountsMap.put(tworkflowid, wf0countindex + _vc); + } else { + supedcountsMap.put(tworkflowid, _vc); + } + + //_rescount += _vc; + + } + if(_vt.equals("0")) { + Object tempobj = newcountsMap.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + newcountsMap.put(tworkflowid, wf0countindex + _vc); + } else { + newcountsMap.put(tworkflowid, _vc); + } + //_newcount += _vc; + } + } + } + } + //newcountslist.add(_newcount+""); + //supedcountslist.add(_rescount+""); + //overcountslist.add(_outcount+""); +//} + +/***************************************/ +//左侧树 json 数据生成逻辑 +demoLeftMenus+="["; +String typeid=""; +String typecount=""; //未归档的type数量 +String typecounty = ""; //已归档的type数量 +String typename=""; +String workflowid=""; +String workflowcount=""; //未归档的数量 +String workflowcounty = ""; //归档的数量 +String wfnewcount = ""; //未读 +String wfrescount = ""; //反馈 +String wfoutcount = ""; //超时 +String workflowname=""; + +for(int i=0;i maps=new ArrayList(0); + int flowAll=0; + int flowNew=0; + int flowResponse=0; + int flowOut=0; + + for(int j=0;j 0) { + demoLeftMenus += ","; + } + + for(int x=0;x0 ){ + //demoLeftMenus+=","; + } + int wfcountall = 0 ; + while(rs.next()){ + String _typeid = rs.getString(1); + if(demoLeftMenus.length()>10){ + demoLeftMenus +=","; + } + wfcountall = rs.getInt(4); + demoLeftMenus += "{"; + demoLeftMenus+=" \"__domid__\":\"__type_"+_typeid+"\","; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowAll\":"+wfcountall+","; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus+= "\"flowOut\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "},"; + + int eas_wf_count = 0 ; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select fid,fname,fworkflowid from "+eas_workflowinfo+" where FCategoryID="+_typeid+" order by fseq')");//查询EAS流程 + eas_wf_count = RecordSet.getCounts(); + while(RecordSet.next()){ + String _wfid = RecordSet.getString(1); + String fworkflowid = Util.null2String(RecordSet.getString("fworkflowid")); + rs1.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FCreatorNumber=''"+loginid+"'' AND FWorkFlowID=''"+fworkflowid+"'' ') "); + int wfcount = 0; + if(rs1.next()){ + wfcount = Util.getIntValue(rs1.getString(1),0); + } + //if(wfcount>0){ + demoLeftMenus += "{"; + //demoLeftMenus += "\"name\":\""+_wfname+"\","; + demoLeftMenus+="\"__domid__\":\"__wf_"+_wfid+"\","; + //demoLeftMenus += "\"hasChildren\":false,"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowAll\":"+wfcount+","; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus+= "\"flowOut\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + demoLeftMenus += ","; + //} + } + if(demoLeftMenus.endsWith(",")){ + demoLeftMenus = demoLeftMenus.substring(0,demoLeftMenus.length()-1); + } + //demoLeftMenus += ","; + + } +demoLeftMenus += "]"; + +out.print(demoLeftMenus); + +%> + + diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/RequestHandled.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/RequestHandled.jsp new file mode 100755 index 0000000..cd0887c --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/RequestHandled.jsp @@ -0,0 +1,701 @@ +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.conn.*" %> +<%@ page import="java.util.*" %> +<%@page import="org.json.JSONObject"%> +<%@page import="org.json.JSONArray"%> + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> + +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> + + + + + + + + + + + +<% + Enumeration em = request.getParameterNames(); + boolean isinit = true; + while(em.hasMoreElements()) + { + String paramName = (String)em.nextElement(); + if(!paramName.equals("")) + isinit = false; + break; + } + String loadtree = Util.null2String(request.getParameter("loadtree")); + int date2during = Util.getIntValue(request.getParameter("date2during"),0); + String resourceid= Util.null2String(request.getParameter("resourceid")); + String logintype = ""+user.getLogintype(); + int usertype = 0; + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"),0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + String menuType = Util.null2String(request.getParameter("menuType")); + int infoId = Util.getIntValue(request.getParameter("infoId"),0); + if(selectedContent!=null && selectedContent.startsWith("key_")){ + String menuid = selectedContent.substring(4); + RecordSet.executeSql("select * from menuResourceNode where contentindex = '"+menuid+"'"); + selectedContent = ""; + while(RecordSet.next()){ + String keyVal = RecordSet.getString(2); + selectedContent += keyVal +"|"; + } + if(selectedContent.indexOf("|")!=-1) + selectedContent = selectedContent.substring(0,selectedContent.length()-1); + } + if(fromAdvancedMenu == 1){ + response.sendRedirect("/workflow/search/WFSearchCustom.jsp?offical="+offical+"&officalType="+officalType+"&fromadvancedmenu=1&infoId="+infoId+"&selectedContent="+selectedContent+"&menuType="+menuType); + return; + } + String selectedworkflow = ""; + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if(info!=null){ + selectedworkflow = info.getSelectedContent(); + } + if(!"".equals(selectedContent)) + { + selectedworkflow = selectedContent; + } + selectedworkflow+="|"; + /* edited end */ + + if(resourceid.equals("")) { + resourceid = ""+user.getUID(); + if(logintype.equals("2")) usertype= 1; + session.removeAttribute("RequestViewResource") ; + } + else { + session.setAttribute("RequestViewResource",resourceid) ; + } + + char flag = Util.getSeparator(); + + String username = Util.toScreen(ResourceComInfo.getResourcename(resourceid),user.getLanguage()); + + if(logintype.equals("2")) username = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(""+user.getUID()),user.getLanguage()) ; + + String imagefilename = "/images/hdReport_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(17991,user.getLanguage()) + ": "+SystemEnv.getHtmlLabelName(367,user.getLanguage()); + String needfav ="1"; + String needhelp =""; + + int olddate2during = 0; + BaseBean baseBean = new BaseBean(); + String date2durings = ""; + try + { + date2durings = Util.null2String(baseBean.getPropValue("wfdateduring", "wfdateduring")); + } + catch(Exception e) + {} + String[] date2duringTokens = Util.TokenizerString2(date2durings,","); + if(date2duringTokens.length>0) + { + olddate2during = Util.getIntValue(date2duringTokens[0],0); + } + if(olddate2during<0||olddate2during>36) + { + olddate2during = 0; + } + if(isinit) + { + date2during = olddate2during; + } +%> + + + + + + + + + + + +<% + String typeid=""; + String typecount=""; + String typename=""; + String workflowid=""; + String workflowcount=""; + String newremarkwfcount0=""; + String newremarkwfcount=""; + String workflowname=""; + + ArrayList wftypes=new ArrayList(); + ArrayList wftypecounts=new ArrayList(); + ArrayList workflows=new ArrayList(); + ArrayList workflowcounts=new ArrayList();//反馈 + ArrayList newremarkwfcount0s=new ArrayList();//未读 + ArrayList newremarkwfcounts=new ArrayList(); + int totalcount=0; + String _wftypes = ""; + String demoLeftMenus = ""; + if(loadtree.equals("true")){ + StringBuffer sqlsb = new StringBuffer(); + sqlsb.append("select workflowtype, "); + sqlsb.append(" workflowid, "); + sqlsb.append(" viewtype, "); + sqlsb.append(" count(distinct requestid) workflowcount "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where (isremark in('2','4') or (isremark=0 and takisremark =-2)) "); + sqlsb.append(" and islasttimes = 1 "); + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype).append(WorkflowComInfo.getDateDuringSql(date2during)); + sqlsb.append(" and exists "); + sqlsb.append(" (select 1 "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.workflowid = workflow_currentoperator.workflowid "); + sqlsb.append(" and c.requestid = workflow_currentoperator.requestid "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(")"); + if(offical.equals("1")){ + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + sqlsb.append(" group by workflowtype, workflowid, viewtype "); + sqlsb.append(" order by workflowtype, workflowid"); + //RecordSet.executeSql("select workflowtype, workflowid, viewtype, count(distinct requestid) workflowcount from workflow_currentoperator where isremark='2' and iscomplete=0 and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" group by workflowtype, workflowid, viewtype order by workflowtype, workflowid " ) ; + RecordSet.executeSql(sqlsb.toString()) ; + + while(RecordSet.next()){ + String theworkflowid = Util.null2String(RecordSet.getString("workflowid")) ; + String theworkflowtype = Util.null2String(RecordSet.getString("workflowtype")) ; + int theworkflowcount = Util.getIntValue(RecordSet.getString("workflowcount"),0) ; + int viewtype = Util.getIntValue(RecordSet.getString("viewtype"),-2) ; + + theworkflowid = WorkflowVersion.getActiveVersionWFID(theworkflowid); + + if(WorkflowComInfo.getIsValid(theworkflowid).equals("1")){ + /* added by wdl 2006-06-14 left menu advanced menu */ + if(selectedworkflow.indexOf("T"+theworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+theworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + /* added end */ + + int wfindex = workflows.indexOf(theworkflowid) ; + if(wfindex != -1) { + workflowcounts.set(wfindex,""+(Util.getIntValue((String)workflowcounts.get(wfindex),0)+theworkflowcount)) ; + if(viewtype==-1){ + newremarkwfcounts.set(wfindex,""+(Util.getIntValue((String)newremarkwfcounts.get(wfindex),0)+theworkflowcount)) ; + } + + }else{ + workflows.add(theworkflowid) ; + workflowcounts.add(""+theworkflowcount) ; + if(viewtype==-1){ + newremarkwfcounts.add(""+theworkflowcount); + newremarkwfcount0s.add(""+0); + }else{ + newremarkwfcounts.add(""+0); + newremarkwfcount0s.add(""+0); + } + } + + int wftindex = wftypes.indexOf(theworkflowtype) ; + if(wftindex != -1) { + wftypecounts.set(wftindex,""+(Util.getIntValue((String)wftypecounts.get(wftindex),0)+theworkflowcount)) ; + } + else { + wftypes.add(theworkflowtype) ; + wftypecounts.add(""+theworkflowcount) ; + } + + totalcount += theworkflowcount; + } + } + + //左侧树拼接 json + + demoLeftMenus="["; + for(int i=0;i maps=new ArrayList(0); + for(int j=0;j0 ){ + //demoLeftMenus+=","; + } + while(rs.next()){ + String _typeid = rs.getString(1); + String _typename = rs.getString(2); + if(demoLeftMenus.length()>10){ + demoLeftMenus +=",{"; + }else{ + demoLeftMenus +="{"; + } + System.out.println("_typeid = "+_typeid+" _typename="+_typename); + demoLeftMenus += "\"name\":\""+_typename+"\","; + demoLeftMenus+="\"__domid__\":\"__type_"+_typeid+"\","; + demoLeftMenus += "\"hasChildren\":"+true+","; + demoLeftMenus += "\"isOpen\":"+true+","; + demoLeftMenus+="\"attr\":{"; + demoLeftMenus+="\"typeid\":"+_typeid+","; + demoLeftMenus+="\"fromAdvancedMenu\":"+fromAdvancedMenu+","; + demoLeftMenus+="\"infoId\":\""+infoId+"\","; + demoLeftMenus+="\"selectedContent\":\""+selectedContent+"\","; + demoLeftMenus+="\"menuType\":\""+menuType+"\","; + demoLeftMenus+="\"date2during\":\""+date2during+"\""; + demoLeftMenus+="},"; + demoLeftMenus += "\"submenus\":["; + int eas_wf_count = 0 ; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select fid,fname,fworkflowid from "+eas_workflowinfo+" where FCategoryID="+_typeid+" order by fseq')");//查询EAS流程 + eas_wf_count = RecordSet.getCounts(); + int wfcountall = 0 ; + while(RecordSet.next()){ + String _wfid = RecordSet.getString(1); + String _wfname = RecordSet.getString(2); + String fworkflowid = Util.null2String(RecordSet.getString("fworkflowid")); + rs1.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FPersonUserNumber=''"+loginid+"'' AND FWorkFlowID=''"+fworkflowid+"'' and FState=''16''')"); + int wfcount = 0; + if(rs1.next()){ + wfcount = Util.getIntValue(rs1.getString(1),0); + } + //if(wfcount>0){ + wfcountall += wfcount ; + demoLeftMenus += "{"; + demoLeftMenus += "\"name\":\""+_wfname+"\","; + demoLeftMenus+="\"__domid__\":\"__wf_"+_wfid+"\","; + demoLeftMenus+="\"hasChildren\":false,"; + demoLeftMenus+="\"attr\":{"; + demoLeftMenus+="\"workflowid\":"+_wfid+","; + demoLeftMenus+="\"date2during\":\""+date2during+"\""; + demoLeftMenus+="},"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcount+""; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + demoLeftMenus += ","; + //} + } + if(demoLeftMenus.endsWith(",")){ + demoLeftMenus = demoLeftMenus.substring(0,demoLeftMenus.length()-1); + } + demoLeftMenus += "],"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcountall+""; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + } + + demoLeftMenus += "]"; + out.clear(); + out.print(demoLeftMenus); + //System.out.println(demoLeftMenus); + return; + } + + boolean isUseOldWfMode=sysInfo.isUseOldWfMode(); + if(!isUseOldWfMode){ + int typerowcounts=wftypes.size(); + //typerowcounts=(wftypes.size()+1)/2; + JSONArray jsonWfTypeArray = new JSONArray(); + for(int i=0;i"+workflowname+"  ("; + + if(!newremarkwfcount0.equals("0")){ + String paras = "method=reqeustbywfid&workflowid="+workflowid+"&complete=50"; + wfText+=""+Util.toScreen(newremarkwfcount0,user.getLanguage())+"  / "; + newwfCount0 =newwfCount0 +Util.getIntValue(newremarkwfcount0); + } + + if(!newremarkwfcount.equals("0")){ + String paras = "method=reqeustbywfid&workflowid="+workflowid+"&complete=5"; + wfText+=""+Util.toScreen(newremarkwfcount,user.getLanguage())+"  / "; + newwfCount =newwfCount +Util.getIntValue(newremarkwfcount); + } + + wfText+=Util.toScreen(workflowcount,user.getLanguage())+")"; + + jsonWfTypeChild.put("text",wfText); + jsonWfTypeChildrenArray.put(jsonWfTypeChild); + + } + String wfText =""; + + if(newwfCount0>0){ + wfText+=newwfCount0+"  / "; + } + + if(newwfCount>0){ + wfText+=newwfCount+"  / "; + } + jsonWfType.put("text",""+typename+" ("+wfText+typecount+")"); + + jsonWfType.put("children",jsonWfTypeChildrenArray); + jsonWfTypeArray.put(jsonWfType); + } + + session.setAttribute("handled",jsonWfTypeArray); + + response.sendRedirect("/workflow/request/ext/Request.jsp?type=handled"); //type: view,表待办 handled表已办 + + + return; + } + //共项 + titlename+="  ("+SystemEnv.getHtmlLabelName(18609,user.getLanguage())+""+totalcount+""+SystemEnv.getHtmlLabelName(26302,user.getLanguage())+")"; + if(date2during>0) + { + //最近个月 + + titlename+="("+SystemEnv.getHtmlLabelName(24515,user.getLanguage())+""+date2during+""+SystemEnv.getHtmlLabelName(26301,user.getLanguage())+")"; + } +%> +<%@ include file="/systeminfo/leftMenuCommon.jsp" %> + + +<%@ include file="/systeminfo/TopTitle_wev8.jsp" %> + +
+
+ <%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %> + <% + if(date2during==0) + { + //显示部分 + RCMenu += "{"+SystemEnv.getHtmlLabelName(89,user.getLanguage())+SystemEnv.getHtmlLabelName(15154,user.getLanguage())+",javascript:changeShowType(),_self}" ; + RCMenuHeight += RCMenuHeightStep ; + } + else + { + //显示全部 + RCMenu += "{"+SystemEnv.getHtmlLabelName(89,user.getLanguage())+SystemEnv.getHtmlLabelName(332,user.getLanguage())+",javascript:changeShowType(),_self}" ; + RCMenuHeight += RCMenuHeightStep ; + } + /* edited by wdl 2006-06-14 left menu advanced menu */ + if(fromAdvancedMenu!=1){ + RCMenuWidth = 160; + RCMenu += "{"+SystemEnv.getHtmlLabelName(16347,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=all&complete=0&viewType=1,_self}" ; + RCMenuHeight += RCMenuHeightStep ; + RCMenu += "{"+SystemEnv.getHtmlLabelName(20271,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=all&complete=2&viewType=2,_self}" ; + RCMenuHeight += RCMenuHeightStep ; + RCMenu += "{"+SystemEnv.getHtmlLabelName(16348,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=all&complete=1&viewType=3,_self}" ; + RCMenuHeight += RCMenuHeightStep ; + } + /* edited end */ + %> + <%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %> +
+
+ + + + + + + + + + +
+ + + <%=SystemEnv.getHtmlLabelName(21979,user.getLanguage()) %> + + +   + + + +
+
+ +
+
+
+
+
+ + diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/RequestHandledAjaxCount.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/RequestHandledAjaxCount.jsp new file mode 100755 index 0000000..5efe284 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/RequestHandledAjaxCount.jsp @@ -0,0 +1,428 @@ +<%@page import="weaver.systeminfo.SystemEnv"%> +<%@page import="weaver.hrm.User"%> +<%@page import="weaver.hrm.HrmUserVarify"%> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.conn.*" %> +<%@ page import="java.util.*" %> +<%@page import="org.json.JSONObject"%> +<%@page import="org.json.JSONArray"%> + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> +<%@ page import="weaver.general.BaseBean" %> + + + + + + + +<% + +/*用户验证*/ +User user = HrmUserVarify.getUser (request , response) ; +if(user==null) { + return; +} + Enumeration em = request.getParameterNames(); + boolean isinit = true; + while(em.hasMoreElements()) + { + String paramName = (String)em.nextElement(); + if(!paramName.equals("")) + isinit = false; + break; + } + String loadtree = Util.null2String(request.getParameter("loadtree")); + int date2during = Util.getIntValue(request.getParameter("date2during"),0); + String resourceid= Util.null2String(request.getParameter("resourceid")); + String logintype = ""+user.getLogintype(); + int usertype = 0; + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"),0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + String menuType = Util.null2String(request.getParameter("menuType")); + int infoId = Util.getIntValue(request.getParameter("infoId"),0); + if(selectedContent!=null && selectedContent.startsWith("key_")){ + String menuid = selectedContent.substring(4); + RecordSet.executeSql("select * from menuResourceNode where contentindex = '"+menuid+"'"); + selectedContent = ""; + while(RecordSet.next()){ + String keyVal = RecordSet.getString(2); + selectedContent += keyVal +"|"; + } + if(selectedContent.indexOf("|")!=-1) + selectedContent = selectedContent.substring(0,selectedContent.length()-1); + } + if(fromAdvancedMenu == 1){ + response.sendRedirect("/workflow/search/WFSearchCustom.jsp?offical="+offical+"&officalType="+officalType+"&fromadvancedmenu=1&infoId="+infoId+"&selectedContent="+selectedContent+"&menuType="+menuType); + return; + } + String selectedworkflow = ""; + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if(info!=null){ + selectedworkflow = info.getSelectedContent(); + } + if(!"".equals(selectedContent)) + { + selectedworkflow = selectedContent; + } + selectedworkflow+="|"; + /* edited end */ + + if(resourceid.equals("")) { + resourceid = ""+user.getUID(); + if(logintype.equals("2")) usertype= 1; + session.removeAttribute("RequestViewResource") ; + } + else { + session.setAttribute("RequestViewResource",resourceid) ; + } + + char flag = Util.getSeparator(); + + String username = Util.toScreen(ResourceComInfo.getResourcename(resourceid),user.getLanguage()); + + if(logintype.equals("2")) username = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(""+user.getUID()),user.getLanguage()) ; + + String imagefilename = "/images/hdReport_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(17991,user.getLanguage()) + ": "+SystemEnv.getHtmlLabelName(367,user.getLanguage()); + String needfav ="1"; + String needhelp =""; + + int olddate2during = 0; + BaseBean baseBean = new BaseBean(); + String date2durings = ""; + try + { + date2durings = Util.null2String(baseBean.getPropValue("wfdateduring", "wfdateduring")); + } + catch(Exception e) + {} + String[] date2duringTokens = Util.TokenizerString2(date2durings,","); + if(date2duringTokens.length>0) + { + olddate2during = Util.getIntValue(date2duringTokens[0],0); + } + if(olddate2during<0||olddate2during>36) + { + olddate2during = 0; + } + if(isinit) + { + date2during = olddate2during; + } +%> + +<% + String typeid=""; + String typecount=""; + String typename=""; + String workflowid=""; + String workflowcount=""; + String newremarkwfcount0=""; + String newremarkwfcount=""; + String workflowname=""; + + ArrayList wftypes=new ArrayList(); + ArrayList wftypecounts=new ArrayList(); + ArrayList workflows=new ArrayList(); + ArrayList workflowcounts=new ArrayList();//反馈 + ArrayList newremarkwfcount0s=new ArrayList();//未读 + ArrayList newremarkwfcounts=new ArrayList(); + int totalcount=0; + String _wftypes = ""; + String demoLeftMenus = ""; + + StringBuffer sqlsb = new StringBuffer(); + sqlsb.append("select workflowtype, "); + sqlsb.append(" workflowid, "); + sqlsb.append(" viewtype, "); + sqlsb.append(" count(distinct requestid) workflowcount "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where (isremark in('2','4') or (isremark=0 and takisremark =-2)) "); + sqlsb.append(" and islasttimes = 1 "); + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype).append(WorkflowComInfo.getDateDuringSql(date2during)); + sqlsb.append(" and exists "); + sqlsb.append(" (select 1 "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.workflowid = workflow_currentoperator.workflowid "); + sqlsb.append(" and c.requestid = workflow_currentoperator.requestid "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(")"); + if(offical.equals("1")){ + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + sqlsb.append(" group by workflowtype, workflowid, viewtype "); + sqlsb.append(" order by workflowtype, workflowid"); + //RecordSet.executeSql("select workflowtype, workflowid, viewtype, count(distinct requestid) workflowcount from workflow_currentoperator where isremark='2' and iscomplete=0 and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" group by workflowtype, workflowid, viewtype order by workflowtype, workflowid " ) ; + RecordSet.executeSql(sqlsb.toString()) ; + //System.out.println(sqlsb.toString()); + while(RecordSet.next()){ + String theworkflowid = Util.null2String(RecordSet.getString("workflowid")) ; + String theworkflowtype = Util.null2String(RecordSet.getString("workflowtype")) ; + int theworkflowcount = Util.getIntValue(RecordSet.getString("workflowcount"),0) ; + int viewtype = Util.getIntValue(RecordSet.getString("viewtype"),-2) ; + + theworkflowid = WorkflowVersion.getActiveVersionWFID(theworkflowid); + + if(WorkflowComInfo.getIsValid(theworkflowid).equals("1")){ + /* added by wdl 2006-06-14 left menu advanced menu */ + if(selectedworkflow.indexOf("T"+theworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+theworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + /* added end */ + + int wfindex = workflows.indexOf(theworkflowid) ; + if(wfindex != -1) { + workflowcounts.set(wfindex,""+(Util.getIntValue((String)workflowcounts.get(wfindex),0)+theworkflowcount)) ; + if(viewtype==-1){ + newremarkwfcounts.set(wfindex,""+(Util.getIntValue((String)newremarkwfcounts.get(wfindex),0)+theworkflowcount)) ; + } + + }else{ + workflows.add(theworkflowid) ; + workflowcounts.add(""+theworkflowcount) ; + if(viewtype==-1){ + newremarkwfcounts.add(""+theworkflowcount); + newremarkwfcount0s.add(""+0); + }else{ + newremarkwfcounts.add(""+0); + newremarkwfcount0s.add(""+0); + } + } + + int wftindex = wftypes.indexOf(theworkflowtype) ; + if(wftindex != -1) { + wftypecounts.set(wftindex,""+(Util.getIntValue((String)wftypecounts.get(wftindex),0)+theworkflowcount)) ; + } + else { + wftypes.add(theworkflowtype) ; + wftypecounts.add(""+theworkflowcount) ; + } + + totalcount += theworkflowcount; + } + } + sqlsb = new StringBuffer(); + sqlsb.append("select workflowtype, "); + sqlsb.append(" workflowid, "); + sqlsb.append(" viewtype, "); + sqlsb.append(" count(distinct requestid) workflowcount "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where (isremark in('2','4') or (isremark=0 and takisremark =-2)) "); + //sqlsb.append(" and iscomplete = 0 "); + sqlsb.append(" and islasttimes = 1 "); + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype); + sqlsb.append(" and viewtype = 0 "); + sqlsb.append(" and (agentType <> '1' or agentType is null) ").append(WorkflowComInfo.getDateDuringSql(date2during)); + sqlsb.append(" and exists (select 1 "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.workflowid = workflow_currentoperator.workflowid "); + sqlsb.append(" and c.requestid = workflow_currentoperator.requestid "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(")"); + if(offical.equals("1")){ + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and isvalid=1)"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and isvalid=1)"); + } + } + sqlsb.append(" group by workflowtype, workflowid, viewtype "); + sqlsb.append(" order by workflowtype, workflowid"); + //System.out.println("sqlsb====>:"+sqlsb.toString()); + + //已办/办结事宜,红色new标记 + //RecordSet.executeSql("select workflowtype, workflowid, viewtype, count(distinct requestid) workflowcount from workflow_currentoperator where isremark='2' and iscomplete=0 and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and viewtype=0 and (agentType<>'1' or agentType is null) group by workflowtype, workflowid, viewtype order by workflowtype, workflowid " ) ; + RecordSet.executeSql(sqlsb.toString()) ; + while(RecordSet.next()){ + String theworkflowid = Util.null2String(RecordSet.getString("workflowid")) ; + String theworkflowtype = Util.null2String(RecordSet.getString("workflowtype")) ; + int theworkflowcount = Util.getIntValue(RecordSet.getString("workflowcount"),0) ; + int viewtype = Util.getIntValue(RecordSet.getString("viewtype"),-2) ; + + if(WorkflowComInfo.getIsValid(theworkflowid).equals("1")){ + + /* added by wdl 2006-06-14 left menu advanced menu */ + if(selectedworkflow.indexOf("T"+theworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+theworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + /* added end */ + + int wfindex = workflows.indexOf(theworkflowid) ; + if(wfindex != -1) { + newremarkwfcount0s.set(wfindex,""+(Util.getIntValue((String)newremarkwfcount0s.get(wfindex),0)+theworkflowcount)) ; + } + } + } + + /*******************************/ + demoLeftMenus="["; + for(int i=0;i maps=new ArrayList(0); + + int flowNew=0; + int flowResponse=0; + int flowAll=0; + + for(int j=0;j 0) { + demoLeftMenus += ","; + } + + for(int x=0;x0 ){ + //demoLeftMenus+=","; + } + int wfcountall = 0 ; + while(rs.next()){ + String _typeid = rs.getString(1); + if(demoLeftMenus.length()>10){ + demoLeftMenus +=","; + } + wfcountall = rs.getInt(4); + demoLeftMenus += "{"; + demoLeftMenus+=" \"__domid__\":\"__type_"+_typeid+"\","; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcountall+""; + demoLeftMenus += "}"; + demoLeftMenus += "},"; + + int eas_wf_count = 0 ; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select fid,fname,fworkflowid from "+eas_workflowinfo+" where FCategoryID="+_typeid+" order by fseq')");//查询EAS流程 + eas_wf_count = RecordSet.getCounts(); + while(RecordSet.next()){ + String _wfid = RecordSet.getString(1); + String fworkflowid = Util.null2String(RecordSet.getString("fworkflowid")); + rs1.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FPersonUserNumber=''"+loginid+"'' AND FWorkFlowID=''"+fworkflowid+"'' and FState=''16'' ') "); + int wfcount = 0; + if(rs1.next()){ + wfcount = Util.getIntValue(rs1.getString(1),0); + } + //if(wfcount>0){ + demoLeftMenus += "{"; + //demoLeftMenus += "\"name\":\""+_wfname+"\","; + demoLeftMenus+="\"__domid__\":\"__wf_"+_wfid+"\","; + //demoLeftMenus += "\"hasChildren\":false,"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcount+""; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + demoLeftMenus += ","; + //} + } + if(demoLeftMenus.endsWith(",")){ + demoLeftMenus = demoLeftMenus.substring(0,demoLeftMenus.length()-1); + } + //demoLeftMenus += ","; + + } + + demoLeftMenus += "]"; + //out.clear(); + out.print(demoLeftMenus); + //System.out.print(demoLeftMenus); + + /*******************************/ + +%> + + diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/RequestListOperation.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/RequestListOperation.jsp new file mode 100755 index 0000000..43a3767 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/RequestListOperation.jsp @@ -0,0 +1,751 @@ +<%@ page import="weaver.general.Util,java.net.*,weaver.workflow.field.FieldComInfo"%> +<%@ page import="java.util.*" %> +<%@ page import="weaver.WorkPlan.WorkPlanLogMan" %> +<%@ page import="weaver.workflow.request.RequestManager" %> +<%@page import="weaver.hrm.HrmUserVarify"%> +<%@page import="weaver.hrm.User"%> +<%@page import="weaver.systeminfo.SystemEnv"%> +<%@page import="weaver.general.GCONST"%> + + + + + + + + + + + + + + + + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + +<% + +/*用户验证*/ +User user = HrmUserVarify.getUser (request , response) ; +if(user==null) { + response.sendRedirect("/login/Login.jsp"); + return; +} +// 操作的用户信息 + +int userid=user.getUID(); //当前用户id +int usertype = 0; //用户在工作流表中的类型 0: 内部 1: 外部 +String logintype = user.getLogintype(); //当前用户类型 1: 类别用户 2:外部用户 +String username = ""; + +if(logintype.equals("1")) + username = Util.toScreen(ResourceComInfo.getResourcename(""+userid),user.getLanguage()) ; +if(logintype.equals("2")) + username = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(""+userid),user.getLanguage()); + +String dateSql = ""; +if(rs.getDBType().equalsIgnoreCase("oracle")){ + dateSql = "select to_char(sysdate,'yyyy-mm-dd') as currentdate, to_char(sysdate,'hh24:mi:ss') as currenttime from dual"; +}else{ + dateSql = "select convert(char(10),getdate(),20) as currentdate, convert(char(8),getdate(),108) as currenttime"; +} +String currentdate = ""; +String currenttime = ""; +rs.execute(dateSql); +if(rs.next()){ + currentdate = Util.null2String(rs.getString(1)); + currenttime = Util.null2String(rs.getString(2)); +}else{ + Calendar today = Calendar.getInstance(); + currentdate = Util.add0(today.get(Calendar.YEAR), 4) + "-" + + Util.add0(today.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(today.get(Calendar.DAY_OF_MONTH), 2) ; + + currenttime = Util.add0(today.get(Calendar.HOUR_OF_DAY), 2) + ":" + + Util.add0(today.get(Calendar.MINUTE), 2) + ":" + + Util.add0(today.get(Calendar.SECOND), 2) ; +} + +String src = "submit"; +String iscreate = "0"; +int isremark = 0; +//添加支持批注内容从前台传递 + +String remark = Util.null2String(request.getParameter("remark")); +if(remark.equals("")) remark = "\n"+username+" "+currentdate+" "+currenttime; +String workflowtype = ""; +int formid = -1; +int isbill = -1; +int billid = -1; +String messageType = ""; +int nodeid = -1; +String nodetype = ""; +String requestname = ""; +String requestlevel = ""; + +//modify by xhheng @20050524 for TD 2023 +String requestidlist=Util.null2String(request.getParameter("multiSubIds")); +String easrequestidlist = Util.null2String(request.getParameter("EASmultiSubIds")); + +String wfid = Util.null2String(request.getParameter("workflowid")); +String wftypes = ""; + +String method = Util.null2String(request.getParameter("method")); +String wftype=Util.null2String(request.getParameter("wftype")); +int flowAll=Util.getIntValue(Util.null2String(request.getParameter("flowAll")), 0); +int flowNew=Util.getIntValue(Util.null2String(request.getParameter("flowNew")), 0); +String viewcondition = Util.null2String(request.getParameter("viewcondition")); +////System.out.println("RequestListOperation.jsp:===>>>>requestidlist:"+requestidlist); +String [] requestids=Util.TokenizerString2(requestidlist,","); + +for (int i=0; iinitFlashVideo\\(\\)\\;\\<\\/script\\>", "", 0, false).equals(""))||!isnullnotfeedback.equals("1"))){ + RecordSet.executeSql("update workflow_currentoperator set viewtype =-1 where needwfback='1' and requestid=" + requestid + " and userid<>" + userid + " and viewtype=-2"); + + } + String curnodetype = ""; + RecordSet.executeSql("select currentnodetype from workflow_Requestbase where requestid="+requestid); + if(RecordSet.next()) curnodetype = Util.null2String(RecordSet.getString(1)); + if(curnodetype.equals("3"))//归档流程转发后,转发人或抄送人提交后到办结事宜。 + + RecordSet.executeSql("update workflow_currentoperator set iscomplete=1 where userid="+userid+" and usertype="+usertype+" and requestid="+requestid); + + //Requestlog.setRequest(fu) ; + Requestlog.saveLog(workflowid,requestid,nodeid,"9",remark,user) ; + continue; + } + + int requestKey = 0; + RecordSet.executeSql("select id from workflow_currentoperator where requestid="+requestid+" and nodeid='"+nodeid+"' and userid="+userid+" and usertype="+usertype+" order by isremark,id"); + if(RecordSet.next()){ + requestKey = RecordSet.getInt("id"); + } + //System.out.println("6:流程" + i + "时间:" + (new Date().getTime() - d1.getTime())); + RequestManager.setSrc(src) ; + RequestManager.setIscreate(iscreate) ; + RequestManager.setRequestid(requestid) ; + RequestManager.setWorkflowid(workflowid) ; + RequestManager.setWorkflowtype(workflowtype) ; + RequestManager.setIsremark(isremark) ; + RequestManager.setFormid(formid) ; + RequestManager.setIsbill(isbill) ; + RequestManager.setBillid(billid) ; + RequestManager.setNodeid(nodeid) ; + RequestManager.setNodetype(nodetype) ; + RequestManager.setRequestname(requestname) ; + RequestManager.setRequestlevel(requestlevel) ; + RequestManager.setRemark(remark) ; + RequestManager.setRequest(request) ; + RequestManager.setMessageType(messageType) ; + RequestManager.setUser(user) ; + RequestManager.setRequestKey(requestKey); + + /**Start 批量提交时也必须做节点附加操作 by alan on 2009-04-23**/ + if(!src.equals("save")){ + try { + //由于objtype为"1: 节点自动赋值",不为"0 :出口自动赋值",不用改变除状态外的文档相关信息,故可不用给user、clienIp、src赋值 fanggsh TD5121 + weaver.workflow.request.RequestCheckAddinRules requestCheckAddinRules = new weaver.workflow.request.RequestCheckAddinRules(); + requestCheckAddinRules.resetParameter(); + //add by cyril on 2008-07-28 for td:8835 事务无法开启查询,只能传入 + requestCheckAddinRules.setTrack(isTrack); + requestCheckAddinRules.setStart(isStart); + requestCheckAddinRules.setNodeid(nodeid); + //end by cyril on 2008-07-28 for td:8835 + requestCheckAddinRules.setRequestid(requestid); + requestCheckAddinRules.setWorkflowid(workflowid); + requestCheckAddinRules.setObjid(nodeid); + requestCheckAddinRules.setObjtype(1); // 1: 节点自动赋值 0 :出口自动赋值 + + requestCheckAddinRules.setIsbill(isbill); + requestCheckAddinRules.setFormid(formid); + requestCheckAddinRules.setIspreadd("0");//xwj for td3130 20051123 + requestCheckAddinRules.setRequestManager(RequestManager); + requestCheckAddinRules.setUser(user); + requestCheckAddinRules.checkAddinRules(); + } catch (Exception e) { + response.sendRedirect("/notice/RequestError.jsp"); + return ; + } + } + //System.out.println("7:流程" + i + "时间:" + (new Date().getTime() - d1.getTime())); + /**End 批量提交时也必须做节点附加操作 by alan on 2009-04-23**/ + //TD10974 处理流程批量提交的时候,文档、客户、资产、项目无法附权下一节点操作者的问题 Start + int docRightByOperator=0; + rs.execute("select docRightByOperator from workflow_base where id="+workflowid); + if(rs.next()){ + docRightByOperator=Util.getIntValue(rs.getString("docRightByOperator"),0); + } + String maintable = "workflow_form"; + if (isbill == 1) { + rs.execute("select tablename from workflow_bill where id = " + formid); + if(rs.next()){ + maintable = Util.null2String(rs.getString("tablename")); + } + rs.executeProc("workflow_billfield_Select", formid + ""); + } else { + rs.executeSql("select t2.fieldid,t2.fieldorder,t2.isdetail,t1.fieldlable,t1.langurageid from workflow_fieldlable t1,workflow_formfield t2 where t1.formid=t2.formid and t1.fieldid=t2.fieldid and (t2.isdetail<>'1' or t2.isdetail is null) and t2.formid="+formid+" and t1.langurageid="+user.getLanguage()+" order by t2.fieldorder"); + } + //System.out.println("8:流程" + i + "时间:" + (new Date().getTime() - d1.getTime())); + ArrayList fieldidList = new ArrayList(); + ArrayList fieldnameList = new ArrayList(); + ArrayList fielddbtypeList = new ArrayList(); + ArrayList fieldhtmltypeList = new ArrayList(); + ArrayList fieldtypeList = new ArrayList(); + String fieldnames = ""; + String fieldid = ""; + String fieldname = ""; + String fielddbtype = ""; + String fieldhtmltype = ""; + String fieldtype = ""; + FieldComInfo fieldComInfo = new FieldComInfo(); + String hrmids = ""; + String crmids = ""; + String prjids = ""; + String docids = ""; + String cptids = ""; + boolean hasmanager=false; + char separarorFlag = Util.getSeparator(); + while (rs.next()) { + if (isbill == 1) { + String viewtype = Util.null2String(rs.getString("viewtype")); // 如果是单据的从表字段,不进行操作 + + if (viewtype.equals("1")) continue; + fieldid = Util.null2String(rs.getString("id")); + fieldname = Util.null2String(rs.getString("fieldname")); + fielddbtype = Util.null2String(rs.getString("fielddbtype")); + fieldhtmltype = Util.null2String(rs.getString("fieldhtmltype")); + fieldtype = Util.null2String(rs.getString("type")); + } else { + fieldid = Util.null2String(rs.getString(1)); + fieldname = Util.null2String(fieldComInfo.getFieldname(fieldid)); + fielddbtype = Util.null2String(fieldComInfo.getFielddbtype(fieldid)); + fieldhtmltype = Util.null2String(fieldComInfo.getFieldhtmltype(fieldid)); + fieldtype = Util.null2String(fieldComInfo.getFieldType(fieldid)); + } + if(fieldname.toLowerCase().equals("manager")){ + hasmanager=true; + } + fieldidList.add(fieldid); + fieldnameList.add(fieldname); + fielddbtypeList.add(fielddbtype); + fieldhtmltypeList.add(fieldhtmltype); + fieldtypeList.add(fieldtype); + fieldnames = fieldnames + fieldname + ","; + } + //System.out.println("9:流程" + i + "时间:" + (new Date().getTime() - d1.getTime())); + if(hasmanager){ + String beagenter=""+userid; + //获得被代理人 + RecordSet.executeSql("select agentorbyagentid from workflow_currentoperator where usertype=0 and isremark='0' and requestid="+requestid+" and userid="+userid+" and nodeid="+nodeid+" order by id desc"); + if(RecordSet.next()){ + int tembeagenter=RecordSet.getInt(1); + if(tembeagenter>0) beagenter=""+tembeagenter; + } + String tmpmanagerid = ResourceComInfo.getManagerID(beagenter); + rs2.executeSql("update " + maintable + " set manager="+tmpmanagerid+" where requestid=" + requestid); + } + if(fieldnames.length() > 0){ + fieldnames = fieldnames.substring(0, fieldnames.length()-1); + rs2.execute("select " + fieldnames + " from " + maintable + " where requestid=" + requestid); + if(rs2.next()){ + for(int j=0; j0 and a.id="+intapproveid); + if(RecordSet.next()){ + intapproveid=Util.getIntValue(RecordSet.getString(1),intapproveid); + if(intapproveid>0){ + approveid=""+intapproveid; + } + } + DocManager.approveDocFromWF("approve", approveid, currentdate, currenttime, userid + ""); + } + } + //项目 + if (formid == 74) { + RecordSet.executeSql("select approveid from Bill_ApproveProj where requestid=" + requestid); + if(RecordSet.next()){ + char flag = 2 ; + String approveid=RecordSet.getString("approveid"); + RecordSet.executeProc("Prj_Plan_Approve",approveid); + String tmpsql="update prj_taskprocess set isactived=2 where prjid="+approveid ; + RecordSet.executeSql(tmpsql); + tmpsql = "update Prj_ProjectInfo set status = 5 where id = "+ approveid; + RecordSet.executeSql(tmpsql); + + //更新工作计划中该项目的经理的时间Begin + String begindate01 = ""; + String enddate01 = ""; + + RecordSet.executeProc("Prj_TaskProcess_Sum",""+approveid); + if(RecordSet.next() && !RecordSet.getString("workday").equals("")){ + + if(!RecordSet.getString("begindate").equals("x")) begindate01 = RecordSet.getString("begindate"); + if(!RecordSet.getString("enddate").equals("-")) enddate01 = RecordSet.getString("enddate"); + + } + if (!begindate01.equals("")){ + RecordSet.executeSql("update workplan set status = '0',begindate = '" + begindate01 + "',enddate = '" + enddate01 + "' where type_n = '2' and projectid = '" + approveid + "' and taskid = -1"); + } + //更新工作计划中该项目的经理的时间End + + //添加工作计划Begin + String para = ""; + String workid = ""; + String manager=""; + String TaskID=""; + RecordSet.executeProc("Prj_ProjectInfo_SelectByID",approveid); + if (RecordSet.next()){ + manager=RecordSet.getString("manager"); + } + + tmpsql = "SELECT * FROM Prj_TaskProcess WHERE prjid = " + approveid + " and isdelete<>'1' order by id"; + RecordSet.executeSql(tmpsql); + + while (RecordSet.next()) { + TaskID = RecordSet.getString("id"); + para = "2"; //type_n + para +=flag+Util.toScreen(RecordSet.getString("subject"),user.getLanguage()); + para +=flag+Util.toScreen(RecordSet.getString("hrmid"),user.getLanguage()); + para +=flag+Util.toScreen(RecordSet.getString("begindate"),user.getLanguage()); + para +=flag+""; //BeginTime + para +=flag+Util.toScreen(RecordSet.getString("enddate"),user.getLanguage()); + para +=flag+""; //EndTime + para +=flag+Util.toScreen(RecordSet.getString("content"),user.getLanguage()); + para +=flag+"0";//requestid + para +=flag+approveid;//projectid + para +=flag+"0";//crmid + para +=flag+"0";//docid + para +=flag+"0";//meetingid + para +=flag+"0";//status; + para +=flag+"1";//isremind; + para +=flag+"0";//waketime; + para +=flag+manager;//createid; + para +=flag+currentdate; + para +=flag+currenttime; + para +=flag+"0"; + para += flag + "0"; //taskid + para += flag + "1"; //urgent level + para += flag + "0"; //agentId level + + RecordSet1.executeProc("WorkPlan_Insert",para); + if (RecordSet1.next()) workid = RecordSet1.getString("id"); + + //write "add" of view log + String[] logParams = new String[] {workid, + WorkPlanLogMan.TP_CREATE, + String.valueOf(userid), + request.getRemoteAddr()}; + WorkPlanLogMan logMan = new WorkPlanLogMan(); + logMan.writeViewLog(logParams); + //end + + RecordSet1.executeSql("update workplan set taskid = " + TaskID + " where id =" + workid); + WorkPlanViewer.setWorkPlanShareById(workid); + } + //添加工作计划End + } + } + //客户 + if (formid == 79) { + String sql= "select approveid,approvevalue,approvetype from bill_ApproveCustomer where requestid="+requestid; + RecordSet.executeSql(sql); + String approveid=""; + String approvetype=""; + String approvevalue=""; + if(RecordSet.next()){ + approveid=RecordSet.getString("approveid"); + approvetype=RecordSet.getString("approvetype"); + approvevalue = RecordSet.getString("approvevalue"); + } + //更改单据的状态,1:已经归档 + + RecordSet.executeSql("update bill_ApproveCustomer set status=1 where requestid="+requestid); + RecordSet.executeProc("CRM_CustomerInfo_SelectByID",approveid); + RecordSet.first(); + String statusTemp = RecordSet.getString("status"); + String Manager2 = RecordSet.getString("manager"); + String name = RecordSet.getString("name"); + String ProcPara=""; + char flag = 2 ; + String fieldName=""; + if(approvetype.equals("1")){ + ProcPara = approveid; + ProcPara += flag+approvevalue; + ProcPara += flag+"1"; + + RecordSet.executeProc("CRM_CustomerInfo_Approve",ProcPara); + + ProcPara = approveid; + ProcPara += flag+"a"; + ProcPara += flag+"0"; + ProcPara += flag+"a"; + ProcPara += flag+currentdate; + ProcPara += flag+currenttime; + ProcPara += flag+""+user.getUID(); + ProcPara += flag+""+user.getLogintype(); + ProcPara += flag+request.getRemoteAddr(); + RecordSet.executeProc("CRM_Log_Insert",ProcPara); + + fieldName = SystemEnv.getHtmlLabelName(23247,user.getLanguage()); + + ProcPara = approveid+flag+"1"+flag+"0"+flag+"0"; + ProcPara += flag+fieldName+flag+currentdate+flag+currenttime+flag+statusTemp+flag+approvevalue; + ProcPara += flag+""+user.getUID()+flag+""+user.getLogintype()+flag+request.getRemoteAddr(); + RecordSet.executeProc("CRM_Modify_Insert",ProcPara); + }else if(approvetype.equals("2")){ + ProcPara = approveid; + ProcPara += flag+approvevalue; + + RecordSet.executeProc("CRM_CustomerInfo_Portal",ProcPara); + String PortalLoginid = ""; + String PortalPassword = ""; + + if(approvevalue.equals("2")){ + if (approveid.length()<5){ + PortalLoginid = "U" + Util.add0(Util.getIntValue(approveid),5); + }else{ + PortalLoginid = "U" + approveid; + } + + PortalPassword = Util.getPortalPassword(); + + ProcPara = approveid; + ProcPara += flag+PortalLoginid; + ProcPara += flag+PortalPassword; + + RecordSet.executeProc("CRM_CustomerInfo_PortalPasswor",ProcPara); + } + ProcPara = approveid; + ProcPara += flag+"p"; + ProcPara += flag+"0"; + ProcPara += flag+"p"; + ProcPara += flag+currentdate; + ProcPara += flag+currenttime; + ProcPara += flag+""+user.getUID(); + ProcPara += flag+""+user.getLogintype(); + ProcPara += flag+request.getRemoteAddr(); + RecordSet.executeProc("CRM_Log_Insert",ProcPara); + + fieldName = SystemEnv.getHtmlLabelName(23249,user.getLanguage()); + + ProcPara = approveid+flag+"1"+flag+"0"+flag+"0"; + ProcPara += flag+fieldName+flag+currentdate+flag+currenttime+flag+statusTemp+flag+approvevalue; + ProcPara += flag+""+user.getUID()+flag+""+user.getLogintype()+flag+request.getRemoteAddr(); + RecordSet.executeProc("CRM_Modify_Insert",ProcPara); + }else if(approvetype.equals("3")){ + String PortalLoginid = ""; + String PortalPassword = ""; + + if(approvevalue.equals("2")){ + if (approveid.length()<5){ + PortalLoginid = "U" + Util.add0(Util.getIntValue(approveid),5); + }else{ + PortalLoginid = "U" + approveid; + } + + PortalPassword = Util.getPortalPassword(); + + ProcPara = approveid; + ProcPara += flag+PortalLoginid; + ProcPara += flag+PortalPassword; + + RecordSet.executeProc("CRM_CustomerInfo_PortalPasswor",ProcPara); + } + } + } + } + PoppupRemindInfoUtil.updatePoppupRemindInfo(userid, 0, (logintype).equals("1") ? "0" : "1", requestid); //add by sean for td3999 +int takisremark = -1; +int handleforwardid = -1; +String zsql = "select * from workflow_currentoperator where requestid= "+ requestid + "and nodeid = "+ nodeid +" and userid = "+ userid; +RecordSet.executeSql(zsql); +if(RecordSet.next()){ +takisremark = Util.getIntValue(RecordSet.getString("takisremark")); +handleforwardid = Util.getIntValue(RecordSet.getString("handleforwardid")); +} +if(takisremark==2){ + +RecordSet.executeSql("update workflow_requestlog set logtype='b' where requestid= "+ requestid + " and nodeid = "+ nodeid +" and operator = "+ userid); +} +if(handleforwardid>0){ +RecordSet.executeSql("update workflow_requestlog set logtype='j' where requestid= "+ requestid + "and nodeid = "+ nodeid +" and operator = "+ userid); +} +if(takisremark!=2 && handleforwardid<0){ + + boolean logstatus = RequestManager.saveRequestLog(); +} + +String taksql = "select * from workflow_currentoperator where requestid= "+ requestid + "and nodeid = "+ nodeid +" and userid = "+ userid +" and takisremark = 2"; +RecordSet.executeSql(taksql); +if(RecordSet.next()){ + String taksql1 = "select count(*) as cou from workflow_currentoperator where requestid= "+ requestid + "and nodeid = "+ nodeid +" and takisremark = 2 and isremark=1"; + RecordSet.executeSql(taksql1); + if(RecordSet.next()){ + if(RecordSet.getInt("cou")==0){ + String taksql2 = "select * from workflow_currentoperator where requestid= "+ requestid + "and nodeid = "+ nodeid +" and isremark = 0 and takisremark = -2"; +RecordSet.executeSql(taksql2); +if(RecordSet.next()){ + +String uptaksql2 = "update workflow_currentoperator set takisremark=0 where requestid= "+ requestid + "and nodeid = "+ nodeid +" and isremark = 0 and takisremark = -2"; +RecordSet.executeSql(uptaksql2); + } + } + } +} +/* + RecordSet.execute("select * from workflow_currentoperator where requestid = " + requestid + "and workflowid = " +workflowid+ "and userid = "+ userid + "and nodeid = "+nodeid+"and takisremark = 2 "); + if(RecordSet.next()){ + int tkisremark = RecordSet.getInt("isremark"); + System.out.println("--588--tkisremark----"+tkisremark); + if(tkisremark ==2){ + RecordSet.execute("update workflow_currentoperator set takisremark = 0 where requestid = " + requestid + "and workflowid = " +workflowid+ "and nodeid = "+nodeid+"and takisremark = -2 "); + } + }*/ + + } + //System.out.println("12:流程" + i + "时间:" + (new Date().getTime() - d1.getTime())); + if(requestid > 0){ + int _wfid = 0; + int _currNodeType = -1; + int _formid = 0; + rs_1.executeProc("workflow_Requestbase_SByID", "" + requestid + ""); + //当前节点 + if (rs_1.next()) { + _wfid = rs_1.getInt("workflowid"); + _currNodeType = Util.getIntValue(rs_1.getString("currentnodetype"), 0); + } + + /* + rs_1.executeSql("select formid from workflow_base where id = "+_wfid); + if (rs_1.next()) { + _formid = rs_1.getInt("formid"); + } + */ + + if(_currNodeType==3){ + String update_sql="update FnaExpenseInfo set status = 1 where requestid="+requestid; + rs_1.executeSql(update_sql); + } + } + //System.out.println("13:流程" + i + "时间:" + (new Date().getTime() - d1.getTime())); + } +} + +//EAS流程提交 +if(!easrequestidlist.equals("")){ + //先判断用户是否登录 + weaver.eas.EASUtil EASUtil = new weaver.eas.EASUtil(); + String sessionid = Util.null2String(EASUtil.EasLogin(user.getUID()+"")); + String loginid = EASUtil.getLoginid(user); + if(!sessionid.equals("")&&!sessionid.equals("0")){ + EASUtil.EASMultiDoSubmit(easrequestidlist,loginid,remark); + }else{ + //弹出账户设置页面 + //alert("EAS系统登陆异常,请检查EAS账号设置!"); + //window.open("/interface/AccountSetting.jsp"); + //return ; + response.getWriter().write("2"); + return; + } + +} + +String pagefromtype = Util.null2String(request.getParameter("pagefromtype")); +if ("1".equals(pagefromtype)) { + response.getWriter().write("1"); + return; +} + + +if(method.equals("reqeustByWfTypeAndComplete")){ + response.sendRedirect("/workflow/search/WFSearchTemp.jsp?method="+method+"&wftype="+wftype+"&flowAll="+flowAll+"&flowNew="+flowNew+"&viewScope=doing&complete=0&numberType=flowAll&viewcondition="+viewcondition); +}else if(method.equals("reqeustbywfidNode")){ + response.sendRedirect("/workflow/search/WFSearchTemp.jsp?method="+method+"&workflowid="+wfid+"&flowAll="+flowAll+"&flowNew="+flowNew+"&viewScope=doing&complete=0&numberType=flowAll&viewcondition="+viewcondition); +}else{ + response.sendRedirect("/workflow/search/WFSearchTemp.jsp?method=all&viewScope=doing&complete=0&wftypes="+wftypes+"&flowAll="+flowAll+"&flowNew="+flowNew+"&viewcondition="+viewcondition); +} +%> \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/RequestView.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/RequestView.jsp new file mode 100755 index 0000000..13955d8 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/RequestView.jsp @@ -0,0 +1,884 @@ +<%@ page import="weaver.conn.*" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.general.*"%> + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="org.json.JSONArray"%> +<%@page import="org.json.JSONObject"%> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> + +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> + + + + + + + + + + + + + + +<% + int isfrom = Util.getIntValue(request.getParameter("isfrom"),-1); + boolean isUseOldWfMode=sysInfo.isUseOldWfMode(); + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + String loadtree = Util.null2String(request.getParameter("loadtree")); + //System.out.println("loadtree:"+loadtree); + boolean isfromtab = Util.null2String(request.getParameter("isfromtab")).equals("true")?true:false; + int requestid = Util.getIntValue((String)session.getAttribute("requestidForAllBill"),0); + String topage_ForAllBill = Util.null2String((String)session.getAttribute("topage_ForAllBill")); + + if(!"".equals(topage_ForAllBill)){ + if(topage_ForAllBill.indexOf("/proj/process/ViewTask.jsp") == 0 || topage_ForAllBill.indexOf("/proj/plan/ViewTask.jsp") == 0){ + response.sendRedirect(topage_ForAllBill+"&requestid="+requestid); + session.setAttribute("topage_ForAllBill",""); + return; + }else if(topage_ForAllBill.indexOf("RequestOperation.jsp") > 0){ + int tempInt = topage_ForAllBill.lastIndexOf("3D"); + String tempString = topage_ForAllBill.substring(tempInt+2); + response.sendRedirect("/proj/process/ViewTask.jsp?taskrecordid="+tempString+"&requestid="+requestid); + session.setAttribute("topage_ForAllBill",""); + return; + } + } + + + String resourceid= Util.null2String(request.getParameter("resourceid")); + AllManagers.getAll(resourceid); + if("".equals(resourceid)){ + resourceid = ""+user.getUID(); + } + boolean isSelf = false; + boolean isManager = false; + RecordSet.executeProc("HrmResource_SelectByID",resourceid); + RecordSet.next(); + String departmentid = Util.toScreen(RecordSet.getString("departmentid"),user.getLanguage()) ; /*所属部门*/ + if (resourceid.equals(""+user.getUID()) ){ + isSelf = true; + } + while(AllManagers.next()){ + String tempmanagerid = AllManagers.getManagerID(); + if (tempmanagerid.equals(""+user.getUID())) { + isManager = true; + } + } + if(!(((isSelf || isManager || HrmUserVarify.checkUserRight("HrmResource:Workflow",user,departmentid))))){ + //response.sendRedirect("/notice/noright.jsp") ; + } + + String logintype = ""+user.getLogintype(); + int usertype = 0; + if(logintype.equals("2")) usertype= 1; + + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"),0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + String menuType = Util.null2String(request.getParameter("menuType")); + int infoId = Util.getIntValue(request.getParameter("infoId"),0); + if(selectedContent!=null && selectedContent.startsWith("key_")){ + String menuid = selectedContent.substring(4); + RecordSet.executeSql("select * from menuResourceNode where contentindex = '"+menuid+"'"); + selectedContent = ""; + while(RecordSet.next()){ + String keyVal = RecordSet.getString(2); + selectedContent += keyVal +"|"; + } + if(selectedContent.indexOf("|")!=-1) + selectedContent = selectedContent.substring(0,selectedContent.length()-1); + } + if(fromAdvancedMenu == 1){ + response.sendRedirect("/workflow/search/WFSearchCustom.jsp?fromadvancedmenu=1&infoId="+infoId+"&selectedContent="+selectedContent+"&menuType="+menuType); + return; + } + String selectedworkflow = ""; + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if(info!=null){ + selectedworkflow = info.getSelectedContent(); + } + if(!"".equals(selectedContent)) + { + selectedworkflow = selectedContent; + } + selectedworkflow+="|"; + /* edited end */ + + String userID = String.valueOf(user.getUID()); + if(resourceid.equals("")) { + session.removeAttribute("RequestViewResource") ; + } + else { + session.setAttribute("RequestViewResource",resourceid) ; + } + boolean superior = false; //是否为被查看者上级或者本身 + + if("".equals(resourceid) || userID.equals(resourceid)) + { + resourceid = userID; + superior = true; + } + else + { + rs.executeSql("SELECT * FROM HrmResource WHERE ID = " + resourceid + " AND managerStr LIKE '%," + userID + ",%'"); + + if(rs.next()) + { + superior = true; + } + } + + char flag = Util.getSeparator(); + + String username = Util.toScreen(ResourceComInfo.getResourcename(resourceid),user.getLanguage()); + + if(logintype.equals("2")) username = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(""+user.getUID()),user.getLanguage()) ; + + String imagefilename = "/images/hdReport_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(1207,user.getLanguage()) + ": "+SystemEnv.getHtmlLabelName(367,user.getLanguage()); + String needfav ="1"; + String needhelp =""; + String tworkflowNodeIDs = ""; +%> + + + +<% + + String typeid=""; + String typecount=""; + String typename=""; + String workflowid=""; + String workflowcount=""; + String newremarkwfcount0=""; + String newremarkwfcount1=""; + String wfsupedcount=""; + String workflowname=""; + + ArrayList wftypeList=new ArrayList(); + ArrayList wftypecountList=new ArrayList(); + ArrayList workflowList=new ArrayList(); + ArrayList workflowcountList=new ArrayList(); + ArrayList newremarkwfcount0List=new ArrayList();//待办数量 + ArrayList newremarkwfcount1List=new ArrayList();//反馈数量 + ArrayList wftypeworkflowList=new ArrayList(); + ArrayList wfovertimecountList=new ArrayList();//超时数量 + ArrayList wfsupedcountList = new ArrayList(); //被督办数量 + + Hashtable wfNodeHahstable = new Hashtable(); + + + Map newremarkwfcount0Map=new Hashtable();//待办数量 + Map newremarkwfcount1Map=new Hashtable();//反馈数量 + Map wftypeworkflowMap=new Hashtable(); + Map wfovertimecountMap=new Hashtable();//超时数量 + Map wfsupedcountMap = new Hashtable(); //被督办数量 + + + int totalcount=0; + String wftypes = ""; + String demoLeftMenus = ""; + //String SQL = ""; + //SQL = "select workflowtype, workflowid from workflow_currentoperator where (isremark='0' or isremark='1' or isremark='5' or isremark='8' or isremark='9' or isremark='7') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and exists (select 1 from workflow_requestbase c where c.workflowid=workflow_currentoperator.workflowid and c.requestid=workflow_currentoperator.requestid)"; + if(loadtree.equals("true")){ + StringBuffer sqlsb = new StringBuffer(); + sqlsb.append("select workflowtype, workflowid "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where ((isremark = '0' and (takisremark is null or takisremark=0)) or isremark = '1' or isremark = '5' or "); + sqlsb.append(" isremark = '8' or isremark = '9' or isremark = '7') "); + sqlsb.append(" and islasttimes = 1 "); + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype); + //sqlsb.append(" and workflowid in (select id from workflow_base where (isvalid=1 or isvalid=3) ) "); + sqlsb.append(" and exists (select 1 "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.workflowid = workflow_currentoperator.workflowid "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(" and c.requestid = workflow_currentoperator.requestid)"); + + //RecordSet.executeSql("select workflowtype, workflowid, viewtype, count(distinct requestid) workflowcount from workflow_currentoperator where (isremark='0' or isremark='1' or isremark='5') and islasttimes=1 and (isprocessed is null or (isprocessed<>'2' and isprocessed<>'3')) and userid=" + resourceid + " and usertype= " + usertype +" group by workflowtype, workflowid, viewtype order by workflowtype, workflowid " ) ; + //System.out.print("select workflowtype, workflowid from workflow_currentoperator where (isremark='0' or isremark='1' or isremark='5') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and exists (select 1 from workflow_requestbase c where c.requestid=workflow_currentoperator.requestid) group by workflowtype, workflowid order by workflowtype, workflowid " ) ; + //RecordSet.executeSql("select distinct a.workflowtype, a.workflowid from workflow_currentoperator a ,workflow_requestbase b where a.requestid=b.requestid and (b.currentnodetype <> '3' or (a.isremark ='1' and b.currentnodetype = '3')) and (a.isremark='0' or a.isremark='1' or a.isremark='5') and a.userid=" + resourceid + " and a.usertype= " + usertype +" group by a.workflowtype, a.workflowid order by a.workflowtype, a.workflowid " ) ; + if(!superior) + { + //SQL += " AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE workflow_currentoperator.workflowid = b.workflowid AND workflow_currentoperator.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "; + sqlsb.append(" AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE workflow_currentoperator.workflowid = b.workflowid AND workflow_currentoperator.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "); + } + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + //SQL += " group by workflowtype, workflowid order by workflowtype, workflowid"; + sqlsb.append(" group by workflowtype, workflowid order by workflowtype, workflowid "); + RecordSet.executeSql(sqlsb.toString()); + //System.out.println(sqlsb.toString()); + while(RecordSet.next()){ + String theworkflowid = Util.null2String(RecordSet.getString("workflowid")) ; + String theworkflowtype = Util.null2String(RecordSet.getString("workflowtype")) ; + + theworkflowid = WorkflowVersion.getActiveVersionWFID(theworkflowid); + if(WorkflowComInfo.getIsValid(theworkflowid).equals("1")) + { + + /* added by wdl 2006-06-14 left menu advanced menu */ + if(selectedworkflow.indexOf("T"+theworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+theworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + /* added end */ + + if(wftypeworkflowList.indexOf(theworkflowtype+","+theworkflowid)<0){ + wftypeworkflowList.add(theworkflowtype+","+theworkflowid); + } + int wftindex = wftypeList.indexOf(theworkflowtype) ; + if(wftindex == -1) { + wftypeList.add(theworkflowtype) ; + wftypecountList.add("0") ; + } + wftindex = workflowList.indexOf(theworkflowid) ; + if(wftindex == -1) { + workflowList.add(theworkflowid) ; + workflowcountList.add("0") ; + } + if(selectedworkflow.indexOf("PW"+theworkflowid+"N")!=-1 && fromAdvancedMenu==1){ + int bx = selectedworkflow.indexOf("PW"+theworkflowid+"N"); + String tmp = selectedworkflow.substring(bx+("PW"+theworkflowid+"N").length()); + bx = tmp.indexOf("SP^AN"); + tmp = tmp.substring(0, bx); + //System.out.println("theworkflowid = " + theworkflowid + " tmp = " + tmp); + wfNodeHahstable.put(theworkflowid, tmp); + } + } + } + +// newremarkwfcount0List.add(""+newcount); + //newremarkwfcount1List.add(""+newcount1); + + + + /* + wfovertimecountList.add(""+overtimecount); + int wfindex = workflowList.indexOf(tworkflowid) ; + if(wfindex != -1) { + workflowcountList.set(wfindex,""+(Util.getIntValue((String)workflowcountList.get(wfindex),0)+overtimecount)) ; + } + int wftindex = wftypeList.indexOf(tworkflowtype) ; + if(wftindex != -1) { + wftypecountList.set(wftindex,""+(Util.getIntValue((String)wftypecountList.get(wftindex),0)+overtimecount)) ; + } + totalcount += overtimecount; + */ + + + //左侧树拼接 json + demoLeftMenus = "["; + if(wftypeList.size()>0){ + for (int i = 0,typerowcounts=wftypeList.size(); i < typerowcounts; i++) { + typeid = (String) wftypeList.get(i); + typecount = (String) wftypecountList.get(i); + typename = WorkTypeComInfo.getWorkTypename(typeid); + String workFlowIDsRequest = ""; + String workFlowNodeIDsRequest = ""; + for (int j = 0; j < workflowList.size(); j++) { + workflowid = (String) workflowList.get(j); + String curtypeid = WorkflowComInfo.getWorkflowtype(workflowid); + if (!curtypeid.equals(typeid)) { + continue; + } + workFlowIDsRequest += workflowid + ","; + String t_workFlowNodeIDRequest = Util.null2String((String) wfNodeHahstable.get(workflowid)); + if (!"".equals(t_workFlowNodeIDRequest)) { + workFlowNodeIDsRequest += t_workFlowNodeIDRequest + ","; + } + } + if (!"".equals(workFlowIDsRequest)) { + workFlowIDsRequest = workFlowIDsRequest.substring(0, workFlowIDsRequest.length()); + } + if (!"".equals(workFlowNodeIDsRequest)) { + workFlowNodeIDsRequest = workFlowNodeIDsRequest.substring(0, workFlowNodeIDsRequest.length()); + } + + demoLeftMenus +="{"; + demoLeftMenus += "\"name\":\""+Util.toScreenForJs(Util.toScreen(typename, user.getLanguage()))+"\","; + demoLeftMenus+="\"__domid__\":\"__type_"+typeid+"\","; + demoLeftMenus += "\"hasChildren\":"+true+","; + demoLeftMenus += "\"isOpen\":"+true+","; + demoLeftMenus += "\"submenus\":["; + List maps=new ArrayList(0); + for (int j = 0; j < workflowList.size(); j++) { + workflowid = (String) workflowList.get(j); + String curtypeid = WorkflowComInfo.getWorkflowtype(workflowid); + if (!curtypeid.equals(typeid)) + continue; + + workflowcount = (String) workflowcountList.get(j); + workflowname = WorkflowComInfo.getWorkflowname(workflowid); + int tempind = wftypeworkflowList.indexOf(typeid + "," + workflowid); + int ovtimenum = 0; + newremarkwfcount1 = "0"; + newremarkwfcount0 = "0"; + wfsupedcount = "0"; + + if (tempind > -1) { + Object tempovtimenumObj = wfovertimecountMap.get(workflowid); + if (tempovtimenumObj != null) { + ovtimenum = (Integer)tempovtimenumObj; + } else { + ovtimenum = 0; + } + + Object tempnewremarkwfcount0Obj = newremarkwfcount0Map.get(workflowid); + if (tempnewremarkwfcount0Obj != null) { + newremarkwfcount0 = (Integer)tempnewremarkwfcount0Obj + ""; + } else { + newremarkwfcount0 = "0"; + } + + Object tempnewremarkwfcount1Obj = newremarkwfcount1Map.get(workflowid); + if (tempnewremarkwfcount1Obj != null) { + newremarkwfcount1 = (Integer)tempnewremarkwfcount1Obj + ""; + } else { + newremarkwfcount1 = "0"; + } + + Object tempwfsupedcountObj = wfsupedcountMap.get(workflowid); + if (tempwfsupedcountObj != null) { + wfsupedcount = (Integer)tempwfsupedcountObj + ""; + } else { + wfsupedcount = "0"; + } + + //newremarkwfcount1 = Util.getIntValue(Util.null2String((String) newremarkwfcount1Map.get(workflowid)), 0) + ""; + //(String) newremarkwfcount1Map.get(workflowid); + //wfsupedcount = Util.getIntValue(Util.null2String((String) wfsupedcountMap.get(workflowid)), 0) + ""; + //(String) wfsupedcountMap.get(workflowid); + + } +// System.out.println("====================================************=newremarkwfcount1=" + newremarkwfcount1+ ", " + Util.toScreen(newremarkwfcount1, user.getLanguage())); + String t_nodeids = Util.null2String((String) wfNodeHahstable.get(workflowid)); + Map map=new HashMap(); + map.put("name", Util.toScreenForJs(Util.toScreen(workflowname, user.getLanguage()))); + map.put("workflowid",workflowid); + map.put("nodeids",t_nodeids); + //map.put("flowNew",Util.toScreen(newremarkwfcount0, user.getLanguage())); + //map.put("flowResponse",Util.toScreen(newremarkwfcount1, user.getLanguage())); + map.put("flowNew","0"); + map.put("flowResponse","0"); + map.put("flowOut",ovtimenum); + //map.put("flowAll",Util.toScreen(workflowcount,user.getLanguage())); + //map.put("flowSup",Util.toScreen(wfsupedcount, user.getLanguage())); + map.put("flowAll","0"); + map.put("flowSup","0"); + maps.add(map); + } + int flowNew=0; + int flowResponse=0; + int flowOut=0; + int flowAll=0; + int flowSup=0; + + for(int x=0;x0 ){ + //demoLeftMenus+=","; + } + while(rs.next()){ + String _typeid = rs.getString(1); + String _typename = rs.getString(2); + if(demoLeftMenus.length()>10){ + demoLeftMenus +=",{"; + }else{ + demoLeftMenus +="{"; + } + System.out.println("_typeid = "+_typeid+" _typename="+_typename); + demoLeftMenus += "\"name\":\""+_typename+"\","; + demoLeftMenus+="\"__domid__\":\"__type_"+_typeid+"\","; + demoLeftMenus += "\"hasChildren\":"+true+","; + demoLeftMenus += "\"isOpen\":"+true+","; + demoLeftMenus += "\"submenus\":["; + int eas_wf_count = 0 ; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select fid,fname,fworkflowid from "+eas_workflowinfo+" where FCategoryID="+_typeid+" order by fseq')");//查询EAS流程 + eas_wf_count = RecordSet.getCounts(); + int wfcountall = 0 ; + while(RecordSet.next()){ + String _wfid = RecordSet.getString(1); + String _wfname = RecordSet.getString(2); + String _fworkflowid = RecordSet.getString(3); + rs1.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FPersonUserNumber=''"+loginid+"'' AND FWorkFlowID=''"+_fworkflowid+"'' and FState=''1''')"); + int wfcount = 0; + if(rs1.next()){ + wfcount = Util.getIntValue(rs1.getString(1),0); + } + wfcountall += wfcount ; + demoLeftMenus += "{"; + demoLeftMenus += "\"name\":\""+_wfname+"\","; + demoLeftMenus+="\"__domid__\":\"__wf_"+_wfid+"\","; + demoLeftMenus += "\"hasChildren\":false,"; + demoLeftMenus += "\"attr\":{"; + demoLeftMenus += "\"workflowid\":"+_wfid+","; + demoLeftMenus += "\"nodeids\":\"\","; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcount+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "},"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcount+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + demoLeftMenus += ","; + } + if(eas_wf_count>0){ + demoLeftMenus = demoLeftMenus.substring(0,demoLeftMenus.length()-1); + } + demoLeftMenus += "],"; + demoLeftMenus += "\"attr\":{"; + demoLeftMenus += "\"typeid\":"+_typeid+","; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcountall+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "},"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcountall+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + } + + demoLeftMenus += "]"; + out.clear(); + out.print(demoLeftMenus); + //System.out.println(demoLeftMenus); + return; + + } + +if(!isUseOldWfMode){ + int typerowcounts=wftypeList.size(); + JSONArray jsonWfTypeArray = new JSONArray(); + for(int i=0;i-1){ + ovtimenum=Util.getIntValue((String)wfovertimecountList.get(tempind),0); + //newremarkwfcount0=(String)newremarkwfcount0List.get(tempind); + //newremarkwfcount1=(String)newremarkwfcount1List.get(tempind); + newremarkwfcount0="0"; + newremarkwfcount1="0"; + wfsupedcount=(String)wfsupedcountList.get(tempind); + } + String t_nodeids = Util.null2String((String)wfNodeHahstable.get(workflowid)); + jsonWfTypeChild.put("iconCls","btn_dot"); + jsonWfTypeChild.put("cls","wfTreeLeafNode"); + jsonWfTypeChild.put("paras","method=reqeustbywfidNode&workflowid="+workflowid+"&nodeids="+t_nodeids+"&complete=0"); + wfText +=""+workflowname+"  ("; + if(ovtimenum>0){ + String paras = "method=reqeustbywfidNode&workflowid="+workflowid+"&nodeids="+t_nodeids+"&complete=8"; + wfText+=""+ovtimenum+"  / "; + over=ovtimenum+over;; + } + if(!newremarkwfcount0.equals("0")){ + String paras = "method=reqeustbywfidNode&workflowid="+workflowid+"&nodeids="+t_nodeids+"&complete=3"; + wfText+=""+Util.toScreen(newremarkwfcount0,user.getLanguage())+"  / "; + newremark1=Util.getIntValue(newremarkwfcount0)+newremark1; + } + if(!newremarkwfcount1.equals("0")){ + String paras = "method=reqeustbywfidNode&workflowid="+workflowid+"&nodeids="+t_nodeids+"&complete=4"; + wfText+=""+Util.toScreen(newremarkwfcount1,user.getLanguage())+"  / "; + newremark2=Util.getIntValue(newremarkwfcount1)+newremark2; + } + wfText+=Util.toScreen(workflowcount,user.getLanguage())+")"; + + jsonWfTypeChild.put("text",wfText); + jsonWfTypeChildrenArray.put(jsonWfTypeChild); + + } + + String wfText =""; + if(over>0){ + wfText+=over+"  / "; + } + if(newremark1>0){ + wfText+=newremark1+"  / "; + } + if(newremark2>0){ + wfText+=newremark2+"  / "; + } + //wfText+=")"; + jsonWfType.put("text",""+WorkTypeComInfo.getWorkTypename(typeid)+" ("+wfText+(String)wftypecountList.get(i)+")"); + //jsonWfType.put("text",""); + jsonWfType.put("children",jsonWfTypeChildrenArray); + jsonWfTypeArray.put(jsonWfType); + } + session.setAttribute("view",jsonWfTypeArray); + + response.sendRedirect("/workflow/request/ext/Request.jsp?type=view&isfromtab="+isfromtab); //type: view,表待办 handled表已办 + + return; +} + + +if(workflowcountList.size() == 1 && !superior){ + String workflowid1 = (String)workflowList.get(0); + String nodeids1 = Util.null2String((String)wfNodeHahstable.get(workflowid1)); + String href1 = "/workflow/search/WFSearchTemp.jsp?method=reqeustbywfidNode&workflowid="+workflowid1+"&nodeids="+nodeids1+"&complete=0"; + + //response.sendRedirect(href1); + %> + + <% + +} + +titlename+="  ("+SystemEnv.getHtmlLabelName(18609,user.getLanguage())+totalcount+SystemEnv.getHtmlLabelName(26302,user.getLanguage())+")"; +%> + +<%@ include file="/systeminfo/leftMenuCommon.jsp" %> + + +
+
+ <%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %> + <% + /* edited by wdl 2006-06-14 left menu advanced menu */ + if(fromAdvancedMenu!=1){ + RCMenuWidth = 160; + //RCMenu += "{"+SystemEnv.getHtmlLabelName(16347,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?method=all&complete=0&viewType=1,_self}" ; + //RCMenuHeight += RCMenuHeightStep ; + + RCMenu += "{"+SystemEnv.getHtmlLabelName(20271,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=all&complete=2&viewType=2,_self}" ; + RCMenuHeight += RCMenuHeightStep ; + + RCMenu += "{"+SystemEnv.getHtmlLabelName(16348,user.getLanguage())+",/workflow/search/WFSearchTemp.jsp?offical="+offical+"&officalType="+officalType+"&method=all&complete=1&viewType=3,_self}" ; + RCMenuHeight += RCMenuHeightStep ; + } + /* edited end */ + %> +
+
+ + + + + + + + + + + +
+ + + <%=SystemEnv.getHtmlLabelName(21979,user.getLanguage()) %> + + +   + + + + +
+
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/workflow/request/RequestViewAjaxCount.jsp b/src/test/resources/WEB-INF/ecology/workflow/request/RequestViewAjaxCount.jsp new file mode 100755 index 0000000..f23a1cd --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/request/RequestViewAjaxCount.jsp @@ -0,0 +1,865 @@ +<%@page import="weaver.systeminfo.SystemEnv"%> +<%@page import="weaver.hrm.User"%> +<%@page import="weaver.hrm.HrmUserVarify"%> +<%@ page import="weaver.conn.*" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.general.*"%> + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="org.json.JSONArray"%> +<%@page import="org.json.JSONObject"%> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> + + + + + + + + + + + + +<% +User user = HrmUserVarify.getUser (request , response) ; +if(user==null) { + return; +} + boolean isUseOldWfMode=sysInfo.isUseOldWfMode(); + String cursltwftypeid = Util.null2String(request.getParameter("wftype")); + String cursltwfid = Util.null2String(request.getParameter("workflowid")); + + String curoptwfid = Util.null2String(request.getParameter("optkeys")); + + if(!"".equals(cursltwfid) && "".equals(cursltwftypeid)){ + cursltwftypeid = WorkflowComInfo.getWorkflowtype(cursltwfid); + } else if (!"".equals(curoptwfid)) { + String optwfid = ""; + String optkeysql = "select distinct workflowid from workflow_requestbase where requestid in (" + curoptwfid + ")"; + RecordSet rs9 = new RecordSet(); + rs9.executeSql(optkeysql); + while (rs9.next()) { + cursltwftypeid += "," + WorkflowComInfo.getWorkflowtype(WorkflowVersion.getActiveVersionWFID(rs9.getString(1))); + } + + if (cursltwftypeid.length() > 1) { + cursltwftypeid = cursltwftypeid.substring(1, cursltwftypeid.length()); + } + } + //System.out.println("cursltwftypeid = "+cursltwftypeid); + //System.out.println("cursltwfid = "+cursltwfid); + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + String loadtree = Util.null2String(request.getParameter("loadtree")); + //System.out.println("loadtree:"+loadtree); + boolean isfromtab = Util.null2String(request.getParameter("isfromtab")).equals("true")?true:false; + int requestid = Util.getIntValue((String)session.getAttribute("requestidForAllBill"),0); + String topage_ForAllBill = Util.null2String((String)session.getAttribute("topage_ForAllBill")); + + if(!"".equals(topage_ForAllBill)){ + if(topage_ForAllBill.indexOf("/proj/process/ViewTask.jsp") == 0 || topage_ForAllBill.indexOf("/proj/plan/ViewTask.jsp") == 0){ + response.sendRedirect(topage_ForAllBill+"&requestid="+requestid); + session.setAttribute("topage_ForAllBill",""); + return; + }else if(topage_ForAllBill.indexOf("RequestOperation.jsp") > 0){ + int tempInt = topage_ForAllBill.lastIndexOf("3D"); + String tempString = topage_ForAllBill.substring(tempInt+2); + response.sendRedirect("/proj/process/ViewTask.jsp?taskrecordid="+tempString+"&requestid="+requestid); + session.setAttribute("topage_ForAllBill",""); + return; + } + } + + String resourceid= Util.null2String(request.getParameter("resourceid")); + AllManagers.getAll(resourceid); + if("".equals(resourceid)){ + resourceid = ""+user.getUID(); + } + boolean isSelf = false; + boolean isManager = false; + RecordSet.executeProc("HrmResource_SelectByID",resourceid); + RecordSet.next(); + String departmentid = Util.toScreen(RecordSet.getString("departmentid"),user.getLanguage()) ; /*所属部门*/ + if (resourceid.equals(""+user.getUID()) ){ + isSelf = true; + } + while(AllManagers.next()){ + String tempmanagerid = AllManagers.getManagerID(); + if (tempmanagerid.equals(""+user.getUID())) { + isManager = true; + } + } + if(!(((isSelf || isManager || HrmUserVarify.checkUserRight("HrmResource:Workflow",user,departmentid))))){ + //response.sendRedirect("/notice/noright.jsp") ; + } + + String logintype = ""+user.getLogintype(); + int usertype = 0; + if(logintype.equals("2")) usertype= 1; + + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"),0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + String menuType = Util.null2String(request.getParameter("menuType")); + int infoId = Util.getIntValue(request.getParameter("infoId"),0); + if(selectedContent!=null && selectedContent.startsWith("key_")){ + String menuid = selectedContent.substring(4); + RecordSet.executeSql("select * from menuResourceNode where contentindex = '"+menuid+"'"); + selectedContent = ""; + while(RecordSet.next()){ + String keyVal = RecordSet.getString(2); + selectedContent += keyVal +"|"; + } + if(selectedContent.indexOf("|")!=-1) + selectedContent = selectedContent.substring(0,selectedContent.length()-1); + } + if(fromAdvancedMenu == 1){ + response.sendRedirect("/workflow/search/WFSearchCustom.jsp?fromadvancedmenu=1&infoId="+infoId+"&selectedContent="+selectedContent+"&menuType="+menuType); + return; + } + String selectedworkflow = ""; + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if(info!=null){ + selectedworkflow = info.getSelectedContent(); + } + if(!"".equals(selectedContent)) + { + selectedworkflow = selectedContent; + } + selectedworkflow+="|"; + /* edited end */ + + String userID = String.valueOf(user.getUID()); + if(resourceid.equals("")) { + session.removeAttribute("RequestViewResource") ; + } + else { + session.setAttribute("RequestViewResource",resourceid) ; + } + boolean superior = false; //是否为被查看者上级或者本身 + + if("".equals(resourceid) || userID.equals(resourceid)) + { + resourceid = userID; + superior = true; + } + else + { + rs.executeSql("SELECT * FROM HrmResource WHERE ID = " + resourceid + " AND managerStr LIKE '%," + userID + ",%'"); + + if(rs.next()) + { + superior = true; + } + } + + char flag = Util.getSeparator(); + + String username = Util.toScreen(ResourceComInfo.getResourcename(resourceid),user.getLanguage()); + + if(logintype.equals("2")) username = Util.toScreen(CustomerInfoComInfo.getCustomerInfoname(""+user.getUID()),user.getLanguage()) ; + + String imagefilename = "/images/hdReport_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(1207,user.getLanguage()) + ": "+SystemEnv.getHtmlLabelName(367,user.getLanguage()); + String needfav ="1"; + String needhelp =""; + String tworkflowNodeIDs = ""; + + + String typeid=""; + String typecount=""; + String typename=""; + String workflowid=""; + String workflowcount=""; + String newremarkwfcount0=""; + String newremarkwfcount1=""; + String wfsupedcount=""; + String workflowname=""; + + ArrayList wftypeList=new ArrayList(); + ArrayList wftypecountList=new ArrayList(); + ArrayList workflowList=new ArrayList(); + ArrayList workflowcountList=new ArrayList(); + ArrayList newremarkwfcount0List=new ArrayList();//待办数量 + ArrayList newremarkwfcount1List=new ArrayList();//反馈数量 + ArrayList wftypeworkflowList=new ArrayList(); + ArrayList wfovertimecountList=new ArrayList();//超时数量 + ArrayList wfsupedcountList = new ArrayList(); //被督办数量 + + Hashtable wfNodeHahstable = new Hashtable(); + + + Map newremarkwfcount0Map=new Hashtable();//待办数量 + Map newremarkwfcount1Map=new Hashtable();//反馈数量 + Map wftypeworkflowMap=new Hashtable(); + Map wfovertimecountMap=new Hashtable();//超时数量 + Map wfsupedcountMap = new Hashtable(); //被督办数量 + + + int totalcount=0; + String wftypes = ""; + String demoLeftMenus = ""; + //String SQL = ""; + //SQL = "select workflowtype, workflowid from workflow_currentoperator where (isremark='0' or isremark='1' or isremark='5' or isremark='8' or isremark='9' or isremark='7') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and exists (select 1 from workflow_requestbase c where c.workflowid=workflow_currentoperator.workflowid and c.requestid=workflow_currentoperator.requestid)"; + + StringBuffer sqlsb = new StringBuffer(); + sqlsb.append("select workflowtype, workflowid "); + sqlsb.append(" from workflow_currentoperator "); + sqlsb.append(" where ( (isremark = '0' and (takisremark is null or takisremark=0)) or "); + sqlsb.append(" isremark = '1' or isremark = '5' or isremark = '8' or isremark = '9' or isremark = '7') "); + sqlsb.append(" and islasttimes = 1 "); + if(!"".equals(cursltwftypeid)){ + sqlsb.append(" and workflowtype in ( ").append(cursltwftypeid).append(")"); + } + //if(!"".equals(cursltwfid)){ + // sqlsb.append(" and workflowid = ").append(cursltwfid); + //} + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype); + sqlsb.append(" and workflowid in (select id from workflow_base where (isvalid=1 or isvalid=3) ) "); + sqlsb.append(" and exists (select 1 "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.workflowid = workflow_currentoperator.workflowid "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(" and c.requestid = workflow_currentoperator.requestid)"); + + //RecordSet.executeSql("select workflowtype, workflowid, viewtype, count(distinct requestid) workflowcount from workflow_currentoperator where (isremark='0' or isremark='1' or isremark='5') and islasttimes=1 and (isprocessed is null or (isprocessed<>'2' and isprocessed<>'3')) and userid=" + resourceid + " and usertype= " + usertype +" group by workflowtype, workflowid, viewtype order by workflowtype, workflowid " ) ; + //System.out.print("select workflowtype, workflowid from workflow_currentoperator where (isremark='0' or isremark='1' or isremark='5') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and exists (select 1 from workflow_requestbase c where c.requestid=workflow_currentoperator.requestid) group by workflowtype, workflowid order by workflowtype, workflowid " ) ; + //RecordSet.executeSql("select distinct a.workflowtype, a.workflowid from workflow_currentoperator a ,workflow_requestbase b where a.requestid=b.requestid and (b.currentnodetype <> '3' or (a.isremark ='1' and b.currentnodetype = '3')) and (a.isremark='0' or a.isremark='1' or a.isremark='5') and a.userid=" + resourceid + " and a.usertype= " + usertype +" group by a.workflowtype, a.workflowid order by a.workflowtype, a.workflowid " ) ; + if(!superior) + { + //SQL += " AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE workflow_currentoperator.workflowid = b.workflowid AND workflow_currentoperator.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "; + sqlsb.append(" AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE workflow_currentoperator.workflowid = b.workflowid AND workflow_currentoperator.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "); + } + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + //SQL += " group by workflowtype, workflowid order by workflowtype, workflowid"; + sqlsb.append(" group by workflowtype, workflowid order by workflowtype, workflowid "); + RecordSet.executeSql(sqlsb.toString()); + while(RecordSet.next()){ + String theworkflowid = Util.null2String(RecordSet.getString("workflowid")) ; + String theworkflowtype = Util.null2String(RecordSet.getString("workflowtype")) ; + + theworkflowid = WorkflowVersion.getActiveVersionWFID(theworkflowid); + if(WorkflowComInfo.getIsValid(theworkflowid).equals("1")) + { + + /* added by wdl 2006-06-14 left menu advanced menu */ + if(selectedworkflow.indexOf("T"+theworkflowtype+"|")==-1 && fromAdvancedMenu==1) continue; + if(selectedworkflow.indexOf("W"+theworkflowid+"|")==-1 && fromAdvancedMenu==1) continue; + /* added end */ + + if(wftypeworkflowList.indexOf(theworkflowtype+","+theworkflowid)<0){ + wftypeworkflowList.add(theworkflowtype+","+theworkflowid); + } + int wftindex = wftypeList.indexOf(theworkflowtype) ; + if(wftindex == -1) { + wftypeList.add(theworkflowtype) ; + wftypecountList.add("0") ; + } + wftindex = workflowList.indexOf(theworkflowid) ; + if(wftindex == -1) { + workflowList.add(theworkflowid) ; + workflowcountList.add("0") ; + } + if(selectedworkflow.indexOf("PW"+theworkflowid+"N")!=-1 && fromAdvancedMenu==1){ + int bx = selectedworkflow.indexOf("PW"+theworkflowid+"N"); + String tmp = selectedworkflow.substring(bx+("PW"+theworkflowid+"N").length()); + bx = tmp.indexOf("SP^AN"); + tmp = tmp.substring(0, bx); + //System.out.println("theworkflowid = " + theworkflowid + " tmp = " + tmp); + wfNodeHahstable.put(theworkflowid, tmp); + } + } + } + + + StringBuffer wftypesb = new StringBuffer(); + StringBuffer wfsb = new StringBuffer(); + StringBuffer wfnodesb = new StringBuffer(); + + for(int i=0;i 0) { + wftypesb = wftypesb.delete(0, 1); + wfsb = wfsb.delete(0, 1); + } + if (wfnodesb.indexOf(",") == 0) { + wfnodesb = wfnodesb.delete(0, 1); + } + + int newcount=0; + int newcount1=0; + + //System.out.println("tworkflowNodeIDs = " + tworkflowNodeIDs); + sqlsb = new StringBuffer(); + sqlsb.append("select a.workflowtype, a.workflowid, a.viewtype, count(distinct a.requestid) workflowcount "); + sqlsb.append(" from workflow_currentoperator a "); + sqlsb.append(" where (((isremark=0 and (takisremark is null or takisremark=0 )) and isprocessed is null) "); + sqlsb.append(" or isremark = '1' or "); + sqlsb.append(" isremark = '8' or isremark = '9' or isremark = '7') "); + sqlsb.append(" and islasttimes = 1 "); + if(!"".equals(cursltwftypeid)){ + sqlsb.append(" and workflowtype in (").append(cursltwftypeid).append(")"); + } + //if(!"".equals(cursltwfid)){ + // sqlsb.append(" and workflowid = ").append(cursltwfid); + //} + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype); + if(!"".equals(wftypesb.toString())){ + sqlsb.append(" and a.workflowtype in ( ").append(wftypesb).append(") "); + } + if(!"".equals(wfsb.toString())){ + sqlsb.append(" and a.workflowid in (").append(wfsb).append(")"); + } + sqlsb.append(" and exists (select c.requestid "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.requestid = a.requestid"); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(")"); + //SQL = "select a.viewtype, count(distinct a.requestid) workflowcount from workflow_currentoperator a where ((isremark='0' and (isprocessed is null or (isprocessed<>'2' and isprocessed<>'3'))) or isremark='1' or isremark='8' or isremark='9' or isremark='7') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and a.workflowtype="+tworkflowtype+" and a.workflowid="+tworkflowid+" and exists (select c.requestid from workflow_requestbase c where c.requestid=a.requestid) "; + if(!"".equals(tworkflowNodeIDs)){ + sqlsb.append(" and a.nodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(tworkflowNodeIDs) + ") "); + } + if(!superior) + { + sqlsb.append(" AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE a.workflowid = b.workflowid AND a.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "); + } + + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + + sqlsb.append(" group by a.viewtype, a.workflowtype, a.workflowid"); + //System.out.println("************" + sqlsb.toString()); + rs.executeSql(sqlsb.toString()) ; + while(rs.next()){ + String tworkflowtype = Util.null2String(rs.getString("workflowtype")); + String tworkflowid = WorkflowVersion.getActiveVersionWFID(Util.null2String(rs.getString("workflowid"))); + + int theworkflowcount = Util.getIntValue(rs.getString("workflowcount"),0) ; + + int viewtype = Util.getIntValue(rs.getString("viewtype"),2) ; + int wfindex = workflowList.indexOf(tworkflowid) ; + if(wfindex != -1) { + workflowcountList.set(wfindex,""+(Util.getIntValue((String)workflowcountList.get(wfindex),0)+theworkflowcount)) ; + if(viewtype==0){ + newcount=theworkflowcount; + //newremarkwfcount0Map.put(tworkflowid, newcount); + Object tempobj = newremarkwfcount0Map.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + newremarkwfcount0Map.put(tworkflowid, wf0countindex + newcount); + } else { + newremarkwfcount0Map.put(tworkflowid, newcount); + } + + //newremarkwfcount0List.add(""+newcount); + } + if(viewtype==-1){ + newcount1=theworkflowcount; + Object tempobj = newremarkwfcount1Map.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + newremarkwfcount1Map.put(tworkflowid, wf0countindex + newcount1); + } else { + newremarkwfcount1Map.put(tworkflowid, newcount1); + } + //newremarkwfcount1List.add(""+newcount1); + + } + } + + int wftindex = wftypeList.indexOf(tworkflowtype) ; + if(wftindex != -1) { + wftypecountList.set(wftindex,""+(Util.getIntValue((String)wftypecountList.get(wftindex), 0)+theworkflowcount)) ; + } + totalcount += theworkflowcount; + } +// newremarkwfcount0List.add(""+newcount); + //newremarkwfcount1List.add(""+newcount1); + + int overtimecount=0; +// if(templist.size()==2){ + + sqlsb = new StringBuffer(); + sqlsb.append("select a.workflowtype,a.workflowid, count(distinct a.requestid) overcount "); + sqlsb.append(" from workflow_currentoperator a "); + sqlsb.append(" where ((((isremark=0 and (takisremark is null or takisremark=0 )) and (isprocessed = '2' or isprocessed = '3')) or "); + sqlsb.append(" isremark = '5') "); + sqlsb.append(" and islasttimes = 1 "); + if(!"".equals(cursltwftypeid)){ + sqlsb.append(" and workflowtype in (").append(cursltwftypeid).append(")"); + } + //if(!"".equals(cursltwfid)){ + // sqlsb.append(" and workflowid = ").append(cursltwfid); + //} + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype); + if(!"".equals(wftypesb.toString())){ + sqlsb.append(" and a.workflowtype in (").append(wftypesb).append(")"); + } + if(!"".equals(wfsb.toString())){ + sqlsb.append(" and a.workflowid in (").append(wfsb).append(")"); + } + sqlsb.append(" and exists (select 1 "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.workflowid = a.workflowid "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(" and c.requestid = a.requestid)"); + //SQL = "select count(distinct a.requestid) overcount from workflow_currentoperator a where ((isremark='0' and (isprocessed='2' or isprocessed='3')) or isremark='5') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and a.workflowtype="+tworkflowtype+" and a.workflowid ="+tworkflowid+" and exists (select 1 from workflow_requestbase c where c.workflowid=a.workflowid and c.requestid=a.requestid)" ; + + if(!"".equals(tworkflowNodeIDs)){ + sqlsb.append(" and a.nodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(tworkflowNodeIDs) + ") "); + } + if(!superior) + { +// sqlsb.append(" AND EXISTS (SELECT 1 FROM workFlow_CurrentOperator b WHERE b.islasttimes='1' AND b.userid=" + user.getUID() + " and b.usertype= " + usertype + ") "); + sqlsb.append(" AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE a.workflowid = b.workflowid AND a.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "); + } + + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + sqlsb.append(" GROUP BY a.workflowtype, a.workflowid "); + RecordSet.executeSql(sqlsb.toString()) ; + //System.out.println("3 = "+sqlsb.toString()); + while (RecordSet.next()) { + String tworkflowtype = Util.null2String(RecordSet.getString("workflowtype")); + String tworkflowid = WorkflowVersion.getActiveVersionWFID(Util.null2String(RecordSet.getString("workflowid"))); + + overtimecount=RecordSet.getInt("overcount"); + + int wfindex = workflowList.indexOf(tworkflowid) ; + if(wfindex != -1) { + workflowcountList.set(wfindex,""+(Util.getIntValue((String)workflowcountList.get(wfindex),0) + overtimecount)) ; + } + int wftindex = wftypeList.indexOf(tworkflowtype) ; + if(wftindex != -1) { + wftypecountList.set(wftindex,""+(Util.getIntValue((String)wftypecountList.get(wftindex),0)+overtimecount)) ; + } + Object tempobj = wfovertimecountMap.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + wfovertimecountMap.put(tworkflowid, wf0countindex + overtimecount); + } else { + wfovertimecountMap.put(tworkflowid, overtimecount); + } + totalcount += overtimecount; + } + + //求被督办的流程,和其他查询不冲突 + sqlsb = new StringBuffer(); + sqlsb.append("select a.workflowtype, a.workflowid, count(0) workflowcount "); + sqlsb.append(" from workflow_currentoperator a "); + sqlsb.append(" where ((isremark = '0' and (isprocessed is null or "); + sqlsb.append(" (isprocessed <> '2' and isprocessed <> '3'))) or isremark = '1' or "); + sqlsb.append(" isremark = '8' or isremark = '9' or isremark = '7') "); + sqlsb.append(" and islasttimes = 1 "); + if(!"".equals(cursltwftypeid)){ + sqlsb.append(" and workflowtype in (").append(cursltwftypeid).append(")"); + } + + sqlsb.append(" and userid = ").append(resourceid); + sqlsb.append(" and usertype = ").append(usertype); + if(!"".equals(wftypesb.toString())){ + sqlsb.append(" and a.workflowtype in (").append(wftypesb).append(")"); + } + if(!"".equals(wfsb.toString())){ + sqlsb.append(" and a.workflowid in (").append(wfsb).append(")"); + } + sqlsb.append(" and exists (select c.requestid "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.requestid = a.requestid"); + sqlsb.append(" and ( select count(0) from workflow_requestlog where requestid = a.requestid and logtype='s') > 0"); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(")"); + //SQL = "select a.viewtype, count(distinct a.requestid) workflowcount from workflow_currentoperator a where ((isremark='0' and (isprocessed is null or (isprocessed<>'2' and isprocessed<>'3'))) or isremark='1' or isremark='8' or isremark='9' or isremark='7') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and a.workflowtype="+tworkflowtype+" and a.workflowid="+tworkflowid+" and exists (select c.requestid from workflow_requestbase c where c.requestid=a.requestid) "; + if(!"".equals(tworkflowNodeIDs)){ + sqlsb.append(" and a.nodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(tworkflowNodeIDs) + ") "); + } + if(!superior) + { +// sqlsb.append(" AND EXISTS (SELECT 1 FROM workFlow_CurrentOperator b WHERE b.islasttimes='1' AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "); + sqlsb.append(" AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE a.workflowid = b.workflowid AND a.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype + ") "); + } + + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + sqlsb.append(" GROUP BY a.workflowtype, a.workflowid"); + + RecordSet.executeSql(sqlsb.toString()); + //System.out.println("4 = "+sqlsb.toString()); + while (RecordSet.next()) { + String tworkflowtype = Util.null2String(RecordSet.getString("workflowtype")); + String tworkflowid = WorkflowVersion.getActiveVersionWFID(Util.null2String(RecordSet.getString("workflowid"))); + overtimecount=RecordSet.getInt(3); + Object tempobj = wfsupedcountMap.get(tworkflowid); + if (tempobj != null) { + int wf0countindex = (Integer)tempobj ; + wfsupedcountMap.put(tworkflowid, wf0countindex + overtimecount); + } else { + wfsupedcountMap.put(tworkflowid, overtimecount); + } + } + + for(int i=0; i maps=new ArrayList(0); + for (int j = 0; j < workflowList.size(); j++) { + workflowid = (String) workflowList.get(j); + String curtypeid = WorkflowComInfo.getWorkflowtype(workflowid); + if (!curtypeid.equals(typeid)) + continue; + + workflowcount = (String) workflowcountList.get(j); + workflowname = WorkflowComInfo.getWorkflowname(workflowid); + int tempind = wftypeworkflowList.indexOf(typeid + "," + workflowid); + int ovtimenum = 0; + newremarkwfcount1 = "0"; + newremarkwfcount0 = "0"; + wfsupedcount = "0"; + + if (tempind > -1) { + Object tempovtimenumObj = wfovertimecountMap.get(workflowid); + if (tempovtimenumObj != null) { + ovtimenum = (Integer)tempovtimenumObj; + } else { + ovtimenum = 0; + } + + Object tempnewremarkwfcount0Obj = newremarkwfcount0Map.get(workflowid); + if (tempnewremarkwfcount0Obj != null) { + newremarkwfcount0 = (Integer)tempnewremarkwfcount0Obj + ""; + } else { + newremarkwfcount0 = "0"; + } + + Object tempnewremarkwfcount1Obj = newremarkwfcount1Map.get(workflowid); + if (tempnewremarkwfcount1Obj != null) { + newremarkwfcount1 = (Integer)tempnewremarkwfcount1Obj + ""; + } else { + newremarkwfcount1 = "0"; + } + + Object tempwfsupedcountObj = wfsupedcountMap.get(workflowid); + if (tempwfsupedcountObj != null) { + wfsupedcount = (Integer)tempwfsupedcountObj + ""; + } else { + wfsupedcount = "0"; + } + } + String t_nodeids = Util.null2String((String) wfNodeHahstable.get(workflowid)); + Map map=new HashMap(); + map.put("name",Util.toScreen(workflowname, user.getLanguage())); + map.put("workflowid",workflowid); + map.put("nodeids",t_nodeids); + map.put("flowNew",Util.toScreen(newremarkwfcount0, user.getLanguage())); + map.put("flowResponse",Util.toScreen(newremarkwfcount1, user.getLanguage())); + map.put("flowOut",ovtimenum); + map.put("flowAll",Util.toScreen(workflowcount,user.getLanguage())); + map.put("flowSup",Util.toScreen(wfsupedcount, user.getLanguage())); + flowNew+=Integer.valueOf(map.get("flowNew")+""); + flowResponse+=Integer.valueOf(map.get("flowResponse")+""); + flowOut+=Integer.valueOf(map.get("flowOut")+""); + flowAll+=Integer.valueOf(map.get("flowAll")+""); + flowSup+=Integer.valueOf(map.get("flowSup")+""); + maps.add(map); + } + + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":"+flowNew+","; + demoLeftMenus += "\"flowResponse\":"+flowResponse+","; + demoLeftMenus += "\"flowOut\":"+flowOut+","; + demoLeftMenus += "\"flowAll\":"+flowAll+","; + demoLeftMenus += "\"flowSup\":"+flowSup; + demoLeftMenus += "},"; + + demoLeftMenus += "\"attr\":{"; + demoLeftMenus += "\"typeid\":"+typeid+","; + demoLeftMenus += "\"flowNew\":"+flowNew+","; + demoLeftMenus += "\"flowResponse\":"+flowResponse+","; + demoLeftMenus += "\"flowOut\":"+flowOut+","; + demoLeftMenus += "\"flowAll\":"+flowAll+","; + demoLeftMenus += "\"flowSup\":"+flowSup; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + + if (maps.size() > 0) { + demoLeftMenus += ","; + } + + for(int x=0;x0 ){ + //demoLeftMenus+=","; + } + while(rs.next()){ + String _typeid = rs.getString(1); + String _typename = rs.getString(2); + if(demoLeftMenus.length()>10){ + demoLeftMenus +=","; + } + int eas_wf_count = 0 ; + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select fid,fname,fworkflowid from "+eas_workflowinfo+" where FCategoryID="+_typeid+" order by fseq')");//查询EAS流程 + eas_wf_count = RecordSet.getCounts(); + int wfcountall = 0 ; + while(RecordSet.next()){ + String _wfid = RecordSet.getString(1); + String _wfname = RecordSet.getString(2); + String _fworkflowid = Util.null2String(RecordSet.getString("fworkflowid")); + rs1.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FPersonUserNumber=''"+loginid+"'' AND FWorkFlowID=''"+_fworkflowid+"'' and FState=''1'' ')"); + int wfcount = 0; + if(rs1.next()){ + wfcount = Util.getIntValue(rs1.getString(1),0); + } + wfcountall += wfcount ; + //if(wfcount>0){ + demoLeftMenus += "{"; + //demoLeftMenus += "\"name\":\""+_wfname+"\","; + demoLeftMenus+="\"__domid__\":\"__wf_"+_wfid+"\","; + //demoLeftMenus += "\"hasChildren\":false,"; + demoLeftMenus += "\"attr\":{"; + //demoLeftMenus += "\"workflowid\":"+_wfid+","; + //demoLeftMenus += "\"nodeids\":\"\","; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcount+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "},"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcount+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + demoLeftMenus += ","; + //} + } + //if(eas_wf_count>0){ + // demoLeftMenus = demoLeftMenus.substring(0,demoLeftMenus.length()-1); + //} + //demoLeftMenus += ","; + demoLeftMenus += "{"; + demoLeftMenus+=" \"__domid__\":\"__type_"+_typeid+"\","; + demoLeftMenus += "\"attr\":{"; + //demoLeftMenus += "\"typeid\":"+_typeid+","; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcountall+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "},"; + demoLeftMenus += "\"numbers\":{"; + demoLeftMenus += "\"flowNew\":0,"; + demoLeftMenus += "\"flowResponse\":0,"; + demoLeftMenus += "\"flowOut\":0,"; + demoLeftMenus += "\"flowAll\":"+wfcountall+","; + demoLeftMenus += "\"flowSup\":0"; + demoLeftMenus += "}"; + demoLeftMenus += "}"; + } + demoLeftMenus += "]"; + out.print(demoLeftMenus); + //System.out.print(demoLeftMenus); + %> + diff --git a/src/test/resources/WEB-INF/ecology/workflow/search/WFSearchResult.jsp b/src/test/resources/WEB-INF/ecology/workflow/search/WFSearchResult.jsp new file mode 100755 index 0000000..cccbc6b --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/search/WFSearchResult.jsp @@ -0,0 +1,1729 @@ +<%@ page buffer="1024kb" autoFlush="false"%> + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@page import="weaver.workflow.workflow.WorkflowVersion"%> +<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%><%--added by xwj for td2023 on 2005-05-20--%> +<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%> +<%@ taglib uri="/browserTag" prefix="brow"%> +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="weaver.general.GCONST" %> +<%@ page import="weaver.general.IsGovProj" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.workflow.search.WfAdvanceSearchUtil" %> +<%@ page import="java.util.*" %> + + + + + + + + + + + + + +<% + /*判断页面是否需要显示自己的头部区域,如果需要则跳转处理*/ + String needHeader = request.getParameter("needHeader"); + if( needHeader == null || needHeader.equals("true") ){ + request.getRequestDispatcher("WFRemind.jsp?needHeader=true&" + request.getQueryString()).forward(request, response); + return; + } + String method=""; + String workflowid = ""; + String mulitwfid = Util.null2String(request.getParameter("multiSubIds")); + String viewcondition = Util.null2String(request.getParameter("viewcondition")); + System.out.println("viewcondition = "+viewcondition); + if(!mulitwfid.equals("")) { + method = Util.null2String(request.getParameter("method")); + String wftype=Util.null2String(request.getParameter("wftype")); + int flowAll=Util.getIntValue(Util.null2String(request.getParameter("flowAll")), 0); + int flowNew=Util.getIntValue(Util.null2String(request.getParameter("flowNew")), 0); + workflowid = Util.null2String(request.getParameter("workflowid")); + response.sendRedirect("/workflow/request/RequestListOperation.jsp?multiSubIds="+mulitwfid+"&workflowid="+workflowid+"&method="+method+"&wftype="+wftype+"&flowAll="+flowAll+"&flowNew="+flowNew+"&viewcondition="+viewcondition); + return; + } + + String eas_workflowinfo = Util.null2String(RecordSet.getPropValue("eas","workflowtypeview")); + String eas_requestinfo = Util.null2String(RecordSet.getPropValue("eas","VWorkFlowDo")); + String eas_linkname = Util.null2String(RecordSet.getPropValue("eas","linkname")); +%> + + + + + + + + + +<%! + private String getLike(HttpServletRequest request,String parameter){ + parameter=request.getParameter(parameter); + if(parameter==null){ + parameter="'%'"; + }else{ + parameter="'%"+parameter+"%'"; + } + return parameter; + } +%> + +<% + + int isgoveproj = Util.getIntValue(IsGovProj.getPath(), 0);//0:非政务系统,1:政务系统 + + + String imagefilename = "/images/hdDOC_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(197, user.getLanguage()) + ":" + SystemEnv.getHtmlLabelName(648, user.getLanguage()); + String needfav = "1"; + String needhelp = ""; + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + int viewType = Util.getIntValue(Util.null2String(request.getParameter("viewType")), 0); + int processId = Util.getIntValue(request.getParameter("processId"),0); + int sysId = Util.getIntValue(request.getParameter("sysId"),0); + String overtimetype=Util.null2String(request.getParameter("overtimetype")); + String myrequest=Util.null2String(request.getParameter("myrequest")); + System.out.println("myrequest = "+myrequest); +%> + + <%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %> +
+ <% + //add by Dracula @2014-1-13 + int ownerdepartmentid = Util.getIntValue(request.getParameter("ownerdepartmentid"),0); + int creatersubcompanyid=Util.getIntValue(request.getParameter("creatersubcompanyid"),0); + int unophrmid=Util.getIntValue(request.getParameter("unophrmid"),0); + String recievedateselect = ""; + String datecondition = ""; + String recievedatefrom = ""; + String recievedateto = ""; + String createdatefrom = ""; + String createdateto = ""; + String operatedateselect = ""; + String operatedatefrom = ""; + String operatedateto = ""; + String branchid = ""; + String cdepartmentid = ""; + String isFromMessage = Util.null2String(request.getParameter("isFromMessage")); + String processing = Util.null2String(request.getParameter("processing")); + String scope = Util.null2String(request.getParameter("viewScope")); + + + String requestname = Util.null2String(request.getParameter("requestname")); + String requestmark = Util.null2String(request.getParameter("requestmark")); + String workflowtypeid = Util.null2String(request.getParameter("workflowtypeid")); + //String workflowid = Util.null2String(request.getParameter("workflowid")); + String creater = Util.null2String(request.getParameter("creater")); + String craetedateselect = Util.null2String(request.getParameter("craetedateselect")); + String createsdate = Util.null2String(request.getParameter("createsdate")); + String createedate = Util.null2String(request.getParameter("createedate")); + String status = Util.null2String(request.getParameter("status")); + String unoperator = Util.null2String(request.getParameter("unoperator")); + + String sqlWhere_oa = ""; + String sqlWhere_eas = ""; + if(!requestname.equals("")){ + sqlWhere_oa += " and requestname like '%"+requestname+"%'"; + sqlWhere_eas += " and fsubject like ''%"+requestname+"%''" ; + } + if(!requestmark.equals("")){ + sqlWhere_oa += " and requestmark like '%"+requestmark+"%'"; + sqlWhere_eas += " and FProcdeFNumber like ''%"+requestmark+"%''" ; + } + if(!workflowtypeid.equals("")){ + //sqlWhere += " and workflowtype='"+workflowtypeid+"'"; + sqlWhere_oa += " and ( t.workflowid IN (SELECT id FROM workflow_base WHERE workflowtype="+workflowtypeid+"))"; + sqlWhere_eas += " and fworkflowid IN (SELECT FworkflowID FROM "+eas_workflowinfo+" WHERE FCategoryID="+workflowtypeid+")" ; + } + if(!workflowid.equals("")){ + sqlWhere_oa += " and t.workflowid="+workflowid; + sqlWhere_eas += " and fworkflowid=(select fworkflowid from "+eas_workflowinfo+" where fid="+workflowid+") "; + } + if(!creater.equals("")){ + sqlWhere_oa += " and creater="+creater ; + sqlWhere_eas += " and FCreatorNumber=''"+EASUtil.getLoginid(creater)+"'' "; + } + if(!unoperator.equals("")){ + sqlWhere_oa += " and userid='"+unoperator+"' "; + sqlWhere_eas += " and FPersonUserNumber=''"+EASUtil.getLoginid(unoperator)+"'' "; + } + if(!status.equals("")){ + //TODO 代办 + if(status.equals("1")){ + sqlWhere_oa += " and isremark in ('0','1','5','7','8','9') "; + sqlWhere_eas += " and fstate=''1'' " ; + }else if(status.equals("2")){ + //已办 + sqlWhere_oa += " and isremark in (2,4) "; + sqlWhere_eas += " and fstate=''16'' " ; + }else{ + //全部 + } + } + if(!createsdate.equals("")){ + sqlWhere_oa += " and createdate>='"+createsdate+"'" ; + sqlWhere_eas += " and to_char(fcreatedtime, ''yyyy-mm-dd'') >=''"+createsdate+"'' " ; + } + if(!createedate.equals("")){ + sqlWhere_oa += " and createdate<='"+createedate+"'" ; + sqlWhere_eas += " and to_char(fcreatedtime, ''yyyy-mm-dd'') <=''"+createedate+"'' " ; + } + + + //System.out.println("类型:"+scope); + String urlType = ""; + if(scope.equals("doing")){ + urlType = "1"; + if(offical.equals("1")){ + urlType = "9"; + } + } + else if(scope.equals("done")){ + urlType = "2"; + if(offical.equals("1")){ + urlType = "10"; + } + } + else if(scope.equals("complete")){ + urlType = "3"; + if(offical.equals("1")){ + urlType = "11"; + } + } + else if(scope.equals("mine")){ + urlType = "4"; + if(offical.equals("1")){ + urlType = "12"; + } + } + else + urlType = "0"; + // + String archivestatus = ""; + //add by bpf 2013-11-07 + String flowTitle=getLike(request,"flowTitle");//流程名称 + String workflowtype = ""; + String wfstatu = ""; + String nodetype = ""; + String fromdate = ""; + String todate = ""; + String creatertype = ""; + String createrid = ""; + String createrid2= Util.null2String(request.getParameter("createrid2")); + String requestlevel = ""; + String fromdate2 = ""; + String todate2 = ""; + String workcode = ""; + //urlType = Util.null2String(request.getParameter("urlType")); + String querys = Util.null2String(request.getParameter("query")); + String fromself = Util.null2String(request.getParameter("fromself")); + //System.out.println("fromself:"+fromself); + String fromselfSql = Util.null2String(request.getParameter("fromselfSql")); + String isfirst = Util.null2String(request.getParameter("isfirst")); + String docids = Util.null2String(request.getParameter("docids")); + String flag = Util.null2String(request.getParameter("flag")); + int date2during = Util.getIntValue(Util.null2String(request.getParameter("date2during")), 0); + //增加一个页面时间维度的查询 add by Dracula @2014-1-9 + String timecondition = Util.null2String(request.getParameter("timecondition")); + //System.out.println(timeCondition); + + //out.print(fromselfSql+"******"); + + try { + branchid = Util.null2String((String) session.getAttribute("branchid")); + } catch (Exception e) { + branchid = ""; + } + int olddate2during = 0; + BaseBean baseBean = new BaseBean(); + String date2durings = ""; + try { + date2durings = Util.null2String(baseBean.getPropValue("wfdateduring", "wfdateduring")); + } catch (Exception e) { + } + String[] date2duringTokens = Util.TokenizerString2(date2durings, ","); + if (date2duringTokens.length > 0) { + olddate2during = Util.getIntValue(date2duringTokens[0], 0); + } + //add by xhheng @20050414 for TD 1545 + int iswaitdo = Util.getIntValue(request.getParameter("iswaitdo"), 0); + int isovertime = Util.getIntValue(request.getParameter("isovertime"), 0); + if (fromself.equals("1")) { + SearchClause.resetClause(); //added by xwj for td2045 on2005-05-26 + workflowtype = Util.null2String(request.getParameter("workflowtype")); + wfstatu = Util.null2String(request.getParameter("wfstatu")); + workflowid = Util.null2String(request.getParameter("workflowid")); + nodetype = Util.null2String(request.getParameter("nodetype")); + fromdate = Util.null2String(request.getParameter("fromdate")); + todate = Util.null2String(request.getParameter("todate")); + creatertype = Util.null2String(request.getParameter("creatertype")); + createrid = Util.null2String(request.getParameter("createrid")); + requestlevel = Util.null2String(request.getParameter("requestlevel")); + fromdate2 = Util.null2String(request.getParameter("fromdate2")); + todate2 = Util.null2String(request.getParameter("todate2")); + workcode = Util.null2String(request.getParameter("workcode")); + cdepartmentid = Util.null2String(request.getParameter("cdepartmentid")); + recievedateselect = Util.null2String(request.getParameter("recievedateselect")); + datecondition = Util.null2String(request.getParameter("createdateselect")); + recievedatefrom = Util.null2String(request.getParameter("recievedatefrom")); + recievedateto = Util.null2String(request.getParameter("recievedateto")); + createdatefrom = Util.null2String(request.getParameter("createdatefrom")); + createdateto = Util.null2String(request.getParameter("createdateto")); + operatedateselect = Util.null2String(request.getParameter("operatedateselect")); + operatedatefrom = Util.null2String(request.getParameter("operatedatefrom")); + operatedateto = Util.null2String(request.getParameter("operatedateto")); + archivestatus = Util.null2String(request.getParameter("archivestatus")); + } else { + + workflowid = SearchClause.getWorkflowId(); + nodetype = SearchClause.getNodeType(); + fromdate = SearchClause.getFromDate(); + todate = SearchClause.getToDate(); + creatertype = SearchClause.getCreaterType(); + createrid = SearchClause.getCreaterId(); + requestlevel = SearchClause.getRequestLevel(); + fromdate2 = SearchClause.getFromDate2(); + todate2 = SearchClause.getToDate2(); + cdepartmentid = SearchClause.getDepartmentid(); + } + + + /**自定义查询条件**/ + String customid=Util.null2String(request.getParameter("customname"));//查询条件id + String customSearch=""; + String customResult=""; + if(!customid.equals("")){ + //添加了查询条件 + + + customSearch=WorkflowSearchCustom.getSearchCustomStr(RecordSet,customid,request); + customResult=WorkflowSearchCustom.getResultCustomStr(RecordSet,customid,request); + } + + String cdepartmentidspan = ""; + ArrayList cdepartmentidArr = Util.TokenizerString(cdepartmentid, ","); + for (int i = 0; i < cdepartmentidArr.size(); i++) { + String tempcdepartmentid = (String) cdepartmentidArr.get(i); + if (cdepartmentidspan.equals("")) + cdepartmentidspan += DepartmentComInfo.getDepartmentname(tempcdepartmentid); + else + cdepartmentidspan += "," + DepartmentComInfo.getDepartmentname(tempcdepartmentid); + } + + String newsql = ""; + if (!workflowid.equals("") && !workflowid.equals("0")){ + String __tempworkflowids = WorkflowVersion.getAllVersionStringByWFIDs(workflowid); + if(__tempworkflowids.equals("")){ + __tempworkflowids = workflowid ; + } + newsql += " and t1.workflowid in (" + __tempworkflowids + ") "; + } + //增加时间维度查询条件 for ecology8 add by Dracula @2014-1-9 + if(!timecondition.equals("")){ + if("1".equals(timecondition)) + newsql += " and t1.createdate>='" + TimeUtil.getToday()+ "'"; + else if("2".equals(timecondition)) + newsql += " and t1.createdate>='" + TimeUtil.getFirstDayOfWeek()+ "'"; + else if("3".equals(timecondition)) + newsql += " and t1.createdate>='" + TimeUtil.getFirstDayOfMonth()+ "'"; + else if("4".equals(timecondition)) + newsql += " and t1.createdate>='" + TimeUtil.getFirstDayOfSeason()+ "'"; + else if("5".equals(timecondition)) + newsql += " and t1.createdate>='" + TimeUtil.getFirstDayOfTheYear()+ "'"; + } + if (date2during > 0 && date2during < 37) + newsql += WorkflowComInfo.getDateDuringSql(date2during); + if (fromself.equals("1")) { + if (!nodetype.equals("")) + newsql += " and t1.currentnodetype='" + nodetype + "'"; + if (!fromdate.equals("")) + newsql += " and t1.createdate>='" + fromdate + "'"; + if (!todate.equals("")) + newsql += " and t1.createdate<='" + todate + "'"; + if (!fromdate2.equals("")) + newsql += " and t2.receivedate>='" + fromdate2 + "'"; + if (!todate2.equals("")) + newsql += " and t2.receivedate<='" + todate2 + "'"; + //if (!workcode.equals("")) + // newsql += " and t1.creatertype= '0' and t1.creater in(select id from hrmresource where workcode like '%" + workcode + "%')"; + if (!cdepartmentid.equals("")) { + String tempWhere = ""; + ArrayList tempArr = Util.TokenizerString(cdepartmentid, ","); + for (int i = 0; i < tempArr.size(); i++) { + String tempcdepartmentid = (String) tempArr.get(i); + if (tempWhere.equals("")) + tempWhere += "departmentid=" + tempcdepartmentid; + else + tempWhere += " or departmentid=" + tempcdepartmentid; + } + if (!tempWhere.equals("")) + newsql += " and exists(select 1 from hrmresource where t1.creater=id and t1.creatertype='0' and (" + tempWhere + "))"; + } + + if (!requestlevel.equals("")) { + newsql += " and t1.requestlevel=" + requestlevel; + } + + if (!querys.equals("1")) { + if (!fromselfSql.equals("")) + newsql += " and " + fromselfSql; + } else { + if (fromself.equals("1")) + newsql += " and islasttimes=1 "; + } + + } + + String resourceid = Util.null2String(request.getParameter("resourceid")); + String CurrentUser = "".equals(resourceid) ? Util.null2String((String) session.getAttribute("RequestViewResource")) : resourceid; + + String userID = String.valueOf(user.getUID()); + String logintype = "" + user.getLogintype(); + int usertype = 0; + if (logintype.equals("2")) + usertype = 1; + if (CurrentUser.equals("")) { + CurrentUser = "" + user.getUID(); + } + boolean superior = false; //是否为被查看者上级或者本身 + + + if (userID.equals(CurrentUser)) { + superior = true; + } else { + RecordSet.executeSql("SELECT * FROM HrmResource WHERE ID = " + CurrentUser + " AND managerStr LIKE '%" + userID + "%'"); + + if (RecordSet.next()) { + superior = true; + } + } + + String sqlwhere = ""; + if (isovertime == 1) { + + if("0".equals(overtimetype)){ + sqlwhere = "where t1.requestid = t2.requestid " + //+ " and t2.isremark='0' AND t2.isprocessed='3' and t2.islasttimes=1 " + + " AND exists(select 1 from SysPoppupRemindInfonew z2 " + + " where t1.requestid=z2.requestid and z2.type=10 " + + " and z2.userid = " + + user.getUID() + + " and z2.usertype='" + + (Util.getIntValue(logintype, 1) - 1) + + "' )"; + }else{ + sqlwhere = "where t1.requestid = t2.requestid " + //+ " and t2.isremark = 5 AND (t2.isprocessed = 1 OR t2.isprocessed = 2) " + + " AND exists(select 1 from SysPoppupRemindInfonew z2 " + + " where t1.requestid=z2.requestid and z2.type=10 " + + " and z2.userid = " + + user.getUID() + + " and z2.usertype='" + + (Util.getIntValue(logintype, 1) - 1) + + "' )"; + } + } else { + if (superior && !flag.equals("")) + CurrentUser = userID; + sqlwhere = "where (t1.deleted <> 1 or t1.deleted is null or t1.deleted='') and t1.requestid = t2.requestid and t2.userid = " + CurrentUser + " and t2.usertype=" + usertype; + if (!Util.null2String(SearchClause.getWhereClause()).equals("")) { + sqlwhere += " and " + SearchClause.getWhereClause(); + } + } + if (RecordSet.getDBType().equals("oracle")) { + sqlwhere += " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater=" + user.getUID() + ")) "; + } else { + sqlwhere += " and (isnull(t1.currentstatus,-1) = -1 or (isnull(t1.currentstatus,-1)=0 and t1.creater=" + user.getUID() + ")) "; + } + String orderby = ""; + + //高级搜索条件 + WfAdvanceSearchUtil conditionutil=new WfAdvanceSearchUtil(request,RecordSet); + + String conditions=""; + if(processing.equals("0")){ + conditions = conditionutil.getAdVanceSearch4PendingCondition(); + }else{ + conditions = conditionutil.getAdVanceSearch4OtherCondition(); + } + //System.out.println("conditions"+conditions); + //System.out.println("newsql"+newsql); + //System.out.println("sqlwhere"+sqlwhere); + + if(!conditions.equals("")){ + creatertype = "0"; + newsql += conditions; + } + sqlwhere += " " + newsql; + //orderby=" t1.createdate,t1.createtime,t1.requestlevel"; + orderby = SearchClause.getOrderClause(); + if (orderby.equals("")) { + orderby = "t2.receivedate ,t2.receivetime"; + } + //orderby2=" order by t1.createdate,t1.createtime,t1.requestlevel"; + + int start = Util.getIntValue(Util.null2String(request.getParameter("start")), 1); + String sql = ""; + int totalcounts = Util.getIntValue(Util.null2String(request.getParameter("totalcounts")), 0); + + //add by xhheng @ 20050302 for TD 1545 + String strworkflowid = ""; + int startIndex = 0; + + String fromhp = Util.null2String(request.getParameter("fromhp")); + if (fromhp.equals("1")) { + String eid = Util.null2String(request.getParameter("eid")); + String tabid = Util.null2String(request.getParameter("tabid")); + RecordSet.execute("select count(content) as count from workflowcentersettingdetail where type = 'flowid' and eid=" + eid + "and tabId = '" + tabid + "'"); + if (RecordSet.next()) { + if (RecordSet.getInt("count") > 0) { + strworkflowid = " in (select content from workflowcentersettingdetail where type = 'flowid' and eid=" + eid + "and tabId = '" + tabid + "' )"; + } + } + } else { + + if (!Util.null2String(SearchClause.getWhereClause()).equals("")) { + String tempstr = SearchClause.getWhereClause(); + if (tempstr.indexOf("t1.workflowid") != -1) { + startIndex = tempstr.indexOf("t1.workflowid") + 13;//added by xwj for td2045 on 2005-05-26 + if (tempstr.indexOf("and") != -1) { + if (tempstr.indexOf("(t1.deleted=0") != -1) { + int startIndex1 = tempstr.indexOf("and"); + int startIndex2 = tempstr.indexOf("and", startIndex1 + 1); + strworkflowid = tempstr.substring(startIndex, startIndex2); + } else { + strworkflowid = tempstr.substring(startIndex, tempstr.indexOf("and")); + } + if (strworkflowid.indexOf("(") != -1 && strworkflowid.indexOf(")") == -1) + strworkflowid += ")"; + } else + strworkflowid = tempstr.substring(startIndex, tempstr.indexOf(")") + 1); + if (strworkflowid.indexOf("(") != -1 && strworkflowid.indexOf(")") == -1) + strworkflowid += ")"; + } + } else { + if (!workflowid.equals("")) + strworkflowid = " in (" + WorkflowVersion.getAllVersionStringByWFIDs(workflowid) + ")"; + } + } + + if (strworkflowid.equals("")) { + RecordSet.executeSql("select count(id) as mtcount from workflow_base where multiSubmit=1"); + } else { + RecordSet.executeSql("select count(id) as mtcount from workflow_base where id " + strworkflowid + " and multiSubmit=1"); + } + boolean isMultiSubmit = false; + if (RecordSet.next()) { + if (RecordSet.getInt("mtcount") > 0) { + isMultiSubmit = true; + } + } + if(!isMultiSubmit&&myrequest.equals("all")){ + isMultiSubmit = true ; + } + + int perpage = 10; + + boolean hasrequestname = false; + boolean hascreater = false; + boolean hascreatedate = false; + boolean hasworkflowname = false; + boolean hasrequestlevel = false; + boolean hasreceivetime = false; + boolean hasstatus = false; + boolean hasreceivedpersons = false; + boolean hascurrentnode = false; + boolean hashurry = false; + boolean hasrequestmark = false; + + if(scope.equals("doing")){ + hasrequestname = true; + hascreater = true; + hascreatedate = true; + hasreceivedpersons = true; + }else if(scope.equals("done")||scope.equals("complete")){ + hasrequestname = true; + hasworkflowname = true; + hascreater = true; + hasreceivetime = true; + hascurrentnode = true; + hasreceivedpersons = true; + }else if(scope.equals("mine")){ + hasrequestname = true; + hasworkflowname = true; + hascreatedate = true; + hascurrentnode = true; + hasreceivedpersons = true; + }else{ + hasrequestname = true; + hasworkflowname = true; + hascreater = true; + hascreatedate = true; + hascurrentnode = true; + hasreceivedpersons = true; + } + /* + RecordSet.executeProc("workflow_RUserDefault_Select", "" + user.getUID()); + if (RecordSet.next()) { + if (!Util.null2String(RecordSet.getString("hascreatetime")).equals("1")) + hascreatetime = false; + if (!Util.null2String(RecordSet.getString("hascreater")).equals("1")) + hascreater = false; + if (!Util.null2String(RecordSet.getString("hasworkflowname")).equals("1")) + hasworkflowname = false; + if (!Util.null2String(RecordSet.getString("hasrequestlevel")).equals("1")) + hasrequestlevel = false; + if (!Util.null2String(RecordSet.getString("hasrequestname")).equals("1")) + hasrequestname = false; + if (!Util.null2String(RecordSet.getString("hasreceivetime")).equals("1")) + hasreceivetime = false; + if (!Util.null2String(RecordSet.getString("hasstatus")).equals("1")) + hasstatus = false; + if (!Util.null2String(RecordSet.getString("hasreceivedpersons")).equals("1")) + hasreceivedpersons = false; + if (!Util.null2String(RecordSet.getString("hascurrentnode")).equals("1")) + hascurrentnode = false; + perpage = RecordSet.getInt("numperpage"); + } else { + RecordSet.executeProc("workflow_RUserDefault_Select", "1"); + if (RecordSet.next()) { + if (!Util.null2String(RecordSet.getString("hascreatetime")).equals("1")) + hascreatetime = false; + if (!Util.null2String(RecordSet.getString("hascreater")).equals("1")) + hascreater = false; + if (!Util.null2String(RecordSet.getString("hasworkflowname")).equals("1")) + hasworkflowname = false; + if (!Util.null2String(RecordSet.getString("hasrequestlevel")).equals("1")) + hasrequestlevel = false; + if (!Util.null2String(RecordSet.getString("hasrequestname")).equals("1")) + hasrequestname = false; + if (!Util.null2String(RecordSet.getString("hasreceivetime")).equals("1")) + hasreceivetime = false; + if (!Util.null2String(RecordSet.getString("hasstatus")).equals("1")) + hasstatus = false; + if (!Util.null2String(RecordSet.getString("hasreceivedpersons")).equals("1")) + hasreceivedpersons = false; + if (!Util.null2String(RecordSet.getString("hascurrentnode")).equals("1")) + hascurrentnode = false; + perpage = RecordSet.getInt("numperpage"); + } + } + */ + /*如果所有的列都不显示,那么就显示所有的,避免页面出错*/ + /* + if (!hascreatetime && !hascreater && !hasworkflowname && !hasrequestlevel && !hasrequestname && !hasreceivetime && !hasstatus && !hasreceivedpersons && !hascurrentnode) { + hascreatetime = true; + hascreater = true; + hasworkflowname = true; + hasrequestlevel = true; + hasrequestname = true; + hasreceivetime = true; + hasstatus = true; + hasreceivedpersons = true; + hascurrentnode = true; + } + */ + //update by fanggsh 20060711 for TD4532 begin + boolean hasSubWorkflow = false; + if (workflowid != null && !workflowid.equals("") && workflowid.indexOf(",") == -1) { + RecordSet.executeSql("select id from Workflow_SubWfSet where mainWorkflowId=" + workflowid); + if (RecordSet.next()) { + hasSubWorkflow = true; + } + + RecordSet.executeSql("select id from Workflow_TriDiffWfDiffField where mainWorkflowId=" + workflowid); + if (RecordSet.next()) { + hasSubWorkflow = true; + } + } + RCMenu += "{" + SystemEnv.getHtmlLabelName(197, user.getLanguage()) + ",javascript:rightMenuSearch(),_self}"; + RCMenuHeight += RCMenuHeightStep; + if (isMultiSubmit && iswaitdo == 1 && sysId!=5 && sysId!=8) { + RCMenu += "{" + SystemEnv.getHtmlLabelName(17598, user.getLanguage()) + ",javascript:OnMultiSubmitNew(this),_self}"; + RCMenuHeight += RCMenuHeightStep; + } + + if("1".equals(isFromMessage)){ + RCMenu += "{" + SystemEnv.getHtmlLabelName(81706, user.getLanguage()) + ",javascript:doAllReadIt(),_self}"; + RCMenuHeight += RCMenuHeightStep; + } + + String pageId = ""; + + %> + <%@ include file="/systeminfo/TopTitle_wev8.jsp" %> + + + + + + + + +
+ + <%if(isMultiSubmit && iswaitdo == 1 && sysId!=5&&sysId!=8){ %> + +     + <%} %> + <%if("1".equals(isFromMessage)){%> + +     + <%} %> + " name="flowTitle"/> +    + <%=SystemEnv.getHtmlLabelName(21995, user.getLanguage())%>   + +
+
+ 类型 + 全部未读反馈超时被督办 + +
+ + +
+
+ + + + 标题 + + 编号 + + + 类型 + + + + + 流程 + + + + + 创建日期 + + + + + + + 创建人 + + + + + 处理状态 + + + + 未操作者 + + + + + + + + + | + + | + + + + +
+ + + + +
+ + + <%=SearchClause.getWhereClause()%><%}else{%><%=fromselfSql%><%}%>"> + + + + + + + + + + <%-- add by bpf on 2013-11-13 --%> + + <% + Enumeration e=request.getParameterNames(); + while(e.hasMoreElements()){ + String paramenterName=e.nextElement(); + String value=request.getParameter(paramenterName); + //System.out.println(paramenterName); + if(paramenterName.equals("pageSizeSel1inputText") || paramenterName.equals("pageSizeSel1") + || paramenterName.equals("submit_1") + ||paramenterName.equals("createdatefrom")||paramenterName.equals("createdateto") + ||paramenterName.equals("recievedatefrom")||paramenterName.equals("recievedateto") + ||paramenterName.equals("operatedatefrom")||paramenterName.equals("operatedateto") + ){ + }else{ + %> + + <% + }} + + %> + + + + + + + +
+ + + + +
+ + + + + + + + + + + + +
+ <% + String tableString = ""; + if (perpage < 2) + perpage = 10; + + String backfields = " '0' as systemtype,t1.requestid,t1.requestmark,t1.createdate, t1.createtime,t1.creater, t1.creatertype, t1.workflowid, t1.requestname, t1.requestnamenew, t1.status,t1.requestlevel,t1.currentnodeid,t2.viewtype,t2.userid,t2.receivedate,t2.receivetime,t2.isremark,t2.nodeid,t2.agentorbyagentid,t2.agenttype,t2.isprocessed "; + String fromSql = " from workflow_requestbase t1,workflow_currentoperator t2 ";//xxxxx + String sqlWhere = sqlwhere; + String para2 = "column:requestid+column:workflowid+column:viewtype+" + isovertime + "+" + user.getLanguage() + "+column:nodeid+column:isremark+" + userID+"+column:systemtype" + + "+column:agentorbyagentid+column:agenttype+column:isprocessed"; + String para4 = user.getLanguage() + "+" + user.getUID()+"+column:userid+column:systemtype+column:undo"; + if (!docids.equals("")) { + fromSql = fromSql + ",workflow_form t4 "; + sqlWhere = sqlWhere + " and t1.requestid=t4.requestid "; + } + + if (!superior) { + sqlWhere += " AND EXISTS (SELECT 1 FROM workFlow_CurrentOperator workFlowCurrentOperator WHERE t2.workflowid = workFlowCurrentOperator.workflowid AND t2.requestid = workFlowCurrentOperator.requestid AND workFlowCurrentOperator.userid=" + + userID + " and workFlowCurrentOperator.usertype = " + usertype + ") "; + } + + if (!branchid.equals("")) { + sqlWhere += " AND t1.creater in (select id from hrmresource where subcompanyid1=" + branchid + ") "; + } + sqlWhere+=" and t1.workflowid in (select id from workflow_base where "; + //流程类型、流程状态查询条件 + + + if("0".equals(wfstatu)){ + sqlWhere +=" isvalid='0' "; + }else{ + sqlWhere +=" (isvalid='1' or isvalid='3') "; + } + if(!"".equals(workflowtype)){ + sqlWhere += " and workflowtype="+workflowtype+" "; + } + if(offical.equals("1")){ + sqlWhere+= " and isWorkflowDoc=1"; + if(officalType==1){ + sqlWhere += " and officalType in(1,3)"; + if(processId>0){ + String _sql = "select nodeids from workflow_process_relative wpr where officalType in (1,3) and pdid="+processId; + RecordSet.executeSql(_sql); + String nodeids = ""; + while(RecordSet.next()){ + if(nodeids.equals("")){ + nodeids = Util.null2String(RecordSet.getString("nodeids")); + }else{ + nodeids = nodeids+","+Util.null2String(RecordSet.getString("nodeids")); + } + } + nodeids = nodeids.replaceAll(",{2,}",","); + if(nodeids.equals(""))nodeids = "-1"; + sqlWhere += " and t2.nodeid in ("+nodeids+")"; + } + }else if(officalType==2){ + sqlWhere += " and officalType=2"; + if(processId>0){ + String _sql = "select nodeids from workflow_process_relative wpr where officalType=2 and pdid="+processId; + RecordSet.executeSql(_sql); + String nodeids = ""; + while(RecordSet.next()){ + if(nodeids.equals("")){ + nodeids = Util.null2String(RecordSet.getString("nodeids")); + }else{ + nodeids = nodeids+","+Util.null2String(RecordSet.getString("nodeids")); + } + } + nodeids = nodeids.replaceAll(",{2,}",","); + if(nodeids.equals(""))nodeids = "-1"; + sqlWhere += " and t2.nodeid in ("+nodeids+")"; + } + } + + /*if(viewcondition.equals("5")){ + sqlWhere+=" and t2.nodeid in (select useTempletNode from workflow_createdoc wc where wc.workflowid=t1.workflowid) "; + }else if(viewcondition.equals("6")){ + sqlWhere+=" and t2.nodeid in (select signatureNodes from workflow_createdoc wc where wc.workflowid=t1.workflowid) "; + }*/ + } + sqlWhere+=")"; + if(!customResult.equals("")){ + sqlWhere +=" and t1.requestid in ("+customResult+")"; + } + + + String sqlnew = "select '0' as systemtype,CAST(t1.requestid AS VARCHAR(100)) AS requestid,t1.requestmark,t1.createdate, t1.createtime, cast(t1.creater as varchar(100)) creater,'' as createrstr , t1.creatertype, CAST(t1.workflowid AS VARCHAR(100)) AS workflowid, t1.requestname, "+ + "t1.requestnamenew, t1.status,t1.requestlevel,cast(t1.currentnodeid as varchar(100)) as currentnodeid,t2.viewtype,cast(t2.userid as varchar(100)) as userid,t2.receivedate,t2.receivetime,t2.isremark,"+ + "cast(t2.nodeid as varchar(100)) as nodeid,t2.agentorbyagentid,t2.agenttype,t2.isprocessed,'' as undo "+ + " from workflow_requestbase t1,workflow_currentoperator t2 "+sqlWhere+ sqlWhere_oa + + " union all "+ + "select '1' as systemtype,FASSIGNID as requestid, FProcdeFNumber as requestmark, "+ + "SUBSTRING(CONVERT(VARCHAR(20), FCreatedTime, 120), 0, 11) AS createdate ,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FCreatedTime, 120), 12, 19) AS createtime ,"+ + "FCreatorNumber AS creater,"+ + "FCreator AS createrstr,"+ + "'0' as creatertype, "+ + " isnull(fworkflowid,'0') as workflowid, FSubject as requestname, "+ + "FSubject as requestnamenew, '0' as status,0 as requestlevel,FActdeFName as currentnodeid,-2 as isremark,FPersonUserNumber as userid,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FActTime, 120), 0, 11) AS receivedate ,"+ + "SUBSTRING(CONVERT(VARCHAR(20), FActTime, 120), 12, 19) AS receivetime ,"+ + "FState as isremark,"+ + "FActdeFName as nodeid,-1 as agentorbyagentid,0 as agenttype,'' as isprocessed,FPersonUserName as undo "+ + "from openquery("+eas_linkname+",'select * from "+eas_requestinfo+" where 1=1 "+SearchClause.getWhereclause2()+ sqlWhere_eas +"') e where 1=1 "; + + //add by bpf on 2013-11-14 + String countSql="select count(1) as wfCount "+fromSql+sqlWhere; + RecordSet.executeSql(countSql); + String wfCount="0"; + while(RecordSet.next()){ + wfCount=RecordSet.getString("wfCount"); + } + String operateString= ""; + //流程操作菜单 add by Dracula @2014-1-6 + + String popedomOtherpara = "column:viewtype+column:isremark+column:isprocessed+column:nodeid+column:workflowid+"+scope+"+column:systemtype"; + String popedomUserpara = userID + "_" + usertype; + String popedomLogpara = "column:nodeid"; + String popedomNewwfgpara = "column:workflowid+column:agenttype"; + String popedomNewmsgpara = "column:workflowid+column:nodeid"; + operateString = ""; + operateString +=" "; + if(offical.equals("1") && sysId==5){ + operateString +=" "; + }else if(offical.equals("1") && sysId==6){ + operateString +=" "; + }else if(offical.equals("1") && sysId==1){ + operateString +=" "; + }else if(offical.equals("1") && sysId==2){ + operateString +=" "; + }else if(offical.equals("1") && (sysId==3||sysId==4)){ + operateString +=" "; + }else if(offical.equals("1") && sysId==7){ + operateString +=" "; + }else if(offical.equals("1") && (sysId==9||sysId==14||sysId==15||scope.equals("done")||scope.equals("mine"))){ + operateString +=" "; + } + operateString +=" "; + operateString +=" "; + operateString +=" "; + operateString +=" "; + //operateString +=" "; + operateString +=" "; + + operateString +=""; + //System.out.println("sqlWhere_last"+sqlWhere); + //System.out.println("sqlForm"+fromSql); + if (isMultiSubmit && iswaitdo == 1) { + System.out.println("----isMultiSubmit"); + /* + tableString = " " + + " " + + " " + operateString + " "; + tableString += ""; + tableString += ""; + tableString += ""; + + tableString += " "; + tableString += ""; + tableString += ""; + tableString += ""; + + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += " " + "
"; + */ + + + backfields = "systemtype,requestid,requestmark,createdate, createtime,creater, createrstr,creatertype, workflowid, requestname, requestnamenew, status,requestlevel,currentnodeid, viewtype,userid,receivedate,receivetime,isremark,nodeid, agentorbyagentid,agenttype,isprocessed,undo"; + //System.out.println(sqlWhere); + //System.out.println(SearchClause.getWhereclause2()); + sqlWhere=""; + orderby=""; + + tableString = " " + + " " + + " " + + operateString + + " "; + tableString += " "; + tableString += ""; + tableString += " "; + tableString += " "; + //tableString += " "; + //tableString += ""; + //tableString += " "; + tableString += " "; + tableString += " "; + //tableString += " "; + tableString += " "; + //tableString += ""; + + tableString += " " + "
"; + } else if("1".equals(isFromMessage)){ + System.out.println("----isFromMessage"); + tableString = " " + + " " + + " " + operateString + " "; + tableString += ""; + tableString += ""; + + tableString += ""; + + tableString += " "; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += " " + "
"; + }else if("myall".equals(myrequest) || "myreqeustbywftype".equals(myrequest) || "myreqeustbywfid".equals(myrequest)){ + System.out.println("----myrequest"); + System.out.println(SearchClause.getWhereclause2()); + sqlWhere=""; + orderby=""; + //tableString = " " + // + " " + // + operateString + // + " "; + // tableString += " "; + // tableString += " "; + // + // tableString += " "; + // tableString += ""; + // tableString += " "; + // + // tableString += " "; + // tableString += " "; + + // tableString += " "; + // tableString += " "; + // tableString += ""; + // tableString += ""; + //tableString += " " + "
"; + //System.out.println(sqlnew); + tableString = " " + + " " + + operateString + + " "; + tableString += " "; + tableString += ""; + tableString += " "; + tableString += " "; + tableString += " "; + tableString += " "; + tableString += " "; + tableString += " " + "
"; + }else { + System.out.println("----else"); + //System.out.println("select "+backfields+" from "+fromSql+" where "+sqlWhere+" order by "+orderby); + + backfields = "systemtype,requestid,requestmark,createdate, createtime,creater, createrstr,creatertype, workflowid, requestname, requestnamenew, status,requestlevel,currentnodeid, viewtype,userid,receivedate,receivetime,isremark,nodeid, agentorbyagentid,agenttype,isprocessed,undo"; + //System.out.println(sqlWhere); + //System.out.println(SearchClause.getWhereclause2()); + sqlWhere=""; + orderby=""; + + tableString = " " + + " " + + " " + + operateString + + " "; + tableString += " "; + tableString += ""; + tableString += " "; + tableString += " "; + //tableString += " "; + //tableString += ""; + //tableString += " "; + tableString += " "; + tableString += " "; + //tableString += " "; + tableString += " "; + //tableString += ""; + + tableString += " " + "
"; + + } + %> +
+ +
+
+ + <%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %> + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/workflow/search/WFSearchTemp.jsp b/src/test/resources/WEB-INF/ecology/workflow/search/WFSearchTemp.jsp new file mode 100755 index 0000000..fcfc54f --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/search/WFSearchTemp.jsp @@ -0,0 +1,1744 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.search.SearchClause" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfo" %> +<%@ page import="weaver.systeminfo.menuconfig.LeftMenuInfoHandler" %> +<%@ page import="weaver.workflow.workflow.WorkflowComInfo" %> + +<%@ page import="weaver.workflow.workflow.WorkflowVersion" %> +<%@ page import="java.sql.Timestamp" %> +<%@ page import="java.util.*" %> + +<%@ include file="/systeminfo/init_wev8.jsp" %> + + + +<%! + + private String null2String(String s) { + if (s == null) { + return ""; + } + return s; + } + + //add by bpf on 2013-11-13 + private void sendRedirect(JspWriter out, HttpServletRequest request, HttpServletResponse response, String url) { + //viewScope表示当前查看的是什么样的流程,共有四种状态: + //complete:归档的 + + //done:已办 + //mine:我的请求 + //doing:待办 + String viewScope = request.getParameter("viewScope"); + String numberType = request.getParameter("numberType"); + viewScope = null2String(viewScope); + numberType = null2String(numberType); + url += "&viewScope=" + viewScope + "&numberType=" + numberType; + + String reforward = request.getParameter("reforward"); + + try { + if (request.getParameter("getCount") != null && Boolean.valueOf(request.getParameter("getCount"))) { + out.print(getCount(request, response)); + request.getSession().setAttribute("SearchClause", request.getSession().getAttribute("orientSearchClause")); + request.getSession().removeAttribute("orientSearchClause"); + return; + } + + if (Boolean.valueOf(reforward)) { + request.getRequestDispatcher(url).forward(request, response); + } else { + Enumeration e = request.getParameterNames(); + while (e.hasMoreElements()) { + String paramenterName = e.nextElement(); + String value = request.getParameter(paramenterName); + url += "&" + paramenterName + "=" + value; + } + + response.sendRedirect(url); + } + } catch (Exception e) { + + } + } + +%> + +<% + session.removeAttribute("branchid"); + session.setAttribute("orientSearchClause", SearchClause); + String whereclause = ""; + String orderclause = ""; + String orderclause2 = ""; + + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String eas_workflowinfo = Util.null2String(RecordSet.getPropValue("eas", "workflowtypeview")); + String loginid = eu.getLoginid(user); + + String resourceid = Util.null2String(request.getParameter("resourceid")); + String userid = "".equals(resourceid) ? Util.null2String((String) session.getAttribute("RequestViewResource")) : resourceid; + boolean isoracle = (RecordSet.getDBType()).equals("oracle"); + boolean isdb2 = (RecordSet.getDBType()).equals("db2"); + String logintype = "" + user.getLogintype(); + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"), -1); + int usertype = 0; + + if (userid.equals("")) { + userid = "" + user.getUID(); + if (logintype.equals("2")) usertype = 1; + } + + SearchClause.resetClause(); + String method = Util.null2String(request.getParameter("method")); + String overtime = Util.null2String(request.getParameter("overtime")); + String fromPDA = Util.null2String((String) session.getAttribute("loginPAD")); //从PDA登录 + String complete1 = Util.null2String(request.getParameter("complete")); + String workflowidtemp = Util.null2String(request.getParameter("workflowid")); + String wftypetemp = Util.null2String(request.getParameter("wftype")); + String cdepartmentid = Util.null2String(request.getParameter("cdepartmentid")); + int date2during = Util.getIntValue(Util.null2String(request.getParameter("date2during")), 0); + int viewType = Util.getIntValue(Util.null2String(request.getParameter("viewType")), 0); + int isajaxfresh = Util.getIntValue(Util.null2String(request.getParameter("isajaxfresh")), -1); + int viewcondition = Util.getIntValue(request.getParameter("viewcondition"), 0); +//跳转到wfserachResult后是否需要头 + boolean needHeader = "true".equals(Util.null2String(request.getParameter("needHeader"))); + + if (fromPDA.equals("1")) { + sendRedirect(out, request, response, "WFSearchResultPDA.jsp?offical=" + offical + "&officalType=" + officalType + "&workflowid=" + workflowidtemp + "&wftype=" + wftypetemp + "&complete=" + complete1 + "&viewType=" + viewType); + return; + } + + if (overtime.equals("1")) { + sendRedirect(out, request, response, "WFTabForOverTime.jsp?isovertime=1" + "&viewType=" + viewType + "&isFromMessage=1"); + return; + } + System.out.println("method === " + method); + whereclause = " (t1.deleted=0 or t1.deleted is null) "; + if (method.equals("viewhrm")) { + //String resourceid=Util.null2String(request.getParameter("resourceid")); + + if (isoracle) { + whereclause += " and (',' + TO_CHAR(t1.hrmids) + ',' LIKE '%," + resourceid + ",%') "; + } else if (isdb2) { + whereclause += " and (',' + VARCHAR(t1.hrmids) + ',' LIKE '%," + resourceid + ",%') "; + } else { + whereclause += " and (',' + CONVERT(varchar,t1.hrmids) + ',' LIKE '%," + resourceid + ",%') "; + } + + SearchClause.setWhereClause(whereclause); + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&offical=" + offical + "&officalType=" + officalType + "&start=1" + "&viewType=" + viewType); + return; + } + String processing = ""; + if (method.equals("all")) { + String whereclause2 = "";//eas系统查询条件 + String complete = Util.null2String(request.getParameter("complete")); + if (complete.equals("0")) { + + if (viewcondition == 3) { + whereclause += " and (t2.isremark = '5' or (t2.isremark = '0' and isprocessed is not null )) and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1"; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 1 || viewcondition == 2 || viewcondition == 4) { + whereclause += " and (((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) or (t2.isremark = '0' and t2.isprocessed is null)) and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1"; + whereclause2 += " and 1=2 "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1"; + } + //whereclause += " and (t2.isremark in('1','5','8','9','7') or (t2.isremark = '0' and (t2.isprocessed is null or (t2.isprocessed <> '2' and t2.isprocessed <> '3')))) and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1" ; + + // 分页控件上方的控件 1:未读;2:反馈;3:超时; add by Dracula @2014-1-10 + if (viewcondition == 1) { + whereclause += " and t2.viewtype = '0' and t2.isremark != '5' and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.isprocessed is null "; + } else if (viewcondition == 2) { + whereclause += " and t2.viewtype = '-1'"; + //else if(viewcondition == 3) + // whereclause += " and t2.isremark = '5'"; + } else if (viewcondition == 4) { + whereclause += " and t2.requestid in (select requestid from workflow_requestlog where logtype='s')"; + } + processing = "0"; //待办 + + whereclause2 += " and FState=''1'' and FPersonUserNumber=''" + loginid + "''"; + } else if (complete.equals("1")) { + //modify by xhheng @20030525 for TD1725 + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and(t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.islasttimes=1"; + processing = "1"; //原办结,办结和已办已合并 + whereclause2 += " and FState=''16'' and FPersonUsernumber=''" + loginid + "''"; + } else if (complete.equals("2")) { + //modify by xhheng @20030525 for TD1725 + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1"; + processing = "2"; //原已办,办结和已办已合并 + //已办/办结: + //viewcondition=1表示未归档 + + if (viewcondition == 1) { + whereclause += " and (t2.isremark ='2' or (t2.isremark=0 and t2.takisremark =-2)) and t2.iscomplete=0 "; + //viewcondition=2表示已归档 + whereclause2 += " and 1=2 "; + } else if (viewcondition == 2) { + whereclause += " and t2.iscomplete=1 and t1.currentnodetype = 3 "; + whereclause2 += " and 1=2 "; + //viewcondition=4表示未读 + } else if (viewcondition == 4) { + whereclause += " and t2.viewtype=0 and (agentType <> '1' or agentType is null) " + WorkflowComInfo.getDateDuringSql(date2during); + whereclause2 += " and 1=2 "; + //viewcondition=3表示反馈 + } else if (viewcondition == 3) { + whereclause += " and t2.viewtype=-1 "; + whereclause2 += " and 1=2 "; + } + whereclause2 += " and FState=''16'' and FPersonUserNumber=''" + loginid + "''"; + } + System.out.println("complete=========" + complete + " viewcondition=" + viewcondition + " whereclause2=" + whereclause2); + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + if (isajaxfresh != -1) { + return; + } + //TD10848 complete=4,表示待办黄色图标流程 + + //modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + + if (complete.equals("0") || complete.equals("3") || complete.equals("4")) { + sendRedirect(out, request, response, "WFSearchResult.jsp?myrequest=" + method + "&resourceid=" + resourceid + "&needHeader=" + needHeader + "&viewcondition=" + viewcondition + "&offical=" + offical + "&officalType=" + officalType + "&start=1&iswaitdo=1" + "&viewType=" + viewType + "&processing=" + processing); + } else { + sendRedirect(out, request, response, "WFSearchResult.jsp?myrequest=" + method + "&resourceid=" + resourceid + "&needHeader=" + needHeader + "&viewcondition=" + viewcondition + "&offical=" + offical + "&officalType=" + officalType + "&start=1&date2during=" + date2during + "&viewType=" + viewType + "&processing" + processing); + } + return; + } + if (method.equals("myall")) { + //String complete=Util.null2String(request.getParameter("complete")); + + //whereclause +=" t1.creater = "+userid+" and t1.creatertype = " + usertype; + whereclause += " and t1.creater = " + userid + " and t1.creatertype = " + usertype; + String whereclause2 = " and FCreatorNumber=''" + loginid + "'' "; + //System.out.println("viewcondition = "+viewcondition+" complete="+complete1); + if (complete1.equals("0")) { + whereclause2 += " and fstate=''1'' "; + } else if (complete1.equals("1")) { + whereclause2 += " and 1=2 "; + } + if (viewcondition == 1) { //未归档 + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype <> '3' and t2.islasttimes=1 "; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 2) { //已归档的 + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.islasttimes=1"; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 0) { //未归档+已归档的总数,如果不加这个条件,有问题,可以看到t2.isremark in (2,4) + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 "; + //whereclause2 += " and (fstate=''16'' or fstate=''1'') "; + } else if (viewcondition == 3) {//反馈 + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 and t2.viewtype=-1"; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 4) //未读 + { + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 and t2.viewtype=0 "; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 5) //超时 + { + //whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.isremark=5 "; + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and (t2.isremark=5 or (t2.isremark = '0' and isprocessed <> '1' )) and t1.currentnodetype <> 3 "; + whereclause2 += " and 1=2 "; + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType + "&myrequest=" + method); + return; + } + if (method.equals("myreqeustbywftype")) { + String wftype = Util.null2String(request.getParameter("wftype")); + String complete = Util.null2String(request.getParameter("complete")); + //System.out.println(complete); + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"), 0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + int infoId = Util.getIntValue(request.getParameter("infoId"), 0); + + String whereclause2 = " and FCreator=''" + loginid + "'' "; + + String selectedworkflow = ""; + String inSelectedWorkflowStr = ""; + if (fromAdvancedMenu == 1) { + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if (info != null) { + selectedworkflow = info.getSelectedContent(); + } + if (!"".equals(selectedContent)) { + selectedworkflow = selectedContent; + } + List selectedWorkflowIdList = Util.TokenizerString(selectedworkflow, "|"); + for (Iterator it = selectedWorkflowIdList.iterator(); it.hasNext(); ) { + String tmpstr = (String) it.next(); + if (tmpstr.indexOf("W") > -1) + inSelectedWorkflowStr += "," + tmpstr.substring(1); + } + if (inSelectedWorkflowStr.charAt(0) == ',') + inSelectedWorkflowStr = inSelectedWorkflowStr.substring(1); + if (!whereclause.equals("")) whereclause += " and "; + String _tempworkflowids = WorkflowVersion.getAllVersionStringByWFIDs(inSelectedWorkflowStr); + if (_tempworkflowids.equals("")) { + _tempworkflowids = "0"; + } + whereclause += " t1.workflowid in (" + _tempworkflowids + ") "; + } + /* edited end */ + + if (whereclause.equals("")) { + whereclause += " t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + " and (isvalid='1' or isvalid='3') ) "; + } else { + whereclause += " and t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + " and (isvalid='1' or isvalid='3')) "; + } + whereclause += " and t1.creater = " + userid + " and t1.creatertype = " + usertype; + if (viewcondition == 1) { //未归档 + + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype <> '3' and t2.islasttimes=1 "; + whereclause2 += " and fstate!=''16'' "; + } else if (viewcondition == 2) {//已归档 + + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.islasttimes=1"; + whereclause2 += " and fstate=''16'' "; + } else if (viewcondition == 0)//全部 + { + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1 "; + + } else if (viewcondition == 3)//反馈 + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 and t2.viewtype=-1"; + else if (viewcondition == 4) //未读 + { + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 and t2.viewtype=0 "; + } else if (viewcondition == 5) //超时 + { + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and (t2.isremark=5 or (t2.isremark = '0' and isprocessed <> '1' )) and t1.currentnodetype <> 3 "; + //whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.isremark=5 "; + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType + "&myrequest=" + method); + return; + } + if (method.equals("myreqeustbywfid")) { + String workflowid = Util.null2String(request.getParameter("workflowid")); + String complete = Util.null2String(request.getParameter("complete")); + String whereclause2 = " and FPersonUserNumber=''" + loginid + "'' and fworkflowid=(select fworkflowid from " + eas_workflowinfo + " where fid=" + workflowid + ")"; + if (whereclause.equals("")) { + whereclause += " t1.creater = " + userid + " and t1.creatertype = " + usertype; + } else { + whereclause += " and t1.creater = " + userid + " and t1.creatertype = " + usertype; + } + + if (viewcondition == 1) {//未归档 + + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype <> '3' and t2.islasttimes=1 "; + whereclause2 += " and fstate=''16'' "; + } else if (viewcondition == 2) {//已归档 + + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.islasttimes=1"; + whereclause2 += " and fstate=''16'' "; + } else if (viewcondition == 0) {//全部 + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t2.islasttimes=1 "; + whereclause2 += " and fstate=''16'' "; + } else if (viewcondition == 3) + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 and t2.viewtype=-1"; + else if (viewcondition == 4) //未读 + { + whereclause += " and (t1.deleted=0 or t1.deleted is null) and ((t1.currentnodetype <> '3') or (t2.isremark in('2','4') and t1.currentnodetype = '3' )) and t2.islasttimes=1 and t2.viewtype=0 "; + } else if (viewcondition == 5) //超时 + { + //whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and t2.isremark=5 "; + whereclause += " and (t1.deleted=0 or t1.deleted is null) and t1.currentnodetype = '3' and (t2.isremark=5 or (t2.isremark = '0' and isprocessed <> '1' )) and t1.currentnodetype <> 3 "; + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + SearchClause.setWorkflowId(workflowid); + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType + "&myrequest=" + method); + return; + } + + if (method.equals("reqeustbywftype")) { + String wftype = Util.null2String(request.getParameter("wftype")); + String complete = Util.null2String(request.getParameter("complete")); + String whereclause2 = " and FPersonUserNumber=''" + loginid + "'' "; + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"), 0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + int infoId = Util.getIntValue(request.getParameter("infoId"), 0); + + String selectedworkflow = ""; + String inSelectedWorkflowStr = ""; + if (fromAdvancedMenu == 1) { + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if (info != null) { + selectedworkflow = info.getSelectedContent(); + } + if (!"".equals(selectedContent)) { + selectedworkflow = selectedContent; + } + List selectedWorkflowIdList = Util.TokenizerString(selectedworkflow, "|"); + for (Iterator it = selectedWorkflowIdList.iterator(); it.hasNext(); ) { + String tmpstr = (String) it.next(); + if (tmpstr.indexOf("W") > -1) + inSelectedWorkflowStr += "," + tmpstr.substring(1); + } + if (inSelectedWorkflowStr.charAt(0) == ',') + inSelectedWorkflowStr = inSelectedWorkflowStr.substring(1); + if (!whereclause.equals("")) whereclause += " and "; + String _tempwfids = WorkflowVersion.getAllVersionStringByWFIDs(inSelectedWorkflowStr); + if (_tempwfids.equals("")) { + _tempwfids = "0"; + } + whereclause += " t1.workflowid in (" + _tempwfids + ") "; + } + /* edited end */ + + if (whereclause.equals("")) { + whereclause += " t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + ") and (t1.deleted=0 or t1.deleted is null) "; + } else { + whereclause += " and t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + ") and (t1.deleted=0 or t1.deleted is null) "; + } + whereclause2 += " and fworkflowid in (SELECT fworkflowid FROM " + eas_workflowinfo + " WHERE FCategoryID=" + wftype + ")"; + if (complete.equals("0")) { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + //whereclause += " and (t1.currentnodetype <> '3' or (t2.isremark ='1' and t1.currentnodetype = '3') ) and t2.islasttimes=1"; + whereclause2 += " and fstate=''1'' "; + } else if (complete.equals("1")) { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + whereclause2 += " and fstate=''16'' "; + } + //complete=2表示已办/办结事宜 + else if (complete.equals("2")) { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t2.islasttimes=1"; + //已办/办结: + //viewcondition=1表示未归档 + + if (viewcondition == 1) + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 "; + //viewcondition=2表示已归档 + + else if (viewcondition == 2) + whereclause += " and t2.iscomplete=1 and t1.currentnodetype = 3 "; + //viewcondition=4表示未读 + else if (viewcondition == 4) + whereclause += " and t2.viewtype=0 and (agentType <> '1' or agentType is null) " + WorkflowComInfo.getDateDuringSql(date2during); + //viewcondition=3表示反馈 + else if (viewcondition == 3) + whereclause += " and t2.viewtype=-1 "; + + whereclause2 += " and fstate=''16'' "; + } + //complete=50表示已办事宜,红色new标记 + else if (complete.equals("50")) { + if (whereclause.equals("")) { + whereclause += " and ((t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) or (t2.isremark=0 and t2.takisremark =-2)) and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } else { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) or (t2.isremark=0 and t2.takisremark =-2)) and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + + if (complete.equals("0")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } else if (complete.equals("1") || complete.equals("2")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + if (complete.equals("0") || complete.equals("3") || complete.equals("4"))//modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&iswaitdo=1&date2during=" + date2during + "&viewType=" + viewType); + else + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType); + return; + } +//TD8778 褚俊 根据流程类型进入流程列表页面,精确到流程节点 + if (method.equals("reqeustbywftypeNode")) { + String wftype = Util.null2String(request.getParameter("wftype")); + String complete = Util.null2String(request.getParameter("complete")); + + /* edited by wdl 2006-06-14 left menu advanced menu */ + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"), 0); + int infoId = Util.getIntValue(request.getParameter("infoId"), 0); + String workFlowIDsRequest = Util.null2String(request.getParameter("workFlowIDsRequest")); + String workFlowNodeIDsRequest = Util.null2String(request.getParameter("workFlowNodeIDsRequest")); + String selectedworkflow = ""; + String inSelectedStr = ""; + List selectedWorkflowIdList = Util.TokenizerString(workFlowIDsRequest, ","); + if (fromAdvancedMenu == 1) { + for (int i = 0; i < selectedWorkflowIdList.size(); i++) { + String wfID = (String) selectedWorkflowIdList.get(i); + if (!"".equals(workFlowNodeIDsRequest)) { + inSelectedStr += "or ( t1.workflowid = " + wfID + " and t1.currentnodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(workFlowNodeIDsRequest) + ") ) "; + } else { + inSelectedStr += "or ( t1.workflowid = " + wfID + " ) "; + } + } + if (!"".equals(inSelectedStr)) { + inSelectedStr = inSelectedStr.substring(2); + if (!"".equals(whereclause)) { + whereclause = whereclause + " and "; + } + whereclause += " ( " + inSelectedStr + " ) "; + } + } + /* edited end */ + + if (whereclause.equals("")) { + whereclause += " t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + ") "; + } else { + whereclause += " and t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + ") "; + } + + if (complete.equals("0")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + //whereclause += " and (t1.currentnodetype <> '3' or (t2.isremark ='1' and t1.currentnodetype = '3') ) and t2.islasttimes=1"; + } else if (complete.equals("1")) { + whereclause += " and ((t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } + //complete=2表示已办事宜 + else if (complete.equals("2")) { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1"; + } + SearchClause.setWhereClause(whereclause); + if (complete.equals("0")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } else if (complete.equals("1") || complete.equals("2")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + if (complete.equals("0") || complete.equals("3") || complete.equals("4"))//modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&iswaitdo=1&date2during=" + date2during + "&viewType=" + viewType); + else + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType); + return; + } +//add by ben根据单据号得到流程 + if (method.equals("reqeustbybill")) { + String billid = Util.null2String(request.getParameter("billid")); + String complete = Util.null2String(request.getParameter("complete")); + + if (whereclause.equals("")) { + whereclause += " t1.workflowid in( select id from workflow_base where formid = " + billid + " and isbill='1') "; + } else { + whereclause += " and t1.workflowid in( select id from workflow_base where formid = " + billid + " and isbill='1') "; + } + + if (complete.equals("0")) { //未审批 + + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1 "; + //whereclause += " and (t1.currentnodetype <> '3' or ((t2.isremark ='1' or t2.isremark ='8' or t2.isremark ='9') and t1.currentnodetype = '3') ) and t2.islasttimes=1"; + } else if (complete.equals("1")) { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } + //complete=2表示已办事宜 + else if (complete.equals("2")) { //已审批 (把办结和已办一起显示) + whereclause += " and ((t2.isremark ='2' and t1.currentnodetype <> 3 and t2.iscomplete=0) or (t1.currentnodetype = '3')) and t2.islasttimes=1"; + } + SearchClause.setWhereClause(whereclause); + if (complete.equals("0")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } else if (complete.equals("1") || complete.equals("2")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + if (complete.equals("0") || complete.equals("3") || complete.equals("4"))//modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&iswaitdo=1&date2during=" + date2during + "&viewType=" + viewType); + else + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType); + return; + } + if (method.equals("reqeustbywfid")) { + String workflowid = Util.null2String(request.getParameter("workflowid")); + String complete = Util.null2String(request.getParameter("complete")); + String whereclause2 = " and FPersonUserNumber=''" + loginid + "'' "; + if (!workflowid.equals("")) { + whereclause2 += " and fworkflowid=(select fworkflowid from " + eas_workflowinfo + " where fid=" + workflowid + ")"; + } + //System.out.println(); + //complete=0表示已办事宜 + if (complete.equals("0")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + } + //modify by mackjoe at 2005-09-29 td1772 转发特殊处理,转发信息本人未处理一直都在待办事宜中显示 + //whereclause += " and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.islasttimes=1"; + whereclause2 += " and fstate=''1'' "; + } + //complete=1表示办结事宜 + else if (complete.equals("1")) { + if (whereclause.equals("")) { + whereclause += " (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } else { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } + whereclause2 += " and fstate=''16'' "; + } + //complete=2表示已办/办结事宜 + else if (complete.equals("2")) { + if (whereclause.equals("")) { + whereclause += " (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t2.islasttimes=1 "; + } else { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t2.islasttimes=1 "; + } + //已办/办结: + //viewcondition=1表示未归档 + + if (viewcondition == 1) + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 "; + //viewcondition=2表示已归档 + + else if (viewcondition == 2) + whereclause += " and t2.iscomplete=1 and t1.currentnodetype = 3 "; + //viewcondition=4表示未读 + else if (viewcondition == 4) + whereclause += " and t2.viewtype=0 and (agentType <> '1' or agentType is null) " + WorkflowComInfo.getDateDuringSql(date2during); + //viewcondition=3表示反馈 + else if (viewcondition == 3) + whereclause += " and t2.viewtype=-1 "; + + whereclause2 += " and fstate=''16'' "; + } + //complete=3表示待办事宜,红色new标记 + else if (complete.equals("3")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=0 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=0 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } + } + //complete=4表示待办事宜,灰色new标记 + else if (complete.equals("4")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=-1 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=-1 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } + } + //complete=5表示已办事宜,灰色new标记 + else if (complete.equals("5")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=-1"; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=-1"; + } + } + //complete=50表示已办事宜,红色new标记 + else if (complete.equals("50")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } + } + + //complete=6表示办结事宜,红色new标记 + else if (complete.equals("6")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=0"; + } else { + whereclause += " and t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=0"; + } + } + //complete=7表示办结事宜,灰色new标记 + else if (complete.equals("7")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=-1"; + } else { + whereclause += " and t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=-1"; + } + } + //complete=8表示超时事宜, + + else if (complete.equals("8")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + } else { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + } + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + + if (complete.equals("0") || complete.equals("3") || complete.equals("4")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } else if (complete.equals("1") || complete.equals("2") || complete.equals("5") || complete.equals("6") || complete.equals("7") || complete.equals("8")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + SearchClause.setWorkflowId(workflowid); + + if (complete.equals("0") || complete.equals("3") || complete.equals("4"))//modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&iswaitdo=1&date2during=" + date2during + "&viewType=" + viewType); + else + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType); + return; + } + if (method.equals("reqeustbywfidNode")) { + String workflowid = Util.null2String(request.getParameter("workflowid")); + String complete = Util.null2String(request.getParameter("complete")); + String nodeids = Util.null2String(request.getParameter("nodeids")); + String whereclause2 = " and FPersonUserNumber=''" + loginid + "'' "; + if (!"".equals(workflowid)) { + String _tempworkflowids = WorkflowVersion.getAllVersionStringByWFIDs(workflowid); + if (_tempworkflowids.equals("")) { + _tempworkflowids = workflowid; + } + if (whereclause.equals("")) { + whereclause += " t1.workflowid in (" + _tempworkflowids + ") "; + } else { + whereclause += " and t1.workflowid in (" + _tempworkflowids + ") "; + } + whereclause2 += " and fworkflowid=(select fworkflowid from " + eas_workflowinfo + " where fid=" + workflowid + ")"; + } + if (!"".equals(nodeids)) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(nodeids) + ") "; + } else { + whereclause += " and t1.currentnodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(nodeids) + ") "; + } + } + //complete=0表示待办事宜 + if (complete.equals("0")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + } + //modify by mackjoe at 2005-09-29 td1772 转发特殊处理,转发信息本人未处理一直都在待办事宜中显示 + //whereclause += " and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.islasttimes=1"; + // 分页控件上方的控件 1:未读;2:反馈;3:超时; add by Dracula @2014-1-10 + if (viewcondition == 1) { + whereclause += " and t2.viewtype = '0' and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.isprocessed is null and t2.isremark <> '5'"; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 2) { + whereclause += " and t2.viewtype = '-1' and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 3) { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + whereclause2 += " and 1=2 "; + } else if (viewcondition == 4) { + whereclause += " and t2.requestid in (select requestid from workflow_requestlog where logtype='s') "; + whereclause2 += " and 1=2 "; + } + processing = "0"; //待办 + + whereclause2 += " and FState=''1'' "; + } + //complete=1表示办结事宜 + else if (complete.equals("1")) { + if (whereclause.equals("")) { + whereclause += " (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } else { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } + + whereclause2 += " and FState=''16'' "; + } + //complete=2表示已办事宜 + else if (complete.equals("2")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 "; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 "; + } + whereclause2 += " and FState=''16'' "; + } + //complete=3表示待办事宜,红色new标记 + else if (complete.equals("3")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=0 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=0 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } + whereclause2 += " and FState=''1'' "; + } + //complete=4表示待办事宜,灰色new标记(反馈) + else if (complete.equals("4")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=-1 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=-1 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } + } + //complete=5表示已办事宜,灰色new标记 + else if (complete.equals("5")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=-1"; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=-1"; + } + } + //complete=50表示已办事宜,红色new标记 + else if (complete.equals("50")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } + } + //complete=6表示办结事宜,红色new标记 + else if (complete.equals("6")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=0"; + } else { + whereclause += " and t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=0"; + } + } + //complete=7表示办结事宜,灰色new标记 + else if (complete.equals("7")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=-1"; + } else { + whereclause += " and t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=-1"; + } + } + //complete=8表示超时事宜, + + else if (complete.equals("8")) { + if (whereclause.equals("")) { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + } else { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + } + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(whereclause2); + if (complete.equals("0") || complete.equals("3") || complete.equals("4")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } else if (complete.equals("1") || complete.equals("2") || complete.equals("5") || complete.equals("6") || complete.equals("7") || complete.equals("8")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + SearchClause.setWorkflowId(workflowid); + + if (complete.equals("0") || complete.equals("3") || complete.equals("4"))//modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&iswaitdo=1&date2during=" + date2during + "&viewType=" + viewType + "&processing=" + processing); + else + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType + "&processing=" + processing); + return; + } + + +//add by bpf on 2013-11-13 +//新的流程页面中带数字的的左侧菜单的一级菜单(流程大类别)点击之后的跳转 + +//实现的方式为reqeustByWfType和reqeustbywfidNode两个分支的代码组合了一下 + + if (method.equals("reqeustByWfTypeAndComplete")) { + String wftype = Util.null2String(request.getParameter("wftype")); + String complete = Util.null2String(request.getParameter("complete")); + String sqlwhere2 = " and FPersonUserNumber=''" + loginid + "''"; + int fromAdvancedMenu = Util.getIntValue(request.getParameter("fromadvancedmenu"), 0); + String selectedContent = Util.null2String(request.getParameter("selectedContent")); + int infoId = Util.getIntValue(request.getParameter("infoId"), 0); + + String selectedworkflow = ""; + String inSelectedWorkflowStr = ""; + if (fromAdvancedMenu == 1) { + LeftMenuInfoHandler infoHandler = new LeftMenuInfoHandler(); + LeftMenuInfo info = infoHandler.getLeftMenuInfo(infoId); + if (info != null) { + selectedworkflow = info.getSelectedContent(); + } + if (!"".equals(selectedContent)) { + selectedworkflow = selectedContent; + } + List selectedWorkflowIdList = Util.TokenizerString(selectedworkflow, "|"); + for (Iterator it = selectedWorkflowIdList.iterator(); it.hasNext(); ) { + String tmpstr = (String) it.next(); + if (tmpstr.indexOf("W") > -1) + inSelectedWorkflowStr += "," + tmpstr.substring(1); + } + if (inSelectedWorkflowStr.charAt(0) == ',') + inSelectedWorkflowStr = inSelectedWorkflowStr.substring(1); + if (!whereclause.equals("")) whereclause += " and "; + String _tempworkflowids = WorkflowVersion.getAllVersionStringByWFIDs(inSelectedWorkflowStr); + if (_tempworkflowids.equals("")) { + _tempworkflowids = "0"; + } + whereclause += " t1.workflowid in (" + _tempworkflowids + ") "; + whereclause += " and "; + } + if (whereclause.equals("")) { + whereclause += " t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + ") and (t1.deleted=0 or t1.deleted is null) "; + } else { + whereclause += " and t1.workflowid in( select id from workflow_base where workflowtype = " + wftype + ") and (t1.deleted=0 or t1.deleted is null) "; + } + + sqlwhere2 += " and fworkflowid in (SELECT fworkflowid FROM " + eas_workflowinfo + " WHERE FCategoryID=" + wftype + ") "; + + + String nodeids = Util.null2String(request.getParameter("nodeids")); + + if (!"".equals(nodeids)) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(nodeids) + ") "; + } else { + whereclause += " and t1.currentnodeid in (" + WorkflowVersion.getAllRelationNodeStringByNodeIDs(nodeids) + ") "; + } + } + //complete=0表示待办事宜 + if (complete.equals("0")) { + if (whereclause.equals("")) { + if (viewcondition == 3) { + whereclause += " ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.islasttimes=1"; + } else { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + } + } else { + if (viewcondition == 3) { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.islasttimes=1"; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.islasttimes=1"; + } + } + //modify by mackjoe at 2005-09-29 td1772 转发特殊处理,转发信息本人未处理一直都在待办事宜中显示 + //whereclause += " and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9') and t1.currentnodetype = '3')) and t2.islasttimes=1"; + // 分页控件上方的控件 1:未读;2:反馈;3:超时; add by Dracula @2014-1-10 + if (viewcondition == 1) { + whereclause += " and t2.viewtype = '0' and t2.isremark != '5' and t2.isprocessed is null "; + sqlwhere2 += " and 1=2 "; + } else if (viewcondition == 2) { + whereclause += " and t2.viewtype = '-1'"; + sqlwhere2 += " and 1=2 "; + //else if(viewcondition == 3) + //whereclause += " and t2.isremark = '5'"; + } else if (viewcondition == 4) { + whereclause += " and t2.requestid in (select requestid from workflow_requestlog where logtype='s')"; + sqlwhere2 += " and 1=2 "; + } + processing = "0"; //待办 + + sqlwhere2 += " and fstate=''1'' "; + } + //complete=1表示办结事宜 + else if (complete.equals("1")) { + if (whereclause.equals("")) { + whereclause += " (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } else { + whereclause += " and (t2.isremark in('2','4') or (t2.isremark=0 and t2.takisremark =-2)) and t1.currentnodetype = '3' and iscomplete=1 and islasttimes=1"; + } + + sqlwhere2 += " and fstate=''16'' "; + } + //complete=2表示已办事宜 + else if (complete.equals("2")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 "; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 "; + } + + sqlwhere2 += " and fstate=''16'' "; + } + //complete=3表示待办事宜,红色new标记 + else if (complete.equals("3")) { + + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=0 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=0 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } + } + //complete=4表示待办事宜,灰色new标记 + else if (complete.equals("4")) { + if (whereclause.equals("")) { + whereclause += " ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=-1 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } else { + whereclause += " and ((t2.isremark=0 and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7')) and t2.viewtype=-1 and t2.islasttimes=1 and ((t2.isremark='0' and (t2.isprocessed is null or (t2.isprocessed<>'2' and t2.isprocessed<>'3'))) or t2.isremark='1' or t2.isremark='8' or t2.isremark='9' or t2.isremark='5' or t2.isremark='7') "; + } + } + //complete=5表示已办事宜,灰色new标记 + else if (complete.equals("5")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=-1"; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=-1"; + } + } + //complete=50表示已办事宜,红色new标记 + else if (complete.equals("50")) { + if (whereclause.equals("")) { + whereclause += " t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } else { + whereclause += " and t2.isremark ='2' and t2.iscomplete=0 and t2.islasttimes=1 and t2.viewtype=0 and (agentType<>'1' or agentType is null) "; + } + } + //complete=6表示办结事宜,红色new标记 + else if (complete.equals("6")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=0"; + } else { + whereclause += " and t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=0"; + } + } + //complete=7表示办结事宜,灰色new标记 + else if (complete.equals("7")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=-1"; + } else { + whereclause += " and t1.currentnodetype = 3 and islasttimes=1 and t2.viewtype=-1"; + } + } + //complete=8表示超时事宜, + + else if (complete.equals("8")) { + if (whereclause.equals("")) { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + } else { + whereclause += " and ((t2.isremark='0' and (t2.isprocessed='2' or t2.isprocessed='3')) or t2.isremark='5') and t1.currentnodetype <> 3 "; + } + } + SearchClause.setWhereClause(whereclause); + SearchClause.setWhereclause2(sqlwhere2); + if (complete.equals("0") || complete.equals("3") || complete.equals("4")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } else if (complete.equals("1") || complete.equals("2") || complete.equals("5") || complete.equals("6") || complete.equals("7") || complete.equals("8")) { + orderclause = "t2.receivedate ,t2.receivetime "; + orderclause2 = orderclause; + } + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + if (complete.equals("0") || complete.equals("3") || complete.equals("4"))//modified by cyril on 2008-07-15 for td:8939 complete=3表示新到流程 + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&iswaitdo=1&date2during=" + date2during + "&viewType=" + viewType + "&processing=" + processing); + else + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&start=1&date2during=" + date2during + "&viewType=" + viewType + "&processing" + processing); + return; + } + + + String createrid = Util.null2String(request.getParameter("createrid")); + String docids = Util.null2String(request.getParameter("docids")); + String crmids = Util.null2String(request.getParameter("crmids")); + String hrmids = Util.null2String(request.getParameter("hrmids")); + String prjids = Util.null2String(request.getParameter("prjids")); + String creatertype = Util.null2String(request.getParameter("creatertype")); + String workflowid = Util.null2String(request.getParameter("workflowid")); + String nodetype = Util.null2String(request.getParameter("nodetype")); + String fromdate = Util.null2String(request.getParameter("fromdate")); + String todate = Util.null2String(request.getParameter("todate")); + String lastfromdate = Util.null2String(request.getParameter("lastfromdate")); + String lasttodate = Util.null2String(request.getParameter("lasttodate")); + String requestmark = Util.null2String(request.getParameter("requestmark")); + String branchid = Util.null2String(request.getParameter("branchid")); + if (!branchid.equals("")) session.setAttribute("branchid", branchid); + int during = Util.getIntValue(request.getParameter("during"), 0); + int order = Util.getIntValue(request.getParameter("order"), 0); + int isdeleted = Util.getIntValue(request.getParameter("isdeleted"), 0); + String requestname = Util.fromScreen2(request.getParameter("requestname"), user.getLanguage()); + requestname = requestname.trim(); + int subday1 = Util.getIntValue(request.getParameter("subday1"), 0); + int subday2 = Util.getIntValue(request.getParameter("subday2"), 0); + int maxday = Util.getIntValue(request.getParameter("maxday"), 0); + int state = Util.getIntValue(request.getParameter("state"), 0); + String requestlevel = Util.fromScreen(request.getParameter("requestlevel"), user.getLanguage()); +//add by xhheng @20050414 for TD 1545 + int iswaitdo = Util.getIntValue(request.getParameter("iswaitdo"), 0); + + Calendar now = Calendar.getInstance(); + String today = Util.add0(now.get(Calendar.YEAR), 4) + "-" + + Util.add0(now.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(now.get(Calendar.DAY_OF_MONTH), 2); + int year = now.get(Calendar.YEAR); + int month = now.get(Calendar.MONTH); + int day = now.get(Calendar.DAY_OF_MONTH); + + Date newdate = new Date(); + long datetime = newdate.getTime(); + Timestamp timestamp = new Timestamp(datetime); + String CurrentTime = (timestamp.toString()).substring(11, 13) + ":" + (timestamp.toString()).substring(14, 16) + ":" + (timestamp.toString()).substring(17, 19); + + + if (!createrid.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.creater='" + createrid + "'"; + } else { + whereclause += " and t1.creater='" + createrid + "'"; + } + if (!creatertype.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.creatertype='" + creatertype + "'"; + } else { + whereclause += " and t1.creatertype='" + creatertype + "'"; + } + } + } + +//添加附件上传文档的查询 + + if (!docids.equals("")) { + RecordSet.executeSql("select fieldname from workflow_formdict where fieldhtmltype=6 "); + } + + if (isoracle) { + if (!docids.equals("")) { + if (whereclause.equals("")) { + whereclause += " ((concat(concat(',' , To_char(t1.docids)) , ',') LIKE '%," + docids + ",%') "; + } else { + whereclause += " and ((concat(concat(',' , To_char(t1.docids)) , ',') LIKE '%," + docids + ",%') "; + } + while (RecordSet.next()) { + String fieldname = RecordSet.getString("fieldname"); + whereclause += " or (concat(concat(',' , To_char(t4." + fieldname + ")) , ',') LIKE '%," + docids + ",%') "; + } + whereclause += ") "; + } + if (!crmids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (concat(concat(',' , To_char(t1.crmids)) , ',') LIKE '%," + crmids + ",%') "; + } else { + whereclause += " and (concat(concat(',' , To_char(t1.crmids)) , ',') LIKE '%," + crmids + ",%') "; + } + } + if (!hrmids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (concat(concat(',' , To_char(t1.hrmids)) , ',') LIKE '%," + hrmids + ",%') "; + } else { + whereclause += " and (concat(concat(',' , To_char(t1.hrmids)) , ',') LIKE '%," + hrmids + ",%') "; + } + } + if (!prjids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (concat(concat(',' , To_char(t1.prjids)) , ',') LIKE '%," + prjids + ",%') "; + } else { + whereclause += " and (concat(concat(',' , To_char(t1.prjids)) , ',') LIKE '%," + prjids + ",%') "; + } + } + } else if (isdb2) { + if (!docids.equals("")) { + if (whereclause.equals("")) { + whereclause += " ((concat(concat(',' , varchar(t1.docids)) , ',') LIKE '%," + docids + ",%') "; + } else { + whereclause += " and ((concat(concat(',' , varchar(t1.docids)) , ',') LIKE '%," + docids + ",%') "; + } + while (RecordSet.next()) { + String fieldname = RecordSet.getString("fieldname"); + whereclause += " or (concat(concat(',' , varchar(t4." + fieldname + ")) , ',') LIKE '%," + docids + ",%') "; + } + whereclause += ") "; + } + if (!crmids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (concat(concat(',' , varchar(t1.crmids)) , ',') LIKE '%," + crmids + ",%') "; + } else { + whereclause += " and (concat(concat(',' , varchar(t1.crmids)) , ',') LIKE '%," + crmids + ",%') "; + } + } + if (!hrmids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (concat(concat(',' , varchar(t1.hrmids)) , ',') LIKE '%," + hrmids + ",%') "; + } else { + whereclause += " and (concat(concat(',' , varchar(t1.hrmids)) , ',') LIKE '%," + hrmids + ",%') "; + } + } + if (!prjids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (concat(concat(',' , varchar(t1.prjids)) , ',') LIKE '%," + prjids + ",%') "; + } else { + whereclause += " and (concat(concat(',' , varchar(t1.prjids)) , ',') LIKE '%," + prjids + ",%') "; + } + } + } else { + if (!docids.equals("")) { + if (whereclause.equals("")) { + whereclause += " ((',' + CONVERT(varchar,t1.docids) + ',' LIKE '%," + docids + ",%') "; + } else { + whereclause += " and ((',' + CONVERT(varchar,t1.docids) + ',' LIKE '%," + docids + ",%') "; + } + while (RecordSet.next()) { + String fieldname = RecordSet.getString("fieldname"); + whereclause += " or (',' + CONVERT(varchar,t4." + fieldname + ") + ',' LIKE '%," + docids + ",%') "; + } + whereclause += ") "; + } + if (!crmids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (',' + CONVERT(varchar,t1.crmids) + ',' LIKE '%," + crmids + ",%') "; + } else { + whereclause += " and (',' + CONVERT(varchar,t1.crmids) + ',' LIKE '%," + crmids + ",%') "; + } + } + if (!hrmids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (',' + CONVERT(varchar,t1.hrmids) + ',' LIKE '%," + hrmids + ",%') "; + } else { + whereclause += " and (',' + CONVERT(varchar,t1.hrmids) + ',' LIKE '%," + hrmids + ",%') "; + } + } + if (!prjids.equals("")) { + if (whereclause.equals("")) { + whereclause += " (',' + CONVERT(varchar,t1.prjids) + ',' LIKE '%," + prjids + ",%') "; + } else { + whereclause += " and (',' + CONVERT(varchar,t1.prjids) + ',' LIKE '%," + prjids + ",%') "; + } + } + } + if (!workflowid.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.workflowid in(" + WorkflowVersion.getAllVersionStringByWFIDs(workflowid) + ")"; + } else { + /*--xwj for td2045 on 2005-05-26 --查询流程时, 同时选择流程类型和创建人时出错*/ + //whereclause+=" and t1.workflowid in("+workflowid+")"; + whereclause = "t1.workflowid in(" + WorkflowVersion.getAllVersionStringByWFIDs(workflowid) + ") and " + whereclause; + } + } + if (!cdepartmentid.equals("")) { + String tempWhere = ""; + ArrayList tempArr = Util.TokenizerString(cdepartmentid, ","); + for (int i = 0; i < tempArr.size(); i++) { + String tempcdepartmentid = (String) tempArr.get(i); + if (tempWhere.equals("")) tempWhere += "departmentid=" + tempcdepartmentid; + else tempWhere += " or departmentid=" + tempcdepartmentid; + } + if (!tempWhere.equals("")) { + if (whereclause.equals("")) { + whereclause += " exists(select 1 from hrmresource where t1.creater=id and t1.creatertype='0' and (" + tempWhere + "))"; + } else { + whereclause += " and exists(select 1 from hrmresource where t1.creater=id and t1.creatertype='0' and (" + tempWhere + "))"; + } + } + } + whereclause += WorkflowComInfo.getDateDuringSql(date2during); + if (!requestname.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.requestname like '%" + requestname + "%'"; + } else { + whereclause += " and t1.requestname like '%" + requestname + "%'"; + } + } + if (!nodetype.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype='" + nodetype + "'"; + } else { + whereclause += " and t1.currentnodetype='" + nodetype + "'"; + } + } + if (!requestmark.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.requestmark like '%" + requestmark + "%'"; + } else { + whereclause += " and t1.requestmark like '%" + requestmark + "%'"; + } + } + + if (!lastfromdate.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.lastoperatedate>='" + lastfromdate + "'"; + } else { + whereclause += " and t1.lastoperatedate>='" + lastfromdate + "'"; + } + } + if (!lasttodate.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.lastoperatedate<='" + lasttodate + "'"; + } else { + whereclause += " and t1.lastoperatedate<='" + lasttodate + "'"; + } + } + if (during == 0) { + if (!fromdate.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.createdate>='" + fromdate + "'"; + } else { + whereclause += " and t1.createdate>='" + fromdate + "'"; + } + } + if (!todate.equals("")) { + if (whereclause.equals("")) { + whereclause += " t1.createdate<='" + todate + "'"; + } else { + whereclause += " and t1.createdate<='" + todate + "'"; + } + } + } else { + if (during == 1) { + if (whereclause.equals("")) whereclause += " t1.createdate='" + today + "'"; + else whereclause += " and t1.createdate='" + today + "'"; + } + if (during == 2) { + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, month, day - 1); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + /* 刘煜 2004-05-08 修改,原来or 之间没有括号,造成系统死机 */ + if (whereclause.equals("")) + whereclause += " ((t1.createdate='" + today + "' and t1.createtime<='" + CurrentTime + "')" + + " or (t1.createdate='" + lastday + "' and t1.createtime>='" + CurrentTime + "')) "; + else + whereclause += " and ((t1.createdate='" + today + "' and t1.createtime<='" + CurrentTime + "')" + + " or (t1.createdate='" + lastday + "' and t1.createtime>='" + CurrentTime + "')) "; + } + if (during == 3) { + int days = now.getTime().getDay(); + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, month, day - days); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + if (whereclause.equals("")) + whereclause += " t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + else + whereclause += " and t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + } + if (during == 4) { + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, month, day - 7); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + if (whereclause.equals("")) + whereclause += " t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + else + whereclause += " and t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + } + if (during == 5) { + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, month, 1); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + if (whereclause.equals("")) + whereclause += " t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + else + whereclause += " and t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + } + if (during == 6) { + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, month, day - 30); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + if (whereclause.equals("")) + whereclause += " t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + else + whereclause += " and t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + } + if (during == 7) { + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, 0, 1); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + if (whereclause.equals("")) + whereclause += " t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + else + whereclause += " and t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + } + if (during == 8) { + Calendar tempday = Calendar.getInstance(); + tempday.clear(); + tempday.set(year, month, day - 365); + String lastday = Util.add0(tempday.get(Calendar.YEAR), 4) + "-" + + Util.add0(tempday.get(Calendar.MONTH) + 1, 2) + "-" + + Util.add0(tempday.get(Calendar.DAY_OF_MONTH), 2); + if (whereclause.equals("")) + whereclause += " t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + else + whereclause += " and t1.createdate<='" + today + "' and t1.createdate>='" + lastday + "'"; + } + + } + + if (isoracle) { + if (subday1 != 0) { + if (whereclause.equals("")) + whereclause += " (to_date(t1.lastoperatedate,'YYYY-MM-DD')-to_date(t1.createdate,'YYYY-MM-DD'))>" + subday1; + else + whereclause += " and (to_date(t1.lastoperatedate,'YYYY-MM-DD')-to_date(t1.createdate,'YYYY-MM-DD'))>" + subday1; + } + + if (subday2 != 0) { + if (whereclause.equals("")) + whereclause += " (to_date(t1.lastoperatedate,'YYYY-MM-DD')-to_date(t1.createdate,'YYYY-MM-DD'))<=" + subday2; + else + whereclause += " and (to_date(t1.lastoperatedate,'YYYY-MM-DD')-to_date(t1.createdate,'YYYY-MM-DD'))<=" + subday2; + } + + if (maxday != 0) { + if (whereclause.equals("")) + whereclause += " (to_date(t1.lastoperatedate,'YYYY-MM-DD')-to_date(t1.createdate,'YYYY-MM-DD'))=" + maxday; + else + whereclause += " and (to_date(t1.lastoperatedate,'YYYY-MM-DD')-to_date(t1.createdate,'YYYY-MM-DD'))=" + maxday; + } + } else if (isdb2) { + if (subday1 != 0) { + if (whereclause.equals("")) + whereclause += " (date(t1.lastoperatedate,'YYYY-MM-DD')-date(t1.createdate,'YYYY-MM-DD'))>" + subday1; + else + whereclause += " and (date(t1.lastoperatedate,'YYYY-MM-DD')-date(t1.createdate,'YYYY-MM-DD'))>" + subday1; + } + + if (subday2 != 0) { + if (whereclause.equals("")) + whereclause += " (date(t1.lastoperatedate,'YYYY-MM-DD')-date(t1.createdate,'YYYY-MM-DD'))<=" + subday2; + else + whereclause += " and (date(t1.lastoperatedate,'YYYY-MM-DD')-date(t1.createdate,'YYYY-MM-DD'))<=" + subday2; + } + + if (maxday != 0) { + if (whereclause.equals("")) + whereclause += " (date(t1.lastoperatedate,'YYYY-MM-DD')-date(t1.createdate,'YYYY-MM-DD'))=" + maxday; + else + whereclause += " and (date(t1.lastoperatedate,'YYYY-MM-DD')-date(t1.createdate,'YYYY-MM-DD'))=" + maxday; + } + } else { + if (subday1 != 0) { + if (whereclause.equals("")) + whereclause += " (convert(datetime,t1.lastoperatedate)-convert(datetime,t1.createdate))>" + subday1; + else + whereclause += " and (convert(datetime,t1.lastoperatedate)-convert(datetime,t1.createdate))>" + subday1; + } + + if (subday2 != 0) { + if (whereclause.equals("")) + whereclause += " (convert(datetime,t1.lastoperatedate)-convert(datetime,t1.createdate))<=" + subday2; + else + whereclause += " and (convert(datetime,t1.lastoperatedate)-convert(datetime,t1.createdate))<=" + subday2; + } + + if (maxday != 0) { + if (whereclause.equals("")) + whereclause += " (convert(datetime,t1.lastoperatedate)-convert(datetime,t1.createdate))=" + maxday; + else + whereclause += " and (convert(datetime,t1.lastoperatedate)-convert(datetime,t1.createdate))=" + maxday; + } + } + + if (state == 1) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype='3'"; + } else { + whereclause += " and t1.currentnodetype='3'"; + } + } + if (state == 2) { + if (whereclause.equals("")) { + whereclause += " t1.currentnodetype<>'3'"; + } else { + whereclause += " and t1.currentnodetype<>'3'"; + } + } + + if (isdeleted != 2) { + if (whereclause.equals("")) { + if (isdeleted == 0) + whereclause += " (exists (select 1 from workflow_base where (isvalid=1 or isvalid=3) and workflow_base.id=t2.workflowid)) "; + else + whereclause += " exists (select 1 from workflow_base where (isvalid=0 or isvalid is null) and workflow_base.id=t2.workflowid) "; + } else { + if (isdeleted == 0) + whereclause += " and (exists (select 1 from workflow_base where (isvalid=1 or isvalid=3) and workflow_base.id=t2.workflowid)) "; + else + whereclause += " and exists (select 1 from workflow_base where (isvalid=0 or isvalid is null) and workflow_base.id=t2.workflowid) "; + } + } + + if (!requestlevel.equals("")) { + if (whereclause.equals("")) whereclause += " t1.requestlevel=" + requestlevel; + else whereclause += " and t1.requestlevel=" + requestlevel; + } + + + if (whereclause.equals("")) whereclause += " islasttimes=1 "; + else whereclause += " and islasttimes=1 "; + + orderclause = "t2.receivedate ,t2.receivetime"; + orderclause2 = "t2.receivedate ,t2.receivetime"; + + SearchClause.setOrderClause(orderclause); + SearchClause.setOrderClause2(orderclause2); + SearchClause.setWhereClause(whereclause); + + SearchClause.setWorkflowId(workflowid); + SearchClause.setNodeType(nodetype); + SearchClause.setFromDate(fromdate); + SearchClause.setToDate(todate); + SearchClause.setCreaterType(creatertype); + SearchClause.setCreaterId(createrid); + SearchClause.setRequestLevel(requestlevel); + SearchClause.setDepartmentid(cdepartmentid); + sendRedirect(out, request, response, "WFSearchResult.jsp?resourceid=" + resourceid + "&needHeader=" + needHeader + "&query=1&pagenum=1&iswaitdo=" + iswaitdo + "&docids=" + docids + "&date2during=" + date2during + "&viewType=" + viewType); + + +%> + + +<%! + private String getLike(HttpServletRequest request, String parameter) { + parameter = request.getParameter(parameter); + if (parameter == null) { + parameter = "'%'"; + } else { + parameter = "'%" + parameter + "%'"; + } + return parameter; + } +%> + +<%! + private String getCount(HttpServletRequest request, HttpServletResponse response) { + String flowTitle = getLike(request, "flowTitle");//流程名称 + String workflowid = ""; + String nodetype = ""; + String fromdate = ""; + String todate = ""; + String creatertype = ""; + String createrid = ""; + String requestlevel = ""; + String fromdate2 = ""; + String todate2 = ""; + String workcode = ""; + String querys = Util.null2String(request.getParameter("query")); + String fromself = Util.null2String(request.getParameter("fromself")); + String fromselfSql = Util.null2String(request.getParameter("fromselfSql")); + String isfirst = Util.null2String(request.getParameter("isfirst")); + String docids = Util.null2String(request.getParameter("docids")); + String flag = Util.null2String(request.getParameter("flag")); + String branchid = ""; + String cdepartmentid = ""; + WorkflowComInfo WorkflowComInfo = null; + try { + WorkflowComInfo = new WorkflowComInfo(); + } catch (Exception e) { + + } + + RecordSet RecordSet = new RecordSet(); + User user = HrmUserVarify.getUser(request, response); + int usertype = 0; + int date2during = Util.getIntValue(Util.null2String(request.getParameter("date2during")), 0); + try { + branchid = Util.null2String((String) request.getSession().getAttribute("branchid")); + } catch (Exception e) { + branchid = ""; + } + BaseBean baseBean = new BaseBean(); + SearchClause SearchClause = (SearchClause) request.getSession().getAttribute("SearchClause"); + int isovertime = Util.getIntValue(request.getParameter("isovertime"), 0); + + + workflowid = SearchClause.getWorkflowId(); + nodetype = SearchClause.getNodeType(); + fromdate = SearchClause.getFromDate(); + todate = SearchClause.getToDate(); + creatertype = SearchClause.getCreaterType(); + createrid = SearchClause.getCreaterId(); + requestlevel = SearchClause.getRequestLevel(); + fromdate2 = SearchClause.getFromDate2(); + todate2 = SearchClause.getToDate2(); + cdepartmentid = SearchClause.getDepartmentid(); + + String newsql = ""; + if (!workflowid.equals("") && !workflowid.equals("0")) + newsql += " and t1.workflowid in(" + workflowid + ")"; + if (date2during > 0 && date2during < 37) + newsql += WorkflowComInfo.getDateDuringSql(date2during); + if (fromself.equals("1")) { + + if (!nodetype.equals("")) + newsql += " and t1.currentnodetype='" + nodetype + "'"; + + if (!fromdate.equals("")) + newsql += " and t1.createdate>='" + fromdate + "'"; + + if (!todate.equals("")) + newsql += " and t1.createdate<='" + todate + "'"; + + if (!fromdate2.equals("")) + newsql += " and t2.receivedate>='" + fromdate2 + "'"; + + if (!todate2.equals("")) + newsql += " and t2.receivedate<='" + todate2 + "'"; + + if (!workcode.equals("")) + newsql += " and t1.creatertype= '0' and t1.creater in(select id from hrmresource where workcode like '%" + workcode + "%')"; + + if (!createrid.equals("")) { + newsql += " and t1.creater='" + createrid + "'"; + newsql += " and t1.creatertype= '" + creatertype + "' "; + } + if (!cdepartmentid.equals("")) { + String tempWhere = ""; + ArrayList tempArr = Util.TokenizerString(cdepartmentid, ","); + for (int i = 0; i < tempArr.size(); i++) { + String tempcdepartmentid = (String) tempArr.get(i); + if (tempWhere.equals("")) + tempWhere += "departmentid=" + tempcdepartmentid; + else + tempWhere += " or departmentid=" + tempcdepartmentid; + } + if (!tempWhere.equals("")) + newsql += " and exists(select 1 from hrmresource where t1.creater=id and t1.creatertype='0' and (" + tempWhere + "))"; + } + + if (!requestlevel.equals("")) { + newsql += " and t1.requestlevel=" + requestlevel; + } + + if (!querys.equals("1")) { + if (!fromselfSql.equals("")) + newsql += " and " + fromselfSql; + } else { + if (fromself.equals("1")) + newsql += " and islasttimes=1 "; + } + + } + String resourceid = Util.null2String(request.getParameter("resourceid")); + String CurrentUser = "".equals(resourceid) ? Util.null2String((String) request.getSession().getAttribute("RequestViewResource")) : resourceid; + String userID = String.valueOf(user.getUID()); + String logintype = "" + user.getLogintype(); + if (logintype.equals("2")) + usertype = 1; + if (CurrentUser.equals("")) { + CurrentUser = "" + user.getUID(); + } + boolean superior = false; //是否为被查看者上级或者本身 + + if (userID.equals(CurrentUser)) { + superior = true; + } else { + RecordSet.executeSql("SELECT * FROM HrmResource WHERE ID = " + CurrentUser + " AND managerStr LIKE '%" + userID + "%'"); + + if (RecordSet.next()) { + superior = true; + } + } + + String sqlwhere = ""; + if (isovertime == 1) { + sqlwhere = "where t1.requestname like " + flowTitle + " and (t1.deleted <> 1 or t1.deleted is null or t1.deleted='') and t1.requestid = t2.requestid and t2.id in (Select max(z1.id) from workflow_currentoperator z1 where exists(select 1 from SysPoppupRemindInfonew z2 where z1.requestid=z2.requestid and z2.type=10 and z2.userid = " + + user.getUID() + + " and z2.usertype='" + + (Util.getIntValue(logintype, 1) - 1) + + "' and exists (select 1 from workflow_currentoperator z3 where z2.requestid=z3.requestid and ((z3.isremark='0' and (z3.isprocessed='2' or z3.isprocessed='3' or z3.isprocessed is null)) or z3.isremark='5') and z3.islasttimes=1)) group by z1.requestid)"; + } else { + if (superior && !flag.equals("")) + CurrentUser = userID; + sqlwhere = "where t1.requestname like " + flowTitle + " and (t1.deleted <> 1 or t1.deleted is null or t1.deleted='') and t1.requestid = t2.requestid and t2.userid = " + CurrentUser + " and t2.usertype=" + usertype; + if (!Util.null2String(SearchClause.getWhereClause()).equals("")) { + sqlwhere += " and " + SearchClause.getWhereClause(); + //out.print("sql***********"+SearchClause.getWhereClause()); + } + } + + if (RecordSet.getDBType().equals("oracle")) { + sqlwhere += " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater=" + user.getUID() + ")) "; + } else { + sqlwhere += " and (isnull(t1.currentstatus,-1) = -1 or (isnull(t1.currentstatus,-1)=0 and t1.creater=" + user.getUID() + ")) "; + } + String orderby = ""; + sqlwhere += " " + newsql; + orderby = SearchClause.getOrderClause(); + if (orderby.equals("")) { + orderby = "t2.receivedate ,t2.receivetime"; + } + String strworkflowid = ""; + int startIndex = 0; + + String fromhp = Util.null2String(request.getParameter("fromhp")); + if (fromhp.equals("1")) { + String eid = Util.null2String(request.getParameter("eid")); + String tabid = Util.null2String(request.getParameter("tabid")); + RecordSet.execute("select count(content) as count from workflowcentersettingdetail where type = 'flowid' and eid=" + eid + "and tabId = '" + tabid + "'"); + if (RecordSet.next()) { + if (RecordSet.getInt("count") > 0) { + strworkflowid = " in (select content from workflowcentersettingdetail where type = 'flowid' and eid=" + eid + "and tabId = '" + tabid + "' )"; + } + } + } else { + + if (!Util.null2String(SearchClause.getWhereClause()).equals("")) { + String tempstr = SearchClause.getWhereClause(); + if (tempstr.indexOf("t1.workflowid") != -1) { + startIndex = tempstr.indexOf("t1.workflowid") + 13;//added by xwj for td2045 on 2005-05-26 + if (tempstr.indexOf("and") != -1) { + if (tempstr.indexOf("(t1.deleted=0") != -1) { + int startIndex1 = tempstr.indexOf("and"); + int startIndex2 = tempstr.indexOf("and", startIndex1 + 1); + strworkflowid = tempstr.substring(startIndex, startIndex2); + } else { + strworkflowid = tempstr.substring(startIndex, tempstr.indexOf("and")); + } + if (strworkflowid.indexOf("(") != -1 && strworkflowid.indexOf(")") == -1) + strworkflowid += ")"; + } else + strworkflowid = tempstr.substring(startIndex, tempstr.indexOf(")") + 1); + if (strworkflowid.indexOf("(") != -1 && strworkflowid.indexOf(")") == -1) + strworkflowid += ")"; + } + } else { + if (!workflowid.equals("")) + strworkflowid = " in (" + workflowid + ")"; + } + } + + String tableString = ""; + + String backfields = " t1.requestid, t1.createdate, t1.createtime,t1.creater, t1.creatertype, t1.workflowid, t1.requestname, t1.status,t1.requestlevel,t1.currentnodeid,t2.viewtype,t2.receivedate,t2.receivetime,t2.isremark,t2.nodeid,t2.agentorbyagentid,t2.agenttype,t2.isprocessed "; + String fromSql = " from workflow_requestbase t1,workflow_currentoperator t2 ";//xxxxx + String sqlWhere = sqlwhere; + if (sqlWhere.indexOf("in (select id from workflow_base where isvalid=") < 0) { + sqlWhere += " and t1.workflowid in (select id from workflow_base where (isvalid='1' or isvalid='3') )"; + } + String para2 = "column:requestid+column:workflowid+column:viewtype+" + isovertime + "+" + user.getLanguage() + "+column:nodeid+column:isremark+" + userID + + "+column:agentorbyagentid+column:agenttype+column:isprocessed"; + if (!docids.equals("")) { + fromSql = fromSql + ",workflow_form t4 "; + sqlWhere = sqlWhere + " and t1.requestid=t4.requestid "; + } + + if (!superior) { + sqlWhere += " AND EXISTS (SELECT 1 FROM workFlow_CurrentOperator workFlowCurrentOperator WHERE t2.workflowid = workFlowCurrentOperator.workflowid AND t2.requestid = workFlowCurrentOperator.requestid AND workFlowCurrentOperator.userid=" + + userID + " and workFlowCurrentOperator.usertype = " + usertype + ") "; + } + + if (!branchid.equals("")) { + sqlWhere += " AND t1.creater in (select id from hrmresource where subcompanyid1=" + branchid + ") "; + } + + //add by bpf on 2013-11-14 + String countSql = "select count(1) as wfCount " + fromSql + sqlWhere; + try { + response.getWriter().print(countSql); + response.getWriter().print(" "); + } catch (Exception e) { + + } + + RecordSet.executeSql(countSql); + String wfCount = "0"; + while (RecordSet.next()) { + wfCount = RecordSet.getString("wfCount"); + } + return wfCount; + + } +%> \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/workflow/search/WFSuperviseList.jsp b/src/test/resources/WEB-INF/ecology/workflow/search/WFSuperviseList.jsp new file mode 100755 index 0000000..39524fd --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/search/WFSuperviseList.jsp @@ -0,0 +1,723 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea" %> +<%@ taglib uri="/browserTag" prefix="brow"%> + +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="weaver.workflow.search.WfAdvanceSearchUtil" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.general.*,weaver.workflow.request.WFWorkflows,weaver.workflow.request.WFWorkflowTypes"%> + + + + + + + + + + + + + + + + + + + +<% + String imagefilename = "/images/hdDOC_wev8.gif"; + String titlename = SystemEnv.getHtmlLabelName(197, user.getLanguage()) + ":" + SystemEnv.getHtmlLabelName(648, user.getLanguage()); + String needfav = "1"; + String needhelp = ""; +%> + +
+<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %> +<% + String method = Util.null2String(request.getParameter("method")); + String objid = Util.null2String(request.getParameter("objid")); + String workflowid = Util.null2String(request.getParameter("workflowid")); + String nodetype = Util.null2String(request.getParameter("nodetype")); + String creatertype = Util.null2String(request.getParameter("creatertype")); + String requestlevel = Util.null2String(request.getParameter("requestlevel")); + //菜单点击:workflow 点击的是流程 type 点击的是流程类型 + String menutype = Util.null2String(request.getParameter("menutype")); + //菜单点击:workflowid or worktypeid 依据menutype而定 + String menuid = Util.null2String(request.getParameter("menuid")); + //菜单点击:flowAll 所有流程;flowNew 未读流程;flowResponse 反馈的;flowOut 超时的 + String complete = Util.null2String(request.getParameter("complete")); + //已督办:2;未督办:1 + String isdo = Util.null2String(request.getParameter("isdo")); + //创建日期标识 + String datecondition=Util.null2String(request.getParameter("createdateselect")); + //接收日期标识 + String recievedateselect = Util.null2String(request + .getParameter("recievedateselect")); + + int ownerdepartmentid = Util.getIntValue(request.getParameter("ownerdepartmentid"),0); + int creatersubcompanyid=Util.getIntValue(request.getParameter("creatersubcompanyid"),0); + int createrid = Util.getIntValue(request.getParameter("createrid"),0); + int createrid2=Util.getIntValue(request.getParameter("createrid2"),0); + int unophrmid=Util.getIntValue(request.getParameter("unophrmid"),0); + + String sqlwhere=""; + boolean isnew = false; + + //根据页面上(用户所输入的)查询方式来设置查询条件 + if (method.equals("type")&&!objid.trim().equals("")) { + workflowid = ""; + sqlwhere=" b.workflowtype="+objid; + } + if (method.equals("workflow")&&!objid.trim().equals("")) { + workflowid = objid; + sqlwhere=" b.id="+objid; + } + if (method.equals("request")&&!objid.trim().equals("")) { + String level = Util.null2String(request.getParameter("level")); + //类型级别 + if (level.equals("1")) + { + workflowid = ""; + sqlwhere=" b.workflowtype="+objid; + }else if (level.equals("2")) + { + workflowid = objid; + sqlwhere=" b.id="+objid; + } + isnew = true; + } + + + //如果当前流程ID列表为空,则对其进行二次赋值 + if(workflowid.equals("")){ + //如果当前流程类型不为空,则将流程类型的所有流程设置为流程ID列表 + if(method.equals("type")&&!objid.trim().equals("")){ + RecordSet.execute("select id from workflow_base where workflowtype="+objid); + while(RecordSet.next()){ + int id_tmp = Util.getIntValue(RecordSet.getString(1), 0); + workflowid += (id_tmp+","); + } + if(!workflowid.equals("")){ + workflowid = workflowid.substring(0, workflowid.length()-1); + } + }else{ + //如果当前流程类型为空,则从会话作用域中来获取流程ID列表 + workflowid = SearchClause.getWorkflowId(); + } + } + ArrayList flowList=Util.TokenizerString(workflowid,","); + + + //调用WFUrgerManager类获取当前用户的所有流程的流程督办的配置信息 + int logintype = Util.getIntValue(user.getLogintype(),1); + int userID = user.getUID(); + WFUrgerManager.setLogintype(logintype); + WFUrgerManager.setUserid(userID); + WFUrgerManager.setSqlwhere(sqlwhere); + WFUrgerManager.setWorkflowIDs(workflowid); + ArrayList wftypes=WFUrgerManager.getWrokflowTree(); + String tmpTableName = WFUrgerManager.getTmpTableName(); + + + String requestids = ""; + String requestSql = ""; + Map mapRequestIDs = new HashMap(); + for(int i=0;i0) break; + WFWorkflows wfObj=(WFWorkflows)workflows.get(j); + String tempWorkflow=wfObj.getWorkflowid()+""; + //查询的流程ID列表为空,或者流程ID列表包含 + if("".equals(workflowid) || flowList.contains(tempWorkflow)) { + ArrayList requests = null; + + if(isnew){ + requests=wfObj.getNewrequestids(); + }else{ + requests=wfObj.getReqeustids(); + } + + for(int k=0;k + + + + + + + + <%@ include file="/systeminfo/TopTitle_wev8.jsp" %> + + + + + + + +
+ + + + "/> + 高级搜索 + +
+ + +<% +%> + + +
+ + + <%=SystemEnv.getHtmlLabelName(229, user.getLanguage())%> + + "> + + + <%=SystemEnv.getHtmlLabelName(714, user.getLanguage())%> + " > + <%=SystemEnv.getHtmlLabelName(15534, user.getLanguage())%> + + + + <%=SystemEnv.getHtmlLabelName(882, user.getLanguage())%> + + + + + + "> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp" hasInput="true" width="150px" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp" browserSpanValue="<%=Util.toScreen(ResourceComInfo.getResourcename(createrid+""),user.getLanguage())%>"> + + + + + "> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/CRM/data/CustomerBrowser.jsp" hasInput="true" width="150px" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp?type=7" browserSpanValue="<%=Util.toScreen(CustomerInfo.getCustomerInfoname(createrid2+""),user.getLanguage())%>"> + + + + + + + + <%=SystemEnv.getHtmlLabelName(19225, user.getLanguage())%> + + " browserOnClick="" browserUrl="/hrm/company/DepartmentBrowser.jsp?selectedids=" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp?type=4" width="80%" browserSpanValue="<%=ownerdepartmentid!=0?Util.toScreen(DepartmentComInfo.getDepartmentname(ownerdepartmentid+""),user.getLanguage()):""%>"> + + <%=SystemEnv.getHtmlLabelName(22788, user.getLanguage())%> + + " browserOnClick="" browserUrl="/hrm/company/SubcompanyBrowser.jsp" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp?type=164" width="80%" browserSpanValue="<%=creatersubcompanyid!=0?Util.toScreen(SubCompanyComInfo.getSubCompanyname(creatersubcompanyid+""),user.getLanguage()):""%>"> + + <%=SystemEnv.getHtmlLabelName(17994, user.getLanguage())%> + + + "> + "> + + + <%=SystemEnv.getHtmlLabelName(722, user.getLanguage())%> + + + "> + "> + + + <%=SystemEnv.getHtmlLabelName(19061, user.getLanguage())%> + + + + <%=SystemEnv.getHtmlLabelName(15536, user.getLanguage())%> + + + + <%=SystemEnv.getHtmlLabelName(16354, user.getLanguage())%> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp" width="80%" browserSpanValue="<%=unophrmid!=0?Util.toScreen(ResourceComInfo.getResourcename(unophrmid+""),user.getLanguage()):""%>"> + + <%=SystemEnv.getHtmlLabelName(857, user.getLanguage())%> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/docs/docs/DocBrowser.jsp?isworkflow=1" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp?type=9" width="80%" browserSpanValue="<%=Util.toScreen(DocComInfo.getDocname(Util.null2String(request.getParameter("docids"))+""),user.getLanguage())%>"> + + <%=SystemEnv.getHtmlLabelName(179, user.getLanguage())%> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp" width="80%" browserSpanValue="<%=Util.toScreen(ResourceComInfo.getResourcename(Util.null2String(request.getParameter("hrmids"))+""),user.getLanguage())%>"> + + <%=SystemEnv.getHtmlLabelName(783, user.getLanguage())%> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/CRM/data/CustomerBrowser.jsp" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp?type=18" width="80%" browserSpanValue="<%=Util.toScreen(CustomerInfo.getCustomerInfoname(Util.null2String(request.getParameter("crmids"))+""),user.getLanguage())%>"> + + <%=SystemEnv.getHtmlLabelName(782, user.getLanguage())%> + + " browserOnClick="" browserUrl="/systeminfo/BrowserMain.jsp?url=/proj/data/ProjectBrowser.jsp" hasInput="true" isSingle="true" hasBrowser = "true" isMustInput='1' completeUrl="/data.jsp?type=135" width="80%" browserSpanValue="<%=Util.toScreen(ProjectInfoComInfo.getProjectInfoname(Util.null2String(request.getParameter("proids"))+""),user.getLanguage())%>"> + + + + + + + + + + | + + | + + + + + + + +
+ + + + +
+ <% + String tableString = ""; + String fromSql = ""; + String sqlWhere = newsql; + String backfields = " t1.requestid, t1.createdate, t1.createtime,t1.creater, t1.creatertype, t1.workflowid, t1.requestname,t1.requestnamenew, t1.status,t1.requestlevel,t1.currentnodeid,t2.receivedatetime"; + if(RecordSet.getDBType().equals("oracle")){ + fromSql = " from (select requestid,max(receivedate||' '||receivetime) as receivedatetime from workflow_currentoperator group by requestid) t2,workflow_requestbase t1 "; + }else{ + fromSql = " from (select requestid,max(receivedate+' '+receivetime) as receivedatetime from workflow_currentoperator group by requestid) t2,workflow_requestbase t1 "; + } + if (!requestids.equals("")) { + if (isnew) { + sqlWhere += " AND t1.requestid in("+requestids+") "; + } + }else{ + sqlWhere+=" and 1>2 "; + } + if(RecordSet.getDBType().equals("oracle")) + { + sqlWhere += " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "; + } + else + { + sqlWhere += " and (isnull(t1.currentstatus,-1) = -1 or (isnull(t1.currentstatus,-1)=0 and t1.creater="+user.getUID()+")) "; + } + String table1 = "select " + backfields + fromSql + sqlWhere; + backfields = " t1.requestid, t1.createdate, t1.createtime,t1.creater, t1.creatertype, t1.workflowid, t1.requestname, t1.requestnamenew, t1.status,t1.requestlevel,t1.currentnodeid,t1.receivedatetime"; + fromSql =" from ("+table1+") t1 "; + + if(tmpTableName != null) { + fromSql += " ,(Select requestId from "+tmpTableName+") t2 "; + sqlWhere = " where t1.requestid=t2.requestid "; + } else { + sqlWhere = ""; + } + //已督办 + if(isdo.equals("2")) + sqlWhere += " and (select count(0) from workflow_requestlog where requestid =t2.requestid and logtype='s' and operator="+user.getUID()+")>0 "; + //未督办 + else if(isdo.equals("1")) + sqlWhere += " and (select count(0) from workflow_requestlog where requestid =t2.requestid and logtype='s' and operator="+user.getUID()+")=0 "; + + if(menutype.equals("workflow")) + sqlWhere += " and t1.workflowid='"+menuid+"' "; + else if(menutype.equals("type")) + sqlWhere += " and (select count(0) from workflow_base where id=t1.workflowid and workflowtype='"+menuid+"')>0 "; + //未读流程 + if(complete.equals("3")) + sqlWhere += " and (select count(0) from workflow_requestviewlog where id=t2.requestid and currentnodeid = t1.currentnodeid and viewer="+user.getUID()+")=0"; + //反馈流程 + else if(complete.equals("4")); + //超时流程 + else if(complete.equals("8")); + + String popeUrgepara = "column:requestid+column:workflowid+"+user.getUID()+"+"+(logintype-1)+"+"+ user.getLanguage(); + + String operateString= ""; + operateString = ""; + + operateString +=" "; + + //operateString +=" "; + operateString +=""; + + String orderby = " t1.receivedatetime "; + String para2 = "column:requestid+column:workflowid+"+userID+"+"+(logintype-1)+"+"+ user.getLanguage(); + String para4=user.getLanguage()+"+"+user.getUID(); + System.out.println("selct "+backfields +" from "+fromSql+" where "+sqlWhere+" order by "+orderby); + tableString = " " + + + " " + + operateString + + " "; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + tableString += ""; + + tableString += " " + + "
"; + %> + + +
+
+
+ +<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %> + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrame.jsp b/src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrame.jsp new file mode 100755 index 0000000..8ecba85 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrame.jsp @@ -0,0 +1,327 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="java.util.*" %> + + + + + +<% + int isfrom = Util.getIntValue(request.getParameter("isfrom"),-1); + + String navName = SystemEnv.getHtmlLabelName(1207, user.getLanguage()); + String typeName=""; + String workFlowName=""; + String typeid=Util.null2String(request.getParameter("wftype")); + String workflowid=Util.null2String(request.getParameter("workflowid")); + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + if(offical.equals("1")){ + if(officalType==1){ + navName = SystemEnv.getHtmlLabelName(33769, user.getLanguage()); + }else if(officalType==2){ + navName = SystemEnv.getHtmlLabelName(33787, user.getLanguage()); + } + } + //查询流程名 + if(typeid!=null && typeid!=""){ + StringBuffer typeSql= new StringBuffer(); + typeSql.append("select typename from workflow_type where"); + typeSql.append(" id= ").append(typeid); + + RecordSet.execute(typeSql.toString()); + + if(RecordSet.next()){ + typeName=Util.null2String(RecordSet.getString("typename")); + + } + } + //查询工作流类型 + if(workflowid!=null && workflowid!="" ){ + StringBuffer workflowSql= new StringBuffer(); + workflowSql.append("select workflowname from workflow_base where"); + workflowSql.append(" id= ").append(workflowid); + + RecordSet.execute(workflowSql.toString()); + + if(RecordSet.next()){ + workFlowName=Util.null2String(RecordSet.getString("workflowname")); + } + } + if(workFlowName!="" ){ + navName=workFlowName; + }else if(typeName!=""){ + navName=typeName; + } + String currtab = Util.getIntValue(Util.null2String(request.getParameter("viewcondition")),0)+""; +%> + + + + +<% + + + + int flowNew=Util.getIntValue(Util.null2String(request.getParameter("flowNew")), 0); + int flowResponse=Util.getIntValue(Util.null2String(request.getParameter("flowResponse")), 0); + int flowAll=Util.getIntValue(Util.null2String(request.getParameter("flowAll")), 0); + int flowOut=Util.getIntValue(Util.null2String(request.getParameter("flowOut")), 0); + int flowSup = Util.getIntValue(Util.null2String(request.getParameter("flowSup")),0); + +%> + + + + + +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
+ + +
+ <% + Enumeration e=request.getParameterNames(); + while(e.hasMoreElements()){ + String paramenterName=e.nextElement(); + String value=request.getParameter(paramenterName); + if(!paramenterName.equals("viewcondition")){ + %> + + <% } + } + %> + +
+
+ + + + + diff --git a/src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrameCount.jsp b/src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrameCount.jsp new file mode 100755 index 0000000..cebc164 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/search/wfTabFrameCount.jsp @@ -0,0 +1,161 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.general.*" %> + +<%@page import="weaver.hrm.HrmUserVarify"%> +<%@page import="weaver.hrm.User"%> +<% + +String workflowid = Util.null2String(request.getParameter("workflowid")); +String typeid = Util.null2String(request.getParameter("typeid")); +String offical = Util.null2String(request.getParameter("offical")); +int officalType = Util.getIntValue(request.getParameter("officalType")); + +User user = HrmUserVarify.getUser(request, response) ; +if (user == null ) return ; +List countArr = new ArrayList(); +countArr.add("flowAll"); +countArr.add("flowNew"); +countArr.add("flowResponse"); +countArr.add("flowOut"); +countArr.add("flowSup"); + +if(typeid.equals("")&&workflowid.equals("") && !offical.equals("1")){ + //开始进入 + String logintype = ""+user.getLogintype(); + int usertype = 0; + + String resourceid= ""+Util.null2String((String) session.getAttribute("RequestViewResource")); + if(resourceid.equals("")) { + resourceid = ""+user.getUID(); + if(logintype.equals("2")) usertype= 1; + session.removeAttribute("RequestViewResource") ; + } + else { + session.setAttribute("RequestViewResource",resourceid) ; + } + + + + String CurrentUser = Util.null2String((String) request.getSession().getAttribute("RequestViewResource")); + if (logintype.equals("2")) + usertype = 1; + if (CurrentUser.equals("")) { + CurrentUser = "" + user.getUID(); + } + boolean superior = false; //是否为被查看者上级或者本身 + if ((user.getUID() + "").equals(CurrentUser)) { + superior = true; + } else { + RecordSet.executeSql("SELECT * FROM HrmResource WHERE ID = " + CurrentUser + " AND managerStr LIKE '%" + user.getUID() + "%'"); + + if (RecordSet.next()) { + superior = true; + } + } + + if (superior) + CurrentUser = user.getUID() + ""; + + + //System.out.println("superior=" + superior); + + int flowNew = 0; + int flowResponse = 0; + int flowOut = 0; + int flowSup = 0; + int flowAll = 0; + for(int a=0;a '1' ) or isremark = '5') "); + }else if(countArr.get(a).equals("flowNew") || countArr.get(a).equals("flowResponse") || countArr.get(a).equals("flowSup")){ + sqlsb.append(" where (((isremark=0 and (takisremark is null or takisremark=0 )) and (isprocessed is null or (isprocessed <> '2' and isprocessed <> '3'))) or isremark in('1','5','8','9','7')) "); + }else{ + sqlsb.append(" where ((isremark=0 and (takisremark is null or takisremark=0 )) or isremark in('1','5','8','9','7')) "); + } + sqlsb.append(" and islasttimes = 1 "); + sqlsb.append(" and a.userid = ").append(resourceid); + sqlsb.append(" and a.usertype = ").append(usertype); + sqlsb.append(" and exists (select c.requestid "); + sqlsb.append(" from workflow_requestbase c "); + sqlsb.append(" where (c.deleted <> 1 or c.deleted is null or c.deleted='') and c.requestid = a.requestid"); + + + sqlsb.append(" and a.workflowid=wb.id "); + sqlsb.append(" and wb.isvalid in (1, 3) "); + if(RecordSet.getDBType().equals("oracle")) + { + sqlsb.append(" and (nvl(c.currentstatus,-1) = -1 or (nvl(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + else + { + sqlsb.append(" and (isnull(c.currentstatus,-1) = -1 or (isnull(c.currentstatus,-1)=0 and c.creater="+user.getUID()+")) "); + } + sqlsb.append(")"); + //SQL = "select a.viewtype, count(distinct a.requestid) workflowcount from workflow_currentoperator a where ((isremark='0' and (isprocessed is null or (isprocessed<>'2' and isprocessed<>'3'))) or isremark='1' or isremark='8' or isremark='9' or isremark='7') and islasttimes=1 and userid=" + resourceid + " and usertype= " + usertype +" and a.workflowtype="+tworkflowtype+" and a.workflowid="+tworkflowid+" and exists (select c.requestid from workflow_requestbase c where c.requestid=a.requestid) "; + + if(!superior) + { + sqlsb.append(" AND EXISTS (SELECT NULL FROM workFlow_CurrentOperator b WHERE a.workflowid = b.workflowid AND a.requestid = b.requestid AND b.userid=" + user.getUID() + " and b.usertype= " + usertype +") "); + } + + if(offical.equals("1")){//发文/收文/签报 + if(officalType==1){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType in (1,3) and (isvalid=1 or isvalid=3))"); + }else if(officalType==2){ + sqlsb.append(" and workflowid in (select id from workflow_base where isWorkflowDoc=1 and officalType=2 and (isvalid=1 or isvalid=3))"); + } + } + + //sqlsb.append(" group by a.viewtype, a.workflowtype, a.workflowid"); + String sql=sqlsb.toString(); + if(countArr.get(a).equals("flowNew")) + sql += " and a.viewtype = '0' and a.isremark != '5' and a.isprocessed is null "; + else if(countArr.get(a).equals("flowResponse")) + sql += " and a.viewtype = '-1' "; + //else if(countArr.get(a).equals("flowOut")) + //sql += " and a.isremark = '5' "; + else if(countArr.get(a).equals("flowSup")) + sql += " and a.requestid in (select requestid from workflow_requestlog where logtype='s') "; + else + sql +=""; + + System.out.println("SLQ:::::::+++>>>>"+sql); + RecordSet.executeSql(sql); + + if(RecordSet.first()){ + //System.out.println(Util.getIntValue(RecordSet.getString("wfCount"))); + if(countArr.get(a).equals("flowNew")) + flowNew = Util.getIntValue(RecordSet.getString("wfCount")); + else if(countArr.get(a).equals("flowResponse")) + flowResponse = Util.getIntValue(RecordSet.getString("wfCount")); + else if(countArr.get(a).equals("flowOut")) + flowOut = Util.getIntValue(RecordSet.getString("wfCount")); + else if(countArr.get(a).equals("flowSup")) + flowSup = Util.getIntValue(RecordSet.getString("wfCount")); + else + flowAll = Util.getIntValue(RecordSet.getString("wfCount")); + } + + } + //加上EAS流程的数量 + weaver.eas.EASUtil eu = new weaver.eas.EASUtil(); + String loginid = eu.getLoginid(user); + String eas_requestinfo = Util.null2String(RecordSet.getPropValue("eas","VWorkFlowDo")); + String eas_linkname = Util.null2String(RecordSet.getPropValue("eas","linkname")); + RecordSet.executeSql("select * from openquery("+eas_linkname+",'select COUNT(FProcinstID) from "+eas_requestinfo+" where FPersonUserNumber=''"+loginid+"'' and fstate=''1'' ')"); + if(RecordSet.next()){ + flowAll+=Util.getIntValue(RecordSet.getString(1),0); + } + String data="{\"flowNew\":\""+flowNew+"\",\"flowResponse\":\""+flowResponse+"\",\"flowOut\":\""+flowOut+"\",\"flowSup\":\""+flowSup+"\",\"flowAll\":\""+flowAll+"\"}"; + + response.getWriter().write(data); + +} +%> + diff --git a/src/test/resources/WEB-INF/ecology/workflow/search/wfTabNewFrame.jsp b/src/test/resources/WEB-INF/ecology/workflow/search/wfTabNewFrame.jsp new file mode 100755 index 0000000..a0ffdf8 --- /dev/null +++ b/src/test/resources/WEB-INF/ecology/workflow/search/wfTabNewFrame.jsp @@ -0,0 +1,194 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ include file="/systeminfo/init_wev8.jsp" %> +<%@ page import="java.util.*" %> + + + + +<% + String navName = ""; + String viewType=Util.null2String(request.getParameter("viewType")); + String offical = Util.null2String(request.getParameter("offical")); + int officalType = Util.getIntValue(request.getParameter("officalType"),-1); + if(viewType.equals("2")){ + navName=SystemEnv.getHtmlLabelName(17991,user.getLanguage()); + if(officalType==1){ + navName = SystemEnv.getHtmlLabelName(33530, user.getLanguage()); + }else if(officalType==2){ + navName = SystemEnv.getHtmlLabelName(33789, user.getLanguage()); + } + }else if(viewType.equals("4")){ + navName=SystemEnv.getHtmlLabelName(1210,user.getLanguage()); + if(offical.equals("1")){ + if(officalType==1){ + navName = SystemEnv.getHtmlLabelName(33529, user.getLanguage()); + }else if(officalType==2){ + navName = SystemEnv.getHtmlLabelName(33790, user.getLanguage()); + } + } + } + + + + String typeName=""; + String workFlowName=""; + String typeid=Util.null2String(request.getParameter("wftype")); + String workflowid=Util.null2String(request.getParameter("workflowid")); + //查询流程名 + if(typeid!=null && typeid!=""){ + StringBuffer typeSql= new StringBuffer(); + typeSql.append("select typename from workflow_type where"); + typeSql.append(" id= ").append(typeid); + + RecordSet.execute(typeSql.toString()); + + if(RecordSet.next()){ + typeName=Util.null2String(RecordSet.getString("typename")); + + } + } + //查询工作流类型 + if(workflowid!=null && workflowid!="" ){ + StringBuffer workflowSql= new StringBuffer(); + workflowSql.append("select workflowname from workflow_base where"); + workflowSql.append(" id= ").append(workflowid); + + RecordSet.execute(workflowSql.toString()); + + if(RecordSet.next()){ + workFlowName=Util.null2String(RecordSet.getString("workflowname")); + } + } + if(workFlowName!="" ){ + navName=workFlowName; + }else if(typeName!=""){ + navName=typeName; + } + + String curTab = Util.getIntValue(Util.null2String(request.getParameter("viewcondition")),0)+""; + +%> + + + + + + + + +
+ +
+ +
+ <% + Enumeration e=request.getParameterNames(); + while(e.hasMoreElements()){ + String paramenterName=e.nextElement(); + String value=request.getParameter(paramenterName); + if(!paramenterName.equals("viewcondition")){ + %> + + <% } + } + + %> + +
+
+ + + From ee84e559e6077ad7215716b834da0bf280530fe4 Mon Sep 17 00:00:00 2001 From: wangxuanran <3055088966@qq.com> Date: Thu, 27 Jul 2023 12:44:37 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=83=B8=E7=A7=91=E5=8C=BB=E9=99=A2?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/aiyh/utils/ScriptUtil.java | 10 +++++++++- .../xuanran/wang/xk_hospital/test/XkHospitalTest.java | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/aiyh/utils/ScriptUtil.java b/src/main/java/aiyh/utils/ScriptUtil.java index 6c53d1d..9e59a3d 100644 --- a/src/main/java/aiyh/utils/ScriptUtil.java +++ b/src/main/java/aiyh/utils/ScriptUtil.java @@ -1,5 +1,6 @@ package aiyh.utils; +import aiyh.utils.interfaces.script_util.CusScriptFunInterface; import aiyh.utils.tool.org.apache.commons.jexl3.*; import java.util.Map; @@ -13,9 +14,16 @@ import java.util.Map; */ public class ScriptUtil { private static final JexlEngine JEXL = new JexlBuilder().create(); - + public static Object invokeScript(String script, Map params) { + return invokeScript(script, params, null); + } + + public static Object invokeScript(String script, Map params, CusScriptFunInterface scriptFunInterface) { JexlContext jc = new MapContext(); + if(null != scriptFunInterface){ + jc.set(scriptFunInterface.getClass().getSimpleName(), scriptFunInterface); + } for (Map.Entry entry : params.entrySet()) { jc.set(entry.getKey(), entry.getValue()); } diff --git a/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalTest.java b/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalTest.java index 7926f48..827640d 100644 --- a/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalTest.java +++ b/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalTest.java @@ -117,4 +117,12 @@ public class XkHospitalTest extends BaseTest { Util.null2DefaultStr(null,""); service.async("4bce0693734d","common", map); } + + @Test + public void testD(){ + String json = "{\"data\":[{\"ID\":\"2\",\"GroupID\":\"test_yl_01\",\"Wards\":[]},{\"ID\":\"1\",\"GroupID\":\"test_yl_01\",\"Wards\":[{\"ID\":\"1\",\"WardCode\":\"bq_01\",\"WardName\":\"病区名称01_1\"},{\"ID\":\"2\",\"WardCode\":\"bq_02\",\"WardName\":\"病区名称01_2\"},{\"ID\":\"3\",\"WardCode\":\"bq_03\",\"WardName\":\"病区名称0_2_3\"},{\"ID\":\"4\",\"WardCode\":\"bq_04\",\"WardName\":\"病区名称02_1_3\"}]}]}\n"; + System.out.println(json); + Map map = JSONObject.parseObject(json, Map.class); + service.async("testarr","common", map); + } } From 5cf9c44c6cfd22fbd666c70586196a7ef980a92b Mon Sep 17 00:00:00 2001 From: wangxuanran <3055088966@qq.com> Date: Thu, 27 Jul 2023 12:46:05 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xuanran.wang/xk_hospital/ModelConfig.js | 48 +++ .../script_util/CusScriptFunInterface.java | 10 + .../model_check/entity/CheckErrorInfo.java | 25 ++ .../model_check/entity/ModelFieldInfo.java | 16 + .../entity/XkModelCusCheckConfig.java | 21 ++ .../entity/XkModelCusCheckFiledConfig.java | 27 ++ .../XkModelCusCheckFiledGroupConfig.java | 16 + .../model_check/job/XkModelCusCheckJob.java | 26 ++ .../mapper/XkModelCusCheckMapper.java | 79 +++++ .../service/XkModelCusCheckService.java | 136 ++++++++ .../model_check/util/CheckRuleMethodUtil.java | 301 ++++++++++++++++++ .../util/CusCheckRuleInterface.java | 20 ++ .../model_check/util/CusJexlFunctions.java | 239 ++++++++++++++ .../test/XkHospitalCheckModelTest.java | 66 ++++ 14 files changed, 1030 insertions(+) create mode 100644 javascript/xuanran.wang/xk_hospital/ModelConfig.js create mode 100644 src/main/java/aiyh/utils/interfaces/script_util/CusScriptFunInterface.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/CheckErrorInfo.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/ModelFieldInfo.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckConfig.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledConfig.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledGroupConfig.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/job/XkModelCusCheckJob.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/mapper/XkModelCusCheckMapper.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/service/XkModelCusCheckService.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CheckRuleMethodUtil.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusCheckRuleInterface.java create mode 100644 src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusJexlFunctions.java create mode 100644 src/test/java/xuanran/wang/xk_hospital/test/XkHospitalCheckModelTest.java diff --git a/javascript/xuanran.wang/xk_hospital/ModelConfig.js b/javascript/xuanran.wang/xk_hospital/ModelConfig.js new file mode 100644 index 0000000..6895850 --- /dev/null +++ b/javascript/xuanran.wang/xk_hospital/ModelConfig.js @@ -0,0 +1,48 @@ +const detailTable = "detail_1"; +// 多选字段 +const detailMultiFieldId = ModeForm.convertFieldNameToId("model_field", detailTable); +// 单选字段 +const detailRadioFieldId = ModeForm.convertFieldNameToId("model_field_ass", detailTable); +// 表单字段名字段 +const detailFieldNameId = ModeForm.convertFieldNameToId("model_field_name", detailTable); +// 所属表 +const detailFieldTableNameId = ModeForm.convertFieldNameToId("table_name", detailTable); +// 主表还是明细 +const detailMainOrDetailId = ModeForm.convertFieldNameToId("main_or_detail", detailTable); +$(()=>{ + let chose = {}; + ModeForm.bindDetailFieldChangeEvent(detailMultiFieldId, (id, index, val)=>{ + console.log('id : ', id); + console.log('index : ', index); + console.log('val : ', val); + if(!val){ + return; + } + let fieldMameArr = []; + let tableNameArr = []; + let mainOrDetailArr = []; + val.split(',').forEach(id=>{ + ModeForm.changeFieldValue(`${detailRadioFieldId}_${index}`, { + value: id, + specialobj:[ + {id:id, name:"field"} + ] + }) + setTimeout(()=>{ + let detailFieldNameIdValue = ModeForm.getFieldValue(`${detailFieldNameId}_${index}`) + let detailFieldTableNameValue = ModeForm.getFieldValue(`${detailFieldTableNameId}_${index}`) + let detailMainOrDetailValue = ModeForm.getFieldValue(`${detailMainOrDetailId}_${index}`); + fieldMameArr.push(detailFieldNameIdValue); + tableNameArr.push(detailFieldTableNameValue); + mainOrDetailArr.push(detailMainOrDetailValue); + },0); + }) + console.log('fieldMameArr : ', fieldMameArr) + console.log('tableNameArr : ', tableNameArr) + console.log('mainOrDetailArr : ', mainOrDetailArr) + + ModeForm.changeFieldValue(`${detailFieldNameId}_${index}`,{value:fieldMameArr.join(',')}) + ModeForm.changeFieldValue(`${detailFieldTableNameId}_${index}`,{value:tableNameArr.join(',')}) + ModeForm.changeFieldValue(`${detailMainOrDetailId}_${index}`,{value:mainOrDetailArr.join(',')}) + }) +}) \ No newline at end of file diff --git a/src/main/java/aiyh/utils/interfaces/script_util/CusScriptFunInterface.java b/src/main/java/aiyh/utils/interfaces/script_util/CusScriptFunInterface.java new file mode 100644 index 0000000..664a7c1 --- /dev/null +++ b/src/main/java/aiyh/utils/interfaces/script_util/CusScriptFunInterface.java @@ -0,0 +1,10 @@ +package aiyh.utils.interfaces.script_util; + +/** + *

script util 自定义方法

+ * + * @author xuanran.wang + * @date 2023/7/25 16:41 + */ +public interface CusScriptFunInterface { +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/CheckErrorInfo.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/CheckErrorInfo.java new file mode 100644 index 0000000..57c997c --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/CheckErrorInfo.java @@ -0,0 +1,25 @@ +package weaver.xuanran.wang.xk_hospital.model_check.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * + * @author xuanran.wang + * @date 2023/7/25 15:08 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CheckErrorInfo { + private String tableName; + private String dataId; + private String errorFieldName; + private String errorMsg; + private Object currentValue; + private String mainId; +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/ModelFieldInfo.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/ModelFieldInfo.java new file mode 100644 index 0000000..028b6d0 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/ModelFieldInfo.java @@ -0,0 +1,16 @@ +package weaver.xuanran.wang.xk_hospital.model_check.entity; + +import lombok.Data; + +/** + *

+ * + * @author xuanran.wang + * @date 2023/7/26 14:37 + */ +@Data +public class ModelFieldInfo { + private String fieldName; + private String tableName; + private int viewType; +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckConfig.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckConfig.java new file mode 100644 index 0000000..435f27c --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckConfig.java @@ -0,0 +1,21 @@ +package weaver.xuanran.wang.xk_hospital.model_check.entity; + +import lombok.Data; + +import java.util.List; + +/** + *

胸科医院 建模数据校验配置主表对象

+ * + * @author xuanran.wang + * @date 2023/7/24 15:00 + */ +@Data +public class XkModelCusCheckConfig { + private int modelTable; + private String modelTableName; + private String onlyMark; + private String cusText; + private List filedConfigList; + private List filedGroupConfigList; +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledConfig.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledConfig.java new file mode 100644 index 0000000..c013272 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledConfig.java @@ -0,0 +1,27 @@ +package weaver.xuanran.wang.xk_hospital.model_check.entity; + +import lombok.Data; + +import java.util.List; + +/** + *

胸科医院 建模数据校验配置明细1 字段配置对象

+ * + * @author xuanran.wang + * @date 2023/7/24 15:00 + */ +@Data +public class XkModelCusCheckFiledConfig { + private String mainId; + private String modelField; + private int checkRule; + private String customerValue; + private String checkExpression; + private String errorMsg; + private int controlLevel; + private String fieldDbType; + private String modelTable; + private String modelTableName; + private List modelFieldNameList; + private String cusWhere; +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledGroupConfig.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledGroupConfig.java new file mode 100644 index 0000000..6ec4282 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/entity/XkModelCusCheckFiledGroupConfig.java @@ -0,0 +1,16 @@ +package weaver.xuanran.wang.xk_hospital.model_check.entity; + +import lombok.Data; + +/** + *

胸科医院 建模数据校验配置明细2 字段组配置对象

+ * + * @author xuanran.wang + * @date 2023/7/24 15:00 + */ +@Data +public class XkModelCusCheckFiledGroupConfig { + private int conditionName; + private int conditionRule; + private String customerValue; +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/job/XkModelCusCheckJob.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/job/XkModelCusCheckJob.java new file mode 100644 index 0000000..4a291a0 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/job/XkModelCusCheckJob.java @@ -0,0 +1,26 @@ +package weaver.xuanran.wang.xk_hospital.model_check.job; + +import aiyh.utils.action.CusBaseCronJob; +import aiyh.utils.annotation.PrintParamMark; +import aiyh.utils.annotation.RequiredMark; + +import java.io.IOException; + +/** + *

建模字段校验

+ * + * @author xuanran.wang + * @date 2023/7/24 16:02 + */ +public class XkModelCusCheckJob extends CusBaseCronJob { + + @RequiredMark + @PrintParamMark + private String onlyMark; + + @Override + public void runCode() throws IOException { + + } + +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/mapper/XkModelCusCheckMapper.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/mapper/XkModelCusCheckMapper.java new file mode 100644 index 0000000..f270ea0 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/mapper/XkModelCusCheckMapper.java @@ -0,0 +1,79 @@ +package weaver.xuanran.wang.xk_hospital.model_check.mapper; + +import aiyh.utils.annotation.recordset.*; +import weaver.xuanran.wang.xk_hospital.model_check.entity.ModelFieldInfo; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckConfig; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledConfig; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledGroupConfig; + +import java.util.List; +import java.util.Map; + +/** + *

胸科医院建模数据自定义校验

+ * + * @author xuanran.wang + * @date 2023/7/24 15:18 + */ +@SqlMapper +public interface XkModelCusCheckMapper { + + /** + *

查询明细1配置

+ */ + @Select("select a.*, a.mainid main_id, b.tablename model_table_name " + + "from $t{modelTableName}_dt2 a " + + "left join workflow_mode_table_view b " + + "on a.model_table = b.id " + + "where enable = 0") + @Associations( @Association(property = "modelFieldNameList", column = "model_field", id = @Id(value = String.class,methodId = 1))) + List queryConditionList(@ParamMapper("modelTableName")String modelTableName); + + /** + *

查询字段信息

+ * @param fieldIds 字段名 + */ + @AssociationMethod(value = 1) + @Select("select a.fieldname field_name, a.tablename table_name, b.viewtype view_type " + + "from workflow_field_table_view a " + + "left join workflow_billfield b " + + "on a.id = b.id " + + "where a.id in ( $t{fieldIds} )") + List queryFieldName(@ParamMapper("fieldIds") String fieldIds); + + /** + *

查询明细2配置

+ * @param mainId 主数据id + */ + @Select("select * from uf_xk_model_data_cus_check_dt2 where mainid = #{mainId} and enable = 0") + @CollectionMethod(2) + List queryAssignmentList(@ParamMapper("mainId")int mainId); + + @Select("select * from $t{tableName} $t{where}") + List> queryModelMain(@ParamMapper("tableName") String tableName, + @ParamMapper("where") String where); + + @Select("select detail.* " + + "from $t{detailTableName} detail " + + "right join $t{mainTableName} main " + + "on detail.mainid = main.id " + + "$t{where} ") + List> queryModelDetail(@ParamMapper("detailTableName") String detailTableName, + @ParamMapper("mainTableName") String mainTableName, + @ParamMapper("where") String where); + + @Select(custom = true) + int queryCusSqlCount(@SqlString String sql, + @ParamMapper("mainMap") Map mainMap, + @ParamMapper("detailMap") Map detailMap); + + @Select(custom = true) + Map queryCusSqlMap(@SqlString String sql, + @ParamMapper("mainMap") Map mainMap, + @ParamMapper("detailMap") Map detailMap); + + @Select(custom = true) + String queryCusSqlDate(@SqlString String sql, + @ParamMapper("mainMap") Map mainMap, + @ParamMapper("detailMap") Map detailMap); +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/service/XkModelCusCheckService.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/service/XkModelCusCheckService.java new file mode 100644 index 0000000..b726622 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/service/XkModelCusCheckService.java @@ -0,0 +1,136 @@ +package weaver.xuanran.wang.xk_hospital.model_check.service; + +import aiyh.utils.Util; +import aiyh.utils.function.Bi4Function; +import aiyh.utils.tool.Assert; +import aiyh.utils.tool.cn.hutool.core.util.StrUtil; +import aiyh.utils.zwl.common.ToolUtil; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.xuanran.wang.xk_hospital.model_check.entity.*; +import weaver.xuanran.wang.xk_hospital.model_check.mapper.XkModelCusCheckMapper; +import weaver.xuanran.wang.xk_hospital.model_check.util.CheckRuleMethodUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/** + *

胸科医院 建模数据自定义校验

+ * + * @author xuanran.wang + * @date 2023/7/24 16:07 + */ +public class XkModelCusCheckService { + + private final XkModelCusCheckMapper mapper = Util.getMapper(XkModelCusCheckMapper.class); + + private final ToolUtil toolUtil = new ToolUtil(); + + public List getFieldCheckRuleConfigList(){ + String configTableName = Util.null2DefaultStr(toolUtil.getSystemParamValue("checkRuleConfigTableName"), "uf_yyhcfxgz"); + return mapper.queryConditionList(configTableName); + } + + public void checkModelData(List configList){ + // 根据建模表名进行分组 查找出每个表对应有哪些校验规则事项 + Map> map = configList.stream().collect(Collectors.groupingBy(XkModelCusCheckFiledConfig::getModelTableName)); + List result = new ArrayList<>(); + for (Map.Entry> entry : map.entrySet()) { + // 在对每个表的第一个字段做分组 找出主表和明细表 + List filedConfigs = entry.getValue(); + Map> configMap = filedConfigs.stream() + .collect(Collectors.groupingBy(item->item.getModelFieldNameList().get(0).getTableName())); + System.out.println("configMap : \n" + JSONObject.toJSONString(configMap)); + // 主表表名 + String mainTableName = entry.getKey(); + // 主表数据 + List> modelList = mapper.queryModelMain(mainTableName,""); + // 主表校验规则配置 + List mainTableConfig = configMap.remove(mainTableName); + // 先处理主表数据 + checkModel(mainTableName, new HashMap<>(), modelList, mainTableConfig, result); + // 明细数据 + for (Map.Entry> detailEntry : configMap.entrySet()) { + String detailTable = detailEntry.getKey(); + List> detailModel = mapper.queryModelDetail(detailTable, mainTableName, ""); + if(CollectionUtils.isEmpty(detailModel)){ + continue; + } + // 主表的mainId + String detailMainId = Util.null2DefaultStr(detailModel.get(0).get("mainid"), ""); + if(StrUtil.isBlank(detailMainId)){ + continue; + } + List> mainList = modelList.stream().filter(item -> { + String id = Util.null2DefaultStr(item.get("id"), ""); + return StrUtil.isNotBlank(id) && detailMainId.equals(id); + }).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(mainList)){ + Util.getLogger() + .error(Util.logStr("当前明细表: {}, detailMainId: {} 在主表数据集合中没找到对应的主表数据! 当前主表数据集合: {}", detailTable, detailMainId, JSONObject.toJSONString(modelList))); + continue; + } + List detailConfig = detailEntry.getValue(); + checkModel(detailTable, mainList.get(0), detailModel, detailConfig, result); + } + } + System.out.println("result : \n" + JSONObject.toJSONString(result)); + } + + public String buildWhereSql(String modelWhereSql, boolean joinQuery){ + StringBuilder sb = new StringBuilder(); + modelWhereSql = Util.sbc2dbcCase(modelWhereSql); + if(StrUtil.isNotBlank(modelWhereSql)){ + sb.append(modelWhereSql); + } + if(joinQuery && StrUtil.isNotBlank(modelWhereSql)){ + sb.append(" detail.").append(modelWhereSql).append(" and ").append(" main.").append(modelWhereSql); + } + if(sb.length() > 0){ + sb.insert(0, " where "); + } + return sb.toString(); + } + + public void checkModel(String tableName, + Map mainMap, + List> modelList, + List configs, + List result){ + if(CollectionUtils.isEmpty(configs) || CollectionUtils.isEmpty(modelList)){ + return; + } + Map tempMainMap; + for (Map map : modelList) { + for (XkModelCusCheckFiledConfig config : configs) { + int viewType = config.getModelFieldNameList().get(0).getViewType(); + boolean isMain = viewType == 0; + tempMainMap = isMain ? map : mainMap; + Bi4Function, Map, Boolean> function = CheckRuleMethodUtil.CHECK_RULE_MAP.get(config.getCheckRule()); + if(function == null){ + continue; + } + Boolean check = function.apply(config, null, tempMainMap, map); + if(!check){ + String fieldName = config.getModelFieldNameList().get(0).getFieldName(); + String mainId = Util.null2DefaultStr(tempMainMap.get("id"), ""); + String itemId = Util.null2DefaultStr(map.get("id"), ""); + CheckErrorInfo errorInfo = CheckErrorInfo.builder() + .errorMsg(config.getErrorMsg()) + .errorFieldName(fieldName) + .tableName(tableName) + .dataId(isMain ? mainId : itemId) + .currentValue(map.get(fieldName)) + .mainId(mainId) + .build(); + result.add(errorInfo); + } + } + } + } +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CheckRuleMethodUtil.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CheckRuleMethodUtil.java new file mode 100644 index 0000000..d84ca8c --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CheckRuleMethodUtil.java @@ -0,0 +1,301 @@ +package weaver.xuanran.wang.xk_hospital.model_check.util; + +import aiyh.utils.ScriptUtil; +import aiyh.utils.Util; +import aiyh.utils.annotation.MethodRuleNo; +import aiyh.utils.excention.CustomerException; +import aiyh.utils.function.Bi4Function; +import aiyh.utils.tool.cn.hutool.core.util.StrUtil; +import org.apache.commons.collections.CollectionUtils; +import org.apache.log4j.Logger; +import weaver.general.TimeUtil; +import weaver.xuanran.wang.xk_hospital.model_check.entity.ModelFieldInfo; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledConfig; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledGroupConfig; +import weaver.xuanran.wang.xk_hospital.model_check.mapper.XkModelCusCheckMapper; + +import java.lang.reflect.Method; +import java.util.*; + +/** + *

检查方法校验工具

+ * + *

create: 2023/6/14 18:30

+ * + * @author youHong.ai + */ +public class CheckRuleMethodUtil { + + private static final Logger log = Util.getLogger(); + + private static final XkModelCusCheckMapper mapper = Util.getMapper(XkModelCusCheckMapper.class); + public static final Map, Map, Boolean> + > CHECK_RULE_MAP = new HashMap<>(8); + private static final CusJexlFunctions CUS_SCRIPT_FUN = new CusJexlFunctions(); + static { + try { + Class checkRuleMethodUtilClass = CheckRuleMethodUtil.class; + Method[] methods = checkRuleMethodUtilClass.getDeclaredMethods(); + for (Method method : methods) { + if (method.isAnnotationPresent(MethodRuleNo.class)) { + MethodRuleNo annotation = method.getAnnotation(MethodRuleNo.class); + int value = annotation.value(); + CHECK_RULE_MAP.put(value, (filedConfig, groupConfig, mainMap, detailMap) -> { + try { + return (Boolean) method.invoke(null, filedConfig, groupConfig, mainMap,detailMap); + } catch (Exception e) { + log.error("调用CheckRuleMethodUtil类中注解方法失败!" + Util.getErrString(e)); + throw new RuntimeException(e); + } + }); + } + } + } catch (Exception e) { + log.error("初始化CheckRuleMethodUtil失败!" + Util.getErrString(e)); + } + } + + @MethodRuleNo(value = 0, desc = "不为空") + private static boolean noNull(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + boolean check = true; + for (ModelFieldInfo fieldInfo : filedConfig.getModelFieldNameList()) { + int mainOrDetail = fieldInfo.getViewType(); + if(mainOrDetail == 0){ + check = StrUtil.isNotBlank(Util.null2DefaultStr(mainMap.get(fieldInfo.getFieldName()),"")); + }else { + check = StrUtil.isNotBlank(Util.null2DefaultStr(detailMap.get(fieldInfo.getFieldName()),"")); + } + } + return check; + } + + // @MethodRuleNo(value = 0, desc = "整数类型") + private static boolean isNumber(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + try { + for (ModelFieldInfo fieldInfo : filedConfig.getModelFieldNameList()) { + int mainOrDetail = fieldInfo.getViewType(); + if(mainOrDetail == 0) { + Integer.parseInt(Util.null2DefaultStr(mainMap.get(fieldInfo.getFieldName()), "")); + }else { + Integer.parseInt(Util.null2DefaultStr(detailMap.get(fieldInfo.getFieldName()), "")); + } + } + return true; + } catch (Exception e) { + return false; + } + } + + // @MethodRuleNo(value = 2, desc = "小数类型") + private static boolean isDouble(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + try { + for (ModelFieldInfo fieldInfo : filedConfig.getModelFieldNameList()) { + int mainOrDetail = fieldInfo.getViewType(); + if (mainOrDetail == 0) { + Double.parseDouble(Util.null2DefaultStr(mainMap.get(fieldInfo.getFieldName()), "")); + } else { + Double.parseDouble(Util.null2DefaultStr(detailMap.get(fieldInfo.getFieldName()), "")); + } + } + return true; + } catch (Exception e) { + return false; + } + } + + @MethodRuleNo(value = 1, desc = "字段长度") + private static boolean isEnumerate(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + boolean check = true; + for (ModelFieldInfo fieldInfo : filedConfig.getModelFieldNameList()) { + if (fieldInfo.getViewType() == 0) { + check = (boolean) ScriptUtil.invokeScript(fieldInfo.getFieldName() + ".length() " + filedConfig.getCheckExpression(), mainMap); + }else { + check = (boolean) ScriptUtil.invokeScript(fieldInfo.getFieldName() + ".length() " + filedConfig.getCheckExpression(), detailMap); + } + } + return check; + } + + @MethodRuleNo(value = 2, desc = "自定义sql存在值") + private static boolean customerSqlHasValue(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + String sql = sqlHandle(filedConfig.getCustomerValue()); + if(StrUtil.isBlank(sql)){ + return true; + } + return mapper.queryCusSqlCount(sql, mainMap, detailMap) > 0; + } + + @MethodRuleNo(value = 3, desc = "自定义sql校验表达式") + private static boolean customerSqlCheck(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + String expression = filedConfig.getCheckExpression(); + if(StrUtil.isBlank(expression)){ + return true; + } + String sql = sqlHandle(filedConfig.getCustomerValue()); + if(StrUtil.isBlank(sql)){ + return true; + } + Map valueMap = mapper.queryCusSqlMap(sql, mainMap, detailMap); + try { + return (Boolean) ScriptUtil.invokeScript(expression, valueMap, CUS_SCRIPT_FUN); + }catch (Exception e){ + log.error("自定义表达式执行失败! " + e.getMessage()); + Util.logErrorStr(e); + return false; + } + } + + + // @MethodRuleNo(value = 6, desc = "自定义表达式") + private static boolean checkCustomerExpression(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + // String expression = Util.sbc2dbcCase(filedConfig.getCheckExpression()); + // if(StrUtil.isBlank(expression)){ + // return true; + // } + // try { + // if(filedConfig.getMainOrDetail() == 0){ + // return (Boolean)ScriptUtil.invokeScript(expression, mainMap, CUS_SCRIPT_FUN); + // } else { + // return (Boolean)ScriptUtil.invokeScript(expression, detailMap, CUS_SCRIPT_FUN); + // } + // }catch (Exception e){ + // log.error("自定义表达式执行失败! " + e.getMessage()); + // Util.logErrorStr(e); + // return false; + // } + return true; + } + + @MethodRuleNo(value = 4, desc = "两个日期相差月数") + private static boolean twoDateSubMonth(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + List fieldNameList = filedConfig.getModelFieldNameList(); + if(!checkFieldConf(fieldNameList)){ + return false; + } + Map dateMap = parse2DateMap(filedConfig, fieldNameList, mainMap, detailMap); + String scriptStr = "CusJexlFunctions.twoDateSubNoFormat(beginDate,endDate, 1) " + filedConfig.getCheckExpression(); + return (boolean) ScriptUtil.invokeScript(scriptStr, dateMap); + } + + + @MethodRuleNo(value = 5, desc = "自定义校验") + private static boolean checkCustomerInterface(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + String customerValue = filedConfig.getCustomerValue(); + if (StrUtil.isBlank(customerValue)) { + return true; + } + Map pathMap = Util.parseCusInterfacePathParam(customerValue); + String classPath = pathMap.remove("_ClassPath"); + CusCheckRuleInterface instance = Util.getClassInstance(classPath, CusCheckRuleInterface.class); + try { + return instance.checkRule(filedConfig, groupConfig, mainMap, detailMap, pathMap); + } catch (Exception e){ + log.error("自定义接口校验error! : " + e.getMessage()); + Util.logErrorStr(e); + return false; + } + } + + + @MethodRuleNo(value = 6, desc = "第一个日期字段是否早于第二个日期字段") + private static boolean compare2Date(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap) { + List fieldNameList = filedConfig.getModelFieldNameList(); + if(!checkFieldConf(fieldNameList)){ + return false; + } + Map dateMap = parse2DateMap(filedConfig, fieldNameList, mainMap, detailMap); + String scriptStr = "CusJexlFunctions.compare2Date(beginDate,endDate) " + filedConfig.getCheckExpression(); + return (boolean) ScriptUtil.invokeScript(scriptStr, dateMap); + } + + public static String sqlHandle(String cusSql){ + String customerValue = Util.sbc2dbcCase(cusSql); + if(StrUtil.isBlank(customerValue)){ + return ""; + } + if(!customerValue.startsWith("select ")){ + return ""; + } + return customerValue; + } + + public static boolean checkFieldConf(List fieldNameList) { + if (CollectionUtils.isEmpty(fieldNameList) || fieldNameList.size() > 2) { + Util.getLogger().error("校验规则选择日期相差月数时, 表单字段不能超过2个!"); + return false; + } + return true; + } + + public static Map parse2DateMap(XkModelCusCheckFiledConfig filedConfig, + List fieldNameList, + Map mainMap, + Map detailMap){ + String beginDate = ""; + String endDate = ""; + Map dateMap = new HashMap<>(); + // 如果只勾选了一个字段 + if(fieldNameList.size() == 1){ + String cusWhere = filedConfig.getCusWhere(); + if(StrUtil.isNotBlank(cusWhere)){ + String sql = sqlHandle(cusWhere); + endDate = mapper.queryCusSqlDate(sql, mainMap, detailMap); + if(StrUtil.isBlank(endDate)){ + endDate = TimeUtil.getCurrentDateString(); + } + }else { + endDate = TimeUtil.getCurrentDateString(); + } + }else { + for (int i = 0; i < fieldNameList.size(); i++) { + ModelFieldInfo fieldInfo = fieldNameList.get(i); + String date; + if (fieldInfo.getViewType() == 0) { + date = Util.null2DefaultStr(mainMap.get(fieldInfo.getFieldName()),""); + }else { + date = Util.null2DefaultStr(detailMap.get(fieldInfo.getFieldName()),""); + } + if(i == 0){ + beginDate = date; + }else { + endDate = date; + } + } + + } + dateMap.put("endDate", endDate); + dateMap.put("beginDate", beginDate); + return dateMap; + } +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusCheckRuleInterface.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusCheckRuleInterface.java new file mode 100644 index 0000000..cf054f2 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusCheckRuleInterface.java @@ -0,0 +1,20 @@ +package weaver.xuanran.wang.xk_hospital.model_check.util; + +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledConfig; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledGroupConfig; + +import java.util.Map; + +/** + *

自定义校验

+ * + * @author xuanran.wang + * @date 2023/7/25 13:16 + */ +public interface CusCheckRuleInterface { + boolean checkRule(XkModelCusCheckFiledConfig filedConfig, + XkModelCusCheckFiledGroupConfig groupConfig, + Map mainMap, + Map detailMap, + Map pathMap); +} diff --git a/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusJexlFunctions.java b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusJexlFunctions.java new file mode 100644 index 0000000..bacab09 --- /dev/null +++ b/src/main/java/weaver/xuanran/wang/xk_hospital/model_check/util/CusJexlFunctions.java @@ -0,0 +1,239 @@ +package weaver.xuanran.wang.xk_hospital.model_check.util; + +import aiyh.utils.Util; +import aiyh.utils.interfaces.script_util.CusScriptFunInterface; +import aiyh.utils.tool.cn.hutool.core.util.StrUtil; +import aiyh.utils.tool.org.apache.commons.jexl3.JexlException; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; + +/** + *

+ * + * @author xuanran.wang + * @date 2023/7/25 16:23 + */ +public class CusJexlFunctions implements CusScriptFunInterface { + + /** + *

将字符串转成金额字段类型

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:15 + * @param str 金额字符串 + * @return 金额 + **/ + public BigDecimal parseDecimal(String str) { + try { + if(StrUtil.isBlank(str)){ + return new BigDecimal("0"); + } + return new BigDecimal(str); + } catch (NumberFormatException e) { + throw new JexlException(null, "Invalid number format: " + str); + } + } + + /** + *

解析该格式字符串的月份

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:15 + * @param dateStr yyyy-MM-dd格式日期字符串 + * @return 字符串的月份 + **/ + public int parsNormalDateMonth(String dateStr){ + return parseDateMonth(dateStr, "yyyy-MM-dd"); + } + + /** + *

转换指定格式日期字符串的月份

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:16 + * @param dateStr 日期字符串 + * @param format 转换格式 + * @return 日期字符串的月份 + **/ + public int parseDateMonth(String dateStr, String format) { + try { + LocalDate currentDate = LocalDate.now(); + if(StrUtil.isBlank(dateStr)){ + return currentDate.getMonthValue(); + } + currentDate = parseDateStr2LocalDate(dateStr, format); + return currentDate.getMonthValue(); + } catch (Exception e) { + throw new JexlException(null, "Invalid date format error! dateStr : " + dateStr + " ,format : " + format); + } + } + + /** + *

当前月份与yyyy-MM-dd格式日期字符串月份的差

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:17 + * @param dateStr 日期字符串 + * @return 当前月份-日期字符串月份差 + **/ + public int normalDateStrSubCurrentMonth(String dateStr){ + int dateMonth = parseDateMonth(dateStr, "yyyy-MM-dd"); + return LocalDate.now().getMonthValue() - dateMonth; + } + + /** + *

当前月份与指定格式日期字符串月份的差

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:19 + * @param dateStr 日期字符串 + * @param format 日期格式 + * @return 当前月份-日期字符串月份差 + **/ + public int dateStrSubCurrentMonth(String dateStr, String format){ + int dateMonth = parseDateMonth(dateStr, format); + return LocalDate.now().getMonthValue() - dateMonth; + } + + /** + *

当前月份与yyyy-MM-dd格式日期字符串月份的差绝对值

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:17 + * @param dateStr 日期字符串 + * @return 当前月份-日期字符串月份差绝对值 + **/ + public int normalDateStrSubCurrentMonthAbs(String dateStr){ + return Math.abs(normalDateStrSubCurrentMonth(dateStr)); + } + + /** + *

当前月份与指定格式日期字符串月份的差的绝对值

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:19 + * @param dateStr 日期字符串 + * @param format 日期格式 + * @return 当前月份-日期字符串月份差的绝对值 + **/ + public int dateStrSubCurrentMonthAbs(String dateStr, String format){ + return Math.abs(dateStrSubCurrentMonth(dateStr, format)); + } + + + /** + *

将日期字符串进行格式化

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:20 + * @param dateStr 日期字符串 + * @param format 格式 + * @return LocalDate 对象 + **/ + public LocalDate parseDateStr2LocalDate(String dateStr, String format){ + try { + if(StrUtil.isBlank(format)){ + format = "yyyy-MM-dd"; + } + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + return LocalDate.parse(dateStr, formatter); + }catch (Exception e){ + Util.getLogger().error("解析LocalDate error!" + e.getMessage()); + return LocalDate.now(); + } + } + + /** + *

比较两个日期

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:21 + * @param firstDate 首日期 + * @param secondDate 尾日期 + * @return 首日期在尾日期之前 + **/ + public boolean compare2Date(String firstDate, String secondDate){ + try { + LocalDate firstLocalDate = parseDateStr2LocalDate(firstDate, ""); + LocalDate secondLocalDate = parseDateStr2LocalDate(secondDate, ""); + return firstLocalDate.isBefore(secondLocalDate); + }catch (Exception e){ + Util.getLogger().error("解析LocalDate error!" + e.getMessage()); + return true; + } + } + + /** + *

比较两个日期

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:21 + * @param firstDate 首日期 + * @param firstDateFormat 首日期格式 + * @param secondDate 尾日期 + * @param secondDateFormat 尾日期格式 + * @return 首日期在尾日期之前 + **/ + public boolean compare2Date(String firstDate, + String firstDateFormat, + String secondDate, + String secondDateFormat){ + try { + LocalDate firstLocalDate = parseDateStr2LocalDate(firstDate, firstDateFormat); + LocalDate secondLocalDate = parseDateStr2LocalDate(secondDate, secondDateFormat); + return firstLocalDate.isBefore(secondLocalDate); + }catch (Exception e){ + Util.getLogger().error("解析LocalDate error!" + e.getMessage()); + return true; + } + } + + /** + *

两个yyyy-MM-dd日期格式的差值

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:49 + * @param firstDate 首日期 + * @param secondDate 尾日期 + * @param type 差类型 + * @return 两个日期差值 + **/ + public long twoDateSubNoFormat(String firstDate, String secondDate, int type){ + return twoDateSub(firstDate,"", secondDate, "", type); + } + + /** + *

两个指定日期格式的差值

+ * @author xuanran.wang + * @dateTime 2023/7/26 10:51 + * @param firstDate 首日期 + * @param firstDateFormat 首日期格式 + * @param secondDate 尾日期 + * @param secondDateFormat 尾日期格式 + * @param type 差类型 0: 年, 1: 月, 2: 日, 3: 时, 4: 分, 5:秒 + * @return 两个日期差 + **/ + public long twoDateSub(String firstDate, + String firstDateFormat, + String secondDate, + String secondDateFormat, + int type){ + LocalDate firstLocalDate = parseDateStr2LocalDate(firstDate, firstDateFormat); + LocalDate secondLocalDate = parseDateStr2LocalDate(secondDate, secondDateFormat); + switch (type){ + case 0:{ + return ChronoUnit.YEARS.between(firstLocalDate, secondLocalDate); + } + case 1:{ + return ChronoUnit.MONTHS.between(firstLocalDate, secondLocalDate); + } + case 2:{ + return ChronoUnit.DAYS.between(firstLocalDate, secondLocalDate); + } + case 3:{ + return ChronoUnit.HOURS.between(firstLocalDate, secondLocalDate); + } + case 4:{ + return ChronoUnit.MINUTES.between(firstLocalDate, secondLocalDate); + } + case 5:{ + return ChronoUnit.SECONDS.between(firstLocalDate, secondLocalDate); + } + default: { + return 0; + } + } + } +} diff --git a/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalCheckModelTest.java b/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalCheckModelTest.java new file mode 100644 index 0000000..c78da15 --- /dev/null +++ b/src/test/java/xuanran/wang/xk_hospital/test/XkHospitalCheckModelTest.java @@ -0,0 +1,66 @@ +package xuanran.wang.xk_hospital.test; + +import aiyh.utils.ScriptUtil; +import aiyh.utils.tool.org.apache.commons.jexl3.*; +import basetest.BaseTest; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections.CollectionUtils; +import org.junit.Test; +import weaver.general.TimeUtil; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckConfig; +import weaver.xuanran.wang.xk_hospital.model_check.entity.XkModelCusCheckFiledConfig; +import weaver.xuanran.wang.xk_hospital.model_check.service.XkModelCusCheckService; +import weaver.xuanran.wang.xk_hospital.model_check.util.CusJexlFunctions; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * + * @author xuanran.wang + * @date 2023/7/24 14:28 + */ +public class XkHospitalCheckModelTest extends BaseTest { + + private final XkModelCusCheckService service = new XkModelCusCheckService(); + private static final CusJexlFunctions FUN = new CusJexlFunctions(); + + @Test + public void testA(){ + HashMap map = new HashMap<>(); + map.put("a","测试"); + map.put("b", "112094.28"); + + System.out.println(map); + boolean res = (boolean) ScriptUtil.invokeScript("a.length() > 3", map, FUN); + System.out.println(res); + + HashMap map2 = new HashMap<>(); + map2.put("str", "数据卡健身卡净空法师大法师"); + map2.put("currentDate", new Date()); + map2.put("month", 3); + boolean res2 = (boolean)ScriptUtil.invokeScript("currentDate.getMonth() - month > 1", map2); + System.out.println(res2); + + } + + @Test + public void testB(){ + List configList = service.getFieldCheckRuleConfigList(); + System.out.println(JSONObject.toJSONString(configList)); + service.checkModelData(configList); + // service.checkModelData(config); + } + + @Test + public void testC(){ + System.out.println(FUN.compare2Date("2023-07-26", "2023-07-27")); + System.out.println(FUN.normalDateStrSubCurrentMonthAbs("2023-08-01")); + System.out.println(FUN.twoDateSubNoFormat("2023-08-01", "2023-09-01", 2)); + } +}