Merge remote-tracking branch 'origin/psr'
# Conflicts: # cloud-gateway/src/main/resources/bootstrap.yml # cloud-modules/cloud-Saas-Service/src/main/resources/bootstrap.yml # cloud-modules/cloud-Vehicle-Simulation/src/main/resources/bootstrap.yml # cloud-modules/cloud-modules-car/src/main/java/com/muyu/car/controller/CarInformationController.java # cloud-modules/cloud-modules-car/src/main/java/com/muyu/car/controller/CarMessageController.java # cloud-modules/cloud-modules-car/src/main/java/com/muyu/car/domain/CarMessage.java # cloud-modules/cloud-modules-car/src/main/java/com/muyu/car/mapper/CarInformationMapper.java # cloud-modules/cloud-modules-car/src/main/java/com/muyu/car/service/CarMessageService.java # cloud-modules/cloud-modules-car/src/main/java/com/muyu/car/service/Impl/CarInformationServiceImpl.java # cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml # cloud-modules/cloud-modules-car/src/main/resources/mapper/car/CarInformationMapper.xml # cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml # cloud-modules/pom.xml # pom.xmlmaster
commit
016887afc2
|
@ -12,6 +12,8 @@ out
|
|||
######################################################################
|
||||
# IDE
|
||||
|
||||
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
|
@ -26,6 +28,7 @@ logs
|
|||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
*.yml
|
||||
|
||||
### JRebel ###
|
||||
rebel.xml
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-common-wechat</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cloud-common-wechat</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- MuYu Common Core-->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dom4j</groupId>
|
||||
<artifactId>dom4j</artifactId>
|
||||
<version>2.1.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 帮助将java对象转换为xml字符串-->
|
||||
<!-- 依赖冲突会导致InaccessibleObjectException异常更新到适用版本-->
|
||||
<dependency>
|
||||
<groupId>com.thoughtworks.xstream</groupId>
|
||||
<artifactId>xstream</artifactId>
|
||||
<version>1.4.20</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>4.9.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Alibaba Fastjson -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.83</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,23 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author 24415
|
||||
*/
|
||||
@Data
|
||||
public class AccessToken {
|
||||
|
||||
private String access_token;
|
||||
|
||||
private Long expires_in;
|
||||
|
||||
public void setExpiresTime(Long expiresIn) {
|
||||
this.expires_in = System.currentTimeMillis()+expiresIn*1000;
|
||||
}
|
||||
|
||||
public boolean isExpired(Long expiresIn){
|
||||
long now = System.currentTimeMillis();
|
||||
return now>expiresIn;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.massage
|
||||
* @Project:WXApplication
|
||||
* @name:Articles
|
||||
* @Date:2024/9/18 下午10:14
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@XStreamAlias("item")
|
||||
public class Articles {
|
||||
// <Articles>
|
||||
// <item>
|
||||
// <Title><![CDATA[title1]]></Title>
|
||||
// <Description><![CDATA[description1]]></Description>
|
||||
// <PicUrl><![CDATA[picurl]]></PicUrl>
|
||||
// <Url><![CDATA[url]]></Url>
|
||||
// </item>
|
||||
// </Articles>
|
||||
|
||||
@XStreamAlias("Title")
|
||||
private String title ;
|
||||
@XStreamAlias("Description")
|
||||
private String description ;
|
||||
@XStreamAlias("PicUrl")
|
||||
private String picUrl ;
|
||||
@XStreamAlias("Url")
|
||||
private String url ;
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.massage
|
||||
* @Project:WXApplication
|
||||
* @name:ImageText
|
||||
* @Date:2024/9/18 下午9:27
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@XStreamAlias("xml")
|
||||
public class NewsMessage {
|
||||
// <ToUserName><![CDATA[toUser]]></ToUserName>
|
||||
// <FromUserName><![CDATA[fromUser]]></FromUserName>
|
||||
// <CreateTime>12345678</CreateTime>
|
||||
// <MsgType><![CDATA[news]]></MsgType>
|
||||
// <ArticleCount>1</ArticleCount>
|
||||
// <Articles>
|
||||
// <item>
|
||||
// <Title><![CDATA[title1]]></Title>
|
||||
// <Description><![CDATA[description1]]></Description>
|
||||
// <PicUrl><![CDATA[picurl]]></PicUrl>
|
||||
// <Url><![CDATA[url]]></Url>
|
||||
// </item>
|
||||
// </Articles>
|
||||
|
||||
@XStreamAlias("ToUserName")
|
||||
private String toUserName ;
|
||||
@XStreamAlias("FromUserName")
|
||||
private String fromUserName ;
|
||||
@XStreamAlias("CreateTime")
|
||||
private long createTime ;
|
||||
@XStreamAlias("MsgType")
|
||||
private String msgType ;
|
||||
@XStreamAlias("ArticleCount")
|
||||
private Integer articleCount ;
|
||||
@XStreamAlias("Articles")
|
||||
private List<Articles> articles ;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.massage
|
||||
* @Project:WXApplication
|
||||
* @name:TextMessage
|
||||
* @Date:2024/9/18 上午11:33
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@XStreamAlias("xml")
|
||||
public class TextMessage {
|
||||
|
||||
//起一个别名 因为我们微信返回信息与java代码格式规范发生冲突
|
||||
//微信格式 ToUserName
|
||||
//JAVA格式 toUserName
|
||||
@XStreamAlias("ToUserName")
|
||||
private String toUserName;
|
||||
@XStreamAlias("FromUserName")
|
||||
private String fromUserName;
|
||||
@XStreamAlias("CreateTime")
|
||||
private long createTime;
|
||||
@XStreamAlias("MsgType")
|
||||
private String msgType;
|
||||
@XStreamAlias("Content")
|
||||
private String content;
|
||||
|
||||
}
|
||||
// <ToUserName><![CDATA[toUser]]></ToUserName>
|
||||
// <FromUserName><![CDATA[fromUser]]></FromUserName>
|
||||
// <CreateTime>12345678</CreateTime>
|
||||
// <MsgType><![CDATA[text]]></MsgType>
|
||||
// <Content><![CDATA[你好]]></Content>
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
|
@ -21,6 +21,7 @@
|
|||
<module>cloud-common-xxl</module>
|
||||
<module>cloud-common-rabbit</module>
|
||||
<module>cloud-common-saas</module>
|
||||
<module>cloud-common-wechat</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>cloud-common</artifactId>
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 8080
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-gateway
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
sentinel:
|
||||
# 取消控制台懒加载
|
||||
eager: true
|
||||
transport:
|
||||
# 控制台地址
|
||||
dashboard: 127.0.0.1:8718
|
||||
# nacos配置持久化
|
||||
datasource:
|
||||
ds1:
|
||||
nacos:
|
||||
server-addr: ${nacos.addr}
|
||||
dataId: sentinel-cloud-gateway
|
||||
groupId: DEFAULT_GROUP
|
||||
namespace: ${nacos.namespace}
|
||||
data-type: json
|
||||
rule-type: gw-flow
|
||||
knife4j:
|
||||
gateway:
|
||||
enabled: true
|
||||
# 指定服务发现的模式聚合微服务文档,并且是默认`default`分组
|
||||
strategy: discover
|
||||
discover:
|
||||
enabled: true
|
||||
# 指定版本号(Swagger2|OpenAPI3)
|
||||
version : openapi3
|
||||
# 需要排除的微服务(eg:网关服务)
|
||||
excluded-services:
|
||||
- cloud-monitor
|
|
@ -1,6 +1,6 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 9111
|
||||
port: 9500
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
|
@ -8,12 +8,11 @@ nacos:
|
|||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-electronic
|
||||
name: cloud-auth
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
|
@ -45,3 +44,4 @@ spring:
|
|||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 9111
|
||||
port: 9101
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 127.0.0.1:8848
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
|
@ -13,7 +13,7 @@ nacos:
|
|||
spring:
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-electronic
|
||||
name: cloud-monitor
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 127.0.0.1:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -26,7 +26,6 @@ public class CarMessage {
|
|||
* 报文名称
|
||||
*/
|
||||
private String messageTypeName;
|
||||
|
||||
/**
|
||||
* 报文所属类别
|
||||
*/
|
||||
|
|
|
@ -52,8 +52,6 @@ public interface CarInformationMapper {
|
|||
*/
|
||||
Integer updatecarInformation(CarInformationUpdReq carInformationUpdReq);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* To 电子围栏负责人
|
||||
* 查询企业车辆 carInformationID 和 carInformationLicensePlate
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 9717
|
||||
port: 9701
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: xxy
|
||||
namespace: eight
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
|
@ -19,7 +19,7 @@ spring:
|
|||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-car
|
||||
name: cloud-system
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 9202
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-gen
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# xxl-job 配置文件
|
||||
- application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
|
@ -0,0 +1,112 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-modules</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-modules-warn</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cloud-modules-warn</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos Config -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Sentinel -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot Actuator -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Mysql Connector -->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataSource -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datasource</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataScope -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datascope</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common Log -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-log</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 接口模块 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-api-doc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- XllJob定时任务 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-xxl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-rabbit</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,23 @@
|
|||
package com.muyu.warn;
|
||||
|
||||
import com.muyu.common.security.annotation.EnableCustomConfig;
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn
|
||||
* @Project:cloud-server-8
|
||||
* @name:CloudWarnApplication
|
||||
* @Date:2024/9/20 下午8:33
|
||||
*/
|
||||
@EnableCustomConfig
|
||||
//@EnableCustomSwagger2
|
||||
@EnableMyFeignClients
|
||||
@SpringBootApplication
|
||||
public class CloudWarnApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(CloudWarnApplication.class, args);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,117 @@
|
|||
package com.muyu.warn.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.poi.ExcelUtil;
|
||||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import com.muyu.common.core.web.page.TableDataInfo;
|
||||
import com.muyu.common.security.annotation.RequiresPermissions;
|
||||
import com.muyu.common.security.utils.SecurityUtils;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.service.WarnLogsService;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.Data;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static com.muyu.common.core.domain.Result.error;
|
||||
import static com.muyu.common.core.domain.Result.success;
|
||||
import static com.muyu.common.core.utils.PageUtils.startPage;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/logs")
|
||||
public class WarnLogsController extends BaseController {
|
||||
|
||||
@Autowired private WarnLogsService warnLogsService;
|
||||
|
||||
/**
|
||||
* 查询预警日志列表
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<WarnLogs>> list(WarnLogs warnLogs)
|
||||
{
|
||||
startPage();
|
||||
List<WarnLogs> list = warnLogsService.selectWarnLogsList(warnLogs);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出预警日志列表
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, WarnLogs warnLogs)
|
||||
{
|
||||
List<WarnLogs> list = warnLogsService.selectWarnLogsList(warnLogs);
|
||||
ExcelUtil<WarnLogs> util = new ExcelUtil<WarnLogs>(WarnLogs.class);
|
||||
util.exportExcel(response, list, "预警日志数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预警日志详细信息
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result<List<WarnLogs>> getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnLogsService.selectWarnLogsById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增预警日志
|
||||
* @param warnLogs 新增预警日志信息
|
||||
* @return 新增结果
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:add")
|
||||
@PostMapping
|
||||
public Result<Integer> add(
|
||||
@Validated @RequestBody WarnLogs warnLogs
|
||||
){
|
||||
if (warnLogsService.checkIdUnique(warnLogs)){
|
||||
return error("新增 预警日志 '"+ warnLogs +"' 失败,预警日志已存在 ");
|
||||
}
|
||||
return toAjax(warnLogsService.save(warnLogs));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改预警日志
|
||||
* @param warnLogs 修改预警日志信息
|
||||
* @return 修改结果
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:edit")
|
||||
@PutMapping
|
||||
public Result<Integer> edit(
|
||||
@Validated @RequestBody WarnLogs warnLogs
|
||||
){
|
||||
if (!warnLogsService.checkIdUnique(warnLogs)){
|
||||
return error("修改 预警日志'"+ warnLogs +"'失败,预警日志不存在");
|
||||
}
|
||||
return toAjax(warnLogsService.updateById(warnLogs));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除预警日志
|
||||
* @param ids 删除预警日志id
|
||||
* @return 删除结果
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:remove")
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result<Integer> remove(@PathVariable("ids") Long[] ids)
|
||||
{
|
||||
warnLogsService.removeBatchByIds(Arrays.asList(ids));
|
||||
return success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
package com.muyu.warn.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.poi.ExcelUtil;
|
||||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import com.muyu.common.core.web.page.TableDataInfo;
|
||||
import com.muyu.common.security.annotation.RequiresPermissions;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import com.muyu.warn.domain.car.CarMessageType;
|
||||
import com.muyu.warn.domain.car.resp.CarMessageResp;
|
||||
import com.muyu.warn.service.WarnRuleService;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/rule")
|
||||
public class WarnRuleController extends BaseController
|
||||
{
|
||||
@Resource
|
||||
private WarnRuleService warnRuleService;
|
||||
|
||||
/**
|
||||
* 查询预警规则列表
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<WarnRule>> list(WarnRule warnRule)
|
||||
{
|
||||
startPage();
|
||||
List<WarnRule> list = warnRuleService.selectWarnRuleList(warnRule);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出预警规则列表
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, WarnRule warnRule)
|
||||
{
|
||||
List<WarnRule> list = warnRuleService.selectWarnRuleList(warnRule);
|
||||
ExcelUtil<WarnRule> util = new ExcelUtil<WarnRule>(WarnRule.class);
|
||||
util.exportExcel(response, list, "预警规则数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预警规则详细信息
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result<List<WarnRule>> getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnRuleService.selectWarnRuleById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增预警规则
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:add")
|
||||
@PostMapping
|
||||
public Result<Integer> add(
|
||||
@Validated @RequestBody WarnRule warnRule)
|
||||
{
|
||||
if (warnRuleService.checkIdUnique(warnRule)) {
|
||||
return error("新增 预警规则 '" + warnRule + "'失败,预警规则已存在");
|
||||
}
|
||||
return toAjax(warnRuleService.save(warnRule));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改预警规则
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:edit")
|
||||
@PutMapping
|
||||
public Result<Integer> edit(
|
||||
@Validated @RequestBody WarnRule warnRule)
|
||||
{
|
||||
if (!warnRuleService.checkIdUnique(warnRule)) {
|
||||
return error("修改 预警规则 '" + warnRule + "'失败,预警规则不存在");
|
||||
}
|
||||
// warnRule.setUpdateBy(SecurityUtils.getUsername());
|
||||
return toAjax(warnRuleService.updateById(warnRule));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除预警规则
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:remove")
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result<Integer> remove(@PathVariable("ids") Long[] ids)
|
||||
{
|
||||
warnRuleService.removeBatchByIds(Arrays.asList(ids));
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取车辆类型报文
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:msg")
|
||||
@GetMapping("/msg/{id}")
|
||||
public Result<List<CarMessageResp>> findByMsg(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnRuleService.findByMsg(id));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
package com.muyu.warn.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.poi.ExcelUtil;
|
||||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import com.muyu.common.core.web.page.TableDataInfo;
|
||||
import com.muyu.common.security.annotation.RequiresPermissions;
|
||||
import com.muyu.warn.domain.car.CartType;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.domain.req.WarnStrategyReq;
|
||||
import com.muyu.warn.service.WarnStrategyService;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/strategy")
|
||||
public class WarnStrategyController extends BaseController
|
||||
{
|
||||
@Resource
|
||||
private WarnStrategyService warnStrategyService;
|
||||
|
||||
/**
|
||||
* 查询预警策略列表
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<WarnStrategy>> list(WarnStrategy warnStrategy)
|
||||
{
|
||||
startPage();
|
||||
List<WarnStrategy> list = warnStrategyService.selectWarnStrategyList(warnStrategy);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出预警策略列表
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, WarnStrategy warnStrategy)
|
||||
{
|
||||
List<WarnStrategy> list = warnStrategyService.selectWarnStrategyList(warnStrategy);
|
||||
ExcelUtil<WarnStrategy> util = new ExcelUtil<WarnStrategy>(WarnStrategy.class);
|
||||
util.exportExcel(response, list, "预警策略数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预警策略详细信息
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result<List<WarnStrategy>> getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnStrategyService.selectWarnStrategyById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增预警策略
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:add")
|
||||
@PostMapping
|
||||
public Result<Integer> add(
|
||||
@Validated @RequestBody WarnStrategy warnStrategy)
|
||||
{
|
||||
if (warnStrategyService.checkIdUnique(warnStrategy)) {
|
||||
return error("新增 预警策略 '" + warnStrategy + "'失败,预警策略已存在");
|
||||
}
|
||||
return toAjax(warnStrategyService.save(warnStrategy));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改预警策略
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:edit")
|
||||
@PutMapping
|
||||
public Result<Integer> edit(
|
||||
@Validated @RequestBody WarnStrategy warnStrategy)
|
||||
{
|
||||
if (!warnStrategyService.checkIdUnique(warnStrategy)) {
|
||||
return error("修改 预警策略 '" + warnStrategy + "'失败,预警策略不存在");
|
||||
}
|
||||
// warnStrategy.setUpdateBy(SecurityUtils.getUsername());
|
||||
return toAjax(warnStrategyService.updateById(warnStrategy));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除预警策略
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:remove")
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result<Integer> remove(@PathVariable("ids") Long[] ids)
|
||||
{
|
||||
warnStrategyService.removeBatchByIds(Arrays.asList(ids));
|
||||
return success();
|
||||
}
|
||||
|
||||
@RequiresPermissions("platform:strategy:cartype")
|
||||
@PostMapping("/findByCarType")
|
||||
public Result<List<CartType>> findByCarType(){
|
||||
return Result.success(warnStrategyService.findByCarType());
|
||||
}
|
||||
|
||||
@RequiresPermissions("platform:strategy:strategytype")
|
||||
@PostMapping("/strategyType/{ids}")
|
||||
public Result<List<WarnStrategyReq>> selectStrategyType(@PathVariable("ids") Long ids){
|
||||
return Result.success(warnStrategyService.selectStrategyType(ids));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
package com.muyu.warn.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogs
|
||||
* @Date:2024/9/20 下午7:11
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@TableName("warn_logs")
|
||||
public class WarnLogs {
|
||||
|
||||
/**
|
||||
* 预警日志id
|
||||
*/
|
||||
@Excel(name = "预警日志id", cellType = Excel.ColumnType.NUMERIC)
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
/**
|
||||
* 车辆vin码
|
||||
*/
|
||||
@Excel(name = "车辆vin码")
|
||||
private String vin;
|
||||
/**
|
||||
* 规则id
|
||||
*/
|
||||
@Excel(name = "规则id")
|
||||
private Long warnRuleId;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
@Excel(name = "开始时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date startTime ;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
@Excel(name = "结束时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date endTime ;
|
||||
/**
|
||||
* 最大值
|
||||
*/
|
||||
@Excel(name = "最大值")
|
||||
private Long maxValue ;
|
||||
/**
|
||||
* 最小值
|
||||
*/
|
||||
@Excel(name = "最小值")
|
||||
private Long minValue ;
|
||||
/**
|
||||
* 平均值
|
||||
*/
|
||||
@Excel(name = "平均值")
|
||||
private Long avgValue ;
|
||||
/**
|
||||
* 中位数
|
||||
*/
|
||||
@Excel(name = "中位数")
|
||||
private Long medianValue ;
|
||||
/**
|
||||
* 是否发送预警
|
||||
*/
|
||||
@Excel(name = "是否发送预警")
|
||||
private Long status ;
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// @Excel(name = "创建人")
|
||||
// private String createBy ;
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// @Excel(name = "创建时间")
|
||||
// private String createTime ;
|
||||
// /**
|
||||
// * 更新人
|
||||
// */
|
||||
// @Excel(name = "更新人")
|
||||
// private String updateBy ;
|
||||
// /**
|
||||
// * 更新时间
|
||||
// */
|
||||
// @Excel(name = "更新时间")
|
||||
// private String updateTime ;
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.muyu.warn.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnRule
|
||||
* @Date:2024/9/20 下午7:20
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@TableName("warn_rule")
|
||||
public class WarnRule {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
private String ruleName;
|
||||
private Long strategyId;
|
||||
private Long msgTypeId;
|
||||
private Long slideTime;
|
||||
private Long slideFrequency;
|
||||
private Long maxValue;
|
||||
private Long minValue;
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// private String createBy ;
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// private String createTime ;
|
||||
// /**
|
||||
// * 更新人
|
||||
// */
|
||||
// private String updateBy ;
|
||||
// /**
|
||||
// * 更新时间
|
||||
// */
|
||||
// private String updateTime ;
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.muyu.warn.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnStrategy
|
||||
* @Date:2024/9/20 下午7:27
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@TableName("warn_strategy")
|
||||
public class WarnStrategy {
|
||||
|
||||
/**
|
||||
* 策略Id
|
||||
*/
|
||||
@TableId( type = IdType.AUTO)
|
||||
private Long id;
|
||||
private Long carTypeId ;
|
||||
private String strategyName ;
|
||||
private Long msgId ;
|
||||
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// private String createBy ;
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// private String createTime ;
|
||||
// /**
|
||||
// * 更新人
|
||||
// */
|
||||
// private String updateBy ;
|
||||
// /**
|
||||
// * 更新时间
|
||||
// */
|
||||
// private String updateTime ;
|
||||
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package com.muyu.warn.domain.car;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain.car
|
||||
* @Project:cloud-server-8
|
||||
* @name:CarMessageType
|
||||
* @Date:2024/9/22 下午3:08
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CarMessage {
|
||||
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Integer carMessageId ;
|
||||
/**
|
||||
* 车辆类型外键
|
||||
*/
|
||||
private Integer carMessageCarype ;
|
||||
/**
|
||||
* 车辆报文外键
|
||||
*/
|
||||
private Integer carMessageType ;
|
||||
/**
|
||||
* 开始位下标
|
||||
*/
|
||||
private Integer carMessageStartIndex ;
|
||||
/**
|
||||
* 结束位下标
|
||||
*/
|
||||
private Integer carMessageEndIndex ;
|
||||
/**
|
||||
* 报文数据类型 (固定值 区间随机值)
|
||||
*/
|
||||
private String messageTypeClass ;
|
||||
/**
|
||||
* 报文是否开启故障检测(0默认未开启 1开启)
|
||||
*/
|
||||
private Integer carMessageState ;
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package com.muyu.warn.domain.car;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain.car
|
||||
* @Project:cloud-server-8
|
||||
* @name:CarMessage
|
||||
* @Date:2024/9/22 下午3:07
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CarMessageType {
|
||||
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Integer messageTypeId ;
|
||||
/**
|
||||
* 报文编码
|
||||
*/
|
||||
private String messageTypeCode ;
|
||||
/**
|
||||
* 报文名称
|
||||
*/
|
||||
private String messageTypeName ;
|
||||
/**
|
||||
* 报文所属类别
|
||||
*/
|
||||
private String messageTypeBelongs ;
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.muyu.warn.domain.car;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:CartType
|
||||
* @Date:2024/9/21 下午7:38
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CartType {
|
||||
|
||||
/**
|
||||
* 车辆类型ID
|
||||
*/
|
||||
private String carTypeId ;
|
||||
/**
|
||||
* 车辆类型名
|
||||
*/
|
||||
private String carTypeName ;
|
||||
/**
|
||||
* 车辆规则外键ID
|
||||
*/
|
||||
private String carTypeRules ;
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.muyu.warn.domain.car.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain.car
|
||||
* @Project:cloud-server-8
|
||||
* @name:resp
|
||||
* @Date:2024/9/22 下午7:12
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CarMessageResp {
|
||||
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Integer carMessageId ;
|
||||
/**
|
||||
* 车辆类型外键
|
||||
*/
|
||||
private Integer carMessageCartype ;
|
||||
/**
|
||||
* 车辆报文外键
|
||||
*/
|
||||
private Integer carMessageType ;
|
||||
/**
|
||||
* 报文名称
|
||||
*/
|
||||
private String messageTypeName ;
|
||||
/**
|
||||
* 开始位下标
|
||||
*/
|
||||
private Integer carMessageStartIndex ;
|
||||
/**
|
||||
* 结束位下标
|
||||
*/
|
||||
private Integer carMessageEndIndex ;
|
||||
/**
|
||||
* 报文数据类型 (固定值 区间随机值)
|
||||
*/
|
||||
private String messageTypeClass ;
|
||||
/**
|
||||
* 报文是否开启故障检测(0默认未开启 1开启)
|
||||
*/
|
||||
private Integer carMessageState ;
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package com.muyu.warn.domain.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain.req
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnStrategyReq
|
||||
* @Date:2024/9/25 下午10:28
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class WarnStrategyReq {
|
||||
|
||||
/**
|
||||
* 策略id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 车辆类型
|
||||
*/
|
||||
private String carTypeId;
|
||||
/**
|
||||
* 策略名称
|
||||
*/
|
||||
private String strategyName;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.muyu.warn.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.mapper
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsMapper
|
||||
* @Date:2024/9/20 下午7:31
|
||||
*/
|
||||
@Mapper
|
||||
public interface WarnLogsMapper extends BaseMapper<WarnLogs> {
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.muyu.warn.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import com.muyu.warn.domain.car.CarMessageType;
|
||||
import com.muyu.warn.domain.car.resp.CarMessageResp;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Mapper
|
||||
public interface WarnRuleMapper extends BaseMapper<WarnRule> {
|
||||
|
||||
List<CarMessageResp> findByMsg(@Param("id") Long id);
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.muyu.warn.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.muyu.warn.domain.car.CartType;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.domain.req.WarnStrategyReq;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Mapper
|
||||
public interface WarnStrategyMapper extends BaseMapper<WarnStrategy> {
|
||||
|
||||
List<CartType> findByCarType();
|
||||
|
||||
List<WarnStrategyReq> selectStrategyType(@Param("ids") Long ids);
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package com.muyu.warn.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.service
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsService
|
||||
* @Date:2024/9/20 下午7:32
|
||||
*/
|
||||
public interface WarnLogsService extends IService<WarnLogs> {
|
||||
|
||||
/**
|
||||
* 精确查询预警日志
|
||||
*
|
||||
* @param id 预警日志主键
|
||||
* @return 预警日志
|
||||
*/
|
||||
public WarnLogs selectWarnLogsById(Long id);
|
||||
|
||||
/**
|
||||
* 查询预警日志列表
|
||||
*
|
||||
* @param warnLogs 预警日志
|
||||
* @return 预警日志集合
|
||||
*/
|
||||
public List<WarnLogs> selectWarnLogsList(WarnLogs warnLogs);
|
||||
|
||||
/**
|
||||
* 判断 预警日志 id是否唯一
|
||||
* @param warnLogs 预警日志
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIdUnique(WarnLogs warnLogs);
|
||||
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package com.muyu.warn.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import com.muyu.warn.domain.car.CarMessageType;
|
||||
import com.muyu.warn.domain.car.resp.CarMessageResp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
public interface WarnRuleService extends IService<WarnRule> {
|
||||
/**
|
||||
* 精确查询预警规则
|
||||
*
|
||||
* @param id 预警规则主键
|
||||
* @return 预警规则
|
||||
*/
|
||||
public WarnRule selectWarnRuleById(Long id);
|
||||
|
||||
/**
|
||||
* 查询预警规则列表
|
||||
*
|
||||
* @param warnRule 预警规则
|
||||
* @return 预警规则集合
|
||||
*/
|
||||
public List<WarnRule> selectWarnRuleList(WarnRule warnRule);
|
||||
|
||||
/**
|
||||
* 判断 预警规则 id是否唯一
|
||||
* @param warnRule 预警规则
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIdUnique(WarnRule warnRule);
|
||||
|
||||
/**
|
||||
* 获取车辆类型报文
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
List<CarMessageResp> findByMsg(Long id);
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.muyu.warn.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.warn.domain.car.CartType;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.domain.req.WarnStrategyReq;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
public interface WarnStrategyService extends IService<WarnStrategy> {
|
||||
/**
|
||||
* 精确查询预警策略
|
||||
*
|
||||
* @param id 预警策略主键
|
||||
* @return 预警策略
|
||||
*/
|
||||
public WarnStrategy selectWarnStrategyById(Long id);
|
||||
|
||||
/**
|
||||
* 查询预警策略列表
|
||||
*
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 预警策略集合
|
||||
*/
|
||||
public List<WarnStrategy> selectWarnStrategyList(WarnStrategy warnStrategy);
|
||||
|
||||
/**
|
||||
* 判断 预警策略 id是否唯一
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIdUnique(WarnStrategy warnStrategy);
|
||||
|
||||
List<CartType> findByCarType();
|
||||
|
||||
List<WarnStrategyReq> selectStrategyType(Long ids);
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
package com.muyu.warn.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
import com.muyu.warn.mapper.WarnLogsMapper;
|
||||
import com.muyu.warn.service.WarnLogsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.service.impl
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsServiceImpl
|
||||
* @Date:2024/9/20 下午7:39
|
||||
*/
|
||||
@Service
|
||||
public class WarnLogsServiceImpl
|
||||
extends ServiceImpl<WarnLogsMapper, WarnLogs>
|
||||
implements WarnLogsService {
|
||||
|
||||
@Autowired private WarnLogsMapper warnLogsMapper;
|
||||
|
||||
/**
|
||||
* 精确查询预警日志
|
||||
*
|
||||
* @param id 预警日志主键
|
||||
* @return 预警日志
|
||||
*/
|
||||
@Override
|
||||
public WarnLogs selectWarnLogsById(Long id)
|
||||
{
|
||||
LambdaQueryWrapper<WarnLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Assert.notNull(id, "id不可为空");
|
||||
queryWrapper.eq(WarnLogs::getId, id);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询预警日志列表
|
||||
*
|
||||
* @param warnLogs 预警日志
|
||||
* @return 预警日志
|
||||
*/
|
||||
@Override
|
||||
public List<WarnLogs> selectWarnLogsList(WarnLogs warnLogs)
|
||||
{
|
||||
LambdaQueryWrapper<WarnLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotEmpty(warnLogs.getVin())){
|
||||
queryWrapper.eq(WarnLogs::getVin, warnLogs.getVin());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getWarnRuleId())){
|
||||
queryWrapper.eq(WarnLogs::getWarnRuleId, warnLogs.getWarnRuleId());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getStartTime())){
|
||||
queryWrapper.eq(WarnLogs::getStartTime, warnLogs.getStartTime());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getEndTime())){
|
||||
queryWrapper.eq(WarnLogs::getEndTime, warnLogs.getEndTime());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getMaxValue())){
|
||||
queryWrapper.eq(WarnLogs::getMaxValue, warnLogs.getMaxValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getMinValue())){
|
||||
queryWrapper.eq(WarnLogs::getMinValue, warnLogs.getMinValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getAvgValue())){
|
||||
queryWrapper.eq(WarnLogs::getAvgValue, warnLogs.getAvgValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getMedianValue())){
|
||||
queryWrapper.eq(WarnLogs::getMedianValue, warnLogs.getMedianValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getStatus())){
|
||||
queryWrapper.eq(WarnLogs::getStatus, warnLogs.getStatus());
|
||||
}
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一 判断
|
||||
* @param warnLogs 预警日志
|
||||
* @return 预警日志
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkIdUnique(WarnLogs warnLogs) {
|
||||
LambdaQueryWrapper<WarnLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WarnLogs::getId, warnLogs.getId());
|
||||
return this.count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
package com.muyu.warn.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import com.muyu.warn.domain.car.CarMessageType;
|
||||
import com.muyu.warn.domain.car.resp.CarMessageResp;
|
||||
import com.muyu.warn.mapper.WarnRuleMapper;
|
||||
import com.muyu.warn.service.WarnRuleService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Service
|
||||
public class WarnRuleServiceImpl
|
||||
extends ServiceImpl<WarnRuleMapper, WarnRule>
|
||||
implements WarnRuleService {
|
||||
|
||||
@Autowired private WarnRuleMapper warnRuleMapper;
|
||||
|
||||
/**
|
||||
* 精确查询预警规则
|
||||
*
|
||||
* @param id 预警规则主键
|
||||
* @return 预警规则
|
||||
*/
|
||||
@Override
|
||||
public WarnRule selectWarnRuleById(Long id)
|
||||
{
|
||||
LambdaQueryWrapper<WarnRule> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Assert.notNull(id, "id不可为空");
|
||||
queryWrapper.eq(WarnRule::getId, id);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询预警规则列表
|
||||
*
|
||||
* @param warnRule 预警规则
|
||||
* @return 预警规则
|
||||
*/
|
||||
@Override
|
||||
public List<WarnRule> selectWarnRuleList(WarnRule warnRule)
|
||||
{
|
||||
LambdaQueryWrapper<WarnRule> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotEmpty(warnRule.getRuleName())){
|
||||
queryWrapper.like(WarnRule::getRuleName, warnRule.getRuleName());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getStrategyId())){
|
||||
queryWrapper.eq(WarnRule::getStrategyId, warnRule.getStrategyId());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getMsgTypeId())){
|
||||
queryWrapper.eq(WarnRule::getMsgTypeId, warnRule.getMsgTypeId());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getSlideTime())){
|
||||
queryWrapper.eq(WarnRule::getSlideTime, warnRule.getSlideTime());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getSlideFrequency())){
|
||||
queryWrapper.eq(WarnRule::getSlideFrequency, warnRule.getSlideFrequency());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getMaxValue())){
|
||||
queryWrapper.eq(WarnRule::getMaxValue, warnRule.getMaxValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getMinValue())){
|
||||
queryWrapper.eq(WarnRule::getMinValue, warnRule.getMinValue());
|
||||
}
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一 判断
|
||||
* @param warnRule 预警规则
|
||||
* @return 预警规则
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkIdUnique(WarnRule warnRule) {
|
||||
LambdaQueryWrapper<WarnRule> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WarnRule::getId, warnRule.getId());
|
||||
return this.count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CarMessageResp> findByMsg(Long id) {
|
||||
return warnRuleMapper.findByMsg(id);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
package com.muyu.warn.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.warn.domain.car.CartType;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.domain.req.WarnStrategyReq;
|
||||
import com.muyu.warn.mapper.WarnStrategyMapper;
|
||||
import com.muyu.warn.service.WarnStrategyService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Service
|
||||
public class WarnStrategyServiceImpl
|
||||
extends ServiceImpl<WarnStrategyMapper, WarnStrategy>
|
||||
implements WarnStrategyService {
|
||||
|
||||
@Autowired private WarnStrategyMapper warnStrategyMapper;
|
||||
|
||||
/**
|
||||
* 精确查询预警策略
|
||||
*
|
||||
* @param id 预警策略主键
|
||||
* @return 预警策略
|
||||
*/
|
||||
@Override
|
||||
public WarnStrategy selectWarnStrategyById(Long id)
|
||||
{
|
||||
LambdaQueryWrapper<WarnStrategy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Assert.notNull(id, "id不可为空");
|
||||
queryWrapper.eq(WarnStrategy::getId, id);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询预警策略列表
|
||||
*
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 预警策略
|
||||
*/
|
||||
@Override
|
||||
public List<WarnStrategy> selectWarnStrategyList(WarnStrategy warnStrategy)
|
||||
{
|
||||
LambdaQueryWrapper<WarnStrategy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotNull(warnStrategy.getCarTypeId())){
|
||||
queryWrapper.eq(WarnStrategy::getCarTypeId, warnStrategy.getCarTypeId());
|
||||
}
|
||||
if (StringUtils.isNotEmpty(warnStrategy.getStrategyName())){
|
||||
queryWrapper.like(WarnStrategy::getStrategyName, warnStrategy.getStrategyName());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnStrategy.getMsgId())){
|
||||
queryWrapper.eq(WarnStrategy::getMsgId, warnStrategy.getMsgId());
|
||||
}
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一 判断
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 预警策略
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkIdUnique(WarnStrategy warnStrategy) {
|
||||
LambdaQueryWrapper<WarnStrategy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WarnStrategy::getId, warnStrategy.getId());
|
||||
return this.count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CartType> findByCarType() {
|
||||
return warnStrategyMapper.findByCarType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WarnStrategyReq> selectStrategyType(Long ids) {
|
||||
return warnStrategyMapper.selectStrategyType(ids);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
Spring Boot Version: ${spring-boot.version}
|
||||
Spring Application Name: ${spring.application.name}
|
|
@ -0,0 +1,60 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 10004
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: psr
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
amqp:
|
||||
deserialization:
|
||||
trust:
|
||||
all: true
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-warn
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# xxl-job 配置文件
|
||||
- application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# rabbit 配置文件
|
||||
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.muyu.system.mapper: DEBUG
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.muyu.warn.mapper.WarnRuleMapper">
|
||||
<select id="findByMsg" resultType="com.muyu.warn.domain.car.resp.CarMessageResp">
|
||||
SELECT
|
||||
cm.car_message_id,
|
||||
cm.car_message_cartype,
|
||||
cm.car_message_type,
|
||||
cmt.message_type_name,
|
||||
cm.car_message_start_index,
|
||||
cm.car_message_end_index,
|
||||
cm.message_type_class,
|
||||
cm.car_message_state
|
||||
FROM
|
||||
car_message cm
|
||||
LEFT JOIN car_message_type cmt ON cm.car_message_type = cmt.message_type_id
|
||||
WHERE
|
||||
cm.car_message_cartype = #{id}
|
||||
</select>
|
||||
</mapper>
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.muyu.warn.mapper.WarnStrategyMapper">
|
||||
<select id="findByCarType" resultType="com.muyu.warn.domain.car.CartType">
|
||||
select
|
||||
car_type_id,
|
||||
car_type_name,
|
||||
car_type_rules
|
||||
from
|
||||
car_type
|
||||
</select>
|
||||
<select id="selectStrategyType" resultType="com.muyu.warn.domain.req.WarnStrategyReq">
|
||||
select
|
||||
id,
|
||||
car_type_id,
|
||||
strategy_name
|
||||
from
|
||||
warn_strategy
|
||||
where
|
||||
car_type_id = #{ids}
|
||||
</select>
|
||||
</mapper>
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-server</artifactId>
|
||||
<version>3.6.3</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-modules-wechat</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cloud-modules-wechat</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos Config -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Sentinel -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot Actuator -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Mysql Connector -->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataSource -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datasource</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataScope -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datascope</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common Log -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-log</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 接口模块 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-api-doc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- XllJob定时任务 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-xxl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-rabbit</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-wechat</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,15 @@
|
|||
package com.muyu.wechat;
|
||||
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableMyFeignClients
|
||||
public class WeChatApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(WeChatApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
package com.muyu.wechat.controller;
|
||||
|
||||
import com.muyu.common.wechat.domain.Articles;
|
||||
import com.muyu.common.wechat.domain.NewsMessage;
|
||||
import com.muyu.common.wechat.domain.TextMessage;
|
||||
import com.muyu.wechat.util.WordUtil;
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import jakarta.servlet.ServletInputStream;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.dom4j.Document;
|
||||
import org.dom4j.DocumentException;
|
||||
import org.dom4j.Element;
|
||||
import org.dom4j.io.SAXReader;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.controller
|
||||
* @Project:WXApplication
|
||||
* @name:WXController
|
||||
* @Date:2024/9/17 下午8:27
|
||||
*/
|
||||
@RestController
|
||||
public class WXController {
|
||||
|
||||
@GetMapping("/hello")
|
||||
public String hello(){
|
||||
return "Hello Wechat";
|
||||
}
|
||||
|
||||
@GetMapping("/wechat")
|
||||
public String check(
|
||||
@RequestParam("signature") String signature,
|
||||
@RequestParam("timestamp") String timestamp,
|
||||
@RequestParam("nonce") String nonce,
|
||||
@RequestParam("echostr") String echostr
|
||||
){
|
||||
// 1)将token、timestamp、nonce三个参数进行字典序排序
|
||||
String token = "Psan";
|
||||
List<String> list = Arrays.asList(token, timestamp, nonce);
|
||||
//排序
|
||||
Collections.sort(list);
|
||||
// 2)将三个参数字符串拼接成一个字符串进行sha1加密
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
for (String s : list) {
|
||||
stringBuilder.append(s);
|
||||
}
|
||||
//加密
|
||||
try {
|
||||
MessageDigest instance = MessageDigest.getInstance("sha1");
|
||||
//使用sha1进行加密,获得byte数组
|
||||
byte[] digest = instance.digest(stringBuilder.toString().getBytes());
|
||||
StringBuilder sum = new StringBuilder();
|
||||
for (byte b : digest) {
|
||||
sum.append(Integer.toHexString((b>>4)&15));
|
||||
sum.append(Integer.toHexString(b&15));
|
||||
}
|
||||
System.out.println("signature:"+signature);
|
||||
System.out.println("sum:"+sum);
|
||||
// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
|
||||
if (!StringUtils.isEmpty(signature)&&signature.equals(sum.toString())){
|
||||
return echostr;
|
||||
}
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@PostMapping("/")
|
||||
public String receiveMessage(HttpServletRequest request) throws IOException {
|
||||
ServletInputStream inputStream = request.getInputStream();
|
||||
|
||||
// 查看发送信息类型
|
||||
// byte[] bytes = new byte[1024];
|
||||
// int len = 0;
|
||||
// while ((len = inputStream.read(bytes)) != -1) {
|
||||
// System.out.println(new String(bytes, 0, len));
|
||||
// }
|
||||
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
// xstream工具类
|
||||
SAXReader reader = new SAXReader();
|
||||
try {
|
||||
//读取request输入流,获取Document对象
|
||||
Document document = reader.read(inputStream);
|
||||
//获取root节点
|
||||
Element rootElement = document.getRootElement();
|
||||
//获取所有子节点
|
||||
List<Element> elements = rootElement.elements();
|
||||
for (Element element : elements) {
|
||||
map.put(element.getName(), element.getStringValue());
|
||||
}
|
||||
} catch (DocumentException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
System.out.println(map);
|
||||
String massage = null;
|
||||
if ("图文".equals(map.get("Content"))) {
|
||||
massage = getReplyNewsMessage(map);
|
||||
} else {
|
||||
massage = getReplyMessage(map);
|
||||
}
|
||||
// String massage = getReplyMessageByWord(map);
|
||||
return massage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得回复的信息内容
|
||||
* @param map
|
||||
* @return xml格式的字符串
|
||||
*/
|
||||
private String getReplyMessage(HashMap<String, String> map) {
|
||||
TextMessage textMessage = new TextMessage();
|
||||
textMessage.setToUserName(map.get("FromUserName"));
|
||||
textMessage.setFromUserName(map.get("ToUserName"));
|
||||
textMessage.setMsgType("text");
|
||||
textMessage.setContent("你好吖");
|
||||
textMessage.setCreateTime(System.currentTimeMillis()/1000);
|
||||
|
||||
//XStream将java对象转换为xml字符串
|
||||
XStream xStream = new XStream();
|
||||
xStream.processAnnotations(TextMessage.class);
|
||||
String xml = xStream.toXML(textMessage);
|
||||
return xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得同义词
|
||||
* @param map
|
||||
* @return xml格式的字符串
|
||||
*/
|
||||
private String getReplyMessageByWord(HashMap<String, String> map) {
|
||||
TextMessage textMessage = new TextMessage();
|
||||
textMessage.setToUserName(map.get("FromUserName"));
|
||||
textMessage.setFromUserName(map.get("ToUserName"));
|
||||
textMessage.setMsgType("text");
|
||||
textMessage.setContent(WordUtil.getWords(map.get("Content")));
|
||||
textMessage.setCreateTime(System.currentTimeMillis()/1000);
|
||||
|
||||
//XStream将java对象转换为xml字符串
|
||||
XStream xStream = new XStream();
|
||||
xStream.processAnnotations(TextMessage.class);
|
||||
String xml = xStream.toXML(textMessage);
|
||||
return xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得回复的图文信息内容
|
||||
* @param map
|
||||
* @return
|
||||
*/
|
||||
private String getReplyNewsMessage(HashMap<String, String> map) {
|
||||
NewsMessage newsMessage = new NewsMessage();
|
||||
newsMessage.setToUserName(map.get("FromUserName"));
|
||||
newsMessage.setFromUserName(map.get("ToUserName"));
|
||||
newsMessage.setMsgType("news");
|
||||
newsMessage.setCreateTime(System.currentTimeMillis()/1000);
|
||||
newsMessage.setArticleCount(1);
|
||||
List<Articles> articles = new ArrayList<>();
|
||||
Articles article = new Articles();
|
||||
article.setTitle("蓬叁测试公众号");
|
||||
article.setDescription("来自蓬叁");
|
||||
article.setUrl("http://www.psan.com");
|
||||
article.setPicUrl("http://mmbiz.qpic.cn/mmbiz_jpg/ZR9F78J7iasww9HxBJRjsBMInrZ78YbXzKvgwy6iabyfZCiaM0CJKzOIS3fUAboIbh07s8icPfYW7RMiajLmx2opticw/0");
|
||||
articles.add(article);
|
||||
newsMessage.setArticles(articles);
|
||||
|
||||
//XStream将java对象转换为xml字符串
|
||||
XStream xStream = new XStream();
|
||||
xStream.processAnnotations(NewsMessage.class);
|
||||
String xml = xStream.toXML(newsMessage);
|
||||
return xml;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package com.muyu.wechat.token;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.muyu.common.wechat.domain.AccessToken;
|
||||
import com.muyu.wechat.util.OkHttpUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class TokenUtil {
|
||||
public final static String APP_ID = "wx962013f3b1eb0a51";
|
||||
|
||||
public final static String APP_SECRET ="5c4c0b2130e6fdf86d989237f9e201dc";
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(getAccessToken());
|
||||
System.out.println(getAccessToken());
|
||||
}
|
||||
|
||||
//域名
|
||||
public final static String REDIRECT_DOMAIN ="er6zej.natappfree.cc";
|
||||
|
||||
private static AccessToken accessToken = new AccessToken();
|
||||
|
||||
// {"access_token":"84_E1XHZXQpPj-K6mbCRmGn58iIPU3w7ViwtZRwAt5QN39FP9VBLPq57S_XjRQY88upoYyT4Boil2P6gY8uoKLHuth-W5OczJzr5EGZoWeh2PwhTKEfR1NcCWjqgTYJREcAIAZHU","expires_in":7200}
|
||||
private static void getToken(){
|
||||
String url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s",APP_ID,APP_SECRET);
|
||||
String request = OkHttpUtils.sendGetRequest(url);
|
||||
System.out.println(request);
|
||||
AccessToken wechatToken = JSON.parseObject(request, AccessToken.class);
|
||||
//redisService.setCacheObject("WECHAT_TOKEN",wechatToken.getAccessToken(),wechatToken.getExpiresIn(), TimeUnit.SECONDS);
|
||||
if (wechatToken != null) {
|
||||
accessToken.setExpiresTime(wechatToken.getExpires_in());
|
||||
accessToken.setAccess_token(wechatToken.getAccess_token());
|
||||
}
|
||||
}
|
||||
public static String getAccessToken(){
|
||||
getToken();
|
||||
return accessToken.getAccess_token();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package com.muyu.wechat.util;
|
||||
|
||||
import okhttp3.*;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class OkHttpUtils {
|
||||
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
|
||||
public static String sendGetRequest(String urlString) {
|
||||
Request request = new Request.Builder()
|
||||
.url(urlString)
|
||||
.build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
return response.body().string();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static String sendPostRequest(String urlString, String params) {
|
||||
RequestBody requestBody = RequestBody.create(params, MediaType.parse("application/json; charset=utf-8"));
|
||||
Request request = new Request.Builder()
|
||||
.url(urlString)
|
||||
.post(requestBody)
|
||||
.build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
return response.body().string();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.muyu.wechat.util;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.util
|
||||
* @Project:WXApplication
|
||||
* @name:WordUtil
|
||||
* @Date:2024/9/18 下午7:38
|
||||
*/
|
||||
public class WordUtil {
|
||||
|
||||
//接口地址
|
||||
public static final String WORD_URL = "http://apis.juhe.cn/tyfy/query";
|
||||
|
||||
//申请接口的请求key
|
||||
// TODO: 您需要改变自己的请求key
|
||||
public static final String KEY = "f9ef42f215679f6995585159c3e1073e";
|
||||
|
||||
public static String getWords(String word){
|
||||
//发送http请求的url
|
||||
String url = String.format(WORD_URL, KEY);
|
||||
final String reponse = OkHttpUtils.sendPostRequest(url,JSONObject.toJSONString(word));
|
||||
System.out.println("接口返回:"+reponse);
|
||||
JSONObject jsonObject = JSONObject.parseObject(reponse) ;
|
||||
Integer error_code = jsonObject.getInteger("error_code");
|
||||
if (error_code == 0){
|
||||
System.out.println("调用接口成功");
|
||||
JSONObject result = jsonObject.getJSONObject("result");
|
||||
JSONArray words = result.getJSONArray("words");
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
words.stream().forEach(w -> stringBuilder.append(w + ""));
|
||||
System.out.println(stringBuilder);
|
||||
return stringBuilder.toString();
|
||||
} else {
|
||||
System.out.println("调用接口失败:" + jsonObject.getString("reason"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
Spring Boot Version: ${spring-boot.version}
|
||||
Spring Application Name: ${spring.application.name}
|
|
@ -0,0 +1,60 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 10003
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: psr
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
amqp:
|
||||
deserialization:
|
||||
trust:
|
||||
all: true
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-wechat
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# xxl-job 配置文件
|
||||
- application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# rabbit 配置文件
|
||||
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.muyu.system.mapper: DEBUG
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
|
@ -14,6 +14,9 @@
|
|||
<module>cloud-modules-gen</module>
|
||||
<module>cloud-modules-file</module>
|
||||
<module>cloud-modules-car</module>
|
||||
<module>cloud-modules-warn</module>
|
||||
<module>cloud-modules-car</module>
|
||||
<module>cloud-test</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>cloud-modules</artifactId>
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"name": "cloud-server-8",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"node_modules/echarts": {
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
|
||||
"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
|
||||
"dependencies": {
|
||||
"tslib": "2.3.0",
|
||||
"zrender": "5.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
|
||||
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
|
||||
},
|
||||
"node_modules/zrender": {
|
||||
"version": "5.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
|
||||
"integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
|
||||
"dependencies": {
|
||||
"tslib": "2.3.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,419 @@
|
|||
This file contains the PGP keys of various developers.
|
||||
Please don't use them for email unless you have to. Their main
|
||||
purpose is code signing.
|
||||
|
||||
Examples of importing this file in your keystore:
|
||||
gpg --import KEYS.txt
|
||||
(need pgp and other examples here)
|
||||
|
||||
Examples of adding your key to this file:
|
||||
pgp -kxa <your name> and append it to this file.
|
||||
(pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
|
||||
(gpg --list-sigs <your name>
|
||||
&& gpg --armor --export <your name>) >> this file.
|
||||
|
||||
---------------------------------------
|
||||
pub rsa4096 2018-04-23 [SC]
|
||||
9B06D9B4FA37C4DD52725742747985D7E3CEB635
|
||||
uid [ultimate] Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
|
||||
sig 3 747985D7E3CEB635 2018-04-23 Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
|
||||
sub rsa4096 2018-04-23 [E]
|
||||
sig 747985D7E3CEB635 2018-04-23 Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
oQH7TsthVKvdZyjtZQg=
|
||||
=Uv8d
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub rsa4096 2019-01-24 [SC]
|
||||
1683FBD23F6DD36C0E52223507D78F777D2C0C27
|
||||
uid [ultimate] Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
|
||||
sig 3 07D78F777D2C0C27 2019-01-24 Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
|
||||
sub rsa4096 2019-01-24 [E]
|
||||
sig 07D78F777D2C0C27 2019-01-24 Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
B4WM8AJSCwl8WlZrRA==
|
||||
=wft0
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub rsa4096 2020-08-06 [SC]
|
||||
94BD178077672157652826758E44A82497382298
|
||||
uid [ 绝对 ] Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
|
||||
sig 3 8E44A82497382298 2020-08-06 Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
|
||||
sub rsa4096 2020-08-06 [E]
|
||||
sig 8E44A82497382298 2020-08-06 Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
krvOtK7UUytDTcY=
|
||||
=+SBy
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub rsa4096 2022-03-02 [SC]
|
||||
8ACA4FC874B6B0836DFE70BB52514D7E7CFC32B6
|
||||
uid [ 绝对 ] Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
|
||||
sig 3 52514D7E7CFC32B6 2022-03-02 Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
|
||||
sub rsa4096 2022-03-02 [E]
|
||||
sig 52514D7E7CFC32B6 2022-03-02 Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
RWnk0btbWIvaznWpIWo=
|
||||
=QBYg
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub rsa4096 2022-03-28 [SC]
|
||||
EFA5629C5F1FF8D33E016202F16C82C561221579
|
||||
uid [ultimate] Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
|
||||
sig 3 F16C82C561221579 2022-03-28 Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
|
||||
sub rsa4096 2022-03-28 [E]
|
||||
sig F16C82C561221579 2022-03-28 Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
5B5E6LlMNPTCWmPzYtTm5qZK
|
||||
=bbcU
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub ed25519 2022-12-01 [SC] [expires: 2024-11-30]
|
||||
016736F5612A13D1FD04AA45CC593BC1F4F4EB7A
|
||||
uid [ultimate] susiwen <susiwen8@gmail.com>
|
||||
sig 3 CC593BC1F4F4EB7A 2022-12-01 susiwen <susiwen8@gmail.com>
|
||||
sub cv25519 2022-12-01 [E] [expires: 2024-11-30]
|
||||
sig CC593BC1F4F4EB7A 2022-12-01 susiwen <susiwen8@gmail.com>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEY4jDBhYJKwYBBAHaRw8BAQdAlpaQNA7ARfkPVj6EoYARkkGPdLgOmulCwScl
|
||||
xGk3+8m0HHN1c2l3ZW4gPHN1c2l3ZW44QGdtYWlsLmNvbT6ImQQTFgoAQRYhBAFn
|
||||
NvVhKhPR/QSqRcxZO8H09Ot6BQJjiMMGAhsDBQkDwmcABQsJCAcCAiICBhUKCQgL
|
||||
AgQWAgMBAh4HAheAAAoJEMxZO8H09Ot6gcoBANBsCrZOwZtWCCQB2A6cy0or7q4c
|
||||
GdyMJbP7zT5tdAAuAQDI7dy5/KE5tklZmEHJZevQLWezs6yKi+31QxcNFh6FA7g4
|
||||
BGOIwwYSCisGAQQBl1UBBQEBB0A4z0jb/PpPRt/zILSBzl8XidMvvQAksexms4P4
|
||||
D74EcQMBCAeIfgQYFgoAJhYhBAFnNvVhKhPR/QSqRcxZO8H09Ot6BQJjiMMGAhsM
|
||||
BQkDwmcAAAoJEMxZO8H09Ot6hEABALEBaZSNzmx17PbubyiyvtaEISuzsv23RYwh
|
||||
4NRHP4BkAP475WSjwMns2hSairvPXULqAcqQnjytov7CU1hbMLvgDpgzBGOMr5EW
|
||||
CSsGAQQB2kcPAQEHQF85ZZTr9NstXxkToCrkVYwNuahidgRyv6S3zo2xTc6ZtC9z
|
||||
dXNpd2VuIChDT0RFIFNJR05JTkcgS0VZKSA8c3VzaXdlbjhAZ21haWwuY29tPoiT
|
||||
BBMWCgA7FiEEhBIjSy5LUgkGNSGQJZ0/SMJTSzwFAmOMr5ECGwMFCwkIBwICIgIG
|
||||
FQoJCAsCBBYCAwECHgcCF4AACgkQJZ0/SMJTSzyNaAD+P35MI4r5nUDDg97QKYNY
|
||||
m99MtUxTmcK/KGsrxYEZEDEA/jECGFvy/5WAhIRUTl4ExVsY3eBL/K2DaoTseW4a
|
||||
eVEPuDgEY4yvkRIKKwYBBAGXVQEFAQEHQKNPmeMoqbHBVs5xn0c+Tz/bPW0rDDbw
|
||||
Gt1pqdBMdmUvAwEIB4h4BBgWCgAgFiEEhBIjSy5LUgkGNSGQJZ0/SMJTSzwFAmOM
|
||||
r5ECGwwACgkQJZ0/SMJTSzxTzQD+MTFHjt7z78fdTqbbRA6isxPV84cAFQsX4cRx
|
||||
PRobcbkBAIwAkq+ddEycxZTdzaELpE08h/BLcScqbOl/ME1PTZ0H
|
||||
=3Tm4
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub ed25519 2023-03-15 [SC] [有效至:2025-03-14]
|
||||
9C8B166777DB15AD1CC0FFBF715559B9217D4E5A
|
||||
uid [ 绝对 ] zakwu <123537200@qq.com>
|
||||
sig 3 715559B9217D4E5A 2023-03-15 zakwu <123537200@qq.com>
|
||||
sub cv25519 2023-03-15 [E] [有效至:2025-03-14]
|
||||
sig 715559B9217D4E5A 2023-03-15 zakwu <123537200@qq.com>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEZBE+JRYJKwYBBAHaRw8BAQdA4US4FlrxvH2Ckj5NzIkeL5nd4NyDBrlpyERo
|
||||
KvlXn/C0GHpha3d1IDwxMjM1MzcyMDBAcXEuY29tPoiZBBMWCgBBFiEEnIsWZ3fb
|
||||
Fa0cwP+/cVVZuSF9TloFAmQRPiUCGwMFCQPCZwAFCwkIBwICIgIGFQoJCAsCBBYC
|
||||
AwECHgcCF4AACgkQcVVZuSF9TloeGAD/RjarHn34jh1NtJGi6Z8wv/XWESxyNH6g
|
||||
orBPlQ+yluEBAIinhY8j/XczJQUcj9cqpMB4m8R+/jEadbaBe9pQ3uAHuDgEZBE+
|
||||
JRIKKwYBBAGXVQEFAQEHQPa8rnpAhbsWw0VsCbYo1J+VeZXT/piqPpdducN3Wyh2
|
||||
AwEIB4h+BBgWCgAmFiEEnIsWZ3fbFa0cwP+/cVVZuSF9TloFAmQRPiUCGwwFCQPC
|
||||
ZwAACgkQcVVZuSF9Tlrc4QD/ZDd7OjcT9ShdARjcGoQ0jt6rEqL6n10V6caG+77a
|
||||
89wA/R+29UlbOXNAxcQHxph8WXUZhACDhKyNETgRsgHysZQJ
|
||||
=/6bg
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub rsa4096 2024-01-31 [SC]
|
||||
88AF48720040B150083A7D10932517D290673A7B
|
||||
uid [ 绝对 ] Zhang Wenli <ovilia@apache.org>
|
||||
sig 3 932517D290673A7B 2024-01-31 [自签名]
|
||||
sub rsa4096 2024-01-31 [E]
|
||||
sig 932517D290673A7B 2024-01-31 [自签名]
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=YTwy
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -0,0 +1,222 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
========================================================================
|
||||
Apache ECharts Subcomponents:
|
||||
|
||||
The Apache ECharts project contains subcomponents with separate copyright
|
||||
notices and license terms. Your use of the source code for these
|
||||
subcomponents is also subject to the terms and conditions of the following
|
||||
licenses.
|
||||
|
||||
BSD 3-Clause (d3.js):
|
||||
The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause:
|
||||
`/src/chart/treemap/treemapLayout.ts`,
|
||||
`/src/chart/tree/layoutHelper.ts`,
|
||||
`/src/chart/graph/forceHelper.ts`,
|
||||
`/src/util/number.ts`
|
||||
See `/licenses/LICENSE-d3` for details of the license.
|
|
@ -0,0 +1,5 @@
|
|||
Apache ECharts
|
||||
Copyright 2017-2024 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (https://www.apache.org/).
|
|
@ -0,0 +1,98 @@
|
|||
# Apache ECharts
|
||||
|
||||
<a href="https://echarts.apache.org/">
|
||||
<img style="vertical-align: top;" src="./asset/logo.png?raw=true" alt="logo" height="50px">
|
||||
</a>
|
||||
|
||||
Apache ECharts is a free, powerful charting and visualization library offering easy ways to add intuitive, interactive, and highly customizable charts to your commercial products. It is written in pure JavaScript and based on <a href="https://github.com/ecomfe/zrender">zrender</a>, which is a whole new lightweight canvas library.
|
||||
|
||||
**[中文官网](https://echarts.apache.org/zh/index.html)** | **[ENGLISH HOMEPAGE](https://echarts.apache.org/en/index.html)**
|
||||
|
||||
[](https://github.com/apache/echarts/blob/master/LICENSE) [](https://www.npmjs.com/package/echarts) [](https://www.npmjs.com/package/echarts) [](https://github.com/apache/echarts/graphs/contributors)
|
||||
|
||||
[](https://github.com/apache/echarts/actions/workflows/ci.yml)
|
||||
|
||||
## Get Apache ECharts
|
||||
|
||||
You may choose one of the following methods:
|
||||
|
||||
+ Download from the [official website](https://echarts.apache.org/download.html)
|
||||
+ `npm install echarts --save`
|
||||
+ CDN: [jsDelivr CDN](https://www.jsdelivr.com/package/npm/echarts?path=dist)
|
||||
|
||||
## Docs
|
||||
|
||||
+ [Get Started](https://echarts.apache.org/handbook)
|
||||
+ [API](https://echarts.apache.org/api.html)
|
||||
+ [Option Manual](https://echarts.apache.org/option.html)
|
||||
+ [Examples](https://echarts.apache.org/examples)
|
||||
|
||||
## Get Help
|
||||
|
||||
+ [GitHub Issues](https://github.com/apache/echarts/issues) for bug report and feature requests
|
||||
+ Email [dev@echarts.apache.org](mailto:dev@echarts.apache.org) for general questions
|
||||
+ Subscribe to the [mailing list](https://echarts.apache.org/maillist.html) to get updated with the project
|
||||
|
||||
## Build
|
||||
|
||||
Build echarts source code:
|
||||
|
||||
Execute the instructions in the root directory of the echarts:
|
||||
([Node.js](https://nodejs.org) is required)
|
||||
|
||||
```shell
|
||||
# Install the dependencies from NPM:
|
||||
npm install
|
||||
|
||||
# Rebuild source code immediately in watch mode when changing the source code.
|
||||
# It opens the `./test` directory, and you may open `-cases.html` to get the list
|
||||
# of all test cases.
|
||||
# If you wish to create a test case, run `npm run mktest:help` to learn more.
|
||||
npm run dev
|
||||
|
||||
# Check the correctness of TypeScript code.
|
||||
npm run checktype
|
||||
|
||||
# If intending to build and get all types of the "production" files:
|
||||
npm run release
|
||||
```
|
||||
|
||||
Then the "production" files are generated in the `dist` directory.
|
||||
|
||||
## Contribution
|
||||
|
||||
Please refer to the [contributing](https://github.com/apache/echarts/blob/master/CONTRIBUTING.md) document if you wish to debug locally or make pull requests.
|
||||
|
||||
## Resources
|
||||
|
||||
### Awesome ECharts
|
||||
|
||||
[https://github.com/ecomfe/awesome-echarts](https://github.com/ecomfe/awesome-echarts)
|
||||
|
||||
### Extensions
|
||||
|
||||
+ [ECharts GL](https://github.com/ecomfe/echarts-gl) An extension pack of ECharts, which provides 3D plots, globe visualization, and WebGL acceleration.
|
||||
|
||||
+ [Liquidfill 水球图](https://github.com/ecomfe/echarts-liquidfill)
|
||||
|
||||
+ [Wordcloud 字符云](https://github.com/ecomfe/echarts-wordcloud)
|
||||
|
||||
+ [Extension for Baidu Map 百度地图扩展](https://github.com/apache/echarts/tree/master/extension-src/bmap) An extension provides a wrapper of Baidu Map Service SDK.
|
||||
|
||||
+ [vue-echarts](https://github.com/ecomfe/vue-echarts) ECharts component for Vue.js
|
||||
|
||||
+ [echarts-stat](https://github.com/ecomfe/echarts-stat) Statistics tool for ECharts
|
||||
|
||||
## License
|
||||
|
||||
ECharts is available under the Apache License V2.
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Please refer to [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html).
|
||||
|
||||
## Paper
|
||||
|
||||
Deqing Li, Honghui Mei, Yi Shen, Shuang Su, Wenli Zhang, Junting Wang, Ming Zu, Wei Chen.
|
||||
[ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization](https://www.sciencedirect.com/science/article/pii/S2468502X18300068).
|
||||
Visual Informatics, 2018.
|
Binary file not shown.
After Width: | Height: | Size: 7.2 KiB |
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './types/dist/charts';
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
// In somehow. If we export like
|
||||
// export * as LineChart './chart/line/install'
|
||||
// The exported code will be transformed to
|
||||
// import * as LineChart_1 './chart/line/install'; export {LineChart_1 as LineChart};
|
||||
// Treeshaking in webpack will not work even if we configured sideEffects to false in package.json
|
||||
|
||||
export * from './lib/export/charts.js';
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './types/dist/components';
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './lib/export/components.js';
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './types/dist/core';
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './lib/export/core.js';
|
|
@ -0,0 +1,235 @@
|
|||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
/* global BMap */
|
||||
import { util as zrUtil, graphic, matrix } from 'echarts';
|
||||
function BMapCoordSys(bmap, api) {
|
||||
this._bmap = bmap;
|
||||
this.dimensions = ['lng', 'lat'];
|
||||
this._mapOffset = [0, 0];
|
||||
this._api = api;
|
||||
this._projection = new BMap.MercatorProjection();
|
||||
}
|
||||
BMapCoordSys.prototype.type = 'bmap';
|
||||
BMapCoordSys.prototype.dimensions = ['lng', 'lat'];
|
||||
BMapCoordSys.prototype.setZoom = function (zoom) {
|
||||
this._zoom = zoom;
|
||||
};
|
||||
BMapCoordSys.prototype.setCenter = function (center) {
|
||||
this._center = this._projection.lngLatToPoint(new BMap.Point(center[0], center[1]));
|
||||
};
|
||||
BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
|
||||
this._mapOffset = mapOffset;
|
||||
};
|
||||
BMapCoordSys.prototype.getBMap = function () {
|
||||
return this._bmap;
|
||||
};
|
||||
BMapCoordSys.prototype.dataToPoint = function (data) {
|
||||
var point = new BMap.Point(data[0], data[1]);
|
||||
// TODO mercator projection is toooooooo slow
|
||||
// let mercatorPoint = this._projection.lngLatToPoint(point);
|
||||
// let width = this._api.getZr().getWidth();
|
||||
// let height = this._api.getZr().getHeight();
|
||||
// let divider = Math.pow(2, 18 - 10);
|
||||
// return [
|
||||
// Math.round((mercatorPoint.x - this._center.x) / divider + width / 2),
|
||||
// Math.round((this._center.y - mercatorPoint.y) / divider + height / 2)
|
||||
// ];
|
||||
var px = this._bmap.pointToOverlayPixel(point);
|
||||
var mapOffset = this._mapOffset;
|
||||
return [px.x - mapOffset[0], px.y - mapOffset[1]];
|
||||
};
|
||||
BMapCoordSys.prototype.pointToData = function (pt) {
|
||||
var mapOffset = this._mapOffset;
|
||||
pt = this._bmap.overlayPixelToPoint({
|
||||
x: pt[0] + mapOffset[0],
|
||||
y: pt[1] + mapOffset[1]
|
||||
});
|
||||
return [pt.lng, pt.lat];
|
||||
};
|
||||
BMapCoordSys.prototype.getViewRect = function () {
|
||||
var api = this._api;
|
||||
return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
|
||||
};
|
||||
BMapCoordSys.prototype.getRoamTransform = function () {
|
||||
return matrix.create();
|
||||
};
|
||||
BMapCoordSys.prototype.prepareCustoms = function () {
|
||||
var rect = this.getViewRect();
|
||||
return {
|
||||
coordSys: {
|
||||
// The name exposed to user is always 'cartesian2d' but not 'grid'.
|
||||
type: 'bmap',
|
||||
x: rect.x,
|
||||
y: rect.y,
|
||||
width: rect.width,
|
||||
height: rect.height
|
||||
},
|
||||
api: {
|
||||
coord: zrUtil.bind(this.dataToPoint, this),
|
||||
size: zrUtil.bind(dataToCoordSize, this)
|
||||
}
|
||||
};
|
||||
};
|
||||
BMapCoordSys.prototype.convertToPixel = function (ecModel, finder, value) {
|
||||
// here we ignore finder as only one bmap component is allowed
|
||||
return this.dataToPoint(value);
|
||||
};
|
||||
BMapCoordSys.prototype.convertFromPixel = function (ecModel, finder, value) {
|
||||
return this.pointToData(value);
|
||||
};
|
||||
function dataToCoordSize(dataSize, dataItem) {
|
||||
dataItem = dataItem || [0, 0];
|
||||
return zrUtil.map([0, 1], function (dimIdx) {
|
||||
var val = dataItem[dimIdx];
|
||||
var halfSize = dataSize[dimIdx] / 2;
|
||||
var p1 = [];
|
||||
var p2 = [];
|
||||
p1[dimIdx] = val - halfSize;
|
||||
p2[dimIdx] = val + halfSize;
|
||||
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
|
||||
return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
|
||||
}, this);
|
||||
}
|
||||
var Overlay;
|
||||
// For deciding which dimensions to use when creating list data
|
||||
BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;
|
||||
function createOverlayCtor() {
|
||||
function Overlay(root) {
|
||||
this._root = root;
|
||||
}
|
||||
Overlay.prototype = new BMap.Overlay();
|
||||
/**
|
||||
* 初始化
|
||||
*
|
||||
* @param {BMap.Map} map
|
||||
* @override
|
||||
*/
|
||||
Overlay.prototype.initialize = function (map) {
|
||||
map.getPanes().labelPane.appendChild(this._root);
|
||||
return this._root;
|
||||
};
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
Overlay.prototype.draw = function () {};
|
||||
return Overlay;
|
||||
}
|
||||
BMapCoordSys.create = function (ecModel, api) {
|
||||
var bmapCoordSys;
|
||||
var root = api.getDom();
|
||||
// TODO Dispose
|
||||
ecModel.eachComponent('bmap', function (bmapModel) {
|
||||
var painter = api.getZr().painter;
|
||||
var viewportRoot = painter.getViewportRoot();
|
||||
if (typeof BMap === 'undefined') {
|
||||
throw new Error('BMap api is not loaded');
|
||||
}
|
||||
Overlay = Overlay || createOverlayCtor();
|
||||
if (bmapCoordSys) {
|
||||
throw new Error('Only one bmap component can exist');
|
||||
}
|
||||
var bmap;
|
||||
if (!bmapModel.__bmap) {
|
||||
// Not support IE8
|
||||
var bmapRoot = root.querySelector('.ec-extension-bmap');
|
||||
if (bmapRoot) {
|
||||
// Reset viewport left and top, which will be changed
|
||||
// in moving handler in BMapView
|
||||
viewportRoot.style.left = '0px';
|
||||
viewportRoot.style.top = '0px';
|
||||
root.removeChild(bmapRoot);
|
||||
}
|
||||
bmapRoot = document.createElement('div');
|
||||
bmapRoot.className = 'ec-extension-bmap';
|
||||
// fix #13424
|
||||
bmapRoot.style.cssText = 'position:absolute;width:100%;height:100%';
|
||||
root.appendChild(bmapRoot);
|
||||
// initializes bmap
|
||||
var mapOptions = bmapModel.get('mapOptions');
|
||||
if (mapOptions) {
|
||||
mapOptions = zrUtil.clone(mapOptions);
|
||||
// Not support `mapType`, use `bmap.setMapType(MapType)` instead.
|
||||
delete mapOptions.mapType;
|
||||
}
|
||||
bmap = bmapModel.__bmap = new BMap.Map(bmapRoot, mapOptions);
|
||||
var overlay = new Overlay(viewportRoot);
|
||||
bmap.addOverlay(overlay);
|
||||
// Override
|
||||
painter.getViewportRootOffset = function () {
|
||||
return {
|
||||
offsetLeft: 0,
|
||||
offsetTop: 0
|
||||
};
|
||||
};
|
||||
}
|
||||
bmap = bmapModel.__bmap;
|
||||
// Set bmap options
|
||||
// centerAndZoom before layout and render
|
||||
var center = bmapModel.get('center');
|
||||
var zoom = bmapModel.get('zoom');
|
||||
if (center && zoom) {
|
||||
var bmapCenter = bmap.getCenter();
|
||||
var bmapZoom = bmap.getZoom();
|
||||
var centerOrZoomChanged = bmapModel.centerOrZoomChanged([bmapCenter.lng, bmapCenter.lat], bmapZoom);
|
||||
if (centerOrZoomChanged) {
|
||||
var pt = new BMap.Point(center[0], center[1]);
|
||||
bmap.centerAndZoom(pt, zoom);
|
||||
}
|
||||
}
|
||||
bmapCoordSys = new BMapCoordSys(bmap, api);
|
||||
bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
|
||||
bmapCoordSys.setZoom(zoom);
|
||||
bmapCoordSys.setCenter(center);
|
||||
bmapModel.coordinateSystem = bmapCoordSys;
|
||||
});
|
||||
ecModel.eachSeries(function (seriesModel) {
|
||||
if (seriesModel.get('coordinateSystem') === 'bmap') {
|
||||
seriesModel.coordinateSystem = bmapCoordSys;
|
||||
}
|
||||
});
|
||||
// return created coordinate systems
|
||||
return bmapCoordSys && [bmapCoordSys];
|
||||
};
|
||||
export default BMapCoordSys;
|
|
@ -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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
import * as echarts from 'echarts';
|
||||
function v2Equal(a, b) {
|
||||
return a && b && a[0] === b[0] && a[1] === b[1];
|
||||
}
|
||||
export default echarts.extendComponentModel({
|
||||
type: 'bmap',
|
||||
getBMap: function () {
|
||||
// __bmap is injected when creating BMapCoordSys
|
||||
return this.__bmap;
|
||||
},
|
||||
setCenterAndZoom: function (center, zoom) {
|
||||
this.option.center = center;
|
||||
this.option.zoom = zoom;
|
||||
},
|
||||
centerOrZoomChanged: function (center, zoom) {
|
||||
var option = this.option;
|
||||
return !(v2Equal(center, option.center) && zoom === option.zoom);
|
||||
},
|
||||
defaultOption: {
|
||||
center: [104.114129, 37.550339],
|
||||
zoom: 5,
|
||||
// 2.0 https://lbsyun.baidu.com/custom/index.htm
|
||||
mapStyle: {},
|
||||
// 3.0 https://lbsyun.baidu.com/index.php?title=open/custom
|
||||
mapStyleV2: {},
|
||||
// See https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a0b1
|
||||
mapOptions: {},
|
||||
roam: false
|
||||
}
|
||||
});
|
|
@ -0,0 +1,146 @@
|
|||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
import * as echarts from 'echarts';
|
||||
function isEmptyObject(obj) {
|
||||
for (var key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
export default echarts.extendComponentView({
|
||||
type: 'bmap',
|
||||
render: function (bMapModel, ecModel, api) {
|
||||
var rendering = true;
|
||||
var bmap = bMapModel.getBMap();
|
||||
var viewportRoot = api.getZr().painter.getViewportRoot();
|
||||
var coordSys = bMapModel.coordinateSystem;
|
||||
var moveHandler = function (type, target) {
|
||||
if (rendering) {
|
||||
return;
|
||||
}
|
||||
var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
|
||||
var mapOffset = [-parseInt(offsetEl.style.left, 10) || 0, -parseInt(offsetEl.style.top, 10) || 0];
|
||||
// only update style when map offset changed
|
||||
var viewportRootStyle = viewportRoot.style;
|
||||
var offsetLeft = mapOffset[0] + 'px';
|
||||
var offsetTop = mapOffset[1] + 'px';
|
||||
if (viewportRootStyle.left !== offsetLeft) {
|
||||
viewportRootStyle.left = offsetLeft;
|
||||
}
|
||||
if (viewportRootStyle.top !== offsetTop) {
|
||||
viewportRootStyle.top = offsetTop;
|
||||
}
|
||||
coordSys.setMapOffset(mapOffset);
|
||||
bMapModel.__mapOffset = mapOffset;
|
||||
api.dispatchAction({
|
||||
type: 'bmapRoam',
|
||||
animation: {
|
||||
duration: 0
|
||||
}
|
||||
});
|
||||
};
|
||||
function zoomEndHandler() {
|
||||
if (rendering) {
|
||||
return;
|
||||
}
|
||||
api.dispatchAction({
|
||||
type: 'bmapRoam',
|
||||
animation: {
|
||||
duration: 0
|
||||
}
|
||||
});
|
||||
}
|
||||
bmap.removeEventListener('moving', this._oldMoveHandler);
|
||||
bmap.removeEventListener('moveend', this._oldMoveHandler);
|
||||
bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
|
||||
bmap.addEventListener('moving', moveHandler);
|
||||
bmap.addEventListener('moveend', moveHandler);
|
||||
bmap.addEventListener('zoomend', zoomEndHandler);
|
||||
this._oldMoveHandler = moveHandler;
|
||||
this._oldZoomEndHandler = zoomEndHandler;
|
||||
var roam = bMapModel.get('roam');
|
||||
if (roam && roam !== 'scale') {
|
||||
bmap.enableDragging();
|
||||
} else {
|
||||
bmap.disableDragging();
|
||||
}
|
||||
if (roam && roam !== 'move') {
|
||||
bmap.enableScrollWheelZoom();
|
||||
bmap.enableDoubleClickZoom();
|
||||
bmap.enablePinchToZoom();
|
||||
} else {
|
||||
bmap.disableScrollWheelZoom();
|
||||
bmap.disableDoubleClickZoom();
|
||||
bmap.disablePinchToZoom();
|
||||
}
|
||||
/* map 2.0 */
|
||||
var originalStyle = bMapModel.__mapStyle;
|
||||
var newMapStyle = bMapModel.get('mapStyle') || {};
|
||||
// FIXME, Not use JSON methods
|
||||
var mapStyleStr = JSON.stringify(newMapStyle);
|
||||
if (JSON.stringify(originalStyle) !== mapStyleStr) {
|
||||
// FIXME May have blank tile when dragging if setMapStyle
|
||||
if (!isEmptyObject(newMapStyle)) {
|
||||
bmap.setMapStyle(echarts.util.clone(newMapStyle));
|
||||
}
|
||||
bMapModel.__mapStyle = JSON.parse(mapStyleStr);
|
||||
}
|
||||
/* map 3.0 */
|
||||
var originalStyle2 = bMapModel.__mapStyle2;
|
||||
var newMapStyle2 = bMapModel.get('mapStyleV2') || {};
|
||||
// FIXME, Not use JSON methods
|
||||
var mapStyleStr2 = JSON.stringify(newMapStyle2);
|
||||
if (JSON.stringify(originalStyle2) !== mapStyleStr2) {
|
||||
// FIXME May have blank tile when dragging if setMapStyle
|
||||
if (!isEmptyObject(newMapStyle2)) {
|
||||
bmap.setMapStyleV2(echarts.util.clone(newMapStyle2));
|
||||
}
|
||||
bMapModel.__mapStyle2 = JSON.parse(mapStyleStr2);
|
||||
}
|
||||
rendering = false;
|
||||
}
|
||||
});
|
|
@ -0,0 +1,65 @@
|
|||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
/**
|
||||
* BMap component extension
|
||||
*/
|
||||
import * as echarts from 'echarts';
|
||||
import BMapCoordSys from './BMapCoordSys.js';
|
||||
import './BMapModel.js';
|
||||
import './BMapView.js';
|
||||
echarts.registerCoordinateSystem('bmap', BMapCoordSys);
|
||||
// Action
|
||||
echarts.registerAction({
|
||||
type: 'bmapRoam',
|
||||
event: 'bmapRoam',
|
||||
update: 'updateLayout'
|
||||
}, function (payload, ecModel) {
|
||||
ecModel.eachComponent('bmap', function (bMapModel) {
|
||||
var bmap = bMapModel.getBMap();
|
||||
var center = bmap.getCenter();
|
||||
bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
|
||||
});
|
||||
});
|
||||
export var version = '1.0.0';
|
|
@ -0,0 +1,203 @@
|
|||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
/**
|
||||
* This is a parse of GEXF.
|
||||
*
|
||||
* The spec of GEXF:
|
||||
* https://gephi.org/gexf/1.2draft/gexf-12draft-primer.pdf
|
||||
*/
|
||||
import * as zrUtil from 'zrender/lib/core/util.js';
|
||||
export function parse(xml) {
|
||||
var doc;
|
||||
if (typeof xml === 'string') {
|
||||
var parser = new DOMParser();
|
||||
doc = parser.parseFromString(xml, 'text/xml');
|
||||
} else {
|
||||
doc = xml;
|
||||
}
|
||||
if (!doc || doc.getElementsByTagName('parsererror').length) {
|
||||
return null;
|
||||
}
|
||||
var gexfRoot = getChildByTagName(doc, 'gexf');
|
||||
if (!gexfRoot) {
|
||||
return null;
|
||||
}
|
||||
var graphRoot = getChildByTagName(gexfRoot, 'graph');
|
||||
var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
|
||||
var attributesMap = {};
|
||||
for (var i = 0; i < attributes.length; i++) {
|
||||
attributesMap[attributes[i].id] = attributes[i];
|
||||
}
|
||||
return {
|
||||
nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap),
|
||||
links: parseEdges(getChildByTagName(graphRoot, 'edges'))
|
||||
};
|
||||
}
|
||||
function parseAttributes(parent) {
|
||||
return parent ? zrUtil.map(getChildrenByTagName(parent, 'attribute'), function (attribDom) {
|
||||
return {
|
||||
id: getAttr(attribDom, 'id'),
|
||||
title: getAttr(attribDom, 'title'),
|
||||
type: getAttr(attribDom, 'type')
|
||||
};
|
||||
}) : [];
|
||||
}
|
||||
function parseNodes(parent, attributesMap) {
|
||||
return parent ? zrUtil.map(getChildrenByTagName(parent, 'node'), function (nodeDom) {
|
||||
var id = getAttr(nodeDom, 'id');
|
||||
var label = getAttr(nodeDom, 'label');
|
||||
var node = {
|
||||
id: id,
|
||||
name: label,
|
||||
itemStyle: {
|
||||
normal: {}
|
||||
}
|
||||
};
|
||||
var vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
|
||||
var vizPosDom = getChildByTagName(nodeDom, 'viz:position');
|
||||
var vizColorDom = getChildByTagName(nodeDom, 'viz:color');
|
||||
// let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
|
||||
var attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
|
||||
if (vizSizeDom) {
|
||||
node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));
|
||||
}
|
||||
if (vizPosDom) {
|
||||
node.x = parseFloat(getAttr(vizPosDom, 'x'));
|
||||
node.y = parseFloat(getAttr(vizPosDom, 'y'));
|
||||
// z
|
||||
}
|
||||
|
||||
if (vizColorDom) {
|
||||
node.itemStyle.normal.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
|
||||
}
|
||||
// if (vizShapeDom) {
|
||||
// node.shape = getAttr(vizShapeDom, 'shape');
|
||||
// }
|
||||
if (attvaluesDom) {
|
||||
var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
|
||||
node.attributes = {};
|
||||
for (var j = 0; j < attvalueDomList.length; j++) {
|
||||
var attvalueDom = attvalueDomList[j];
|
||||
var attId = getAttr(attvalueDom, 'for');
|
||||
var attValue = getAttr(attvalueDom, 'value');
|
||||
var attribute = attributesMap[attId];
|
||||
if (attribute) {
|
||||
switch (attribute.type) {
|
||||
case 'integer':
|
||||
case 'long':
|
||||
attValue = parseInt(attValue, 10);
|
||||
break;
|
||||
case 'float':
|
||||
case 'double':
|
||||
attValue = parseFloat(attValue);
|
||||
break;
|
||||
case 'boolean':
|
||||
attValue = attValue.toLowerCase() === 'true';
|
||||
break;
|
||||
default:
|
||||
}
|
||||
node.attributes[attId] = attValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return node;
|
||||
}) : [];
|
||||
}
|
||||
function parseEdges(parent) {
|
||||
return parent ? zrUtil.map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {
|
||||
var id = getAttr(edgeDom, 'id');
|
||||
var label = getAttr(edgeDom, 'label');
|
||||
var sourceId = getAttr(edgeDom, 'source');
|
||||
var targetId = getAttr(edgeDom, 'target');
|
||||
var edge = {
|
||||
id: id,
|
||||
name: label,
|
||||
source: sourceId,
|
||||
target: targetId,
|
||||
lineStyle: {
|
||||
normal: {}
|
||||
}
|
||||
};
|
||||
var lineStyle = edge.lineStyle.normal;
|
||||
var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
|
||||
var vizColorDom = getChildByTagName(edgeDom, 'viz:color');
|
||||
// let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
|
||||
if (vizThicknessDom) {
|
||||
lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));
|
||||
}
|
||||
if (vizColorDom) {
|
||||
lineStyle.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
|
||||
}
|
||||
// if (vizShapeDom) {
|
||||
// edge.shape = vizShapeDom.getAttribute('shape');
|
||||
// }
|
||||
return edge;
|
||||
}) : [];
|
||||
}
|
||||
function getAttr(el, attrName) {
|
||||
return el.getAttribute(attrName);
|
||||
}
|
||||
function getChildByTagName(parent, tagName) {
|
||||
var node = parent.firstChild;
|
||||
while (node) {
|
||||
if (node.nodeType !== 1 || node.nodeName.toLowerCase() !== tagName.toLowerCase()) {
|
||||
node = node.nextSibling;
|
||||
} else {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function getChildrenByTagName(parent, tagName) {
|
||||
var node = parent.firstChild;
|
||||
var children = [];
|
||||
while (node) {
|
||||
if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {
|
||||
children.push(node);
|
||||
}
|
||||
node = node.nextSibling;
|
||||
}
|
||||
return children;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
import * as echarts from 'echarts';
|
||||
import * as gexf from './gexf.js';
|
||||
import prepareBoxplotData from './prepareBoxplotData.js';
|
||||
// import { boxplotTransform } from './boxplotTransform.js';
|
||||
export var version = '1.0.0';
|
||||
export { gexf };
|
||||
export { prepareBoxplotData };
|
||||
// export {boxplotTransform};
|
||||
// For backward compatibility, where the namespace `dataTool` will
|
||||
// be mounted on `echarts` is the extension `dataTool` is imported.
|
||||
// But the old version of echarts do not have `dataTool` namespace,
|
||||
// so check it before mounting.
|
||||
if (echarts.dataTool) {
|
||||
echarts.dataTool.version = version;
|
||||
echarts.dataTool.gexf = gexf;
|
||||
echarts.dataTool.prepareBoxplotData = prepareBoxplotData;
|
||||
// echarts.dataTool.boxplotTransform = boxplotTransform;
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
function asc(arr) {
|
||||
arr.sort(function (a, b) {
|
||||
return a - b;
|
||||
});
|
||||
return arr;
|
||||
}
|
||||
function quantile(ascArr, p) {
|
||||
var H = (ascArr.length - 1) * p + 1;
|
||||
var h = Math.floor(H);
|
||||
var v = +ascArr[h - 1];
|
||||
var e = H - h;
|
||||
return e ? v + e * (ascArr[h] - v) : v;
|
||||
}
|
||||
/**
|
||||
* See:
|
||||
* <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
|
||||
* <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
|
||||
*
|
||||
* Helper method for preparing data.
|
||||
*
|
||||
* @param {Array.<number>} rawData like
|
||||
* [
|
||||
* [12,232,443], (raw data set for the first box)
|
||||
* [3843,5545,1232], (raw data set for the second box)
|
||||
* ...
|
||||
* ]
|
||||
* @param {Object} [opt]
|
||||
*
|
||||
* @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier.
|
||||
* default 1.5, means Q1 - 1.5 * (Q3 - Q1).
|
||||
* If 'none'/0 passed, min bound will not be used.
|
||||
* @param {(number|string)} [opt.layout='horizontal']
|
||||
* Box plot layout, can be 'horizontal' or 'vertical'
|
||||
* @return {Object} {
|
||||
* boxData: Array.<Array.<number>>
|
||||
* outliers: Array.<Array.<number>>
|
||||
* axisData: Array.<string>
|
||||
* }
|
||||
*/
|
||||
export default function (rawData, opt) {
|
||||
opt = opt || {};
|
||||
var boxData = [];
|
||||
var outliers = [];
|
||||
var axisData = [];
|
||||
var boundIQR = opt.boundIQR;
|
||||
var useExtreme = boundIQR === 'none' || boundIQR === 0;
|
||||
for (var i = 0; i < rawData.length; i++) {
|
||||
axisData.push(i + '');
|
||||
var ascList = asc(rawData[i].slice());
|
||||
var Q1 = quantile(ascList, 0.25);
|
||||
var Q2 = quantile(ascList, 0.5);
|
||||
var Q3 = quantile(ascList, 0.75);
|
||||
var min = ascList[0];
|
||||
var max = ascList[ascList.length - 1];
|
||||
var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
|
||||
var low = useExtreme ? min : Math.max(min, Q1 - bound);
|
||||
var high = useExtreme ? max : Math.min(max, Q3 + bound);
|
||||
boxData.push([low, Q1, Q2, Q3, high]);
|
||||
for (var j = 0; j < ascList.length; j++) {
|
||||
var dataItem = ascList[j];
|
||||
if (dataItem < low || dataItem > high) {
|
||||
var outlier = [i, dataItem];
|
||||
opt.layout === 'vertical' && outlier.reverse();
|
||||
outliers.push(outlier);
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
boxData: boxData,
|
||||
outliers: outliers,
|
||||
axisData: axisData
|
||||
};
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './types/dist/features';
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export * from './lib/export/features.js';
|
|
@ -0,0 +1,178 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Arabic.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
|
||||
time: {
|
||||
month: [
|
||||
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||
],
|
||||
monthAbbr: [
|
||||
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'تحديد الكل',
|
||||
inverse: 'عكس التحديد'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'تحديد صندوقي',
|
||||
polygon: 'تحديد حلقي',
|
||||
lineX: 'تحديد أفقي',
|
||||
lineY: 'تحديد عمودي',
|
||||
keep: 'الاحتفاظ بالمحدد',
|
||||
clear: 'إلغاء التحديد'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'عرض البيانات',
|
||||
lang: ['عرض البيانات', 'إغلاق', 'تحديث']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'تكبير',
|
||||
back: 'استعادة التكبير'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'خطوط',
|
||||
bar: 'أشرطة',
|
||||
stack: 'تكديس',
|
||||
tiled: 'مربعات'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'استعادة'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'حفظ كملف صورة',
|
||||
lang: ['للحفظ كصورة انقر بالزر الأيمن']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'رسم بياني دائري',
|
||||
bar: 'رسم بياني شريطي',
|
||||
line: 'رسم بياني خطي',
|
||||
scatter: 'نقاط مبعثرة',
|
||||
effectScatter: 'نقاط مبعثرة متموجة',
|
||||
radar: 'رسم بياني راداري',
|
||||
tree: 'شجرة',
|
||||
treemap: 'مخطط شجري',
|
||||
boxplot: 'مخطط صندوقي',
|
||||
candlestick: 'مخطط شمعدان',
|
||||
k: 'رسم بياني خطي من النوع K',
|
||||
heatmap: 'خريطة حرارية',
|
||||
map: 'خريطة',
|
||||
parallel: 'خريطة الإحداثيات المتناظرة',
|
||||
lines: 'خطوط',
|
||||
graph: 'مخطط علائقي',
|
||||
sankey: 'مخطط ثعباني',
|
||||
funnel: 'مخطط هرمي',
|
||||
gauge: 'مقياس',
|
||||
pictorialBar: 'مخطط مصوّر',
|
||||
themeRiver: 'نمط خريطة النهر',
|
||||
sunburst: 'مخطط شمسي',
|
||||
custom: 'مخطط مخصص',
|
||||
chart: 'مخطط'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'هذا رسم بياني حول "{title}".',
|
||||
withoutTitle: 'هذا رسم بياني.'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' من النوع {seriesType} اسمه {seriesName}.',
|
||||
withoutName: ' من النوع {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. يتكون من {seriesCount} سلسلة.',
|
||||
withName: ' الـ {seriesId} هي سلسلة من النوع {seriesType} تستعرض {seriesName}.',
|
||||
withoutName: ' الـ {seriesId} هي سلسلة من النوع {seriesType}.',
|
||||
separator: {
|
||||
middle: '، ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'البيانات هي كالتالي: ',
|
||||
partialData: 'أول {displayCnt} عناصر هي: ',
|
||||
withName: 'قيمة العنصر {name} هي {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: '، ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,174 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Arabic.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
|
||||
time: {
|
||||
month: [
|
||||
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||
],
|
||||
monthAbbr: [
|
||||
'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
|
||||
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'تحديد الكل',
|
||||
inverse: 'عكس التحديد'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'تحديد صندوقي',
|
||||
polygon: 'تحديد حلقي',
|
||||
lineX: 'تحديد أفقي',
|
||||
lineY: 'تحديد عمودي',
|
||||
keep: 'الاحتفاظ بالمحدد',
|
||||
clear: 'إلغاء التحديد'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'عرض البيانات',
|
||||
lang: ['عرض البيانات', 'إغلاق', 'تحديث']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'تكبير',
|
||||
back: 'استعادة التكبير'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'خطوط',
|
||||
bar: 'أشرطة',
|
||||
stack: 'تكديس',
|
||||
tiled: 'مربعات'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'استعادة'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'حفظ كملف صورة',
|
||||
lang: ['للحفظ كصورة انقر بالزر الأيمن']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'رسم بياني دائري',
|
||||
bar: 'رسم بياني شريطي',
|
||||
line: 'رسم بياني خطي',
|
||||
scatter: 'نقاط مبعثرة',
|
||||
effectScatter: 'نقاط مبعثرة متموجة',
|
||||
radar: 'رسم بياني راداري',
|
||||
tree: 'شجرة',
|
||||
treemap: 'مخطط شجري',
|
||||
boxplot: 'مخطط صندوقي',
|
||||
candlestick: 'مخطط شمعدان',
|
||||
k: 'رسم بياني خطي من النوع K',
|
||||
heatmap: 'خريطة حرارية',
|
||||
map: 'خريطة',
|
||||
parallel: 'خريطة الإحداثيات المتناظرة',
|
||||
lines: 'خطوط',
|
||||
graph: 'مخطط علائقي',
|
||||
sankey: 'مخطط ثعباني',
|
||||
funnel: 'مخطط هرمي',
|
||||
gauge: 'مقياس',
|
||||
pictorialBar: 'مخطط مصوّر',
|
||||
themeRiver: 'نمط خريطة النهر',
|
||||
sunburst: 'مخطط شمسي',
|
||||
custom: 'مخطط مخصص',
|
||||
chart: 'مخطط'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'هذا رسم بياني حول "{title}".',
|
||||
withoutTitle: 'هذا رسم بياني.'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' من النوع {seriesType} اسمه {seriesName}.',
|
||||
withoutName: ' من النوع {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. يتكون من {seriesCount} سلسلة.',
|
||||
withName: ' الـ {seriesId} هي سلسلة من النوع {seriesType} تستعرض {seriesName}.',
|
||||
withoutName: ' الـ {seriesId} هي سلسلة من النوع {seriesType}.',
|
||||
separator: {
|
||||
middle: '، ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'البيانات هي كالتالي: ',
|
||||
partialData: 'أول {displayCnt} عناصر هي: ',
|
||||
withName: 'قيمة العنصر {name} هي {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: '، ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
echarts.registerLocale('AR', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Czech.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',
|
||||
'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čvn',
|
||||
'Čvc', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Vše',
|
||||
inverse: 'Inv'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Obdélníkový výběr',
|
||||
polygon: 'Lasso výběr',
|
||||
lineX: 'Horizontální výběr',
|
||||
lineY: 'Vertikální výběr',
|
||||
keep: 'Ponechat výběr',
|
||||
clear: 'Zrušit výběr'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Data',
|
||||
lang: ['Data', 'Zavřít', 'Obnovit']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Přiblížit',
|
||||
back: 'Oddálit'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Změnit na Spojnicový graf',
|
||||
bar: 'Změnit na Sloupcový graf',
|
||||
stack: 'Plošný',
|
||||
tiled: 'Tile'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Obnovit'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Uložit jako obrázek',
|
||||
lang: ['Obrázek uložte pravým kliknutím']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Výsečový graf',
|
||||
bar: 'Sloupcový graf',
|
||||
line: 'Spojnicový graf',
|
||||
scatter: 'XY bodový graf',
|
||||
effectScatter: 'Effect XY bodový graf',
|
||||
radar: 'Paprskový graf',
|
||||
tree: 'Strom',
|
||||
treemap: 'Stromová mapa',
|
||||
boxplot: 'Krabicový graf',
|
||||
candlestick: 'Burzovní graf',
|
||||
k: 'K spojnicový graf',
|
||||
heatmap: 'Teplotní mapa',
|
||||
map: 'Mapa',
|
||||
parallel: 'Rovnoběžné souřadnice',
|
||||
lines: 'Spojnicový graf',
|
||||
graph: 'Graf vztahů',
|
||||
sankey: 'Sankeyův diagram',
|
||||
funnel: 'Trychtýř (Funnel)',
|
||||
gauge: 'Indikátor',
|
||||
pictorialBar: 'Obrázkový sloupcový graf',
|
||||
themeRiver: 'Theme River Map',
|
||||
sunburst: 'Vícevrstvý prstencový graf',
|
||||
custom: 'Graficu persunalizatu',
|
||||
chart: 'Graf'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Toto je graf o "{title}"',
|
||||
withoutTitle: 'Toto je graf'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: '{seriesName} s typem {seriesType}.',
|
||||
withoutName: ' s typem {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Obsahuje {seriesCount} řad.',
|
||||
withName: ' Řada {seriesId} je typu {seriesType} repreyentující {seriesName}.',
|
||||
withoutName: ' Řada {seriesId} je typu {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Všechna data jsou: ',
|
||||
partialData: 'První {displayCnt} položky jsou: ',
|
||||
withName: 'data pro {name} jsou {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Czech.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',
|
||||
'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čvn',
|
||||
'Čvc', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Vše',
|
||||
inverse: 'Inv'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Obdélníkový výběr',
|
||||
polygon: 'Lasso výběr',
|
||||
lineX: 'Horizontální výběr',
|
||||
lineY: 'Vertikální výběr',
|
||||
keep: 'Ponechat výběr',
|
||||
clear: 'Zrušit výběr'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Data',
|
||||
lang: ['Data', 'Zavřít', 'Obnovit']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Přiblížit',
|
||||
back: 'Oddálit'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Změnit na Spojnicový graf',
|
||||
bar: 'Změnit na Sloupcový graf',
|
||||
stack: 'Plošný',
|
||||
tiled: 'Tile'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Obnovit'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Uložit jako obrázek',
|
||||
lang: ['Obrázek uložte pravým kliknutím']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Výsečový graf',
|
||||
bar: 'Sloupcový graf',
|
||||
line: 'Spojnicový graf',
|
||||
scatter: 'XY bodový graf',
|
||||
effectScatter: 'Effect XY bodový graf',
|
||||
radar: 'Paprskový graf',
|
||||
tree: 'Strom',
|
||||
treemap: 'Stromová mapa',
|
||||
boxplot: 'Krabicový graf',
|
||||
candlestick: 'Burzovní graf',
|
||||
k: 'K spojnicový graf',
|
||||
heatmap: 'Teplotní mapa',
|
||||
map: 'Mapa',
|
||||
parallel: 'Rovnoběžné souřadnice',
|
||||
lines: 'Spojnicový graf',
|
||||
graph: 'Graf vztahů',
|
||||
sankey: 'Sankeyův diagram',
|
||||
funnel: 'Trychtýř (Funnel)',
|
||||
gauge: 'Indikátor',
|
||||
pictorialBar: 'Obrázkový sloupcový graf',
|
||||
themeRiver: 'Theme River Map',
|
||||
sunburst: 'Vícevrstvý prstencový graf',
|
||||
custom: 'Graficu persunalizatu',
|
||||
chart: 'Graf'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Toto je graf o "{title}"',
|
||||
withoutTitle: 'Toto je graf'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: '{seriesName} s typem {seriesType}.',
|
||||
withoutName: ' s typem {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Obsahuje {seriesCount} řad.',
|
||||
withName: ' Řada {seriesId} je typu {seriesType} repreyentující {seriesName}.',
|
||||
withoutName: ' Řada {seriesId} je typu {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Všechna data jsou: ',
|
||||
partialData: 'První {displayCnt} položky jsou: ',
|
||||
withName: 'data pro {name} jsou {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('CS', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: German.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
|
||||
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun',
|
||||
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Alle',
|
||||
inverse: 'Invertiert'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Box Auswahl',
|
||||
polygon: 'Lasso Auswahl',
|
||||
lineX: 'Horizontale Auswahl',
|
||||
lineY: 'Vertikale Auswahl',
|
||||
keep: 'Bereich Auswahl',
|
||||
clear: 'Auswahl zurücksetzen'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Daten Ansicht',
|
||||
lang: ['Daten Ansicht', 'Schließen', 'Aktualisieren']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Zoom zurücksetzen'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Zu Liniendiagramm wechseln',
|
||||
bar: 'Zu Balkendiagramm wechseln',
|
||||
stack: 'Stapel',
|
||||
tiled: 'Kachel'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Wiederherstellen'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Als Bild speichern',
|
||||
lang: ['Rechtsklick zum Speichern des Bildes']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Tortendiagramm',
|
||||
bar: 'Balkendiagramm',
|
||||
line: 'Liniendiagramm',
|
||||
scatter: 'Streudiagramm',
|
||||
effectScatter: 'Welligkeits-Streudiagramm',
|
||||
radar: 'Radar-Karte',
|
||||
tree: 'Baum',
|
||||
treemap: 'Baumkarte',
|
||||
boxplot: 'Boxplot',
|
||||
candlestick: 'Kerzenständer',
|
||||
k: 'K Liniendiagramm',
|
||||
heatmap: 'Heatmap',
|
||||
map: 'Karte',
|
||||
parallel: 'Parallele Koordinatenkarte',
|
||||
lines: 'Liniendiagramm',
|
||||
graph: 'Beziehungsgrafik',
|
||||
sankey: 'Sankey-Diagramm',
|
||||
funnel: 'Trichterdiagramm',
|
||||
gauge: 'Meßanzeige',
|
||||
pictorialBar: 'Bildlicher Balken',
|
||||
themeRiver: 'Thematische Flusskarte',
|
||||
sunburst: 'Sonnenausbruch',
|
||||
custom: 'Graficu persunalizatu',
|
||||
chart: 'Diagramm'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Dies ist ein Diagramm über "{title}"',
|
||||
withoutTitle: 'Dies ist ein Diagramm'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' mit Typ {seriesType} namens {seriesName}.',
|
||||
withoutName: ' mit Typ {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Es besteht aus {seriesCount} Serienzählung.',
|
||||
withName: ' Die Serie {seriesId} ist ein {seriesType} welcher {seriesName} darstellt.',
|
||||
withoutName: ' Die {seriesId}-Reihe ist ein {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Die Daten sind wie folgt: ',
|
||||
partialData: 'Die ersten {displayCnt} Elemente sind: ',
|
||||
withName: 'die Daten für {name} sind {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ',',
|
||||
end: '.'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: German.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
|
||||
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun',
|
||||
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Alle',
|
||||
inverse: 'Invertiert'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Box Auswahl',
|
||||
polygon: 'Lasso Auswahl',
|
||||
lineX: 'Horizontale Auswahl',
|
||||
lineY: 'Vertikale Auswahl',
|
||||
keep: 'Bereich Auswahl',
|
||||
clear: 'Auswahl zurücksetzen'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Daten Ansicht',
|
||||
lang: ['Daten Ansicht', 'Schließen', 'Aktualisieren']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Zoom zurücksetzen'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Zu Liniendiagramm wechseln',
|
||||
bar: 'Zu Balkendiagramm wechseln',
|
||||
stack: 'Stapel',
|
||||
tiled: 'Kachel'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Wiederherstellen'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Als Bild speichern',
|
||||
lang: ['Rechtsklick zum Speichern des Bildes']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Tortendiagramm',
|
||||
bar: 'Balkendiagramm',
|
||||
line: 'Liniendiagramm',
|
||||
scatter: 'Streudiagramm',
|
||||
effectScatter: 'Welligkeits-Streudiagramm',
|
||||
radar: 'Radar-Karte',
|
||||
tree: 'Baum',
|
||||
treemap: 'Baumkarte',
|
||||
boxplot: 'Boxplot',
|
||||
candlestick: 'Kerzenständer',
|
||||
k: 'K Liniendiagramm',
|
||||
heatmap: 'Heatmap',
|
||||
map: 'Karte',
|
||||
parallel: 'Parallele Koordinatenkarte',
|
||||
lines: 'Liniendiagramm',
|
||||
graph: 'Beziehungsgrafik',
|
||||
sankey: 'Sankey-Diagramm',
|
||||
funnel: 'Trichterdiagramm',
|
||||
gauge: 'Meßanzeige',
|
||||
pictorialBar: 'Bildlicher Balken',
|
||||
themeRiver: 'Thematische Flusskarte',
|
||||
sunburst: 'Sonnenausbruch',
|
||||
custom: 'Graficu persunalizatu',
|
||||
chart: 'Diagramm'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Dies ist ein Diagramm über "{title}"',
|
||||
withoutTitle: 'Dies ist ein Diagramm'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' mit Typ {seriesType} namens {seriesName}.',
|
||||
withoutName: ' mit Typ {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Es besteht aus {seriesCount} Serienzählung.',
|
||||
withName: ' Die Serie {seriesId} ist ein {seriesType} welcher {seriesName} darstellt.',
|
||||
withoutName: ' Die {seriesId}-Reihe ist ein {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Die Daten sind wie folgt: ',
|
||||
partialData: 'Die ersten {displayCnt} Elemente sind: ',
|
||||
withName: 'die Daten für {name} sind {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ',',
|
||||
end: '.'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('DE', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: English.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'January', 'February', 'March', 'April', 'May', 'June',
|
||||
'July', 'August', 'September', 'October', 'November', 'December'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
||||
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'All',
|
||||
inverse: 'Inv'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Box Select',
|
||||
polygon: 'Lasso Select',
|
||||
lineX: 'Horizontally Select',
|
||||
lineY: 'Vertically Select',
|
||||
keep: 'Keep Selections',
|
||||
clear: 'Clear Selections'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Data View',
|
||||
lang: ['Data View', 'Close', 'Refresh']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Zoom Reset'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Switch to Line Chart',
|
||||
bar: 'Switch to Bar Chart',
|
||||
stack: 'Stack',
|
||||
tiled: 'Tile'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Restore'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Save as Image',
|
||||
lang: ['Right Click to Save Image']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Pie chart',
|
||||
bar: 'Bar chart',
|
||||
line: 'Line chart',
|
||||
scatter: 'Scatter plot',
|
||||
effectScatter: 'Ripple scatter plot',
|
||||
radar: 'Radar chart',
|
||||
tree: 'Tree',
|
||||
treemap: 'Treemap',
|
||||
boxplot: 'Boxplot',
|
||||
candlestick: 'Candlestick',
|
||||
k: 'K line chart',
|
||||
heatmap: 'Heat map',
|
||||
map: 'Map',
|
||||
parallel: 'Parallel coordinate map',
|
||||
lines: 'Line graph',
|
||||
graph: 'Relationship graph',
|
||||
sankey: 'Sankey diagram',
|
||||
funnel: 'Funnel chart',
|
||||
gauge: 'Gauge',
|
||||
pictorialBar: 'Pictorial bar',
|
||||
themeRiver: 'Theme River Map',
|
||||
sunburst: 'Sunburst',
|
||||
custom: 'Custom chart',
|
||||
chart: 'Chart'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'This is a chart about "{title}"',
|
||||
withoutTitle: 'This is a chart'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' with type {seriesType} named {seriesName}.',
|
||||
withoutName: ' with type {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. It consists of {seriesCount} series count.',
|
||||
withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
|
||||
withoutName: ' The {seriesId} series is a {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'The data is as follows: ',
|
||||
partialData: 'The first {displayCnt} items are: ',
|
||||
withName: 'the data for {name} is {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: English.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'January', 'February', 'March', 'April', 'May', 'June',
|
||||
'July', 'August', 'September', 'October', 'November', 'December'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
||||
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'All',
|
||||
inverse: 'Inv'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Box Select',
|
||||
polygon: 'Lasso Select',
|
||||
lineX: 'Horizontally Select',
|
||||
lineY: 'Vertically Select',
|
||||
keep: 'Keep Selections',
|
||||
clear: 'Clear Selections'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Data View',
|
||||
lang: ['Data View', 'Close', 'Refresh']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Zoom Reset'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Switch to Line Chart',
|
||||
bar: 'Switch to Bar Chart',
|
||||
stack: 'Stack',
|
||||
tiled: 'Tile'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Restore'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Save as Image',
|
||||
lang: ['Right Click to Save Image']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Pie chart',
|
||||
bar: 'Bar chart',
|
||||
line: 'Line chart',
|
||||
scatter: 'Scatter plot',
|
||||
effectScatter: 'Ripple scatter plot',
|
||||
radar: 'Radar chart',
|
||||
tree: 'Tree',
|
||||
treemap: 'Treemap',
|
||||
boxplot: 'Boxplot',
|
||||
candlestick: 'Candlestick',
|
||||
k: 'K line chart',
|
||||
heatmap: 'Heat map',
|
||||
map: 'Map',
|
||||
parallel: 'Parallel coordinate map',
|
||||
lines: 'Line graph',
|
||||
graph: 'Relationship graph',
|
||||
sankey: 'Sankey diagram',
|
||||
funnel: 'Funnel chart',
|
||||
gauge: 'Gauge',
|
||||
pictorialBar: 'Pictorial bar',
|
||||
themeRiver: 'Theme River Map',
|
||||
sunburst: 'Sunburst',
|
||||
custom: 'Custom chart',
|
||||
chart: 'Chart'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'This is a chart about "{title}"',
|
||||
withoutTitle: 'This is a chart'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' with type {seriesType} named {seriesName}.',
|
||||
withoutName: ' with type {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. It consists of {seriesCount} series count.',
|
||||
withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
|
||||
withoutName: ' The {seriesId} series is a {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'The data is as follows: ',
|
||||
partialData: 'The first {displayCnt} items are: ',
|
||||
withName: 'the data for {name} is {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('EN', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
|
||||
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
|
||||
],
|
||||
monthAbbr: [
|
||||
'ene', 'feb', 'mar', 'abr', 'may', 'jun',
|
||||
'jul', 'ago', 'sep', 'oct', 'nov', 'dic'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'dom', 'lun', 'mar', 'mie', 'jue', 'vie', 'sáb'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Todas',
|
||||
inverse: 'Inversa'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Selección de cuadro',
|
||||
polygon: 'Selección de lazo',
|
||||
lineX: 'Seleccionar horizontalmente',
|
||||
lineY: 'Seleccionar verticalmente',
|
||||
keep: 'Mantener selección',
|
||||
clear: 'Despejar selecciones'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Ver datos',
|
||||
lang: ['Ver datos', 'Cerrar', 'Actualizar']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Restablecer zoom'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Cambiar a gráfico de líneas',
|
||||
bar: 'Cambiar a gráfico de barras',
|
||||
stack: 'Pila',
|
||||
tiled: 'Teja'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Restaurar'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Guardar como imagen',
|
||||
lang: ['Clic derecho para guardar imagen']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Gráfico circular',
|
||||
bar: 'Gráfico de barras',
|
||||
line: 'Gráfico de líneas',
|
||||
scatter: 'Diagrama de dispersión',
|
||||
effectScatter: 'Diagrama de dispersión de ondas',
|
||||
radar: 'Gráfico de radar',
|
||||
tree: 'Árbol',
|
||||
treemap: 'Mapa de árbol',
|
||||
boxplot: 'Diagrama de caja',
|
||||
candlestick: 'Gráfico de velas',
|
||||
k: 'Gráfico de líneas K',
|
||||
heatmap: 'Mapa de calor',
|
||||
map: 'Mapa',
|
||||
parallel: 'Mapa de coordenadas paralelas',
|
||||
lines: 'Gráfico de líneas',
|
||||
graph: 'Gráfico de relaciones',
|
||||
sankey: 'Diagrama de Sankey',
|
||||
funnel: 'Gráfico de embudo',
|
||||
gauge: 'Medidor',
|
||||
pictorialBar: 'Gráfico de barras pictóricas',
|
||||
themeRiver: 'Mapa de río temático',
|
||||
sunburst: 'Sunburst',
|
||||
custom: 'Gráfico personalizado',
|
||||
chart: 'Gráfico'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Este es un gráfico sobre “{title}”',
|
||||
withoutTitle: 'Este es un gráfico'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' con tipo {seriesType} llamado {seriesName}.',
|
||||
withoutName: ' con tipo {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Consta de {seriesCount} series.',
|
||||
withName: ' La serie {seriesId} es un {seriesType} que representa {seriesName}.',
|
||||
withoutName: ' La serie {seriesId} es un {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Los datos son los siguientes: ',
|
||||
partialData: 'Los primeros {displayCnt} elementos son: ',
|
||||
withName: 'los datos para {name} son {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,167 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
|
||||
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
|
||||
],
|
||||
monthAbbr: [
|
||||
'ene', 'feb', 'mar', 'abr', 'may', 'jun',
|
||||
'jul', 'ago', 'sep', 'oct', 'nov', 'dic'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'dom', 'lun', 'mar', 'mie', 'jue', 'vie', 'sáb'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Todas',
|
||||
inverse: 'Inversa'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Selección de cuadro',
|
||||
polygon: 'Selección de lazo',
|
||||
lineX: 'Seleccionar horizontalmente',
|
||||
lineY: 'Seleccionar verticalmente',
|
||||
keep: 'Mantener selección',
|
||||
clear: 'Despejar selecciones'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Ver datos',
|
||||
lang: ['Ver datos', 'Cerrar', 'Actualizar']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Restablecer zoom'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Cambiar a gráfico de líneas',
|
||||
bar: 'Cambiar a gráfico de barras',
|
||||
stack: 'Pila',
|
||||
tiled: 'Teja'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Restaurar'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Guardar como imagen',
|
||||
lang: ['Clic derecho para guardar imagen']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Gráfico circular',
|
||||
bar: 'Gráfico de barras',
|
||||
line: 'Gráfico de líneas',
|
||||
scatter: 'Diagrama de dispersión',
|
||||
effectScatter: 'Diagrama de dispersión de ondas',
|
||||
radar: 'Gráfico de radar',
|
||||
tree: 'Árbol',
|
||||
treemap: 'Mapa de árbol',
|
||||
boxplot: 'Diagrama de caja',
|
||||
candlestick: 'Gráfico de velas',
|
||||
k: 'Gráfico de líneas K',
|
||||
heatmap: 'Mapa de calor',
|
||||
map: 'Mapa',
|
||||
parallel: 'Mapa de coordenadas paralelas',
|
||||
lines: 'Gráfico de líneas',
|
||||
graph: 'Gráfico de relaciones',
|
||||
sankey: 'Diagrama de Sankey',
|
||||
funnel: 'Gráfico de embudo',
|
||||
gauge: 'Medidor',
|
||||
pictorialBar: 'Gráfico de barras pictóricas',
|
||||
themeRiver: 'Mapa de río temático',
|
||||
sunburst: 'Sunburst',
|
||||
custom: 'Gráfico personalizado',
|
||||
chart: 'Gráfico'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Este es un gráfico sobre “{title}”',
|
||||
withoutTitle: 'Este es un gráfico'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' con tipo {seriesType} llamado {seriesName}.',
|
||||
withoutName: ' con tipo {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Consta de {seriesCount} series.',
|
||||
withName: ' La serie {seriesId} es un {seriesType} que representa {seriesName}.',
|
||||
withoutName: ' La serie {seriesId} es un {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Los datos son los siguientes: ',
|
||||
partialData: 'Los primeros {displayCnt} elementos son: ',
|
||||
withName: 'los datos para {name} son {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('ES', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'tammikuuta', 'helmikuuta', 'maaliskuuta', 'huhtikuuta', 'toukokuuta', 'kesäkuuta',
|
||||
'heinäkuuta', 'elokuuta', 'syyskuuta', 'lokakuuta', 'marraskuuta', 'joulukuuta'
|
||||
],
|
||||
monthAbbr: [
|
||||
'tammik', 'helmik', 'maalisk', 'huhtik', 'toukok', 'kesäk',
|
||||
'heinäk', 'elok', 'syysk', 'lokak', 'marrask', 'jouluk'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'sunnuntaina', 'maanantaina', 'tiistaina', 'keskiviikkona', 'torstaina', 'perjantaina', 'lauantaina'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Kaikki',
|
||||
inverse: 'Käänteinen'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Laatikko valinta',
|
||||
polygon: 'Lasso valinta',
|
||||
lineX: 'Vaakataso valinta',
|
||||
lineY: 'Pysty valinta',
|
||||
keep: 'Pidä valinta',
|
||||
clear: 'Poista valinta'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Data näkymä',
|
||||
lang: ['Data näkymä', 'Sulje', 'Päivitä']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoomaa',
|
||||
back: 'Zoomin nollaus'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Vaihda Viivakaavioon',
|
||||
bar: 'Vaihda palkkikaavioon',
|
||||
stack: 'Pinoa',
|
||||
tiled: 'Erottele'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Palauta'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Tallenna kuvana',
|
||||
lang: ['Paina oikeaa hiirennappia tallentaaksesi kuva']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Ympyrädiagrammi',
|
||||
bar: 'Pylväsdiagrammi',
|
||||
line: 'Viivakaavio',
|
||||
scatter: 'Pisteplot',
|
||||
effectScatter: 'Ripple-pisteplot',
|
||||
radar: 'Sädekaavio',
|
||||
tree: 'Puu',
|
||||
treemap: 'Tilastoaluekartta',
|
||||
boxplot: 'Viivadiagrammi',
|
||||
candlestick: 'Kynttiläkaavio',
|
||||
k: 'K-linjakaavio',
|
||||
heatmap: 'Lämpökartta',
|
||||
map: 'Kartta',
|
||||
parallel: 'Rinnakkaiskoordinaattikartta',
|
||||
lines: 'Viivakuvaaja',
|
||||
graph: 'Suhdekuvaaja',
|
||||
sankey: 'Sankey-kaavio',
|
||||
funnel: 'Suppilokaavio',
|
||||
gauge: 'Mittari',
|
||||
pictorialBar: 'Kuvallinen pylväs',
|
||||
themeRiver: 'Teemajokikartta',
|
||||
sunburst: 'Auringonkehä',
|
||||
custom: 'Mukautettu kaavio',
|
||||
chart: 'Kaavio'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Tämä on kaavio “{title}”',
|
||||
withoutTitle: 'Tämä on kaavio'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' tyyppiä {seriesType} nimeltään {seriesName}.',
|
||||
withoutName: ' tyyppiä {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Se koostuu {seriesCount} sarjasta.',
|
||||
withName: ' Sarja {seriesId} on {seriesType}, joka edustaa {seriesName}.',
|
||||
withoutName: ' Sarja {seriesId} on {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Tiedot ovat seuraavat: ',
|
||||
partialData: 'Ensimmäiset {displayCnt} kohtaa ovat: ',
|
||||
withName: 'tiedot nimelle {name} ovat {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,167 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'tammikuuta', 'helmikuuta', 'maaliskuuta', 'huhtikuuta', 'toukokuuta', 'kesäkuuta',
|
||||
'heinäkuuta', 'elokuuta', 'syyskuuta', 'lokakuuta', 'marraskuuta', 'joulukuuta'
|
||||
],
|
||||
monthAbbr: [
|
||||
'tammik', 'helmik', 'maalisk', 'huhtik', 'toukok', 'kesäk',
|
||||
'heinäk', 'elok', 'syysk', 'lokak', 'marrask', 'jouluk'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'sunnuntaina', 'maanantaina', 'tiistaina', 'keskiviikkona', 'torstaina', 'perjantaina', 'lauantaina'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Kaikki',
|
||||
inverse: 'Käänteinen'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Laatikko valinta',
|
||||
polygon: 'Lasso valinta',
|
||||
lineX: 'Vaakataso valinta',
|
||||
lineY: 'Pysty valinta',
|
||||
keep: 'Pidä valinta',
|
||||
clear: 'Poista valinta'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Data näkymä',
|
||||
lang: ['Data näkymä', 'Sulje', 'Päivitä']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoomaa',
|
||||
back: 'Zoomin nollaus'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Vaihda Viivakaavioon',
|
||||
bar: 'Vaihda palkkikaavioon',
|
||||
stack: 'Pinoa',
|
||||
tiled: 'Erottele'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Palauta'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Tallenna kuvana',
|
||||
lang: ['Paina oikeaa hiirennappia tallentaaksesi kuva']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Ympyrädiagrammi',
|
||||
bar: 'Pylväsdiagrammi',
|
||||
line: 'Viivakaavio',
|
||||
scatter: 'Pisteplot',
|
||||
effectScatter: 'Ripple-pisteplot',
|
||||
radar: 'Sädekaavio',
|
||||
tree: 'Puu',
|
||||
treemap: 'Tilastoaluekartta',
|
||||
boxplot: 'Viivadiagrammi',
|
||||
candlestick: 'Kynttiläkaavio',
|
||||
k: 'K-linjakaavio',
|
||||
heatmap: 'Lämpökartta',
|
||||
map: 'Kartta',
|
||||
parallel: 'Rinnakkaiskoordinaattikartta',
|
||||
lines: 'Viivakuvaaja',
|
||||
graph: 'Suhdekuvaaja',
|
||||
sankey: 'Sankey-kaavio',
|
||||
funnel: 'Suppilokaavio',
|
||||
gauge: 'Mittari',
|
||||
pictorialBar: 'Kuvallinen pylväs',
|
||||
themeRiver: 'Teemajokikartta',
|
||||
sunburst: 'Auringonkehä',
|
||||
custom: 'Mukautettu kaavio',
|
||||
chart: 'Kaavio'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Tämä on kaavio “{title}”',
|
||||
withoutTitle: 'Tämä on kaavio'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' tyyppiä {seriesType} nimeltään {seriesName}.',
|
||||
withoutName: ' tyyppiä {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Se koostuu {seriesCount} sarjasta.',
|
||||
withName: ' Sarja {seriesId} on {seriesType}, joka edustaa {seriesName}.',
|
||||
withoutName: ' Sarja {seriesId} on {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Tiedot ovat seuraavat: ',
|
||||
partialData: 'Ensimmäiset {displayCnt} kohtaa ovat: ',
|
||||
withName: 'tiedot nimelle {name} ovat {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('FI', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Français.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
|
||||
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Fév', 'Mars', 'Avr', 'Mai', 'Juin',
|
||||
'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Tout',
|
||||
inverse: 'Inverse'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Sélection rectangulaire',
|
||||
polygon: 'Sélection au lasso',
|
||||
lineX: 'Sélectionner horizontalement',
|
||||
lineY: 'Sélectionner verticalement',
|
||||
keep: 'Garder la sélection',
|
||||
clear: 'Effacer la sélection'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Visualisation des données',
|
||||
lang: ['Visualisation des données', 'Fermer', 'Rafraîchir']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Zoom Remise à zéro'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Changer pour Ligne',
|
||||
bar: 'Changer pour Histogramme',
|
||||
stack: 'Superposition',
|
||||
tiled: 'Tuile'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Restaurer'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Sauvegarder l\'image',
|
||||
lang: ['Clic droit pour sauvegarder l\'image']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Camembert',
|
||||
bar: 'Histogramme',
|
||||
line: 'Ligne',
|
||||
scatter: 'Nuage de points',
|
||||
effectScatter: 'Nuage de points stylisé',
|
||||
radar: 'Radar',
|
||||
tree: 'Arbre',
|
||||
treemap: 'Treemap',
|
||||
boxplot: 'Boîte à moustaches',
|
||||
candlestick: 'Chandelier',
|
||||
k: 'Linéaire K',
|
||||
heatmap: 'Carte de fréquentation',
|
||||
map: 'Carte',
|
||||
parallel: 'Données parallèles',
|
||||
lines: 'Lignes',
|
||||
graph: 'Graphe',
|
||||
sankey: 'Sankey',
|
||||
funnel: 'Entonnoir',
|
||||
gauge: 'Jauge',
|
||||
pictorialBar: 'Barres à images',
|
||||
themeRiver: 'Stream Graph',
|
||||
sunburst: 'Sunburst',
|
||||
custom: 'Graphique personnalisé',
|
||||
chart: 'Graphique'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Cette carte est intitulée "{title}"',
|
||||
withoutTitle: 'C\'est une carte'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' Avec le type de {seriesType} qui s\'appelle {seriesName}.',
|
||||
withoutName: ' Avec le type de {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: ' Elle comprend {seriesCount} séries.',
|
||||
withName: ' La série {seriesId} représente {seriesName} de {seriesType}.',
|
||||
withoutName: ' La série {seriesId} est un/une {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Les données sont: ',
|
||||
partialData: 'Les premiers {displayCnt} éléments sont : ',
|
||||
withName: 'Les données pour {name} sont {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Français.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
|
||||
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Fév', 'Mars', 'Avr', 'Mai', 'Juin',
|
||||
'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Tout',
|
||||
inverse: 'Inverse'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Sélection rectangulaire',
|
||||
polygon: 'Sélection au lasso',
|
||||
lineX: 'Sélectionner horizontalement',
|
||||
lineY: 'Sélectionner verticalement',
|
||||
keep: 'Garder la sélection',
|
||||
clear: 'Effacer la sélection'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Visualisation des données',
|
||||
lang: ['Visualisation des données', 'Fermer', 'Rafraîchir']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Zoom Remise à zéro'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Changer pour Ligne',
|
||||
bar: 'Changer pour Histogramme',
|
||||
stack: 'Superposition',
|
||||
tiled: 'Tuile'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Restaurer'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Sauvegarder l\'image',
|
||||
lang: ['Clic droit pour sauvegarder l\'image']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Camembert',
|
||||
bar: 'Histogramme',
|
||||
line: 'Ligne',
|
||||
scatter: 'Nuage de points',
|
||||
effectScatter: 'Nuage de points stylisé',
|
||||
radar: 'Radar',
|
||||
tree: 'Arbre',
|
||||
treemap: 'Treemap',
|
||||
boxplot: 'Boîte à moustaches',
|
||||
candlestick: 'Chandelier',
|
||||
k: 'Linéaire K',
|
||||
heatmap: 'Carte de fréquentation',
|
||||
map: 'Carte',
|
||||
parallel: 'Données parallèles',
|
||||
lines: 'Lignes',
|
||||
graph: 'Graphe',
|
||||
sankey: 'Sankey',
|
||||
funnel: 'Entonnoir',
|
||||
gauge: 'Jauge',
|
||||
pictorialBar: 'Barres à images',
|
||||
themeRiver: 'Stream Graph',
|
||||
sunburst: 'Sunburst',
|
||||
custom: 'Graphique personnalisé',
|
||||
chart: 'Graphique'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Cette carte est intitulée "{title}"',
|
||||
withoutTitle: 'C\'est une carte'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' Avec le type de {seriesType} qui s\'appelle {seriesName}.',
|
||||
withoutName: ' Avec le type de {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: ' Elle comprend {seriesCount} séries.',
|
||||
withName: ' La série {seriesId} représente {seriesName} de {seriesType}.',
|
||||
withoutName: ' La série {seriesId} est un/une {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Les données sont: ',
|
||||
partialData: 'Les premiers {displayCnt} éléments sont : ',
|
||||
withName: 'Les données pour {name} sont {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('FR', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Hungarian.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Január', 'Február', 'Március', 'Április', 'Május', 'Június',
|
||||
'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
|
||||
'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'V', 'H', 'K', 'Sze', 'Csü', 'P', 'Szo'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Mind',
|
||||
inverse: 'Inverz'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Négyzet kijelölés',
|
||||
polygon: 'Lasszó kijelölés',
|
||||
lineX: 'Vízszintes kijelölés',
|
||||
lineY: 'Függőleges kijelölés',
|
||||
keep: 'Kijelölések megtartása',
|
||||
clear: 'Kijelölések törlése'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Adat nézet',
|
||||
lang: ['Adat nézet', 'Bezárás', 'Frissítés']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Nagyítás',
|
||||
back: 'Alapméret'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Váltás vonal diagramra',
|
||||
bar: 'Váltás oszlop diagramra',
|
||||
stack: 'Halmozás',
|
||||
tiled: 'Csempe'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Visszaállítás'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Mentés képként',
|
||||
lang: ['Kattints jobb egérgombbal a mentéshez képként']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Oszlopdiagram',
|
||||
bar: 'Sávdiagram',
|
||||
line: 'Vonaldiagram',
|
||||
scatter: 'Pontdiagram',
|
||||
effectScatter: 'Buborékdiagram',
|
||||
radar: 'Sugárdiagram',
|
||||
tree: 'Fa',
|
||||
treemap: 'Fatérkép',
|
||||
boxplot: 'Dobozdiagram',
|
||||
candlestick: 'Árfolyamdiagram',
|
||||
k: 'K vonaldiagram',
|
||||
heatmap: 'Hőtérkép',
|
||||
map: 'Térkép',
|
||||
parallel: 'Párhuzamos koordináta térkép',
|
||||
lines: 'Vonalgráf',
|
||||
graph: 'Kapcsolatgráf',
|
||||
sankey: 'Sankey-diagram',
|
||||
funnel: 'Vízesésdiagram',
|
||||
gauge: 'Mérőeszköz',
|
||||
pictorialBar: 'Képes sávdiagram',
|
||||
themeRiver: 'Folyó témájú térkép',
|
||||
sunburst: 'Napégés',
|
||||
custom: 'Egyedi diagram',
|
||||
chart: 'Diagram'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Ez egy diagram, amely neve "{title}"',
|
||||
withoutTitle: 'Ez egy diagram'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' típusa {seriesType} és elnevezése {seriesName}.',
|
||||
withoutName: ' típusa {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Az adatsorok száma {seriesCount}.',
|
||||
withName: ' A {seriesId} számú adatsor típusa {seriesType} és neve {seriesName}.',
|
||||
withoutName: ' A {seriesId} számú adatsor típusa {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Az adatok a következők: ',
|
||||
partialData: 'Az első {displayCnt} elemek: ',
|
||||
withName: 'a {name} nevű adat értéke {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Hungarian.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Január', 'Február', 'Március', 'Április', 'Május', 'Június',
|
||||
'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
|
||||
'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'V', 'H', 'K', 'Sze', 'Csü', 'P', 'Szo'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Mind',
|
||||
inverse: 'Inverz'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Négyzet kijelölés',
|
||||
polygon: 'Lasszó kijelölés',
|
||||
lineX: 'Vízszintes kijelölés',
|
||||
lineY: 'Függőleges kijelölés',
|
||||
keep: 'Kijelölések megtartása',
|
||||
clear: 'Kijelölések törlése'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Adat nézet',
|
||||
lang: ['Adat nézet', 'Bezárás', 'Frissítés']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Nagyítás',
|
||||
back: 'Alapméret'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Váltás vonal diagramra',
|
||||
bar: 'Váltás oszlop diagramra',
|
||||
stack: 'Halmozás',
|
||||
tiled: 'Csempe'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Visszaállítás'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Mentés képként',
|
||||
lang: ['Kattints jobb egérgombbal a mentéshez képként']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Oszlopdiagram',
|
||||
bar: 'Sávdiagram',
|
||||
line: 'Vonaldiagram',
|
||||
scatter: 'Pontdiagram',
|
||||
effectScatter: 'Buborékdiagram',
|
||||
radar: 'Sugárdiagram',
|
||||
tree: 'Fa',
|
||||
treemap: 'Fatérkép',
|
||||
boxplot: 'Dobozdiagram',
|
||||
candlestick: 'Árfolyamdiagram',
|
||||
k: 'K vonaldiagram',
|
||||
heatmap: 'Hőtérkép',
|
||||
map: 'Térkép',
|
||||
parallel: 'Párhuzamos koordináta térkép',
|
||||
lines: 'Vonalgráf',
|
||||
graph: 'Kapcsolatgráf',
|
||||
sankey: 'Sankey-diagram',
|
||||
funnel: 'Vízesésdiagram',
|
||||
gauge: 'Mérőeszköz',
|
||||
pictorialBar: 'Képes sávdiagram',
|
||||
themeRiver: 'Folyó témájú térkép',
|
||||
sunburst: 'Napégés',
|
||||
custom: 'Egyedi diagram',
|
||||
chart: 'Diagram'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Ez egy diagram, amely neve "{title}"',
|
||||
withoutTitle: 'Ez egy diagram'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' típusa {seriesType} és elnevezése {seriesName}.',
|
||||
withoutName: ' típusa {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. Az adatsorok száma {seriesCount}.',
|
||||
withName: ' A {seriesId} számú adatsor típusa {seriesType} és neve {seriesName}.',
|
||||
withoutName: ' A {seriesId} számú adatsor típusa {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'Az adatok a következők: ',
|
||||
partialData: 'Az első {displayCnt} elemek: ',
|
||||
withName: 'a {name} nevű adat értéke {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('HU', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Italian.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno',
|
||||
'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu',
|
||||
'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Tutti',
|
||||
inverse: 'Inverso'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Selezione rettangolare',
|
||||
polygon: 'Selezione lazo',
|
||||
lineX: 'Selezione orizzontale',
|
||||
lineY: 'Selezione verticale',
|
||||
keep: 'Mantieni selezione',
|
||||
clear: 'Rimuovi selezione'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Visualizzazione dati',
|
||||
lang: ['Visualizzazione dati', 'Chiudi', 'Aggiorna']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Resetta zoom'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Passa al grafico a linee',
|
||||
bar: 'Passa al grafico a barre',
|
||||
stack: 'Pila',
|
||||
tiled: 'Piastrella'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Ripristina'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Salva come immagine',
|
||||
lang: ['Tasto destro per salvare l\'immagine']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Grafico a torta',
|
||||
bar: 'Grafico a barre',
|
||||
line: 'Grafico a linee',
|
||||
scatter: 'Grafico a dispersione',
|
||||
effectScatter: 'Ripple scatter plot',
|
||||
radar: 'Grafico radar',
|
||||
tree: 'Albero',
|
||||
treemap: 'Treemap',
|
||||
boxplot: 'Diagramma a scatola e baffi',
|
||||
candlestick: 'Candlestick',
|
||||
k: 'K line chart',
|
||||
heatmap: 'Mappa di calore',
|
||||
map: 'Mappa',
|
||||
parallel: 'Grafico a coordinate parallele',
|
||||
lines: 'Grafico a linee',
|
||||
graph: 'Diagramma delle relazioni',
|
||||
sankey: 'Diagramma di Sankey',
|
||||
funnel: 'Grafico a imbuto',
|
||||
gauge: 'Gauge',
|
||||
pictorialBar: 'Pictorial bar',
|
||||
themeRiver: 'Theme River Map',
|
||||
sunburst: 'Radiale',
|
||||
custom: 'Egyedi diagram',
|
||||
chart: 'Grafico'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Questo è un grafico su "{title}"',
|
||||
withoutTitle: 'Questo è un grafico'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' con il tipo {seriesType} denominato {seriesName}.',
|
||||
withoutName: ' con il tipo {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. È composto da {seriesCount} serie.',
|
||||
withName: ' La {seriesId} serie è un {seriesType} denominata {seriesName}.',
|
||||
withoutName: ' la {seriesId} serie è un {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'I dati sono come segue: ',
|
||||
partialData: 'I primi {displayCnt} elementi sono: ',
|
||||
withName: 'il dato per {name} è {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Italian.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno',
|
||||
'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'
|
||||
],
|
||||
monthAbbr: [
|
||||
'Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu',
|
||||
'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'Tutti',
|
||||
inverse: 'Inverso'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: 'Selezione rettangolare',
|
||||
polygon: 'Selezione lazo',
|
||||
lineX: 'Selezione orizzontale',
|
||||
lineY: 'Selezione verticale',
|
||||
keep: 'Mantieni selezione',
|
||||
clear: 'Rimuovi selezione'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'Visualizzazione dati',
|
||||
lang: ['Visualizzazione dati', 'Chiudi', 'Aggiorna']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'Zoom',
|
||||
back: 'Resetta zoom'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: 'Passa al grafico a linee',
|
||||
bar: 'Passa al grafico a barre',
|
||||
stack: 'Pila',
|
||||
tiled: 'Piastrella'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: 'Ripristina'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: 'Salva come immagine',
|
||||
lang: ['Tasto destro per salvare l\'immagine']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: 'Grafico a torta',
|
||||
bar: 'Grafico a barre',
|
||||
line: 'Grafico a linee',
|
||||
scatter: 'Grafico a dispersione',
|
||||
effectScatter: 'Ripple scatter plot',
|
||||
radar: 'Grafico radar',
|
||||
tree: 'Albero',
|
||||
treemap: 'Treemap',
|
||||
boxplot: 'Diagramma a scatola e baffi',
|
||||
candlestick: 'Candlestick',
|
||||
k: 'K line chart',
|
||||
heatmap: 'Mappa di calore',
|
||||
map: 'Mappa',
|
||||
parallel: 'Grafico a coordinate parallele',
|
||||
lines: 'Grafico a linee',
|
||||
graph: 'Diagramma delle relazioni',
|
||||
sankey: 'Diagramma di Sankey',
|
||||
funnel: 'Grafico a imbuto',
|
||||
gauge: 'Gauge',
|
||||
pictorialBar: 'Pictorial bar',
|
||||
themeRiver: 'Theme River Map',
|
||||
sunburst: 'Radiale',
|
||||
custom: 'Egyedi diagram',
|
||||
chart: 'Grafico'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'Questo è un grafico su "{title}"',
|
||||
withoutTitle: 'Questo è un grafico'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: ' con il tipo {seriesType} denominato {seriesName}.',
|
||||
withoutName: ' con il tipo {seriesType}.'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '. È composto da {seriesCount} serie.',
|
||||
withName: ' La {seriesId} serie è un {seriesType} denominata {seriesName}.',
|
||||
withoutName: ' la {seriesId} serie è un {seriesType}.',
|
||||
separator: {
|
||||
middle: '',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'I dati sono come segue: ',
|
||||
partialData: 'I primi {displayCnt} elementi sono: ',
|
||||
withName: 'il dato per {name} è {value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: ', ',
|
||||
end: '. '
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('IT', localeObj);
|
||||
|
||||
});
|
|
@ -0,0 +1,175 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({});
|
||||
}
|
||||
})(this, function(exports) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Japanese.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'一月', '二月', '三月', '四月', '五月', '六月',
|
||||
'七月', '八月', '九月', '十月', '十一月', '十二月'
|
||||
],
|
||||
monthAbbr: [
|
||||
'1月', '2月', '3月', '4月', '5月', '6月',
|
||||
'7月', '8月', '9月', '10月', '11月', '12月'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'日', '月', '火', '水', '木', '金', '土'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'すべてを選択',
|
||||
inverse: '選択範囲を反転'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: '矩形選択',
|
||||
polygon: 'なげなわ選択',
|
||||
lineX: '横方向に選択',
|
||||
lineY: '縦方向に選択',
|
||||
keep: '選択範囲を維持',
|
||||
clear: '選択範囲をクリア'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'データビュー',
|
||||
lang: ['データビュー', '閉じる', 'リロード']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'ズーム',
|
||||
back: 'リセット'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: '折れ線に切り替え',
|
||||
bar: '棒に切り替え',
|
||||
stack: '積み上げに切り替え',
|
||||
tiled: 'タイル状に切り替え'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: '復元'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: '図として保存',
|
||||
lang: ['右クリックして図を保存']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: '円グラフ',
|
||||
bar: '棒グラフ',
|
||||
line: '折れ線グラフ',
|
||||
scatter: '散布図',
|
||||
effectScatter: 'エフェクト散布図',
|
||||
radar: 'レーダーチャート',
|
||||
tree: '階層グラフ',
|
||||
treemap: 'ツリーマップ',
|
||||
boxplot: '箱ひげ図',
|
||||
candlestick: 'Kチャート',
|
||||
k: 'Kチャート',
|
||||
heatmap: 'ヒートマップ',
|
||||
map: '地図',
|
||||
parallel: 'パラレルチャート',
|
||||
lines: 'ラインチャート',
|
||||
graph: '相関図',
|
||||
sankey: 'サンキーダイアグラム',
|
||||
funnel: 'ファネルグラフ',
|
||||
gauge: 'ゲージ',
|
||||
pictorialBar: '絵入り棒グラフ',
|
||||
themeRiver: 'テーマリバー',
|
||||
sunburst: 'サンバースト',
|
||||
custom: 'カスタムチャート',
|
||||
chart: 'チャート'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'これは「{title}」に関するチャートです。',
|
||||
withoutTitle: 'これはチャートで、'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: 'チャートのタイプは{seriesType}で、{seriesName}を示しています。',
|
||||
withoutName: 'チャートのタイプは{seriesType}です。'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '{seriesCount}つのチャートシリーズによって構成されています。',
|
||||
withName: '{seriesId}番目のシリーズは{seriesName}を示した{seriesType}で、',
|
||||
withoutName: '{seriesId}番目のシリーズは{seriesType}で、',
|
||||
separator: {
|
||||
middle: ';',
|
||||
end: '。'
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'データは:',
|
||||
partialData: 'その内、{displayCnt}番目までは:',
|
||||
withName: '{name}のデータは{value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: '、',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in localeObj) {
|
||||
if (localeObj.hasOwnProperty(key)) {
|
||||
exports[key] = localeObj[key];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*/
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory);
|
||||
} else if (
|
||||
typeof exports === 'object' &&
|
||||
typeof exports.nodeName !== 'string'
|
||||
) {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts/lib/echarts'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts);
|
||||
}
|
||||
})(this, function(exports, echarts) {
|
||||
|
||||
|
||||
/**
|
||||
* Language: Japanese.
|
||||
*/
|
||||
|
||||
var localeObj = {
|
||||
time: {
|
||||
month: [
|
||||
'一月', '二月', '三月', '四月', '五月', '六月',
|
||||
'七月', '八月', '九月', '十月', '十一月', '十二月'
|
||||
],
|
||||
monthAbbr: [
|
||||
'1月', '2月', '3月', '4月', '5月', '6月',
|
||||
'7月', '8月', '9月', '10月', '11月', '12月'
|
||||
],
|
||||
dayOfWeek: [
|
||||
'日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'
|
||||
],
|
||||
dayOfWeekAbbr: [
|
||||
'日', '月', '火', '水', '木', '金', '土'
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
selector: {
|
||||
all: 'すべてを選択',
|
||||
inverse: '選択範囲を反転'
|
||||
}
|
||||
},
|
||||
toolbox: {
|
||||
brush: {
|
||||
title: {
|
||||
rect: '矩形選択',
|
||||
polygon: 'なげなわ選択',
|
||||
lineX: '横方向に選択',
|
||||
lineY: '縦方向に選択',
|
||||
keep: '選択範囲を維持',
|
||||
clear: '選択範囲をクリア'
|
||||
}
|
||||
},
|
||||
dataView: {
|
||||
title: 'データビュー',
|
||||
lang: ['データビュー', '閉じる', 'リロード']
|
||||
},
|
||||
dataZoom: {
|
||||
title: {
|
||||
zoom: 'ズーム',
|
||||
back: 'リセット'
|
||||
}
|
||||
},
|
||||
magicType: {
|
||||
title: {
|
||||
line: '折れ線に切り替え',
|
||||
bar: '棒に切り替え',
|
||||
stack: '積み上げに切り替え',
|
||||
tiled: 'タイル状に切り替え'
|
||||
}
|
||||
},
|
||||
restore: {
|
||||
title: '復元'
|
||||
},
|
||||
saveAsImage: {
|
||||
title: '図として保存',
|
||||
lang: ['右クリックして図を保存']
|
||||
}
|
||||
},
|
||||
series: {
|
||||
typeNames: {
|
||||
pie: '円グラフ',
|
||||
bar: '棒グラフ',
|
||||
line: '折れ線グラフ',
|
||||
scatter: '散布図',
|
||||
effectScatter: 'エフェクト散布図',
|
||||
radar: 'レーダーチャート',
|
||||
tree: '階層グラフ',
|
||||
treemap: 'ツリーマップ',
|
||||
boxplot: '箱ひげ図',
|
||||
candlestick: 'Kチャート',
|
||||
k: 'Kチャート',
|
||||
heatmap: 'ヒートマップ',
|
||||
map: '地図',
|
||||
parallel: 'パラレルチャート',
|
||||
lines: 'ラインチャート',
|
||||
graph: '相関図',
|
||||
sankey: 'サンキーダイアグラム',
|
||||
funnel: 'ファネルグラフ',
|
||||
gauge: 'ゲージ',
|
||||
pictorialBar: '絵入り棒グラフ',
|
||||
themeRiver: 'テーマリバー',
|
||||
sunburst: 'サンバースト',
|
||||
custom: 'カスタムチャート',
|
||||
chart: 'チャート'
|
||||
}
|
||||
},
|
||||
aria: {
|
||||
general: {
|
||||
withTitle: 'これは「{title}」に関するチャートです。',
|
||||
withoutTitle: 'これはチャートで、'
|
||||
},
|
||||
series: {
|
||||
single: {
|
||||
prefix: '',
|
||||
withName: 'チャートのタイプは{seriesType}で、{seriesName}を示しています。',
|
||||
withoutName: 'チャートのタイプは{seriesType}です。'
|
||||
},
|
||||
multiple: {
|
||||
prefix: '{seriesCount}つのチャートシリーズによって構成されています。',
|
||||
withName: '{seriesId}番目のシリーズは{seriesName}を示した{seriesType}で、',
|
||||
withoutName: '{seriesId}番目のシリーズは{seriesType}で、',
|
||||
separator: {
|
||||
middle: ';',
|
||||
end: '。'
|
||||
}
|
||||
}
|
||||
},
|
||||
data: {
|
||||
allData: 'データは:',
|
||||
partialData: 'その内、{displayCnt}番目までは:',
|
||||
withName: '{name}のデータは{value}',
|
||||
withoutName: '{value}',
|
||||
separator: {
|
||||
middle: '、',
|
||||
end: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
echarts.registerLocale('JA', localeObj);
|
||||
|
||||
});
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue