Browse Source

Merge pull request #306 from lidongdai/dev

use swagger for api docs
pull/2/head
easyscheduler 6 years ago committed by GitHub
parent
commit
d633a7ae3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      escheduler-api/src/main/java/cn/escheduler/api/configuration/AppConfiguration.java
  2. 109
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiImplicitParamPlugin.java
  3. 71
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiImplicitParamsPlugin.java
  4. 74
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiModelPlugin.java
  5. 219
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiModelPropertyPlugin.java
  6. 141
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiOperationPlugin.java
  7. 115
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiParamPlugin.java
  8. 74
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiPlugin.java
  9. 52
      escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerI18nPlugin.java
  10. 1
      escheduler-api/src/main/java/cn/escheduler/api/controller/ExecutorController.java
  11. 18
      escheduler-api/src/main/java/cn/escheduler/api/controller/LoggerController.java
  12. 30
      escheduler-api/src/main/java/cn/escheduler/api/controller/LoginController.java
  13. 133
      escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java
  14. 96
      escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessInstanceController.java
  15. 295
      escheduler-api/src/main/java/cn/escheduler/api/controller/SchedulerController.java
  16. 19
      escheduler-api/src/main/java/cn/escheduler/api/controller/TaskInstanceController.java
  17. 99
      escheduler-api/src/main/java/cn/escheduler/api/controller/UsersController.java
  18. 103
      escheduler-api/src/main/resources/messages.properties
  19. 103
      escheduler-api/src/main/resources/messages_en_US.properties
  20. 102
      escheduler-api/src/main/resources/messages_zh_CN.properties
  21. 2
      escheduler-common/src/main/java/cn/escheduler/common/enums/ExecutionStatus.java
  22. 8
      escheduler-dao/pom.xml
  23. 7
      escheduler-dao/src/main/java/cn/escheduler/dao/model/User.java
  24. 5
      escheduler-ui/dist/combo/1.0.0/3rd.css
  25. 10783
      escheduler-ui/dist/combo/1.0.0/3rd.js
  26. 8
      escheduler-ui/dist/combo/1.0.0/base.css
  27. 14
      escheduler-ui/dist/combo/1.0.0/es5.js
  28. 1
      escheduler-ui/dist/combo/1.0.0/local.js
  29. 1
      escheduler-ui/dist/css/common.8ba9af7.css
  30. BIN
      escheduler-ui/dist/font/fontawesome-webfont.674f50d.eot
  31. BIN
      escheduler-ui/dist/font/fontawesome-webfont.af7ae50.woff2
  32. BIN
      escheduler-ui/dist/font/fontawesome-webfont.b06871f.ttf
  33. BIN
      escheduler-ui/dist/font/fontawesome-webfont.fee66e7.woff
  34. BIN
      escheduler-ui/dist/font/iconfont.4f692dd.ttf
  35. BIN
      escheduler-ui/dist/font/iconfont.6f38b93.eot
  36. BIN
      escheduler-ui/dist/font/iconfont.be17177.woff
  37. BIN
      escheduler-ui/dist/images/close.png
  38. BIN
      escheduler-ui/dist/images/dag_bg.png
  39. BIN
      escheduler-ui/dist/images/down_error.png
  40. BIN
      escheduler-ui/dist/images/errorTip.png
  41. BIN
      escheduler-ui/dist/images/favicon.ico
  42. 2671
      escheduler-ui/dist/images/fontawesome-webfont.svg
  43. 266
      escheduler-ui/dist/images/iconfont.svg
  44. BIN
      escheduler-ui/dist/images/login-logo.png
  45. BIN
      escheduler-ui/dist/images/logo.png
  46. BIN
      escheduler-ui/dist/images/m_logo.png
  47. BIN
      escheduler-ui/dist/images/open.png
  48. BIN
      escheduler-ui/dist/images/toolbar_DEPENDENT.png
  49. BIN
      escheduler-ui/dist/images/toolbar_MR.png
  50. BIN
      escheduler-ui/dist/images/toolbar_PROCEDURE.png
  51. BIN
      escheduler-ui/dist/images/toolbar_PYTHON.png
  52. BIN
      escheduler-ui/dist/images/toolbar_SHELL.png
  53. BIN
      escheduler-ui/dist/images/toolbar_SPARK.png
  54. BIN
      escheduler-ui/dist/images/toolbar_SQL.png
  55. BIN
      escheduler-ui/dist/images/toolbar_SUB_PROCESS.png
  56. 7
      escheduler-ui/dist/index.html
  57. 2
      escheduler-ui/dist/js/0.bf0a1e2.js
  58. 1
      escheduler-ui/dist/js/0.bf0a1e2.js.map
  59. 2
      escheduler-ui/dist/js/1.3ff7adc.js
  60. 1
      escheduler-ui/dist/js/1.3ff7adc.js.map
  61. 2
      escheduler-ui/dist/js/10.90da74f.js
  62. 1
      escheduler-ui/dist/js/10.90da74f.js.map
  63. 2
      escheduler-ui/dist/js/11.ca8ac79.js
  64. 1
      escheduler-ui/dist/js/11.ca8ac79.js.map
  65. 2
      escheduler-ui/dist/js/12.b6fb265.js
  66. 1
      escheduler-ui/dist/js/12.b6fb265.js.map
  67. 2
      escheduler-ui/dist/js/13.a8f5ee9.js
  68. 1
      escheduler-ui/dist/js/13.a8f5ee9.js.map
  69. 2
      escheduler-ui/dist/js/14.10001b2.js
  70. 1
      escheduler-ui/dist/js/14.10001b2.js.map
  71. 2
      escheduler-ui/dist/js/15.9119d76.js
  72. 1
      escheduler-ui/dist/js/15.9119d76.js.map
  73. 2
      escheduler-ui/dist/js/16.648c64b.js
  74. 1
      escheduler-ui/dist/js/16.648c64b.js.map
  75. 9
      escheduler-ui/dist/js/17.6761755.js
  76. 1
      escheduler-ui/dist/js/17.6761755.js.map
  77. 2
      escheduler-ui/dist/js/18.3bc2e58.js
  78. 1
      escheduler-ui/dist/js/18.3bc2e58.js.map
  79. 2
      escheduler-ui/dist/js/19.5ce986e.js
  80. 1
      escheduler-ui/dist/js/19.5ce986e.js.map
  81. 2
      escheduler-ui/dist/js/2.3b16c4b.js
  82. 1
      escheduler-ui/dist/js/2.3b16c4b.js.map
  83. 2
      escheduler-ui/dist/js/20.ef7f230.js
  84. 1
      escheduler-ui/dist/js/20.ef7f230.js.map
  85. 2
      escheduler-ui/dist/js/21.b587019.js
  86. 1
      escheduler-ui/dist/js/21.b587019.js.map
  87. 2
      escheduler-ui/dist/js/22.f33bbc0.js
  88. 1
      escheduler-ui/dist/js/22.f33bbc0.js.map
  89. 2
      escheduler-ui/dist/js/23.bb2b238.js
  90. 1
      escheduler-ui/dist/js/23.bb2b238.js.map
  91. 2
      escheduler-ui/dist/js/24.6e296a1.js
  92. 1
      escheduler-ui/dist/js/24.6e296a1.js.map
  93. 2
      escheduler-ui/dist/js/25.079b6f7.js
  94. 1
      escheduler-ui/dist/js/25.079b6f7.js.map
  95. 2
      escheduler-ui/dist/js/26.4fc30f8.js
  96. 1
      escheduler-ui/dist/js/26.4fc30f8.js.map
  97. 2
      escheduler-ui/dist/js/27.77c2a5a.js
  98. 1
      escheduler-ui/dist/js/27.77c2a5a.js.map
  99. 2
      escheduler-ui/dist/js/28.3e34ffe.js
  100. 1
      escheduler-ui/dist/js/28.3e34ffe.js.map
  101. Some files were not shown because too many files have changed in this diff Show More

15
escheduler-api/src/main/java/cn/escheduler/api/configuration/AppConfiguration.java

@ -36,6 +36,8 @@ public class AppConfiguration implements WebMvcConfigurer {
public static final String LOGIN_INTERCEPTOR_PATH_PATTERN = "/**/*"; public static final String LOGIN_INTERCEPTOR_PATH_PATTERN = "/**/*";
public static final String LOGIN_PATH_PATTERN = "/login"; public static final String LOGIN_PATH_PATTERN = "/login";
public static final String PATH_PATTERN = "/**"; public static final String PATH_PATTERN = "/**";
public static final String LOCALE_LANGUAGE_COOKIE = "language";
public static final int COOKIE_MAX_AGE = 3600;
@Bean @Bean
@ -44,21 +46,24 @@ public class AppConfiguration implements WebMvcConfigurer {
} }
//Cookie /**
* Cookie
*/
@Bean @Bean
public LocaleResolver localeResolver() { public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver(); CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setCookieName("localeCookie"); localeResolver.setCookieName(LOCALE_LANGUAGE_COOKIE);
//设置默认区域 /** set default locale **/
localeResolver.setDefaultLocale(Locale.ENGLISH); localeResolver.setDefaultLocale(Locale.ENGLISH);
localeResolver.setCookieMaxAge(3600);//设置cookie有效期. /** set cookie max age **/
localeResolver.setCookieMaxAge(COOKIE_MAX_AGE);
return localeResolver; return localeResolver;
} }
@Bean @Bean
public LocaleChangeInterceptor localeChangeInterceptor() { public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 参数名 /** **/
lci.setParamName("lang"); lci.setParamName("lang");
return lci; return lci;

109
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiImplicitParamPlugin.java

@ -0,0 +1,109 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.escheduler.api.configuration;
import com.google.common.base.MoreObjects;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiImplicitParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.AllowableValues;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
import java.util.List;
import java.util.Locale;
import static com.google.common.base.Strings.emptyToNull;
import static springfox.documentation.schema.Types.isBaseType;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER;
import static springfox.documentation.swagger.readers.parameter.Examples.examples;
import static springfox.documentation.swagger.schema.ApiModelProperties.allowableValueFromString;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiImplicitParamPlugin implements OperationBuilderPlugin {
@Autowired
private DescriptionResolver descriptions;
@Autowired
private MessageSource messageSource;
static Parameter implicitParameter(MessageSource messageSource, DescriptionResolver descriptions, ApiImplicitParam param) {
Locale locale = LocaleContextHolder.getLocale();
ModelRef modelRef = maybeGetModelRef(param);
return new ParameterBuilder()
.name(param.name())
.description(descriptions.resolve(messageSource.getMessage(param.value(), null, locale)))
.defaultValue(param.defaultValue())
.required(param.required())
.allowMultiple(param.allowMultiple())
.modelRef(modelRef)
.allowableValues(allowableValueFromString(param.allowableValues()))
.parameterType(emptyToNull(param.paramType()))
.parameterAccess(param.access())
.order(SWAGGER_PLUGIN_ORDER)
.scalarExample(param.example())
.complexExamples(examples(param.examples()))
.build();
}
private static ModelRef maybeGetModelRef(ApiImplicitParam param) {
String dataType = MoreObjects.firstNonNull(emptyToNull(param.dataType()), "string");
AllowableValues allowableValues = null;
if (isBaseType(dataType)) {
allowableValues = allowableValueFromString(param.allowableValues());
}
if (param.allowMultiple()) {
return new ModelRef("", new ModelRef(dataType, allowableValues));
}
return new ModelRef(dataType, allowableValues);
}
@Override
public void apply(OperationContext context) {
context.operationBuilder().parameters(readParameters(context));
}
@Override
public boolean supports(DocumentationType delimiter) {
return SwaggerPluginSupport.pluginDoesApply(delimiter);
}
private List<Parameter> readParameters(OperationContext context) {
Optional<ApiImplicitParam> annotation = context.findAnnotation(ApiImplicitParam.class);
List<Parameter> parameters = Lists.newArrayList();
if (annotation.isPresent()) {
parameters.add(implicitParameter(messageSource, descriptions, annotation.get()));
}
return parameters;
}
}

71
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiImplicitParamsPlugin.java

@ -0,0 +1,71 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.escheduler.api.configuration;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
import springfox.documentation.spring.web.DescriptionResolver;
import java.util.List;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.pluginDoesApply;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiImplicitParamsPlugin implements OperationBuilderPlugin {
@Autowired
private DescriptionResolver descriptions;
@Autowired
private MessageSource messageSource;
@Override
public void apply(OperationContext context) {
context.operationBuilder().parameters(readParameters(context));
}
@Override
public boolean supports(DocumentationType delimiter) {
return pluginDoesApply(delimiter);
}
private List<Parameter> readParameters(OperationContext context) {
Optional<ApiImplicitParams> annotation = context.findAnnotation(ApiImplicitParams.class);
List<Parameter> parameters = Lists.newArrayList();
if (annotation.isPresent()) {
for (ApiImplicitParam param : annotation.get().value()) {
parameters.add(SwaggerApiImplicitParamPlugin.implicitParameter(messageSource, descriptions, param));
}
}
return parameters;
}
}

74
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiModelPlugin.java

@ -0,0 +1,74 @@
package cn.escheduler.api.configuration;
import com.fasterxml.classmate.TypeResolver;
import io.swagger.annotations.ApiModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.schema.ModelReference;
import springfox.documentation.schema.TypeNameExtractor;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.ModelBuilderPlugin;
import springfox.documentation.spi.schema.contexts.ModelContext;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static springfox.documentation.schema.ResolvedTypes.*;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.*;
/**
* NOTE : not useful
*/
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiModelPlugin implements ModelBuilderPlugin {
@Autowired
private TypeResolver typeResolver;
@Autowired
private TypeNameExtractor typeNameExtractor;
@Autowired
private MessageSource messageSource;
@Override
public void apply(ModelContext context) {
ApiModel annotation = AnnotationUtils.findAnnotation(forClass(context), ApiModel.class);
if (annotation != null) {
List<ModelReference> modelRefs = new ArrayList<ModelReference>();
for (Class<?> each : annotation.subTypes()) {
modelRefs.add(modelRefFactory(context, typeNameExtractor)
.apply(typeResolver.resolve(each)));
}
Locale locale = LocaleContextHolder.getLocale();
context.getBuilder()
.description(messageSource.getMessage(annotation.description(), null, locale))
.discriminator(annotation.discriminator())
.subTypes(modelRefs);
}
}
private Class<?> forClass(ModelContext context) {
return typeResolver.resolve(context.getType()).getErasedType();
}
// @Override
// public boolean supports(DocumentationType delimiter) {
// return pluginDoesApply(delimiter);
// }
@Override
public boolean supports(DocumentationType delimiter) {
return true;
}
}

219
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiModelPropertyPlugin.java

@ -0,0 +1,219 @@
package cn.escheduler.api.configuration;
import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.TypeResolver;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModelProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.service.AllowableListValues;
import springfox.documentation.service.AllowableRangeValues;
import springfox.documentation.service.AllowableValues;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.ModelPropertyBuilderPlugin;
import springfox.documentation.spi.schema.contexts.ModelPropertyContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
import springfox.documentation.swagger.schema.ApiModelProperties;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.google.common.collect.Lists.newArrayList;
import static org.springframework.util.StringUtils.hasText;
import static springfox.documentation.schema.Annotations.*;
import static springfox.documentation.swagger.schema.ApiModelProperties.*;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiModelPropertyPlugin implements ModelPropertyBuilderPlugin {
private static final Logger LOGGER = LoggerFactory.getLogger(ApiModelProperties.class);
private static final Pattern RANGE_PATTERN = Pattern.compile("range([\\[(])(.*),(.*)([])])$");
@Autowired
private DescriptionResolver descriptions;
@Autowired
private MessageSource messageSource;
@Override
public void apply(ModelPropertyContext context) {
Optional<ApiModelProperty> annotation = Optional.absent();
if (context.getAnnotatedElement().isPresent()) {
annotation = annotation.or(findApiModePropertyAnnotation(context.getAnnotatedElement().get()));
}
if (context.getBeanPropertyDefinition().isPresent()) {
annotation = annotation.or(findPropertyAnnotation(
context.getBeanPropertyDefinition().get(),
ApiModelProperty.class));
}
if (annotation.isPresent()) {
context.getBuilder()
.allowableValues(annotation.transform(toAllowableValues()).orNull())
.required(annotation.transform(toIsRequired()).or(false))
.readOnly(annotation.transform(toIsReadOnly()).or(false))
.description(annotation.transform(toDescription(descriptions)).orNull())
.isHidden(annotation.transform(toHidden()).or(false))
.type(annotation.transform(toType(context.getResolver())).orNull())
.position(annotation.transform(toPosition()).or(0))
.example(annotation.transform(toExample()).orNull());
}
}
static Function<ApiModelProperty, AllowableValues> toAllowableValues() {
return new Function<ApiModelProperty, AllowableValues>() {
@Override
public AllowableValues apply(ApiModelProperty annotation) {
return allowableValueFromString(annotation.allowableValues());
}
};
}
public static AllowableValues allowableValueFromString(String allowableValueString) {
AllowableValues allowableValues = new AllowableListValues(Lists.<String>newArrayList(), "LIST");
String trimmed = allowableValueString.trim();
Matcher matcher = RANGE_PATTERN.matcher(trimmed.replaceAll(" ", ""));
if (matcher.matches()) {
if (matcher.groupCount() != 4) {
LOGGER.warn("Unable to parse range specified {} correctly", trimmed);
} else {
allowableValues = new AllowableRangeValues(
matcher.group(2).contains("infinity") ? null : matcher.group(2),
matcher.group(1).equals("("),
matcher.group(3).contains("infinity") ? null : matcher.group(3),
matcher.group(4).equals(")"));
}
} else if (trimmed.contains(",")) {
Iterable<String> split = Splitter.on(',').trimResults().omitEmptyStrings().split(trimmed);
allowableValues = new AllowableListValues(newArrayList(split), "LIST");
} else if (hasText(trimmed)) {
List<String> singleVal = Collections.singletonList(trimmed);
allowableValues = new AllowableListValues(singleVal, "LIST");
}
return allowableValues;
}
static Function<ApiModelProperty, Boolean> toIsRequired() {
return new Function<ApiModelProperty, Boolean>() {
@Override
public Boolean apply(ApiModelProperty annotation) {
return annotation.required();
}
};
}
static Function<ApiModelProperty, Integer> toPosition() {
return new Function<ApiModelProperty, Integer>() {
@Override
public Integer apply(ApiModelProperty annotation) {
return annotation.position();
}
};
}
static Function<ApiModelProperty, Boolean> toIsReadOnly() {
return new Function<ApiModelProperty, Boolean>() {
@Override
public Boolean apply(ApiModelProperty annotation) {
return annotation.readOnly();
}
};
}
static Function<ApiModelProperty, Boolean> toAllowEmptyValue() {
return new Function<ApiModelProperty, Boolean>() {
@Override
public Boolean apply(ApiModelProperty annotation) {
return annotation.allowEmptyValue();
}
};
}
Function<ApiModelProperty, String> toDescription(
final DescriptionResolver descriptions) {
Locale locale = LocaleContextHolder.getLocale();
return new Function<ApiModelProperty, String>() {
@Override
public String apply(ApiModelProperty annotation) {
String description = "";
if (!Strings.isNullOrEmpty(annotation.value())) {
description = messageSource.getMessage(annotation.value(), null, "" ,locale);
} else if (!Strings.isNullOrEmpty(annotation.notes())) {
description = messageSource.getMessage(annotation.notes(), null, "" ,locale);
}
return descriptions.resolve(description);
}
};
}
static Function<ApiModelProperty, ResolvedType> toType(final TypeResolver resolver) {
return new Function<ApiModelProperty, ResolvedType>() {
@Override
public ResolvedType apply(ApiModelProperty annotation) {
try {
return resolver.resolve(Class.forName(annotation.dataType()));
} catch (ClassNotFoundException e) {
return resolver.resolve(Object.class);
}
}
};
}
public static Optional<ApiModelProperty> findApiModePropertyAnnotation(AnnotatedElement annotated) {
Optional<ApiModelProperty> annotation = Optional.absent();
if (annotated instanceof Method) {
// If the annotated element is a method we can use this information to check superclasses as well
annotation = Optional.fromNullable(AnnotationUtils.findAnnotation(((Method) annotated), ApiModelProperty.class));
}
return annotation.or(Optional.fromNullable(AnnotationUtils.getAnnotation(annotated, ApiModelProperty.class)));
}
static Function<ApiModelProperty, Boolean> toHidden() {
return new Function<ApiModelProperty, Boolean>() {
@Override
public Boolean apply(ApiModelProperty annotation) {
return annotation.hidden();
}
};
}
static Function<ApiModelProperty, String> toExample() {
return new Function<ApiModelProperty, String>() {
@Override
public String apply(ApiModelProperty annotation) {
String example = "";
if (!Strings.isNullOrEmpty(annotation.example())) {
example = annotation.example();
}
return example;
}
};
}
@Override
public boolean supports(DocumentationType delimiter) {
return SwaggerPluginSupport.pluginDoesApply(delimiter);
}
}

141
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiOperationPlugin.java

@ -0,0 +1,141 @@
package cn.escheduler.api.configuration;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
import com.google.common.collect.Sets;
import io.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.spring.web.readers.operation.DefaultTagsProvider;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
import static com.google.common.base.Strings.nullToEmpty;
import static com.google.common.collect.FluentIterable.from;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Sets.*;
import static springfox.documentation.service.Tags.emptyTags;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiOperationPlugin implements OperationBuilderPlugin {
private static final Logger logger = LoggerFactory.getLogger(SwaggerApiOperationPlugin.class);
@Autowired
private DescriptionResolver descriptions;
@Autowired
private DefaultTagsProvider tagsProvider;
@Autowired
private MessageSource messageSource;
@Override
public void apply(OperationContext context) {
Locale locale = LocaleContextHolder.getLocale();
Set<String> defaultTags = tagsProvider.tags(context);
Sets.SetView<String> tags = union(operationTags(context), controllerTags(context));
if (tags.isEmpty()) {
context.operationBuilder().tags(defaultTags);
} else {
context.operationBuilder().tags(tags);
}
Optional<ApiOperation> apiOperationAnnotation = context.findAnnotation(ApiOperation.class);
if (apiOperationAnnotation.isPresent()) {
ApiOperation operation = apiOperationAnnotation.get();
if (StringUtils.hasText(operation.nickname())) {
// Populate the value of nickname annotation into uniqueId
context.operationBuilder().uniqueId(operation.nickname());
context.operationBuilder().codegenMethodNameStem(operation.nickname());
}
if (StringUtils.hasText(apiOperationAnnotation.get().notes())) {
context.operationBuilder().notes(descriptions.resolve(messageSource.getMessage(apiOperationAnnotation.get().notes(), null, "", locale)));
}
if (apiOperationAnnotation.get().position() > 0) {
context.operationBuilder().position(apiOperationAnnotation.get().position());
}
if (StringUtils.hasText(apiOperationAnnotation.get().value())) {
context.operationBuilder().summary(descriptions.resolve(apiOperationAnnotation.get().value()));
}
context.operationBuilder().consumes(asSet(nullToEmpty(apiOperationAnnotation.get().consumes())));
context.operationBuilder().produces(asSet(nullToEmpty(apiOperationAnnotation.get().produces())));
}
}
private Set<String> controllerTags(OperationContext context) {
Optional<Api> controllerAnnotation = context.findControllerAnnotation(Api.class);
return controllerAnnotation.transform(tagsFromController()).or(Sets.<String>newHashSet());
}
private Set<String> operationTags(OperationContext context) {
Optional<ApiOperation> annotation = context.findAnnotation(ApiOperation.class);
return annotation.transform(tagsFromOperation()).or(Sets.<String>newHashSet());
}
private Function<ApiOperation, Set<String>> tagsFromOperation() {
return new Function<ApiOperation, Set<String>>() {
@Override
public Set<String> apply(ApiOperation input) {
Set<String> tags = newTreeSet();
tags.addAll(from(newArrayList(input.tags())).filter(emptyTags()).toSet());
return tags;
}
};
}
private Function<Api, Set<String>> tagsFromController() {
return new Function<Api, Set<String>>() {
@Override
public Set<String> apply(Api input) {
Set<String> tags = newTreeSet();
tags.addAll(from(newArrayList(input.tags())).filter(emptyTags()).toSet());
return tags;
}
};
}
private Set<String> asSet(String mediaTypes) {
return newHashSet(Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList(mediaTypes));
}
@Override
public boolean supports(DocumentationType delimiter) {
return SwaggerPluginSupport.pluginDoesApply(delimiter);
// return true;
}
}

115
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiParamPlugin.java

@ -0,0 +1,115 @@
/*
*
* Copyright 2015-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
*/
package cn.escheduler.api.configuration;
import com.fasterxml.classmate.ResolvedType;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.schema.Collections;
import springfox.documentation.schema.Enums;
import springfox.documentation.schema.Example;
import springfox.documentation.service.AllowableValues;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.EnumTypeDeterminer;
import springfox.documentation.spi.service.ParameterBuilderPlugin;
import springfox.documentation.spi.service.contexts.ParameterContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.swagger.schema.ApiModelProperties;
import java.util.Locale;
import static com.google.common.base.Strings.emptyToNull;
import static com.google.common.base.Strings.isNullOrEmpty;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.pluginDoesApply;
import static springfox.documentation.swagger.readers.parameter.Examples.examples;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiParamPlugin implements ParameterBuilderPlugin {
@Autowired
private DescriptionResolver descriptions;
@Autowired
private EnumTypeDeterminer enumTypeDeterminer;
@Autowired
private MessageSource messageSource;
@Override
public void apply(ParameterContext context) {
Optional<ApiParam> apiParam = context.resolvedMethodParameter().findAnnotation(ApiParam.class);
context.parameterBuilder()
.allowableValues(allowableValues(
context.alternateFor(context.resolvedMethodParameter().getParameterType()),
apiParam.transform(toAllowableValue()).or("")));
if (apiParam.isPresent()) {
Locale locale = LocaleContextHolder.getLocale();
ApiParam annotation = apiParam.get();
context.parameterBuilder().name(emptyToNull(annotation.name()))
.description(emptyToNull(descriptions.resolve(messageSource.getMessage(annotation.value(), null, "",locale))))
.parameterAccess(emptyToNull(annotation.access()))
.defaultValue(emptyToNull(annotation.defaultValue()))
.allowMultiple(annotation.allowMultiple())
.allowEmptyValue(annotation.allowEmptyValue())
.required(annotation.required())
.scalarExample(new Example(annotation.example()))
.complexExamples(examples(annotation.examples()))
.hidden(annotation.hidden())
.collectionFormat(annotation.collectionFormat())
.order(SWAGGER_PLUGIN_ORDER);
}
}
private Function<ApiParam, String> toAllowableValue() {
return new Function<ApiParam, String>() {
@Override
public String apply(ApiParam input) {
return input.allowableValues();
}
};
}
private AllowableValues allowableValues(ResolvedType parameterType, String allowableValueString) {
AllowableValues allowableValues = null;
if (!isNullOrEmpty(allowableValueString)) {
allowableValues = ApiModelProperties.allowableValueFromString(allowableValueString);
} else {
if (enumTypeDeterminer.isEnum(parameterType.getErasedType())) {
allowableValues = Enums.allowableValues(parameterType.getErasedType());
}
if (Collections.isContainerType(parameterType)) {
allowableValues = Enums.allowableValues(Collections.collectionElementType(parameterType).getErasedType());
}
}
return allowableValues;
}
@Override
public boolean supports(DocumentationType delimiter) {
return pluginDoesApply(delimiter);
}
}

74
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerApiPlugin.java

@ -0,0 +1,74 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.escheduler.api.configuration;
import io.swagger.annotations.Api;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerApiPlugin implements OperationBuilderPlugin {
private static final Logger logger = LoggerFactory.getLogger(SwaggerApiPlugin.class);
@Autowired
private MessageSource messageSource;
@Override
public void apply(OperationContext context) {
Locale locale = LocaleContextHolder.getLocale();
List<Api> list = context.findAllAnnotations(Api.class);
if (list.size() > 0) {
Api api = list.get(0);
Set<String> tagsSet = new HashSet<>(1);
if(api.tags() != null && api.tags().length > 0){
tagsSet.add(StringUtils.isNotBlank(api.tags()[0]) ? messageSource.getMessage(api.tags()[0], null, locale) : " ");
}
context.operationBuilder().hidden(api.hidden())
.tags(tagsSet).build();
}
}
@Override
public boolean supports(DocumentationType delimiter) {
return true;
}
}

52
escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerI18nPlugin.java

@ -1,52 +0,0 @@
package cn.escheduler.api.configuration;
import java.util.List;
import java.util.Locale;
import com.fasterxml.classmate.TypeResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE - 10)
public class SwaggerI18nPlugin implements OperationBuilderPlugin {
private static final Logger logger = LoggerFactory.getLogger(SwaggerI18nPlugin.class);
@Autowired
private MessageSource messageSource;
@Override
public void apply(OperationContext context) {
Locale locale = LocaleContextHolder.getLocale();
List<ApiOperation> list = context.findAllAnnotations(ApiOperation.class);
if (list.size() > 0) {
for(ApiOperation api : list){
context.operationBuilder().summary(messageSource.getMessage(api.value(), null, locale));
context.operationBuilder().notes(messageSource.getMessage(api.notes(), null, locale));
}
}
}
@Override
public boolean supports(DocumentationType delimiter) {
return true;
}
}

1
escheduler-api/src/main/java/cn/escheduler/api/controller/ExecutorController.java

@ -24,6 +24,7 @@ import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result; import cn.escheduler.api.utils.Result;
import cn.escheduler.common.enums.*; import cn.escheduler.common.enums.*;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.Api;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

18
escheduler-api/src/main/java/cn/escheduler/api/controller/LoggerController.java

@ -21,6 +21,10 @@ import cn.escheduler.api.service.LoggerService;
import cn.escheduler.api.utils.Constants; import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result; import cn.escheduler.api.utils.Result;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -28,6 +32,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import static cn.escheduler.api.enums.Status.DOWNLOAD_TASK_INSTANCE_LOG_FILE_ERROR; import static cn.escheduler.api.enums.Status.DOWNLOAD_TASK_INSTANCE_LOG_FILE_ERROR;
import static cn.escheduler.api.enums.Status.QUERY_TASK_INSTANCE_LOG_ERROR; import static cn.escheduler.api.enums.Status.QUERY_TASK_INSTANCE_LOG_ERROR;
@ -36,6 +41,7 @@ import static cn.escheduler.api.enums.Status.QUERY_TASK_INSTANCE_LOG_ERROR;
/** /**
* log controller * log controller
*/ */
@Api(tags = "LOGGER_TAG", position = 13)
@RestController @RestController
@RequestMapping("/log") @RequestMapping("/log")
public class LoggerController extends BaseController { public class LoggerController extends BaseController {
@ -49,9 +55,15 @@ public class LoggerController extends BaseController {
/** /**
* query task log * query task log
*/ */
@ApiOperation(value = "queryLog", notes= "QUERY_TASK_INSTANCE_LOG_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskInstId", value = "TASK_ID",type = "Int"),
@ApiImplicitParam(name = "skipLineNum", value = "SKIP_LINE_NUM", type ="Int"),
@ApiImplicitParam(name = "limit", value = "LIMIT", type ="Int")
})
@GetMapping(value = "/detail") @GetMapping(value = "/detail")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryLog(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryLog(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "taskInstId") int taskInstanceId, @RequestParam(value = "taskInstId") int taskInstanceId,
@RequestParam(value = "skipLineNum") int skipNum, @RequestParam(value = "skipLineNum") int skipNum,
@RequestParam(value = "limit") int limit) { @RequestParam(value = "limit") int limit) {
@ -73,6 +85,10 @@ public class LoggerController extends BaseController {
* @param loginUser * @param loginUser
* @param taskInstanceId * @param taskInstanceId
*/ */
@ApiOperation(value = "downloadTaskLog", notes= "DOWNLOAD_TASK_INSTANCE_LOG_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskInstId", value = "TASK_ID",type = "Int")
})
@GetMapping(value = "/download-log") @GetMapping(value = "/download-log")
@ResponseBody @ResponseBody
public ResponseEntity downloadTaskLog(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public ResponseEntity downloadTaskLog(@RequestAttribute(value = Constants.SESSION_USER) User loginUser,

30
escheduler-api/src/main/java/cn/escheduler/api/controller/LoginController.java

@ -23,38 +23,33 @@ import cn.escheduler.api.service.UsersService;
import cn.escheduler.api.utils.Constants; import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result; import cn.escheduler.api.utils.Result;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.Api; import io.swagger.annotations.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
import static cn.escheduler.api.enums.Status.*; import static cn.escheduler.api.enums.Status.*;
/** /**
* user login controller * user login controller
*
* swagger bootstrap ui docs refer : https://doc.xiaominfo.com/guide/enh-func.html
*/ */
@RestController @RestController
@RequestMapping("") @RequestMapping("")
@Api(value = "", tags = {"中国"}, description = "中国") @Api(tags = "LOGIN_TAG", position = 1)
public class LoginController extends BaseController { public class LoginController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(LoginController.class); private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
private Locale locale = LocaleContextHolder.getLocale();
@Autowired @Autowired
private SessionService sessionService; private SessionService sessionService;
@ -62,8 +57,6 @@ public class LoginController extends BaseController {
@Autowired @Autowired
private UsersService userService; private UsersService userService;
@Autowired
private MessageSource messageSource;
/** /**
* login * login
@ -74,18 +67,17 @@ public class LoginController extends BaseController {
* @param response * @param response
* @return * @return
*/ */
@ApiOperation(value = "test", notes="loginNotes") @ApiOperation(value = "login", notes= "LOGIN_NOTES")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "userName", value = "userName", required = true, type = "String"), @ApiImplicitParam(name = "userName", value = "USER_NAME", required = true, type = "String"),
@ApiImplicitParam(name = "userPassword", value = "userPassword", required = true, type ="String") @ApiImplicitParam(name = "userPassword", value = "USER_PASSWORD", required = true, type ="String")
}) })
@RequestMapping(value = "/login") @PostMapping(value = "/login")
public Result login(@RequestParam(value = "userName") String userName, public Result login(@RequestParam(value = "userName") String userName,
@RequestParam(value = "userPassword") String userPassword, @RequestParam(value = "userPassword") String userPassword,
HttpServletRequest request, HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
try { try {
logger.info("login user name: {} ", userName); logger.info("login user name: {} ", userName);
@ -95,7 +87,6 @@ public class LoginController extends BaseController {
Status.USER_NAME_NULL.getMsg()); Status.USER_NAME_NULL.getMsg());
} }
// user ip check // user ip check
String ip = getClientIpAddress(request); String ip = getClientIpAddress(request);
if (StringUtils.isEmpty(ip)) { if (StringUtils.isEmpty(ip)) {
@ -136,8 +127,9 @@ public class LoginController extends BaseController {
* @param loginUser * @param loginUser
* @return * @return
*/ */
@ApiOperation(value = "signOut", notes = "SIGNOUT_NOTES")
@PostMapping(value = "/signOut") @PostMapping(value = "/signOut")
public Result signOut(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result signOut(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
HttpServletRequest request) { HttpServletRequest request) {
try { try {

133
escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java

@ -21,11 +21,13 @@ import cn.escheduler.api.service.ProcessDefinitionService;
import cn.escheduler.api.utils.Constants; import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result; import cn.escheduler.api.utils.Result;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map; import java.util.Map;
@ -35,6 +37,7 @@ import static cn.escheduler.api.enums.Status.*;
/** /**
* process definition controller * process definition controller
*/ */
@Api(tags = "PROCESS_DEFINITION_TAG", position = 2)
@RestController @RestController
@RequestMapping("projects/{projectName}/process") @RequestMapping("projects/{projectName}/process")
public class ProcessDefinitionController extends BaseController{ public class ProcessDefinitionController extends BaseController{
@ -54,28 +57,36 @@ public class ProcessDefinitionController extends BaseController{
* @param desc * @param desc
* @return * @return
*/ */
@PostMapping(value = "/save") @ApiOperation(value = "save", notes= "CREATE_PROCESS_DEFINITION_NOTES")
@ResponseStatus(HttpStatus.CREATED) @ApiImplicitParams({
public Result createProcessDefinition(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, @ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, type = "String"),
@PathVariable String projectName, @ApiImplicitParam(name = "processDefinitionJson", value = "PROCESS_DEFINITION_JSON", required = true, type ="String"),
@RequestParam(value = "name", required = true) String name, @ApiImplicitParam(name = "locations", value = "PROCESS_DEFINITION_LOCATIONS", required = true, type ="String"),
@RequestParam(value = "processDefinitionJson", required = true) String json, @ApiImplicitParam(name = "connects", value = "PROCESS_DEFINITION_CONNECTS", required = true, type ="String"),
@RequestParam(value = "locations", required = false) String locations, @ApiImplicitParam(name = "desc", value = "PROCESS_DEFINITION_DESC", required = false, type ="String"),
@RequestParam(value = "connects", required = false) String connects, })
@RequestParam(value = "desc", required = false) String desc) { @PostMapping(value = "/save")
@ResponseStatus(HttpStatus.CREATED)
public Result createProcessDefinition(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "processDefinitionJson", required = true) String json,
@RequestParam(value = "locations", required = true) String locations,
@RequestParam(value = "connects", required = true) String connects,
@RequestParam(value = "desc", required = false) String desc) {
try { try {
logger.info("login user {}, create process definition, project name: {}, process definition name: {}, " + logger.info("login user {}, create process definition, project name: {}, process definition name: {}, " +
"process_definition_json: {}, desc: {} locations:{}, connects:{}", "process_definition_json: {}, desc: {} locations:{}, connects:{}",
loginUser.getUserName(), projectName, name, json,desc, locations, connects); loginUser.getUserName(), projectName, name, json, desc, locations, connects);
Map<String, Object> result = processDefinitionService.createProcessDefinition(loginUser, projectName, name, json, Map<String, Object> result = processDefinitionService.createProcessDefinition(loginUser, projectName, name, json,
desc, locations, connects ); desc, locations, connects);
return returnDataList(result); return returnDataList(result);
}catch (Exception e){ } catch (Exception e) {
logger.error(CREATE_PROCESS_DEFINITION.getMsg(),e); logger.error(CREATE_PROCESS_DEFINITION.getMsg(), e);
return error(CREATE_PROCESS_DEFINITION.getCode(), CREATE_PROCESS_DEFINITION.getMsg()); return error(CREATE_PROCESS_DEFINITION.getCode(), CREATE_PROCESS_DEFINITION.getMsg());
}
} }
}
/** /**
* verify process definition name unique * verify process definition name unique
@ -85,10 +96,14 @@ public class ProcessDefinitionController extends BaseController{
* @param name * @param name
* @return * @return
*/ */
@ApiOperation(value = "verify-name", notes = "VERIFY_PROCCESS_DEFINITION_NAME_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, type = "String")
})
@GetMapping(value = "/verify-name") @GetMapping(value = "/verify-name")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result verifyProccessDefinitionName(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result verifyProccessDefinitionName(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam(value = "name", required = true) String name){ @RequestParam(value = "name", required = true) String name){
try { try {
logger.info("verify process definition name unique, user:{}, project name:{}, process definition name:{}", logger.info("verify process definition name unique, user:{}, project name:{}, process definition name:{}",
@ -102,7 +117,7 @@ public class ProcessDefinitionController extends BaseController{
} }
/** /**
* update process definition * update process definition
* *
* @param loginUser * @param loginUser
* @param projectName * @param projectName
@ -112,10 +127,19 @@ public class ProcessDefinitionController extends BaseController{
* @param desc * @param desc
* @return * @return
*/ */
@ApiOperation(value = "updateProccessDefinition", notes= "UPDATE_PROCCESS_DEFINITION_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, type = "String"),
@ApiImplicitParam(name = "id", value = "PROCESS_DEFINITION_ID", required = true, type = "Int"),
@ApiImplicitParam(name = "processDefinitionJson", value = "PROCESS_DEFINITION_JSON", required = true, type ="String"),
@ApiImplicitParam(name = "locations", value = "PROCESS_DEFINITION_LOCATIONS", required = true, type ="String"),
@ApiImplicitParam(name = "connects", value = "PROCESS_DEFINITION_CONNECTS", required = true, type ="String"),
@ApiImplicitParam(name = "desc", value = "PROCESS_DEFINITION_DESC", required = false, type ="String"),
})
@PostMapping(value = "/update") @PostMapping(value = "/update")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result updateProccessDefinition(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result updateProccessDefinition(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam(value = "name", required = true) String name, @RequestParam(value = "name", required = true) String name,
@RequestParam(value = "id", required = true) int id, @RequestParam(value = "id", required = true) int id,
@RequestParam(value = "processDefinitionJson", required = true) String processDefinitionJson, @RequestParam(value = "processDefinitionJson", required = true) String processDefinitionJson,
@ -145,10 +169,16 @@ public class ProcessDefinitionController extends BaseController{
* @param releaseState * @param releaseState
* @return * @return
*/ */
@ApiOperation(value = "releaseProccessDefinition", notes= "RELEASE_PROCCESS_DEFINITION_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, type = "String"),
@ApiImplicitParam(name = "processId", value = "PROCESS_DEFINITION_ID", required = true, type = "Int"),
@ApiImplicitParam(name = "releaseState", value = "PROCESS_DEFINITION_CONNECTS", required = true, type ="Int"),
})
@PostMapping(value = "/release") @PostMapping(value = "/release")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result releaseProccessDefinition(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result releaseProccessDefinition(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam(value = "processId", required = true) int processId, @RequestParam(value = "processId", required = true) int processId,
@RequestParam(value = "releaseState", required = true) int releaseState) { @RequestParam(value = "releaseState", required = true) int releaseState) {
@ -172,10 +202,14 @@ public class ProcessDefinitionController extends BaseController{
* @param processId * @param processId
* @return * @return
*/ */
@ApiOperation(value = "queryProccessDefinitionById", notes= "QUERY_PROCCESS_DEFINITION_BY_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processId", value = "PROCESS_DEFINITION_ID", required = true, type = "Int")
})
@GetMapping(value="/select-by-id") @GetMapping(value="/select-by-id")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryProccessDefinitionById(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryProccessDefinitionById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam("processId") Integer processId @RequestParam("processId") Integer processId
){ ){
try{ try{
@ -197,10 +231,11 @@ public class ProcessDefinitionController extends BaseController{
* @param projectName * @param projectName
* @return * @return
*/ */
@ApiOperation(value = "queryProccessDefinitionList", notes= "QUERY_PROCCESS_DEFINITION_LIST_NOTES")
@GetMapping(value="/list") @GetMapping(value="/list")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryProccessDefinitionList(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryProccessDefinitionList(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName
){ ){
try{ try{
logger.info("query proccess definition list, login user:{}, project name:{}", logger.info("query proccess definition list, login user:{}, project name:{}",
@ -221,10 +256,17 @@ public class ProcessDefinitionController extends BaseController{
* @param pageSize * @param pageSize
* @return * @return
*/ */
@ApiOperation(value = "queryProcessDefinitionListPaging", notes= "QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "PAGE_NO", required = true, type = "Int"),
@ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", required = false, type = "String"),
@ApiImplicitParam(name = "userId", value = "USER_ID", required = false, type = "Int"),
@ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", required = true, type = "Int")
})
@GetMapping(value="/list-paging") @GetMapping(value="/list-paging")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryProcessDefinitionListPaging(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryProcessDefinitionListPaging(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam("pageNo") Integer pageNo, @RequestParam("pageNo") Integer pageNo,
@RequestParam(value = "searchVal", required = false) String searchVal, @RequestParam(value = "searchVal", required = false) String searchVal,
@RequestParam(value = "userId", required = false, defaultValue = "0") Integer userId, @RequestParam(value = "userId", required = false, defaultValue = "0") Integer userId,
@ -252,10 +294,15 @@ public class ProcessDefinitionController extends BaseController{
* @param id * @param id
* @return * @return
*/ */
@ApiOperation(value = "viewTree", notes= "VIEW_TREE_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processId", value = "PROCESS_DEFINITION_ID", required = true, type = "Int"),
@ApiImplicitParam(name = "limit", value = "LIMIT", required = true, type = "Int")
})
@GetMapping(value="/view-tree") @GetMapping(value="/view-tree")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result viewTree(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result viewTree(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam("processId") Integer id, @RequestParam("processId") Integer id,
@RequestParam("limit") Integer limit){ @RequestParam("limit") Integer limit){
try{ try{
@ -278,11 +325,15 @@ public class ProcessDefinitionController extends BaseController{
* @param processDefinitionId * @param processDefinitionId
* @return * @return
*/ */
@ApiOperation(value = "getNodeListByDefinitionId", notes= "GET_NODE_LIST_BY_DEFINITION_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionId", value = "PROCESS_DEFINITION_ID", required = true, type = "Int")
})
@GetMapping(value="gen-task-list") @GetMapping(value="gen-task-list")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result getNodeListByDefinitionId( public Result getNodeListByDefinitionId(
@RequestAttribute(value = Constants.SESSION_USER) User loginUser, @ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam("processDefinitionId") Integer processDefinitionId){ @RequestParam("processDefinitionId") Integer processDefinitionId){
try { try {
logger.info("query task node name list by definitionId, login user:{}, project name:{}, id : {}", logger.info("query task node name list by definitionId, login user:{}, project name:{}, id : {}",
@ -305,11 +356,15 @@ public class ProcessDefinitionController extends BaseController{
* @param processDefinitionIdList * @param processDefinitionIdList
* @return * @return
*/ */
@ApiOperation(value = "getNodeListByDefinitionIdList", notes= "GET_NODE_LIST_BY_DEFINITION_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionIdList", value = "PROCESS_DEFINITION_ID_LIST", required = true, type = "String")
})
@GetMapping(value="get-task-list") @GetMapping(value="get-task-list")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result getNodeListByDefinitionIdList( public Result getNodeListByDefinitionIdList(
@RequestAttribute(value = Constants.SESSION_USER) User loginUser, @ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME",required = true) @PathVariable String projectName,
@RequestParam("processDefinitionIdList") String processDefinitionIdList){ @RequestParam("processDefinitionIdList") String processDefinitionIdList){
try { try {

96
escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessInstanceController.java

@ -23,11 +23,13 @@ import cn.escheduler.api.utils.Result;
import cn.escheduler.common.enums.ExecutionStatus; import cn.escheduler.common.enums.ExecutionStatus;
import cn.escheduler.common.enums.Flag; import cn.escheduler.common.enums.Flag;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map; import java.util.Map;
@ -36,6 +38,7 @@ import static cn.escheduler.api.enums.Status.*;
/** /**
* process instance controller * process instance controller
*/ */
@Api(tags = "PROCESS_INSTANCE_TAG", position = 10)
@RestController @RestController
@RequestMapping("projects/{projectName}/instance") @RequestMapping("projects/{projectName}/instance")
public class ProcessInstanceController extends BaseController{ public class ProcessInstanceController extends BaseController{
@ -55,10 +58,21 @@ public class ProcessInstanceController extends BaseController{
* @param pageSize * @param pageSize
* @return * @return
*/ */
@ApiOperation(value = "queryProcessInstanceList", notes= "QUERY_PROCESS_INSTANCE_LIST_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionId", value = "PROCESS_DEFINITION_ID", type = "Int"),
@ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", type ="String"),
@ApiImplicitParam(name = "stateType", value = "EXECUTION_STATUS", type ="ExecutionStatus"),
@ApiImplicitParam(name = "host", value = "HOST", type ="String"),
@ApiImplicitParam(name = "startDate", value = "START_DATE", type ="String"),
@ApiImplicitParam(name = "endDate", value = "END_DATE", type ="String"),
@ApiImplicitParam(name = "pageNo", value = "PAGE_NO", type ="Int"),
@ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", type ="Int")
})
@GetMapping(value="list-paging") @GetMapping(value="list-paging")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryProcessInstanceList(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryProcessInstanceList(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam(value = "processDefinitionId", required = false, defaultValue = "0") Integer processDefinitionId, @RequestParam(value = "processDefinitionId", required = false, defaultValue = "0") Integer processDefinitionId,
@RequestParam(value = "searchVal", required = false) String searchVal, @RequestParam(value = "searchVal", required = false) String searchVal,
@RequestParam(value = "stateType", required = false) ExecutionStatus stateType, @RequestParam(value = "stateType", required = false) ExecutionStatus stateType,
@ -86,19 +100,23 @@ public class ProcessInstanceController extends BaseController{
* *
* @param loginUser * @param loginUser
* @param projectName * @param projectName
* @param workflowId * @param processInstanceId
* @return * @return
*/ */
@ApiOperation(value = "queryTaskListByProcessId", notes= "QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID", type = "Int")
})
@GetMapping(value="/task-list-by-process-id") @GetMapping(value="/task-list-by-process-id")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryTaskListByProcessId(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryTaskListByProcessId(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam("processInstanceId") Integer workflowId @RequestParam("processInstanceId") Integer processInstanceId
) { ) {
try{ try{
logger.info("query task instance list by process instance id, login user:{}, project name:{}, work instance id:{}", logger.info("query task instance list by process instance id, login user:{}, project name:{}, process instance id:{}",
loginUser.getUserName(), projectName, workflowId); loginUser.getUserName(), projectName, processInstanceId);
Map<String, Object> result = processInstanceService.queryTaskListByProcessId(loginUser, projectName, workflowId); Map<String, Object> result = processInstanceService.queryTaskListByProcessId(loginUser, projectName, processInstanceId);
return returnDataList(result); return returnDataList(result);
}catch (Exception e){ }catch (Exception e){
logger.error(QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_ERROR.getMsg(),e); logger.error(QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_ERROR.getMsg(),e);
@ -118,10 +136,20 @@ public class ProcessInstanceController extends BaseController{
* @param flag * @param flag
* @return * @return
*/ */
@ApiOperation(value = "updateProcessInstance", notes= "UPDATE_PROCESS_INSTANCE_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceJson", value = "PROCESS_INSTANCE_JSON", type = "String"),
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID", type = "Int"),
@ApiImplicitParam(name = "scheduleTime", value = "SCHEDULE_TIME", type = "String"),
@ApiImplicitParam(name = "syncDefine", value = "SYNC_DEFINE", type = "Boolean"),
@ApiImplicitParam(name = "locations", value = "PROCESS_INSTANCE_LOCATIONS", type = "String"),
@ApiImplicitParam(name = "connects", value = "PROCESS_INSTANCE_CONNECTS", type = "String"),
@ApiImplicitParam(name = "flag", value = "RECOVERY_PROCESS_INSTANCE_FLAG", type = "Flag"),
})
@PostMapping(value="/update") @PostMapping(value="/update")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result updateProcessInstance(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result updateProcessInstance(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam( value = "processInstanceJson", required = false) String processInstanceJson, @RequestParam( value = "processInstanceJson", required = false) String processInstanceJson,
@RequestParam( value = "processInstanceId") Integer processInstanceId, @RequestParam( value = "processInstanceId") Integer processInstanceId,
@RequestParam( value = "scheduleTime", required = false) String scheduleTime, @RequestParam( value = "scheduleTime", required = false) String scheduleTime,
@ -152,10 +180,14 @@ public class ProcessInstanceController extends BaseController{
* @param processInstanceId * @param processInstanceId
* @return * @return
*/ */
@ApiOperation(value = "queryProcessInstanceById", notes= "QUERY_PROCESS_INSTANCE_BY_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID", type = "Int")
})
@GetMapping(value="/select-by-id") @GetMapping(value="/select-by-id")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryProcessInstanceById(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryProcessInstanceById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam("processInstanceId") Integer processInstanceId @RequestParam("processInstanceId") Integer processInstanceId
){ ){
try{ try{
@ -178,10 +210,14 @@ public class ProcessInstanceController extends BaseController{
* @param processInstanceId * @param processInstanceId
* @return * @return
*/ */
@ApiOperation(value = "deleteProcessInstanceById", notes= "DELETE_PROCESS_INSTANCE_BY_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID", type = "Int")
})
@GetMapping(value="/delete") @GetMapping(value="/delete")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result deleteProcessInstanceById(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result deleteProcessInstanceById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam("processInstanceId") Integer processInstanceId @RequestParam("processInstanceId") Integer processInstanceId
){ ){
try{ try{
@ -203,10 +239,14 @@ public class ProcessInstanceController extends BaseController{
* @param taskId * @param taskId
* @return * @return
*/ */
@ApiOperation(value = "querySubProcessInstanceByTaskId", notes= "QUERY_SUBPROCESS_INSTANCE_BY_TASK_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "TASK_ID", type = "Int")
})
@GetMapping(value="/select-sub-process") @GetMapping(value="/select-sub-process")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result querySubProcessInstanceByTaskId(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result querySubProcessInstanceByTaskId(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam("taskId") Integer taskId){ @RequestParam("taskId") Integer taskId){
try{ try{
Map<String, Object> result = processInstanceService.querySubProcessInstanceByTaskId(loginUser, projectName, taskId); Map<String, Object> result = processInstanceService.querySubProcessInstanceByTaskId(loginUser, projectName, taskId);
@ -225,10 +265,14 @@ public class ProcessInstanceController extends BaseController{
* @param subId * @param subId
* @return * @return
*/ */
@ApiOperation(value = "queryParentInstanceBySubId", notes= "QUERY_PARENT_PROCESS_INSTANCE_BY_SUB_PROCESS_INSTANCE_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "subId", value = "SUB_PROCESS_INSTANCE_ID", type = "Int")
})
@GetMapping(value="/select-parent-process") @GetMapping(value="/select-parent-process")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryParentInstanceBySubId(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryParentInstanceBySubId(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam("subId") Integer subId){ @RequestParam("subId") Integer subId){
try{ try{
Map<String, Object> result = processInstanceService.queryParentInstanceBySubId(loginUser, projectName, subId); Map<String, Object> result = processInstanceService.queryParentInstanceBySubId(loginUser, projectName, subId);
@ -246,9 +290,13 @@ public class ProcessInstanceController extends BaseController{
* @param processInstanceId * @param processInstanceId
* @return * @return
*/ */
@ApiOperation(value = "viewVariables", notes= "QUERY_PROCESS_INSTANCE_GLOBAL_VARIABLES_AND_LOCAL_VARIABLES_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID", type = "Int")
})
@GetMapping(value="/view-variables") @GetMapping(value="/view-variables")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result viewVariables(@RequestAttribute(value = Constants.SESSION_USER) User loginUser public Result viewVariables(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser
, @RequestParam("processInstanceId") Integer processInstanceId){ , @RequestParam("processInstanceId") Integer processInstanceId){
try{ try{
Map<String, Object> result = processInstanceService.viewVariables(processInstanceId); Map<String, Object> result = processInstanceService.viewVariables(processInstanceId);
@ -267,10 +315,14 @@ public class ProcessInstanceController extends BaseController{
* @param processInstanceId * @param processInstanceId
* @return * @return
*/ */
@ApiOperation(value = "vieGanttTree", notes= "VIEW_GANTT_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID", type = "Int")
})
@GetMapping(value="/view-gantt") @GetMapping(value="/view-gantt")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result viewTree(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result viewTree(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam("processInstanceId") Integer processInstanceId){ @RequestParam("processInstanceId") Integer processInstanceId){
try{ try{
Map<String, Object> result = processInstanceService.viewGantt(processInstanceId); Map<String, Object> result = processInstanceService.viewGantt(processInstanceId);

295
escheduler-api/src/main/java/cn/escheduler/api/controller/SchedulerController.java

@ -25,11 +25,13 @@ import cn.escheduler.common.enums.Priority;
import cn.escheduler.common.enums.ReleaseState; import cn.escheduler.common.enums.ReleaseState;
import cn.escheduler.common.enums.WarningType; import cn.escheduler.common.enums.WarningType;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map; import java.util.Map;
@ -39,9 +41,10 @@ import static cn.escheduler.api.utils.Constants.SESSION_USER;
/** /**
* schedule controller * schedule controller
*/ */
@Api(tags = "SCHEDULER_TAG", position = 13)
@RestController @RestController
@RequestMapping("/projects/{projectName}/schedule") @RequestMapping("/projects/{projectName}/schedule")
public class SchedulerController extends BaseController{ public class SchedulerController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(SchedulerController.class); private static final Logger logger = LoggerFactory.getLogger(SchedulerController.class);
public static final String DEFAULT_WARNING_TYPE = "NONE"; public static final String DEFAULT_WARNING_TYPE = "NONE";
@ -65,33 +68,45 @@ public class SchedulerController extends BaseController{
* @param failureStrategy * @param failureStrategy
* @return * @return
*/ */
@PostMapping("/create") @ApiOperation(value = "createSchedule", notes= "CREATE_SCHEDULE_NOTES")
@ResponseStatus(HttpStatus.CREATED) @ApiImplicitParams({
public Result createSchedule(@RequestAttribute(value = SESSION_USER) User loginUser, @ApiImplicitParam(name = "processDefinitionId", value = "PROCESS_DEFINITION_ID", required = true, type = "Int"),
@PathVariable String projectName, @ApiImplicitParam(name = "schedule", value = "SCHEDULE", type = "Int"),
@RequestParam(value = "processDefinitionId") Integer processDefinitionId, @ApiImplicitParam(name = "warningType", value = "WARNING_TYPE", type ="WarningType"),
@RequestParam(value = "schedule") String schedule, @ApiImplicitParam(name = "warningGroupId", value = "WARNING_GROUP_ID", type ="Int"),
@RequestParam(value = "warningType", required = false,defaultValue = DEFAULT_WARNING_TYPE) WarningType warningType, @ApiImplicitParam(name = "failureStrategy", value = "FAILURE_STRATEGY", type ="FailureStrategy"),
@RequestParam(value = "warningGroupId", required = false,defaultValue = DEFAULT_NOTIFY_GROUP_ID) int warningGroupId, @ApiImplicitParam(name = "receivers", value = "RECEIVERS", type ="String"),
@RequestParam(value = "failureStrategy", required = false, defaultValue = DEFAULT_FAILURE_POLICY) FailureStrategy failureStrategy, @ApiImplicitParam(name = "receiversCc", value = "RECEIVERS_CC", type ="String"),
@RequestParam(value = "receivers", required = false) String receivers, @ApiImplicitParam(name = "workerGroupId", value = "WORKER_GROUP_ID", type ="Int"),
@RequestParam(value = "receiversCc", required = false) String receiversCc, @ApiImplicitParam(name = "processInstancePriority", value = "PROCESS_INSTANCE_PRIORITY", type ="Priority"),
@RequestParam(value = "workerGroupId", required = false, defaultValue = "-1") int workerGroupId, })
@RequestParam(value = "processInstancePriority", required = false) Priority processInstancePriority) { @PostMapping("/create")
logger.info("login user {}, project name: {}, process name: {}, create schedule: {}, warning type: {}, warning group id: {}," + @ResponseStatus(HttpStatus.CREATED)
"failure policy: {},receivers : {},receiversCc : {},processInstancePriority : {}, workGroupId:{}", public Result createSchedule(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser,
loginUser.getUserName(), projectName, processDefinitionId, schedule, warningType, warningGroupId, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
failureStrategy,receivers,receiversCc,processInstancePriority,workerGroupId); @RequestParam(value = "processDefinitionId") Integer processDefinitionId,
try { @RequestParam(value = "schedule") String schedule,
Map<String, Object> result = schedulerService.insertSchedule(loginUser, projectName, processDefinitionId, schedule, @RequestParam(value = "warningType", required = false, defaultValue = DEFAULT_WARNING_TYPE) WarningType warningType,
warningType, warningGroupId, failureStrategy, receivers,receiversCc,processInstancePriority,workerGroupId); @RequestParam(value = "warningGroupId", required = false, defaultValue = DEFAULT_NOTIFY_GROUP_ID) int warningGroupId,
@RequestParam(value = "failureStrategy", required = false, defaultValue = DEFAULT_FAILURE_POLICY) FailureStrategy failureStrategy,
return returnDataList(result); @RequestParam(value = "receivers", required = false) String receivers,
}catch (Exception e){ @RequestParam(value = "receiversCc", required = false) String receiversCc,
logger.error(CREATE_SCHEDULE_ERROR.getMsg(),e); @RequestParam(value = "workerGroupId", required = false, defaultValue = "-1") int workerGroupId,
return error(CREATE_SCHEDULE_ERROR.getCode(), CREATE_SCHEDULE_ERROR.getMsg()); @RequestParam(value = "processInstancePriority", required = false) Priority processInstancePriority) {
} logger.info("login user {}, project name: {}, process name: {}, create schedule: {}, warning type: {}, warning group id: {}," +
} "failure policy: {},receivers : {},receiversCc : {},processInstancePriority : {}, workGroupId:{}",
loginUser.getUserName(), projectName, processDefinitionId, schedule, warningType, warningGroupId,
failureStrategy, receivers, receiversCc, processInstancePriority, workerGroupId);
try {
Map<String, Object> result = schedulerService.insertSchedule(loginUser, projectName, processDefinitionId, schedule,
warningType, warningGroupId, failureStrategy, receivers, receiversCc, processInstancePriority, workerGroupId);
return returnDataList(result);
} catch (Exception e) {
logger.error(CREATE_SCHEDULE_ERROR.getMsg(), e);
return error(CREATE_SCHEDULE_ERROR.getCode(), CREATE_SCHEDULE_ERROR.getMsg());
}
}
/** /**
* updateProcessInstance schedule * updateProcessInstance schedule
@ -105,33 +120,45 @@ public class SchedulerController extends BaseController{
* @param failureStrategy * @param failureStrategy
* @return * @return
*/ */
@PostMapping("/update") @ApiOperation(value = "updateSchedule", notes= "UPDATE_SCHEDULE_NOTES")
public Result updateSchedule(@RequestAttribute(value = SESSION_USER) User loginUser, @ApiImplicitParams({
@PathVariable String projectName, @ApiImplicitParam(name = "id", value = "SCHEDULE_ID", required = true, type = "Int"),
@RequestParam(value = "id") Integer id, @ApiImplicitParam(name = "schedule", value = "SCHEDULE", type = "Int"),
@RequestParam(value = "schedule") String schedule, @ApiImplicitParam(name = "warningType", value = "WARNING_TYPE", type ="WarningType"),
@RequestParam(value = "warningType", required = false, defaultValue = DEFAULT_WARNING_TYPE) WarningType warningType, @ApiImplicitParam(name = "warningGroupId", value = "WARNING_GROUP_ID", type ="Int"),
@RequestParam(value = "warningGroupId", required = false) int warningGroupId, @ApiImplicitParam(name = "failureStrategy", value = "FAILURE_STRATEGY", type ="FailureStrategy"),
@RequestParam(value = "failureStrategy", required = false, defaultValue = "END") FailureStrategy failureStrategy, @ApiImplicitParam(name = "receivers", value = "RECEIVERS", type ="String"),
@RequestParam(value = "receivers", required = false) String receivers, @ApiImplicitParam(name = "receiversCc", value = "RECEIVERS_CC", type ="String"),
@RequestParam(value = "receiversCc", required = false) String receiversCc, @ApiImplicitParam(name = "workerGroupId", value = "WORKER_GROUP_ID", type ="Int"),
@RequestParam(value = "workerGroupId", required = false, defaultValue = "-1") int workerGroupId, @ApiImplicitParam(name = "processInstancePriority", value = "PROCESS_INSTANCE_PRIORITY", type ="Priority"),
@RequestParam(value = "processInstancePriority", required = false) Priority processInstancePriority) { })
logger.info("login user {}, project name: {},id: {}, updateProcessInstance schedule: {}, notify type: {}, notify mails: {}, " + @PostMapping("/update")
"failure policy: {},receivers : {},receiversCc : {},processInstancePriority : {},workerGroupId:{}", public Result updateSchedule(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser,
loginUser.getUserName(), projectName, id, schedule, warningType, warningGroupId, failureStrategy, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
receivers,receiversCc,processInstancePriority,workerGroupId); @RequestParam(value = "id") Integer id,
@RequestParam(value = "schedule") String schedule,
try { @RequestParam(value = "warningType", required = false, defaultValue = DEFAULT_WARNING_TYPE) WarningType warningType,
Map<String, Object> result = schedulerService.updateSchedule(loginUser, projectName, id, schedule, @RequestParam(value = "warningGroupId", required = false) int warningGroupId,
warningType, warningGroupId, failureStrategy, receivers,receiversCc,null,processInstancePriority, workerGroupId); @RequestParam(value = "failureStrategy", required = false, defaultValue = "END") FailureStrategy failureStrategy,
return returnDataList(result); @RequestParam(value = "receivers", required = false) String receivers,
@RequestParam(value = "receiversCc", required = false) String receiversCc,
}catch (Exception e){ @RequestParam(value = "workerGroupId", required = false, defaultValue = "-1") int workerGroupId,
logger.error(UPDATE_SCHEDULE_ERROR.getMsg(),e); @RequestParam(value = "processInstancePriority", required = false) Priority processInstancePriority) {
return error(Status.UPDATE_SCHEDULE_ERROR.getCode(), Status.UPDATE_SCHEDULE_ERROR.getMsg()); logger.info("login user {}, project name: {},id: {}, updateProcessInstance schedule: {}, notify type: {}, notify mails: {}, " +
} "failure policy: {},receivers : {},receiversCc : {},processInstancePriority : {},workerGroupId:{}",
} loginUser.getUserName(), projectName, id, schedule, warningType, warningGroupId, failureStrategy,
receivers, receiversCc, processInstancePriority, workerGroupId);
try {
Map<String, Object> result = schedulerService.updateSchedule(loginUser, projectName, id, schedule,
warningType, warningGroupId, failureStrategy, receivers, receiversCc, null, processInstancePriority, workerGroupId);
return returnDataList(result);
} catch (Exception e) {
logger.error(UPDATE_SCHEDULE_ERROR.getMsg(), e);
return error(Status.UPDATE_SCHEDULE_ERROR.getCode(), Status.UPDATE_SCHEDULE_ERROR.getMsg());
}
}
/** /**
* publish schedule setScheduleState * publish schedule setScheduleState
@ -142,21 +169,25 @@ public class SchedulerController extends BaseController{
* @return * @return
* @throws Exception * @throws Exception
*/ */
@PostMapping("/online") @ApiOperation(value = "online", notes= "ONLINE_SCHEDULE_NOTES")
public Result online(@RequestAttribute(value = SESSION_USER) User loginUser, @ApiImplicitParams({
@PathVariable("projectName") String projectName, @ApiImplicitParam(name = "id", value = "SCHEDULE_ID", required = true, type = "Int")
@RequestParam("id") Integer id) { })
logger.info("login user {}, schedule setScheduleState, project name: {}, id: {}", @PostMapping("/online")
loginUser.getUserName(), projectName, id); public Result online(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser,
try { @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable("projectName") String projectName,
Map<String, Object> result = schedulerService.setScheduleState(loginUser, projectName, id, ReleaseState.ONLINE); @RequestParam("id") Integer id) {
return returnDataList(result); logger.info("login user {}, schedule setScheduleState, project name: {}, id: {}",
loginUser.getUserName(), projectName, id);
}catch (Exception e){ try {
logger.error(PUBLISH_SCHEDULE_ONLINE_ERROR.getMsg(),e); Map<String, Object> result = schedulerService.setScheduleState(loginUser, projectName, id, ReleaseState.ONLINE);
return error(Status.PUBLISH_SCHEDULE_ONLINE_ERROR.getCode(), Status.PUBLISH_SCHEDULE_ONLINE_ERROR.getMsg()); return returnDataList(result);
}
} } catch (Exception e) {
logger.error(PUBLISH_SCHEDULE_ONLINE_ERROR.getMsg(), e);
return error(Status.PUBLISH_SCHEDULE_ONLINE_ERROR.getCode(), Status.PUBLISH_SCHEDULE_ONLINE_ERROR.getMsg());
}
}
/** /**
* offline schedule * offline schedule
@ -166,22 +197,26 @@ public class SchedulerController extends BaseController{
* @param id * @param id
* @return * @return
*/ */
@PostMapping("/offline") @ApiOperation(value = "offline", notes= "OFFLINE_SCHEDULE_NOTES")
public Result offline(@RequestAttribute(value = SESSION_USER) User loginUser, @ApiImplicitParams({
@PathVariable("projectName") String projectName, @ApiImplicitParam(name = "id", value = "SCHEDULE_ID", required = true, type = "Int")
@RequestParam("id") Integer id) { })
logger.info("login user {}, schedule offline, project name: {}, process definition id: {}", @PostMapping("/offline")
loginUser.getUserName(), projectName, id); public Result offline(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser,
@ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable("projectName") String projectName,
try { @RequestParam("id") Integer id) {
Map<String, Object> result = schedulerService.setScheduleState(loginUser, projectName, id, ReleaseState.OFFLINE); logger.info("login user {}, schedule offline, project name: {}, process definition id: {}",
return returnDataList(result); loginUser.getUserName(), projectName, id);
}catch (Exception e){ try {
logger.error(OFFLINE_SCHEDULE_ERROR.getMsg(),e); Map<String, Object> result = schedulerService.setScheduleState(loginUser, projectName, id, ReleaseState.OFFLINE);
return error(Status.OFFLINE_SCHEDULE_ERROR.getCode(), Status.OFFLINE_SCHEDULE_ERROR.getMsg()); return returnDataList(result);
}
} } catch (Exception e) {
logger.error(OFFLINE_SCHEDULE_ERROR.getMsg(), e);
return error(Status.OFFLINE_SCHEDULE_ERROR.getCode(), Status.OFFLINE_SCHEDULE_ERROR.getMsg());
}
}
/** /**
* query schedule list paging * query schedule list paging
@ -191,43 +226,53 @@ public class SchedulerController extends BaseController{
* @param processDefinitionId * @param processDefinitionId
* @return * @return
*/ */
@GetMapping("/list-paging") @ApiOperation(value = "queryScheduleListPaging", notes= "QUERY_SCHEDULE_LIST_PAGING_NOTES")
public Result querySchedule(@RequestAttribute(value = SESSION_USER) User loginUser, @ApiImplicitParams({
@PathVariable String projectName, @ApiImplicitParam(name = "id", value = "SCHEDULE_ID", required = true, type = "Int"),
@RequestParam Integer processDefinitionId, @ApiImplicitParam(name = "processDefinitionId", value = "PROCESS_DEFINITION_ID", required = true,type = "Int"),
@RequestParam(value = "searchVal", required = false) String searchVal, @ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", type = "String"),
@RequestParam("pageNo") Integer pageNo, @ApiImplicitParam(name = "pageNo", value = "PAGE_NO", type = "Int"),
@RequestParam("pageSize") Integer pageSize) { @ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", type = "Int")
logger.info("login user {}, query schedule, project name: {}, process definition id: {}",
loginUser.getUserName(), projectName, processDefinitionId); })
try { @GetMapping("/list-paging")
Map<String, Object> result = schedulerService.querySchedule(loginUser, projectName, processDefinitionId, searchVal, pageNo, pageSize); public Result queryScheduleListPaging(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser,
return returnDataListPaging(result); @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
}catch (Exception e){ @RequestParam Integer processDefinitionId,
logger.error(QUERY_SCHEDULE_LIST_PAGING_ERROR.getMsg(),e); @RequestParam(value = "searchVal", required = false) String searchVal,
return error(Status.QUERY_SCHEDULE_LIST_PAGING_ERROR.getCode(), Status.QUERY_SCHEDULE_LIST_PAGING_ERROR.getMsg()); @RequestParam("pageNo") Integer pageNo,
} @RequestParam("pageSize") Integer pageSize) {
logger.info("login user {}, query schedule, project name: {}, process definition id: {}",
} loginUser.getUserName(), projectName, processDefinitionId);
try {
/** Map<String, Object> result = schedulerService.querySchedule(loginUser, projectName, processDefinitionId, searchVal, pageNo, pageSize);
* query schedule list return returnDataListPaging(result);
* } catch (Exception e) {
* @param loginUser logger.error(QUERY_SCHEDULE_LIST_PAGING_ERROR.getMsg(), e);
* @param projectName return error(Status.QUERY_SCHEDULE_LIST_PAGING_ERROR.getCode(), Status.QUERY_SCHEDULE_LIST_PAGING_ERROR.getMsg());
* @return }
*/
@PostMapping("/list") }
public Result queryScheduleList(@RequestAttribute(value = SESSION_USER) User loginUser,
@PathVariable String projectName) { /**
try{ * query schedule list
logger.info("login user {}, query schedule list, project name: {}", *
loginUser.getUserName(), projectName); * @param loginUser
Map<String, Object> result = schedulerService.queryScheduleList(loginUser, projectName); * @param projectName
return returnDataList(result); * @return
}catch (Exception e){ */
logger.error(QUERY_SCHEDULE_LIST_ERROR.getMsg(),e); @ApiOperation(value = "queryScheduleList", notes= "QUERY_SCHEDULE_LIST_NOTES")
return error(Status.QUERY_SCHEDULE_LIST_ERROR.getCode(), Status.QUERY_SCHEDULE_LIST_ERROR.getMsg()); @PostMapping("/list")
} public Result queryScheduleList(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser,
} @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName) {
try {
logger.info("login user {}, query schedule list, project name: {}",
loginUser.getUserName(), projectName);
Map<String, Object> result = schedulerService.queryScheduleList(loginUser, projectName);
return returnDataList(result);
} catch (Exception e) {
logger.error(QUERY_SCHEDULE_LIST_ERROR.getMsg(), e);
return error(Status.QUERY_SCHEDULE_LIST_ERROR.getCode(), Status.QUERY_SCHEDULE_LIST_ERROR.getMsg());
}
}
} }

19
escheduler-api/src/main/java/cn/escheduler/api/controller/TaskInstanceController.java

@ -22,11 +22,13 @@ import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result; import cn.escheduler.api.utils.Result;
import cn.escheduler.common.enums.ExecutionStatus; import cn.escheduler.common.enums.ExecutionStatus;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map; import java.util.Map;
@ -35,6 +37,7 @@ import static cn.escheduler.api.enums.Status.QUERY_TASK_LIST_PAGING_ERROR;
/** /**
* task instance controller * task instance controller
*/ */
@Api(tags = "TASK_INSTANCE_TAG", position = 11)
@RestController @RestController
@RequestMapping("/projects/{projectName}/task-instance") @RequestMapping("/projects/{projectName}/task-instance")
public class TaskInstanceController extends BaseController{ public class TaskInstanceController extends BaseController{
@ -51,10 +54,22 @@ public class TaskInstanceController extends BaseController{
* @param loginUser * @param loginUser
* @return * @return
*/ */
@ApiOperation(value = "queryTaskListPaging", notes= "QUERY_TASK_INSTANCE_LIST_PAGING_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "PROCESS_INSTANCE_ID",required = false, type = "Int"),
@ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", type ="String"),
@ApiImplicitParam(name = "taskName", value = "TASK_NAME", type ="String"),
@ApiImplicitParam(name = "stateType", value = "EXECUTION_STATUS", type ="ExecutionStatus"),
@ApiImplicitParam(name = "host", value = "HOST", type ="String"),
@ApiImplicitParam(name = "startDate", value = "START_DATE", type ="String"),
@ApiImplicitParam(name = "endDate", value = "END_DATE", type ="String"),
@ApiImplicitParam(name = "pageNo", value = "PAGE_NO", type ="Int"),
@ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", type ="Int")
})
@GetMapping("/list-paging") @GetMapping("/list-paging")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryTaskListPaging(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryTaskListPaging(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@PathVariable String projectName, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
@RequestParam(value = "processInstanceId", required = false, defaultValue = "0") Integer processInstanceId, @RequestParam(value = "processInstanceId", required = false, defaultValue = "0") Integer processInstanceId,
@RequestParam(value = "searchVal", required = false) String searchVal, @RequestParam(value = "searchVal", required = false) String searchVal,
@RequestParam(value = "taskName", required = false) String taskName, @RequestParam(value = "taskName", required = false) String taskName,

99
escheduler-api/src/main/java/cn/escheduler/api/controller/UsersController.java

@ -22,11 +22,16 @@ import cn.escheduler.api.service.UsersService;
import cn.escheduler.api.utils.Constants; import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result; import cn.escheduler.api.utils.Result;
import cn.escheduler.dao.model.User; import cn.escheduler.dao.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map; import java.util.Map;
@ -36,14 +41,13 @@ import static cn.escheduler.api.enums.Status.*;
/** /**
* user controller * user controller
*/ */
@Api(tags = "USERS_TAG" , position = 14)
@RestController @RestController
@RequestMapping("/users") @RequestMapping("/users")
public class UsersController extends BaseController{ public class UsersController extends BaseController{
private static final Logger logger = LoggerFactory.getLogger(UsersController.class); private static final Logger logger = LoggerFactory.getLogger(UsersController.class);
@Autowired @Autowired
private UsersService usersService; private UsersService usersService;
@ -58,9 +62,18 @@ public class UsersController extends BaseController{
* @param phone * @param phone
* @return * @return
*/ */
@ApiOperation(value = "createUser", notes= "CREATE_USER_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "userName", value = "USER_NAME",type = "String"),
@ApiImplicitParam(name = "userPassword", value = "USER_PASSWORD", type ="String"),
@ApiImplicitParam(name = "tenantId", value = "TENANT_ID", type ="Int"),
@ApiImplicitParam(name = "queue", value = "QUEUE", type ="Int"),
@ApiImplicitParam(name = "email", value = "EMAIL", type ="Int"),
@ApiImplicitParam(name = "phone", value = "PHONE", type ="Int")
})
@PostMapping(value = "/create") @PostMapping(value = "/create")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public Result createUser(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result createUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "userName") String userName, @RequestParam(value = "userName") String userName,
@RequestParam(value = "userPassword") String userPassword, @RequestParam(value = "userPassword") String userPassword,
@RequestParam(value = "tenantId") int tenantId, @RequestParam(value = "tenantId") int tenantId,
@ -88,9 +101,15 @@ public class UsersController extends BaseController{
* @param pageSize * @param pageSize
* @return * @return
*/ */
@ApiOperation(value = "queryUserList", notes= "QUERY_USER_LIST_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "PAGE_NO",type = "Int"),
@ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", type ="String"),
@ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", type ="String")
})
@GetMapping(value="/list-paging") @GetMapping(value="/list-paging")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result queryUserList(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result queryUserList(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam("pageNo") Integer pageNo, @RequestParam("pageNo") Integer pageNo,
@RequestParam(value = "searchVal", required = false) String searchVal, @RequestParam(value = "searchVal", required = false) String searchVal,
@RequestParam("pageSize") Integer pageSize){ @RequestParam("pageSize") Integer pageSize){
@ -111,7 +130,7 @@ public class UsersController extends BaseController{
/** /**
* updateProcessInstance user * update user
* *
* @param loginUser * @param loginUser
* @param id * @param id
@ -122,9 +141,19 @@ public class UsersController extends BaseController{
* @param phone * @param phone
* @return * @return
*/ */
@ApiOperation(value = "updateUser", notes= "UPDATE_USER_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "USER_ID",type = "Int"),
@ApiImplicitParam(name = "userName", value = "USER_NAME",type = "String"),
@ApiImplicitParam(name = "userPassword", value = "USER_PASSWORD", type ="String"),
@ApiImplicitParam(name = "tenantId", value = "TENANT_ID", type ="Int"),
@ApiImplicitParam(name = "queue", value = "QUEUE", type ="Int"),
@ApiImplicitParam(name = "email", value = "EMAIL", type ="Int"),
@ApiImplicitParam(name = "phone", value = "PHONE", type ="Int")
})
@PostMapping(value = "/update") @PostMapping(value = "/update")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result updateUser(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result updateUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "id") int id, @RequestParam(value = "id") int id,
@RequestParam(value = "userName") String userName, @RequestParam(value = "userName") String userName,
@RequestParam(value = "userPassword") String userPassword, @RequestParam(value = "userPassword") String userPassword,
@ -149,9 +178,13 @@ public class UsersController extends BaseController{
* @param id * @param id
* @return * @return
*/ */
@ApiOperation(value = "delUserById", notes= "DELETE_USER_BY_ID_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "USER_ID",type = "Int")
})
@PostMapping(value = "/delete") @PostMapping(value = "/delete")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result delUserById(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result delUserById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "id") int id) { @RequestParam(value = "id") int id) {
logger.info("login user {}, delete user, userId: {},", loginUser.getUserName(), id); logger.info("login user {}, delete user, userId: {},", loginUser.getUserName(), id);
try { try {
@ -170,9 +203,14 @@ public class UsersController extends BaseController{
* @param userId * @param userId
* @return * @return
*/ */
@ApiOperation(value = "grantProject", notes= "GRANT_PROJECT_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "USER_ID",type = "Int"),
@ApiImplicitParam(name = "projectIds", value = "PROJECT_IDS",type = "String")
})
@PostMapping(value = "/grant-project") @PostMapping(value = "/grant-project")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result grantProject(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result grantProject(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "userId") int userId, @RequestParam(value = "userId") int userId,
@RequestParam(value = "projectIds") String projectIds) { @RequestParam(value = "projectIds") String projectIds) {
logger.info("login user {}, grant project, userId: {},projectIds : {}", loginUser.getUserName(), userId,projectIds); logger.info("login user {}, grant project, userId: {},projectIds : {}", loginUser.getUserName(), userId,projectIds);
@ -192,9 +230,14 @@ public class UsersController extends BaseController{
* @param userId * @param userId
* @return * @return
*/ */
@ApiOperation(value = "grantResource", notes= "GRANT_RESOURCE_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "USER_ID",type = "Int"),
@ApiImplicitParam(name = "resourceIds", value = "RESOURCE_IDS",type = "String")
})
@PostMapping(value = "/grant-file") @PostMapping(value = "/grant-file")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result grantResource(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result grantResource(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "userId") int userId, @RequestParam(value = "userId") int userId,
@RequestParam(value = "resourceIds") String resourceIds) { @RequestParam(value = "resourceIds") String resourceIds) {
logger.info("login user {}, grant project, userId: {},resourceIds : {}", loginUser.getUserName(), userId,resourceIds); logger.info("login user {}, grant project, userId: {},resourceIds : {}", loginUser.getUserName(), userId,resourceIds);
@ -215,9 +258,14 @@ public class UsersController extends BaseController{
* @param userId * @param userId
* @return * @return
*/ */
@ApiOperation(value = "grantUDFFunc", notes= "GRANT_UDF_FUNC_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "USER_ID",type = "Int"),
@ApiImplicitParam(name = "udfIds", value = "UDF_IDS",type = "String")
})
@PostMapping(value = "/grant-udf-func") @PostMapping(value = "/grant-udf-func")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result grantUDFFunc(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result grantUDFFunc(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "userId") int userId, @RequestParam(value = "userId") int userId,
@RequestParam(value = "udfIds") String udfIds) { @RequestParam(value = "udfIds") String udfIds) {
logger.info("login user {}, grant project, userId: {},resourceIds : {}", loginUser.getUserName(), userId,udfIds); logger.info("login user {}, grant project, userId: {},resourceIds : {}", loginUser.getUserName(), userId,udfIds);
@ -239,9 +287,14 @@ public class UsersController extends BaseController{
* @param userId * @param userId
* @return * @return
*/ */
@ApiOperation(value = "grantDataSource", notes= "GRANT_DATASOURCE_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "USER_ID",type = "Int"),
@ApiImplicitParam(name = "datasourceIds", value = "DATASOURCE_IDS",type = "String")
})
@PostMapping(value = "/grant-datasource") @PostMapping(value = "/grant-datasource")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result grantDataSource(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result grantDataSource(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "userId") int userId, @RequestParam(value = "userId") int userId,
@RequestParam(value = "datasourceIds") String datasourceIds) { @RequestParam(value = "datasourceIds") String datasourceIds) {
logger.info("login user {}, grant project, userId: {},projectIds : {}", loginUser.getUserName(),userId,datasourceIds); logger.info("login user {}, grant project, userId: {},projectIds : {}", loginUser.getUserName(),userId,datasourceIds);
@ -261,9 +314,10 @@ public class UsersController extends BaseController{
* @param loginUser * @param loginUser
* @return * @return
*/ */
@ApiOperation(value = "getUserInfo", notes= "GET_USER_INFO_NOTES")
@GetMapping(value="/get-user-info") @GetMapping(value="/get-user-info")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result getUserInfo(@RequestAttribute(value = Constants.SESSION_USER) User loginUser){ public Result getUserInfo(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser){
logger.info("login user {},get user info : {}", loginUser.getUserName()); logger.info("login user {},get user info : {}", loginUser.getUserName());
try{ try{
Map<String, Object> result = usersService.getUserInfo(loginUser); Map<String, Object> result = usersService.getUserInfo(loginUser);
@ -280,9 +334,10 @@ public class UsersController extends BaseController{
* @param loginUser * @param loginUser
* @return * @return
*/ */
@ApiOperation(value = "listUser", notes= "LIST_USER_NOTES")
@GetMapping(value="/list") @GetMapping(value="/list")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result listUser(@RequestAttribute(value = Constants.SESSION_USER) User loginUser){ public Result listUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser){
logger.info("login user {}, user list"); logger.info("login user {}, user list");
try{ try{
Map<String, Object> result = usersService.queryUserList(loginUser); Map<String, Object> result = usersService.queryUserList(loginUser);
@ -300,9 +355,13 @@ public class UsersController extends BaseController{
* @param userName * @param userName
* @return * @return
*/ */
@ApiOperation(value = "verifyUserName", notes= "VERIFY_USER_NAME_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "userName", value = "USER_NAME",type = "String")
})
@GetMapping(value = "/verify-user-name") @GetMapping(value = "/verify-user-name")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result verifyUserName(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result verifyUserName(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value ="userName") String userName @RequestParam(value ="userName") String userName
) { ) {
try{ try{
@ -324,9 +383,13 @@ public class UsersController extends BaseController{
* @param alertgroupId * @param alertgroupId
* @return * @return
*/ */
@ApiOperation(value = "unauthorizedUser", notes= "UNAUTHORIZED_USER_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "alertgroupId", value = "ALERT_GROUP_ID",type = "String")
})
@GetMapping(value = "/unauth-user") @GetMapping(value = "/unauth-user")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result unauthorizedUser(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result unauthorizedUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam("alertgroupId") Integer alertgroupId) { @RequestParam("alertgroupId") Integer alertgroupId) {
try{ try{
logger.info("unauthorized user, login user:{}, alert group id:{}", logger.info("unauthorized user, login user:{}, alert group id:{}",
@ -347,9 +410,13 @@ public class UsersController extends BaseController{
* @param alertgroupId * @param alertgroupId
* @return * @return
*/ */
@ApiOperation(value = "authorizedUser", notes= "AUTHORIZED_USER_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "alertgroupId", value = "ALERT_GROUP_ID",type = "String")
})
@GetMapping(value = "/authed-user") @GetMapping(value = "/authed-user")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Result authorizedUser(@RequestAttribute(value = Constants.SESSION_USER) User loginUser, public Result authorizedUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam("alertgroupId") Integer alertgroupId) { @RequestParam("alertgroupId") Integer alertgroupId) {
try{ try{
logger.info("authorized user , login user:{}, alert group id:{}", logger.info("authorized user , login user:{}, alert group id:{}",

103
escheduler-api/src/main/resources/messages.properties

@ -1,5 +1,98 @@
welcome=hello, welcome ! QUERY_SCHEDULE_LIST_NOTES=query schedule list
test=test SCHEDULE=schedule
userName=user name WARNING_TYPE=warning type(sending strategy)
userPassword=user password WARNING_GROUP_ID=warning group id
loginNotes=login notes FAILURE_STRATEGY=failure strategy
RECEIVERS=receivers
RECEIVERS_CC=receivers cc
WORKER_GROUP_ID=worker server group id
PROCESS_INSTANCE_PRIORITY=process instance priority
UPDATE_SCHEDULE_NOTES=update schedule
SCHEDULE_ID=schedule id
ONLINE_SCHEDULE_NOTES=online schedule
OFFLINE_SCHEDULE_NOTES=offline schedule
QUERY_SCHEDULE_NOTES=query schedule
QUERY_SCHEDULE_LIST_PAGING_NOTES=query schedule list paging
LOGIN_TAG=User login related operations
USER_NAME=user name
PROJECT_NAME=project name
CREATE_PROCESS_DEFINITION_NOTES=create process definition
PROCESS_DEFINITION_NAME=process definition name
PROCESS_DEFINITION_JSON=process definition detail info (json format)
PROCESS_DEFINITION_LOCATIONS=process definition node locations info (json format)
PROCESS_INSTANCE_LOCATIONS=process instance node locations info (json format)
PROCESS_DEFINITION_CONNECTS=process definition node connects info (json format)
PROCESS_INSTANCE_CONNECTS=process instance node connects info (json format)
PROCESS_DEFINITION_DESC=process definition desc
PROCESS_DEFINITION_TAG=process definition related opertation
SIGNOUT_NOTES=logout
USER_PASSWORD=user password
UPDATE_PROCESS_INSTANCE_NOTES=update process instance
QUERY_PROCESS_INSTANCE_LIST_NOTES=query process instance list
VERIFY_PROCCESS_DEFINITION_NAME_NOTES=verify proccess definition name
LOGIN_NOTES=user login
UPDATE_PROCCESS_DEFINITION_NOTES=update proccess definition
PROCESS_DEFINITION_ID=process definition id
RELEASE_PROCCESS_DEFINITION_NOTES=release proccess definition
QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=query proccess definition by id
QUERY_PROCCESS_DEFINITION_LIST_NOTES=query proccess definition list
QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=query proccess definition list paging
PAGE_NO=page no
PROCESS_INSTANCE_ID=process instance id
PROCESS_INSTANCE_JSON=process instance info(json format)
SCHEDULE_TIME=schedule time
SYNC_DEFINE=update the information of the process instance to the process definition\
RECOVERY_PROCESS_INSTANCE_FLAG=whether to recovery process instance
SEARCH_VAL=search val
USER_ID=user id
PAGE_SIZE=page size
LIMIT=limit
VIEW_TREE_NOTES=view tree
GET_NODE_LIST_BY_DEFINITION_ID_NOTES=get task node list by process definition id
PROCESS_DEFINITION_ID_LIST=PROCESS DEFINITION ID LIST
QUERY_PROCESS_INSTANCE_BY_ID_NOTES=query process instance by process instance id
DELETE_PROCESS_INSTANCE_BY_ID_NOTES=delete process instance by process instance id
TASK_ID=TASK INSTANCE ID
SKIP_LINE_NUM=skip line num
QUERY_TASK_INSTANCE_LOG_NOTES=QUERY TASK INSTANCE LOG
DOWNLOAD_TASK_INSTANCE_LOG_NOTES=download task instance log
USERS_TAG=users related operation
SCHEDULER_TAG=scheduler related operation
CREATE_SCHEDULE_NOTES=CREATE SCHEDULE
CREATE_USER_NOTES=create user
TENANT_ID=tenant id
QUEUE=queue
EMAIL=email
PHONE=phone
QUERY_USER_LIST_NOTES=query user list
UPDATE_USER_NOTES=update user
DELETE_USER_BY_ID_NOTES=delete user by id
GRANT_PROJECT_NOTES=GRANT PROJECT
PROJECT_IDS=project ids(string format, multiple projects separated by ",")
GRANT_RESOURCE_NOTES=grant resource file
RESOURCE_IDS=resource ids(string format, multiple resources separated by ",")
GET_USER_INFO_NOTES=get user info
LIST_USER_NOTES=list user
VERIFY_USER_NAME_NOTES=verify user name
UNAUTHORIZED_USER_NOTES=cancel authorization
ALERT_GROUP_ID=alert group id
AUTHORIZED_USER_NOTES=authorized user
GRANT_UDF_FUNC_NOTES=grant udf function
UDF_IDS=udf ids(string format, multiple udf functions separated by ",")
GRANT_DATASOURCE_NOTES=GRANT DATASOURCE
DATASOURCE_IDS=datasource ids(string format, multiple datasources separated by ",")
QUERY_SUBPROCESS_INSTANCE_BY_TASK_ID_NOTES=query subprocess instance by task instance id
QUERY_PARENT_PROCESS_INSTANCE_BY_SUB_PROCESS_INSTANCE_ID_NOTES=query parent process instance info by sub process instance id
QUERY_PROCESS_INSTANCE_GLOBAL_VARIABLES_AND_LOCAL_VARIABLES_NOTES=query process instance global variables and local variables
VIEW_GANTT_NOTES=view gantt
SUB_PROCESS_INSTANCE_ID=sub process instance id
TASK_NAME=task instance name
TASK_INSTANCE_TAG=task instance related operation
LOGGER_TAG=log related operation
PROCESS_INSTANCE_TAG=process instance related operation
EXECUTION_STATUS=runing status for workflow and task nodes
HOST=ip address of running task
START_DATE=start date
END_DATE=end date
QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_NOTES=query task list by process instance id

103
escheduler-api/src/main/resources/messages_en_US.properties

@ -1,5 +1,98 @@
welcome=hello, welcome ! QUERY_SCHEDULE_LIST_NOTES=query schedule list
test=test SCHEDULE=schedule
userName=user name WARNING_TYPE=warning type(sending strategy)
userPassword=user password WARNING_GROUP_ID=warning group id
loginNotes=login notes FAILURE_STRATEGY=failure strategy
RECEIVERS=receivers
RECEIVERS_CC=receivers cc
WORKER_GROUP_ID=worker server group id
PROCESS_INSTANCE_PRIORITY=process instance priority
UPDATE_SCHEDULE_NOTES=update schedule
SCHEDULE_ID=schedule id
ONLINE_SCHEDULE_NOTES=online schedule
OFFLINE_SCHEDULE_NOTES=offline schedule
QUERY_SCHEDULE_NOTES=query schedule
QUERY_SCHEDULE_LIST_PAGING_NOTES=query schedule list paging
LOGIN_TAG=User login related operations
USER_NAME=user name
PROJECT_NAME=project name
CREATE_PROCESS_DEFINITION_NOTES=create process definition
PROCESS_DEFINITION_NAME=process definition name
PROCESS_DEFINITION_JSON=process definition detail info (json format)
PROCESS_DEFINITION_LOCATIONS=process definition node locations info (json format)
PROCESS_INSTANCE_LOCATIONS=process instance node locations info (json format)
PROCESS_DEFINITION_CONNECTS=process definition node connects info (json format)
PROCESS_INSTANCE_CONNECTS=process instance node connects info (json format)
PROCESS_DEFINITION_DESC=process definition desc
PROCESS_DEFINITION_TAG=process definition related opertation
SIGNOUT_NOTES=logout
USER_PASSWORD=user password
UPDATE_PROCESS_INSTANCE_NOTES=update process instance
QUERY_PROCESS_INSTANCE_LIST_NOTES=query process instance list
VERIFY_PROCCESS_DEFINITION_NAME_NOTES=verify proccess definition name
LOGIN_NOTES=user login
UPDATE_PROCCESS_DEFINITION_NOTES=update proccess definition
PROCESS_DEFINITION_ID=process definition id
RELEASE_PROCCESS_DEFINITION_NOTES=release proccess definition
QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=query proccess definition by id
QUERY_PROCCESS_DEFINITION_LIST_NOTES=query proccess definition list
QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=query proccess definition list paging
PAGE_NO=page no
PROCESS_INSTANCE_ID=process instance id
PROCESS_INSTANCE_JSON=process instance info(json format)
SCHEDULE_TIME=schedule time
SYNC_DEFINE=update the information of the process instance to the process definition\
RECOVERY_PROCESS_INSTANCE_FLAG=whether to recovery process instance
SEARCH_VAL=search val
USER_ID=user id
PAGE_SIZE=page size
LIMIT=limit
VIEW_TREE_NOTES=view tree
GET_NODE_LIST_BY_DEFINITION_ID_NOTES=get task node list by process definition id
PROCESS_DEFINITION_ID_LIST=PROCESS DEFINITION ID LIST
QUERY_PROCESS_INSTANCE_BY_ID_NOTES=query process instance by process instance id
DELETE_PROCESS_INSTANCE_BY_ID_NOTES=delete process instance by process instance id
TASK_ID=TASK INSTANCE ID
SKIP_LINE_NUM=skip line num
QUERY_TASK_INSTANCE_LOG_NOTES=QUERY TASK INSTANCE LOG
DOWNLOAD_TASK_INSTANCE_LOG_NOTES=download task instance log
USERS_TAG=users related operation
SCHEDULER_TAG=scheduler related operation
CREATE_SCHEDULE_NOTES=CREATE SCHEDULE
CREATE_USER_NOTES=create user
TENANT_ID=tenant id
QUEUE=queue
EMAIL=email
PHONE=phone
QUERY_USER_LIST_NOTES=query user list
UPDATE_USER_NOTES=update user
DELETE_USER_BY_ID_NOTES=delete user by id
GRANT_PROJECT_NOTES=GRANT PROJECT
PROJECT_IDS=project ids(string format, multiple projects separated by ",")
GRANT_RESOURCE_NOTES=grant resource file
RESOURCE_IDS=resource ids(string format, multiple resources separated by ",")
GET_USER_INFO_NOTES=get user info
LIST_USER_NOTES=list user
VERIFY_USER_NAME_NOTES=verify user name
UNAUTHORIZED_USER_NOTES=cancel authorization
ALERT_GROUP_ID=alert group id
AUTHORIZED_USER_NOTES=authorized user
GRANT_UDF_FUNC_NOTES=grant udf function
UDF_IDS=udf ids(string format, multiple udf functions separated by ",")
GRANT_DATASOURCE_NOTES=GRANT DATASOURCE
DATASOURCE_IDS=datasource ids(string format, multiple datasources separated by ",")
QUERY_SUBPROCESS_INSTANCE_BY_TASK_ID_NOTES=query subprocess instance by task instance id
QUERY_PARENT_PROCESS_INSTANCE_BY_SUB_PROCESS_INSTANCE_ID_NOTES=query parent process instance info by sub process instance id
QUERY_PROCESS_INSTANCE_GLOBAL_VARIABLES_AND_LOCAL_VARIABLES_NOTES=query process instance global variables and local variables
VIEW_GANTT_NOTES=view gantt
SUB_PROCESS_INSTANCE_ID=sub process instance id
TASK_NAME=task instance name
TASK_INSTANCE_TAG=task instance related operation
LOGGER_TAG=log related operation
PROCESS_INSTANCE_TAG=process instance related operation
EXECUTION_STATUS=runing status for workflow and task nodes
HOST=ip address of running task
START_DATE=start date
END_DATE=end date
QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_NOTES=query task list by process instance id

102
escheduler-api/src/main/resources/messages_zh_CN.properties

@ -1,5 +1,97 @@
welcome=您好,欢迎你! QUERY_SCHEDULE_LIST_NOTES=查询定时列表
test=测试 SCHEDULE=定时
userName=用户名 WARNING_TYPE=发送策略
userPassword=用户密码 WARNING_GROUP_ID=发送组ID
loginNotes=登录xxx FAILURE_STRATEGY=失败策略
RECEIVERS=收件人
RECEIVERS_CC=收件人(抄送)
WORKER_GROUP_ID=Worker Server分组ID
PROCESS_INSTANCE_PRIORITY=流程实例优先级
UPDATE_SCHEDULE_NOTES=更新定时
SCHEDULE_ID=定时ID
ONLINE_SCHEDULE_NOTES=定时上线
OFFLINE_SCHEDULE_NOTES=定时下线
QUERY_SCHEDULE_NOTES=查询定时
QUERY_SCHEDULE_LIST_PAGING_NOTES=分页查询定时
LOGIN_TAG=用户登录相关操作
USER_NAME=用户名
PROJECT_NAME=项目名称
CREATE_PROCESS_DEFINITION_NOTES=创建流程定义
PROCESS_DEFINITION_NAME=流程定义名称
PROCESS_DEFINITION_JSON=流程定义详细信息(json格式)
PROCESS_DEFINITION_LOCATIONS=流程定义节点坐标位置信息(json格式)
PROCESS_INSTANCE_LOCATIONS=流程实例节点坐标位置信息(json格式)
PROCESS_DEFINITION_CONNECTS=流程定义节点图标连接信息(json格式)
PROCESS_INSTANCE_CONNECTS=流程实例节点图标连接信息(json格式)
PROCESS_DEFINITION_DESC=流程定义描述信息
PROCESS_DEFINITION_TAG=流程定义相关操作
SIGNOUT_NOTES=退出登录
USER_PASSWORD=用户密码
UPDATE_PROCESS_INSTANCE_NOTES=更新流程实例
QUERY_PROCESS_INSTANCE_LIST_NOTES=查询流程实例列表
VERIFY_PROCCESS_DEFINITION_NAME_NOTES=验证流程定义名字
LOGIN_NOTES=用户登录
UPDATE_PROCCESS_DEFINITION_NOTES=更新流程定义
PROCESS_DEFINITION_ID=流程定义ID
RELEASE_PROCCESS_DEFINITION_NOTES=发布流程定义
QUERY_PROCCESS_DEFINITION_BY_ID_NOTES=查询流程定义通过流程定义ID
QUERY_PROCCESS_DEFINITION_LIST_NOTES=查询流程定义列表
QUERY_PROCCESS_DEFINITION_LIST_PAGING_NOTES=分页查询流程定义列表
PAGE_NO=页码号
PROCESS_INSTANCE_ID=流程实例ID
PROCESS_INSTANCE_JSON=流程实例信息(json格式)
SCHEDULE_TIME=定时时间
SYNC_DEFINE=更新流程实例的信息是否同步到流程定义
RECOVERY_PROCESS_INSTANCE_FLAG=是否恢复流程实例
SEARCH_VAL=搜索值
USER_ID=用户ID
PAGE_SIZE=页大小
LIMIT=显示多少条
VIEW_TREE_NOTES=树状图
GET_NODE_LIST_BY_DEFINITION_ID_NOTES=获得任务节点列表通过流程定义ID
PROCESS_DEFINITION_ID_LIST=流程定义id列表
QUERY_PROCESS_INSTANCE_BY_ID_NOTES=查询流程实例通过流程实例ID
DELETE_PROCESS_INSTANCE_BY_ID_NOTES=删除流程实例通过流程实例ID
TASK_ID=任务实例ID
SKIP_LINE_NUM=忽略行数
QUERY_TASK_INSTANCE_LOG_NOTES=查询任务实例日志
DOWNLOAD_TASK_INSTANCE_LOG_NOTES=下载任务实例日志
USERS_TAG=用户相关操作
SCHEDULER_TAG=定时相关操作
CREATE_SCHEDULE_NOTES=创建定时
CREATE_USER_NOTES=创建用户
TENANT_ID=租户ID
QUEUE=使用的队列
EMAIL=邮箱
PHONE=手机号
QUERY_USER_LIST_NOTES=查询用户列表
UPDATE_USER_NOTES=更新用户
DELETE_USER_BY_ID_NOTES=删除用户通过ID
GRANT_PROJECT_NOTES=授权项目
PROJECT_IDS=项目IDS(字符串格式,多个项目以","分割)
GRANT_RESOURCE_NOTES=授权资源文件
RESOURCE_IDS=资源ID列表(字符串格式,多个资源ID以","分割)
GET_USER_INFO_NOTES=获取用户信息
LIST_USER_NOTES=用户列表
VERIFY_USER_NAME_NOTES=验证用户名
UNAUTHORIZED_USER_NOTES=取消授权
ALERT_GROUP_ID=报警组ID
AUTHORIZED_USER_NOTES=授权用户
GRANT_UDF_FUNC_NOTES=授权udf函数
UDF_IDS=udf函数id列表(字符串格式,多个udf函数ID以","分割)
GRANT_DATASOURCE_NOTES=授权数据源
DATASOURCE_IDS=数据源ID列表(字符串格式,多个数据源ID以","分割)
QUERY_SUBPROCESS_INSTANCE_BY_TASK_ID_NOTES=查询子流程实例通过任务实例ID
QUERY_PARENT_PROCESS_INSTANCE_BY_SUB_PROCESS_INSTANCE_ID_NOTES=查询父流程实例信息通过子流程实例ID
QUERY_PROCESS_INSTANCE_GLOBAL_VARIABLES_AND_LOCAL_VARIABLES_NOTES=查询流程实例全局变量和局部变量
VIEW_GANTT_NOTES=浏览Gantt图
SUB_PROCESS_INSTANCE_ID=子流程是咧ID
TASK_NAME=任务实例名
TASK_INSTANCE_TAG=任务实例相关操作
LOGGER_TAG=日志相关操作
PROCESS_INSTANCE_TAG=流程实例相关操作
EXECUTION_STATUS=工作流和任务节点的运行状态
HOST=运行任务的主机IP地址
START_DATE=开始时间
END_DATE=结束时间
QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_NOTES=通过流程实例ID查询任务列表

2
escheduler-common/src/main/java/cn/escheduler/common/enums/ExecutionStatus.java

@ -18,7 +18,7 @@ package cn.escheduler.common.enums;
/** /**
* runing status for work flow and task nodes * runing status for workflow and task nodes
* *
*/ */
public enum ExecutionStatus { public enum ExecutionStatus {

8
escheduler-dao/pom.xml

@ -131,8 +131,14 @@
<artifactId>spring-test</artifactId> <artifactId>spring-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.20</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

7
escheduler-dao/src/main/java/cn/escheduler/dao/model/User.java

@ -17,12 +17,15 @@
package cn.escheduler.dao.model; package cn.escheduler.dao.model;
import cn.escheduler.common.enums.UserType; import cn.escheduler.common.enums.UserType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date; import java.util.Date;
/** /**
* user * user
*/ */
@ApiModel(description = "UserModelDesc")
public class User { public class User {
/** /**
@ -33,21 +36,25 @@ public class User {
/** /**
* user name * user name
*/ */
@ApiModelProperty(name = "userName", notes = "USER_NAME",dataType = "String",required = true)
private String userName; private String userName;
/** /**
* user password * user password
*/ */
@ApiModelProperty(name = "userPassword", notes = "USER_PASSWORD",dataType = "String",required = true)
private String userPassword; private String userPassword;
/** /**
* mail * mail
*/ */
@ApiModelProperty(name = "email", notes = "email",dataType = "String",required = true)
private String email; private String email;
/** /**
* phone * phone
*/ */
@ApiModelProperty(name = "phone", notes = "phone",dataType = "String",required = true)
private String phone; private String phone;
/** /**

5
escheduler-ui/dist/combo/1.0.0/3rd.css vendored

File diff suppressed because one or more lines are too long

10783
escheduler-ui/dist/combo/1.0.0/3rd.js vendored

File diff suppressed because one or more lines are too long

8
escheduler-ui/dist/combo/1.0.0/base.css vendored

File diff suppressed because one or more lines are too long

14
escheduler-ui/dist/combo/1.0.0/es5.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/combo/1.0.0/local.js vendored

@ -1 +0,0 @@
Not found

1
escheduler-ui/dist/css/common.8ba9af7.css vendored

File diff suppressed because one or more lines are too long

BIN
escheduler-ui/dist/font/fontawesome-webfont.674f50d.eot vendored

Binary file not shown.

BIN
escheduler-ui/dist/font/fontawesome-webfont.af7ae50.woff2 vendored

Binary file not shown.

BIN
escheduler-ui/dist/font/fontawesome-webfont.b06871f.ttf vendored

Binary file not shown.

BIN
escheduler-ui/dist/font/fontawesome-webfont.fee66e7.woff vendored

Binary file not shown.

BIN
escheduler-ui/dist/font/iconfont.4f692dd.ttf vendored

Binary file not shown.

BIN
escheduler-ui/dist/font/iconfont.6f38b93.eot vendored

Binary file not shown.

BIN
escheduler-ui/dist/font/iconfont.be17177.woff vendored

Binary file not shown.

BIN
escheduler-ui/dist/images/close.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 B

BIN
escheduler-ui/dist/images/dag_bg.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

BIN
escheduler-ui/dist/images/down_error.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

BIN
escheduler-ui/dist/images/errorTip.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

BIN
escheduler-ui/dist/images/favicon.ico vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

2671
escheduler-ui/dist/images/fontawesome-webfont.svg vendored

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 434 KiB

266
escheduler-ui/dist/images/iconfont.svg vendored

@ -1,266 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="bianjixiugai" unicode="&#58881;" d="M765.27521057 436.59767761c-13.25783386 0-23.02761841-10.75946045-23.02761841-24.0173767v-293.80471875c0-31.60263977-24.42062989-58.45415955-55.95578613-58.45415955h-428.473125c-31.53515625 0-68.20112 26.85151977-68.20111999 58.45415955V548.71265625c0 31.6245575 36.66687012 65.32058716 68.20111999 65.32058716h244.91615625c13.25783386 0 23.94981079 9.81362 23.94981079 23.07153625 0 13.28065796-10.69197693 23.07153625-23.94981079 23.07153626H257.818625c-62.97918091 0-114.25388489-48.21355591-114.25388489-111.4627533v-429.93703124c0-63.22727966 51.27470398-104.59714966 114.25388489-104.59714966h428.473125c63.0247467 0 102.009375 41.36987 102.009375 104.59714966V412.58034375C788.30109864 425.83821716 778.51022034 436.59767761 765.27521057 436.59767761zM859.67559204 697.17973023l-35.09068909 35.18017272c-26.69537659 26.7856842-73.60285034 26.7856842-100.2763092 0l-66.28752136-78.0595642L304.74888 315.47909546000005v-8.262l-0.27001648-1.41748353-44.43274841-150.91984862 32.61513977-29.17100831 142.54653626 50.35160523 1.80054931-0.38224182h6.99975l337.80964966 354.35308227 77.85703125 63.69974671C887.31689148 621.43800659 887.31689148 669.42628784 859.67559204 697.17973023zM322.80084534 188.0356842l20.7528717 66.2183075 41.46100158-41.59432068L322.80084534 188.0356842zM427.19554443 237.41870727000003l-61.04366455 61.19972534 315.81727295 314.78367921 59.08441772-59.26503296L427.19554443 237.41870727000003zM826.25048523 630.10333557l-47.0651825-47.17831421-68.5158783 68.74115296 47.04326478 47.1783142c4.4558075 4.43388977 10.37647705 6.88752136 16.72314147 6.88752137 6.3475708 0 12.28925171-2.45363159 16.72396546-6.88752137l35.04602967-35.1809967C835.45658875 654.39064636 835.45658875 639.35500488 826.25048523 630.10333557z" horiz-adv-x="1024" />
<glyph glyph-name="shibai" unicode="&#58918;" d="M512.61293427 778.23780703c-217.56339229 0-393.93291357-176.36952128-393.93291357-393.93291357 0-217.56429141 176.36952128-393.93291357 393.93291357-393.93291357 217.56429141 0 393.93291357 176.36862217 393.93291358 393.93291357C906.54584786 601.86828487 730.17722568 778.23780703 512.61293427 778.23780703zM669.04837138 266.92277842c10.78009102-10.78728662 10.78009102-28.2750293 0-39.04702647-10.79538047-10.78728662-28.2750293-10.78728662-39.07041064 0l-117.17255741 117.17255742-117.18155128-117.17255742c-10.78728662-10.78728662-28.26693545-10.78728662-39.06321504 0-10.78009102 10.77199629-10.78009102 28.25973984 0 39.04702647l117.188746 117.20493545L356.56063789 501.30116953c-10.78009102 10.77199629-10.78009102 28.2750293 0 39.06231592 10.79538047 10.77199629 28.2750293 10.77199629 39.06321503 0l117.18155128-117.188746 117.17255742 117.188746c10.79538047 10.77199629 28.2750293 10.77199629 39.07041065 0 10.78009102-10.78728662 10.78009102-28.29121875 0-39.06231592L551.85962539 384.12771299 669.04837138 266.92277842z" horiz-adv-x="1024" />
<glyph glyph-name="dengdai" unicode="&#58922;" d="M511.71354424 778.23780703c-217.56429141 0-393.93291357-176.35333271-393.93291357-393.93291357 0-217.54810195 176.36862217-393.93291357 393.93291357-393.93291357s393.93291357 176.38481075 393.93291357 393.93291357C905.64645781 601.88447432 729.27783565 778.23780703 511.71354424 778.23780703zM653.12466787 181.98616522999998c-12.80641729-12.92063994-33.83685879-12.92063994-46.63698047 0L490.04363604 299.06158857c-8.6953043 8.75106651-7.90923779 20.93330742-7.9092378 39.46344346 0 18.56251494-4.20105146 233.09676035-4.20105146 233.09676035 0 18.4006248 14.72391738 33.30801739 32.88350478 33.30801739 18.1604874 0 32.88350479-14.90739258 32.88350479-33.30801738l0-233.09676036c0-0.96144785 109.68063662-109.7040208 109.68063662-109.7040208C666.18021552 215.90217041000005 665.92388955 194.93648497000004 653.12466787 181.98616522999998z" horiz-adv-x="1024" />
<glyph glyph-name="shuaxin1" unicode="&#59074;" d="M801.28338945 349.07168168c0-159.52050352-129.76288594-289.28338945-289.28338945-289.28338946s-289.28338945 129.76288594-289.28338945 289.28338946c0 154.15268994 121.28848945 280.14846328 273.40012441 288.46696728l0-87.5757252c0-2.85586963 1.53802354-5.5253127 4.017825-6.96851542 1.25516865-0.72160137 2.63730059-1.06713457 4.017825-1.06713458s2.76265635 0.3455332 4.017825 1.06713458l208.80153632 120.5347456c2.47980146 1.44320273 4.017825 4.1126458 4.017825 6.96851544s-1.53802354 5.5253127-4.017825 6.96851542l-208.80153632 120.53474561c-2.5103373 1.44320273-5.5253127 1.44320273-8.03565 0-2.47980146-1.44320273-4.017825-4.1126458-4.017825-6.96851543l0-89.20856865C308.56627724 693.442664 158.4314123 538.6631935 158.4314123 349.07168168c0-194.95932627 158.60926143-353.5685877 353.5685877-353.56858769s353.5685877 158.60926143 353.5685877 353.56858769L801.28338945 349.07168168z" horiz-adv-x="1024" />
<glyph glyph-name="qidong" unicode="&#58891;" d="M510.5072525-36.38889655000003c-56.52199781 0-111.37280906 11.07856875-163.02994594 32.92775531-49.87466531 21.0951375-94.65998063 51.28778719-133.10975156 89.73755811s-68.64242062 83.23508626-89.73755813 133.10975157c-21.84918657 51.65809594-32.92775531 106.50794719-32.92775531 163.02994594 0 56.52199781 11.07856875 111.37280906 32.92775531 163.02994593 21.0951375 49.87562438 51.28778719 94.65998063 89.73755813 133.10975157 38.44977094 38.45072999 83.23508626 68.64242062 133.10975156 89.73851718 51.65809594 21.84918657 106.50794719 32.92775531 163.02994594 32.92775532s111.37280906-11.07856875 163.02994594-32.92775532c49.87466531-21.09609657 94.65998063-51.28778719 133.10975157-89.73851718 38.44977094-38.44977094 68.64242062-83.23508626 89.73755811-133.10975157 21.84918657-51.65713687 32.92775531-106.50794719 32.92775533-163.02994594 0-56.52199781-11.07856875-111.37280906-32.92775533-163.02994593-21.0951375-49.87466531-51.28778719-94.65998063-89.73755811-133.10975157s-83.23508626-68.64242062-133.10975157-89.73755813C621.88006156-25.31032780999999 567.02925031-36.38889655000003 510.5072525-36.38889655000003zM510.5072525 741.74241094c-95.97908624 0-186.21358688-37.37625844-254.08181249-105.24448407-67.86822563-67.86822563-105.24448406-158.10272625-105.24448407-254.0818125 0-95.97908624 37.37625844-186.21454687 105.24448407-254.0818125 67.86822563-67.86726563 158.10272625-105.24448406 254.08181249-105.24448406 95.97908624 0 186.21454687 37.37625844 254.0818125 105.24448406 67.86726563 67.86822563 105.24448406 158.10272625 105.24448405 254.0818125 0 95.97908624-37.37625844 186.21358688-105.24448405 254.0818125C696.72179844 704.3661515599999 606.48729781 741.74241094 510.5072525 741.74241094zM673.64464531 381.66206531L435.54751438 199.60917657000005 435.54751438 565.22401031Z" horiz-adv-x="1024" />
<glyph glyph-name="gantt" unicode="&#59028;" d="M669.99264645 569.32132087L669.99264645 727.32366384c0 14.50182376-11.82641941 26.33245944-26.33245944 26.33245945L169.67592365 753.65612329c-14.4571355 0-26.33245944-11.83147861-26.33245944-26.33245945l0-158.00234298c0-14.50604004 11.87532312-26.33330237 26.33245943-26.33330237l473.98342044 0C658.16538413 542.9880185 669.99264645 554.81612458 669.99264645 569.32132087L669.99264645 569.32132087zM196.00501056 569.32132087L196.00501056 727.32366384l210.6681048 0 0-158.00234298L196.00501056 569.32132087 196.00501056 569.32132087zM775.32585593 305.98408254000003L775.32585593 463.98558262c0 14.50604004-11.82726232 26.33245944-26.33245945 26.33245943L169.67592365 490.31804123c-14.4571355 0-26.33245944-11.82726232-26.33245944-26.33245944l0-158.002343c0-14.50098083 11.87532312-26.33245944 26.33245943-26.33245944l579.31662992 0C763.49774985 279.65078017999997 775.32585593 291.48225795999997 775.32585593 305.98408254000003L775.32585593 305.98408254000003zM196.00501056 305.98408254000003L196.00501056 463.98558262l263.32965033 0 0-158.00234299L196.00501056 305.98323879 196.00501056 305.98408254000003zM880.65653497 42.64262796000003L880.65653497 200.64244135c0 14.51194217-11.83063486 26.3417341-26.32908609 26.3417341l-684.65236816 0c-14.4571355 0-26.33245944-11.82979192-26.33245945-26.34173411l0-157.99981338c0-14.50182376 11.87532312-26.33161569 26.33245945-26.33161569l684.64730895-1e-8C868.82505719 16.311855199999968 880.65653497 28.140803369999958 880.65653497 42.64262796000003L880.65653497 42.64262796000003zM196.00501056 42.64262796000003L196.00501056 200.64244135l315.99372464-1e-8 0-157.99981338L196.00501056 42.64262796000003 196.00501056 42.64262796000003zM196.00501056 42.64262796000003" horiz-adv-x="1024" />
<glyph glyph-name="gongzuoliuchengtu" unicode="&#58880;" d="M925.57343749 826.46624999L925.5734375 697.41281251c0-20.3634375-16.4765625-36.87187501-36.7959375-36.87187501L778.3821875 660.5409375c-20.3221875 0-36.79593748 16.5084375-36.79593751 36.87187501l0 36.87187499L575.9965625 734.2846875c-20.3240625 0-36.7978125-16.5065625-36.79781249-36.871875L539.19874999 402.43500001l202.38750002 0-2e-8 36.87375001c0 20.3634375 16.47374998 36.871875 36.79593751 36.87187497l110.39625 3e-8c20.31937499 0 36.79593748-16.5084375 36.79593751-36.87187503L925.57437501 310.25624999c0-20.3653125-16.4765625-36.87187501-36.79593751-36.87187498L778.3821875 273.384375c-20.3221875 0-36.79593748 16.5065625-36.79593751 36.87187501l0 36.87187499-202.38749998 0L539.19874999 70.58718749000002c0-20.3634375 16.47374998-36.871875 36.79781251-36.87187499l165.58968749 0 2e-8 36.87187499c0 20.3634375 16.47374998 36.871875 36.79593749 36.87187501l110.39625 0c20.31937499 0 36.79593748-16.5084375 36.79593748-36.87187501L925.57437501-58.46624999000005c0-20.3634375-16.4765625-36.87187501-36.79593751-36.87187501L778.3821875-95.33812499999999c-20.3221875 0-36.79593748 16.5084375-36.79593751 36.87187501l0 36.87187499L557.59624999-21.594375000000014c-40.6453125 0-73.595625 33.0178125-73.59562498 73.7465625L484.00062501 347.12812499999995 281.6159375 347.12812499999995l0-36.87187501c0-20.3653125-16.4765625-36.87187501-36.79968751-36.87187499L134.42374999 273.384375c-20.3240625 0-36.7978125 16.5065625-36.79781249 36.87187501l0 129.05343749c0 20.3634375 16.47374998 36.871875 36.79781251 36.871875l110.39156249 0c20.3240625 0 36.7996875-16.5084375 36.7996875-36.87187501l0-36.87375 202.38562501 1e-8 0 313.4146875c0 40.72593751 32.95031249 73.74375001 73.595625 73.74375l183.98906249 0 0 36.87187501c0 20.3634375 16.47374998 36.871875 36.79593749 36.87187499l110.39625001 0C909.0978125 863.338125 925.57343749 846.82875001 925.57343749 826.46624999z" horiz-adv-x="1024" />
<glyph glyph-name="chenggongyijiejue" unicode="&#59092;" d="M513.37022099 781.06728838c-218.23163877 0-395.1452918-176.92354599-395.14529178-395.17856895 0-218.22894053 176.91365213-395.1515874 395.14529178-395.1515874 218.21275195 0 395.18576367 176.92354599 395.18576368 395.1515874C908.55598467 604.1437423699999 731.58297295 781.06728838 513.37022099 781.06728838zM735.53939053 476.06967657L489.0776917 225.56701728999997c-0.03867364-0.03957276-0.07464902-0.0809455-0.11242354-0.12051827s-0.07914638-0.07554903-0.11782002-0.11422266l-0.66015264-0.67094472c-5.49887168-5.58971017-12.78663047-8.38951172-20.18591367-8.43538096-0.05396309-0.00089913-0.10702705-0.00089913-0.16099101-0.00179912-0.14210332 0-0.28330752-0.00359737-0.42631084-0.00179912-7.38129551-0.06025957-14.69153935 2.61902461-20.26506007 8.10170683L310.30499902 358.95827870999995c-11.4249542 11.24237724-11.22888691 29.96858145 0.43800293 41.82794033 11.67318545 11.86025888 30.39669141 12.363917 41.81534912 1.12153975l114.58231348-112.73226768 225.44564766 229.15023574c11.24777373 11.4249542 29.97127968 11.22528955 41.82884033-0.44160029C746.27720967 506.21813584 746.78176778 487.49732901 735.53939053 476.06967657z" horiz-adv-x="1024" />
<glyph glyph-name="home" unicode="&#58909;" d="M874.44031573 436.3535045L579.06438066 748.21256426c-18.35655469 19.36297177-42.88742227 30.01714805-69.18739102 30.01714805s-50.82993721-10.65507627-69.18739101-30.01714806L145.31456269 436.3535045c-30.47673691-32.18467852-26.55269737-60.01451017-21.51161542-71.62743692 3.59216455-8.24920665 15.71144766-30.91563895 50.64376377-30.91563896l43.28765068 0 0-239.9024461c0-54.47516572 38.56585254-105.75839619 93.35940205-105.75839619l49.6868124 0 76.06592755 0 0 56.37827549L436.84650372 242.04834287000006c0 27.2182456-4.07153935 42.38196503 23.34637089 42.38196504l49.68591328 0 49.68501328 0c27.41791026 0 23.3463709-15.16371943 23.3463709-42.38196504l0-197.52048105 0-56.37827549 76.05423545 0 49.69940362 0c54.79265039 0 93.35940205 51.28322959 93.35940204 105.75839619L802.02321406 333.81042862000004l43.28765068 0c34.93141612 0 47.05159922 22.66643232 50.64376378 30.91563896C900.99391221 376.33899434 904.91795177 404.1688251 874.44031573 436.3535045zM845.30906651 383.19054844000004l-37.27612706 0L783.19717842 383.19054844000004l-29.86425176 0 0-289.2825668c0-27.2182456-17.29437451-56.37737637-44.67091289-56.37737637l-77.0651499 0L631.59686299 242.04834287000006c0 54.46077539-17.21252989 91.76208574-72.03486007 91.76208575l-49.68501327 0-49.68591328 0c-54.83402227 0-72.03396094-37.30220947-72.03396094-91.76208575l0-204.51773672-77.06425078 0c-27.39092873 0-44.67091289 29.15912988-44.67091288 56.37737637L266.42195175 383.19054844000004 236.55680089 383.19054844000004l-24.83486194 0-37.27612704 0c-0.86431377 0-1.64858203 3.39789638-2.3537039 3.44646299 1.67556357 2.99137148 4.57519834 10.56153955 9.40582266 15.65028896l295.40111835 311.63691006c8.8194208 9.33387187 21.28586836 15.04589854 33.3628796 14.92717938 12.06532002 0.11871914 23.77358174-5.59330752 32.59300166-14.92717938l295.40111835-311.63691006c4.81623487-5.08964941 7.73025908-12.65891748 9.40582266-15.65028896C846.95674942 386.58844482 846.17338027 383.19054844000004 845.30906651 383.19054844000004z" horiz-adv-x="1024" />
<glyph glyph-name="fuzhi" unicode="&#58910;" d="M731.68184 135.942527 731.68184 628.676741c0 30.233582-24.512277 54.745858-54.747905 54.745858L184.216093 683.422599c-30.233582 0-54.746882-24.512277-54.746882-54.745858l0-492.734214c0-30.207999 24.5133-54.746882 54.746882-54.746882l492.717841 0C707.16854 81.195645 731.68184 105.734528 731.68184 135.942527zM622.1891 135.942527 238.962975 135.942527c-30.233582 0-54.746882 24.538883-54.746882 54.745858L184.216093 573.92986c0 30.233582 24.5133 54.746882 54.746882 54.746882l383.226125 0c30.233582 0 54.744835-24.512277 54.744835-54.746882l0-383.242498C676.933935 160.48141 652.421658 135.942527 622.1891 135.942527zM841.17458 519.182978l-54.745858 0 0-54.746882c30.232558 0 54.745858-24.5133 54.745858-54.759161l0-383.228171c0-30.206976-24.5133-54.745858-54.745858-54.745858L403.201573-28.297095c-30.233582 0-54.746882 24.538883-54.746882 54.745858l-54.746882 0 0-54.745858c0-30.207999 24.5133-54.747905 54.746882-54.747905l492.719888 0c30.234605 0 54.747905 24.539906 54.747905 54.747905L895.922485 464.436096C895.922485 494.670701 871.408161 519.182978 841.17458 519.182978z" horiz-adv-x="1024" />
<glyph glyph-name="shanchu1" unicode="&#58897;" d="M680.18372158-8.618004789999986L323.26341348-8.618004789999986c-85.74426562 0-115.16241973 15.91650879-115.16241973 114.51216094L208.10099375 491.08229795c0 13.14009141 10.65417627 23.7951668 23.7951668 23.79516679 13.14009141 0 23.7951668-10.65417627 23.79516679-23.79516679l0-385.18814267c0-62.5301042-1.58022862-66.92362559 67.57298526-66.92362559l356.9203081 0c66.84088184 0 75.19441816 1.88332295 75.19441816 66.92362559L755.37903887 491.08229795c0 13.14009141 10.65417627 23.7951668 23.7951668 23.79516679 13.14009141 0 23.79426768-10.65417627 23.79426767-23.79516679l0-385.18814267C802.96757422 14.943320210000024 772.62034942-8.618004789999986 680.18372158-8.618004789999986zM672.0973042 621.95346797c-13.14009141 0-23.79426768 10.65417627-23.79426767 23.7951668l-1e-8 7.43615859c0 68.75838193-12.8504874 75.84557695-75.19441816 75.84557695L430.33941582 729.0303694300001c-65.00522636 0-67.57298526-9.21335362-67.57298525-75.84557695l0-7.4361586c0-13.14009141-10.65417627-23.7951668-23.7951668-23.79516679-13.14099052 0-23.7951668 10.65417627-23.79516679 23.79516679l0 7.4361586c0 92.28553067 24.25925215 123.43501143 115.16241972 123.43501143l142.76830341 0c98.94371572 0 122.78475175-39.8052123 122.78475176-123.43501143l0-7.4361586C695.89247099 632.60764424 685.23829473 621.95346797 672.0973042 621.95346797zM362.76643057 110.35603096c-6.57634131 0-11.8980334 5.34327714-11.8980334 11.89803339l0 23.79336768c0 6.57634131 5.32169209 11.8980334 11.8980334 11.8980334 6.57634131 0 11.89713339-5.32079209 11.89713339-11.8980334l0-23.79336768C374.66356396 115.69930810000005 369.34187188 110.35603096 362.76643057 110.35603096zM362.76643057 193.63776561999998c-6.57634131 0-11.8980334 5.34327714-11.8980334 11.89803341L350.86839717 407.80056328c0 6.5700457 5.32169209 11.89713339 11.8980334 11.8971334 6.57634131 0 11.89713339-5.32708857 11.89713339-11.8971334l0-202.26566425C374.66356396 198.98104278000005 369.34187188 193.63776561999998 362.76643057 193.63776561999998zM505.53383398 110.35603096c-6.57634131 0-11.89713339 5.34327714-11.89713339 11.89803339l0 285.54739893c0 6.5700457 5.32079209 11.89713339 11.89713339 11.89713339s11.8980334-5.32708857 11.89803341-11.89713339l0-285.54739893C517.43186739 115.69930810000005 512.11017529 110.35603096 505.53383398 110.35603096zM648.30303653 110.35603096c-6.57634131 0-11.8980334 5.34327714-11.89803341 11.89803339l0 285.54739893c0 6.5700457 5.32169209 11.89713339 11.89803341 11.89713339s11.89713339-5.32708857 11.89713339-11.89713339l0-285.54739893C660.1992708 115.69930810000005 654.87847872 110.35603096 648.30303653 110.35603096zM898.14734229 565.44118301c0-54.20624854-43.94060859-98.15315185-98.15315186-98.15315186l-577.02177949 0c-54.21164414 0-98.15315185 43.9469042-98.15315186 98.15315186l0 5.9485667c0 54.20624854 43.94060859 98.15315185 98.15315186 98.15315185l577.02177949 0c54.21164414 0 98.15315185-43.9469042 98.15315186-98.15315185L898.14734229 565.44118301zM850.55790781 571.38885059c0 27.92516661-22.63225518 50.56371739-50.56371738 50.56371738l-577.02177949 0c-27.93056308 0-50.56371739-22.63855078-50.56371739-50.56371738l0-5.94856671c0-27.92516661 22.6331543-50.56371739 50.56371739-50.56371737l577.02177949 0c27.93146221 0 50.56371739 22.63855078 50.56371738 50.56371737L850.55790781 571.38885059z" horiz-adv-x="1024" />
<glyph glyph-name="xitongcaozuorizhi" unicode="&#59025;" d="M896.69314575 271.37297058l-101.50337219 101.73511505c-6.95228576 7.02953339-16.45374298 10.96916198-26.41868591 10.96916199L603.15219117 384.07724763c-23.01979065 0-41.7137146-18.61667633-41.71371461-41.55921937L561.43847656 31.596359249999978c0-22.94254303 18.69392395-41.55921936 41.71371461-41.55921936l262.64190673 0c23.01979065 0 41.7137146 18.61667633 41.7137146 41.55921936L907.5078125 245.26327515000003C907.5078125 254.99647521999998 903.64543152 264.42068482 896.69314575 271.37297058zM858.06933594 39.47561645999997l-247.19238281 0 0 295.08590698 152.87303925 0L858.06933594 240.08768463 858.06933594 39.47561645999997zM650.81397248 235.68457031000003l70.99056244 0c13.67282868 0 24.71923828 11.04640961 24.71923828 24.71923828s-11.04640961 24.71923828-24.71923828 24.71923829l-70.99056245 0c-13.67282868 0-24.71923828-11.04640961-24.71923827-24.71923829S637.1411438 235.68457031000003 650.81397248 235.68457031000003zM626.0947342 186.24609375c0-13.67282868 11.04640961-24.71923828 24.71923827-24.71923828l159.82532501 0c13.67282868 0 24.71923828 11.04640961 24.71923828 24.71923828s-11.04640961 24.71923828-24.71923828 24.71923828l-159.82532501 0C637.1411438 210.96533203 626.0947342 199.91892241999994 626.0947342 186.24609375zM810.63929748 136.80761718999997l-159.82532501 0c-13.67282868 0-24.71923828-11.04640961-24.71923827-24.71923828s11.04640961-24.71923828 24.71923828-24.71923829l159.825325 0c13.67282868 0 24.71923828 11.04640961 24.71923828 24.71923829S824.23487854 136.80761718999997 810.63929748 136.80761718999997zM490.37066651 235.68457031000003l-52.52838135 0 0 49.43847657 50.13370514 0c13.67282868 0 24.71923828 11.04640961 24.71923828 24.71923828s-11.04640961 24.71923828-24.71923828 24.71923828L194.35778808 334.56152344c-15.68126679 0-28.42712403 12.74585724-28.42712402 28.42712403l0 289.2923355c0 15.68126679 12.74585724 28.42712403 28.42712403 28.42712402l437.6077652 0c15.68126679 0 28.42712403-12.74585724 28.42712402-28.42712402L660.39267732 456.22652436c0-13.67282868 11.04640961-24.71923828 24.71923827-24.71923829s24.71923828 11.04640961 24.71923828 24.71923828l0 196.05445862c0 42.94967651-34.91592407 77.86560059-77.86560058 77.86560059L194.35778808 730.14658357C151.40811157 730.06933594 116.4921875 695.15341187 116.4921875 652.28098297L116.4921875 362.98864746000004c0-42.94967651 34.91592407-77.86560059 77.86560059-77.86560058L388.40380859 285.12304687000005l0-49.43847656L289.52685547 235.68457031000003c-13.67282868 0-24.71923828-11.04640961-24.71923828-24.71923828s11.04640961-24.71923828 24.71923828-24.71923828l200.84381104 0c13.67282868 0 24.71923828 11.04640961 24.71923828 24.71923828S504.04349518 235.68457031000003 490.37066651 235.68457031000003z" horiz-adv-x="1024" />
<glyph glyph-name="dingwei" unicode="&#59332;" d="M511.99955 777.48321856c-137.58151992 0-249.11220234-111.53158154-249.11220234-249.11220234 0-41.85852012 10.44911513-81.2311251 28.68425244-115.87383721l-0.09083848-0.04496924 220.5196875-421.93542745 217.79363584 417.06972686c19.9116 35.78044043 31.31856562 76.93473867 31.31856562 120.78450791C761.11175234 665.95163701 649.58106992 777.48321856 511.99955 777.48321856zM511.99955 442.18335205c-42.30731602 0-76.61995136 34.31263623-76.61995136 76.65053115 0 42.30731602 34.31263623 76.61995136 76.61995136 76.61995137 42.3369958 0 76.65053115-34.31263623 76.65053115-76.61995137C588.64918203 476.4968874 554.3365458 442.18335205 511.99955 442.18335205z" horiz-adv-x="1024" />
<glyph glyph-name="yunxingzhong" unicode="&#59067;" d="M512-11.507812489999992c-217.52929689 0-395.50781249 177.97851563-395.50781249 395.50781249s177.97851563 395.50781249 395.50781249 395.50781249 395.50781249-177.97851563 395.50781249-395.50781249S729.52929689-11.507812489999992 512-11.507812489999992zM512 735.01318359C319.18994139 735.01318359 160.98681641 576.8100586099999 160.98681641 384s158.20312501-351.01318359 351.01318359-351.01318359 351.01318359 158.20312501 351.01318359 351.01318359S704.81005861 735.01318359 512 735.01318359zM413.12304687 522.42773437L689.97851563 384 413.12304687 245.57226562999995Z" horiz-adv-x="1024" />
<glyph glyph-name="shezhishedingpeizhichilun" unicode="&#59407;" d="M896 448l-71.04 0c-8.32 40.96-24.96 78.08-46.72 111.36l50.56 50.56c24.96 24.96 24.96 65.28 0 90.24-24.96 24.96-65.28 24.96-90.24 0l-50.56-50.56C654.08 672.64 616.96 689.28 576 697.6L576 768c0 35.2-28.8 64-64 64C476.8 832 448 803.2 448 768l0-70.4C407.04 689.28 369.92 672.64 336 650.24L285.44 700.8c-24.96 24.96-65.28 24.96-90.24 0-24.96-24.96-24.96-65.28 0-90.24l50.56-50.56C224 526.0799999999999 207.36 488.96 199.04 448L128 448C92.8 448 64 419.2 64 384c0-35.2 28.8-64 64-64l71.04 0c8.32-40.96 24.96-78.08 46.72-111.36l-50.56-50.56c-24.96-24.96-24.96-65.28 0-90.24 24.96-24.96 65.28-24.96 90.24 0l50.56 50.56C369.92 95.36000000000001 407.04 78.72000000000003 448 70.39999999999998L448 0c0-35.2 28.8-64 64-64 35.2 0 64 28.8 64 64l0 70.4c40.96 8.32 78.08 24.96 112 47.36l50.56-50.56c24.96-24.96 65.28-24.96 90.24 0 24.96 24.96 24.96 65.28 0 90.24l-50.56 50.56c21.76 33.28 38.4 71.04 46.72 111.36L896 319.36c35.2 0 64 28.8 64 64C960 419.2 931.2 448 896 448zM512 256c-70.4 0-128 57.6-128 128 0 70.4 57.6 128 128 128 70.4 0 128-57.6 128-128C640 313.6 582.4 256 512 256z" horiz-adv-x="1024" />
<glyph glyph-name="zhiyuanshuaxin9" unicode="&#58931;" d="M510.73509781 805.95455437c-232.36501688 0-420.67094531-188.30592844-420.67094531-420.67094531 0-232.31513062 188.30592844-420.67094531 420.67094531-420.67094531 232.31321156 0 420.67094531 188.35581469 420.67094531 420.67094531C931.40604312 617.64862594 743.04830938 805.95455437 510.73509781 805.95455437L510.73509781 805.95455437zM510.01558531 145.26682125000002c-97.61957437 0-180.85945688 62.03250188-212.90365125 148.71357188l0.35975625 0.154455c-2.0021625 4.00528406-3.33757687 8.32043906-3.33757687 13.09416187 0 16.53534938 13.3512675 29.88661688 29.88565781 29.88661688 13.24957688 0 24.13531594-8.78092688 27.987105-20.74497469l0.46144687 0.15253687c23.05700719-64.8558675 84.88324875-111.53493937 157.54630407-111.53493937 92.32972031 0 167.40553875 75.07485937 167.40553875 167.40553875 0 92.27791594-75.07581844 167.35373437-167.40553875 167.35373437-20.2326825 0-39.48970594-3.95347969-57.46312031-10.57778812l21.05484468-40.36271438c2.46456937-2.66986969 3.95443875-6.26455219 3.95443875-10.16718656 0-8.37032531-8.31852-14.7893325-15.19993406-14.94378844l-0.30891094 0c-0.20530125 0-0.41060156 0-0.61590281 0l-149.32947469 6.41900813c-5.28889406 0.20530125-10.11634125 3.28673156-12.58186968 8.01056906-2.46456937 4.72479656-2.20746375 10.42525125 0.66770718 14.94378844l80.15941219 126.06716625c2.87613 4.46769094 7.95972375 7.08671531 13.24861781 6.880455 5.34069937-0.25614656 10.11538219-3.28673156 12.58090969-8.01056906l18.43486125-35.32996594c26.39458406 10.78308938 55.20289219 16.791495 85.39842 16.791495 125.24596313 0 227.1787725-101.881005 227.1787725-227.07612281C737.19435781 247.14878531 635.26154844 145.26682125000002 510.01558531 145.26682125000002L510.01558531 145.26682125000002zM510.01558531 145.26682125000002" horiz-adv-x="1024" />
<glyph glyph-name="tishi2" unicode="&#59027;" d="M874.02587891 536.08857422c-20.61650391 47.67011719-48.66503906 89.24150391-84.1631836 124.69130859-35.48408203 35.46035156-76.97197266 63.48867187-124.44697265 84.09023438-47.48027344 20.60683594-98.31357422 30.90761719-152.49990235 30.90761719-54.19072266 0-105.02578125-10.30166016-152.50429687-30.90761719-47.475-20.6015625-88.95234375-48.62900391-124.44697266-84.09023438-35.49462891-35.45068359-63.54228516-77.01591797-84.16933594-124.69130859-20.62177734-47.67626953-30.92695313-98.57724609-30.92695312-152.72490235 0-54.14238281 10.30517578-104.92207031 30.92695312-152.35224609 20.62529297-47.44072266 48.67470703-88.88378906 84.1631836-124.34326172 35.49462891-35.45068359 76.97197266-63.47900391 124.44609375-84.09023437 47.47939453-20.59716797 98.31357422-30.90234375 152.50429687-30.90234375 54.18720703 0 105.01962891 10.30166016 152.49990235 30.90234375 47.475 20.61123047 88.96113281 48.64042969 124.44609375 84.09023437 35.49023438 35.46035156 63.54755859 76.90341797 84.16318359 124.34326172 20.63144531 47.43017578 30.93662109 98.21513672 30.93662109 152.35224609 0.00966797 54.15292969-10.30166016 105.04951172-30.93134765 152.72490235l0 0zM512.91582031 130.48564452999995c-24.51357422 0-44.38037109 19.84746094-44.38037109 44.34169922 0 24.48369141 19.87207031 44.34169922 44.38037109 44.34169922 24.51796875 0 44.37597656-19.85712891 44.37597657-44.34169922 0-24.49863281-19.86152344-44.34169922-44.37597657-44.34169922l0 0zM557.29179688 314.82216797c0-24.48896484-19.86152344-44.35136719-44.37597657-44.35136719-24.51357422 0-44.38037109 19.86152344-44.38037109 44.35136719l0 277.80820312c0 24.49863281 19.87207031 44.35136719 44.38037109 44.35136719 24.51796875 0 44.37597656-19.85273438 44.37597657-44.35136719l0-277.80820312zM557.29179688 314.82216797z" horiz-adv-x="1024" />
<glyph glyph-name="one-line-arrow" unicode="&#58908;" d="M962.011 834.022l-150.243-40.261 39.115-39.139-788.895-788.873 31.75-31.75 788.895 788.873 39.115-39.115z" horiz-adv-x="1024" />
<glyph glyph-name="quanping" unicode="&#59104;" d="M654.74667969 487.14492187l222.61992187 221.85175782-0.76289062-125.72226563c-0.30585937-10.42734375 8.12460938-19.62333984 18.55019531-19.31748047h13.33916016c10.42734375 0.30673828 19.16367187 6.43886719 19.31748046 17.01914063l0.61435547 187.20263672c0 0.15380859 0.30585937 9.96503906 0.30585938 9.96503906 0.15380859 5.21103516-1.07402344 9.96503906-4.44726563 13.33916016-3.37324219 3.37324219-7.96904297 5.51865234-13.33916015 5.36660156l-9.50625-0.15380859c-0.15292969 0-0.30234375 0-0.45703125-0.1538086l-185.67070313 0.76904297c-10.42734375-0.30673828-19.16367187-8.89628906-19.31748047-19.47304687v-13.33916016c1.53544922-12.41806641 11.34404297-19.62509766 21.77050782-19.31748047l122.34814453-0.30673828-222.00556641-221.08798828c-10.11972656-10.11972656-10.11972656-26.52275391 0-36.64072266 10.11972656-10.27265625 26.52539063-10.27265625 36.64423828 0h-0.00351562zM374.16992187 278.01708984000004l-222.77197265-221.08974609 0.76728516 125.1140625c0.30673828 10.42294922-8.128125 19.61982422-18.55371094 19.31748047h-14.10292969c-10.42734375-0.30673828-19.16367187-6.43974609-19.31748047-17.02001953l-0.61435547-187.35644531c0-0.15380859-0.30585937-9.96503906-0.30585937-9.96503907-0.15380859-5.2171875 1.07402344-9.96503906 4.44287109-13.33916015 3.37324219-3.37324219 7.97431641-5.51865234 13.33916016-5.36660157l9.50537109 0.1538086c0.15380859 0 0.30673828 0 0.46142578 0.15380859l186.43798828-0.76816406c10.42294922 0.30673828 19.16367187 8.89189453 19.31748047 19.47304687v13.33828125c-1.53457031 12.41806641-11.34667969 19.62509766-21.77490234 19.31748047l-122.34902344 0.30673828 221.85263672 221.08271485c10.11972656 10.11972656 10.11972656 26.52626953 0 36.64423828-9.96152344 10.27265625-26.2125 10.27265625-36.33398438-0.00087891v0zM928.42490234-3.016699219999964l-0.46054687 187.35644531c-0.30673828 10.42822266-8.89628906 16.71328125-19.31835938 17.02001954h-13.33828125c-10.42822266 0.30234375-18.70576172-8.89628906-18.55458984-19.31748047l0.76816406-125.72666016-222.77285156 221.70146484c-10.11972656 10.11972656-26.52539063 10.11972656-36.64423828 0-10.11533203-10.11884766-10.11533203-26.52539063 0-36.64423828l221.85527344-221.08183593-122.34814454-0.30673829c-10.42734375 0.30673828-20.08476562-7.05234375-21.77402343-19.31748046v-13.33916016c0.30585937-10.42734375 8.89628906-19.16367187 19.31748047-19.47304688l185.67158203 0.76816407c0.15292969 0 0.30585937-0.15380859 0.46054687-0.1538086l9.50625-0.15380859c5.21015625-0.15292969 9.96503906 1.83955078 13.33828125 5.36660156 3.37324219 3.37324219 4.5984375 8.12373047 4.44375 13.33916016 0 0-0.15380859 9.81210938-0.15380859 9.96503906h0.00439453zM188.81035156 744.87275391l122.34814453 0.30673828c10.42294922-0.30673828 20.08125 7.05234375 21.77050782 19.31748047v13.34091797c-0.30673828 10.42734375-8.89189453 19.16367187-19.31748047 19.47304687l-186.58828125-0.76816406c-0.15380859 0-0.30673828 0.15380859-0.46142578 0.15380859l-9.50449219 0.1538086c-5.2171875 0.15292969-9.96503906-1.83955078-13.33916016-5.36660157-3.37324219-3.37324219-4.60283203-8.12373047-4.44287109-13.33916015 0 0 0.30585937-9.81210938 0.30585937-9.96503907l0.45703125-187.35644531c0.15380859-10.42382813 8.89628906-16.71328125 19.31748047-17.015625h14.10732422c10.42734375-0.30585937 18.70488281 8.89189453 18.54931641 19.31748047l-0.61347657 125.10878906 222.6234375-221.24267578c10.11445313-10.11972656 26.521875-10.11972656 36.63984375 0 10.11972656 10.11972656 10.11972656 26.52539063 0 36.64423828l-221.85263671 221.23476563zM188.81035156 744.87275391z" horiz-adv-x="1024" />
<glyph glyph-name="quanping1" unicode="&#58976;" d="M167.09959268 728.9179459l163.25371406-1e-8c14.12762168 0 25.73784932 11.54367334 25.73784931 25.77202648 0 14.32908458-11.52568565 25.77112734-25.73784931 25.77112734l-189.05901768 0c-7.06381084 0-13.48995411-2.88524355-18.15419179-7.55038125-4.731692-4.66513682-7.58455752-11.09128008-7.58455753-18.18836807L115.55553974 565.6642318300001c0-14.12762168 11.54367334-25.73784932 25.77112735-25.73784931 14.32908458 0 25.77202646 11.52658477 25.77202646 25.73784932L167.09869268 728.9179459zM854.34344141 728.9179459L691.08972734 728.9179459c-14.14471026 0-25.73784932 11.54367334-25.73784931 25.77202647 0 14.32908458 11.52658477 25.77112734 25.73784931 25.77112734l189.05901768 0c7.06381084 0 13.48995411-2.88524355 18.1541918-7.55038125 4.73259112-4.66513682 7.58455752-11.09128008 7.58455751-18.18836807L905.88749433 565.6642318300001c0-14.12762168-11.54367334-25.73784932-25.77112733-25.73784931-14.32908458 0-25.77202646 11.52658477-25.77202648 25.73784932L854.34434053 728.9179459zM167.09959268 41.67499627999996l163.25371406 1e-8c14.12762168 0 25.73784932-11.54277422 25.73784931-25.77112734 0-14.32908458-11.52568565-25.77112734-25.73784931-25.77112734l-189.05901768 0c-7.06381084 0-13.48995411 2.88614356-18.15419179 7.55038125-4.731692 4.6642377-7.58455752 11.09128008-7.58455753 18.18836806L115.55553974 204.92781122999997c0 14.1285208 11.54367334 25.73964844 25.77112735 25.73964844 14.32908458 0 25.77202646-11.52658477 25.77202646-25.73964844L167.09869268 41.67499627999996zM854.34344141 41.67499627999996L691.08972734 41.67499627999996c-14.14471026 0-25.73784932-11.54277422-25.73784931-25.77112733 0-14.32908458 11.52658477-25.77112734 25.73784931-25.77112734l189.05901768 0c7.06381084 0 13.48995411 2.88614356 18.1541918 7.55038125 4.73259112 4.6642377 7.58455752 11.09128008 7.58455751 18.18836806L905.88749433 204.92781122999997c0 14.1285208-11.54367334 25.73964844-25.77112733 25.73964844-14.32908458 0-25.77202646-11.52658477-25.77202648-25.73964844L854.34434053 41.67499627999996z" horiz-adv-x="1024" />
<glyph glyph-name="shanchu" unicode="&#58928;" d="M817.968553 680.102858l-169.357176 0 0 58.869782c0 25.391297-20.657482 46.048779-46.048779 46.048779l-181.125197 0c-25.391297 0-46.048779-20.657482-46.048779-46.048779l0-58.869782-169.357176 0c-25.391297 0-46.048779-20.657482-46.048779-46.048779l0-71.631434c0-25.391297 20.657482-46.048779 46.048779-46.048779l28.321022 0 0-425.947112c0-59.246359 48.200792-107.447151 107.447151-107.447151l340.40076 0c59.246359 0 107.447151 48.200792 107.447151 107.447151L789.647531 516.373867l28.321022 0c25.391297 0 46.048779 20.657482 46.048779 46.048779l0 71.631434C864.017332 659.445376 843.35985 680.102858 817.968553 680.102858zM426.553932 733.85611l170.892135 0 0-53.753251-170.892135 0L426.553932 733.85611zM738.482221 90.425731c0-31.033807-25.248034-56.281841-56.281841-56.281841L341.79962 34.14389c-31.033807 0-56.281841 25.248034-56.281841 56.281841L285.517779 516.373867l452.964442 0L738.482221 90.425731zM812.852022 567.539176l-601.704045 0 0 61.398372 203.227588 0c2.302439-0.356111 4.66116-0.542352 7.061836-0.542352l181.125197 0c2.400676 0 4.759397 0.186242 7.062859 0.542352l203.226564 0L812.852022 567.539176zM513.023306 112.679571c14.128789 0 25.582655 11.453866 25.582655 25.582655l0 288.572348c0 14.128789-11.453866 25.582655-25.582655 25.582655-14.128789 0-25.582655-11.453866-25.582655-25.582655l0-288.572348C487.440651 124.133438 498.894518 112.679571 513.023306 112.679571zM645.541459 112.679571c14.128789 0 25.582655 11.453866 25.582655 25.582655l0 288.572348c0 14.128789-11.453866 25.582655-25.582655 25.582655s-25.582655-11.453866-25.582655-25.582655l0-288.572348C619.958804 124.133438 631.41267 112.679571 645.541459 112.679571zM380.505154 112.679571c14.128789 0 25.582655 11.453866 25.582655 25.582655l0 288.572348c0 14.128789-11.453866 25.582655-25.582655 25.582655s-25.582655-11.453866-25.582655-25.582655l0-288.572348C354.922499 124.133438 366.376365 112.679571 380.505154 112.679571z" horiz-adv-x="1024" />
<glyph glyph-name="yonghu" unicode="&#58936;" d="M502.36843027 778.68930029c110.43882247 0 199.96232519-88.06199414 199.9623252-196.67775234 0-108.63734414-89.52260362-196.70383477-199.96232519-196.70383477-110.4352251 0-199.95692959 88.06559151-199.9569296 196.70383477C302.41060156 690.65248945 391.96288497 778.68930029 502.36843027 778.68930029L502.36843027 778.68930029 502.36843027 778.68930029zM502.36843027 778.68930029c110.43882247 0 199.96232519-88.06199414 199.9623252-196.67775234 0-108.63734414-89.52260362-196.70383477-199.96232519-196.70383477-110.4352251 0-199.95692959 88.06559151-199.9569296 196.70383477C302.41060156 690.65248945 391.96288497 778.68930029 502.36843027 778.68930029L502.36843027 778.68930029 502.36843027 778.68930029zM427.38806709 319.72957528999996l166.66689991 0c142.65947724 0 258.29317705-113.71979795 258.29317704-254.05435107l0-16.36710293c0-55.30260498-115.65798398-57.4044794-258.29317705-57.40447939L427.38806709-8.09635897999999c-142.66397373 0-258.29317705 0.0809455-258.29317706 57.40447939l0 16.36710293C169.09668828 206.00977734000003 284.72499248 319.72957528999996 427.38806709 319.72957528999996L427.38806709 319.72957528999996 427.38806709 319.72957528999996z" horiz-adv-x="1024" />
<glyph glyph-name="ai06" unicode="&#58999;" d="M512.23227737 786.07299584c-220.42550386 0-400.83069382-180.37841124-400.83069387-400.82836479 0-220.42666781 180.40518997-400.83069382 400.83069387-400.83069382 220.45228257 0 400.83069382 180.40402602 400.8306938 400.83069382C913.06297003 605.69342066 732.68455878 786.07299584 512.23227737 786.07299584M472.18518473 224.92702380000003l-80.1710285 0 0 320.65966421 80.1710285 0L472.18518473 224.92702380000003zM632.52840562 224.92702380000003l-80.17102848 0 0 320.65966421 80.17102848 0L632.52840562 224.92702380000003z" horiz-adv-x="1024" />
<glyph glyph-name="ai05" unicode="&#59001;" d="M391.40755797 224.11434667000003l80.57853156 0 0 322.28502072-80.57853156 0L391.40755797 224.11434667000003zM512.23344128 788.10469149c-221.54089813 0-402.86122439-181.29354638-402.86122439-402.8612244 0-221.54322717 181.31916117-402.86238834 402.86122439-402.86238834 221.56884082 0 402.86005931 181.31916117 402.86005931 402.86238834C915.09350059 606.81114397 733.8022821 788.10469149 512.23344128 788.10469149M512.23344128 62.95844637000005c-177.23947122 0-322.2826917 145.04554951-322.2826917 322.28502072 0 177.26508601 145.04322048 322.31063552 322.2826917 322.31063552 177.26508601 0 322.31063552-145.04554951 322.31063552-322.31063552C834.54407566 208.00399587000004 689.49852729 62.95844637000005 512.23344128 62.95844637000005M552.56229319 224.11434667000003l80.57853156 0 0 322.28502072-80.57853156 0L552.56229319 224.11434667000003z" horiz-adv-x="1024" />
<glyph glyph-name="yonghu1" unicode="&#58921;" d="M670.01446625 357.18713906000005c58.26993281 47.0465025 94.18606219 118.78570312 94.18606219 195.97976532 0 139.07115-113.12937844 252.20052844-252.20052844 252.20052843-139.07115 0-252.20052844-113.12937844-252.20052844-252.20052843 0-77.35523344 36.06578719-149.23449938 94.55157375-196.27524563-140.62913344-61.70056687-236.44129313-202.84007438-236.44129312-360.50341875 0-18.65743031 15.11359312-33.75375469 33.75375468-33.75375469s33.75375469 15.09728438 33.75375469 33.75375469c0 152.75051531 108.58014281 286.77836438 258.18303188 318.75252562 15.27572344 3.25986938 25.87077937 16.38760875 26.6257875 31.28055188 0.02302406 0.35495906 0.0326175 0.708 0.04413 1.062 0.00959344 0.50078062 0.01534969 1.00156125 0.00287812 1.50521906-0.17556094 13.57767469-8.56027594 26.26699125-22.057365 31.25368969C375.89515906 406.87665 327.30794094 476.36233875 327.30794094 553.16690438c0 101.85606188 82.85230594 184.69205906 184.69205906 184.69205906 101.83975219 0 184.69205906-82.83599719 184.69205906-184.69205906 0-76.8036075-48.58721812-146.29025531-120.90874406-172.92371813-4.535805-1.67598375-8.48256844-4.23360938-11.75107312-7.38987-0.08634187-0.08346375-0.16500844-0.17460187-0.25039032-0.25902469-0.66099188-0.65139844-1.30375594-1.31814656-1.90526812-2.01751219-0.26574-0.30699188-0.50461781-0.63700781-0.75884531-0.95455312-0.40388625-0.50653687-0.81544688-1.0063575-1.18863375-1.53400031-0.33481312-0.47008125-0.63412969-0.96702469-0.94591875-1.45629282-0.26574-0.41827687-0.54395156-0.82791844-0.79050375-1.25770687-0.29452031-0.51229313-0.55450406-1.04856938-0.82312219-1.57908937-0.23024344-0.45473156-0.47008125-0.90178875-0.67921969-1.36611375-0.20913844-0.46624406-0.38949563-0.94975594-0.57848812-1.42847157-0.22928438-0.57561-0.45856875-1.14930094-0.65619469-1.7373825-0.12951187-0.38853656-0.23599969-0.78762562-0.35208094-1.18287844-0.20913844-0.708-0.40676438-1.41887812-0.56985375-2.14126781-0.02686219-0.11991844-0.06811406-0.2321625-0.09401625-0.35304093-0.05180531-0.24079688-0.07003219-0.47967469-0.11608125-0.72047157-0.14198344-0.74349562-0.26861812-1.48795125-0.36167437-2.24200031-0.04988625-0.40772344-0.08250375-0.81160969-0.11704032-1.21837406-0.05852062-0.67921969-0.10360969-1.35939844-0.11991843-2.04533344-0.01247156-0.48159375-0.00575625-0.95934938 0.00287812-1.438065 0.0115125-0.59863406 0.03069937-1.19630906 0.07482938-1.79686219 0.04029281-0.55930125 0.10169062-1.11380437 0.16884562-1.66734937 0.06331687-0.51613031 0.13143094-1.03130063 0.21969094-1.54647188 0.10744687-0.63125156 0.24079688-1.25386969 0.38278031-1.87552875 0.10169062-0.44226 0.20242313-0.88356094 0.32234156-1.32390281 0.18515438-0.67730062 0.39908906-1.34212969 0.62549625-2.00408156 0.09209719-0.26957719 0.154455-0.5420325 0.25326844-0.81160969 0.05947969-0.16021125 0.13239-0.30987 0.19378875-0.46912219 0.15349594-0.39717094 0.31946344-0.78666656 0.48735-1.17712219 0.24463406-0.57081281 0.50269875-1.13107312 0.77515406-1.68078 0.16213031-0.32713781 0.32425969-0.6533175 0.49694344-0.97469906 0.35591906-0.66387 0.73486219-1.30759312 1.13011406-1.93884562 0.12567469-0.20050406 0.24079688-0.40676438 0.37126782-0.60534938 0.55546312-0.84806531 1.14162563-1.66926844 1.76424375-2.45497594 0.07578844-0.09497531 0.16021125-0.18323531 0.23599968-0.27725156 0.53435813-0.65907281 1.08982125-1.29512156 1.66830844-1.90718719 0.26478094-0.28108969 0.54107344-0.54874781 0.81544688-0.82120312 0.40100812-0.39621094 0.80873156-0.78378844 1.2279675-1.15793531 0.35975625-0.32330063 0.72334969-0.64084594 1.09749562-0.94975594 0.32809781-0.26861812 0.66770719-0.52284562 1.00539844-0.77899219 1.62705656-1.23852 3.37499156-2.33217844 5.23517062-3.26850375 0.23120344-0.11608125 0.46048781-0.23408156 0.69360938-0.34536562 0.597675-0.28396781 1.20494344-0.55162594 1.82372344-0.80105719 0.26861812-0.10840687 0.54011344-0.20530125 0.81160968-0.30699188 1.10229281-0.41252063 2.23240688-0.76843875 3.39513844-1.06967437 0.30411375-0.07866656 0.60343125-0.17268281 0.90946313-0.242715 0.16980469-0.03933375 0.33001594-0.09689438 0.50078062-0.13335 149.58658031-31.84177125 258.16672312-166.06820531 258.16672312-319.1477775 0-18.65743031 15.11359312-33.75375469 33.75375469-33.75375469s33.75375469 15.09728438 33.75375469 33.75375469C906.08928781 154.19069062999995 810.44789188 295.37912530999995 670.01446625 357.18713906000005z" horiz-adv-x="1024" />
<glyph glyph-name="wenjianjia" unicode="&#59240;" d="M841.99029541 433.4046936v0h-566.12905884c-21.02618408 0-38.80178833-13.73483276-44.92391967-32.73568725v0l-49.39398194-152.17327881v420.76263428h235.90310669c0-52.10650635 42.21139526-94.31790161 94.32119751-94.31790161v0h235.85119629v-94.31954956h47.15524292v94.31954956c0 26.02770997-21.12588501 47.16101074-47.15524292 47.16101073h-235.90722657c-26.02606201 0-47.15936279 21.13082886-47.15936279 47.15689088v0c0 26.02853393-21.07727051 47.15936279-47.15936279 47.15936279v0h-235.85119629c-26.02688599 0-47.15936279-21.13165283-47.15936279-47.15936279v-566.02194214c0-26.02853393 21.13165283-47.15524292 47.15936279-47.15524293h566.02359009c21.02618408 0 38.80178833 13.72988891 44.92391968 32.73568726h0.0519104l96.50061035 297.43341065c0.00082398 26.02688599-21.02453614 47.10580445-47.05389404 47.15936279v0zM750.01660156 103.23312378000003h-568.47161865l91.871521 283.01138305h568.46749877l-91.8682251-283.01138305z" horiz-adv-x="1024" />
<glyph glyph-name="chenggong" unicode="&#58887;" d="M512.61293427 778.23870615c-217.56429141 0-393.93291357-176.36862217-393.93291357-393.93291357 0-217.56429141 176.36862217-393.93291357 393.93291357-393.93291357 217.56429141 0 393.93291357 176.36862217 393.93291358 393.93291357C906.54584786 601.87008398 730.17722568 778.23870615 512.61293427 778.23870615zM749.87656982 494.45681016L477.29208184 215.96692645999997c-0.92906982-1.39405518-1.96336846-2.72515254-3.18204229-3.95911581-10.68385605-10.85114268-28.00341386-10.85114268-38.69446552 0L300.01777402 349.48949824c-10.67576221 10.85204268-10.67576221 28.43691943 0 39.27277265 10.68295693 10.85204268 28.00251387 10.85204268 38.6863708 0L454.35403408 271.34777783000004l256.82807022 262.39709444c10.69195078 10.85114268 28.00341386 10.85114268 38.69446552 0C760.55233115 522.89373047 760.55233115 505.30975195 749.87656982 494.45681016z" horiz-adv-x="1024" />
<glyph glyph-name="anquan" unicode="&#58993;" d="M840.58007276 688.34555391c-0.81394805 8.2294207-5.74170732 15.50278916-13.06184414 19.33059375-85.93133818 44.87867227-186.40761593 67.5576958-298.55707823 67.5576958-5.74170732 0-11.33951221-0.19156992-16.98588369-0.28690577l0-0.09533496c-5.64547237 0.19156992-11.19560977 0.38313984-16.93731621 0.38313985-112.1503623 0-212.62663916-22.77435937-298.55707822-67.5576958-7.32103594-3.82780459-12.24879521-11.10117305-13.06184415-19.42592959-1.14762217-12.34503018-28.41983174-304.96973027 23.6359749-461.23338341 1.00461885-4.40161612 40.33405371-147.26885185 304.96793204-234.25247724l0 0c264.58800908 86.98362539 303.91654482 229.85086114 304.92116367 234.25247724C868.99990449 383.28138692000005 841.72769492 675.90608789 840.58007276 688.34555391zM769.95905381 240.79729102c-0.38313984-1.24385625-35.59696523-117.89206875-257.98468623-196.07156368l0 0c-222.3382544 78.08415908-257.55297891 194.73237158-257.93611963 196.07156368-43.25257442 129.85395908-27.65445029 370.32661846-22.9659293 429.46332361 76.26649131 37.12772724 164.97244864 55.97984531 263.96473184 55.97984534 5.74080732 0 11.29094473-0.47847568 16.93731621-0.57471065l0 0 0 0 0.04766748 0 0 0c5.69403984 0.19156992 11.24507549 0.57471065 16.93821621 0.57471065 98.9922832 0 187.69913965-18.85211807 263.96473183-55.97984532C797.61440322 611.1239103600001 813.21252823 370.74658594000005 769.95905381 240.79729102zM660.6795456 551.89097021L454.03475029 345.5789499 363.41399111 436.67728477c-9.56861279 9.66484688-25.11906943 9.56951193-34.64091387 0.09623495-9.61628028-9.56951193-9.61628028-25.07230107-0.09443583-34.64091386l104.59008808-105.06946289c3.11009151-3.15775898 6.88932862-4.88009092 10.81246905-5.93327725 3.58856719-1.91300273 7.41637177-3.25309482 11.3395122-3.25309483 6.26785049 0 12.53570097 2.39237753 17.32045694 7.17623438L695.32045859 517.25005635c9.56861279 9.47327695 9.56861279 25.07140195 0 34.64091386C685.75094668 561.45958213 670.24815753 561.45958213 660.6795456 551.89097021z" horiz-adv-x="1024" />
<glyph glyph-name="shuaxin" unicode="&#58882;" d="M422.0140625 134.78437499999995c-27.7734375 9.6890625-53.015625 23.315625-75.6984375 40.9078125-22.6828125 17.578125-42.1734375 38.3625-58.4859375 62.3109375-16.3125 23.9625-28.546875 49.95-36.703125 77.99062499l79.509375 2e-8c4.078125 3.571875 6.75 7.65 8.0296875 12.23437499 1.2796875 4.584375-0.1265625 8.6625-4.2046875 12.234375l-91.74375 93.2765625c-3.571875 3.571875-8.0296875 5.3578125-13.37343749 5.3578125-5.3578125 0-10.06875001-1.7859375-14.14687501-5.3578125l-90.984375-93.2765625c-5.6109375-6.1171875-7.2703125-10.828125-4.9640625-14.146875 2.2921875-3.31875001 5.23125001-6.75 8.7890625-10.32187501l72.6328125 2e-8c8.6625-35.1703125 22.55625001-67.66875001 41.6671875-97.48125001 19.1109375-29.8125 42.1734375-55.6875 69.1875-77.596875 27.0140625-21.9234375 57.4734375-38.9953125 91.3640625-51.2296875s69.7078125-18.3515625 107.4234375-18.3515625c28.546875 0 56.0671875 3.571875 82.575 10.7015625 26.5078125 7.1296875 51.35625001 17.325 74.5453125 30.5859375 23.1890625 13.246875 44.3390625 29.1796875 63.4640625 47.78437501 19.1109375 18.6046875 35.803125 39.375 50.0765625 62.31093749l-45.871875 18.35156251c-12.234375-18.3515625-26.38125001-34.9171875-42.4265625-49.69687501-16.059375-14.7796875-33.7640625-27.39375001-53.1421875-37.8421875-19.3640625-10.4484375-39.88125001-18.6046875-61.55156251-24.46875-21.65625001-5.8640625-44.2125-8.7890625-67.66874999-8.7890625C479.234375 120.2578125 449.8015625 125.09531249999998 422.0140625 134.78437499999995zM778.68124999 320.5640625c3.571875-3.571875 9.8015625-8.1703125 15.15937501-8.17031249s8.296875 4.5984375 12.375 8.17031249l91.74375 93.2765625c3.571875 3.571875 4.7109375 7.65 3.4453125 12.234375-1.2796875 4.584375-3.6984375 8.6625-7.2703125 12.234375l-69.58125 0c-6.1171875 38.221875-18.478125 73.659375-37.0828125 106.2703125-18.6046875 32.625-41.79375001 61.03125001-69.58125 85.246875-27.7734375 24.215625-59.3859375 43.2-94.809375 56.953125C587.6703125 700.5609375 550.08125001 707.4375 510.3265625 707.4375c-30.5859375 0-60.01875001-4.2046875-88.3125-12.6140625-28.29375001-8.409375-54.534375-20.1375-78.75-35.1703125-24.215625-15.0328125-46.125-33.0046875-65.75625-53.9015625-19.6171875-20.896875-36.05625001-44.0859375-49.3171875-69.58125l45.1125-18.35156251c11.728125 20.896875 25.8609375 40.0078125 42.4265625 57.34687501 16.565625 17.325 34.9171875 32.1046875 55.0546875 44.3390625 20.1375 12.234375 42.046875 21.796875 65.75625 28.6734375 23.6953125 6.8765625 48.290625 10.321875 73.7859375 10.321875 33.13125001 0 64.4765625-5.6109375 94.0359375-16.81875001 29.559375-11.2078125 55.940625-26.634375 79.1296875-46.25156249 23.1890625-19.6171875 42.8203125-42.946875 58.865625-69.96093751 16.059375-27.0140625 26.8875-56.0671875 32.49843751-87.15937499l-83.33437501 0c-4.078125-3.571875-7.1296875-7.003125-9.16875-10.321875-2.0390625-3.31875001-0.253125-8.0296875 5.3578125-14.146875" horiz-adv-x="1024" />
<glyph glyph-name="wendangxiugai" unicode="&#59171;" d="M397.459421 58.444601000000034H190.057869c-9.394495 0-16.62103 7.949188-16.621031 16.621031V737.0162310000001c0 9.394495 7.949188 16.62103 16.621031 16.621031h581.736062c9.394495 0 16.62103-7.949188 16.62103-16.621031v-278.944248c0-13.730416 11.562456-25.292872 25.292872-25.292872s25.292872 11.562456 25.292873 25.292872V737.0162310000001c0 36.855328-30.351447 67.206775-67.206775 67.206775H190.057869c-36.855328 0-67.206775-30.351447-67.206775-67.206775v-661.950599c0-36.855328 30.351447-67.206775 67.206775-67.206775H397.459421c13.730416 0 25.292872 11.562456 25.292873 25.292872s-11.562456 25.292872-25.292873 25.292872zM880.191955 366.294989c-33.242061 33.242061-87.441073 33.242061-120.683134 0l-247.870148-247.870148c-3.613267-3.613267-5.781228-7.226535-6.503881-12.285109l-24.570219-107.675371c-2.16796-8.671842 0.722653-17.343684 6.503881-23.124911 5.058574-5.058574 11.562456-7.949188 18.066338-7.949189 1.445307 0 3.613267 0 5.058574 0.722654l109.843331 22.402258c5.058574 0.722653 9.394495 3.613267 13.007763 7.226535L880.191955 245.611856c15.898377 15.898377 25.292872 37.577982 25.292872 60.702893s-9.394495 44.081863-25.292872 59.98024z m-35.410021-85.273112l-242.088921-242.08892-64.31616-13.007763 14.453069 62.1482L794.918843 330.88496799999996c13.730416 13.730416 36.132675 13.730416 49.140437 0 6.503881-6.503881 10.117149-15.175723 10.117149-24.570219s-2.890614-18.788991-9.394495-25.292872zM698.805928 687.875794H255.096683c-13.730416 0-25.292872-11.562456-25.292872-25.292872s11.562456-25.292872 25.292872-25.292873h444.431899c13.730416 0 25.292872 11.562456 25.292872 25.292873s-11.562456 25.292872-26.015526 25.292872zM724.0988 539.731828c0 13.730416-11.562456 25.292872-25.292872 25.292872H255.096683c-13.730416 0-25.292872-11.562456-25.292872-25.292872s11.562456-25.292872 25.292872-25.292872h444.431899c13.730416 0 24.570219 11.562456 24.570218 25.292872zM257.987297 410.376853m-27.460833 0a27.460833 27.460833 0 1 1 54.921666 0 27.460833 27.460833 0 1 1-54.921666 0ZM354.100212 410.376853m-27.460833 0a27.460833 27.460833 0 1 1 54.921665 0 27.460833 27.460833 0 1 1-54.921665 0ZM450.213126 410.376853m-27.460832 0a27.460833 27.460833 0 1 1 54.921665 0 27.460833 27.460833 0 1 1-54.921665 0Z" horiz-adv-x="1024" />
<glyph glyph-name="download" unicode="&#58896;" d="M485 93v240c0 12 12 24 24 24s24-12 24-24v-240l48 36c12 6 24 6 36-6 12-18 6-30-6-36l-90-66c0-6-6-6-12-6s-12 0-12 6l-90 66c-12 6-12 24-6 36 6 12 24 12 36 6l48-36z m-192 36h-18c-108 0-192 96-192 210 0 120 90 216 198 210 36 120 138 204 252 204 126 0 234-96 264-234 84-18 144-96 144-192 0-108-78-198-174-198-30 0-90 0-156 54-12 12-12 30 0 36 12 12 24 12 36 0 48-48 90-42 114-42h6c72 0 126 66 126 150 0 78-54 144-120 150-12 0-18 12-24 18-18 120-108 210-216 210-96 0-186-78-210-186 0-12-12-18-30-18h-24c-78 0-138-72-138-162 0-90 60-162 138-162h12c24 0 54 0 96 42 12 12 24 12 36 0 12-12 12-24 0-36-48-48-90-54-120-54z" horiz-adv-x="1024" />
<glyph glyph-name="ITjiankong" unicode="&#58975;" d="M373.79835107 43.24803018H203.10038369v-51.21037969h614.50926329v51.21037969H373.79835107zM851.74420362 777.21430049H168.95953144c-28.28762138 0-51.20678145-22.90207237-51.20678144-51.20768057v-477.92876484c0-28.2750293 22.91916094-51.21127881 51.20678144-51.21127881h682.78467218c28.2759293 0 51.21577529 22.93624951 51.21577529 51.21127881V726.00661992c0 28.30560908-22.93984687 51.20768145-51.21577529 51.20768057z m6.75352089-516.41816836h-0.00899384c0-9.62257588-7.79501513-17.4049998-17.40589893-17.40499893H179.62450068c-9.62167675 0-17.40949629 7.78152393-17.40949628 17.40499893V713.35669629c0 9.61807852 7.78781953 17.40589893 17.40949628 17.40589892h661.45833106c9.61088379 0 17.41399365-7.78692041 17.41399365-17.40589893v-452.56056415zM659.65783818 86.05630606V134.49656309H370.42383886v-48.44025703h289.23399932zM619.30579678 666.47508193h-48.43935791v-347.24017089h48.43935791V666.47508193zM773.10152334 609.3665012700001h-48.43935791v-291.93037119h48.43935791V609.3665012700001zM459.21433906 555.4057866200001h-48.43935879v-235.27238467h48.43935879V555.4057866200001zM307.21739258 497.84751182h-48.43935791v-178.61350078h48.43935791V497.84751182z" horiz-adv-x="1024" />
<glyph glyph-name="icon-xiugai" unicode="&#58893;" d="M783.78987676 441.79931221c-14.75719453 0-24.59472451-9.83663086-24.5947254-24.59562452v-314.83514179c0-34.4331545-24.59832276-63.94934268-59.03507373-63.9493418h-457.49281992c-34.43855098 0-73.7895709 29.51528906-73.78957089 63.94934179V559.86496318c0 34.43405362 39.35101991 68.87080547 73.78957089 68.87080635h260.72422911c14.75899365 0 24.59652363 9.83752998 24.59652363 24.59652276 0 14.75809365-9.83752998 24.59562451-24.59652363 24.59562452h-260.72422911c-68.86900721 0-122.98171817-49.19214815-122.98171816-118.06295363v-457.49641729c0-68.86630898 54.11361094-113.14148995 122.98171816-113.14148993h457.49371904c68.87170459 0 108.22542275 44.27518185 108.22542364 113.14148993V412.28762139c0 14.75449628-9.8393291 29.51169082-24.59652365 29.51169082m98.38699367 275.48232274l-39.35191992 39.35371817c-29.51798643 29.5170873-78.71553106 29.5170873-108.22722187 0l-68.86810725-83.62710089-373.87021639-364.02818905v-9.83752999l-49.19124815-162.33543632 34.4331545-29.51528906 152.49970547 54.11091357h9.83752998L798.54976953 540.1872049799999l83.62889912 68.87080547c29.51438906 29.51618818 29.51438906 78.70653721-0.00179824 108.22362452M311.53806318 176.15991593l24.59472452 68.87170458 44.27608095-44.27608096-68.87080547-24.59562364m113.14148994 49.19124815l-68.8672081 68.86900635L695.24580957 628.73576953 759.19515136 564.7828294999999 424.67955312 225.35116405999997m423.05876631 423.06056456l-49.19034902-49.19214728-73.79047002 73.78867089 49.1957455 49.1948464c4.91516719 0 14.75719453 4.91696633 19.67416085 4.9169663 4.92056368 0 14.75719453-4.91696633 19.6777582-4.9169663l39.35551728-39.35371816c4.91966457-9.84202734 4.91966457-24.60012099-4.92236279-34.43765185m0 0z" horiz-adv-x="1024" />
<glyph glyph-name="remove" unicode="&#58894;" d="M769.00449219 725.51308594h-137.90302735c-6.87919922 59.65224609-57.63164063 106.14287109-119.10058593 106.14287109-61.46630859 0-112.21171875-46.48798828-119.09091797-106.14287109h-137.9100586c-55.80878906 0-101.20605469-45.41044922-101.20605468-101.21748047v-5.19345703c0-42.64716797 26.55439453-79.14990234 63.96240233-94.02275391v-478.14433594c0-55.80878906 45.40341797-101.21748047 101.20781251-101.21748046h386.07890625c55.80615234 0 101.20605469 45.41308594 101.2060547 101.21748046v478.14257812c37.40537109 14.87460938 63.96240234 51.37734375 63.96240233 94.02275392v5.19345703c0 55.80878906-45.40166015 101.21923828-101.20605469 101.21923828zM512 783.65449219c34.96025391 0 64.14082031-25.05761719 70.59726562-58.14052735h-141.18134765c6.4546875 33.08466797 35.63701172 58.14052734 70.58408203 58.14052735zM758.24667969 46.93593750000002c0-29.34228516-23.87373049-53.21777344-53.20634765-53.21777344h-386.07890626c-29.33261719 0-53.20634766 23.87724609-53.20634766 53.21777344v470.94960937h492.49248047v-470.94960937zM822.20820313 619.1030273399999c0-29.34228516-23.87373049-53.21777344-53.20634766-53.21777343h-514.00371094c-29.33261719 0-53.20634766 23.87548828-53.20634766 53.21777343v5.19345703c0 29.34228516 23.87373049 53.21777344 53.20634766 53.21777344h514.00546875c29.33261719 0 53.20634766-23.87548828 53.20634766-53.21777344v-5.19345703zM383.32285156 55.10537108999995c13.25566406 0 24.00029297 10.74902345 24.00029297 23.99853516v270.23554687c0 13.25214844-10.74638672 24.00205078-24.00029297 24.00205081s-24.00029297-10.75078125-24.00029297-24.00205081v-270.23554687c-0.00175781-13.25390625 10.74462891-23.99853516 24.00029297-23.99853516zM512 55.10537108999995c13.25566406 0 24.00205078 10.74902345 24.00205078 23.99853516v270.23554687c0 13.25214844-10.75078125 24.00205078-24.00205078 24.00205081-13.25390625 0-24.00029297-10.75078125-24.00029297-24.00205081v-270.23554687c0-13.25390625 10.74462891-23.99853516 24.00029297-23.99853516zM640.67714844 55.10537108999995c13.25390625 0 23.99853516 10.74902345 23.99853515 23.99853516v270.23554687c0 13.25214844-10.74638672 24.00205078-23.99853515 24.00205081-13.25742187 0-24.00205078-10.75078125-24.00205078-24.00205081v-270.23554687c-0.00175781-13.25390625 10.74902345-23.99853516 24.00205078-23.99853516z" horiz-adv-x="1024" />
<glyph glyph-name="paibanguanli" unicode="&#58898;" d="M185.046875 51.7734375c-47.4609375 0-84.375 36.9140625-84.375 84.375V631.8515625c0 47.4609375 36.9140625 84.375 84.375 84.375h73.828125v52.734375H301.0625v-52.734375h321.6796875v52.734375h42.1875v-52.734375h73.828125c47.4609375 0 84.375-36.9140625 84.375-84.375v-168.75H142.859375v-332.2265625c0-21.09375 15.8203125-42.1875 42.1875-42.1875H459.265625c10.546875 0 21.09375-10.546875 21.09375-21.09375s-10.546875-21.09375-21.09375-21.09375l-274.21875 5.2734375z m0 622.265625c-21.09375 0-42.1875-15.8203125-42.1875-42.1875v-126.5625h632.8125V631.8515625c0 21.09375-15.8203125 42.1875-42.1875 42.1875h-73.828125V594.9375H617.46875V674.0390625H301.0625V594.9375h-42.1875V674.0390625H185.046875zM232.5078125 378.7265625h168.75v-42.1875H232.5078125v42.1875zM232.5078125 220.5234375h168.75v-42.1875H232.5078125v42.1875zM696.5703125 178.3359375V299.625h42.1875v-79.1015625h79.1015625v-42.1875h-121.2890625zM717.6640625-0.9609375c-52.734375 0-105.46875 21.09375-142.3828125 58.0078125-36.9140625 36.9140625-58.0078125 89.6484375-58.0078125 142.3828125 0 52.734375 21.09375 105.46875 58.0078125 142.3828125 36.9140625 36.9140625 89.6484375 58.0078125 142.3828125 58.0078125 52.734375 0 105.46875-21.09375 142.3828125-58.0078125 36.9140625-36.9140625 58.0078125-89.6484375 58.0078125-142.3828125 0-52.734375-21.09375-105.46875-58.0078125-142.3828125-36.9140625-36.9140625-84.375-58.0078125-142.3828125-58.0078125z m0 363.8671875c-89.6484375 0-163.4765625-73.828125-163.4765625-163.4765625 0-89.6484375 73.828125-163.4765625 163.4765625-163.4765625s163.4765625 73.828125 163.4765625 163.4765625c0 89.6484375-73.828125 163.4765625-163.4765625 163.4765625z" horiz-adv-x="1024" />
<glyph glyph-name="shezhi-xue" unicode="&#58929;" d="M845.5625 509.26875h-17.8875a312.01875 312.01875 0 0 1-17.60625 42.3l12.76875 12.7125a83.8125 83.8125 0 0 1 24.69375 59.68125 84.0375 84.0375 0 0 1-24.69375 59.625l-19.96875 19.9125c-31.95 31.8375-87.4125 31.89375-119.3625 0l-12.7125-12.7125a304.5375 304.5375 0 0 1-42.35625 17.60625v17.94375c0 46.51875-37.85625 84.375-84.31875 84.375h-28.125c-46.51875 0-84.375-37.85625-84.375-84.375v-17.94375c-14.5125-4.78125-28.63125-10.6875-42.35625-17.60625l-12.7125 12.76875c-31.95 31.8375-87.525 31.78125-119.30625 0l-19.9125-19.9125a84.4875 84.4875 0 0 1 0-119.3625l12.76875-12.76875a313.14375 313.14375 0 0 1-17.60625-42.24375h-18c-46.51875 0-84.375-37.9125-84.375-84.375v-28.125c0-46.51875 37.85625-84.375 84.375-84.375h17.94375c4.78125-14.5125 10.6875-28.63125 17.60625-42.35625l-12.76875-12.76875a84.54375 84.54375 0 0 1 0-119.30625l19.9125-19.9125c31.89375-31.89375 87.525-31.8375 119.30625 0l12.76875 12.76875c13.725-6.91875 27.84375-12.825 42.35625-17.60625v-17.94375c0-46.51875 37.85625-84.375 84.375-84.375h28.125c46.4625 0 84.31875 37.85625 84.31875 84.375v17.94375a315 315 0 0 1 42.3 17.60625l12.825-12.825c31.78125-31.78125 87.3-31.8375 119.30625 0l19.9125 19.9125a84.6 84.6 0 0 1 0 119.3625l-12.76875 12.76875c6.91875 13.725 12.88125 27.84375 17.60625 42.35625h17.94375c46.4625 0 84.31875 37.85625 84.31875 84.375v28.125a84.4875 84.4875 0 0 1-84.31875 84.375z m28.125-112.55625a28.125 28.125 0 0 0-28.06875-28.125h-38.98125a28.06875 28.06875 0 0 1-27.225-21.15c-6.01875-23.7375-15.525-46.6875-28.29375-68.00625a28.125 28.125 0 0 1 4.275-34.25625l27.61875-27.61875a28.29375 28.29375 0 0 0 0-39.825l-19.9125-19.9125a28.96875 28.96875 0 0 0-39.76875 0l-27.675 27.675a28.125 28.125 0 0 1-34.25625 4.275 256.5 256.5 0 0 0-68.00625-28.29375 28.18125 28.18125 0 0 1-21.20625-27.225v-38.98125a28.125 28.125 0 0 0-28.06875-28.125h-28.125a28.125 28.125 0 0 0-28.125 28.125v38.98125a28.06875 28.06875 0 0 1-21.15 27.225 252.9 252.9 0 0 0-67.95 28.35 28.35 28.35 0 0 1-34.3125-4.275l-27.675-27.675a28.85625 28.85625 0 0 0-39.76875 0l-19.9125 19.9125a28.125 28.125 0 0 0 0 39.76875l27.675 27.675a28.125 28.125 0 0 1 4.275 34.25625A253.35 253.35 0 0 0 280.8125 347.4375a28.2375 28.2375 0 0 1-27.28125 21.20625h-38.98125a28.125 28.125 0 0 0-28.125 28.125v28.125c0 15.46875 12.65625 28.125 28.125 28.125h38.98125a28.06875 28.06875 0 0 1 27.225 21.20625 258.1875 258.1875 0 0 0 28.29375 67.95 28.0125 28.0125 0 0 1-4.275 34.2l-27.675 27.675a28.125 28.125 0 0 0 0 39.825l19.9125 19.9125a28.85625 28.85625 0 0 0 39.76875 0l27.675-27.675a28.125 28.125 0 0 1 34.3125-4.275 255.375 255.375 0 0 0 67.95 28.29375 28.06875 28.06875 0 0 1 21.15 27.225v38.98125a28.125 28.125 0 0 0 28.125 28.125h28.125a28.125 28.125 0 0 0 28.06875-28.125v-38.98125c0-12.88125 8.71875-24.075 21.20625-27.225 23.625-6.01875 46.51875-15.525 67.95-28.29375a28.18125 28.18125 0 0 1 34.25625 4.275l27.61875 27.61875a28.74375 28.74375 0 0 0 39.825 0l19.9125-19.9125a28.0125 28.0125 0 0 0 0-39.76875l-27.675-27.675a28.125 28.125 0 0 1-4.275-34.3125c12.76875-21.31875 22.275-44.15625 28.35-67.95a28.125 28.125 0 0 1 27.225-21.15h38.925c15.46875 0 28.125-12.65625 28.125-28.125v-28.125zM530.05625 592.6875a182.1375 182.1375 0 0 1-181.9125-181.9125 182.1375 182.1375 0 0 1 181.9125-181.9125 182.1375 182.1375 0 0 1 181.96875 181.9125A182.19375 182.19375 0 0 1 530.05625 592.6875z m0-307.575c-69.3 0-125.6625 56.3625-125.6625 125.6625S460.75625 536.4375 530.05625 536.4375s125.71875-56.3625 125.71875-125.6625-56.41875-125.6625-125.71875-125.6625z" horiz-adv-x="1024" />
<glyph glyph-name="tianjia-xue" unicode="&#58934;" d="M515.54375 775.55625a393.3 393.3 0 0 1-392.85-392.85c0-216.675 176.23125-392.85 392.85-392.85s392.85 176.23125 392.85 392.85a393.3 393.3 0 0 1-392.85 392.85z m0-729.50625c-185.625 0-336.6 151.03125-336.6 336.6S329.975 719.25 515.54375 719.25s336.6-151.03125 336.6-336.6-151.03125-336.6-336.6-336.6zM677.2625 410.83125H543.66875V544.425a28.125 28.125 0 0 1-56.25 0v-133.59375H353.825a28.125 28.125 0 0 1 0-56.25h133.59375v-133.59375a28.125 28.125 0 0 1 56.25 0V354.58124999999995h133.59375a28.125 28.125 0 0 1 0 56.25z" horiz-adv-x="1024" />
<glyph glyph-name="tuichufffpx" unicode="&#58892;" d="M693.23046875 14.5078125zM145.3203125 14.5078125zM870.68164063 777.75zM493.98242187-9.75C301.4140625-9.75 145.3203125 146.34375 145.3203125 338.91210937000005c0 145.72265625 89.47265625 270.61523438 216.38671875 322.64648438v-0.08789063c3.77929688 1.31835938 7.82226563 2.02148438 12.04101563 2.02148438 19.86328125 0 36.12304688-16.171875 36.12304687-36.03515625 0-15.64453125-10.01953125-29.09179688-24.08203125-34.01367188-98.87695313-42.09960938-168.31054688-140.18554688-168.31054688-254.53124999 0-152.75390625 123.75-276.50390625 276.50390626-276.50390626S770.48632813 186.24609375 770.48632813 338.91210937000005c0 114.2578125-69.34570313 212.43164063-168.31054688 254.53125001-14.0625 4.921875-23.99414063 18.36914063-23.99414063 34.01367187 0 19.95117188 16.08398438 36.03515625 36.03515626 36.03515625 4.21875 0 8.17382813-0.703125 12.04101562-2.02148438v0.08789063c127.00195313-52.11914063 216.38671875-176.92382813 216.38671875-322.64648438 0-192.56835938-156.09375-348.66210938-348.66210938-348.66210937z m1e-8 372.65625c-19.86328125 0-36.03515625 16.171875-36.03515625 36.12304688V723.69726563c0 19.86328125 16.171875 36.03515625 36.03515625 36.03515624 19.95117188 0 36.03515625-16.171875 36.03515625-36.03515625V399.1171875c0-20.0390625-16.08398438-36.2109375-36.03515625-36.2109375z" horiz-adv-x="1024" />
<glyph glyph-name="icon_jinzhi" unicode="&#58942;" d="M512.26367188 777.57421875c-217.44140625 0-393.75-176.30859375-393.75000001-393.75s176.30859375-393.75 393.75000001-393.75 393.75 176.30859375 393.74999999 393.75-176.30859375 393.75-393.74999999 393.75z m-1e-8-53.96484375c84.0234375 0 161.015625-30.67382813 220.42968751-81.38671875L253.77734375 163.39453125c-50.71289063 59.4140625-81.38671875 136.40625001-81.38671875 220.4296875 0 187.3828125 152.49023438 339.78515625 339.87304688 339.78515625z m0-679.65820313c-84.0234375 0-161.015625 30.67382813-220.34179687 81.38671875l478.91601563 478.91601563c50.71289063-59.4140625 81.38671875-136.40625001 81.38671874-220.34179688-0.17578125-187.47070313-152.578125-339.9609375-339.96093749-339.9609375z" horiz-adv-x="1024" />
<glyph glyph-name="jiazaizhong" unicode="&#59055;" d="M864 416H704c-17.6 0-32-14.4-32-32s14.4-32 32-32h160c17.6 0 32 14.4 32 32s-14.4 32-32 32z m-512-32c0 17.6-14.4 32-32 32H160c-17.6 0-32-14.4-32-32s14.4-32 32-32h160c17.6 0 32 14.4 32 32z m160-160c-17.6 0-32-14.4-32-32v-160c0-17.6 14.4-32 32-32s32 14.4 32 32V192c0 17.6-14.4 32-32 32z m0 544c-17.6 0-32-14.4-32-32v-160c0-17.6 14.4-32 32-32s32 14.4 32 32V736c0 17.6-14.4 32-32 32z m138.6-304c8.8-15.4 28.4-20.6 43.8-11.8l138.6 80c15.4 8.8 20.6 28.4 11.8 43.8s-28.4 20.6-43.8 11.8l-138.6-80c-15.4-9-20.6-28.4-11.8-43.8zM373.4 304c-8.8 15.4-28.4 20.6-43.8 11.8l-138.6-80c-15.4-8.8-20.6-28.4-11.8-43.8s28.4-20.6 43.8-11.8l138.6 80c15.4 9 20.6 28.4 11.8 43.8z m262.4-70.2c-8.8 15.4-28.4 20.6-43.8 11.8s-20.6-28.4-11.8-43.8l80-138.6c8.8-15.4 28.4-20.6 43.8-11.8 15.4 8.8 20.6 28.4 11.8 43.8l-80 138.6z m-272 471c-8.8 15.4-28.4 20.6-43.8 11.8-15.4-8.8-20.6-28.4-11.8-43.8l80-138.6c8.8-15.4 28.4-20.6 43.8-11.8s20.6 28.4 11.8 43.8l-80 138.6zM592 522.6c15.4-8.8 34.8-3.6 43.8 11.8l80 138.6c8.8 15.4 3.6 34.8-11.8 43.8-15.4 8.8-34.8 3.6-43.8-11.8l-80-138.6c-8.8-15.4-3.6-35 11.8-43.8zM432 245.4c-15.4 8.8-34.8 3.6-43.8-11.8l-80-138.6c-8.8-15.4-3.6-34.8 11.8-43.8 15.4-8.8 34.8-3.6 43.8 11.8l80 138.6c8.8 15.4 3.6 35-11.8 43.8z m400.8-9.6l-138.6 80c-15.4 8.8-34.8 3.6-43.8-11.8-8.8-15.4-3.6-34.8 11.8-43.8l138.6-80c15.4-8.8 34.8-3.6 43.8 11.8 8.8 15.4 3.6 34.8-11.8 43.8zM191.2 532.2l138.6-80c15.4-8.8 34.8-3.6 43.8 11.8s3.6 34.8-11.8 43.8l-138.6 80c-15.4 8.8-34.8 3.6-43.8-11.8-8.8-15.4-3.6-34.8 11.8-43.8z" horiz-adv-x="1024" />
<glyph glyph-name="gou1" unicode="&#58961;" d="M427.24832567 124.09486597c-11.30022289 0-16.95033472 5.65011183-28.25055758 11.30022364L127.79241038 406.60044653c-16.95033472 16.95033472-16.95033472 39.55078125 1e-8 56.50111597 16.95033472 16.95033472 39.55078125 16.95033472 56.50111672 0L427.24832567 214.49665212000002l418.10825904 418.10825827c16.95033472 16.95033472 39.55078125 16.95033472 56.50111596-1e-8 16.95033472-16.95033472 16.95033472-39.55078125 0-56.50111595L455.49888404 135.39508962000002c-11.30022289-5.65011183-16.95033472-11.30022289-28.25055837-11.30022366z" horiz-adv-x="1033" />
<glyph glyph-name="shalou" unicode="&#58926;" d="M795.35937501 753.140625H228.64062499c-11.953125 0-21.09375003 9.84375001-21.09374999 21.09375 0 11.953125 9.84375001 21.09375003 21.09375001 21.09375h566.71875c11.953125 0 21.09375003-9.84375001 21.09374999-21.09375 0.703125-11.25-9.140625-21.09375003-21.09375001-21.09375zM823.484375-38.578125H201.21874999c-12.65625001 0-23.203125 10.546875-23.20312499 23.203125 0 12.65625001 10.546875 23.203125 23.20312501 23.203125h622.26562499c12.65625001 0 23.203125-10.546875 23.203125-23.203125 0-12.65625001-10.546875-23.203125-23.203125-23.203125zM735.59375001 248.296875l-0.70312501 1.40625c-35.859375 62.578125-83.671875 103.359375-134.29687501 127.96875 50.625 25.3125 97.73437499 65.390625 134.29687501 127.96875l0.70312499 1.40625c35.859375 61.875 59.765625 146.25 63.98437501 258.75H758.09375001c-3.515625-104.0625-25.3125-181.40625001-58.359375-238.359375l-0.70312502-0.70312501C658.25 454.3125 612.546875 415.640625 553.484375 397.359375l-2.8125-0.70312499h-0.70312499c-1.40625001-0.703125-2.109375-1.40625001-3.51562501-2.10937501l-0.703125-0.70312499-1.40624999-1.40625001-1.40625001-1.40625001v-0.70312499c-0.703125-0.703125-1.40625001-2.109375-2.109375-3.515625l-0.703125-0.703125-1.40624999-4.921875v-7.734375l1.40624999-4.92187501 0.703125-0.70312499c0.703125-1.40625001 1.40625001-2.109375 2.109375-3.51562499v-0.703125l1.40625001-1.40625001V362.90624997l1.40624999-0.70312497 0.703125-0.70312501c0.703125-0.703125 2.109375-1.40625001 3.51562501-2.10937499h0.70312499l2.8125-1.40625c59.765625-18.98437499 104.765625-56.95312501 146.25000001-128.671875l0.70312499-1.40625001c17.578125-29.53125001 30.9375-65.390625 41.484375-106.875 2.109375-11.953125 9.84375001-37.96875001 11.25-71.71874999-33.046875 29.53125001-124.453125 50.625-234.14062501 52.03125002V426.1875c1.40625001 0 2.109375 0.703125 3.51562501 1.40625001v0.70312499l5.625 2.10937499h1.40625c40.078125 12.65625001 71.71875001 32.34375001 98.4375 58.35937501 28.125 28.125 49.921875 62.578125 64.6875 101.25 4.21875001 10.546875-0.703125 22.50000001-11.953125 26.71875001-10.546875 4.21875001-22.50000001-0.703125-26.71875001-11.25000001v-0.70312501c-12.65625001-32.34375001-30.9375-62.578125-54.84374999-86.48437499-21.796875-21.09375003-47.8125-37.96875001-80.859375-47.8125l-0.703125-0.70312499-2.109375-0.70312501-3.515625-0.703125-2.109375 0.703125-1.40625 0.70312501-2.109375 0.70312499c-32.34375001 10.546875-59.765625 26.71875001-80.859375 47.8125-24.609375 23.90625001-42.1875 53.4375-54.84375 86.48437501-4.21875001 10.546875-16.171875 16.171875-26.01562501 11.953125-10.546875-4.21875001-15.46875001-15.46875001-11.95312499-26.71875001 14.765625-38.671875 35.859375-73.125 64.6875-101.25 26.015625-26.015625 58.359375-45.703125 97.734375-58.35937501h0.703125l5.625-2.10937499 1.40625-0.70312501c0.703125-0.703125 1.40625001-0.703125 2.8125-1.40624999v-324.84375001c-102.65625001 0-191.953125-17.578125-234.14062499-42.18749998 1.40625001 16.875 4.921875 35.15625001 11.24999998 61.87500001 10.546875 42.1875 24.609375 77.34375001 41.484375 106.87499997l0.70312499 1.40625001c41.484375 71.71875001 86.484375 109.6875 146.95312502 128.671875l2.10937499 1.40625h0.703125c1.40625001 0.703125 2.109375 1.40625001 3.51562501 2.10937501l0.703125 0.70312499 1.40625 0.70312501v0.703125l1.40625 1.40625v0.70312498c0.703125 0.703125 1.40625001 2.109375 2.109375 3.51562501V369.9375c0.703125 1.40625001 1.40625001 3.515625 1.40625001 4.921875v7.03125c0 1.40625001-0.703125 3.515625-1.40625001 4.921875v0.703125c-0.703125 1.40625001-1.40625001 2.8125-2.109375 3.51562499v0.70312502l-1.40625 1.40624999-1.40625 1.40625-2.10937499-0.70312501c-1.40625001 0.703125-2.109375 1.40625001-3.51562501 2.10937501h-0.703125l-2.109375 0.70312501c-59.765625 18.28125001-105.46875001 56.95312501-146.953125 129.37499998l-0.703125 0.70312502c-32.34375001 56.95312501-54.140625 134.296875-58.35937499 238.359375h-41.48437501c4.21875001-112.50000001 28.125-196.171875 63.984375-258.75000002l0.703125-1.40624999C323.5625 442.359375 371.375 402.28125001 422 376.96874998c-50.625-24.609375-97.73437499-65.390625-134.296875-127.96874998l-0.703125-1.40625001c-33.75-59.0625-57.65624999-137.8125-62.578125-242.57812499h573.75c-4.921875 105.46875001-28.125 184.21875001-62.57812501 243.28125z" horiz-adv-x="1024" />
<glyph glyph-name="stop" unicode="&#59110;" d="M512 801.1875C281.56249999 801.1875 94.8125 614.43750001 94.8125 384s186.75-417.1875 417.1875-417.1875 417.1875 186.75 417.1875 417.1875S742.43750001 801.1875 512 801.1875z m261.84375002-679.03124999c-34.03125002-34.03125002-73.59375001-60.75000001-117.75000003-79.40625001-45.65625001-19.3125-94.125-29.0625-144.09374999-29.0625s-98.53125001 9.75-144.09375001 29.0625c-44.06250001 18.65625001-83.71875001 45.375-117.74999998 79.40625001-34.03125002 34.03125002-60.75000001 73.59375001-79.40625001 117.74999998-19.3125 45.65625001-29.0625 94.125-29.0625 144.09375001s9.75 98.53125001 29.0625 144.09374999c18.65625001 44.06250001 45.375 83.71875001 79.40625001 117.75 34.03125002 34.03125002 73.59375001 60.75000001 117.75 79.40625001 45.65625001 19.3125 94.125 29.0625 144.09374999 29.0625s98.53125001-9.75 144.09375001-29.0625c44.06250001-18.65625001 83.71875001-45.375 117.74999998-79.40625001 34.03125002-34.03125002 60.75000001-73.59375001 79.40625001-117.75 19.3125-45.65625001 29.0625-94.125 29.0625-144.09374999s-9.75-98.53125001-29.0625-144.09375001c-18.65625001-44.15625001-45.375-83.71875001-79.40625001-117.74999998zM362 234h300V534H362v-300z m46.875 253.125h206.25v-206.25H408.875V487.125z" horiz-adv-x="1024" />
<glyph glyph-name="timer" unicode="&#59230;" d="M535.4375 734.34375v20.53125h89.0625v46.875H399.5v-46.875h89.0625v-20.53125c-201.375-12.09375-360.9375-179.25-360.9375-383.625 0-212.25 172.125-384.375 384.375-384.375s384.375 172.125 384.375 384.375c0 204.375-159.5625 371.53125-360.9375 383.625z m215.25-622.3125c-31.03125-31.03125-67.125-55.3125-107.25-72.375-41.625-17.625-85.78125-26.53125-131.34375-26.53125s-89.8125 8.90625-131.34375 26.53125c-40.21875 16.96875-76.3125 41.34375-107.25 72.375-31.03125 31.03125-55.3125 67.125-72.375 107.25-17.625 41.625-26.53125 85.78125-26.53125 131.34375s8.90625 89.8125 26.53125 131.34375c16.96875 40.21875 41.34375 76.3125 72.375 107.25s67.125 55.3125 107.25 72.375c41.625 17.625 85.78125 26.53125 131.34375 26.53125s89.8125-8.90625 131.34375-26.53125c40.125-16.96875 76.21875-41.25 107.25-72.28125s55.3125-67.125 72.375-107.25c17.625-41.625 26.53125-85.78125 26.53125-131.34375s-8.90625-89.8125-26.53125-131.34375c-17.0625-40.21875-41.4375-76.3125-72.375-107.34375zM535.4375 623.15625h-46.875v46.875h46.875v-46.875z m-46.875-544.96875h46.875v-46.875h-46.875v46.875zM192.6875 374.0625h46.875v-46.875h-46.875v46.875z m638.625 0v-46.875h-46.875v46.875h46.875z m-312.46875-27.1875l155.53125-65.625-18.1875-43.21875-176.625 74.53125-69.46875 256.5 45.28125 12.28125 63.46875-234.46875z" horiz-adv-x="1024" />
<glyph glyph-name="jiantou-copy" unicode="&#58930;" d="M814.94826667 461.53386667l-274.65813334 274.65813333c-21.45066667 21.45066667-56.22293333 21.45066667-77.6736 0l-274.65813333-274.65813333c-21.45066667-21.45066667-21.45066667-56.22293333 0-77.6736s56.22293333-21.45066667 77.6736 0l180.89066667 180.89066666v-526.57493333c0-30.34986667 24.5824-54.93226667 54.93226666-54.93226667s54.93226667 24.5824 54.93226667 54.93226667v526.57493333l180.89066667-180.89066666c10.71146667-10.71253333 24.7744-16.09493333 38.83733333-16.09493334s28.1248 5.35573333 38.83733333 16.09493334c21.45066667 21.45066667 21.45066667 56.22293333 0 77.6736z" horiz-adv-x="1000" />
<glyph glyph-name="tingzhi" unicode="&#59054;" d="M512-42.666666549999945c-234.66666656 0-426.66666655 192-426.66666655 426.66666655s192 426.66666655 426.66666655 426.66666655 426.66666655-192 426.66666655-426.66666655-192-426.66666655-426.66666655-426.66666655z m0 53.33333343c208.00000031 0 373.33333312 165.33333375 373.33333312 373.33333312s-165.33333375 373.33333312-373.33333312 373.33333312-373.33333312-165.33333375-373.33333312-373.33333312 165.33333375-373.33333312 373.33333312-373.33333312zM351.99999969 544.00000031h320.00000062v-320.00000062H351.99999969z" horiz-adv-x="1024" />
<glyph glyph-name="yunsuan-dengyu" unicode="&#58884;" d="M984.615385 580.923077H39.384615a39.384615 39.384615 0 0 1 0-78.769231h945.23077a39.384615 39.384615 0 0 1 0 78.769231zM984.615385 265.846154H39.384615a39.384615 39.384615 0 0 1 0-78.769231h945.23077a39.384615 39.384615 0 0 1 0 78.769231z" horiz-adv-x="1024" />
<glyph glyph-name="bianji" unicode="&#58883;" d="M367.780625 344.0390625c-0.4996875-0.6375-0.999375-1.3040625-1.2225-2.1103125l-38.535-141.28125c-2.25-8.2246875 0.05625-17.086875 6.140625-23.3371875 4.55625-4.445625 10.558125-6.890625 16.948125-6.890625 2.11125 0 4.2234375 0.249375 6.3065625 0.80625l140.2790625 38.2575c0.223125 0 0.3346875-0.1940625 0.500625-0.1940625 1.610625 0 3.1959375 0.583125 4.39125 1.8075l375.106875 375.050625c11.1403125 11.154375 17.25375 26.353125 17.25375 42.8840625 0 18.7396875-7.94625 37.4653125-21.86625 51.3440625l-35.4253125 35.4796875c-13.89 13.92-32.645625 21.8803125-51.3721875 21.8803125-16.53 0-31.7278125-6.1134375-42.898125-17.240625l-375.0525-375.15c-0.3871875-0.36-0.2765625-0.88875-0.555-1.3059375m473.2115625 278.8378125l-37.258125-37.2309375-60.4021875 61.3603125 36.73125 36.73125c5.806875 5.833125 17.0578125 4.985625 23.728125-1.7090625l35.44875-35.480625c3.6975-3.6946875 5.8078125-8.611875 5.8078125-13.47375-0.0253125-3.988125-1.44375-7.6003125-4.055625-10.1971875m-406.5028125-284.728125l270.6684375 270.6834375 60.43125-61.4025-270.16875-270.15375-60.9309375 60.8728125zM385.173125 228.40312500000005l19.56 71.79375 52.1775-52.179375-71.7375-19.614375zM864.7484375 474.2475c-14.1984375 0-25.8403125-11.5434375-25.89375-25.9359375v-349.670625c0-18.3375-14.893125-33.2296875-33.25875-33.2296875H214.0821875c-18.3375 0-33.2859375 14.89125-33.2859375 33.2296875v570.73125c0 18.3534375 14.9484375 33.25875 33.2859375 33.25875h380.9690625c14.28 0 25.8684375 11.59875 25.8684375 25.880625 0 14.2528125-11.5884375 25.865625-25.8684375 25.865625H210.1371875c-44.70375 0-81.0871875-36.354375-81.0871875-81.08625v-578.596875c0-44.7309375 36.384375-81.0721875 81.0871875-81.0721875h599.375625c44.73375 0 81.103125 36.34125 81.103125 81.073125v353.784375c-0.0590625 14.2246875-11.67 25.768125-25.8675 25.768125" horiz-adv-x="1024" />
<glyph glyph-name="xiangmuguanli" unicode="&#58933;" d="M869.16209412 219.36987305000002l-21.34351731-6.72054292c0.62570572-4.54216003 1.34410858-9.0379715 1.34410859-13.81187437 0-4.70438003-0.78792573-9.31606293-1.45998002-13.78870012l21.48256302-6.7205429a19.23465729 19.23465729 0 0 0 13.07029724-24.4720459 20.43972016 20.43972016 0 0 0-25.51488876-12.4909401l-21.83017731 6.7437172c-4.54216003-8.18052293-10.19668579-15.80486298-16.70866012-22.5022316l13.25569153-17.5661087a18.86386872 18.86386872 0 0 0 3.63836287-14.50710297 18.93339158 18.93339158 0 0 0-8.15734863-12.58363724 20.74098587 20.74098587 0 0 0-28.2494545 4.28724289l-13.37156296 17.63563156a111.23657227 111.23657227 0 0 0-27.4151802-8.8757515v-21.41304016c0-10.70652008-9.06114578-19.44322586-20.25432586-19.44322585-11.17000581 0-20.27750015 8.66718293-20.27750016 19.44322585v21.41304016a112.673378 112.673378 0 0 0-27.39200592 8.8757515l-13.27886581-17.63563156a20.92638016 20.92638016 0 0 0-28.36532593-4.28724289 18.77117157 18.77117157 0 0 0-4.44946289 27.09074021l13.39473725 17.7283287a106.36997224 106.36997224 0 0 0-17.33436585 22.17779159l-21.25082016-6.62784576c-10.70652008-3.38344574-22.10826875 2.27108002-25.53806305 12.4909401a19.28100586 19.28100586 0 0 0 12.97760009 24.4488716l21.34351731 6.60467149c-0.57935715 4.61168289-1.29776001 9.17701721-1.29776001 13.90457153 0 4.75072861 0.76475144 9.29288864 1.45998001 13.85822296l-21.50573731 6.69736862c-10.6833458 3.33709717-16.43056869 14.27536011-12.97760009 24.4720459 3.40662002 10.19668579 14.83154297 15.78168869 25.53806305 12.51411438l21.71430588-6.81324004a107.29694367 107.29694367 0 0 0 16.77818298 22.52540588l-13.25569152 17.51976013a18.95656586 18.95656586 0 0 0 4.44946289 27.16026306 20.8568573 20.8568573 0 0 0 28.36532592-4.33359146l13.27886581-17.63563156a110.5413437 110.5413437 0 0 0 27.4383545 8.92210006v21.36669159c0 10.75286865 9.06114578 19.46640015 20.27750015 19.46640015 11.14683152 0 20.23115158-8.66718293 20.23115158-19.46640015v-21.34351731c9.71002579-1.69172287 18.79434585-4.9361229 27.41518021-8.92210006l13.34838868 17.63563156a20.90320587 20.90320587 0 0 0 28.29580306 4.33359147 18.91021729 18.91021729 0 0 0 4.49581146-27.16026306l-13.4642601-17.65880586c6.62784576-6.76689148 12.69950867-14.04361725 17.33436584-22.1777916l21.34351731 6.5814972a20.46289444 20.46289444 0 0 0 25.51488876-12.51411438c3.4529686-10.15033722-2.41012573-21.11177444-13.09347152-24.42569732z m-131.44454956 47.41458893c-39.14136887 0-70.93648911-30.45101167-70.93648911-67.9933548s31.77194595-67.97018051 70.93648911-67.97018052c39.11819458 0 70.89014053 30.42783738 70.89014053 67.97018052 0 37.54234314-31.7024231 67.9933548-70.89014053 67.9933548zM409.75505066 279.36809920999997c0-19.00291443 15.34137727-34.36746597 34.29794312-34.36746598h82.33823775a214.17675018 214.17675018 0 0 0 28.17993165 68.68858339h-110.5181694a34.29794312 34.29794312 0 0 1-34.29794312-34.32111741zM786.0822792 614.63049317s-286.78178787-0.30126572-271.48675918-1e-8c-16.33787155-0.30126572-24.65744018 8.64400864-24.65744018 8.64400865s-11.40174865 19.72131728-31.98051453 50.68216322c-21.45938873 32.53669739-46.44126893 27.27613449-46.44126893 27.2761345H200.35220337c-58.56142043 0-59.14077758-56.35986328-59.14077759-56.35986328v-509.20858383c0-62.77914048 47.4609375-55.08527756 47.4609375-55.08527756h367.98448563a213.82913589 213.82913589 0 0 0-21.55208588 42.91877747H219.35511779a34.9931717 34.9931717 0 0 0-35.03952026 35.10904311V521.93334961c0 19.39687729 15.6194687 35.01634598 35.03952026 35.01634597h536.67011263c19.42005157 0 35.03952026-15.6194687 35.03952026-35.01634597v-113.66987228a213.20343018 213.20343018 0 0 0 43.08099746-15.99025726V566.89146424c-0.02317429 52.74467468-48.06346894 47.73902893-48.06346894 47.73902892z m-109.63754654-165.13996125H444.07616806c-18.95656586 0-34.29794312-15.34137727-34.29794312-34.3211174s15.34137727-34.32111741 34.29794312-34.3211174h176.98202133a214.91832734 214.91832734 0 0 0 89.4990921 32.44400025c0.02317429 0.62570572 0.18539429 1.22823715 0.18539429 1.87711715 0 18.97974014-15.31820298 34.32111741-34.29794312 34.32111741zM316.61759567 315.98347091999995a36.6153717 36.6153717 0 1 1 0-73.30026627 36.66172028 36.66172028 0 0 1 0 73.30026627z m0 135.82448959a36.66172028 36.66172028 0 1 1-0.04634857-73.32344055 36.66172028 36.66172028 0 0 1 0.04634857 73.32344056z" horiz-adv-x="1025" />
<glyph glyph-name="yilaiguanxi" unicode="&#59020;" d="M561.43847656 581.75390625H907.5078125v-49.43847656H561.43847656zM116.4921875 235.68457031000003h346.06933594V186.24609375H116.4921875zM314.24609375 37.930664060000026h593.26171875v-49.43847656H314.24609375zM116.4921875 779.5078125h593.26171875v-49.43847656H116.4921875zM660.31542969 779.5078125H709.75390625v-148.31542969h-49.43847656zM314.24609375 136.80761718999997h49.43847656V-11.5078125H314.24609375zM116.4921875 779.5078125h49.43847656v-593.26171875H116.4921875zM858.06933594 581.75390625h49.43847656v-593.26171875h-49.43847656zM349.20239283 581.75390625L720.50512721 210.43798803000004l-34.95629909-34.95629832L314.24609375 546.79101563z" horiz-adv-x="1024" />
<glyph glyph-name="erji-xiaxianjilu" unicode="&#60086;" d="M649.109375 162.515625l-110.7421875-110.7421875V489.46875c0 15.8203125-10.546875 26.3671875-26.3671875 26.3671875s-26.3671875-10.546875-26.3671875-26.3671875v-437.6953125l-110.7421875 110.7421875c-10.546875 10.546875-26.3671875 10.546875-36.9140625 0-10.546875-10.546875-10.546875-26.3671875 0-36.9140625l152.9296875-158.203125s5.2734375-5.2734375 10.546875-5.2734375h26.3671875s5.2734375 0 5.2734375 5.2734375l152.9296875 158.203125c10.546875 10.546875 10.546875 26.3671875 0 36.9140625-10.546875 10.546875-26.3671875 10.546875-36.9140625 0zM512 805.875C295.7890625 805.875 116.4921875 626.578125 116.4921875 410.3671875c0-89.6484375 31.640625-179.296875 89.6484375-253.125 5.2734375-5.2734375 10.546875-10.546875 21.09375-10.546875 5.2734375 0 10.546875 0 15.8203125 5.2734375 10.546875 10.546875 10.546875 26.3671875 5.2734375 36.9140625C195.59375 252.1640625 169.2265625 331.265625 169.2265625 410.3671875 169.2265625 600.2109375 322.15625 753.140625 512 753.140625s342.7734375-152.9296875 342.7734375-342.7734375c0-79.1015625-26.3671875-158.203125-79.1015625-216.2109375-10.546875-10.546875-5.2734375-26.3671875 5.2734375-36.9140625 10.546875-10.546875 26.3671875-5.2734375 36.9140625 5.2734375 58.0078125 68.5546875 89.6484375 158.203125 89.6484375 253.125 0 210.9375-179.296875 390.234375-395.5078125 390.234375z" horiz-adv-x="1024" />
<glyph glyph-name="daima" unicode="&#58939;" d="M410.86741638 14.026870970000004h-25.36135911c-65.78600408 0-109.83742476 9.76578892-132.16367663 29.29736674-22.32335509 19.53157782-33.48684311 58.46437811-33.4868431 116.79622829v79.18363809c0 28.76870334-8.12258721 53.57894898-24.3699342 74.43146109-16.24734699 20.85251212-18.23816299 31.27804399-52.31812299 31.27804399v56.61478043c37.25049198 0 40.03357887 8.84388685 54.69565988 26.52731538 14.66280519 17.68487692 21.99239731 43.6835289 21.99239731 77.99595594V609.09183884c0 58.32967759 11.16348802 97.1973002 33.4868431 116.59707426C275.6686325 745.0879629799999 319.72294998 754.78857422 385.50533308 754.78857422h25.3620833v-56.61478043h-27.7396202c-36.98616028 0-61.09465957-5.74287772-72.32260108-17.2228396-11.22794151-11.48285866-16.84263647-35.96431911-16.84263647-73.44438135v-106.10564052c0-46.45502866-9.11473631-77.66644657-27.34565735-93.63352955-18.22657585-15.96925556-30.58571219-27.5172919-83.42525661-34.64555741 51.25427843-6.06876612 63.21727931-17.7493304 82.23829866-35.03662347 19.02174353-17.28874147 28.5326153-48.49943519 28.5326153-93.63352955v-82.74885713c0-37.74366975 5.61469495-62.29248047 16.84263647-73.6406386 11.22794151-11.34815812 35.3364408-17.02368557 72.32260108-17.02368558h27.7396202v-57.01164006z m205.0554961 0h25.36135912c65.78527987 0 109.83742476 9.76578892 132.16367662 29.29736674 22.32335509 19.53157782 33.48684311 58.46437811 33.4868431 116.79622829v79.18363809c0 28.76870334 8.12258721 53.57894898 24.36921001 74.43146109 16.24807119 20.85251212 18.2388872 31.27804399 52.31884718 31.27804399v56.61478043c-37.25049198 0-40.03357887 8.84388685-54.69565988 26.52731538-14.66280519 17.68487692-21.99239731 43.6835289-21.99239731 77.99595594V609.09183884c0 58.32967759-11.16348802 97.1973002-33.4868431 116.59707426C751.12097216 745.0879629799999 707.06955147 754.78857422 641.28499579 754.78857422H615.92218828v-56.61478043h27.73962021c36.98616028 0 61.09393537-5.74287772 72.32187688-17.2228396 11.22794151-11.48285866 16.84336066-35.96431911 16.84336066-73.44438135v-106.10564052c0-46.45502866 9.11473631-77.66644657 27.34348477-93.63352955 18.22874843-15.96925556 30.59005737-27.5172919 83.42742918-34.64555741-51.25500261-6.06876612-63.21727931-17.7493304-82.23902284-35.03662347-19.02101934-17.28874147-28.53189111-48.49943519-28.53189111-93.63352955v-82.74885713c0-37.74366975-5.61541915-62.29248047-16.84336066-73.6406386-11.22794151-11.34815812-35.33571661-17.02368557-72.32187688-17.02368558H615.92218828v-57.01164006zM351.97214138 239.33017515999995h81.33450152V158.89802241999996h-81.33450152V239.33017515999995z m121.73959315 0h81.33450151V158.89802241999996H473.71173453V239.33017515999995z m121.73886895 0h81.33450151V158.89802241999996h-81.33450151V239.33017515999995z" horiz-adv-x="1027" />
<glyph glyph-name="wendangxiazai1" unicode="&#58920;" d="M275.681468-72.553688h182.140477a27.525872 27.525872 0 0 1 27.441321 27.441321 27.516477 27.516477 0 0 1-27.441321 27.441321H275.681468c-58.997431 0-107.022092 48.024661-107.022092 107.031486V700.989064c0 58.997431 48.015266 107.022092 107.022092 107.022092h487.424c58.997431 0 107.022092-48.015266 107.022092-107.022092v-224.312367a27.525872 27.525872 0 0 1 27.441321-27.441321 27.516477 27.516477 0 0 1 27.441321 27.441321V700.989064c0 89.181945-72.713394 161.904734-161.89534 161.904734H275.681468c-89.181945 0-161.904734-72.722789-161.904734-161.904734v-611.628624c0.685798-89.181945 72.722789-161.914128 161.904734-161.914128zM290.017468 601.858349h398.23266a27.525872 27.525872 0 0 1 27.441322 27.441321 27.516477 27.516477 0 0 1-27.441322 27.441321h-398.23266a27.525872 27.525872 0 0 1-27.441321-27.441321 27.525872 27.525872 0 0 1 27.441321-27.441321zM546.928734 412.014385a27.525872 27.525872 0 0 1-27.450716 27.441321H290.017468c-15.08756 0-27.441321-12.344367-27.441321-27.441321s12.344367-27.441321 27.441321-27.441321h228.784147c15.773358 0.009394 28.127119 12.353761 28.127119 27.441321zM290.017468 222.161028c-15.08756 0-27.441321-12.344367-27.441321-27.441322s12.344367-27.441321 27.441321-27.441321h70.317798c15.08756 0 27.441321 12.344367 27.441321 27.441321s-12.344367 27.441321-27.441321 27.441322h-70.317798zM715.353248 381.106495c-119.34767 0-217.125578-97.204844-217.125578-217.125578 0-119.920734 97.214239-217.134972 217.125578-217.134972 119.338275 0 217.134972 97.223633 217.134972 217.134972 0 119.338275-97.223633 217.125578-217.134972 217.125578z m0-383.643009c-91.756037 0-165.953761 74.18833-165.953762 165.953762 0 91.756037 74.761394 165.953761 165.953762 165.953761s165.953761-74.197725 165.953761-165.953761-74.207119-165.953761-165.953761-165.953762zM704.371083 63.891963c0.685798 0 0.685798 0 0 0l1.371596-1.371596 0.685798-0.676404s0.676404 0 0.676404-0.685798c0 0 0.685798 0 0.685798-0.685798 0 0 0.685798 0 0.685798-0.676404 0 0 0.676404 0 0.676404-0.685798 0 0 0.695193 0 0.695192-0.685798h12.344367s0.676404 0 0.676404 0.685798c0 0 0.685798 0 0.685798 0.685798 0 0 0.685798 0 0.685798 0.676404 0 0 0.676404 0 0.676404 0.685798 0 0 0.685798 0 0.685798 0.685798l0.685798 0.676404 0.685799 0.695193 0.685798 0.676403 93.982532 93.306129c6.857982 6.857982 6.857982 18.525945 0 25.383926-6.848587 6.848587-18.525945 6.848587-25.383927 0l-63.11222-63.121614V251.697321c0 9.601174-8.238972 17.840147-17.830752 17.840147-9.601174 0-17.840147-8.238972-17.840147-17.840147v-132.236917L634.363303 182.582018c-6.857982 6.848587-18.525945 6.848587-25.383927 0-6.857982-6.857982-6.857982-18.525945 0-25.383926l95.391707-93.306129z" horiz-adv-x="1024" />
<glyph glyph-name="lishi" unicode="&#59118;" d="M512-4.125C297.636875-4.125 123.875 169.63687500000003 123.875 384S297.636875 772.125 512 772.125s388.125-173.761875 388.125-388.125c0-10.918125-0.455625-21.718125-1.333125-32.4l-50.45625 4.168125c0.77625 9.34875 1.164375 18.765 1.164375 28.231875 0 186.40125-151.09875 337.5-337.5 337.5S174.5 570.40125 174.5 384s151.09875-337.5 337.5-337.5v-50.625z m-25.3125 413.4375V603.375h50.625v-244.6875H343.25v50.625h143.4375z m92.8125-168.75v50.625h320.625v-50.625H579.5z m0-118.125v50.625h320.625v-50.625H579.5z m0-118.125v50.625h320.625v-50.625H579.5z" horiz-adv-x="1024" />
<glyph glyph-name="fangda" unicode="&#58890;" d="M970.14518518-29.483614819999957l-266.99851851 266.87715557c54.61333333 64.80782222 87.5026963 148.4269037 87.5026963 239.69185184 0 205.58885925-167.23816297 372.94838518-372.94838519 372.94838519S44.87395555 682.79561482 44.87395555 477.08539259s167.23816297-372.94838518 372.9483852-372.94838518c92.35721482 0 176.82583703 33.7389037 241.99774814 89.56586667l266.75579259-266.7557926c5.94678518-6.06814815 13.83537778-8.98085925 21.72397037-8.98085926s15.77718518 3.03407408 21.72397037 8.98085926c12.1362963 12.01493333 12.1362963 31.55437037 0.12136296 43.5693037zM417.82234075 165.78939259000003c-171.60722963 0-311.296 139.68877037-311.296 311.296 0 171.72859259 139.68877037 311.296 311.296 311.296s311.296-139.68877037 311.296-311.296-139.68877037-311.296-311.296-311.296zM564.18607408 497.7170963h-121.12023705v121.12023703c0 16.99081482-13.83537778 30.82619259-30.82619258 30.82619259s-30.82619259-13.83537778-30.8261926-30.82619259v-121.12023703h-121.12023703c-16.99081482 0-30.82619259-13.83537778-30.8261926-30.8261926s13.83537778-30.82619259 30.8261926-30.82619259h121.12023703v-121.12023703c0-16.99081482 13.83537778-30.82619259 30.8261926-30.8261926s30.82619259 13.83537778 30.82619258 30.8261926v121.12023703H564.18607408c16.99081482 0 30.82619259 13.83537778 30.82619259 30.82619259S581.17688889 497.7170963 564.18607408 497.7170963z" horiz-adv-x="1024" />
<glyph glyph-name="suoxiao" unicode="&#58895;" d="M970.14518518-29.483614819999957l-266.99851851 266.87715557c54.61333333 64.80782222 87.5026963 148.4269037 87.5026963 239.69185184 0 205.58885925-167.23816297 372.94838518-372.94838519 372.94838519S44.87395555 682.79561482 44.87395555 477.08539259s167.23816297-372.94838518 372.9483852-372.94838518c92.35721482 0 176.82583703 33.7389037 241.99774814 89.56586667l266.75579259-266.7557926c5.94678518-6.06814815 13.83537778-8.98085925 21.72397037-8.98085926s15.77718518 3.03407408 21.72397037 8.98085926c12.1362963 12.01493333 12.1362963 31.55437037 0.12136296 43.5693037zM417.82234075 165.78939259000003c-171.60722963 0-311.296 139.68877037-311.296 311.296 0 171.72859259 139.68877037 311.296 311.296 311.296s311.296-139.68877037 311.296-311.296-139.68877037-311.296-311.296-311.296zM564.18607408 497.7170963H260.41457778c-16.99081482 0-30.82619259-13.83537778-30.8261926-30.8261926s13.83537778-30.82619259 30.8261926-30.82619259H564.18607408c16.99081482 0 30.82619259 13.83537778 30.82619259 30.82619259S581.17688889 497.7170963 564.18607408 497.7170963z" horiz-adv-x="1024" />
<glyph glyph-name="daohang" unicode="&#58889;" d="M838.37634278 426.10510254H183.975708c-23.23608398 0-42.26989747-19.03381348-42.26989745-42.26989746 0-23.23608398 19.03381348-42.26989747 42.26989746-42.26989747h654.40063477c23.23608398 0 42.26989747 19.03381348 42.26989745 42.26989747-0.08239747 23.23608398-19.03381348 42.26989747-42.26989745 42.26989746zM838.37634278 713.83703614H183.975708c-23.23608398 0-42.26989747-19.03381348-42.26989745-42.26989747 0-23.23608398 19.03381348-42.26989747 42.26989746-42.26989746h654.40063477c23.23608398 0 42.26989747 19.03381348 42.26989745 42.26989746-0.08239747 23.31848145-19.03381348 42.26989747-42.26989745 42.26989746zM838.37634278 138.29077148H183.975708c-23.23608398 0-42.26989747-19.03381348-42.26989745-42.26989746 0-23.23608398 19.03381348-42.26989747 42.26989746-42.26989746h654.40063477c23.23608398 0 42.26989747 19.03381348 42.26989745 42.26989747-0.08239747 23.23608398-19.03381348 42.26989747-42.26989745 42.26989745z" horiz-adv-x="1024" />
<glyph glyph-name="shijianguanli" unicode="&#58906;" d="M567.03125 58.36458332999996H207.5c-54.375 0-98.625 44.25-98.625 98.625V624.61458333c0 54.375 44.25 98.625 98.625 98.625h528c54.375 0 98.625-44.25 98.625-98.625v-187.875c0-12.9375-10.5-23.4375-23.4375-23.4375s-23.4375 10.5-23.4375 23.4375V624.61458333c0 28.5-23.25 51.75-51.75 51.75H207.5c-28.5 0-51.75-23.25-51.75-51.75v-467.625c0-28.5 23.25-51.75 51.75-51.75h359.53125c12.9375 0 23.4375-10.5 23.4375-23.4375s-10.5-23.4375-23.4375-23.4375zM810.6875 549.89583333H133.90625c-12.9375 0-23.4375 10.5-23.4375 23.4375s10.5 23.4375 23.4375 23.4375h676.78125c12.9375 0 23.4375-10.5 23.4375-23.4375s-10.5-23.4375-23.4375-23.4375zM588.03125 624.70833333c-12.9375 0-23.4375 10.5-23.4375 23.4375V752.20833333c0 12.9375 10.5 23.4375 23.4375 23.4375s23.4375-10.5 23.4375-23.4375v-104.0625c0-12.9375-10.5-23.4375-23.4375-23.4375zM355.8125 624.70833333c-12.9375 0-23.4375 10.5-23.4375 23.4375V752.20833333c0 12.9375 10.5 23.4375 23.4375 23.4375s23.4375-10.5 23.4375-23.4375v-104.0625c0-12.9375-10.5-23.4375-23.4375-23.4375zM282.78125 421.64583333h-29.15625c-4.875 0-8.90625 4.03125-8.90625 8.90625V459.70833333c0 4.875 4.03125 8.90625 8.90625 8.90625h29.15625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c-0.09375-4.96875-4.03125-8.90625-8.90625-8.90625zM443.5625 421.64583333h-29.0625c-4.875 0-8.90625 4.03125-8.90625 8.90625V459.70833333c0 4.875 4.03125 8.90625 8.90625 8.90625h29.0625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c0-4.96875-4.03125-8.90625-8.90625-8.90625zM604.4375 421.64583333h-29.15625c-4.875 0-8.90625 4.03125-8.90625 8.90625V459.70833333c0 4.875 4.03125 8.90625 8.90625 8.90625h29.15625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c0-4.96875-4.03125-8.90625-8.90625-8.90625zM282.78125 309.14583332999996h-29.15625c-4.875 0-8.90625 4.03125-8.90625 8.90625V347.20833332999996c0 4.875 4.03125 8.90625 8.90625 8.90625h29.15625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c-0.09375-4.96875-4.03125-8.90625-8.90625-8.90625zM443.5625 309.14583332999996h-29.0625c-4.875 0-8.90625 4.03125-8.90625 8.90625V347.20833332999996c0 4.875 4.03125 8.90625 8.90625 8.90625h29.0625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c0-4.96875-4.03125-8.90625-8.90625-8.90625zM280.90625 196.64583332999996h-29.15625c-4.875 0-8.90625 4.03125-8.90625 8.90625V234.70833332999996c0 4.875 4.03125 8.90625 8.90625 8.90625h29.15625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c-0.09375-4.875-4.03125-8.90625-8.90625-8.90625zM441.6875 196.64583332999996h-29.0625c-4.875 0-8.90625 4.03125-8.90625 8.90625V234.70833332999996c0 4.875 4.03125 8.90625 8.90625 8.90625h29.0625c4.875 0 8.90625-4.03125 8.90625-8.90625v-29.15625c0-4.875-4.03125-8.90625-8.90625-8.90625zM695.9375 20.77083332999996c-62.8125 0-121.875 24.46875-166.21875 68.90625-44.4375 44.4375-68.90625 103.5-68.90625 166.21875s24.46875 121.875 68.90625 166.21875c44.4375 44.4375 103.5 68.90625 166.21875 68.90625s121.875-24.46875 166.21875-68.90625c44.4375-44.4375 68.90625-103.5 68.90625-166.21875s-24.46875-121.875-68.90625-166.21875c-44.34375-44.4375-103.40625-68.90625-166.21875-68.90625z m0 423.375c-103.78125 0-188.25-84.46875-188.25-188.25s84.46875-188.25 188.25-188.25S884.1875 152.11458332999996 884.1875 255.89583332999996s-84.46875 188.25-188.25 188.25zM787.625 177.23958332999996c-1.59375 0-3.1875 0.1875-4.78125 0.46875L695.75 195.80208332999996c-13.5 2.8125-23.25 14.8125-23.25 28.59375v86.71875c0 12.9375 10.5 23.4375 23.4375 23.4375s23.4375-10.5 23.4375-23.4375v-72.28125l73.03125-15.1875c12.65625-2.625 20.8125-15 18.1875-27.75-2.34375-11.0625-12.09375-18.65625-22.96875-18.65625z m-82.3125 64.5z" horiz-adv-x="1024" />
<glyph glyph-name="shujuku" unicode="&#61172;" d="M512 772.528125c-202.14375 0-354.58125-72.1875-354.58125-167.896875v-441.2625c0-95.71875 152.446875-167.896875 354.58125-167.896875s354.58125 72.1875 354.58125 167.896875V604.63125c0 95.71875-152.4375 167.896875-354.58125 167.896875zM512 365.25c-149.240625 0-290.353125 50.371875-290.353125 103.640625V505.875c64.940625-43.4625 172.153125-69.159375 290.353125-69.159375S737.403125 462.440625 802.353125 505.875v-37.05C802.353125 415.584375 661.240625 365.25 512 365.25z m0-152.8125c-149.240625 0-290.353125 50.371875-290.353125 103.659375V370.125c64.93125-43.4625 172.14375-69.159375 290.353125-69.159375s225.421875 25.696875 290.353125 69.159375v-54C802.353125 262.8375 661.240625 212.4375 512 212.4375z m-290.353125 4.9125C286.596875 173.91562499999998 393.8 148.21875 512 148.21875s225.403125 25.696875 290.353125 69.15v-54c0-53.2875-141.1125-103.659375-290.353125-103.659375s-290.353125 50.371875-290.353125 103.659375zM512 500.971875c-149.240625 0-290.353125 50.38125-290.353125 103.659375S362.759375 708.290625 512 708.290625s290.353125-50.38125 290.353125-103.659375S661.240625 500.971875 512 500.971875z m0 0" horiz-adv-x="1024" />
<glyph glyph-name="tiaoduzhongxin" unicode="&#59026;" d="M646.435754 661.452514H503.418994c-57.206704 0-108.692737 51.486034-108.692737 108.692737 0 57.206704 51.486034 108.692737 108.692737 108.692738h143.01676c57.206704 0 108.692737-51.486034 108.692738-108.692738 0-62.927374-51.486034-108.692737-108.692738-108.692737z m0-400.446927H503.418994c-57.206704 0-108.692737 51.486034-108.692737 108.692737 0 57.206704 51.486034 108.692737 108.692737 108.692737h143.01676c57.206704 0 108.692737-51.486034 108.692738-108.692737 0-57.206704-51.486034-108.692737-108.692738-108.692737z m0-389.005587H503.418994c-57.206704 0-108.692737 51.486034-108.692737 108.692737 0 57.206704 51.486034 108.692737 108.692737 108.692738h143.01676c57.206704 0 108.692737-51.486034 108.692738-108.692738 0-57.206704-51.486034-108.692737-108.692738-108.692737z m-411.888268 80.089385c-125.854749 0-234.547486 102.972067-234.547486 234.547487 0 125.854749 102.972067 234.547486 234.547486 234.547486h40.044693c22.882682 0 40.044693-17.162011 40.044693-40.044693 0-22.882682-17.162011-40.044693-40.044693-40.044693h-40.044693c-85.810056 0-154.458101-68.648045-154.458101-154.4581 0-85.810056 68.648045-154.458101 154.458101-154.458101 22.882682 0 40.044693-17.162011 40.044693-40.044693 0-22.882682-17.162011-40.044693-40.044693-40.044693z m0 0M343.240223-2.145251l-114.413407-120.134079v234.547486l114.413407-114.413407z m566.346369 360.402234h-40.044693c-22.882682 0-40.044693 17.162011-40.044692 40.044693 0 22.882682 17.162011 40.044693 40.044692 40.044693h40.044693c85.810056 0 154.458101 68.648045 154.458101 154.4581 0 85.810056-68.648045 154.458101-154.458101 154.458101-22.882682 0-40.044693 17.162011-40.044693 40.044693 0 22.882682 17.162011 40.044693 40.044693 40.044692C1035.441341 827.351955 1144.134078 724.379888 1144.134078 592.804469s-102.972067-234.547486-234.547486-234.547486z m0 0M800.893855 775.865922L915.307263 896v-234.547486l-114.413408 114.413408z m0 0" horiz-adv-x="1144" />
<glyph glyph-name="shubiaozhizhen" unicode="&#59265;" d="M777.06666667 303.67999999999995c9.81333333-9.49333333 12.05333333-20.48 6.72-32.85333333-5.44-12.69333333-14.72-18.98666667-28.16-18.98666667H573.65333333l95.78666667-226.66666667c3.2-7.89333333 3.2-15.68 0-23.36-3.2-7.57333333-8.64-13.22666667-16.21333333-16.64l-84.37333334-35.73333333c-7.89333333-3.2-15.68-3.2-23.36 0-7.57333333 3.2-13.22666667 8.64-16.64 16.21333333l-90.98666666 215.25333334-148.48-148.8c-5.97333333-5.97333333-13.22666667-9.06666667-21.44-9.06666667-3.84 0-7.57333333 0.85333333-11.41333334 2.45333333-12.69333333 5.44-18.98666667 14.72-18.98666666 28.16V769.81333333c0 13.33333333 6.29333333 22.72 18.98666666 28.16 3.84 1.6 7.57333333 2.45333333 11.41333334 2.45333334 8.64 0 15.68-2.98666667 21.44-9.06666667l487.68-487.68z" horiz-adv-x="1024" />
<glyph glyph-name="yuandian" unicode="&#59330;" d="M881.38666668 598.18666667C919.46666667 532.8000000100001 938.66666667 461.44 938.66666667 384s-19.09333334-148.80000001-57.28000001-214.18666667C843.20000001 104.53333333 791.46666667 52.69333332999997 726.18666667 14.613333320000038S589.44-42.66666667000004 512-42.66666667000004s-148.80000001 19.09333334-214.18666667 57.28000001c-65.28 38.08000001-117.01333334 89.81333333-155.30666666 155.30666665C104.42666666 235.19999999000004 85.33333333 306.55999999999995 85.33333333 384c0 77.33333334 19.09333334 148.69333333 57.28000001 214.18666667 38.08000001 65.28 89.81333333 117.01333334 155.30666665 155.30666666C363.19999999 791.46666667 434.56 810.66666667 512 810.66666667c77.33333334 0 148.69333333-19.09333334 214.18666667-57.28000001C791.46666667 715.2000000099999 843.20000001 663.46666667 881.38666668 598.18666667z m-217.70666668 47.36c-46.29333333 26.98666668-96.85333333 40.53333333-151.68 40.53333332s-105.38666667-13.54666668-151.68-40.53333332-82.98666667-63.68000001-109.97333334-109.97333335-40.53333333-96.85333333-40.53333332-151.67999998c0-54.82666667 13.54666668-105.38666667 40.53333332-151.68s63.68000001-82.98666667 109.97333334-109.97333334c46.29333333-26.98666668 96.85333333-40.53333333 151.68-40.53333333s105.38666667 13.54666668 151.68 40.53333333c46.29333333 26.98666668 82.98666667 63.68000001 109.97333334 109.97333334 26.98666668 46.29333333 40.53333333 96.85333333 40.53333332 151.68s-13.54666668 105.38666667-40.53333335 151.68c-27.09333333 46.29333333-63.78666667 82.98666667-109.97333331 109.97333333z m-51.09333334-161.06666667c27.84000001-27.84000001 41.70666668-61.33333334 41.70666667-100.58666668s-13.86666667-72.74666667-41.70666667-100.58666666c-27.84000001-27.84000001-61.33333334-41.70666668-100.58666666-41.70666667s-72.74666667 13.86666667-100.58666668 41.70666667c-27.84000001 27.84000001-41.70666668 61.33333334-41.70666665 100.58666668s13.86666667 72.74666667 41.70666667 100.58666666c27.84000001 27.84000001 61.33333334 41.70666668 100.58666666 41.70666668s72.74666667-13.86666667 100.58666668-41.70666668z" horiz-adv-x="1024" />
<glyph glyph-name="-Tree-Structure" unicode="&#58935;" d="M632 714v-105l-240-167.82V504H92v-240h300V326.82000000000005l240-167.82V54h300v240H632V231.17999999999995L413.57 384 632 536.8199999999999V474h300V714H632z m60-60h180v-120h-180V654zM152 444h180v-120H152v120z m540-210h180v-120h-180v120z" horiz-adv-x="1024" />
<glyph glyph-name="xia" unicode="&#58907;" d="M512 271.67999999999995l264.32 293.76a32 32 0 1 0 47.36-42.88l-288-320a32 32 0 0 0-47.36 0l-288 320a32 32 0 0 0 47.36 42.88z" horiz-adv-x="1024" />
<glyph glyph-name="zanting" unicode="&#58900;" d="M899.09375001 547.59375001c-21.09375001 49.96875001-51.375 94.875-89.90625001 133.40624999-38.53125001 38.53125001-83.4375 68.8125-133.40625001 89.90625001C624.03125001 792.75 569.09375001 803.90625001 512.46875001 803.90625001c-56.625 0-111.5625-11.0625-163.31250002-33.00000002-49.96875001-21.09375001-94.875-51.375-133.40624999-89.90624999-38.53125001-38.53125001-68.8125-83.4375-89.90625001-133.40625001-21.9375-51.75-33-106.6875-32.99999998-163.31249998s11.0625-111.5625 33-163.31250002c21.09375001-49.96875001 51.375-94.875 89.90624999-133.40624999s83.4375-68.8125 133.40625001-89.90625001c51.75-21.9375 106.6875-33 163.31249998-32.99999998 56.625 0 111.5625 11.0625 163.31250002 33 49.96875001 21.09375001 94.875 51.375 133.40624999 89.90624999s68.8125 83.4375 89.90625001 133.40625001c21.9375 51.75 33 106.6875 32.99999998 163.31249998s-11.0625 111.5625-33 163.31250002zM761.46875001 135.1875c-66.46875001-66.46875001-154.96875001-103.125-249.00000002-103.125s-182.53125001 36.65625001-248.99999998 103.125c-66.46875001 66.46875001-103.125 154.96875001-103.12500002 249 0 94.03125001 36.65625001 182.53125001 103.125 249 66.46875001 66.46875001 154.96875001 103.125 249.00000002 103.125s182.53125001-36.65625001 248.99999998-103.125c66.46875001-66.46875001 103.125-154.96875001 103.12500002-249 0-94.03125001-36.5625-182.4375-103.125-249zM582.875 532.96875001H442.0625c-43.3125 0-78.375-35.0625-78.375-78.37500002v-140.71874999c0-43.3125 35.0625-78.375 78.375-78.375h140.71875001c43.3125 0 78.375 35.0625 78.37499998 78.375V454.59375001c0 43.3125-35.0625 78.375-78.28124999 78.37499998z" horiz-adv-x="1024" />
<glyph glyph-name="yonghu3" unicode="&#58954;" d="M133.7-35.4c0 208.6 169.1 377.6 377.6 377.6s377.6-169.1 377.6-377.6h-75.5c0 166.8-135.3 302.1-302.1 302.1S209.2 131.4 209.2-35.4h-75.5z m377.6 377.7c-125.1 0-226.6 101.5-226.6 226.6s101.4 226.6 226.6 226.6S737.9 694 737.9 568.9c0-125.2-101.4-226.6-226.6-226.6z m0 75.5c83.4 0 151.1 67.6 151.1 151.1S594.8 720 511.3 720c-83.4 0-151.1-67.6-151.1-151.1s67.7-151.1 151.1-151.1z" horiz-adv-x="1024" />
<glyph glyph-name="shanchu2" unicode="&#59086;" d="M512 753.140625c49.85046387 0 98.21777344-9.72290039 143.70117188-29.00390625 43.91784668-18.62182617 83.46862793-45.23620606 117.33398437-79.1015625 33.94775391-33.94775391 60.56213379-73.4161377 79.1015625-117.33398438C871.41772461 482.21777344 881.140625 433.85046387 881.140625 384s-9.72290039-98.21777344-29.00390625-143.70117188c-18.62182617-43.91784668-45.23620606-83.46862793-79.1015625-117.33398437-33.94775391-33.94775391-73.4161377-60.56213379-117.33398438-79.1015625C610.21777344 24.58227538999995 561.85046387 14.859375 512 14.859375s-98.21777344 9.72290039-143.70117188 29.00390625c-43.91784668 18.62182617-83.46862793 45.23620606-117.33398437 79.1015625-33.94775391 33.94775391-60.56213379 73.4161377-79.1015625 117.33398438C152.58227539 285.78222656 142.859375 334.14953613 142.859375 384s9.72290039 98.21777344 29.00390625 143.70117188c18.62182617 43.91784668 45.23620606 83.46862793 79.1015625 117.33398437s73.4161377 60.56213379 117.33398438 79.1015625C413.78222656 743.41772461 462.14953613 753.140625 512 753.140625m0 52.734375C278.97998047 805.875 90.125 617.02001953 90.125 384s188.85498047-421.875 421.875-421.875 421.875 188.85498047 421.875 421.875S745.02001953 805.875 512 805.875zM719.64160156 410.3671875H304.35839844c-14.50195313 0-26.3671875-11.86523438-26.3671875-26.3671875s11.86523438-26.3671875 26.3671875-26.3671875h415.28320312c14.50195313 0 26.3671875 11.86523438 26.3671875 26.3671875s-11.86523438 26.3671875-26.3671875 26.3671875z" horiz-adv-x="1024" />
<glyph glyph-name="guanbi" unicode="&#59106;" d="M571.904 394.24L885.76 708.096c15.872 15.872 15.872 41.984 0 57.856l-1.536 1.536c-15.872 15.872-41.984 15.872-57.856 0L512 453.632 198.144 768c-15.872 15.872-41.984 15.872-57.856 0l-1.536-1.536a40.192 40.192 0 0 1 0-57.856L452.608 394.24l-313.856-313.856c-15.872-15.872-15.872-41.984 0-57.856l1.536-1.536c15.872-15.872 41.984-15.872 57.856 0l313.856 313.856 313.856-313.856c15.872-15.872 41.984-15.872 57.856 0l1.536 1.536c15.872 15.872 15.872 41.984 0 57.856L571.904 394.24z" horiz-adv-x="1024" />
<glyph glyph-name="cuowuguanbishibai" unicode="&#59229;" d="M512-36.46875001000001c-56.71875001 0-111.84375001 11.15625001-163.68749999 33.09375001-50.06250001 21.1875-95.0625 51.46875001-133.59375002 90.09375002-38.625 38.53125001-68.90625001 83.53125001-90.09374999 133.59374997C102.6875 272.15624999 91.53124999 327.28124999 91.53124999 384s11.15625001 111.84375001 33.09375001 163.68749999c21.1875 50.06250001 51.46875001 95.0625 90.09375002 133.68750001 38.625 38.625 83.53125001 68.90625001 133.68749997 90.09375001 51.75 21.84375002 106.875 33 163.59375001 32.99999998s111.84375001-11.15625001 163.68749999-33.09374999c50.06250001-21.1875 95.0625-51.46875001 133.68750001-90.09375002 38.625-38.625 68.90625001-83.53125001 90.09375001-133.68749997 21.9375-51.84375001 33.09375001-106.96875002 33.09374999-163.68750002s-11.15625001-111.84375001-33.09374999-163.68749998c-21.28125001-49.96875001-51.56250002-94.96875001-90.1875-133.50000002-38.625-38.625-83.53125001-68.90625001-133.6875-90.09374999-51.75-21.9375-106.875-33.09375001-163.59375001-33.09375001z m0 780c-198.28125001 0-359.53125001-161.25-359.53125001-359.53124999s161.25-359.53125001 359.53125001-359.53125001 359.53125001 161.25 359.53125001 359.53125001-161.25 359.53125001-359.53125001 359.53124999zM681.6875 511.3125L384.6875 214.3125c-11.625-11.625-30.75-11.625-42.46875001 0-11.625 11.625-11.625 30.75 0 42.46875001L639.3125 553.6875c11.625 11.625 30.75 11.625 42.46875001 0 11.625-11.625 11.625-30.75-0.09375001-42.375zM384.6875 553.6875L681.6875 256.6875c11.625-11.625 11.625-30.75 0-42.46875001-11.625-11.625-30.75-11.625-42.46875001 0L342.3125 511.3125c-11.625 11.625-11.625 30.75 0 42.46875001 11.625 11.625 30.75 11.625 42.375-0.09375001z" horiz-adv-x="1024" />
<glyph glyph-name="icon_paging_left" unicode="&#58962;" d="M316.28543091 384l209.75046157-209.7496891c12.87099838-12.87099838 12.87099838-33.73944282 0-46.61121369-12.87099838-12.87099838-33.7402153-12.87099838-46.61121367 0l-233.05529595 233.05606842c-12.87099838 12.87022591-12.87099838 33.73944282 0 46.61044121l233.05606841 233.05529595c12.87022591 12.87099838 33.73944282 12.87099838 46.61044121 0 12.87099838-12.87177085 12.87099838-33.7402153 0-46.61121369L316.28543091 384zM548.02828979 384l209.75046158-209.7496891c12.87099838-12.87099838 12.87099838-33.73944282 0-46.61121369-12.87099838-12.87099838-33.7402153-12.87099838-46.61121368 0l-233.05529595 233.05606842c-12.87099838 12.87022591-12.87099838 33.73944282 0 46.61044121l233.05606843 233.05529595c12.87022591 12.87099838 33.73944282 12.87099838 46.6104412 0 12.87099838-12.87177085 12.87099838-33.7402153 0-46.61121369L548.02828979 384z" horiz-adv-x="1024" />
<glyph glyph-name="icon_paging_left-copy" unicode="&#61173;" d="M707.71456909 384l-209.75046157 209.74968909c-12.87099838 12.87099838-12.87099838 33.73944282 0 46.6112137 12.87099838 12.87099838 33.7402153 12.87099838 46.61121367 0l233.05529595-233.05606842c12.87099838-12.87022591 12.87099838-33.73944282 0-46.61044121l-233.05606841-233.05529595c-12.87022591-12.87099838-33.73944282-12.87099838-46.61044121 0-12.87099838 12.87177085-12.87099838 33.7402153 0 46.6112137L707.71456909 384zM475.97171022 384l-209.75046159 209.7496891c-12.87099838 12.87099838-12.87099838 33.73944282 0 46.6112137 12.87099838 12.87099838 33.7402153 12.87099838 46.61121368-1e-8l233.05529595-233.05606842c12.87099838-12.87022591 12.87099838-33.73944282 0-46.61044121l-233.05606843-233.05529596c-12.87022591-12.87099838-33.73944282-12.87099838-46.6104412 0-12.87099838 12.87177085-12.87099838 33.7402153 0 46.6112137L475.97171022 384z" horiz-adv-x="1024" />
<glyph glyph-name="rizhishezhi" unicode="&#58899;" d="M862.18464985 213.88488819999998c-27.10318786 0-44.04079497 29.34293377-30.48920105 52.81124781a35.20247105 35.20247105 0 0 1-12.88796551 48.09043657l-47.23073611 27.26909495a35.20247105 35.20247105 0 0 1-48.09043656-12.88796551c-13.55159393-23.46831402-47.42680814-23.46831402-60.97840207 0a35.20247105 35.20247105 0 0 1-48.09043655 12.88796551l-47.23073612-27.26909495a35.20247105 35.20247105 0 0 1-12.8879655-48.09043657c13.55159393-23.46831402-3.38601318-52.81124779-30.48920105-52.81124781a35.21755351 35.21755351 0 0 1-35.21001226-35.21001229v-54.5381899a35.21755351 35.21755351 0 0 1 35.21001226-35.21001229c27.10318786 0 44.04079497-29.34293377 30.48920105-52.81124779a35.20247105 35.20247105 0 0 1 12.8879655-48.09043658l47.23073612-27.26909496a35.20247105 35.20247105 0 0 1 48.09043655 12.88796552c13.55159393 23.46831402 47.42680814 23.46831402 60.97840207 0a35.20247105 35.20247105 0 0 1 48.09043656-12.88796552l47.23073611 27.26909496a35.20247105 35.20247105 0 0 1 12.88796551 48.09043658c-13.55159393 23.46831402 3.38601318 52.81124779 30.48920105 52.81124779a35.21755351 35.21755351 0 0 1 35.21001227 35.21001229v54.5381899a35.21755351 35.21755351 0 0 1-35.21001227 35.21001229zM730.69572844 86.09871170999998c-36.06971274-20.82134158-82.19188773-8.46880354-103.01322933 27.60090918-20.82134158 36.06971274-8.46880354 82.19188773 27.60090917 103.01322934 36.06971274 20.82134158 82.19188773 8.46880354 103.01322933-27.60090921 20.82888283-36.06217149 8.46880354-82.18434651-27.60090917-103.01322931zM284.97875142 640.14548662h407.2265288v-60.32985612h-407.2265288zM284.97875142 483.37081426h407.2265288v-60.32985612h-407.2265288zM284.97875142 323.72293250999996h226.23696046v-60.32985612h-226.23696046zM790.24129642 811.96491684h-603.2985612c-33.26437441 0-60.32985613-27.0654817-60.32985613-60.32985611v-693.79334537c0-33.26437441 27.0654817-60.32985613 60.32985613-60.32985613h264.21460489a30.16492806 30.16492806 0 0 1 0 60.32985613H186.94273522v693.79334537h603.2985612v-328.59410259a30.16492806 30.16492806 0 0 1 60.32985612 0V751.63506073c0 33.26437441-27.0654817 60.32985613-60.32985612 60.32985611z" horiz-adv-x="1024" />
<glyph glyph-name="icon-test" unicode="&#58901;" d="M690.76953125 34.28320312000005h105.38085938v-43.68164062H577.56640625V209.09765625h43.68164063v-156.88476563C760.81835938 98.1796875 861.71679688 229.04882812000005 861.71679688 384c0 193.18359375-156.62109375 349.71679688-349.71679688 349.71679688-7.3828125 0-14.58984375-0.61523438-21.88476563-1.14257813V776.34375c7.29492188 0.43945313 14.50195313 1.14257813 21.88476563 1.14257813 217.265625 0 393.48632813-176.1328125 393.48632813-393.48632813 0-152.84179688-87.45117188-284.67773438-214.71679688-349.71679688zM402.6640625 715.78710938C263.18164062 669.8203125 162.28320312 538.95117188 162.28320312 384c0-193.18359375 156.62109375-349.71679688 349.71679688-349.71679688 7.3828125 0 14.58984375 0.61523438 21.88476563 1.14257813v-43.68164062c-7.29492188-0.43945313-14.50195313-1.14257813-21.88476563-1.14257813-217.265625-0.08789063-393.48632813 176.1328125-393.48632813 393.3984375 0 152.84179688 87.36328125 284.67773438 214.71679688 349.71679688H227.84960937V777.48632813h218.58398438V558.90234375h-43.68164063V715.78710938z" horiz-adv-x="1024" />
<glyph glyph-name="zanting1" unicode="&#59016;" d="M435.5 544.6800000000001c-17.1 0-31.02-11.94-31.02-26.76v-267.84c0-14.76 13.86-26.76 31.02-26.76 17.1 0 30.96 12 30.96 26.76V517.9200000000001c0 14.82-13.92 26.76-30.96 26.76z m153.96 0c-17.1 0-30.96-11.94-30.96-26.76v-267.84c0-14.76 13.8-26.76 30.96-26.76s31.02 12 31.02 26.76V517.9200000000001c0 14.82-13.92 26.76-31.02 26.76zM512.48 802.14C281.9 802.14 94.34 614.5799999999999 94.34 384S281.9-34.139999999999986 512.48-34.139999999999986 930.62 153.41999999999996 930.62 384 743.06 802.14 512.48 802.14z m0-776.28c-197.46 0-358.14 160.68-358.14 358.14s160.68 358.14 358.14 358.14S870.62 581.46 870.62 384 709.94 25.860000000000014 512.48 25.860000000000014z" horiz-adv-x="1024" />
<glyph glyph-name="shijianfenlei" unicode="&#59101;" d="M490.66666667-9.75C274.10416667-9.75 96.91666667 167.4375 96.91666667 384S274.10416667 777.75 490.66666667 777.75c88.59375 0 172.96875-29.53125 241.875-82.96875 12.65625-9.84375 14.0625-26.71875 4.21875-39.375-9.84375-12.65625-26.71875-14.0625-39.375-4.21875-59.0625 45-130.78125 70.3125-206.71875 70.3125-185.625 0-337.5-151.875-337.5-337.5s151.875-337.5 337.5-337.5c75.9375 0 147.65625 25.3125 208.125 71.71875 12.65625 9.84375 29.53125 7.03125 39.375-4.21875s7.03125-29.53125-4.21875-39.375c-70.3125-54.84375-154.6875-84.375-243.28125-84.375z m196.875 365.625H490.66666667c-15.46875 0-28.125 12.65625-28.125 28.125V637.125c0 15.46875 12.65625 28.125 28.125 28.125s28.125-12.65625 28.125-28.125v-225h168.75c15.46875 0 28.125-12.65625 28.125-28.125s-12.65625-28.125-28.125-28.125z m225 0h-56.25c-15.46875 0-28.125 12.65625-28.125 28.125s12.65625 28.125 28.125 28.125h56.25c15.46875 0 28.125-12.65625 28.125-28.125s-12.65625-28.125-28.125-28.125z m0 168.75H814.10416667c-15.46875 0-28.125 12.65625-28.125 28.125s12.65625 28.125 28.125 28.125h98.4375c15.46875 0 28.125-12.65625 28.125-28.125s-12.65625-28.125-28.125-28.125z m0-337.5H814.10416667c-15.46875 0-28.125 12.65625-28.125 28.125s12.65625 28.125 28.125 28.125h98.4375c15.46875 0 28.125-12.65625 28.125-28.125s-12.65625-28.125-28.125-28.125z" horiz-adv-x="1024" />
<glyph glyph-name="erji-xiaxianjilu-copy" unicode="&#61174;" d="M374.890625 605.484375l110.7421875 110.7421875L485.6328125 278.53125c0-15.8203125 10.546875-26.3671875 26.3671875-26.3671875s26.3671875 10.546875 26.3671875 26.3671875l0 437.6953125 110.7421875-110.7421875c10.546875-10.546875 26.3671875-10.546875 36.9140625 0 10.546875 10.546875 10.546875 26.3671875 0 36.9140625l-152.9296875 158.203125s-5.2734375 5.2734375-10.546875 5.2734375l-26.3671875 0s-5.27343751 0-5.2734375-5.2734375l-152.9296875-158.203125c-10.546875-10.546875-10.546875-26.3671875 0-36.9140625 10.546875-10.546875 26.3671875-10.546875 36.9140625 0zM512-37.875C728.2109375-37.875 907.50781251 141.421875 907.5078125 357.6328125c0 89.6484375-31.640625 179.296875-89.6484375 253.125-5.2734375 5.2734375-10.546875 10.546875-21.09375 10.54687499-5.27343751 0-10.546875 0-15.8203125-5.27343749-10.546875-10.546875-10.546875-26.3671875-5.2734375-36.9140625C828.40625 515.83593751 854.7734375 436.734375 854.7734375 357.6328125 854.7734375 167.7890625 701.84375 14.859375 512 14.859375s-342.7734375 152.9296875-342.7734375 342.7734375c0 79.10156251 26.3671875 158.203125 79.1015625 216.2109375 10.546875 10.546875 5.2734375 26.3671875-5.2734375 36.9140625-10.546875 10.546875-26.3671875 5.2734375-36.9140625-5.2734375-58.0078125-68.5546875-89.6484375-158.203125-89.6484375-253.125 0-210.9375 179.296875-390.234375 395.5078125-390.234375z" horiz-adv-x="1024" />
<glyph glyph-name="tiaoduzhongxin-copy" unicode="&#61175;" d="M615.84841989 598.32546267H505.37137712c-44.19081711 0-83.96255204 39.7717357-83.96255203 83.96255203 0 44.19081711 39.7717357 83.96255204 83.96255204 83.96255282h110.47704277c44.19081711 0 83.96255204-39.7717357 83.96255281-83.96255282 0-48.60989852-39.7717357-83.96255204-83.96255282-83.96255203z m1e-8-309.33571899H505.37137712c-44.19081711 0-83.96255204 39.7717357-83.96255203 83.96255205 0 44.19081711 39.7717357 83.96255204 83.96255204 83.96255204h110.47704277c44.19081711 0 83.96255204-39.7717357 83.96255281-83.96255204 0-44.19081711-39.7717357-83.96255204-83.96255282-83.96255205z m0-300.49755618H505.37137712c-44.19081711 0-83.96255204 39.7717357-83.96255203 83.96255204 0 44.19081711 39.7717357 83.96255204 83.96255204 83.96255281h110.47704277c44.19081711 0 83.96255204-39.7717357 83.96255281-83.96255281 0-44.19081711-39.7717357-83.96255204-83.96255282-83.96255204z m-318.17388257 61.86714349c-97.2197978 0-181.18234983 79.54347064-181.18234983 181.1823506 0 97.2197978 79.54347064 181.18234983 181.18234983 181.18234983h30.93357214c17.67632715 0 30.93357213-13.25724498 30.93357212-30.93357213 0-17.67632715-13.25724498-30.93357213-30.93357212-30.93357212h-30.93357213c-66.28622566 0-119.31520634-53.02898068-119.31520634-119.31520558 0-66.28622566 53.02898068-119.31520634 119.31520633-119.31520634 17.67632715 0 30.93357213-13.25724498 30.93357214-30.93357212 0-17.67632715-13.25724498-30.93357213-30.93357214-30.93357214z m1e-8 0M381.63708937 85.71198530000004l-88.38163344-92.8007164v181.18234983l88.38163344-88.38163343z m437.48908892 278.40214684h-30.93357213c-17.67632715 0-30.93357213 13.25724498-30.93357136 30.93357213 0 17.67632715 13.25724498 30.93357213 30.93357136 30.93357214h30.93357212c66.28622566 0 119.31520634 53.02898068 119.31520636 119.31520557 0 66.28622566-53.02898068 119.31520634-119.31520636 119.31520635-17.67632715 0-30.93357213 13.25724498-30.93357212 30.93357213 0 17.67632715 13.25724498 30.93357213 30.93357213 30.93357136C916.34597608 726.47883182 1000.30852813 646.93536118 1000.30852813 545.29648198s-79.54347064-181.18234983-181.18234984-181.18234984z m-1e-8 0M735.16362624 686.70709688L823.54526046 779.5078125v-181.18234983l-88.38163422 88.38163421z m0 0" horiz-adv-x="1144" />
<glyph glyph-name="juxingkaobei" unicode="&#59301;" d="M128.692 768.01v-191.05H319.04V768.01H128.692z m127.261-127.963h-64.169v64.169h64.169v-64.169zM511.333 191.77700000000004v-191.416h385.792V191.77700000000004H511.333zM832 64H576.112v64.198H832V64zM384.075 768.01v-191.05h512.099V768.01H384.075z m448.087-127.963H448.087v64.169h384.075v-64.169zM511.333 447.791v-191.416H896.23V447.791H511.333z m319.922-127.776H575.961v64.198h255.294v-64.198zM192.037 576.9590000000001h64.012v-512.68h-64.012zM256.05 128.19799999999998h255.284v-63.919H256.05zM256.05 384h255.284v-63.381H256.05z" horiz-adv-x="1024" />
<glyph glyph-name="LOGO-" unicode="&#58937;" d="M578.122795 640.18066301H450.21312601c-51.30839798 0-97.55822201 46.24982399-97.55822102 97.55822199S398.904728 835.297107 450.21312601 835.297107H578.122795c51.30839798 0 97.55822201-46.24982399 97.558221-97.558222 0-56.366972-46.24982399-97.55822201-97.558221-97.55822199zM578.122795 281.02187698H450.21312601c-51.30839798 0-97.55822201 46.24982399-97.55822102 97.55822202s46.24982399 97.55822201 97.55822102 97.558221H578.122795c51.30839798 0 97.55822201-46.24982399 97.558221-97.558221S629.43119299 281.02187698 578.122795 281.02187698zM578.122795-67.29710699999998H450.21312601c-51.30839798 0-97.55822201 46.24982399-97.55822102 97.558222s46.24982399 97.55822201 97.55822102 97.55822199H578.122795c51.30839798 0 97.55822201-46.24982399 97.558221-97.55822199s-46.24982399-97.55822201-97.558221-97.558222zM814.430487 414.712773c117.792519 0 210.29216699-92.499647 210.29216601-210.292166s-97.55822201-210.29216699-210.29216601-210.292167c-20.23429799 0-36.132675 15.175723-36.132675 36.132675 0 20.23429799 15.175723 36.132675 36.132675 36.13267501 76.60126997 0 138.026817 61.425547 138.026817 138.02681699 0 76.60126997-61.425547 138.026817-138.026817 138.026817h-36.132675c-20.23429799 0-36.132675 15.175723-36.13267403 36.132675 0 20.23429799 15.175723 36.132675 36.13267403 36.132674h36.132675zM819.48906101 142.99505999999997v-210.292167l-102.61679602 107.675371 102.61679602 102.616796z m-102.61679602-102.616796M210.29216699 350.396613C92.499647 350.396613 0 442.89626 0 560.6887790000001s97.55822201 210.29216699 210.29216699 210.29216699c20.23429799 0 36.132675-15.175723 36.13267401-36.13267499 0-20.23429799-15.175723-36.132675-36.13267399-36.132675-76.60126997 0-138.026817-61.425547-138.02681802-138.026817 0-76.60126997 61.425547-138.026817 138.026818-138.02681699h36.13267401c20.23429799 0 36.132675-15.175723 36.13267501-36.13267502 0-20.23429799-15.175723-36.132675-36.13267501-36.13267399h-36.13267401zM205.233592 622.11432601V832.406493l102.616796-107.67537101-102.616796-102.616796z m102.616796 102.616796" horiz-adv-x="1024" />
<glyph glyph-name="jiantou-copy-copy" unicode="&#61176;" d="M209.05173332 306.46613333000005l274.65813335-274.65813333c21.45066667-21.45066667 56.22293333-21.45066667 77.6736 0l274.65813333 274.65813333c21.45066667 21.45066667 21.45066667 56.22293333 0 77.6736s-56.22293333 21.45066667-77.6736 0l-180.89066667-180.89066666 0 526.57493333c0 30.34986667-24.5824 54.93226667-54.93226665 54.93226667s-54.93226667-24.5824-54.93226668-54.93226667l0-526.57493333-180.89066667 180.89066666c-10.71146667 10.71253333-24.7744 16.09493333-38.83733333 16.09493334s-28.1248-5.35573334-38.83733333-16.09493334c-21.45066667-21.45066667-21.45066667-56.22293333 0-77.6736z" horiz-adv-x="1000" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 123 KiB

BIN
escheduler-ui/dist/images/login-logo.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

BIN
escheduler-ui/dist/images/logo.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

BIN
escheduler-ui/dist/images/m_logo.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

BIN
escheduler-ui/dist/images/open.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

BIN
escheduler-ui/dist/images/toolbar_DEPENDENT.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

BIN
escheduler-ui/dist/images/toolbar_MR.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

BIN
escheduler-ui/dist/images/toolbar_PROCEDURE.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

BIN
escheduler-ui/dist/images/toolbar_PYTHON.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

BIN
escheduler-ui/dist/images/toolbar_SHELL.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

BIN
escheduler-ui/dist/images/toolbar_SPARK.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

BIN
escheduler-ui/dist/images/toolbar_SQL.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

BIN
escheduler-ui/dist/images/toolbar_SUB_PROCESS.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

7
escheduler-ui/dist/index.html vendored

@ -1,7 +0,0 @@
<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta http-equiv="Cache-Control" content="no-siteapp"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="标题"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="format-detection" content="telphone=no, email=no"><meta name="screen-orientation" content="portrait"><meta name="x5-orientation" content="portrait"><meta name="theme-color" content="#4a8dee"><meta name="msapplication-navbutton-color" content="#4a8dee"><meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><link rel="shortcut icon" href="/images/favicon.ico"><link href="/combo/1.0.0/base.css?v1.0.0.1" rel="stylesheet"><link href="/combo/1.0.0/3rd.css?v1.0.0.1" rel="stylesheet"><!--[if lt IE 9]>
<script src="/combo/1.0.0/es5.js"></script>
<![endif]--><script>let NODE_ENV = 'true'</script><title>EasyScheduler</title><link href="/css/common.8ba9af7.css" rel="stylesheet"><link href="/css/home/index.b444b91.css" rel="stylesheet"></head><body><div id="app"></div><div id="contextmenu" class="contextmenu"></div><div class="global-loading"><div class="svg-box"><svg class="lds-gears" width="54px" height="54px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" style="background: none;"><g transform="translate(50 50)"><g transform="translate(-19 -19) scale(0.6)"><g transform="rotate(107.866)"><animateTransform attributeName="transform" type="rotate" values="0;360" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animateTransform><path
d="M37.3496987939662 -7 L47.3496987939662 -7 L47.3496987939662 7 L37.3496987939662 7 A38 38 0 0 1 31.359972760794346 21.46047782418268 L31.359972760794346 21.46047782418268 L38.431040572659825 28.531545636048154 L28.531545636048154 38.431040572659825 L21.46047782418268 31.359972760794346 A38 38 0 0 1 7.0000000000000036 37.3496987939662 L7.0000000000000036 37.3496987939662 L7.000000000000004 47.3496987939662 L-6.999999999999999 47.3496987939662 L-7 37.3496987939662 A38 38 0 0 1 -21.46047782418268 31.35997276079435 L-21.46047782418268 31.35997276079435 L-28.531545636048154 38.431040572659825 L-38.43104057265982 28.531545636048158 L-31.359972760794346 21.460477824182682 A38 38 0 0 1 -37.3496987939662 7.000000000000007 L-37.3496987939662 7.000000000000007 L-47.3496987939662 7.000000000000008 L-47.3496987939662 -6.9999999999999964 L-37.3496987939662 -6.999999999999997 A38 38 0 0 1 -31.35997276079435 -21.460477824182675 L-31.35997276079435 -21.460477824182675 L-38.431040572659825 -28.531545636048147 L-28.53154563604818 -38.4310405726598 L-21.4604778241827 -31.35997276079433 A38 38 0 0 1 -6.999999999999992 -37.3496987939662 L-6.999999999999992 -37.3496987939662 L-6.999999999999994 -47.3496987939662 L6.999999999999977 -47.3496987939662 L6.999999999999979 -37.3496987939662 A38 38 0 0 1 21.460477824182686 -31.359972760794342 L21.460477824182686 -31.359972760794342 L28.531545636048158 -38.43104057265982 L38.4310405726598 -28.53154563604818 L31.35997276079433 -21.4604778241827 A38 38 0 0 1 37.3496987939662 -6.999999999999995 M0 -23A23 23 0 1 0 0 23 A23 23 0 1 0 0 -23"
fill="#0097e0"></path></g></g><g transform="translate(19 19) scale(0.6)"><g transform="rotate(229.634)"><animateTransform attributeName="transform" type="rotate" values="360;0" keyTimes="0;1" dur="1s" begin="-0.0625s" repeatCount="indefinite"></animateTransform><path
d="M37.3496987939662 -7 L47.3496987939662 -7 L47.3496987939662 7 L37.3496987939662 7 A38 38 0 0 1 31.359972760794346 21.46047782418268 L31.359972760794346 21.46047782418268 L38.431040572659825 28.531545636048154 L28.531545636048154 38.431040572659825 L21.46047782418268 31.359972760794346 A38 38 0 0 1 7.0000000000000036 37.3496987939662 L7.0000000000000036 37.3496987939662 L7.000000000000004 47.3496987939662 L-6.999999999999999 47.3496987939662 L-7 37.3496987939662 A38 38 0 0 1 -21.46047782418268 31.35997276079435 L-21.46047782418268 31.35997276079435 L-28.531545636048154 38.431040572659825 L-38.43104057265982 28.531545636048158 L-31.359972760794346 21.460477824182682 A38 38 0 0 1 -37.3496987939662 7.000000000000007 L-37.3496987939662 7.000000000000007 L-47.3496987939662 7.000000000000008 L-47.3496987939662 -6.9999999999999964 L-37.3496987939662 -6.999999999999997 A38 38 0 0 1 -31.35997276079435 -21.460477824182675 L-31.35997276079435 -21.460477824182675 L-38.431040572659825 -28.531545636048147 L-28.53154563604818 -38.4310405726598 L-21.4604778241827 -31.35997276079433 A38 38 0 0 1 -6.999999999999992 -37.3496987939662 L-6.999999999999992 -37.3496987939662 L-6.999999999999994 -47.3496987939662 L6.999999999999977 -47.3496987939662 L6.999999999999979 -37.3496987939662 A38 38 0 0 1 21.460477824182686 -31.359972760794342 L21.460477824182686 -31.359972760794342 L28.531545636048158 -38.43104057265982 L38.4310405726598 -28.53154563604818 L31.35997276079433 -21.4604778241827 A38 38 0 0 1 37.3496987939662 -6.999999999999995 M0 -23A23 23 0 1 0 0 23 A23 23 0 1 0 0 -23"
fill="#7f8b95"></path></g></g></g></svg> <span class="sp1">Loading ...</span></div></div><script src="/combo/1.0.0/3rd.js?v1.0.0.1"></script><script src="/js/common.6428411.js"></script><script src="/js/home/index.1b09c2f.js"></script></body></html>

2
escheduler-ui/dist/js/0.bf0a1e2.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/0.bf0a1e2.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/1.3ff7adc.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/1.3ff7adc.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/10.90da74f.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/10.90da74f.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/11.ca8ac79.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/11.ca8ac79.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/12.b6fb265.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/12.b6fb265.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/13.a8f5ee9.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/13.a8f5ee9.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/14.10001b2.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/14.10001b2.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/15.9119d76.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/15.9119d76.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/16.648c64b.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/16.648c64b.js.map vendored

File diff suppressed because one or more lines are too long

9
escheduler-ui/dist/js/17.6761755.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/17.6761755.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/18.3bc2e58.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/18.3bc2e58.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/19.5ce986e.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/19.5ce986e.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/2.3b16c4b.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/2.3b16c4b.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/20.ef7f230.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/20.ef7f230.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/21.b587019.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/21.b587019.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/22.f33bbc0.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/22.f33bbc0.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/23.bb2b238.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/23.bb2b238.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/24.6e296a1.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/24.6e296a1.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/25.079b6f7.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/25.079b6f7.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/26.4fc30f8.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/26.4fc30f8.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/27.77c2a5a.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/27.77c2a5a.js.map vendored

File diff suppressed because one or more lines are too long

2
escheduler-ui/dist/js/28.3e34ffe.js vendored

File diff suppressed because one or more lines are too long

1
escheduler-ui/dist/js/28.3e34ffe.js.map vendored

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save