Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8bdfee8337 | ||
|
|
b856b39d9d | ||
|
|
2345812137 | ||
|
|
35be267360 | ||
|
|
25519391b7 | ||
|
|
40bed62bcb | ||
|
|
0a0433c3b8 | ||
|
|
5b911aa342 | ||
|
|
5695480021 | ||
|
|
6ffb83fc1b | ||
|
|
a5ec718bcf | ||
| addb2b671d | |||
|
|
905847a2d5 | ||
|
|
88129616b8 | ||
|
|
f1ff182d46 | ||
|
|
66a949a7a2 | ||
|
|
c5f96d8187 | ||
|
|
0c1e58266e | ||
|
|
54e8d258ad | ||
|
|
c69f390384 | ||
|
|
bb33cbcdb9 | ||
|
|
91d482a0f4 | ||
|
|
fb76f42760 | ||
|
|
3d34172c58 | ||
|
|
58b1c9d663 | ||
|
|
ee72554fdd | ||
|
|
561ac8a76a | ||
| 0a39c7fa4d | |||
|
|
d385267bfb | ||
| 2baa272f9d | |||
|
|
92d296115e | ||
|
|
a2b9de5038 | ||
| c984cefd68 |
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"editor.codeLens": true,
|
||||||
|
"java.test.editor.enableShortcuts": true,
|
||||||
|
"testing.gutterEnabled": true
|
||||||
|
}
|
||||||
@ -40,7 +40,7 @@
|
|||||||
<ip2region.version>1.7.2</ip2region.version>
|
<ip2region.version>1.7.2</ip2region.version>
|
||||||
<easy.captcha.version>1.6.2</easy.captcha.version>
|
<easy.captcha.version>1.6.2</easy.captcha.version>
|
||||||
<useragentutils.version>1.21</useragentutils.version>
|
<useragentutils.version>1.21</useragentutils.version>
|
||||||
|
<gson.version>2.10.1</gson.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!-- 统一管理 MyBatis 相关版本,解决依赖收敛冲突 -->
|
<!-- 统一管理 MyBatis 相关版本,解决依赖收敛冲突 -->
|
||||||
@ -308,6 +308,31 @@
|
|||||||
<artifactId>nashorn-core</artifactId>
|
<artifactId>nashorn-core</artifactId>
|
||||||
<version>15.4</version>
|
<version>15.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- gson -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>${gson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.zny.platform</groupId>-->
|
||||||
|
<!-- <artifactId>dec-framework-kendo</artifactId>-->
|
||||||
|
<!-- <version>0.4.0.5-SNAPSHOT</version>-->
|
||||||
|
<!-- <exclusions>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>dm.jdbc.driver</groupId>-->
|
||||||
|
<!-- <artifactId>18</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- </exclusions>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 显式添加 Jackson 依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-json</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@ -11,6 +11,8 @@ import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
|
|||||||
import org.springframework.boot.web.server.servlet.context.ServletComponentScan;
|
import org.springframework.boot.web.server.servlet.context.ServletComponentScan;
|
||||||
import org.springframework.cache.annotation.EnableCaching;
|
import org.springframework.cache.annotation.EnableCaching;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@ -19,8 +21,10 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@RestController
|
@RestController
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@ServletComponentScan("com.yfd.platform.config")
|
@ServletComponentScan("com.yfd.platform.config")
|
||||||
@MapperScan(basePackages = "com.yfd.platform.*.mapper")
|
@MapperScan(basePackages = {"com.yfd.platform.*.mapper", "com.yfd.platform.common"})
|
||||||
|
//@ComponentScan("com.zny.dec")
|
||||||
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class, DataRedisAutoConfiguration.class})
|
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class, DataRedisAutoConfiguration.class})
|
||||||
|
//@SpringBootApplication
|
||||||
@Import({DynamicDataSourceConfig.class})
|
@Import({DynamicDataSourceConfig.class})
|
||||||
@EnableCaching
|
@EnableCaching
|
||||||
public class PlatformApplication {
|
public class PlatformApplication {
|
||||||
|
|||||||
@ -0,0 +1,554 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class DataSourceLoadOptionsBase {
|
||||||
|
@Schema(description = "string 是否是默认小写")
|
||||||
|
private Boolean stringToLowerDefault = false;
|
||||||
|
|
||||||
|
@Schema(description = "是否需要返回总数")
|
||||||
|
private Boolean requireTotalCount = false;
|
||||||
|
|
||||||
|
@Schema(description = "当前查询是否是分组数查询")
|
||||||
|
public Boolean requireGroupCount = false;
|
||||||
|
|
||||||
|
@Schema(description = "分组结果是否平铺")
|
||||||
|
public Boolean groupResultFlat = false;
|
||||||
|
|
||||||
|
@Schema(description = "当前查询是否是总数查询")
|
||||||
|
public Boolean isCountQuery = false;
|
||||||
|
|
||||||
|
@Schema(description = "从结果集开始跳过的数目")
|
||||||
|
private Integer skip = 0;
|
||||||
|
|
||||||
|
@Schema(description = "需要加载的对象个数")
|
||||||
|
private Integer take = 0;
|
||||||
|
|
||||||
|
@Schema(description = "排序表达式")
|
||||||
|
public SortingInfo[] sort;
|
||||||
|
|
||||||
|
@Schema(description = "分组表达式")
|
||||||
|
public GroupingInfo[] group;
|
||||||
|
|
||||||
|
@Schema(description = "过滤表达式")
|
||||||
|
public JSONArray filter;
|
||||||
|
|
||||||
|
@Schema(description = "总数表达式")
|
||||||
|
public SummaryInfo[] totalSummary;
|
||||||
|
|
||||||
|
@Schema(description = "分组总数表达式")
|
||||||
|
public SummaryInfo[] groupSummary;
|
||||||
|
|
||||||
|
@Schema(description = "选择表达式,需要去重查询的字段")
|
||||||
|
public String[] distinctSelect;
|
||||||
|
|
||||||
|
@Schema(description = "选择表达式,需要查询的字段")
|
||||||
|
public String[] select;
|
||||||
|
|
||||||
|
@Schema(description = "限制选择表达式")
|
||||||
|
public String[] preSelect;
|
||||||
|
|
||||||
|
@Schema(description = "")
|
||||||
|
public Boolean remoteSelect = false;
|
||||||
|
|
||||||
|
@Schema(description = "")
|
||||||
|
public Boolean remoteGrouping;
|
||||||
|
|
||||||
|
@Schema(description = "")
|
||||||
|
public Boolean expandLinqSumType;
|
||||||
|
|
||||||
|
@Schema(description = "主键数组")
|
||||||
|
public String[] primaryKey;
|
||||||
|
|
||||||
|
@Schema(description = "默认排序")
|
||||||
|
public String defaultSort;
|
||||||
|
|
||||||
|
@Schema(description = "是否 filter 表达式应该被转化为小写")
|
||||||
|
public Boolean stringToLower = false;
|
||||||
|
|
||||||
|
@Schema(description = "")
|
||||||
|
public Boolean paginateViaPrimaryKey = false;
|
||||||
|
|
||||||
|
@Schema(description = "根据主键 key 排序")
|
||||||
|
public Boolean sortByPrimaryKey = false;
|
||||||
|
|
||||||
|
@Schema(description = "")
|
||||||
|
public Boolean allowAsyncOverSync = false;
|
||||||
|
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private Map<String, Object> extMap = new HashMap();
|
||||||
|
|
||||||
|
public DataSourceLoadOptionsBase() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getStringToLowerDefault() {
|
||||||
|
return this.stringToLowerDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getRequireTotalCount() {
|
||||||
|
return this.requireTotalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getRequireGroupCount() {
|
||||||
|
return this.requireGroupCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getGroupResultFlat() {
|
||||||
|
return this.groupResultFlat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getIsCountQuery() {
|
||||||
|
return this.isCountQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getSkip() {
|
||||||
|
return this.skip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTake() {
|
||||||
|
return this.take;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortingInfo[] getSort() {
|
||||||
|
return this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GroupingInfo[] getGroup() {
|
||||||
|
return this.group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONArray getFilter() {
|
||||||
|
return this.filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SummaryInfo[] getTotalSummary() {
|
||||||
|
return this.totalSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SummaryInfo[] getGroupSummary() {
|
||||||
|
return this.groupSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getDistinctSelect() {
|
||||||
|
return this.distinctSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getSelect() {
|
||||||
|
return this.select;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPreSelect() {
|
||||||
|
return this.preSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getRemoteSelect() {
|
||||||
|
return this.remoteSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getRemoteGrouping() {
|
||||||
|
return this.remoteGrouping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getExpandLinqSumType() {
|
||||||
|
return this.expandLinqSumType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPrimaryKey() {
|
||||||
|
return this.primaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaultSort() {
|
||||||
|
return this.defaultSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getStringToLower() {
|
||||||
|
return this.stringToLower;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getPaginateViaPrimaryKey() {
|
||||||
|
return this.paginateViaPrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getSortByPrimaryKey() {
|
||||||
|
return this.sortByPrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getAllowAsyncOverSync() {
|
||||||
|
return this.allowAsyncOverSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getExtMap() {
|
||||||
|
return this.extMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringToLowerDefault(final Boolean stringToLowerDefault) {
|
||||||
|
this.stringToLowerDefault = stringToLowerDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRequireTotalCount(final Boolean requireTotalCount) {
|
||||||
|
this.requireTotalCount = requireTotalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRequireGroupCount(final Boolean requireGroupCount) {
|
||||||
|
this.requireGroupCount = requireGroupCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupResultFlat(final Boolean groupResultFlat) {
|
||||||
|
this.groupResultFlat = groupResultFlat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsCountQuery(final Boolean isCountQuery) {
|
||||||
|
this.isCountQuery = isCountQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSkip(final Integer skip) {
|
||||||
|
this.skip = skip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTake(final Integer take) {
|
||||||
|
this.take = take;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSort(final SortingInfo[] sort) {
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup(final GroupingInfo[] group) {
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFilter(final JSONArray filter) {
|
||||||
|
this.filter = filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalSummary(final SummaryInfo[] totalSummary) {
|
||||||
|
this.totalSummary = totalSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupSummary(final SummaryInfo[] groupSummary) {
|
||||||
|
this.groupSummary = groupSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDistinctSelect(final String[] distinctSelect) {
|
||||||
|
this.distinctSelect = distinctSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelect(final String[] select) {
|
||||||
|
this.select = select;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreSelect(final String[] preSelect) {
|
||||||
|
this.preSelect = preSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteSelect(final Boolean remoteSelect) {
|
||||||
|
this.remoteSelect = remoteSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteGrouping(final Boolean remoteGrouping) {
|
||||||
|
this.remoteGrouping = remoteGrouping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpandLinqSumType(final Boolean expandLinqSumType) {
|
||||||
|
this.expandLinqSumType = expandLinqSumType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimaryKey(final String[] primaryKey) {
|
||||||
|
this.primaryKey = primaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultSort(final String defaultSort) {
|
||||||
|
this.defaultSort = defaultSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringToLower(final Boolean stringToLower) {
|
||||||
|
this.stringToLower = stringToLower;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPaginateViaPrimaryKey(final Boolean paginateViaPrimaryKey) {
|
||||||
|
this.paginateViaPrimaryKey = paginateViaPrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSortByPrimaryKey(final Boolean sortByPrimaryKey) {
|
||||||
|
this.sortByPrimaryKey = sortByPrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllowAsyncOverSync(final Boolean allowAsyncOverSync) {
|
||||||
|
this.allowAsyncOverSync = allowAsyncOverSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExtMap(final Map<String, Object> extMap) {
|
||||||
|
this.extMap = extMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof DataSourceLoadOptionsBase)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
DataSourceLoadOptionsBase other = (DataSourceLoadOptionsBase)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$stringToLowerDefault = this.getStringToLowerDefault();
|
||||||
|
Object other$stringToLowerDefault = other.getStringToLowerDefault();
|
||||||
|
if (this$stringToLowerDefault == null) {
|
||||||
|
if (other$stringToLowerDefault != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$stringToLowerDefault.equals(other$stringToLowerDefault)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$requireTotalCount = this.getRequireTotalCount();
|
||||||
|
Object other$requireTotalCount = other.getRequireTotalCount();
|
||||||
|
if (this$requireTotalCount == null) {
|
||||||
|
if (other$requireTotalCount != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$requireTotalCount.equals(other$requireTotalCount)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$requireGroupCount = this.getRequireGroupCount();
|
||||||
|
Object other$requireGroupCount = other.getRequireGroupCount();
|
||||||
|
if (this$requireGroupCount == null) {
|
||||||
|
if (other$requireGroupCount != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$requireGroupCount.equals(other$requireGroupCount)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$groupResultFlat = this.getGroupResultFlat();
|
||||||
|
Object other$groupResultFlat = other.getGroupResultFlat();
|
||||||
|
if (this$groupResultFlat == null) {
|
||||||
|
if (other$groupResultFlat != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$groupResultFlat.equals(other$groupResultFlat)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$isCountQuery = this.getIsCountQuery();
|
||||||
|
Object other$isCountQuery = other.getIsCountQuery();
|
||||||
|
if (this$isCountQuery == null) {
|
||||||
|
if (other$isCountQuery != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$isCountQuery.equals(other$isCountQuery)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$skip = this.getSkip();
|
||||||
|
Object other$skip = other.getSkip();
|
||||||
|
if (this$skip == null) {
|
||||||
|
if (other$skip != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$skip.equals(other$skip)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$take = this.getTake();
|
||||||
|
Object other$take = other.getTake();
|
||||||
|
if (this$take == null) {
|
||||||
|
if (other$take != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$take.equals(other$take)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$remoteSelect = this.getRemoteSelect();
|
||||||
|
Object other$remoteSelect = other.getRemoteSelect();
|
||||||
|
if (this$remoteSelect == null) {
|
||||||
|
if (other$remoteSelect != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$remoteSelect.equals(other$remoteSelect)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$remoteGrouping = this.getRemoteGrouping();
|
||||||
|
Object other$remoteGrouping = other.getRemoteGrouping();
|
||||||
|
if (this$remoteGrouping == null) {
|
||||||
|
if (other$remoteGrouping != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$remoteGrouping.equals(other$remoteGrouping)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$expandLinqSumType = this.getExpandLinqSumType();
|
||||||
|
Object other$expandLinqSumType = other.getExpandLinqSumType();
|
||||||
|
if (this$expandLinqSumType == null) {
|
||||||
|
if (other$expandLinqSumType != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$expandLinqSumType.equals(other$expandLinqSumType)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$stringToLower = this.getStringToLower();
|
||||||
|
Object other$stringToLower = other.getStringToLower();
|
||||||
|
if (this$stringToLower == null) {
|
||||||
|
if (other$stringToLower != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$stringToLower.equals(other$stringToLower)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$paginateViaPrimaryKey = this.getPaginateViaPrimaryKey();
|
||||||
|
Object other$paginateViaPrimaryKey = other.getPaginateViaPrimaryKey();
|
||||||
|
if (this$paginateViaPrimaryKey == null) {
|
||||||
|
if (other$paginateViaPrimaryKey != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$paginateViaPrimaryKey.equals(other$paginateViaPrimaryKey)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$sortByPrimaryKey = this.getSortByPrimaryKey();
|
||||||
|
Object other$sortByPrimaryKey = other.getSortByPrimaryKey();
|
||||||
|
if (this$sortByPrimaryKey == null) {
|
||||||
|
if (other$sortByPrimaryKey != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$sortByPrimaryKey.equals(other$sortByPrimaryKey)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$allowAsyncOverSync = this.getAllowAsyncOverSync();
|
||||||
|
Object other$allowAsyncOverSync = other.getAllowAsyncOverSync();
|
||||||
|
if (this$allowAsyncOverSync == null) {
|
||||||
|
if (other$allowAsyncOverSync != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$allowAsyncOverSync.equals(other$allowAsyncOverSync)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Arrays.deepEquals(this.getSort(), other.getSort())) {
|
||||||
|
return false;
|
||||||
|
} else if (!Arrays.deepEquals(this.getGroup(), other.getGroup())) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$filter = this.getFilter();
|
||||||
|
Object other$filter = other.getFilter();
|
||||||
|
if (this$filter == null) {
|
||||||
|
if (other$filter != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$filter.equals(other$filter)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Arrays.deepEquals(this.getTotalSummary(), other.getTotalSummary())) {
|
||||||
|
return false;
|
||||||
|
} else if (!Arrays.deepEquals(this.getGroupSummary(), other.getGroupSummary())) {
|
||||||
|
return false;
|
||||||
|
} else if (!Arrays.deepEquals(this.getDistinctSelect(), other.getDistinctSelect())) {
|
||||||
|
return false;
|
||||||
|
} else if (!Arrays.deepEquals(this.getSelect(), other.getSelect())) {
|
||||||
|
return false;
|
||||||
|
} else if (!Arrays.deepEquals(this.getPreSelect(), other.getPreSelect())) {
|
||||||
|
return false;
|
||||||
|
} else if (!Arrays.deepEquals(this.getPrimaryKey(), other.getPrimaryKey())) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$defaultSort = this.getDefaultSort();
|
||||||
|
Object other$defaultSort = other.getDefaultSort();
|
||||||
|
if (this$defaultSort == null) {
|
||||||
|
if (other$defaultSort != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$defaultSort.equals(other$defaultSort)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$extMap = this.getExtMap();
|
||||||
|
Object other$extMap = other.getExtMap();
|
||||||
|
if (this$extMap == null) {
|
||||||
|
if (other$extMap != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$extMap.equals(other$extMap)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof DataSourceLoadOptionsBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
Object $stringToLowerDefault = this.getStringToLowerDefault();
|
||||||
|
result = result * 59 + ($stringToLowerDefault == null ? 43 : $stringToLowerDefault.hashCode());
|
||||||
|
Object $requireTotalCount = this.getRequireTotalCount();
|
||||||
|
result = result * 59 + ($requireTotalCount == null ? 43 : $requireTotalCount.hashCode());
|
||||||
|
Object $requireGroupCount = this.getRequireGroupCount();
|
||||||
|
result = result * 59 + ($requireGroupCount == null ? 43 : $requireGroupCount.hashCode());
|
||||||
|
Object $groupResultFlat = this.getGroupResultFlat();
|
||||||
|
result = result * 59 + ($groupResultFlat == null ? 43 : $groupResultFlat.hashCode());
|
||||||
|
Object $isCountQuery = this.getIsCountQuery();
|
||||||
|
result = result * 59 + ($isCountQuery == null ? 43 : $isCountQuery.hashCode());
|
||||||
|
Object $skip = this.getSkip();
|
||||||
|
result = result * 59 + ($skip == null ? 43 : $skip.hashCode());
|
||||||
|
Object $take = this.getTake();
|
||||||
|
result = result * 59 + ($take == null ? 43 : $take.hashCode());
|
||||||
|
Object $remoteSelect = this.getRemoteSelect();
|
||||||
|
result = result * 59 + ($remoteSelect == null ? 43 : $remoteSelect.hashCode());
|
||||||
|
Object $remoteGrouping = this.getRemoteGrouping();
|
||||||
|
result = result * 59 + ($remoteGrouping == null ? 43 : $remoteGrouping.hashCode());
|
||||||
|
Object $expandLinqSumType = this.getExpandLinqSumType();
|
||||||
|
result = result * 59 + ($expandLinqSumType == null ? 43 : $expandLinqSumType.hashCode());
|
||||||
|
Object $stringToLower = this.getStringToLower();
|
||||||
|
result = result * 59 + ($stringToLower == null ? 43 : $stringToLower.hashCode());
|
||||||
|
Object $paginateViaPrimaryKey = this.getPaginateViaPrimaryKey();
|
||||||
|
result = result * 59 + ($paginateViaPrimaryKey == null ? 43 : $paginateViaPrimaryKey.hashCode());
|
||||||
|
Object $sortByPrimaryKey = this.getSortByPrimaryKey();
|
||||||
|
result = result * 59 + ($sortByPrimaryKey == null ? 43 : $sortByPrimaryKey.hashCode());
|
||||||
|
Object $allowAsyncOverSync = this.getAllowAsyncOverSync();
|
||||||
|
result = result * 59 + ($allowAsyncOverSync == null ? 43 : $allowAsyncOverSync.hashCode());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getSort());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getGroup());
|
||||||
|
Object $filter = this.getFilter();
|
||||||
|
result = result * 59 + ($filter == null ? 43 : $filter.hashCode());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getTotalSummary());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getGroupSummary());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getDistinctSelect());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getSelect());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getPreSelect());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getPrimaryKey());
|
||||||
|
Object $defaultSort = this.getDefaultSort();
|
||||||
|
result = result * 59 + ($defaultSort == null ? 43 : $defaultSort.hashCode());
|
||||||
|
Object $extMap = this.getExtMap();
|
||||||
|
result = result * 59 + ($extMap == null ? 43 : $extMap.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "DataSourceLoadOptionsBase(stringToLowerDefault=" + this.getStringToLowerDefault() + ", requireTotalCount=" + this.getRequireTotalCount() + ", requireGroupCount=" + this.getRequireGroupCount() + ", groupResultFlat=" + this.getGroupResultFlat() + ", isCountQuery=" + this.getIsCountQuery() + ", skip=" + this.getSkip() + ", take=" + this.getTake() + ", sort=" + Arrays.deepToString(this.getSort()) + ", group=" + Arrays.deepToString(this.getGroup()) + ", filter=" + this.getFilter() + ", totalSummary=" + Arrays.deepToString(this.getTotalSummary()) + ", groupSummary=" + Arrays.deepToString(this.getGroupSummary()) + ", distinctSelect=" + Arrays.deepToString(this.getDistinctSelect()) + ", select=" + Arrays.deepToString(this.getSelect()) + ", preSelect=" + Arrays.deepToString(this.getPreSelect()) + ", remoteSelect=" + this.getRemoteSelect() + ", remoteGrouping=" + this.getRemoteGrouping() + ", expandLinqSumType=" + this.getExpandLinqSumType() + ", primaryKey=" + Arrays.deepToString(this.getPrimaryKey()) + ", defaultSort=" + this.getDefaultSort() + ", stringToLower=" + this.getStringToLower() + ", paginateViaPrimaryKey=" + this.getPaginateViaPrimaryKey() + ", sortByPrimaryKey=" + this.getSortByPrimaryKey() + ", allowAsyncOverSync=" + this.getAllowAsyncOverSync() + ", extMap=" + this.getExtMap() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,691 @@
|
|||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import org.jsoup.helper.StringUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DataSourceRequest {
|
||||||
|
private int page;
|
||||||
|
private int pageSize;
|
||||||
|
private int take;
|
||||||
|
private int skip;
|
||||||
|
private List<String> distinctSelect;
|
||||||
|
private List<String> select;
|
||||||
|
private List<SortDescriptor> sort;
|
||||||
|
private List<GroupDescriptor> group;
|
||||||
|
private List<AggregateDescriptor> aggregate;
|
||||||
|
private HashMap<String, Object> data = new HashMap();
|
||||||
|
private Boolean groupResultFlat = false;
|
||||||
|
private FilterDescriptor filter = new FilterDescriptor();
|
||||||
|
|
||||||
|
public DataSourceRequest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getDistinctSelect() {
|
||||||
|
return this.distinctSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDistinctSelect(List<String> distinctSelect) {
|
||||||
|
this.distinctSelect = distinctSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<String, Object> getData() {
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleUnknown(String key, Object value) {
|
||||||
|
this.data.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPage() {
|
||||||
|
return this.page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPage(int page) {
|
||||||
|
this.page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageSize() {
|
||||||
|
return this.pageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageSize(int pageSize) {
|
||||||
|
this.pageSize = pageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTake() {
|
||||||
|
return this.take;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTake(int take) {
|
||||||
|
this.take = take;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSkip() {
|
||||||
|
return this.skip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSkip(int skip) {
|
||||||
|
this.skip = skip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SortDescriptor> getSort() {
|
||||||
|
return this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSort(List<SortDescriptor> sort) {
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FilterDescriptor getFilter() {
|
||||||
|
return this.filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFilter(FilterDescriptor filter) {
|
||||||
|
this.filter = filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getSelect() {
|
||||||
|
return this.select;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelect(List<String> select) {
|
||||||
|
this.select = select;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getGroupResultFlat() {
|
||||||
|
return this.groupResultFlat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupResultFlat(Boolean groupResultFlat) {
|
||||||
|
this.groupResultFlat = groupResultFlat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONArray toDevextremeFilter(FilterDescriptor filter) {
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
filter(jsonArray, filter);
|
||||||
|
return jsonArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void restrict(JSONArray jsonArray, FilterDescriptor filter) {
|
||||||
|
String operator = filter.getOperator();
|
||||||
|
String field = filter.getField();
|
||||||
|
String dataType = filter.getDataType();
|
||||||
|
jsonArray.put(field);
|
||||||
|
Object value = filter.getValue();
|
||||||
|
boolean ignoreCase = filter.isIgnoreCase();
|
||||||
|
String devCondition = null;
|
||||||
|
String[] var10000 = new String[]{"isnull", "isnotnull", "isempty", "isnotempty"};
|
||||||
|
switch (operator) {
|
||||||
|
case "eq":
|
||||||
|
devCondition = "=";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "neq":
|
||||||
|
devCondition = "<>";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "gt":
|
||||||
|
devCondition = ">";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "gte":
|
||||||
|
devCondition = ">=";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "lt":
|
||||||
|
devCondition = "<";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "lte":
|
||||||
|
devCondition = "<=";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "startswith":
|
||||||
|
devCondition = "startswith";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "endswith":
|
||||||
|
devCondition = "endswith";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "contains":
|
||||||
|
devCondition = "contains";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "doesnotcontain":
|
||||||
|
devCondition = "notcontains";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "isnull":
|
||||||
|
devCondition = "isnull";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put((Object)null);
|
||||||
|
break;
|
||||||
|
case "isnotnull":
|
||||||
|
devCondition = "isnotnull";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put((Object)null);
|
||||||
|
break;
|
||||||
|
case "isempty":
|
||||||
|
devCondition = "=";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put("");
|
||||||
|
break;
|
||||||
|
case "isnotempty":
|
||||||
|
devCondition = "!=";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put("");
|
||||||
|
break;
|
||||||
|
case "in":
|
||||||
|
devCondition = "in";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
break;
|
||||||
|
case "ni":
|
||||||
|
devCondition = "ni";
|
||||||
|
jsonArray.put(devCondition);
|
||||||
|
jsonArray.put(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonArray.put(dataType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void filter(JSONArray jsonArray, FilterDescriptor filter) {
|
||||||
|
if (filter != null) {
|
||||||
|
List<FilterDescriptor> filters = filter.filters;
|
||||||
|
int size = filters.size();
|
||||||
|
String logic = null;
|
||||||
|
if (!filters.isEmpty()) {
|
||||||
|
if (!filter.getFilters().isEmpty() && filter.getFilters().size() > 1 && filter.getLogic().toString().equals("or")) {
|
||||||
|
logic = "or";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!filter.getFilters().isEmpty() && filter.getFilters().size() > 1 && filter.getLogic().toString().equals("and")) {
|
||||||
|
logic = "and";
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
for(FilterDescriptor entry : filters) {
|
||||||
|
if (!entry.getFilters().isEmpty()) {
|
||||||
|
JSONArray filterJsonArray = new JSONArray();
|
||||||
|
filter(filterJsonArray, entry);
|
||||||
|
jsonArray.put(filterJsonArray);
|
||||||
|
if (index != size - 1) {
|
||||||
|
jsonArray.put(logic);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
JSONArray restrictJsonArray = new JSONArray();
|
||||||
|
restrict(restrictJsonArray, entry);
|
||||||
|
jsonArray.put(restrictJsonArray);
|
||||||
|
if (index != size - 1) {
|
||||||
|
jsonArray.put(logic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void sort(DataSourceLoadOptionsBase dataSourceLoadOptionsBase, List<SortDescriptor> sort) {
|
||||||
|
if (sort != null && !sort.isEmpty()) {
|
||||||
|
SortingInfo[] decSort = new SortingInfo[sort.size()];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for(SortDescriptor entry : sort) {
|
||||||
|
String field = entry.getField();
|
||||||
|
String dir = entry.getDir();
|
||||||
|
SortingInfo sortingInfo = new SortingInfo();
|
||||||
|
sortingInfo.setSelector(field);
|
||||||
|
if (StringUtil.isBlank(dir)) {
|
||||||
|
sortingInfo.setDesc(false);
|
||||||
|
} else if (dir.equals("asc")) {
|
||||||
|
sortingInfo.setDesc(false);
|
||||||
|
} else if (dir.equals("desc")) {
|
||||||
|
sortingInfo.setDesc(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
decSort[i] = sortingInfo;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataSourceLoadOptionsBase.setSort(decSort);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void calculateAggregates(DataSourceLoadOptionsBase dataSourceLoadOptionsBase, List<AggregateDescriptor> aggregates) {
|
||||||
|
if (aggregates != null && !aggregates.isEmpty()) {
|
||||||
|
SummaryInfo[] totalSummary = new SummaryInfo[aggregates.size()];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for(AggregateDescriptor aggregateDescriptor : aggregates) {
|
||||||
|
SummaryInfo summaryInfo = new SummaryInfo();
|
||||||
|
summaryInfo.setSelector(aggregateDescriptor.getField());
|
||||||
|
summaryInfo.setSummaryType(aggregateDescriptor.getAggregate());
|
||||||
|
totalSummary[i] = summaryInfo;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataSourceLoadOptionsBase.setTotalSummary(totalSummary);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void group(DataSourceLoadOptionsBase dataSourceLoadOptionsBase) {
|
||||||
|
new ArrayList();
|
||||||
|
List<GroupDescriptor> group = this.getGroup();
|
||||||
|
if (group != null && !group.isEmpty()) {
|
||||||
|
GroupingInfo[] devGroup = new GroupingInfo[group.size()];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for(GroupDescriptor groupDescriptor : group) {
|
||||||
|
GroupingInfo groupingInfo = new GroupingInfo();
|
||||||
|
groupingInfo.setSelector(groupDescriptor.getField());
|
||||||
|
String dir = groupDescriptor.getDir();
|
||||||
|
if (StringUtil.isBlank(dir)) {
|
||||||
|
groupingInfo.setDesc(false);
|
||||||
|
} else if (dir.equals("asc")) {
|
||||||
|
groupingInfo.setDesc(false);
|
||||||
|
} else if (dir.equals("desc")) {
|
||||||
|
groupingInfo.setDesc(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
groupingInfo.setNeedSortFlag(groupDescriptor.getNeedSortFlag());
|
||||||
|
List<AggregateDescriptor> aggregateDescriptors = groupDescriptor.getAggregates();
|
||||||
|
if (CollectionUtil.isNotEmpty(aggregateDescriptors)) {
|
||||||
|
for(AggregateDescriptor aggregateDescriptor : aggregateDescriptors) {
|
||||||
|
SummaryInfo summaryInfo = new SummaryInfo();
|
||||||
|
summaryInfo.setSelector(aggregateDescriptor.getField());
|
||||||
|
summaryInfo.setSummaryType(aggregateDescriptor.getAggregate());
|
||||||
|
groupingInfo.getSummaryInfos().add(summaryInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
devGroup[i] = groupingInfo;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataSourceLoadOptionsBase.setGroup(devGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void page(DataSourceLoadOptionsBase dataSourceLoadOptionsBase, int take, int skip) {
|
||||||
|
dataSourceLoadOptionsBase.setTake(take);
|
||||||
|
dataSourceLoadOptionsBase.setSkip(skip);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSourceLoadOptionsBase toDevRequest() {
|
||||||
|
DataSourceLoadOptionsBase dataSourceLoadOptionsBase = new DataSourceLoadOptionsBase();
|
||||||
|
JSONArray filter = toDevextremeFilter(this.getFilter());
|
||||||
|
dataSourceLoadOptionsBase.setFilter(filter);
|
||||||
|
dataSourceLoadOptionsBase.setGroupResultFlat(this.getGroupResultFlat());
|
||||||
|
dataSourceLoadOptionsBase.setRequireTotalCount(true);
|
||||||
|
if (CollectionUtil.isNotEmpty(this.getSelect())) {
|
||||||
|
String[] res = new String[this.getSelect().size()];
|
||||||
|
dataSourceLoadOptionsBase.setSelect((String[])this.getSelect().toArray(res));
|
||||||
|
}
|
||||||
|
|
||||||
|
sort(dataSourceLoadOptionsBase, this.sortDescriptors());
|
||||||
|
page(dataSourceLoadOptionsBase, this.getTake(), this.getSkip());
|
||||||
|
List<GroupDescriptor> groups = this.getGroup();
|
||||||
|
if (groups != null && !groups.isEmpty()) {
|
||||||
|
this.group(dataSourceLoadOptionsBase);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<AggregateDescriptor> aggregates = this.getAggregate();
|
||||||
|
if (aggregates != null && !aggregates.isEmpty()) {
|
||||||
|
calculateAggregates(dataSourceLoadOptionsBase, aggregates);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataSourceLoadOptionsBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSourceResult toDataSourceResult(LoadResult loadResult) {
|
||||||
|
DataSourceResult dataSourceResult = new DataSourceResult();
|
||||||
|
if (null != loadResult.getData()) {
|
||||||
|
List results = (List)loadResult.getData();
|
||||||
|
dataSourceResult.setData(results);
|
||||||
|
if (null == loadResult.getTotalCount()) {
|
||||||
|
loadResult.setTotalCount(results.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dataSourceResult.setTotal((long)loadResult.getTotalCount());
|
||||||
|
dataSourceResult.setAggregates(loadResult.getAggregates());
|
||||||
|
return dataSourceResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SortDescriptor> sortDescriptors() {
|
||||||
|
List<SortDescriptor> sort = new ArrayList();
|
||||||
|
List<GroupDescriptor> groups = this.getGroup();
|
||||||
|
List<SortDescriptor> sorts = this.getSort();
|
||||||
|
if (groups != null) {
|
||||||
|
sort.addAll(groups);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sorts != null) {
|
||||||
|
sort.addAll(sorts);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GroupDescriptor> getGroup() {
|
||||||
|
return this.group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup(List<GroupDescriptor> group) {
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AggregateDescriptor> getAggregate() {
|
||||||
|
return this.aggregate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAggregate(List<AggregateDescriptor> aggregate) {
|
||||||
|
this.aggregate = aggregate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
DataSourceRequest dataSourceRequest = new DataSourceRequest();
|
||||||
|
dataSourceRequest.setPage(1);
|
||||||
|
dataSourceRequest.setPageSize(20);
|
||||||
|
dataSourceRequest.setSkip(0);
|
||||||
|
dataSourceRequest.setTake(20);
|
||||||
|
FilterDescriptor filter = new FilterDescriptor();
|
||||||
|
filter.setLogic("and");
|
||||||
|
List<FilterDescriptor> andFilters = new ArrayList();
|
||||||
|
FilterDescriptor filter1 = new FilterDescriptor();
|
||||||
|
filter1.setField("freight");
|
||||||
|
filter1.setValue(12);
|
||||||
|
filter1.setOperator("eq");
|
||||||
|
andFilters.add(filter1);
|
||||||
|
FilterDescriptor filter2 = new FilterDescriptor();
|
||||||
|
filter2.setField("freight");
|
||||||
|
filter2.setValue(23);
|
||||||
|
filter2.setOperator("eq");
|
||||||
|
andFilters.add(filter2);
|
||||||
|
FilterDescriptor filter3 = new FilterDescriptor();
|
||||||
|
filter3.setLogic("or");
|
||||||
|
FilterDescriptor filter4 = new FilterDescriptor();
|
||||||
|
filter4.setField("freight");
|
||||||
|
filter4.setValue("23");
|
||||||
|
filter4.setOperator("startswith");
|
||||||
|
List<FilterDescriptor> orFilters = new ArrayList();
|
||||||
|
orFilters.add(filter4);
|
||||||
|
FilterDescriptor filter5 = new FilterDescriptor();
|
||||||
|
filter5.setField("freight");
|
||||||
|
filter5.setValue("23");
|
||||||
|
filter5.setOperator("eq");
|
||||||
|
orFilters.add(filter5);
|
||||||
|
filter3.setFilters(orFilters);
|
||||||
|
andFilters.add(filter3);
|
||||||
|
filter.setFilters(andFilters);
|
||||||
|
dataSourceRequest.setFilter(filter);
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||||
|
System.out.println(JSONUtil.toJsonStr(loadOptions));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SortDescriptor {
|
||||||
|
private String field;
|
||||||
|
private String dir;
|
||||||
|
private Boolean needSortFlag = true;
|
||||||
|
|
||||||
|
public SortDescriptor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getField() {
|
||||||
|
return this.field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setField(String field) {
|
||||||
|
this.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDir() {
|
||||||
|
return this.dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDir(String dir) {
|
||||||
|
this.dir = dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getNeedSortFlag() {
|
||||||
|
return this.needSortFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNeedSortFlag(Boolean needSortFlag) {
|
||||||
|
this.needSortFlag = needSortFlag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class GroupDescriptor extends SortDescriptor {
|
||||||
|
private List<AggregateDescriptor> aggregates = new ArrayList();
|
||||||
|
|
||||||
|
public GroupDescriptor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AggregateDescriptor> getAggregates() {
|
||||||
|
return this.aggregates;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class AggregateDescriptor {
|
||||||
|
private String field;
|
||||||
|
private String aggregate;
|
||||||
|
|
||||||
|
public AggregateDescriptor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getField() {
|
||||||
|
return this.field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setField(String field) {
|
||||||
|
this.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAggregate() {
|
||||||
|
return this.aggregate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAggregate(String aggregate) {
|
||||||
|
this.aggregate = aggregate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class FilterDescriptor {
|
||||||
|
private String logic;
|
||||||
|
private List<FilterDescriptor> filters = new ArrayList();
|
||||||
|
private String field;
|
||||||
|
private Object value;
|
||||||
|
private String operator;
|
||||||
|
private String dataType = "";
|
||||||
|
private boolean ignoreCase = true;
|
||||||
|
|
||||||
|
public FilterDescriptor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getField() {
|
||||||
|
return this.field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setField(String field) {
|
||||||
|
this.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return this.operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLogic() {
|
||||||
|
return this.logic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLogic(String logic) {
|
||||||
|
this.logic = logic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isIgnoreCase() {
|
||||||
|
return this.ignoreCase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIgnoreCase(boolean ignoreCase) {
|
||||||
|
this.ignoreCase = ignoreCase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDataType() {
|
||||||
|
return this.dataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataType(String dataType) {
|
||||||
|
this.dataType = dataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FilterDescriptor> getFilters() {
|
||||||
|
return this.filters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFilters(final List<FilterDescriptor> filters) {
|
||||||
|
this.filters = filters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof FilterDescriptor)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
FilterDescriptor other = (FilterDescriptor)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else if (this.isIgnoreCase() != other.isIgnoreCase()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$logic = this.getLogic();
|
||||||
|
Object other$logic = other.getLogic();
|
||||||
|
if (this$logic == null) {
|
||||||
|
if (other$logic != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$logic.equals(other$logic)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$filters = this.getFilters();
|
||||||
|
Object other$filters = other.getFilters();
|
||||||
|
if (this$filters == null) {
|
||||||
|
if (other$filters != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$filters.equals(other$filters)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$field = this.getField();
|
||||||
|
Object other$field = other.getField();
|
||||||
|
if (this$field == null) {
|
||||||
|
if (other$field != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$field.equals(other$field)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$value = this.getValue();
|
||||||
|
Object other$value = other.getValue();
|
||||||
|
if (this$value == null) {
|
||||||
|
if (other$value != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$value.equals(other$value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$operator = this.getOperator();
|
||||||
|
Object other$operator = other.getOperator();
|
||||||
|
if (this$operator == null) {
|
||||||
|
if (other$operator != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$operator.equals(other$operator)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$dataType = this.getDataType();
|
||||||
|
Object other$dataType = other.getDataType();
|
||||||
|
if (this$dataType == null) {
|
||||||
|
if (other$dataType != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$dataType.equals(other$dataType)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof FilterDescriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
result = result * 59 + (this.isIgnoreCase() ? 79 : 97);
|
||||||
|
Object $logic = this.getLogic();
|
||||||
|
result = result * 59 + ($logic == null ? 43 : $logic.hashCode());
|
||||||
|
Object $filters = this.getFilters();
|
||||||
|
result = result * 59 + ($filters == null ? 43 : $filters.hashCode());
|
||||||
|
Object $field = this.getField();
|
||||||
|
result = result * 59 + ($field == null ? 43 : $field.hashCode());
|
||||||
|
Object $value = this.getValue();
|
||||||
|
result = result * 59 + ($value == null ? 43 : $value.hashCode());
|
||||||
|
Object $operator = this.getOperator();
|
||||||
|
result = result * 59 + ($operator == null ? 43 : $operator.hashCode());
|
||||||
|
Object $dataType = this.getDataType();
|
||||||
|
result = result * 59 + ($dataType == null ? 43 : $dataType.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "DataSourceRequest.FilterDescriptor(logic=" + this.getLogic() + ", filters=" + this.getFilters() + ", field=" + this.getField() + ", value=" + this.getValue() + ", operator=" + this.getOperator() + ", dataType=" + this.getDataType() + ", ignoreCase=" + this.isIgnoreCase() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class DataSourceResult<T> {
|
||||||
|
private Long total;
|
||||||
|
private List<T> data;
|
||||||
|
private Map<String, Object> aggregates;
|
||||||
|
|
||||||
|
public long getTotal() {
|
||||||
|
return this.total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotal(long total) {
|
||||||
|
this.total = total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> getData() {
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(List<T> data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getAggregates() {
|
||||||
|
return this.aggregates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAggregates(Map<String, Object> aggregates) {
|
||||||
|
this.aggregates = aggregates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSourceResult() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof DataSourceResult)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
DataSourceResult<?> other = (DataSourceResult)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else if (this.getTotal() != other.getTotal()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$data = this.getData();
|
||||||
|
Object other$data = other.getData();
|
||||||
|
if (this$data == null) {
|
||||||
|
if (other$data != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$data.equals(other$data)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$aggregates = this.getAggregates();
|
||||||
|
Object other$aggregates = other.getAggregates();
|
||||||
|
if (this$aggregates == null) {
|
||||||
|
if (other$aggregates != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$aggregates.equals(other$aggregates)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof DataSourceResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
long $total = this.getTotal();
|
||||||
|
result = result * 59 + (int)($total >>> 32 ^ $total);
|
||||||
|
Object $data = this.getData();
|
||||||
|
result = result * 59 + ($data == null ? 43 : $data.hashCode());
|
||||||
|
Object $aggregates = this.getAggregates();
|
||||||
|
result = result * 59 + ($aggregates == null ? 43 : $aggregates.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "DataSourceResult(total=" + this.getTotal() + ", data=" + this.getData() + ", aggregates=" + this.getAggregates() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,262 @@
|
|||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通用动态 SQL Mapper。
|
||||||
|
* <p>
|
||||||
|
* 说明:
|
||||||
|
* <p>
|
||||||
|
* 1. 该接口通过注解 SQL 直接执行动态查询,适用于“表名/联表 SQL/查询列”需要运行期决定的场景;<br>
|
||||||
|
* 2. 带 {@code QueryWrapper} 的方法统一使用 {@code ew.customSqlSegment} 追加条件;<br>
|
||||||
|
* 3. 传入的 {@code sql}/{@code select}/{@code tableName} 属于动态片段,请在上层确保来源可信,避免注入风险。
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface DynamicSQLMapper<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页执行完整 SQL(SQL 内可使用 map 参数)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "${sql}", "</script>"})
|
||||||
|
List<Map<String, Object>> pageAllList(Page<?> page,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("map") Map<String, Object> map);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页执行完整 SQL(泛型结果,依赖 MyBatis 映射规则)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "${sql}", "</script>"})
|
||||||
|
<R> List<R> pageAllListWithResultType(Page<?> page,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("map") Map<String, Object> map,
|
||||||
|
@Param("resultType") Class<R> resultType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不分页执行完整 SQL。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "${sql}", "</script>"})
|
||||||
|
List<Map<String, Object>> getAllList(@Param("sql") String sql,
|
||||||
|
@Param("map") Map<String, Object> map);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不分页执行完整 SQL(泛型结果,依赖 MyBatis 映射规则)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "${sql}", "</script>"})
|
||||||
|
<R> List<R> getAllListWithResultType(@Param("sql") String sql,
|
||||||
|
@Param("map") Map<String, Object> map,
|
||||||
|
@Param("resultType") Class<R> resultType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计条数(含动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select count(1) count from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
Integer count(@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计条数(无动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select count(1) count from ${sql}", "</script>"})
|
||||||
|
Integer countNoWrapper(@Param("sql") String sql);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询(含动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Map<String, Object>> pageList(Page<?> page,
|
||||||
|
@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询(含动态条件,泛型结果)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
<R> List<R> pageListWithResultType(Page<?> page,
|
||||||
|
@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper,
|
||||||
|
@Param("resultType") Class<R> resultType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询(条件可选;方法名保持兼容)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Map<String, Object>> pageNoFilterList(Page<?> page,
|
||||||
|
@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询(无动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select ${select} from ${sql}", "</script>"})
|
||||||
|
List<Map<String, Object>> pageListNoWrapper(Page<?> page,
|
||||||
|
@Param("select") String select,
|
||||||
|
@Param("sql") String sql);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 非分页查询(含动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Map<String, Object>> getList(@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 非分页查询(含动态条件,历史命名保留;返回 Map 结构)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Map<String, Object>> getListWithResultType(@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单表条件查询(直接传 where 条件片段)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select ${select} from ${table} where ${condition}", "</script>"})
|
||||||
|
List<Map<String, Object>> getSingleTableList(@Param("select") String select,
|
||||||
|
@Param("table") String table,
|
||||||
|
@Param("condition") String condition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 非分页查询(条件可选;方法名保持兼容)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Map<String, Object>> getNoFilterList(@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 非分页查询(无动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select ${select} from ${sql}", "</script>"})
|
||||||
|
List<Map<String, Object>> getListNoWrapper(@Param("select") String select,
|
||||||
|
@Param("sql") String sql);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 汇总查询(含动态条件),返回单行汇总结果。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${sql}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
Map<String, Object> totalSummary(@Param("select") String select,
|
||||||
|
@Param("sql") String sql,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 汇总查询(无动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select ${select} from ${sql}", "</script>"})
|
||||||
|
Map<String, Object> totalSummaryNoWrapper(@Param("select") String select,
|
||||||
|
@Param("sql") String sql);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单表汇总查询(含动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select ${select} from ${tableName}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
Map<String, Object> totalSummarySingleTable(@Param("select") String select,
|
||||||
|
@Param("tableName") String tableName,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单表汇总查询(无动态条件)。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select ${select} from ${tableName}", "</script>"})
|
||||||
|
Map<String, Object> totalSummaryNoWrapperSingleTable(@Param("select") String select,
|
||||||
|
@Param("tableName") String tableName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表中最大排序值。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select max(order_index) from ${tableName}", "</script>"})
|
||||||
|
Integer getOrderIndexMax(@Param("tableName") String tableName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按条件获取表中最大排序值。
|
||||||
|
*/
|
||||||
|
@Select({
|
||||||
|
"<script>",
|
||||||
|
"select max(order_index) from ${tableName}",
|
||||||
|
"<if test='ew != null and ew.customSqlSegment != null and ew.customSqlSegment != \"\"'>",
|
||||||
|
"${ew.customSqlSegment}",
|
||||||
|
"</if>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
Integer getOrderIndexMaxByParentId(@Param("tableName") String tableName,
|
||||||
|
@Param("ew") QueryWrapper<?> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取分组字段列表。
|
||||||
|
*/
|
||||||
|
@Select({"<script>", "select ${info} from ${joinsql} group by ${info}", "</script>"})
|
||||||
|
List<Object> getGroup(@Param("info") String info, @Param("joinsql") String joinsql);
|
||||||
|
}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FilterFieldMeta {
|
||||||
|
private DataSourceRequest.FilterDescriptor filterDescriptor;
|
||||||
|
private Map<String, ItemEntity> fieldMeta;
|
||||||
|
private List<OrderBy> orderByList;
|
||||||
|
|
||||||
|
public FilterFieldMeta(DataSourceRequest.FilterDescriptor filterDescriptor, Map<String, ItemEntity> fieldMeta) {
|
||||||
|
this.filterDescriptor = filterDescriptor;
|
||||||
|
this.fieldMeta = fieldMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSourceRequest.FilterDescriptor getFilterDescriptor() {
|
||||||
|
return this.filterDescriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFilterDescriptor(DataSourceRequest.FilterDescriptor filterDescriptor) {
|
||||||
|
this.filterDescriptor = filterDescriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, ItemEntity> getFieldMeta() {
|
||||||
|
return this.fieldMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFieldMeta(Map<String, ItemEntity> fieldMeta) {
|
||||||
|
this.fieldMeta = fieldMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<OrderBy> getOrderByList() {
|
||||||
|
return this.orderByList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderByList(List<OrderBy> orderByList) {
|
||||||
|
this.orderByList = orderByList;
|
||||||
|
}
|
||||||
|
}
|
||||||
200
backend/src/main/java/com/yfd/platform/common/Group.java
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Group {
|
||||||
|
private Object key;
|
||||||
|
private String keyName;
|
||||||
|
private Map<String, Object> keyExt;
|
||||||
|
@JsonIgnore
|
||||||
|
private Object field;
|
||||||
|
private List items;
|
||||||
|
private int count = 0;
|
||||||
|
private Object[] summary;
|
||||||
|
private Map<String, Object> aggregates;
|
||||||
|
|
||||||
|
public Group() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getKey() {
|
||||||
|
return this.key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKeyName() {
|
||||||
|
return this.keyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getKeyExt() {
|
||||||
|
return this.keyExt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getField() {
|
||||||
|
return this.field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getItems() {
|
||||||
|
return this.items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
return this.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object[] getSummary() {
|
||||||
|
return this.summary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getAggregates() {
|
||||||
|
return this.aggregates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(final Object key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeyName(final String keyName) {
|
||||||
|
this.keyName = keyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeyExt(final Map<String, Object> keyExt) {
|
||||||
|
this.keyExt = keyExt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
public void setField(final Object field) {
|
||||||
|
this.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItems(final List items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCount(final int count) {
|
||||||
|
this.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSummary(final Object[] summary) {
|
||||||
|
this.summary = summary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAggregates(final Map<String, Object> aggregates) {
|
||||||
|
this.aggregates = aggregates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof Group)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Group other = (Group)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else if (this.getCount() != other.getCount()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$key = this.getKey();
|
||||||
|
Object other$key = other.getKey();
|
||||||
|
if (this$key == null) {
|
||||||
|
if (other$key != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$key.equals(other$key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$keyName = this.getKeyName();
|
||||||
|
Object other$keyName = other.getKeyName();
|
||||||
|
if (this$keyName == null) {
|
||||||
|
if (other$keyName != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$keyName.equals(other$keyName)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$keyExt = this.getKeyExt();
|
||||||
|
Object other$keyExt = other.getKeyExt();
|
||||||
|
if (this$keyExt == null) {
|
||||||
|
if (other$keyExt != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$keyExt.equals(other$keyExt)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$field = this.getField();
|
||||||
|
Object other$field = other.getField();
|
||||||
|
if (this$field == null) {
|
||||||
|
if (other$field != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$field.equals(other$field)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$items = this.getItems();
|
||||||
|
Object other$items = other.getItems();
|
||||||
|
if (this$items == null) {
|
||||||
|
if (other$items != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$items.equals(other$items)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Arrays.deepEquals(this.getSummary(), other.getSummary())) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$aggregates = this.getAggregates();
|
||||||
|
Object other$aggregates = other.getAggregates();
|
||||||
|
if (this$aggregates == null) {
|
||||||
|
if (other$aggregates != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$aggregates.equals(other$aggregates)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof Group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
result = result * 59 + this.getCount();
|
||||||
|
Object $key = this.getKey();
|
||||||
|
result = result * 59 + ($key == null ? 43 : $key.hashCode());
|
||||||
|
Object $keyName = this.getKeyName();
|
||||||
|
result = result * 59 + ($keyName == null ? 43 : $keyName.hashCode());
|
||||||
|
Object $keyExt = this.getKeyExt();
|
||||||
|
result = result * 59 + ($keyExt == null ? 43 : $keyExt.hashCode());
|
||||||
|
Object $field = this.getField();
|
||||||
|
result = result * 59 + ($field == null ? 43 : $field.hashCode());
|
||||||
|
Object $items = this.getItems();
|
||||||
|
result = result * 59 + ($items == null ? 43 : $items.hashCode());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getSummary());
|
||||||
|
Object $aggregates = this.getAggregates();
|
||||||
|
result = result * 59 + ($aggregates == null ? 43 : $aggregates.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "Group(key=" + this.getKey() + ", keyName=" + this.getKeyName() + ", keyExt=" + this.getKeyExt() + ", field=" + this.getField() + ", items=" + this.getItems() + ", count=" + this.getCount() + ", summary=" + Arrays.deepToString(this.getSummary()) + ", aggregates=" + this.getAggregates() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
189
backend/src/main/java/com/yfd/platform/common/GroupHelper.java
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class GroupHelper {
|
||||||
|
public GroupHelper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Group> group(List<Map<String, Object>> data, List<GroupingInfo> groupInfo) {
|
||||||
|
List<Group> groups = this.group(data, (GroupingInfo)groupInfo.get(0));
|
||||||
|
if (groupInfo.size() > 1 && CollectionUtil.isNotEmpty(groups)) {
|
||||||
|
for(Group group : groups) {
|
||||||
|
group.setItems(this.group(group.getItems(), groupInfo.subList(1, groupInfo.size())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Map> faltGroup(List<Map<String, Object>> data, List<GroupingInfo> groupInfo) {
|
||||||
|
List<Map> result = new ArrayList();
|
||||||
|
|
||||||
|
for(Map<String, Object> item : data) {
|
||||||
|
result.add(this.flatGroupResult(item, groupInfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map flatGroupResult(Map<String, Object> item, List<GroupingInfo> groupInfos) {
|
||||||
|
Map<String, Object> group = new HashMap();
|
||||||
|
|
||||||
|
for(GroupingInfo groupInfo : groupInfos) {
|
||||||
|
Object groupKey = this.getKey(item, groupInfo);
|
||||||
|
if (CollectionUtil.isNotEmpty(groupInfo.getSummaryInfos())) {
|
||||||
|
for(SummaryInfo summaryInfo : groupInfo.getSummaryInfos()) {
|
||||||
|
String summaryType = summaryInfo.getSummaryType();
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(summaryType).append("_").append(summaryInfo.getSelector());
|
||||||
|
String key = stringBuilder.toString();
|
||||||
|
Object tempCount = item.get(key);
|
||||||
|
if (tempCount == null) {
|
||||||
|
tempCount = item.get(key.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tempCount != null) {
|
||||||
|
if (tempCount instanceof Number) {
|
||||||
|
group.put(key, tempCount);
|
||||||
|
} else {
|
||||||
|
Integer count = NumberUtil.parseInt(tempCount.toString());
|
||||||
|
group.put(key, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Object tempCount = item.get("count_" + groupInfo.getSelector());
|
||||||
|
if (tempCount == null) {
|
||||||
|
tempCount = item.get("COUNT_" + groupInfo.getSelector().toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tempCount != null) {
|
||||||
|
Integer count = NumberUtil.parseInt(tempCount.toString());
|
||||||
|
group.put("count_" + groupInfo.getSelector(), count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
group.put(groupInfo.getSelector(), groupKey);
|
||||||
|
group.put(groupInfo.getSelector() + "_value", groupKey);
|
||||||
|
group.put(groupInfo.getSelector() + "_ext", (Object)null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Group> group(List<Map<String, Object>> data, GroupingInfo groupInfo) {
|
||||||
|
Map<Object, Group> groupsIndex = new HashMap();
|
||||||
|
List<Group> groups = new ArrayList();
|
||||||
|
|
||||||
|
for(Map<String, Object> item : data) {
|
||||||
|
Object groupKey = this.getKey(item, groupInfo);
|
||||||
|
Object groupIndexKey = groupKey != null ? groupKey : null;
|
||||||
|
Object tempCount = item.get("count_" + groupInfo.getSelector());
|
||||||
|
if (tempCount == null) {
|
||||||
|
tempCount = item.get("COUNT_" + groupInfo.getSelector().toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!groupsIndex.containsKey(groupIndexKey)) {
|
||||||
|
Group newGroup = new Group();
|
||||||
|
newGroup.setKey(groupKey);
|
||||||
|
newGroup.setField(groupInfo.getSelector());
|
||||||
|
if (tempCount != null) {
|
||||||
|
newGroup.setCount(NumberUtil.parseInt(tempCount.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(groupInfo.getSummaryInfos())) {
|
||||||
|
Map<String, Object> groupSummarys = new HashMap();
|
||||||
|
|
||||||
|
for(SummaryInfo summaryInfo : groupInfo.getSummaryInfos()) {
|
||||||
|
String summaryType = summaryInfo.getSummaryType();
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(summaryType).append("_").append(summaryInfo.getSelector());
|
||||||
|
String key = stringBuilder.toString();
|
||||||
|
Object summaryValue = item.get(key);
|
||||||
|
if (summaryValue == null) {
|
||||||
|
summaryValue = item.get(key.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
groupSummarys.put(key, summaryValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
newGroup.setAggregates(groupSummarys);
|
||||||
|
}
|
||||||
|
|
||||||
|
groupsIndex.put(groupIndexKey, newGroup);
|
||||||
|
groups.add(newGroup);
|
||||||
|
} else {
|
||||||
|
Group newGroup = (Group)groupsIndex.get(groupIndexKey);
|
||||||
|
if (tempCount != null) {
|
||||||
|
newGroup.setCount(newGroup.getCount() + NumberUtil.parseInt(tempCount.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Group group = (Group)groupsIndex.get(groupIndexKey);
|
||||||
|
if (group.getItems() == null) {
|
||||||
|
group.setItems(new ArrayList());
|
||||||
|
group.getItems().add(item);
|
||||||
|
} else {
|
||||||
|
group.getItems().add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object getKey(Map<String, Object> obj, GroupingInfo groupInfo) {
|
||||||
|
Object memberValue = obj.get(groupInfo.getSelector());
|
||||||
|
if (memberValue == null) {
|
||||||
|
memberValue = obj.get(groupInfo.getSelector().toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
String intervalString = groupInfo.getGroupInterval();
|
||||||
|
if (!StrUtil.isEmpty(intervalString) && memberValue != null) {
|
||||||
|
if (NumberUtil.isNumber(intervalString)) {
|
||||||
|
BigDecimal number = NumberUtil.toBigDecimal((Number)memberValue);
|
||||||
|
BigDecimal interval = NumberUtil.toBigDecimal(intervalString);
|
||||||
|
return number.subtract(number.divideAndRemainder(interval)[1]);
|
||||||
|
} else {
|
||||||
|
switch (intervalString) {
|
||||||
|
case "year":
|
||||||
|
return toDateTime(memberValue).getYear();
|
||||||
|
case "month":
|
||||||
|
return toDateTime(memberValue).getMonth();
|
||||||
|
case "day":
|
||||||
|
return toDateTime(memberValue).getDayOfYear();
|
||||||
|
case "dayOfWeek":
|
||||||
|
return toDateTime(memberValue).getDayOfWeek();
|
||||||
|
case "hour":
|
||||||
|
return toDateTime(memberValue).getHour();
|
||||||
|
case "minute":
|
||||||
|
return toDateTime(memberValue).getMinute();
|
||||||
|
case "second":
|
||||||
|
return toDateTime(memberValue).getSecond();
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("memberValue字段解析失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return memberValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static LocalDateTime toDateTime(Object value) {
|
||||||
|
return value instanceof LocalDateTime ? (LocalDateTime)value : LocalDateTime.parse(value.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class GroupResult {
|
||||||
|
private String selectSql;
|
||||||
|
private String groupSql;
|
||||||
|
private String summaryInfoSql;
|
||||||
|
private String groupBySql;
|
||||||
|
private String orderBySql;
|
||||||
|
private Map<String, Object> paramMap = new HashMap();
|
||||||
|
|
||||||
|
public GroupResult(String groupSql, String orderBySql, Map<String, Object> paramMap) {
|
||||||
|
this.groupSql = groupSql;
|
||||||
|
this.orderBySql = orderBySql;
|
||||||
|
this.paramMap = paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroupSql() {
|
||||||
|
return this.groupSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupSql(String groupSql) {
|
||||||
|
this.groupSql = groupSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getParamMap() {
|
||||||
|
return this.paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParamMap(Map<String, Object> paramMap) {
|
||||||
|
this.paramMap = paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrderBySql() {
|
||||||
|
return this.orderBySql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderBySql(String orderBySql) {
|
||||||
|
this.orderBySql = orderBySql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSelectSql() {
|
||||||
|
return this.selectSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectSql(String selectSql) {
|
||||||
|
this.selectSql = selectSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroupBySql() {
|
||||||
|
return this.groupBySql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupBySql(String groupBySql) {
|
||||||
|
this.groupBySql = groupBySql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSummaryInfoSql() {
|
||||||
|
return this.summaryInfoSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSummaryInfoSql(String summaryInfoSql) {
|
||||||
|
this.summaryInfoSql = summaryInfoSql;
|
||||||
|
}
|
||||||
|
}
|
||||||
118
backend/src/main/java/com/yfd/platform/common/GroupingInfo.java
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
//@Data
|
||||||
|
//@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class GroupingInfo extends SortingInfo {
|
||||||
|
|
||||||
|
private List<SummaryInfo> summaryInfos = new ArrayList();
|
||||||
|
|
||||||
|
@Schema(description = "分组时间间隔")
|
||||||
|
private String groupInterval;
|
||||||
|
|
||||||
|
@Schema(description = "分组数据是否应该返回")
|
||||||
|
private Boolean isExpanded = false;
|
||||||
|
|
||||||
|
public GroupingInfo() {
|
||||||
|
this.summaryInfos = new ArrayList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SummaryInfo> getSummaryInfos() {
|
||||||
|
return this.summaryInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroupInterval() {
|
||||||
|
return this.groupInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getIsExpanded() {
|
||||||
|
return this.isExpanded;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSummaryInfos(final List<SummaryInfo> summaryInfos) {
|
||||||
|
this.summaryInfos = summaryInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupInterval(final String groupInterval) {
|
||||||
|
this.groupInterval = groupInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsExpanded(final Boolean isExpanded) {
|
||||||
|
this.isExpanded = isExpanded;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof GroupingInfo)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
GroupingInfo other = (GroupingInfo)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$isExpanded = this.getIsExpanded();
|
||||||
|
Object other$isExpanded = other.getIsExpanded();
|
||||||
|
if (this$isExpanded == null) {
|
||||||
|
if (other$isExpanded != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$isExpanded.equals(other$isExpanded)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$summaryInfos = this.getSummaryInfos();
|
||||||
|
Object other$summaryInfos = other.getSummaryInfos();
|
||||||
|
if (this$summaryInfos == null) {
|
||||||
|
if (other$summaryInfos != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$summaryInfos.equals(other$summaryInfos)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$groupInterval = this.getGroupInterval();
|
||||||
|
Object other$groupInterval = other.getGroupInterval();
|
||||||
|
if (this$groupInterval == null) {
|
||||||
|
if (other$groupInterval != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$groupInterval.equals(other$groupInterval)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof GroupingInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
Object $isExpanded = this.getIsExpanded();
|
||||||
|
result = result * 59 + ($isExpanded == null ? 43 : $isExpanded.hashCode());
|
||||||
|
Object $summaryInfos = this.getSummaryInfos();
|
||||||
|
result = result * 59 + ($summaryInfos == null ? 43 : $summaryInfos.hashCode());
|
||||||
|
Object $groupInterval = this.getGroupInterval();
|
||||||
|
result = result * 59 + ($groupInterval == null ? 43 : $groupInterval.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "GroupingInfo(summaryInfos=" + this.getSummaryInfos() + ", groupInterval=" + this.getGroupInterval() + ", isExpanded=" + this.getIsExpanded() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class GuidStringSerialize extends JsonSerializer<String> {
|
||||||
|
private final String GUID_EMPTY = "00000000-0000-0000-0000-000000000000";
|
||||||
|
|
||||||
|
public GuidStringSerialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serialize(String value, JsonGenerator jGen, SerializerProvider sProvider) throws IOException {
|
||||||
|
if ("00000000-0000-0000-0000-000000000000".equals(value) || StrUtil.isBlank(value)) {
|
||||||
|
value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
jGen.writeString(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
|
public class ItemEntity {
|
||||||
|
private String filterItem;
|
||||||
|
private String itemMap;
|
||||||
|
private String alias;
|
||||||
|
private String fieldSql;
|
||||||
|
|
||||||
|
public ItemEntity(String filterItem, String itemMap, String alias) {
|
||||||
|
this.filterItem = filterItem;
|
||||||
|
this.itemMap = itemMap;
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFieldSql() {
|
||||||
|
if (StrUtil.isNotBlank(this.fieldSql)) {
|
||||||
|
return this.fieldSql;
|
||||||
|
} else {
|
||||||
|
if (StrUtil.isNotBlank(this.alias)) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(this.alias);
|
||||||
|
stringBuilder.append(".");
|
||||||
|
stringBuilder.append(this.itemMap);
|
||||||
|
this.fieldSql = stringBuilder.toString();
|
||||||
|
} else {
|
||||||
|
this.fieldSql = this.itemMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.fieldSql;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFilterItem() {
|
||||||
|
return this.filterItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFilterItem(String filterItem) {
|
||||||
|
this.filterItem = filterItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getItemMap() {
|
||||||
|
return this.itemMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItemMap(String itemMap) {
|
||||||
|
this.itemMap = itemMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlias() {
|
||||||
|
return this.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
}
|
||||||
150
backend/src/main/java/com/yfd/platform/common/LoadResult.java
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class LoadResult<T> {
|
||||||
|
private T data;
|
||||||
|
private Integer totalCount;
|
||||||
|
private Integer groupCount;
|
||||||
|
@Schema(
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
private Object[] summary;
|
||||||
|
@JsonIgnore
|
||||||
|
private Map<String, Object> aggregates;
|
||||||
|
|
||||||
|
public LoadResult() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getData() {
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTotalCount() {
|
||||||
|
return this.totalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getGroupCount() {
|
||||||
|
return this.groupCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object[] getSummary() {
|
||||||
|
return this.summary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getAggregates() {
|
||||||
|
return this.aggregates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(final T data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalCount(final Integer totalCount) {
|
||||||
|
this.totalCount = totalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupCount(final Integer groupCount) {
|
||||||
|
this.groupCount = groupCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSummary(final Object[] summary) {
|
||||||
|
this.summary = summary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
public void setAggregates(final Map<String, Object> aggregates) {
|
||||||
|
this.aggregates = aggregates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof LoadResult)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
LoadResult<?> other = (LoadResult)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$totalCount = this.getTotalCount();
|
||||||
|
Object other$totalCount = other.getTotalCount();
|
||||||
|
if (this$totalCount == null) {
|
||||||
|
if (other$totalCount != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$totalCount.equals(other$totalCount)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$groupCount = this.getGroupCount();
|
||||||
|
Object other$groupCount = other.getGroupCount();
|
||||||
|
if (this$groupCount == null) {
|
||||||
|
if (other$groupCount != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$groupCount.equals(other$groupCount)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$data = this.getData();
|
||||||
|
Object other$data = other.getData();
|
||||||
|
if (this$data == null) {
|
||||||
|
if (other$data != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$data.equals(other$data)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Arrays.deepEquals(this.getSummary(), other.getSummary())) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$aggregates = this.getAggregates();
|
||||||
|
Object other$aggregates = other.getAggregates();
|
||||||
|
if (this$aggregates == null) {
|
||||||
|
if (other$aggregates != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$aggregates.equals(other$aggregates)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof LoadResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
Object $totalCount = this.getTotalCount();
|
||||||
|
result = result * 59 + ($totalCount == null ? 43 : $totalCount.hashCode());
|
||||||
|
Object $groupCount = this.getGroupCount();
|
||||||
|
result = result * 59 + ($groupCount == null ? 43 : $groupCount.hashCode());
|
||||||
|
Object $data = this.getData();
|
||||||
|
result = result * 59 + ($data == null ? 43 : $data.hashCode());
|
||||||
|
result = result * 59 + Arrays.deepHashCode(this.getSummary());
|
||||||
|
Object $aggregates = this.getAggregates();
|
||||||
|
result = result * 59 + ($aggregates == null ? 43 : $aggregates.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "LoadResult(data=" + this.getData() + ", totalCount=" + this.getTotalCount() + ", groupCount=" + this.getGroupCount() + ", summary=" + Arrays.deepToString(this.getSummary()) + ", aggregates=" + this.getAggregates() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,80 @@
|
|||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface MicroservicDynamicSQLMapper<T> {
|
||||||
|
|
||||||
|
@Select({"${sql}"})
|
||||||
|
List<Map<String, Object>> pageAllList(Page page, String sql, @Param("map") Map<String, Object> map);
|
||||||
|
|
||||||
|
@Select({"${sql}"})
|
||||||
|
<resultType> List<resultType> pageAllListWithResultType(Page page, @Param("sql") String sql, @Param("map") Map<String, Object> map, @Param("resultType") Class<resultType> resultType);
|
||||||
|
|
||||||
|
@Select({"${sql}"})
|
||||||
|
List<Map> getAllList(String sql, @Param("map") Map<String, Object> map);
|
||||||
|
|
||||||
|
@Select({"${sql}"})
|
||||||
|
<resultType> List<resultType> getAllListWithResultType(@Param("sql") String sql, @Param("map") Map<String, Object> map, @Param("resultType") Class<resultType> resultType);
|
||||||
|
|
||||||
|
@Select({"select count(1) count from ${sql} and ${ew.sqlSegment}"})
|
||||||
|
Integer count(@Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select count(1) count from ${sql}"})
|
||||||
|
Integer countNoWrapper(@Param("select") String select, @Param("sql") String sql);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} and ${ew.sqlSegment}"})
|
||||||
|
List<Map> pageList(Page page, @Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} and ${ew.sqlSegment}"})
|
||||||
|
<resultType> List<resultType> pageListWithResultType(Page page, @Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper, @Param("resultType") Class<resultType> resultType);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} ${ew.sqlSegment}"})
|
||||||
|
List<Map> pageNoFilterList(Page page, @Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql}"})
|
||||||
|
List<Map> pageListNoWrapper(Page page, @Param("select") String select, @Param("sql") String sql);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} and ${ew.sqlSegment}"})
|
||||||
|
List<Map> getList(@Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} and ${ew.sqlSegment}"})
|
||||||
|
List<Map> getListWithResultType(@Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${table} where ${condition}"})
|
||||||
|
List<Map> getSingleTableList(@Param("select") String select, @Param("table") String table, @Param("condition") String condition);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} ${ew.sqlSegment}"})
|
||||||
|
List<Map> getNoFilterList(@Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql}"})
|
||||||
|
List<Map> getListNoWrapper(@Param("select") String select, @Param("sql") String sql);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql} and ${ew.sqlSegment}"})
|
||||||
|
Map totalSummary(@Param("select") String select, @Param("sql") String sql, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${sql}"})
|
||||||
|
Map totalSummaryNoWrapper(@Param("select") String select, @Param("sql") String sql);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${tableName} where ${ew.sqlSegment}"})
|
||||||
|
Map totalSummarySingleTable(@Param("select") String select, @Param("tableName") String tableName, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${select} from ${tableName}"})
|
||||||
|
Map totalSummaryNoWrapperSingleTable(@Param("select") String select, @Param("tableName") String tableName);
|
||||||
|
|
||||||
|
@Select({"select max(order_index) from ${tableName}"})
|
||||||
|
Integer getOrderIndexMax(@Param("tableName") String tableName);
|
||||||
|
|
||||||
|
@Select({"select max(order_index) from ${tableName} where ${ew.sqlSegment}"})
|
||||||
|
Integer getOrderIndexMaxByParentId(@Param("tableName") String tableName, @Param("ew") QueryWrapper queryWrapper);
|
||||||
|
|
||||||
|
@Select({"select ${info} from ${joinsql} group by ${info}"})
|
||||||
|
List<Object> getGroup(@Param("info") String info, @Param("joinsql") String joinsql);
|
||||||
|
}
|
||||||
33
backend/src/main/java/com/yfd/platform/common/OrderBy.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
public class OrderBy {
|
||||||
|
public static final String ORDER_ASC = "asc";
|
||||||
|
public static final String ORDER_DESC = "desc";
|
||||||
|
private final String sort;
|
||||||
|
private final String order;
|
||||||
|
|
||||||
|
public OrderBy(String sort, String order) {
|
||||||
|
this.sort = sort;
|
||||||
|
this.order = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSort() {
|
||||||
|
return this.sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrder() {
|
||||||
|
return this.order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid(Set<String> fieldSet) {
|
||||||
|
return fieldSet.contains(this.sort) && (StringUtils.isBlank(this.order) || "asc".equalsIgnoreCase(this.order) || "desc".equalsIgnoreCase(this.order));
|
||||||
|
}
|
||||||
|
}
|
||||||
85
backend/src/main/java/com/yfd/platform/common/PageInfo.java
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
|
||||||
|
public class PageInfo {
|
||||||
|
private Boolean hasPageInfo;
|
||||||
|
private Page page;
|
||||||
|
|
||||||
|
public PageInfo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getHasPageInfo() {
|
||||||
|
return this.hasPageInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Page getPage() {
|
||||||
|
return this.page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHasPageInfo(final Boolean hasPageInfo) {
|
||||||
|
this.hasPageInfo = hasPageInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPage(final Page page) {
|
||||||
|
this.page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof PageInfo)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
PageInfo other = (PageInfo)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$hasPageInfo = this.getHasPageInfo();
|
||||||
|
Object other$hasPageInfo = other.getHasPageInfo();
|
||||||
|
if (this$hasPageInfo == null) {
|
||||||
|
if (other$hasPageInfo != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$hasPageInfo.equals(other$hasPageInfo)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$page = this.getPage();
|
||||||
|
Object other$page = other.getPage();
|
||||||
|
if (this$page == null) {
|
||||||
|
if (other$page != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$page.equals(other$page)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof PageInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
Object $hasPageInfo = this.getHasPageInfo();
|
||||||
|
result = result * 59 + ($hasPageInfo == null ? 43 : $hasPageInfo.hashCode());
|
||||||
|
Object $page = this.getPage();
|
||||||
|
result = result * 59 + ($page == null ? 43 : $page.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "PageInfo(hasPageInfo=" + this.getHasPageInfo() + ", page=" + this.getPage() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
111
backend/src/main/java/com/yfd/platform/common/SortingInfo.java
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
public class SortingInfo {
|
||||||
|
@Schema(description = "排序字段")
|
||||||
|
public String selector;
|
||||||
|
|
||||||
|
@Schema(description = "是否是降序")
|
||||||
|
public Boolean desc = true;
|
||||||
|
|
||||||
|
@Schema(description = "是否需要排序标记")
|
||||||
|
public Boolean needSortFlag = true;
|
||||||
|
|
||||||
|
public SortingInfo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSelector() {
|
||||||
|
return this.selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getDesc() {
|
||||||
|
return this.desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getNeedSortFlag() {
|
||||||
|
return this.needSortFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelector(final String selector) {
|
||||||
|
this.selector = selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDesc(final Boolean desc) {
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNeedSortFlag(final Boolean needSortFlag) {
|
||||||
|
this.needSortFlag = needSortFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof SortingInfo)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
SortingInfo other = (SortingInfo)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$desc = this.getDesc();
|
||||||
|
Object other$desc = other.getDesc();
|
||||||
|
if (this$desc == null) {
|
||||||
|
if (other$desc != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$desc.equals(other$desc)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$needSortFlag = this.getNeedSortFlag();
|
||||||
|
Object other$needSortFlag = other.getNeedSortFlag();
|
||||||
|
if (this$needSortFlag == null) {
|
||||||
|
if (other$needSortFlag != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$needSortFlag.equals(other$needSortFlag)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$selector = this.getSelector();
|
||||||
|
Object other$selector = other.getSelector();
|
||||||
|
if (this$selector == null) {
|
||||||
|
if (other$selector != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$selector.equals(other$selector)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof SortingInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
Object $desc = this.getDesc();
|
||||||
|
result = result * 59 + ($desc == null ? 43 : $desc.hashCode());
|
||||||
|
Object $needSortFlag = this.getNeedSortFlag();
|
||||||
|
result = result * 59 + ($needSortFlag == null ? 43 : $needSortFlag.hashCode());
|
||||||
|
Object $selector = this.getSelector();
|
||||||
|
result = result * 59 + ($selector == null ? 43 : $selector.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "SortingInfo(selector=" + this.getSelector() + ", desc=" + this.getDesc() + ", needSortFlag=" + this.getNeedSortFlag() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,93 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.common;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
public class SummaryInfo {
|
||||||
|
@Schema(description = "计算总数的字段")
|
||||||
|
public String selector;
|
||||||
|
|
||||||
|
@Schema(description = "计算总数的类型")
|
||||||
|
public String summaryType;
|
||||||
|
|
||||||
|
public SummaryInfo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public SummaryInfo(String selector, String summaryType) {
|
||||||
|
this.selector = selector;
|
||||||
|
this.summaryType = summaryType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSelector() {
|
||||||
|
return this.selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSummaryType() {
|
||||||
|
return this.summaryType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelector(final String selector) {
|
||||||
|
this.selector = selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSummaryType(final String summaryType) {
|
||||||
|
this.summaryType = summaryType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(final Object o) {
|
||||||
|
if (o == this) {
|
||||||
|
return true;
|
||||||
|
} else if (!(o instanceof SummaryInfo)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
SummaryInfo other = (SummaryInfo)o;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Object this$selector = this.getSelector();
|
||||||
|
Object other$selector = other.getSelector();
|
||||||
|
if (this$selector == null) {
|
||||||
|
if (other$selector != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$selector.equals(other$selector)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object this$summaryType = this.getSummaryType();
|
||||||
|
Object other$summaryType = other.getSummaryType();
|
||||||
|
if (this$summaryType == null) {
|
||||||
|
if (other$summaryType != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!this$summaryType.equals(other$summaryType)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof SummaryInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int PRIME = 59;
|
||||||
|
int result = 1;
|
||||||
|
Object $selector = this.getSelector();
|
||||||
|
result = result * 59 + ($selector == null ? 43 : $selector.hashCode());
|
||||||
|
Object $summaryType = this.getSummaryType();
|
||||||
|
result = result * 59 + ($summaryType == null ? 43 : $summaryType.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "SummaryInfo(selector=" + this.getSelector() + ", summaryType=" + this.getSummaryType() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package com.yfd.platform.common.enums;
|
||||||
|
|
||||||
|
public enum QecIntervalEnum {
|
||||||
|
QEC_STLL_1_DY95("QEC_STLL_1_DY95","生态流量达标率所在统计区间:>=95%"),
|
||||||
|
QEC_STLL_2_90AND95("QEC_STLL_2_90AND95","生态流量达标率所在统计区间:90%~95%"),
|
||||||
|
QEC_STLL_3_80AND90("QEC_STLL_3_80AND90","生态流量达标率所在统计区间:80%~90%"),
|
||||||
|
QEC_STLL_4_XY80("QEC_STLL_4_XY80","生态流量达标率所在统计区间:<80%"),
|
||||||
|
QEC_STLL_5_EMPTY("QEC_STLL_5_EMPTY","无生态流量数据"),
|
||||||
|
QEC_STLL_6_NOEQMN("QEC_STLL_6_NOEQMN","无生态流量要求");
|
||||||
|
/** 变量类型 code */
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
|
||||||
|
/** 描述. */
|
||||||
|
private String desc;
|
||||||
|
|
||||||
|
|
||||||
|
QecIntervalEnum(String code, String desc) {
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the code - {返回值描述信息}.
|
||||||
|
*/
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the desc - {返回值描述信息}.
|
||||||
|
*/
|
||||||
|
public String getDesc() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
package com.yfd.platform.common.enums;
|
||||||
|
|
||||||
|
public enum ShowEnum {
|
||||||
|
Q(1,"环评要求"),
|
||||||
|
M(2,"水利部要求"),
|
||||||
|
A(3,"多年平均流量10%"),
|
||||||
|
N(4,"无生态流量要求");
|
||||||
|
private Integer code;
|
||||||
|
private String desc;
|
||||||
|
|
||||||
|
ShowEnum(Integer code,String desc){
|
||||||
|
this.code=code;
|
||||||
|
this.desc=desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode(){
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
public String getDesc(){
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -53,6 +53,7 @@ public class SecurityConfig {
|
|||||||
.authorizeHttpRequests(auth -> auth
|
.authorizeHttpRequests(auth -> auth
|
||||||
.requestMatchers("/user/login").anonymous()
|
.requestMatchers("/user/login").anonymous()
|
||||||
.requestMatchers("/user/code").permitAll()
|
.requestMatchers("/user/code").permitAll()
|
||||||
|
.requestMatchers("/eng/**").permitAll()
|
||||||
.requestMatchers(HttpMethod.GET, "/").permitAll()
|
.requestMatchers(HttpMethod.GET, "/").permitAll()
|
||||||
.requestMatchers(HttpMethod.GET,
|
.requestMatchers(HttpMethod.GET,
|
||||||
"/*.html",
|
"/*.html",
|
||||||
|
|||||||
@ -0,0 +1,54 @@
|
|||||||
|
package com.yfd.platform.eng.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.config.ResponseResult;
|
||||||
|
import com.yfd.platform.eng.entity.vo.AlarmStcdCountVo;
|
||||||
|
import com.yfd.platform.eng.service.AlarmPointService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运行告警锚点控制器
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/eng/alarmPoint")
|
||||||
|
@Tag(name = "运行告警锚点控制器")
|
||||||
|
public class AlarmPointController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务对象
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private AlarmPointService alarmPointService;
|
||||||
|
|
||||||
|
@PostMapping({"/GetKendoListCust"})
|
||||||
|
@Operation(summary = "条件过滤数据列表定制")
|
||||||
|
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult<AlarmStcdCountVo> dataSourceResult = alarmPointService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
alarmPointService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取警报统计数据
|
||||||
|
* @param stcd 电站ID
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/getAlarmCount"})
|
||||||
|
@Operation(summary = "获取警报统计数据")
|
||||||
|
public ResponseResult getAlarmCount(String stcd) {
|
||||||
|
AlarmStcdCountVo vo = alarmPointService.getAlarmCount(stcd);
|
||||||
|
return ResponseResult.successData(vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
package com.yfd.platform.eng.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.common.GroupResult;
|
||||||
|
import com.yfd.platform.config.ResponseResult;
|
||||||
|
import com.yfd.platform.eng.service.EngEqService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站生态流量统计查询
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/eng/eq/")
|
||||||
|
@Tag(name = "电站生态流量统计查询")
|
||||||
|
public class EngEqController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务对象
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private EngEqService msEngEqService;
|
||||||
|
|
||||||
|
@PostMapping({"/GetKendoListCust"})
|
||||||
|
@Operation(summary = "条件过滤数据列表定制")
|
||||||
|
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, GroupResult> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult dataSourceResult = msEngEqService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
msEngEqService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param response 响应
|
||||||
|
*/
|
||||||
|
@PostMapping({"/export"})
|
||||||
|
@Operation(summary = "导出")
|
||||||
|
public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) {
|
||||||
|
// 实际应该实现导出逻辑
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 月统计数据有数据的电站
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping("/lastEngDataSite")
|
||||||
|
@Operation(summary = "查询指定时间有数据的站点")
|
||||||
|
public ResponseResult lastEngDataSite(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult result = msEngEqService.lastEngDataSite(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/default/stcd")
|
||||||
|
@Operation(summary = "获取生态流量默认有数据的电站")
|
||||||
|
public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult result = msEngEqService.getDefaultStcd(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/getSfdbInfo")
|
||||||
|
@Operation(summary = "获取不达标详情数据")
|
||||||
|
public ResponseResult getSfdbInfo(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult result = msEngEqService.getSfdbInfo(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping({"/qecSfdbCountByStcd"})
|
||||||
|
@Operation(summary = "生态流量不达标测站数")
|
||||||
|
public ResponseResult qecSfdbCountByStcd(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult result = msEngEqService.qecSfdbCountByStcd(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率计算(基地维度、不达标原因维度)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/qecRateCount"})
|
||||||
|
@Operation(summary = "生态流量达标率计算(基地维度、不达标原因维度)")
|
||||||
|
public ResponseResult qecRateCount(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult result = msEngEqService.qecRateCount(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量不达标数量计算(电站维度、不达标原因维度)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/qecSfdbCount"})
|
||||||
|
@Operation(summary = "生态流量不达标数量计算(电站维度、不达标原因维度)")
|
||||||
|
public ResponseResult qecSfdbCount(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult result = msEngEqService.qecSfdbCount(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping({"/group/GetKendoListCust"})
|
||||||
|
public ResponseResult getGroupKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, GroupResult> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult dataSourceResult = msEngEqService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
msEngEqService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,108 @@
|
|||||||
|
package com.yfd.platform.eng.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.config.ResponseResult;
|
||||||
|
import com.yfd.platform.eng.service.EngEqDataService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站实时数据查询
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/eng/eq/data")
|
||||||
|
@Tag(name = "电站实时数据查询")
|
||||||
|
public class EngEqDataController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务对象
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private EngEqDataService engEqDataService;
|
||||||
|
|
||||||
|
@PostMapping({"/GetKendoListCust"})
|
||||||
|
@Operation(summary = "生态流量沿程变化-小时")
|
||||||
|
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult dataSourceResult = engEqDataService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param response 响应
|
||||||
|
*/
|
||||||
|
@PostMapping({"/export"})
|
||||||
|
@Operation(summary = "导出")
|
||||||
|
public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) {
|
||||||
|
// 实际应该实现导出逻辑
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping({"/day/GetKendoListCust"})
|
||||||
|
@Operation(summary = "查询生态流量 日 数据")
|
||||||
|
public ResponseResult getKendoDayListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
String groupBy = ""; // 实际应该根据业务需求处理分组
|
||||||
|
DataSourceResult dataSourceResult = engEqDataService.processDayKendoList(dataSourceRequest, filterResult, page, groupBy);
|
||||||
|
engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping({"/drtp/GetKendoListCust"})
|
||||||
|
@Operation(summary = "查询生态流量 周旬月季年 数据")
|
||||||
|
public ResponseResult getKendoDrtpListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
String groupBy = ""; // 实际应该根据业务需求处理分组
|
||||||
|
DataSourceResult dataSourceResult = engEqDataService.processKendoDrtpList(dataSourceRequest, filterResult, page, groupBy);
|
||||||
|
engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping({"/fastSiteLastData/GetKendoListCust"})
|
||||||
|
@Operation(summary = "查询沿程第一个电站的生态流量数据时间")
|
||||||
|
public ResponseResult getFastSiteLastData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
String groupBy = ""; // 实际应该根据业务需求处理分组
|
||||||
|
DataSourceResult dataSourceResult = engEqDataService.getFastSiteLastData(dataSourceRequest, filterResult, page, groupBy);
|
||||||
|
engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量沿程变化(面板)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/along/GetKendoListCust"})
|
||||||
|
@Operation(summary = "查询生态流量(沿程数据)")
|
||||||
|
public ResponseResult getKendoAlongListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult dataSourceResult = engEqDataService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping({"/getEngLimit"})
|
||||||
|
@Operation(summary = "根据时间范围查询电站生态流量限值及来源")
|
||||||
|
public ResponseResult getEngLimit(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Object result = engEqDataService.getEngLimit(dataSourceRequest);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,131 @@
|
|||||||
|
package com.yfd.platform.eng.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.annotation.Log;
|
||||||
|
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.config.ResponseResult;
|
||||||
|
import com.yfd.platform.eng.domain.MsEngEq;
|
||||||
|
import com.yfd.platform.eng.service.EngEqIntervalService;
|
||||||
|
import com.yfd.platform.eng.service.EngEqService;
|
||||||
|
import com.yfd.platform.utils.KendoUtil;
|
||||||
|
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||||
|
import com.yfd.platform.utils.QueryWrapperUtil;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量区间统计控制器
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/eng/eq/interval")
|
||||||
|
@Tag(name = "电站生态流量区间统计查询")
|
||||||
|
public class EngEqIntervalController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务对象
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private EngEqIntervalService eqIntervalService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private EngEqService engEqService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标情况
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/GetKendoListCust"})
|
||||||
|
@Operation(summary = "生态流量达标情况")
|
||||||
|
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page<MsEngEq> page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult result = eqIntervalService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
eqIntervalService.processKendoGetListLoadResult(dataSourceRequest, result);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param response 响应
|
||||||
|
*/
|
||||||
|
@PostMapping({"/export"})
|
||||||
|
@Operation(summary = "导出")
|
||||||
|
@Log(module = "生态流量", value = "导出生态流量数据")
|
||||||
|
public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) {
|
||||||
|
// 实际应该实现导出逻辑
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率 小时统计(二级页面)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/qgc/hour/GetKendoListCust"})
|
||||||
|
@Operation(summary = "生态流量达标率 小时统计(二级页面)")
|
||||||
|
public ResponseResult getQgcHourKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
String kendoGroupCode = "EngEqHour";
|
||||||
|
// Map<String, GroupResult> filterResult = KendoUtil.getGroupResultMap(dataSourceRequest, null, EngEqIntervalController.class);
|
||||||
|
// String groupBy = KendoUtil.getGroupBy(dataSourceRequest);
|
||||||
|
Page page = KendoUtil.getPage(dataSourceRequest);
|
||||||
|
DataSourceResult result = eqIntervalService.getQgcHourKendoListCust(dataSourceRequest, null, page, null);
|
||||||
|
// eqIntervalService.processKendoGetListLoadResult(dataSourceRequest, result);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率 日统计(二级页面)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/qgc/day/GetKendoListCust"})
|
||||||
|
@Operation(summary = "生态流量达标率 日统计(二级页面)")
|
||||||
|
public ResponseResult getQgcDayKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page<MsEngEq> page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
String groupBy = ""; // 实际应该根据业务需求处理分组
|
||||||
|
DataSourceResult result = eqIntervalService.getQgcDayKendoListCust(dataSourceRequest, filterResult, page, groupBy);
|
||||||
|
eqIntervalService.processKendoGetListLoadResult(dataSourceRequest, result);
|
||||||
|
return ResponseResult.successData(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率 区间范围统计(一级页面)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 响应结果
|
||||||
|
*/
|
||||||
|
@PostMapping({"/qgc/getQgcStaticData"})
|
||||||
|
@Operation(summary = "生态流量达标率 区间范围统计(一级页面)")
|
||||||
|
// @Log(module = "生态流量", value = "生态流量达标率统计")
|
||||||
|
public ResponseResult getQgcStaticData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptionsBase = dataSourceRequest.toDevRequest();
|
||||||
|
String type = QgcQueryWrapperUtil.getFilterFieldValue(loadOptionsBase, "type");
|
||||||
|
ResponseResult r;
|
||||||
|
if("hour".equals(type)){
|
||||||
|
r = this.getQgcHourKendoListCust(dataSourceRequest);
|
||||||
|
}else if("day".equals(type)){
|
||||||
|
r = this.getQgcDayKendoListCust(dataSourceRequest);
|
||||||
|
}else{
|
||||||
|
return ResponseResult.error("请选择生态流量达标率统计类型(小时还是天统计)");
|
||||||
|
}
|
||||||
|
if(r != null && r.get("code").equals("0") && r.get("data") != null){
|
||||||
|
DataSourceResult dataSourceResult = (DataSourceResult) r.get("data");
|
||||||
|
if(dataSourceResult != null && dataSourceResult.getData() != null){
|
||||||
|
Map<String, Object> staticData = eqIntervalService.getQgcQecStaticData(dataSourceResult.getData(), type);
|
||||||
|
return ResponseResult.successData(staticData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ResponseResult.success();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
package com.yfd.platform.eng.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.common.GroupResult;
|
||||||
|
import com.yfd.platform.config.ResponseResult;
|
||||||
|
import com.yfd.platform.eng.service.EngEqService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站生态流量统计结果查询
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/eng/eq/stat")
|
||||||
|
@Tag(name = "电站生态流量统计结果查询")
|
||||||
|
public class EngEqStatController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务对象
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private EngEqService msEngEqService;
|
||||||
|
|
||||||
|
@PostMapping({"/GetKendoListCust"})
|
||||||
|
@Operation(summary = "条件过滤数据列表定制")
|
||||||
|
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, GroupResult> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult dataSourceResult = msEngEqService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
msEngEqService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param response 响应
|
||||||
|
*/
|
||||||
|
@PostMapping({"/export"})
|
||||||
|
@Operation(summary = "导出")
|
||||||
|
public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) {
|
||||||
|
// 实际应该实现导出逻辑
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
package com.yfd.platform.eng.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.config.ResponseResult;
|
||||||
|
import com.yfd.platform.eng.entity.EqSpecial;
|
||||||
|
import com.yfd.platform.eng.service.EngSpecialService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站专题-环保设施运行情况
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/eng/special")
|
||||||
|
@Tag(name = "电站专题-环保设施运行情况")
|
||||||
|
public class EngSpecialController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务对象
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private EngSpecialService engSpecialService;
|
||||||
|
|
||||||
|
@PostMapping({"/GetKendoListCust"})
|
||||||
|
@Operation(summary = "条件过滤数据列表定制")
|
||||||
|
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize());
|
||||||
|
Map<String, Object> filterResult = null; // 实际应该根据业务需求处理筛选
|
||||||
|
DataSourceResult<EqSpecial> dataSourceResult = engSpecialService.processKendoList(dataSourceRequest, filterResult, page);
|
||||||
|
engSpecialService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult);
|
||||||
|
return ResponseResult.successData(dataSourceResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
package com.yfd.platform.eng.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量实体类
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("ms_eng_eq")
|
||||||
|
public class MsEngEq implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站ID
|
||||||
|
*/
|
||||||
|
private String stationId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站名称
|
||||||
|
*/
|
||||||
|
private String stationName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间
|
||||||
|
*/
|
||||||
|
private Date time;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量值
|
||||||
|
*/
|
||||||
|
private Double eqValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 达标状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计类型(hour/day)
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
package com.yfd.platform.eng.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站专题-环保设施运行情况
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class EqSpecial {
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站ID
|
||||||
|
*/
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站名称
|
||||||
|
*/
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 环保设施类型
|
||||||
|
*/
|
||||||
|
private String eqType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设施名称
|
||||||
|
*/
|
||||||
|
private String eqName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运行状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查时间
|
||||||
|
*/
|
||||||
|
private String checkTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查人
|
||||||
|
*/
|
||||||
|
private String checker;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
package com.yfd.platform.eng.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 警报锚点统计VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AlarmStcdCountVo {
|
||||||
|
/**
|
||||||
|
* 电站ID
|
||||||
|
*/
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站名称
|
||||||
|
*/
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 警报数量
|
||||||
|
*/
|
||||||
|
private Integer alarmCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 未处理数量
|
||||||
|
*/
|
||||||
|
private Integer unhandledCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理中数量
|
||||||
|
*/
|
||||||
|
private Integer handlingCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已处理数量
|
||||||
|
*/
|
||||||
|
private Integer handledCount;
|
||||||
|
}
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
package com.yfd.platform.eng.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量小时数据VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class EngEqDataVo {
|
||||||
|
/**
|
||||||
|
* 电站ID
|
||||||
|
*/
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站名称
|
||||||
|
*/
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间
|
||||||
|
*/
|
||||||
|
private String tm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量值
|
||||||
|
*/
|
||||||
|
private Double eqValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不达标原因
|
||||||
|
*/
|
||||||
|
private String reason;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 限值
|
||||||
|
*/
|
||||||
|
private Double limitValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 限值来源
|
||||||
|
*/
|
||||||
|
private String limitSource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否左边界
|
||||||
|
*/
|
||||||
|
private Integer isLeft;
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package com.yfd.platform.eng.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量日数据VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class EngEqDayDataVo {
|
||||||
|
/**
|
||||||
|
* 电站ID
|
||||||
|
*/
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站名称
|
||||||
|
*/
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期
|
||||||
|
*/
|
||||||
|
private String tm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日平均生态流量
|
||||||
|
*/
|
||||||
|
private Double avgValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日最小生态流量
|
||||||
|
*/
|
||||||
|
private Double minValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日最大生态流量
|
||||||
|
*/
|
||||||
|
private Double maxValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不达标原因
|
||||||
|
*/
|
||||||
|
private String reason;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 限值
|
||||||
|
*/
|
||||||
|
private Double limitValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 限值来源
|
||||||
|
*/
|
||||||
|
private String limitSource;
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package com.yfd.platform.eng.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量周旬月季年数据VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class EngEqDrtpDataVo {
|
||||||
|
/**
|
||||||
|
* 电站ID
|
||||||
|
*/
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站名称
|
||||||
|
*/
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间
|
||||||
|
*/
|
||||||
|
private String tm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 平均生态流量
|
||||||
|
*/
|
||||||
|
private Double avgValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最小生态流量
|
||||||
|
*/
|
||||||
|
private Double minValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最大生态流量
|
||||||
|
*/
|
||||||
|
private Double maxValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不达标原因
|
||||||
|
*/
|
||||||
|
private String reason;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 限值
|
||||||
|
*/
|
||||||
|
private Double limitValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 限值来源
|
||||||
|
*/
|
||||||
|
private String limitSource;
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package com.yfd.platform.eng.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.yfd.platform.eng.domain.MsEngEq;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量Mapper
|
||||||
|
*/
|
||||||
|
public interface EngEqMapper extends BaseMapper<MsEngEq> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据条件查询生态流量数据
|
||||||
|
* @param params 查询参数
|
||||||
|
* @return 生态流量列表
|
||||||
|
*/
|
||||||
|
@Select("select * from ms_eng_eq where 1=1")
|
||||||
|
Object queryList(Map<String, Object> params);
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package com.yfd.platform.eng.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.eng.entity.vo.AlarmStcdCountVo;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 警报锚点服务
|
||||||
|
*/
|
||||||
|
public interface AlarmPointService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult<AlarmStcdCountVo> processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo返回列表字典匹配
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param dataSourceResult 数据源结果
|
||||||
|
*/
|
||||||
|
void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult<AlarmStcdCountVo> dataSourceResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取警报统计数据
|
||||||
|
* @param stcd 电站ID
|
||||||
|
* @return 统计结果
|
||||||
|
*/
|
||||||
|
AlarmStcdCountVo getAlarmCount(String stcd);
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
package com.yfd.platform.eng.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量数据服务
|
||||||
|
*/
|
||||||
|
public interface EngEqDataService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo返回列表字典匹配
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param dataSourceResult 数据源结果
|
||||||
|
*/
|
||||||
|
void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理分组条件SQL
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @return SQL条件
|
||||||
|
*/
|
||||||
|
String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理日数据kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @param groupBy 分组
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult processDayKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page, String groupBy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理周旬月季年数据kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @param groupBy 分组
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult processKendoDrtpList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page, String groupBy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询沿程第一个电站的生态流量数据时间
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @param groupBy 分组
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult getFastSiteLastData(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page, String groupBy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据时间范围查询电站生态流量限值及来源
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 生态流量限值VO
|
||||||
|
*/
|
||||||
|
Object getEngLimit(DataSourceRequest dataSourceRequest);
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package com.yfd.platform.eng.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.common.GroupResult;
|
||||||
|
import com.yfd.platform.eng.domain.MsEngEq;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量区间统计服务
|
||||||
|
*/
|
||||||
|
public interface EngEqIntervalService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page<MsEngEq> page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo返回列表字典匹配
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param dataSourceResult 数据源结果
|
||||||
|
*/
|
||||||
|
void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率 小时统计
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @param groupBy 分组
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest, Map<String, GroupResult> filterResult, Page<MsEngEq> page, String groupBy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率 日统计
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @param groupBy 分组
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult getQgcDayKendoListCust(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page<MsEngEq> page, String groupBy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率 区间范围统计
|
||||||
|
* @param dataList 数据列表
|
||||||
|
* @param type 类型(hour/day)
|
||||||
|
* @return 统计结果
|
||||||
|
*/
|
||||||
|
Map<String, Object> getQgcQecStaticData(Object dataList, String type);
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
package com.yfd.platform.eng.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.common.GroupResult;
|
||||||
|
import com.yfd.platform.eng.domain.MsEngEq;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量服务
|
||||||
|
*/
|
||||||
|
public interface EngEqService extends IService<MsEngEq> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, GroupResult> filterResult, Page page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo返回列表字典匹配
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param dataSourceResult 数据源结果
|
||||||
|
*/
|
||||||
|
void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理分组条件SQL
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @return SQL条件
|
||||||
|
*/
|
||||||
|
String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 月统计数据有数据的电站
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult lastEngDataSite(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取生态流量默认有数据的电站
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取不达标详情数据
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult getSfdbInfo(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量不达标测站数
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult qecSfdbCountByStcd(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量达标率计算(基地维度、不达标原因维度)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult qecRateCount(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量不达标数量计算(电站维度、不达标原因维度)
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult qecSfdbCount(DataSourceRequest dataSourceRequest);
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package com.yfd.platform.eng.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.eng.entity.EqSpecial;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站专题-环保设施运行情况服务
|
||||||
|
*/
|
||||||
|
public interface EngSpecialService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo列表
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param filterResult 筛选结果
|
||||||
|
* @param page 分页
|
||||||
|
* @return 数据源结果
|
||||||
|
*/
|
||||||
|
DataSourceResult<EqSpecial> processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理kendo返回列表字典匹配
|
||||||
|
* @param dataSourceRequest 数据源请求
|
||||||
|
* @param dataSourceResult 数据源结果
|
||||||
|
*/
|
||||||
|
void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult<EqSpecial> dataSourceResult);
|
||||||
|
}
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
package com.yfd.platform.eng.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.eng.entity.vo.AlarmStcdCountVo;
|
||||||
|
import com.yfd.platform.eng.service.AlarmPointService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 警报锚点服务实现
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class AlarmPointServiceImpl implements AlarmPointService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult<AlarmStcdCountVo> processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
List<AlarmStcdCountVo> dataList = new ArrayList<>();
|
||||||
|
// 模拟添加一些数据
|
||||||
|
AlarmStcdCountVo vo1 = new AlarmStcdCountVo();
|
||||||
|
vo1.setStcd("ST001");
|
||||||
|
vo1.setStnm("电站1");
|
||||||
|
vo1.setAlarmCount(10);
|
||||||
|
vo1.setUnhandledCount(3);
|
||||||
|
vo1.setHandlingCount(2);
|
||||||
|
vo1.setHandledCount(5);
|
||||||
|
dataList.add(vo1);
|
||||||
|
|
||||||
|
AlarmStcdCountVo vo2 = new AlarmStcdCountVo();
|
||||||
|
vo2.setStcd("ST002");
|
||||||
|
vo2.setStnm("电站2");
|
||||||
|
vo2.setAlarmCount(8);
|
||||||
|
vo2.setUnhandledCount(2);
|
||||||
|
vo2.setHandlingCount(1);
|
||||||
|
vo2.setHandledCount(5);
|
||||||
|
dataList.add(vo2);
|
||||||
|
|
||||||
|
DataSourceResult<AlarmStcdCountVo> result = new DataSourceResult<>();
|
||||||
|
result.setData(dataList);
|
||||||
|
result.setTotal(dataList.size());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult<AlarmStcdCountVo> dataSourceResult) {
|
||||||
|
// 处理字典匹配,实际应该根据业务需求实现
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlarmStcdCountVo getAlarmCount(String stcd) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
AlarmStcdCountVo vo = new AlarmStcdCountVo();
|
||||||
|
vo.setStcd(stcd);
|
||||||
|
vo.setStnm("电站" + stcd);
|
||||||
|
vo.setAlarmCount(5);
|
||||||
|
vo.setUnhandledCount(1);
|
||||||
|
vo.setHandlingCount(1);
|
||||||
|
vo.setHandledCount(3);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
package com.yfd.platform.eng.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.eng.service.EngEqDataService;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量数据服务实现
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class EngEqDataServiceImpl implements EngEqDataService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) {
|
||||||
|
// 处理字典匹配,实际应该根据业务需求实现
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult) {
|
||||||
|
// 模拟SQL条件,实际应该根据业务需求实现
|
||||||
|
return "1=1";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult processDayKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page, String groupBy) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult processKendoDrtpList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page, String groupBy) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getFastSiteLastData(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page, String groupBy) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getEngLimit(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,158 @@
|
|||||||
|
package com.yfd.platform.eng.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.yfd.platform.common.*;
|
||||||
|
import com.yfd.platform.eng.domain.MsEngEq;
|
||||||
|
import com.yfd.platform.eng.mapper.EngEqMapper;
|
||||||
|
import com.yfd.platform.eng.service.EngEqService;
|
||||||
|
import com.yfd.platform.utils.KendoUtil;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生态流量服务实现
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class EngEqServiceImpl extends ServiceImpl<EngEqMapper, MsEngEq> implements EngEqService {
|
||||||
|
@Resource
|
||||||
|
MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||||
|
@Override
|
||||||
|
public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, GroupResult> filterResult, Page page) {
|
||||||
|
|
||||||
|
DataSourceResult dataSourceResult = new DataSourceResult<>();
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
String kendoGroupCode = "default";
|
||||||
|
String kendoGroupCode2 = "TM";
|
||||||
|
if (filterResult.get(kendoGroupCode) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode).getSelectSql())) {
|
||||||
|
sql.append(filterResult.get("default").getSelectSql());
|
||||||
|
if (filterResult.get(kendoGroupCode2) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode2).getSelectSql())) {
|
||||||
|
sql.append(StrUtil.replace(filterResult.get(kendoGroupCode2).getSelectSql(),"select",","));
|
||||||
|
}
|
||||||
|
sql.append(",MET1.QEC beforeQec FROM ");
|
||||||
|
sql.append(" MS_ENG_T MET left join MS_ENG_T MET1 on MET1.stcd=MET.stcd and MET1.TYPE=met.type and add_months(MET1.TM,12)=met.tm inner join V_MS_STBPRP_T MSB on MSB.STCD=MET.STCD where MSB.STTP_CODE = 'ENG' and MSB.BLDSTT_CCODE = 2 ");//去掉大中型电站过滤条件
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterResult.get(kendoGroupCode) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode).getGroupSql())) {
|
||||||
|
sql.append(" and ").append(filterResult.get(kendoGroupCode).getGroupSql());
|
||||||
|
}
|
||||||
|
if (filterResult.get(kendoGroupCode2) != null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode2).getGroupSql())) {
|
||||||
|
sql.append(" and ").append(filterResult.get(kendoGroupCode2).getGroupSql());
|
||||||
|
}
|
||||||
|
if (filterResult.get(kendoGroupCode2) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode2).getOrderBySql())) {
|
||||||
|
sql.append(" ").append(filterResult.get(kendoGroupCode2).getOrderBySql());
|
||||||
|
}
|
||||||
|
//组装分组条件
|
||||||
|
String groupBy = KendoUtil.getGroupBy(dataSourceRequest);
|
||||||
|
GroupingInfo[] group = dataSourceRequest.toDevRequest().getGroup();
|
||||||
|
if (StrUtil.isNotBlank(groupBy)) {
|
||||||
|
StringBuilder temp = new StringBuilder("select ");
|
||||||
|
List<String> groupFields = new ArrayList<>();
|
||||||
|
for (GroupingInfo item : group) {
|
||||||
|
groupFields.add(item.getSelector());
|
||||||
|
}
|
||||||
|
temp.append(StrUtil.join(",",groupFields));
|
||||||
|
for (GroupingInfo item : group) {
|
||||||
|
groupFields.add(item.getSelector());
|
||||||
|
temp.append(",").append("count(*) as count_").append(item.getSelector());
|
||||||
|
}
|
||||||
|
sql = temp.append(" from ( ").append(sql).append(" ) ").append(groupBy);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterResult.get(kendoGroupCode) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode).getOrderBySql())) {
|
||||||
|
sql.append(" ").append(filterResult.get(kendoGroupCode).getOrderBySql());
|
||||||
|
}
|
||||||
|
|
||||||
|
//组装map参数
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
for (String key : filterResult.keySet()) {
|
||||||
|
map.putAll(filterResult.get(key).getParamMap());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (StrUtil.isNotBlank(groupBy)) {
|
||||||
|
List<Map<String, Object>> list = microservicDynamicSQLMapper.pageAllList(page, sql.toString(), map);
|
||||||
|
//是否扁平化分组
|
||||||
|
if (null != dataSourceRequest.getGroupResultFlat() && dataSourceRequest.getGroupResultFlat()) {
|
||||||
|
dataSourceResult.setData((new GroupHelper()).faltGroup(list, Arrays.asList(group)));
|
||||||
|
} else {
|
||||||
|
dataSourceResult.setData((new GroupHelper()).group(list, Arrays.asList(group)));
|
||||||
|
}
|
||||||
|
dataSourceResult.setTotal(0);
|
||||||
|
return dataSourceResult;
|
||||||
|
}
|
||||||
|
List<MsEngEq> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), map,MsEngEq.class);
|
||||||
|
dataSourceResult.setData(list);
|
||||||
|
dataSourceResult.setTotal(ObjectUtil.isNotEmpty(page) ? page.getTotal() : (long) list.size());
|
||||||
|
return dataSourceResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) {
|
||||||
|
// 处理字典匹配,实际应该根据业务需求实现
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult) {
|
||||||
|
// 模拟SQL条件,实际应该根据业务需求实现
|
||||||
|
return "1=1";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult lastEngDataSite(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getSfdbInfo(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult qecSfdbCountByStcd(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult qecRateCount(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult qecSfdbCount(DataSourceRequest dataSourceRequest) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package com.yfd.platform.eng.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
|
import com.yfd.platform.eng.entity.EqSpecial;
|
||||||
|
import com.yfd.platform.eng.service.EngSpecialService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站专题-环保设施运行情况服务实现
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class EngSpecialServiceImpl implements EngSpecialService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult<EqSpecial> processKendoList(DataSourceRequest dataSourceRequest, Map<String, Object> filterResult, Page page) {
|
||||||
|
// 模拟数据,实际应该从数据库查询
|
||||||
|
List<EqSpecial> dataList = new ArrayList<>();
|
||||||
|
// 模拟添加一些数据
|
||||||
|
EqSpecial special1 = new EqSpecial();
|
||||||
|
special1.setId("1");
|
||||||
|
special1.setStcd("ST001");
|
||||||
|
special1.setStnm("电站1");
|
||||||
|
special1.setEqType("生态流量监测设施");
|
||||||
|
special1.setEqName("流量监测仪");
|
||||||
|
special1.setStatus("正常运行");
|
||||||
|
special1.setCheckTime("2023-04-14");
|
||||||
|
special1.setChecker("张三");
|
||||||
|
special1.setRemark("无");
|
||||||
|
dataList.add(special1);
|
||||||
|
|
||||||
|
EqSpecial special2 = new EqSpecial();
|
||||||
|
special2.setId("2");
|
||||||
|
special2.setStcd("ST002");
|
||||||
|
special2.setStnm("电站2");
|
||||||
|
special2.setEqType("水质监测设施");
|
||||||
|
special2.setEqName("水质分析仪");
|
||||||
|
special2.setStatus("正常运行");
|
||||||
|
special2.setCheckTime("2023-04-15");
|
||||||
|
special2.setChecker("李四");
|
||||||
|
special2.setRemark("无");
|
||||||
|
dataList.add(special2);
|
||||||
|
|
||||||
|
DataSourceResult<EqSpecial> result = new DataSourceResult<>();
|
||||||
|
result.setData(dataList);
|
||||||
|
result.setTotal(dataList.size());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult<EqSpecial> dataSourceResult) {
|
||||||
|
// 处理字典匹配,实际应该根据业务需求实现
|
||||||
|
}
|
||||||
|
}
|
||||||
104
backend/src/main/java/com/yfd/platform/utils/KendoUtil.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ReflectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class KendoUtil extends ReflectUtil {
|
||||||
|
public KendoUtil() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// public static Map<String, GroupResult> getGroupResultMap(DataSourceRequest dataSourceRequest, String filter, Class clas) {
|
||||||
|
// SearcherBuilder.BeanSearcherBuilder beanSearcher = SearcherBuilder.beanSearcher();
|
||||||
|
// GroupViewModel groupViewModel = null;
|
||||||
|
// if (filter == null) {
|
||||||
|
// groupViewModel = new GroupViewModel(clas, (String)null);
|
||||||
|
// } else {
|
||||||
|
// groupViewModel = new GroupViewModel(GroupViewModel.class, filter);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return beanSearcher.build().constructGroupSql(groupViewModel, dataSourceRequest);
|
||||||
|
// }
|
||||||
|
|
||||||
|
public static String getGroupBy(DataSourceRequest dataSourceRequest) {
|
||||||
|
String groupBy = null;
|
||||||
|
List<DataSourceRequest.GroupDescriptor> groupDescriptorList = dataSourceRequest.getGroup();
|
||||||
|
if (CollectionUtil.isNotEmpty(groupDescriptorList)) {
|
||||||
|
StringBuilder groupByBuilder = new StringBuilder();
|
||||||
|
StringBuilder orderByBuilder = new StringBuilder();
|
||||||
|
int groupInfoCount = groupDescriptorList.size();
|
||||||
|
|
||||||
|
for(int i = 0; i < groupInfoCount; ++i) {
|
||||||
|
DataSourceRequest.GroupDescriptor groupingInfo = (DataSourceRequest.GroupDescriptor)groupDescriptorList.get(i);
|
||||||
|
String selector = groupingInfo.getField();
|
||||||
|
String dir = groupingInfo.getDir();
|
||||||
|
groupByBuilder.append(selector);
|
||||||
|
if (groupingInfo.getNeedSortFlag()) {
|
||||||
|
if ("desc".equals(dir)) {
|
||||||
|
orderByBuilder.append(selector).append(" desc");
|
||||||
|
} else {
|
||||||
|
orderByBuilder.append(selector).append(" asc");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i < groupInfoCount - 1) {
|
||||||
|
groupByBuilder.append(", ");
|
||||||
|
orderByBuilder.append(", ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (groupInfoCount > 0) {
|
||||||
|
StringBuilder groupResult = new StringBuilder();
|
||||||
|
groupResult.append(" group by ").append(groupByBuilder.toString());
|
||||||
|
if (StrUtil.isNotBlank(orderByBuilder.toString())) {
|
||||||
|
groupResult.append(" order by ").append(orderByBuilder.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
groupBy = groupResult.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return groupBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Page getPage(DataSourceRequest dataSourceRequest) {
|
||||||
|
if (dataSourceRequest.getTake() != 0) {
|
||||||
|
Page page = new Page();
|
||||||
|
page.setSize((long)dataSourceRequest.getTake());
|
||||||
|
page.setCurrent((long)(dataSourceRequest.getSkip() / dataSourceRequest.getTake() + 1));
|
||||||
|
return page;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, Object> getFieldValues(Object obj) {
|
||||||
|
if (null != obj) {
|
||||||
|
Field[] fields = getFields(obj instanceof Class ? (Class)obj : obj.getClass());
|
||||||
|
if (null != fields) {
|
||||||
|
Map<String, Object> valueMap = new HashMap();
|
||||||
|
|
||||||
|
for(int i = 0; i < fields.length; ++i) {
|
||||||
|
Object value = getFieldValue(obj, fields[i]);
|
||||||
|
valueMap.put(fields[i].getName(), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return valueMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,679 @@
|
|||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by FernFlower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.yfd.platform.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
|
import cn.hutool.core.util.ReflectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
|
import com.google.gson.*;
|
||||||
|
import com.yfd.platform.common.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class QgcQueryWrapperUtil {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(QgcQueryWrapperUtil.class);
|
||||||
|
public static final List<String> FIELDNULL = new ArrayList();
|
||||||
|
|
||||||
|
public QgcQueryWrapperUtil() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getJsonFieldNull(String columName) {
|
||||||
|
return FIELDNULL.contains(columName) ? "00000000-0000-0000-0000-000000000000" : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFilterFieldValue(DataSourceLoadOptionsBase loadOptions, String fieldName) {
|
||||||
|
try {
|
||||||
|
JsonElement jsonElement = (new JsonParser()).parse(JSONUtil.toJsonStr(loadOptions.getFilter()));
|
||||||
|
if (jsonElement instanceof JsonNull) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonArray jArray = (JsonArray)jsonElement;
|
||||||
|
StringBuffer fieldValue = new StringBuffer();
|
||||||
|
parseJArrayConditions(jArray, fieldName, fieldValue);
|
||||||
|
if (fieldValue != null && StrUtil.isNotBlank(fieldValue.toString())) {
|
||||||
|
return fieldValue.toString();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("获取值异常", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PageInfo getPageInfo(DataSourceLoadOptionsBase loadOptions) {
|
||||||
|
PageInfo pageInfo = new PageInfo();
|
||||||
|
if (loadOptions.getTake() != null && loadOptions.getTake() != 0) {
|
||||||
|
Page page = null;
|
||||||
|
if (loadOptions.getSkip() != null && loadOptions.getSkip() != 0) {
|
||||||
|
page = new Page((long)(loadOptions.getSkip() / loadOptions.getTake() + 1), (long)loadOptions.getTake());
|
||||||
|
} else {
|
||||||
|
loadOptions.setSkip(0);
|
||||||
|
page = new Page(1L, (long)loadOptions.getTake());
|
||||||
|
}
|
||||||
|
|
||||||
|
pageInfo.setHasPageInfo(true);
|
||||||
|
pageInfo.setPage(page);
|
||||||
|
return pageInfo;
|
||||||
|
} else {
|
||||||
|
pageInfo.setHasPageInfo(false);
|
||||||
|
return pageInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void parseJArrayConditions(JsonArray jsonArray, String fieldName, StringBuffer fieldValue) {
|
||||||
|
if (jsonArray != null && jsonArray.size() != 0) {
|
||||||
|
if (jsonArray.get(0).isJsonPrimitive()) {
|
||||||
|
String columnName = jsonArray.get(0).getAsString();
|
||||||
|
String condition = jsonArray.get(1).getAsString();
|
||||||
|
Object value = null;
|
||||||
|
Object tempValue = jsonArray.get(2);
|
||||||
|
if (((JsonElement)tempValue).isJsonPrimitive()) {
|
||||||
|
JsonPrimitive jsonPrimitive = ((JsonElement)tempValue).getAsJsonPrimitive();
|
||||||
|
if (jsonPrimitive.isBoolean()) {
|
||||||
|
value = jsonPrimitive.getAsBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isNumber()) {
|
||||||
|
Object var10 = jsonPrimitive.getAsNumber();
|
||||||
|
if (var10.toString().contains(".")) {
|
||||||
|
value = ((Number)var10).doubleValue();
|
||||||
|
} else {
|
||||||
|
value = ((Number)var10).longValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isString()) {
|
||||||
|
value = jsonPrimitive.getAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isJsonNull()) {
|
||||||
|
value = getJsonFieldNull(columnName);
|
||||||
|
}
|
||||||
|
} else if (tempValue instanceof JsonNull) {
|
||||||
|
value = null;
|
||||||
|
} else {
|
||||||
|
value = ((JsonElement)tempValue).getAsJsonArray();
|
||||||
|
if (value != null) {
|
||||||
|
value = value.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (columnName != null && columnName.equals(fieldName)) {
|
||||||
|
if (StrUtil.isEmpty((CharSequence) value)) {
|
||||||
|
StringBuffer var9 = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(fieldValue)) {
|
||||||
|
fieldValue.append(value);
|
||||||
|
} else {
|
||||||
|
fieldValue.append(",").append(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!jsonArray.get(0).isJsonArray()) {
|
||||||
|
throw new RuntimeException("Unknown data type in json array.");
|
||||||
|
}
|
||||||
|
|
||||||
|
parseArrayConditions(jsonArray, fieldName, fieldValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
StringBuffer var8 = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void parseArrayConditions(JsonArray jsonArray, String fieldName, StringBuffer fieldValue) {
|
||||||
|
if (jsonArray != null && jsonArray.size() != 0) {
|
||||||
|
if (jsonArray.size() == 1) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), fieldName, fieldValue);
|
||||||
|
} else {
|
||||||
|
for(int i = 0; i <= jsonArray.size(); i += 2) {
|
||||||
|
JsonElement jsonItem = jsonArray.get(i);
|
||||||
|
if (i == 0) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), fieldName, fieldValue);
|
||||||
|
} else {
|
||||||
|
String condition = jsonArray.get(i - 1).getAsString();
|
||||||
|
if (condition.equals("and")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), fieldName, fieldValue);
|
||||||
|
} else {
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), fieldName, fieldValue);
|
||||||
|
}
|
||||||
|
} else if (condition.equals("or")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), fieldName, fieldValue);
|
||||||
|
} else {
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), fieldName, fieldValue);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throwIfUnknownCondition(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
StringBuffer var6 = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void parseJArrayConditions(JsonArray jsonArray, QueryWrapper<T> queryWrapper, Map<String, String> fieldsMap, List<String> removeFields, Class modelClass, Boolean validateColumn) {
|
||||||
|
if (jsonArray.get(0).isJsonPrimitive()) {
|
||||||
|
String columnName = jsonArray.get(0).getAsString();
|
||||||
|
String condition = jsonArray.get(1).getAsString();
|
||||||
|
Object value = null;
|
||||||
|
Object tempValue = jsonArray.get(2);
|
||||||
|
if (((JsonElement)tempValue).isJsonPrimitive()) {
|
||||||
|
JsonPrimitive jsonPrimitive = ((JsonElement)tempValue).getAsJsonPrimitive();
|
||||||
|
if (jsonPrimitive.isBoolean()) {
|
||||||
|
value = jsonPrimitive.getAsBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isNumber()) {
|
||||||
|
Object var15 = jsonPrimitive.getAsNumber();
|
||||||
|
if (var15.toString().contains(".")) {
|
||||||
|
value = ((Number)var15).doubleValue();
|
||||||
|
} else {
|
||||||
|
value = ((Number)var15).longValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isString()) {
|
||||||
|
value = jsonPrimitive.getAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isJsonNull()) {
|
||||||
|
value = getJsonFieldNull(columnName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (removeFields != null && CollectionUtil.contains((Collection<?>) removeFields.iterator(), columnName)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String databaseColumnName = (String)fieldsMap.get(columnName);
|
||||||
|
if (databaseColumnName == null) {
|
||||||
|
if (validateColumn) {
|
||||||
|
throw new RuntimeException(columnName + "字段不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
databaseColumnName = columnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == null) {
|
||||||
|
Field field = ReflectUtil.getField(modelClass, columnName);
|
||||||
|
if (null != field) {
|
||||||
|
Annotation[] annotations = field.getDeclaredAnnotations();
|
||||||
|
if (ArrayUtil.isNotEmpty(annotations)) {
|
||||||
|
for(Annotation annotation : Arrays.asList(annotations)) {
|
||||||
|
if (annotation.annotationType().equals(JsonSerialize.class) && ((JsonSerialize)annotation).using().equals(GuidStringSerialize.class)) {
|
||||||
|
value = "00000000-0000-0000-0000-000000000000";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value instanceof Boolean) {
|
||||||
|
Boolean var17 = (Boolean)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (condition.equals("contains")) {
|
||||||
|
queryWrapper.like(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("notcontains")) {
|
||||||
|
queryWrapper.notLike(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("startswith")) {
|
||||||
|
queryWrapper.likeRight(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("endswith")) {
|
||||||
|
queryWrapper.likeLeft(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("=")) {
|
||||||
|
if (value == null) {
|
||||||
|
queryWrapper.isNull(databaseColumnName);
|
||||||
|
} else {
|
||||||
|
queryWrapper.eq(databaseColumnName, value);
|
||||||
|
}
|
||||||
|
} else if (condition.equals("!=")) {
|
||||||
|
queryWrapper.ne(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("<>")) {
|
||||||
|
queryWrapper.ne(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("<")) {
|
||||||
|
queryWrapper.lt(databaseColumnName, value);
|
||||||
|
} else if (condition.equals("<=")) {
|
||||||
|
queryWrapper.le(databaseColumnName, value);
|
||||||
|
} else if (condition.equals(">")) {
|
||||||
|
queryWrapper.gt(databaseColumnName, value);
|
||||||
|
} else if (condition.equals(">=")) {
|
||||||
|
queryWrapper.ge(databaseColumnName, value);
|
||||||
|
} else {
|
||||||
|
throwIfUnknownCondition(condition);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!jsonArray.get(0).isJsonArray()) {
|
||||||
|
throw new RuntimeException("Unknown data type in json array.");
|
||||||
|
}
|
||||||
|
|
||||||
|
parseArrayConditions(jsonArray, queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void getJArrayFilterFields(JsonArray jsonArray, List<String> filterFieldEmptyValueList, List<String> filterFieldList, Class modelClass) {
|
||||||
|
if (jsonArray.get(0).isJsonPrimitive()) {
|
||||||
|
String columnName = jsonArray.get(0).getAsString();
|
||||||
|
Object value = null;
|
||||||
|
Object tempValue = jsonArray.get(2);
|
||||||
|
if (((JsonElement)tempValue).isJsonPrimitive()) {
|
||||||
|
JsonPrimitive jsonPrimitive = ((JsonElement)tempValue).getAsJsonPrimitive();
|
||||||
|
if (jsonPrimitive.isBoolean()) {
|
||||||
|
Object var8 = jsonPrimitive.getAsBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isNumber()) {
|
||||||
|
Object var9 = jsonPrimitive.getAsNumber();
|
||||||
|
if (var9.toString().contains(".")) {
|
||||||
|
Object var10 = ((Number)var9).doubleValue();
|
||||||
|
} else {
|
||||||
|
Object var11 = ((Number)var9).longValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isString()) {
|
||||||
|
Object var12 = jsonPrimitive.getAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isJsonNull()) {
|
||||||
|
Object var13 = getJsonFieldNull(columnName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filterFieldList.add(columnName);
|
||||||
|
} else {
|
||||||
|
if (!jsonArray.get(0).isJsonArray()) {
|
||||||
|
throw new RuntimeException("Unknown data type in json array.");
|
||||||
|
}
|
||||||
|
|
||||||
|
getArrayFilterFields(jsonArray, filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void getArrayFilterFields(JsonArray jsonArray, List<String> filterFieldEmptyValueList, List<String> filterFieldList, Class modelClass) {
|
||||||
|
if (jsonArray.size() == 1) {
|
||||||
|
getJArrayFilterFields(jsonArray.get(0).getAsJsonArray(), filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
} else {
|
||||||
|
for(int i = 0; i <= jsonArray.size(); i += 2) {
|
||||||
|
JsonElement jsonItem = jsonArray.get(i);
|
||||||
|
if (i == 0) {
|
||||||
|
getJArrayFilterFields(jsonArray.get(0).getAsJsonArray(), filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
} else {
|
||||||
|
String condition = jsonArray.get(i - 1).getAsString();
|
||||||
|
if (condition.equals("and")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
getJArrayFilterFields(jsonItem.getAsJsonArray(), filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
} else {
|
||||||
|
getJArrayFilterFields(jsonItem.getAsJsonArray(), filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
}
|
||||||
|
} else if (condition.equals("or")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
getJArrayFilterFields(jsonItem.getAsJsonArray(), filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
} else {
|
||||||
|
getJArrayFilterFields(jsonItem.getAsJsonArray(), filterFieldEmptyValueList, filterFieldList, modelClass);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throwIfUnknownCondition(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void parseJArrayConditions(JsonArray jsonArray, QueryWrapper<T> queryWrapper, Class modelClass, Boolean validateColumn) {
|
||||||
|
if (jsonArray.get(0).isJsonPrimitive()) {
|
||||||
|
String columnName = jsonArray.get(0).getAsString();
|
||||||
|
String condition = jsonArray.get(1).getAsString();
|
||||||
|
Object value = null;
|
||||||
|
Object tempValue = jsonArray.get(2);
|
||||||
|
if (((JsonElement)tempValue).isJsonPrimitive()) {
|
||||||
|
JsonPrimitive jsonPrimitive = ((JsonElement)tempValue).getAsJsonPrimitive();
|
||||||
|
if (jsonPrimitive.isBoolean()) {
|
||||||
|
value = jsonPrimitive.getAsBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isNumber()) {
|
||||||
|
Object var12 = jsonPrimitive.getAsNumber();
|
||||||
|
if (var12.toString().contains(".")) {
|
||||||
|
value = ((Number)var12).doubleValue();
|
||||||
|
} else {
|
||||||
|
value = ((Number)var12).longValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isString()) {
|
||||||
|
value = jsonPrimitive.getAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonPrimitive.isJsonNull()) {
|
||||||
|
value = getJsonFieldNull(columnName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String databaseColumnName = getDBColumnName(modelClass, columnName, validateColumn);
|
||||||
|
if (value == null) {
|
||||||
|
Annotation[] annotations = ReflectUtil.getField(modelClass, columnName).getDeclaredAnnotations();
|
||||||
|
if (ArrayUtil.isNotEmpty(annotations)) {
|
||||||
|
for(Annotation annotation : Arrays.asList(annotations)) {
|
||||||
|
if (annotation.annotationType().equals(JsonSerialize.class) && ((JsonSerialize)annotation).using().equals(GuidStringSerialize.class)) {
|
||||||
|
value = "00000000-0000-0000-0000-000000000000";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (condition.equalsIgnoreCase("contains")) {
|
||||||
|
queryWrapper.like(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("notcontains")) {
|
||||||
|
queryWrapper.notLike(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("startswith")) {
|
||||||
|
queryWrapper.likeRight(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("endswith")) {
|
||||||
|
queryWrapper.likeLeft(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("=")) {
|
||||||
|
if (value == null) {
|
||||||
|
queryWrapper.isNull(databaseColumnName);
|
||||||
|
} else {
|
||||||
|
queryWrapper.eq(databaseColumnName, value);
|
||||||
|
}
|
||||||
|
} else if (condition.equalsIgnoreCase("!=")) {
|
||||||
|
queryWrapper.ne(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("<>")) {
|
||||||
|
queryWrapper.ne(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("<")) {
|
||||||
|
queryWrapper.lt(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase("<=")) {
|
||||||
|
queryWrapper.le(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase(">")) {
|
||||||
|
queryWrapper.gt(databaseColumnName, value);
|
||||||
|
} else if (condition.equalsIgnoreCase(">=")) {
|
||||||
|
queryWrapper.ge(databaseColumnName, value);
|
||||||
|
} else {
|
||||||
|
throwIfUnknownCondition(condition);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!jsonArray.get(0).isJsonArray()) {
|
||||||
|
throw new RuntimeException("Unknown data type in json array.");
|
||||||
|
}
|
||||||
|
|
||||||
|
parseArrayConditions(jsonArray, queryWrapper, modelClass, validateColumn);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void parseArrayConditions(JsonArray jsonArray, QueryWrapper<T> queryWrapper, Map<String, String> fieldsMap, List<String> removeFields, Class modelClass, Boolean validateColumn) {
|
||||||
|
if (jsonArray.size() == 1) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
for(int i = 0; i <= jsonArray.size(); i += 2) {
|
||||||
|
JsonElement jsonItem = jsonArray.get(i);
|
||||||
|
if (i == 0) {
|
||||||
|
if (jsonArray.get(0).getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else if (jsonArray.get(0).getAsJsonArray().size() == 1) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray().get(0).getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
queryWrapper.and((wrapper) -> parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), wrapper, fieldsMap, removeFields, modelClass, validateColumn));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String condition = jsonArray.get(i - 1).getAsString();
|
||||||
|
if (condition.equals("and")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else if (jsonArray.get(0).getAsJsonArray().size() == 1) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray().get(0).getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
queryWrapper.and((wrapper) -> parseJArrayConditions(jsonItem.getAsJsonArray(), wrapper, fieldsMap, removeFields, modelClass, validateColumn));
|
||||||
|
}
|
||||||
|
} else if (condition.equals("or")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
queryWrapper.or();
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else if (jsonArray.get(0).getAsJsonArray().size() == 1) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray().get(0).getAsJsonArray(), queryWrapper, fieldsMap, removeFields, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
queryWrapper.or((wrapper) -> parseJArrayConditions(jsonItem.getAsJsonArray(), wrapper, fieldsMap, removeFields, modelClass, validateColumn));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throwIfUnknownCondition(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void parseArrayConditions(JsonArray jsonArray, QueryWrapper<T> queryWrapper, Class modelClass, Boolean validateColumn) {
|
||||||
|
if (jsonArray.size() == 1) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), queryWrapper, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
for(int i = 0; i <= jsonArray.size(); i += 2) {
|
||||||
|
JsonElement jsonItem = jsonArray.get(i);
|
||||||
|
if (i == 0) {
|
||||||
|
if (jsonArray.get(0).getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), queryWrapper, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
queryWrapper.and((wrapper) -> parseJArrayConditions(jsonArray.get(0).getAsJsonArray(), wrapper, modelClass, validateColumn));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String condition = jsonArray.get(i - 1).getAsString();
|
||||||
|
if (condition.equals("and")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), queryWrapper, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
queryWrapper.and((wrapper) -> parseJArrayConditions(jsonItem.getAsJsonArray(), wrapper, modelClass, validateColumn));
|
||||||
|
}
|
||||||
|
} else if (condition.equals("or")) {
|
||||||
|
if (jsonItem.getAsJsonArray().get(0).isJsonPrimitive()) {
|
||||||
|
queryWrapper.or();
|
||||||
|
parseJArrayConditions(jsonItem.getAsJsonArray(), queryWrapper, modelClass, validateColumn);
|
||||||
|
} else {
|
||||||
|
queryWrapper.or((wrapper) -> parseJArrayConditions(jsonItem.getAsJsonArray(), wrapper, modelClass, validateColumn));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throwIfUnknownCondition(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void throwIfUnknownCondition(String condition) {
|
||||||
|
switch (condition) {
|
||||||
|
case "=":
|
||||||
|
case "<>":
|
||||||
|
case "!=":
|
||||||
|
case "<":
|
||||||
|
case ">":
|
||||||
|
case "<=":
|
||||||
|
case ">=":
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
throw new RuntimeException(String.format("Unknown condition %s", condition));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBColumnName(Class modelClass, String cloumn) {
|
||||||
|
TableInfo tableInfo = TableInfoHelper.getTableInfo(modelClass);
|
||||||
|
if (cloumn.equals(tableInfo.getKeyProperty())) {
|
||||||
|
return tableInfo.getKeyColumn();
|
||||||
|
} else {
|
||||||
|
List<TableFieldInfo> fieldInfos = (List)tableInfo.getFieldList().stream().filter((tableFieldInfo) -> cloumn.equals(tableFieldInfo.getProperty())).collect(Collectors.toList());
|
||||||
|
if (CollectionUtil.isNotEmpty(fieldInfos)) {
|
||||||
|
return ((TableFieldInfo)fieldInfos.get(0)).getColumn();
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(cloumn + "列找不到");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBColumnName(Class modelClass, String cloumn, Boolean validateColumn) {
|
||||||
|
TableInfo tableInfo = TableInfoHelper.getTableInfo(modelClass);
|
||||||
|
if (cloumn.equals(tableInfo.getKeyProperty())) {
|
||||||
|
return tableInfo.getKeyColumn();
|
||||||
|
} else {
|
||||||
|
List<TableFieldInfo> fieldInfos = (List)tableInfo.getFieldList().stream().filter((tableFieldInfo) -> cloumn.equals(tableFieldInfo.getProperty())).collect(Collectors.toList());
|
||||||
|
if (CollectionUtil.isNotEmpty(fieldInfos)) {
|
||||||
|
return ((TableFieldInfo)fieldInfos.get(0)).getColumn();
|
||||||
|
} else if (validateColumn) {
|
||||||
|
throw new RuntimeException(cloumn + "列找不到");
|
||||||
|
} else {
|
||||||
|
return cloumn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBTableName(Class modelClass) {
|
||||||
|
TableInfo tableInfo = TableInfoHelper.getTableInfo(modelClass);
|
||||||
|
return tableInfo.getTableName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toHyphenation(String src, String hyphenation) {
|
||||||
|
StringBuilder sb = new StringBuilder(src);
|
||||||
|
int cnt = 0;
|
||||||
|
|
||||||
|
for(int i = 1; i < src.length(); ++i) {
|
||||||
|
if (Character.isUpperCase(src.charAt(i))) {
|
||||||
|
sb.insert(i + cnt, hyphenation);
|
||||||
|
cnt += hyphenation.length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString().toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toUnderline(String src) {
|
||||||
|
return toHyphenation(src, "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, FilterFieldMeta> groupConvertByFieldMeta(DataSourceRequest dataSourceRequest, Map<String, Map<String, ItemEntity>> groupItemMapping) {
|
||||||
|
if (dataSourceRequest.getFilter() != null) {
|
||||||
|
Map<String, FilterFieldMeta> result = new HashMap();
|
||||||
|
if (groupItemMapping.size() == 1) {
|
||||||
|
String group = (String)groupItemMapping.keySet().toArray()[0];
|
||||||
|
FilterFieldMeta filterFieldMeta = new FilterFieldMeta(dataSourceRequest.getFilter(), (Map)groupItemMapping.get(group));
|
||||||
|
constructOrderByFieldMeta(dataSourceRequest.getSort(), filterFieldMeta);
|
||||||
|
result.put(group, filterFieldMeta);
|
||||||
|
} else {
|
||||||
|
groupItemMapping.forEach((key, value) -> {
|
||||||
|
FilterFieldMeta filterFieldMeta = constructFilterFieldMeta(dataSourceRequest.getFilter(), value);
|
||||||
|
constructOrderByFieldMeta(dataSourceRequest.getSort(), filterFieldMeta);
|
||||||
|
result.put(key, filterFieldMeta);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static FilterFieldMeta constructOrderByFieldMeta(List<DataSourceRequest.SortDescriptor> sortDescriptors, FilterFieldMeta filterFieldMeta) {
|
||||||
|
if (CollectionUtil.isNotEmpty(sortDescriptors)) {
|
||||||
|
List<OrderBy> orderByList = new ArrayList();
|
||||||
|
|
||||||
|
for(DataSourceRequest.SortDescriptor sortDescriptor : sortDescriptors) {
|
||||||
|
if (filterFieldMeta.getFieldMeta().containsKey(sortDescriptor.getField())) {
|
||||||
|
OrderBy orderBy = new OrderBy(sortDescriptor.getField(), sortDescriptor.getDir());
|
||||||
|
orderByList.add(orderBy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(orderByList)) {
|
||||||
|
filterFieldMeta.setOrderByList(orderByList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filterFieldMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static FilterFieldMeta constructFilterFieldMeta(DataSourceRequest.FilterDescriptor filter, Map<String, ItemEntity> fieldMeta) {
|
||||||
|
DataSourceRequest.FilterDescriptor groupFilter = new DataSourceRequest.FilterDescriptor();
|
||||||
|
constructGroupFilter(filter, groupFilter, fieldMeta);
|
||||||
|
deleteEmptyNode(groupFilter);
|
||||||
|
FilterFieldMeta result = new FilterFieldMeta(groupFilter, fieldMeta);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Boolean deleteEmptyNode(DataSourceRequest.FilterDescriptor groupFilter) {
|
||||||
|
if (groupFilter != null) {
|
||||||
|
List<DataSourceRequest.FilterDescriptor> filterDescriptors = groupFilter.getFilters();
|
||||||
|
if (StrUtil.isEmpty(groupFilter.getField()) && StrUtil.isEmpty(groupFilter.getOperator()) && CollectionUtil.isNotEmpty(filterDescriptors)) {
|
||||||
|
Iterator<DataSourceRequest.FilterDescriptor> iterator = filterDescriptors.iterator();
|
||||||
|
|
||||||
|
while(iterator.hasNext()) {
|
||||||
|
if (deleteEmptyNode((DataSourceRequest.FilterDescriptor)iterator.next())) {
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isEmpty(groupFilter.getField()) && StrUtil.isEmpty(groupFilter.getOperator()) && CollectionUtil.isEmpty(filterDescriptors)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void constructGroupFilter(DataSourceRequest.FilterDescriptor filter, DataSourceRequest.FilterDescriptor groupFilter, Map<String, ItemEntity> fieldMeta) {
|
||||||
|
if (filter != null) {
|
||||||
|
List<DataSourceRequest.FilterDescriptor> filters = filter.getFilters();
|
||||||
|
if (CollectionUtil.isNotEmpty(filters)) {
|
||||||
|
groupFilter.setLogic(filter.getLogic());
|
||||||
|
|
||||||
|
for(DataSourceRequest.FilterDescriptor entry : filters) {
|
||||||
|
if (CollectionUtil.isNotEmpty(entry.getFilters())) {
|
||||||
|
DataSourceRequest.FilterDescriptor nodeFilter = new DataSourceRequest.FilterDescriptor();
|
||||||
|
nodeFilter.setLogic(entry.getLogic());
|
||||||
|
groupFilter.getFilters().add(nodeFilter);
|
||||||
|
constructGroupFilter(entry, nodeFilter, fieldMeta);
|
||||||
|
} else if (null != fieldMeta.get(entry.getField())) {
|
||||||
|
DataSourceRequest.FilterDescriptor nodeFilter = new DataSourceRequest.FilterDescriptor();
|
||||||
|
nodeFilter.setLogic(entry.getLogic());
|
||||||
|
nodeFilter.setField(entry.getField());
|
||||||
|
nodeFilter.setOperator(entry.getOperator());
|
||||||
|
nodeFilter.setValue(entry.getValue());
|
||||||
|
nodeFilter.setDataType(entry.getDataType());
|
||||||
|
groupFilter.getFilters().add(nodeFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static {
|
||||||
|
FIELDNULL.add("parentId");
|
||||||
|
}
|
||||||
|
}
|
||||||
1026
backend/src/main/java/com/yfd/platform/utils/QueryWrapperUtil.java
Normal file
@ -39,6 +39,23 @@ logging:
|
|||||||
swagger-ui:
|
swagger-ui:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
|
mybatis-plus:
|
||||||
|
# mapper-locations: classpath*:**/mapper/*Mapper.xml,classpath*:**/mapping/*Mapper.xml
|
||||||
|
global-config:
|
||||||
|
banner: false
|
||||||
|
db-config:
|
||||||
|
id-type: ASSIGN_ID
|
||||||
|
insert-strategy: not_null
|
||||||
|
update-strategy: not_null
|
||||||
|
select-strategy: not_empty
|
||||||
|
table-underline: true
|
||||||
|
logic-delete-value: 1
|
||||||
|
logic-not-delete-value: 0
|
||||||
|
logic-delete-field: isDeleted
|
||||||
|
configuration:
|
||||||
|
map-underscore-to-camel-case: true
|
||||||
|
cache-enabled: false
|
||||||
|
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
|
||||||
|
|
||||||
# 登录相关配置
|
# 登录相关配置
|
||||||
login:
|
login:
|
||||||
|
|||||||
@ -0,0 +1,120 @@
|
|||||||
|
package com.yfd.platform.utils;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class QueryWrapperUtilTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getPage_shouldBuildPageBySkipAndTake() {
|
||||||
|
Page<?> page = QueryWrapperUtil.getPage(20, 10);
|
||||||
|
Assertions.assertNotNull(page);
|
||||||
|
Assertions.assertEquals(10L, page.getSize());
|
||||||
|
Assertions.assertEquals(3L, page.getCurrent());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getPage_shouldBuildPageFromDataSourceRequest() {
|
||||||
|
QueryWrapperUtil.DataSourceRequest req = new QueryWrapperUtil.DataSourceRequest();
|
||||||
|
req.setSkip(0);
|
||||||
|
req.setTake(15);
|
||||||
|
|
||||||
|
Page<?> page = QueryWrapperUtil.getPage(req);
|
||||||
|
Assertions.assertNotNull(page);
|
||||||
|
Assertions.assertEquals(15L, page.getSize());
|
||||||
|
Assertions.assertEquals(1L, page.getCurrent());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getGroupBy_shouldBuildGroupAndOrderSegment() {
|
||||||
|
QueryWrapperUtil.GroupDescriptor g1 = new QueryWrapperUtil.GroupDescriptor("dept_id", "asc", true);
|
||||||
|
QueryWrapperUtil.GroupDescriptor g2 = new QueryWrapperUtil.GroupDescriptor("role_id", "desc", true);
|
||||||
|
QueryWrapperUtil.DataSourceRequest req = new QueryWrapperUtil.DataSourceRequest(10, 0, List.of(g1, g2));
|
||||||
|
|
||||||
|
String sql = QueryWrapperUtil.getGroupBy(req);
|
||||||
|
Assertions.assertEquals(" group by dept_id, role_id order by dept_id asc, role_id desc", sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getGroupBy_shouldRejectUnsafeIdentifier() {
|
||||||
|
QueryWrapperUtil.GroupDescriptor bad = new QueryWrapperUtil.GroupDescriptor("name;drop", "asc", true);
|
||||||
|
QueryWrapperUtil.DataSourceRequest req = new QueryWrapperUtil.DataSourceRequest(10, 0, List.of(bad));
|
||||||
|
|
||||||
|
Assertions.assertThrows(IllegalArgumentException.class, () -> QueryWrapperUtil.getGroupBy(req));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFieldValues_shouldReadInstanceAndSuperclassFields() {
|
||||||
|
Child child = new Child();
|
||||||
|
Map<String, Object> values = QueryWrapperUtil.getFieldValues(child);
|
||||||
|
|
||||||
|
Assertions.assertNotNull(values);
|
||||||
|
Assertions.assertEquals("parent", values.get("parentField"));
|
||||||
|
Assertions.assertEquals(7, values.get("childField"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFieldValues_shouldReadOnlyStaticWhenInputIsClass() {
|
||||||
|
Map<String, Object> values = QueryWrapperUtil.getFieldValues(StaticHolder.class);
|
||||||
|
|
||||||
|
Assertions.assertNotNull(values);
|
||||||
|
Assertions.assertEquals("staticValue", values.get("S"));
|
||||||
|
Assertions.assertFalse(values.containsKey("normalField"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFilterFieldValue_shouldExtractNestedFieldValues() {
|
||||||
|
String filter = "[[\"name\",\"contains\",\"alice\"],\"and\",[[\"name\",\"=\",\"bob\"],\"or\",[\"age\",\">\",18]]]";
|
||||||
|
String value = QueryWrapperUtil.getFilterFieldValue(filter, "name");
|
||||||
|
Assertions.assertEquals("alice,bob", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void applyDevExtremeFilter_shouldBuildExpectedSqlAndRespectRemoveFields() {
|
||||||
|
String filter = "[[\"username\",\"contains\",\"zhang\"],\"and\",[\"status\",\"=\",1],\"or\",[\"email\",\"=\",null]]";
|
||||||
|
Map<String, String> fieldsMap = Map.of(
|
||||||
|
"username", "USER_NAME",
|
||||||
|
"status", "STATUS",
|
||||||
|
"email", "EMAIL"
|
||||||
|
);
|
||||||
|
QueryWrapper<Object> wrapper = new QueryWrapper<>();
|
||||||
|
|
||||||
|
QueryWrapperUtil.applyDevExtremeFilter(
|
||||||
|
wrapper,
|
||||||
|
filter,
|
||||||
|
Object.class,
|
||||||
|
false,
|
||||||
|
fieldsMap,
|
||||||
|
List.of("status")
|
||||||
|
);
|
||||||
|
|
||||||
|
String sqlSegment = wrapper.getSqlSegment();
|
||||||
|
Assertions.assertNotNull(sqlSegment);
|
||||||
|
Assertions.assertTrue(sqlSegment.contains("USER_NAME"));
|
||||||
|
Assertions.assertFalse(sqlSegment.contains("STATUS"));
|
||||||
|
Assertions.assertTrue(sqlSegment.contains("EMAIL"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void toUnderline_shouldConvertCamelCase() {
|
||||||
|
Assertions.assertEquals("user_name", QueryWrapperUtil.toUnderline("userName"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Parent {
|
||||||
|
private String parentField = "parent";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Child extends Parent {
|
||||||
|
private int childField = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class StaticHolder {
|
||||||
|
private static String S = "staticValue";
|
||||||
|
private String normalField = "normal";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -19,12 +19,15 @@
|
|||||||
"ant-design-vue": "^4.2.6",
|
"ant-design-vue": "^4.2.6",
|
||||||
"axios": "^1.2.0",
|
"axios": "^1.2.0",
|
||||||
"better-scroll": "^2.4.2",
|
"better-scroll": "^2.4.2",
|
||||||
|
"dayjs": "^1.11.20",
|
||||||
"default-passive-events": "^2.0.0",
|
"default-passive-events": "^2.0.0",
|
||||||
"echarts": "^5.2.2",
|
"echarts": "^5.2.2",
|
||||||
"element-plus": "^2.2.27",
|
"element-plus": "^2.2.27",
|
||||||
|
"esri-leaflet": "^3.0.19",
|
||||||
"js-base64": "^3.7.5",
|
"js-base64": "^3.7.5",
|
||||||
"js-cookie": "^3.0.1",
|
"js-cookie": "^3.0.1",
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.3.2",
|
||||||
|
"leaflet": "^1.9.4",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
"path-to-regexp": "^6.2.0",
|
"path-to-regexp": "^6.2.0",
|
||||||
|
|||||||
22
frontend/src/api/ecoFlow/index.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { EcoFlowStandard, EcoFlowQueryParams } from './types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取生态流量达标情况数据
|
||||||
|
* @param params 查询参数
|
||||||
|
*/
|
||||||
|
export function getEcoFlowStandardData(params?: EcoFlowQueryParams): Promise<{ data: EcoFlowStandard[] }> {
|
||||||
|
return request({
|
||||||
|
url: '/api/eco-flow/standard',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getQgcStaticData(params?: EcoFlowQueryParams): Promise<{ data: EcoFlowStandard[] }> {
|
||||||
|
return request({
|
||||||
|
url: '/eng/eq/interval/qgc/getQgcStaticData',
|
||||||
|
method: 'post',
|
||||||
|
data:params
|
||||||
|
});
|
||||||
|
}
|
||||||
12
frontend/src/api/ecoFlow/types.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
export interface EcoFlowStandard {
|
||||||
|
id: number;
|
||||||
|
baseName: string;
|
||||||
|
category: string;
|
||||||
|
currentRate: number;
|
||||||
|
lastYearRate: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface EcoFlowQueryParams {
|
||||||
|
mode?: 'top' | 'left';
|
||||||
|
baseId?: number;
|
||||||
|
}
|
||||||
BIN
frontend/src/assets/images/map-dixingtu.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
frontend/src/assets/images/map-shiliangtu.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
frontend/src/assets/images/map-yingxiangtu.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
frontend/src/assets/images/nineSections-dixing.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
frontend/src/assets/images/nineSections-shiliang.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
frontend/src/assets/images/nineSections-yingxiang.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
1
frontend/src/assets/legend/map-aishipinzhan.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><g><g></g><g><path d="M12,1C17.5228,1,22,5.48368,22,11.0146C22,15.5982,18.9252,19.4625,14.7286,20.6518C14.0801,21.2555,13.5127,21.9435,13.0417,22.6983L12.4242,23.6877C12.278,23.922,11.96954,23.9933,11.73528,23.8471C11.67068,23.8068,11.61614,23.7523,11.57583,23.6877L10.95833,22.6983C10.48728,21.9435,9.919889999999999,21.2555,9.27177,20.6511C5.074809999999999,19.4625,2,15.5982,2,11.0146C2,5.48368,6.47715,1,12,1Z" fill="#0AC266" fill-opacity="1"/></g><g><path d="M12,2C7.02976,2,3,6.03564,3,11.01458C3,14.9819,5.58137,18.4405,9.284130000000001,19.6111L9.77691,19.7549L9.95375,19.9198C10.56499,20.4898,11.11007,21.1267,11.57875,21.8184L11.80668,22.1688L12,22.478L12.19332,22.1688C12.63664,21.4585,13.158,20.8014,13.747,20.2101L14.0472,19.9199L14.2238,19.7555L14.4559,19.6897C18.2973,18.6011,21,15.0741,21,11.01458C21,6.03564,16.9702,2,12,2Z" fill="#00A050" fill-opacity="1"/></g><g><path d="M7.57025,5L17.5657,7.77166L16.7669,8.82141L18,9.15204L17.1565,12.29908L14.6369,11.622530000000001L13.84032,12.67446L9.99709,11.59853L9.99709,13.93371L6.998453,13.93262L6.999545,15.923L6,15.923L6,11.943349999999999L6.999545,11.943349999999999L6.998454,13.0793L9.27144,13.0793L9.27035,11.39556L6.0949342,10.50623L7.56916,5L7.57025,5ZM14.99373,7.90261L12.37483,11.418479999999999L13.55988,11.7502L16.2235,8.24307L14.99373,7.90152L14.99373,7.90261ZM16.235500000000002,9.52087L15.1705,10.92307L16.6164,11.31045L17.038600000000002,9.738019999999999L16.235500000000002,9.52087ZM8.10603,5.992998L7.0508299999999995,9.92898L11.56624,11.192599999999999L14.18514,7.67673L8.10603,5.992998Z" fill="#FFFFFF" fill-opacity="1"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
17
frontend/src/assets/legend/map-dongwujiuzhuzhan.svg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dongwujiuzhuzhan</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-dongwujiuzhuzhan" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.96954214,22.993339 9.73527812,22.8471372 C9.67067972,22.806822 9.6161427,22.7522849 9.57582748,22.6876865 L8.95833333,21.6982555 C8.48728096,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.56499354,19.489756 9.11007499,20.1266528 9.57875348,20.8184146 L9.80667838,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<g id="编组" transform="translate(4.000000, 3.000000)" fill="#FFFFFF">
|
||||||
|
<g id="路径" transform="translate(0.000000, 0.750000)">
|
||||||
|
<polygon points="10.875 4.5 10.875 11.25 1.125 11.25 1.125 4.5 1.875 4.5 1.875 10.5 10.125 10.5 10.125 4.5"></polygon>
|
||||||
|
<path d="M5.99949383,4.96447889 C6.67450486,4.35550941 7.69047373,4.34769678 8.37336406,4.92716844 L8.49146602,5.03674798 C9.14571049,5.70005088 9.16747093,6.74976529 8.56371984,7.43930899 L8.47321526,7.53528448 L6.39365573,9.594412 C6.19192974,9.79215339 5.87920854,9.80771639 5.66059081,9.64219611 L5.59803369,9.58710862 L3.50898437,7.51703373 C2.82358027,6.82214497 2.83161245,5.70390133 3.5257724,5.01849209 C4.20606465,4.34914721 5.29073738,4.32506093 5.99949383,4.96447889 Z M7.94691339,5.55282003 C7.57613564,5.18761167 6.9994374,5.15126266 6.58749808,5.45179201 L6.50188227,5.52135038 L5.99949201,5.97458791 L5.49710338,5.52134857 C5.08326332,5.14799497 4.44938056,5.1619074 4.05272796,5.55217536 C3.67961282,5.92058695 3.65089103,6.50579436 3.96642977,6.90431163 L4.03931446,6.98670364 L5.99925,8.92875 L7.94682981,7.00103888 C8.32016884,6.63319265 8.34924559,6.04776046 8.0339059,5.64936394 L7.96106138,5.5670035 L7.94691339,5.55282003 Z" id="形状"></path>
|
||||||
|
<polygon points="0 5.25 6 -4.61860726e-14 12 5.25 11.4921155 5.75788455 6 1.0156924 0.507884548 5.75788455"></polygon>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
11
frontend/src/assets/legend/map-dwsjhDieliangmenshi.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dwsjhDieliangmenshi</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-dwsjhDieliangmenshi" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M12.7811001,9.5551365 C12.5138652,9.5551365 12.2963802,9.766443 12.2963802,10.0291867 L12.2963802,10.8132457 C12.2963802,11.0745982 12.5138638,11.2872959 12.7811001,11.2872959 C13.048335,11.2872959 13.26582,11.0745996 13.26582,10.8132457 L13.26582,10.0291867 C13.26582,9.766443 13.0483364,9.5551365 12.7811001,9.5551365 Z M14.0845832,4.98146365 L9.1023479,4.02502315 C9.0184816,4.00834105 8.9331933,4 8.8479054,4 C8.218196,4 7.72494835,4.46570874 7.72494835,5.06209443 L7.72494835,5.30120489 L6.36176364,5.08989838 C6.28216159,5.07738681 6.20113819,5.07182609 6.12295707,5.07182609 C5.48329742,5.07182609 5,5.47219703 5,6.00324357 L5,13.999536 C5,14.5305825 5.48329742,14.9295637 6.12295707,14.9295637 C6.20113763,14.9295637 6.28073899,14.924003 6.36176364,14.9114914 L7.72636942,14.6987951 L7.72636942,14.9379056 C7.72636942,15.5329001 8.2196171,16 8.8493265,16 C8.9346144,16 9.0199022,15.9916589 9.1023465,15.976367 L14.0859987,15.0185368 C14.606255,14.9184442 15,14.4374428 15,13.9008358 L15,6.09916829 C14.9971571,5.56255988 14.6048326,5.08155937 14.0845762,4.98146731 L14.0845832,4.98146365 Z M6.24093928,14.1691309 C5.97512543,14.2094459 5.76474861,14.1010123 5.76474861,13.9981392 L5.76474861,6.000461 C5.76474861,5.897588 5.9765465,5.7877647 6.23951821,5.82946927 L7.72353006,6.06023828 L7.72353006,13.9383646 L6.24094901,14.1691336 L6.24093928,14.1691309 Z M14.2309965,13.896656 C14.2309965,14.0732082 14.0959574,14.2483707 13.9367529,14.2789542 L8.9531008,15.2367845 C8.9189856,15.2437354 8.883449,15.2465157 8.8479124,15.2465157 C8.6375355,15.2465157 8.491125,15.1186196 8.491125,14.9351158 L8.491125,5.06070476 C8.491125,4.84661731 8.7015018,4.7103812 8.9531008,4.75903608 L13.9381837,5.71686637 C14.0973881,5.74884037 14.2324273,5.92400215 14.2324273,6.09916461 L14.2324273,13.8966614 L14.2309965,13.896656 Z" id="形状" fill="#FFFFFF" transform="translate(10.000000, 10.000000) rotate(-90.000000) translate(-10.000000, -10.000000) "></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.4 KiB |
11
frontend/src/assets/legend/map-dwsjhGeshuimuqiang.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dwsjhGeshuimuqiang</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-dwsjhGeshuimuqiang" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M12.6829236,5 C12.8849788,5 13.0487771,5.16398891 13.0487771,5.36627918 L13.0487771,5.73255837 L14.6341461,5.73255837 C14.8225904,5.73256742 14.9802012,5.87588227 14.9982927,6.06367475 L15,6.09883755 L15,13.9011619 C15,14.1034522 14.8362017,14.2674411 14.6341465,14.2674411 L13.0487775,14.2674411 L13.0487775,14.6337203 C13.0487775,14.8223662 12.9056362,14.9801673 12.7180631,14.998289 L12.6829236,15 L5.36585352,15 C5.16379833,15 5,14.8360111 5,14.6337208 L5,5.3662797 C5,5.16398938 5.16379833,5 5.36585351,5 L12.6829236,5 Z M12.3170701,5.73255837 L5.73170701,5.73255837 L5.73170701,14.2674411 L12.3170701,14.2674411 L12.3170701,5.73255837 Z M14.2682926,6.46511674 L13.0487771,6.46511674 L13.0487771,13.5348827 L14.2682926,13.5348827 L14.2682926,6.46511674 Z M10.7785228,9.301827 C10.9365516,9.4045553 10.9908088,9.6106331 10.9038958,9.7779941 L10.8860909,9.8085174 L8.6299981,13.2881696 C8.5212801,13.4586817 8.2950798,13.5086731 8.124767,13.3998281 C7.96414932,13.2971801 7.90912496,13.0882916 7.99829146,12.9196933 L8.0163403,12.88917 L10.2724331,9.4095178 C10.3824826,9.2398641 10.6090663,9.1916492 10.7785228,9.301827 Z M9.8029138,7.10415051 C9.9609427,7.20688016 10.0151999,7.41295798 9.9282868,7.58031896 L9.910482,7.61084226 L7.65438916,11.0904945 C7.5456711,11.2610066 7.31947085,11.3109969 7.14915804,11.2021528 C6.98854035,11.0995048 6.93351598,10.8906163 7.02268249,10.7220169 L7.0407313,10.6914936 L9.2968241,7.2118413 C9.4068737,7.04218763 9.6334574,6.9939727 9.8029138,7.10415051 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
11
frontend/src/assets/legend/map-dwsjhQianzhidangqiang.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dwsjhQianzhidangqiang</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-dwsjhQianzhidangqiang" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M8.0519815,11.9205132 L5.7118534,11.9205132 L5.72330394,13.2987312 L8.0519828,13.2987312 L8.0519828,14 L5,14 L5,9.1469013 L8.0519815,9.1469013 L8.0519815,7.77366828 L5.72870375,7.77366828 L5.72870375,9.1469013 L5,9.1469013 L5,5 L15,5 L15,7.07937399 L14.29493,7.07937399 L14.29493,5.70579619 L11.9480371,5.70579619 L11.9480759,7.07937399 L15,7.07937399 L15,11.2262753 L14.29493,11.2262753 L14.3021599,9.8530423 L11.9480759,9.8530423 L11.9480759,11.2262753 L15,11.2262753 L15,14 L8.0519828,14 L8.0519815,11.9205132 Z M14.2817281,13.2936887 L14.2817281,11.932528 L8.770252,11.932528 L8.770252,13.2936887 L14.2817281,13.2936887 Z M11.2297466,11.2143147 L11.2297466,9.853154 L5.71827055,9.853154 L5.71827055,11.2143147 L11.2297466,11.2143147 Z M14.2817281,9.1467874 L14.2817281,7.78562666 L8.770252,7.78562666 L8.770252,9.1467874 L14.2817281,9.1467874 Z M11.2297466,7.06741336 L11.2297466,5.70625266 L5.71827055,5.70625266 L5.71827055,7.06741336 L11.2297466,7.06741336 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
11
frontend/src/assets/legend/map-dwsjhQita.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dwsjhQita</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-dwsjhQita" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M15.3285024,5.28571322 L10.4556195,3.09751195 C10.1661029,2.96749602 9.8340457,2.96749602 9.5445304,3.09751195 L4.67164751,5.28571322 C4.263666,5.46887583 4,5.88024173 4,6.33364584 L4,12.6662796 C4,13.1196838 4.263666,13.5310496 4.67164751,13.7143621 L9.5443805,15.9025633 C9.6891381,15.9675712 9.8445316,16 9.9999251,16 C10.1553185,16 10.310712,15.967421 10.4554696,15.9025633 L15.3283525,13.7143621 C15.736334,13.5310484 16,13.1196825 16,12.6662796 L16,6.33364584 C16,5.88024173 15.736334,5.46887583 15.3283525,5.28556342 L15.3285024,5.28571322 Z M15.1138759,12.6662873 C15.1138759,12.7632736 15.0574498,12.8511015 14.9702998,12.8902871 L10.0975668,15.0784884 C10.0356754,15.1062631 9.9646253,15.1062631 9.9027342,15.0784884 L5.02985136,12.8902871 L5.02985138,12.8902871 C4.94259532,12.8510798 4.88627531,12.7632546 4.88627531,12.6662873 L4.88627531,6.33365346 C4.88627531,6.2366671 4.94270136,6.14883918 5.02985138,6.10965362 L9.9027342,3.92145235 C9.9646257,3.89367765 10.0356758,3.89367765 10.0975668,3.92145235 L14.9702998,6.10965362 C15.0575977,6.14883854 15.1138759,6.2368169 15.1138759,6.33365346 L15.1138759,12.6662873 L15.1138759,12.6662873 Z M7.17611666,9.4999704 L6.38497002,9.4999704 L6.38497002,9.4999703 C6.38497002,9.9440712 6.73917812,10.3040855 7.17611666,10.3040855 C7.61305521,10.3040855 7.9672633,9.9440712 7.9672633,9.4999703 C7.9672633,9.4999702 7.9672633,9.4999702 7.9672633,9.4999702 L7.9672633,9.4999702 C7.9672633,9.0558693 7.61305521,8.69585494 7.17611666,8.69585494 C6.73917812,8.69585494 6.38497002,9.0558693 6.38497002,9.4999702 L7.17611666,9.4999704 Z M10.0260792,9.4999704 L9.2349326,9.4999704 L9.2349326,9.4999705 C9.2349326,9.9440714 9.5891406,10.3040858 10.0260792,10.3040858 C10.4630177,10.3040858 10.8172258,9.9440714 10.8172258,9.4999705 L10.8172258,9.4999705 C10.8172258,9.0558695 10.4630177,8.69585518 10.0260792,8.69585518 C9.5891406,8.69585518 9.2349326,9.0558695 9.2349326,9.4999705 C9.2349326,9.4999705 9.2349326,9.4999705 9.2349326,9.4999705 L10.0260792,9.4999704 Z M12.8758918,9.4999704 L12.0847452,9.4999704 L12.0847452,9.5000713 C12.0847452,9.9441722 12.4389533,10.3041866 12.8758918,10.3041866 C13.3128304,10.3041866 13.6670385,9.9441722 13.6670385,9.5000713 C13.6670385,9.5000039 13.6670385,9.4999366 13.6670385,9.4998692 L13.6670385,9.4997682 C13.6670385,9.0556672 13.3128304,8.69565288 12.8758918,8.69565288 C12.4389533,8.69565288 12.0847452,9.0556672 12.0847452,9.4997682 C12.0847452,9.4998355 12.0847452,9.4999029 12.0847452,9.4999702 L12.8758918,9.4999704 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
16
frontend/src/assets/legend/map-dxsdzDabiaolv-1.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzDabiaolv-1</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.2-首页-生态流量泄放状况-全国" transform="translate(-158.000000, -836.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-16" transform="translate(142.000000, 73.000000)">
|
||||||
|
<g id="map-dxsdzDabiaolv-1" transform="translate(0.000000, 26.000000)">
|
||||||
|
<circle id="椭圆形" stroke="#008E43" stroke-width="1.25" fill="#00A050" cx="10" cy="10" r="9.375"></circle>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762709 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
16
frontend/src/assets/legend/map-dxsdzDabiaolv-2.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzDabiaolv-2</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.2-首页-生态流量泄放状况-全国" transform="translate(-158.000000, -864.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-16" transform="translate(142.000000, 73.000000)">
|
||||||
|
<g id="map-dxsdzDabiaolv-2" transform="translate(0.000000, 54.000000)">
|
||||||
|
<circle id="椭圆形" stroke="#97BF21" stroke-width="1.25" fill="#A9D22E" cx="10" cy="10" r="9.375"></circle>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762709 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
16
frontend/src/assets/legend/map-dxsdzDabiaolv-3.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzDabiaolv-3</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.2-首页-生态流量泄放状况-全国" transform="translate(-158.000000, -892.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-16" transform="translate(142.000000, 73.000000)">
|
||||||
|
<g id="map-shuikudaxing-guihua" transform="translate(0.000000, 82.000000)">
|
||||||
|
<path d="M10,0.625 C12.5888348,0.625 14.9325848,1.67433262 16.6291261,3.37087393 C18.3256674,5.06741524 19.375,7.41116524 19.375,10 C19.375,12.5888348 18.3256674,14.9325848 16.6291261,16.6291261 C14.9325848,18.3256674 12.5888348,19.375 10,19.375 C7.41116524,19.375 5.06741524,18.3256674 3.37087393,16.6291261 C1.67433262,14.9325848 0.625,12.5888348 0.625,10 C0.625,7.41116524 1.67433262,5.06741524 3.37087393,3.37087393 C5.06741524,1.67433262 7.41116524,0.625 10,0.625 Z" id="路径" stroke="#E69818" stroke-width="1.25" fill="#F7A737"></path>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762708 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
16
frontend/src/assets/legend/map-dxsdzDabiaolv-4.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzDabiaolv-4</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.2-首页-生态流量泄放状况-全国" transform="translate(-158.000000, -920.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-16" transform="translate(142.000000, 73.000000)">
|
||||||
|
<g id="map-shuikudaxing-guihua" transform="translate(0.000000, 110.000000)">
|
||||||
|
<path d="M10,0.625 C12.5888348,0.625 14.9325848,1.67433262 16.6291261,3.37087393 C18.3256674,5.06741524 19.375,7.41116524 19.375,10 C19.375,12.5888348 18.3256674,14.9325848 16.6291261,16.6291261 C14.9325848,18.3256674 12.5888348,19.375 10,19.375 C7.41116524,19.375 5.06741524,18.3256674 3.37087393,16.6291261 C1.67433262,14.9325848 0.625,12.5888348 0.625,10 C0.625,7.41116524 1.67433262,5.06741524 3.37087393,3.37087393 C5.06741524,1.67433262 7.41116524,0.625 10,0.625 Z" id="路径" stroke="#E42A36" stroke-width="1.25" fill="#F8515C"></path>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762708 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
16
frontend/src/assets/legend/map-dxsdzDabiaolv-5.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzDabiaolv-5</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.2-首页-生态流量泄放状况-全国" transform="translate(-158.000000, -948.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-16" transform="translate(142.000000, 73.000000)">
|
||||||
|
<g id="map-shuikudaxing-guihua" transform="translate(0.000000, 138.000000)">
|
||||||
|
<path d="M10,0.625 C12.5888348,0.625 14.9325848,1.67433262 16.6291261,3.37087393 C18.3256674,5.06741524 19.375,7.41116524 19.375,10 C19.375,12.5888348 18.3256674,14.9325848 16.6291261,16.6291261 C14.9325848,18.3256674 12.5888348,19.375 10,19.375 C7.41116524,19.375 5.06741524,18.3256674 3.37087393,16.6291261 C1.67433262,14.9325848 0.625,12.5888348 0.625,10 C0.625,7.41116524 1.67433262,5.06741524 3.37087393,3.37087393 C5.06741524,1.67433262 7.41116524,0.625 10,0.625 Z" id="路径" stroke="#91938E" stroke-width="1.25" fill="#A0A29E"></path>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762708 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
23
frontend/src/assets/legend/map-dxsdzGuihua.svg
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzGuihua</title>
|
||||||
|
<defs>
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 Z" id="path-1"></path>
|
||||||
|
</defs>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.1-首页-水电开发-基地" transform="translate(-158.000000, -868.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-9" transform="translate(142.000000, 74.000000)">
|
||||||
|
<g id="map-shuikudaxing-guihua" transform="translate(0.000000, 57.000000)">
|
||||||
|
<g id="路径" fill-rule="nonzero">
|
||||||
|
<use fill="#9AB596" xlink:href="#path-1"></use>
|
||||||
|
<use fill="#96B0B5" xlink:href="#path-1"></use>
|
||||||
|
<use fill-opacity="0.35" fill="#FFFFFF" xlink:href="#path-1"></use>
|
||||||
|
</g>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762708 18.3333333,10 C18.3333333,11.0577544 18.1362605,12.0694799 17.7768291,13.0004625 L2.22317091,13.0004625 C1.86373946,12.0694799 1.66666667,11.0577544 1.66666667,10 C1.66666667,5.39762708 5.39762708,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
23
frontend/src/assets/legend/map-dxsdzYijian.svg
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzYijian</title>
|
||||||
|
<defs>
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 Z" id="path-1"></path>
|
||||||
|
</defs>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.1-首页-水电开发-全国" transform="translate(-158.000000, -812.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-9" transform="translate(142.000000, 74.000000)">
|
||||||
|
<g id="map-shuikudaxing-yijian" transform="translate(0.000000, 1.000000)">
|
||||||
|
<g id="路径" fill-rule="nonzero">
|
||||||
|
<use fill="#499934" xlink:href="#path-1"></use>
|
||||||
|
<use fill="#71B603" xlink:href="#path-1"></use>
|
||||||
|
<use fill="#78C300" xlink:href="#path-1"></use>
|
||||||
|
</g>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762709 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
22
frontend/src/assets/legend/map-dxsdzZaijian.svg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-dxsdzZaijian</title>
|
||||||
|
<defs>
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 Z" id="path-1"></path>
|
||||||
|
</defs>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="1.1-首页-水电开发-全国" transform="translate(-158.000000, -840.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 737.000000)">
|
||||||
|
<g id="编组-9" transform="translate(142.000000, 74.000000)">
|
||||||
|
<g id="map-shuikudaxing-zaijian" transform="translate(0.000000, 29.000000)">
|
||||||
|
<g id="路径" fill-rule="nonzero">
|
||||||
|
<use fill="#5087B8" xlink:href="#path-1"></use>
|
||||||
|
<use fill="#669ECF" xlink:href="#path-1"></use>
|
||||||
|
</g>
|
||||||
|
<path d="M10,1.66666667 C14.6023729,1.66666667 18.3333333,5.39762709 18.3333333,10 L18.3333333,10 L1.66666667,10 L1.67048694,9.74522729 C1.80514922,5.26072284 5.48285621,1.66666667 10,1.66666667 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
1
frontend/src/assets/legend/map-dzTushi.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1668668004955" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5690" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 0c235.277474 0 426.576842 188.469895 431.077053 422.669474L943.157895 431.157895v26.947368h-0.808421c-11.856842 192.053895-149.423158 350.073263-331.398737 392.81179L512 1024l-98.896842-173.082947C231.100632 808.205474 93.507368 650.159158 81.650526 458.105263H80.842105v-26.947368C80.842105 193.024 273.866105 0 512 0z m61.332211 862.315789h-122.691369L512 969.674105 573.332211 862.315789z m341.989052-404.210526H507.742316v377.263158H512c214.177684 0 389.443368-166.588632 403.321263-377.263158zM485.052632 458.105263H108.678737C121.963789 659.914105 283.297684 821.221053 485.052632 834.506105V458.105263z m190.517894 73.296842c19.402105 0 34.762105 4.581053 46.618948 14.012632 11.317895 9.431579 17.246316 22.366316 17.246315 38.80421 0 21.018947-10.778947 35.301053-31.797894 42.307369 11.317895 3.503158 19.941053 8.892632 25.869473 15.898947 6.467368 7.275789 9.701053 16.707368 9.701053 28.025263 0 17.785263-6.197895 32.336842-18.32421 43.654737-12.934737 11.317895-29.911579 17.246316-50.391579 17.246316-19.671579 0-35.570526-5.12-47.427369-15.090526-13.473684-11.317895-21.018947-27.755789-22.635789-49.313685h29.642105c0.538947 12.934737 4.581053 22.905263 12.665263 29.911579 7.006316 6.467368 16.168421 9.701053 27.486316 9.701053 12.395789 0 22.366316-3.772632 29.911579-10.778947 6.467368-6.467368 9.970526-14.282105 9.970526-23.983158 0-11.317895-3.503158-19.671579-10.509474-25.061053-6.467368-5.389474-16.168421-8.084211-28.833684-8.08421h-14.012631v-22.096843h13.743158c11.856842 0 20.749474-2.694737 26.677894-7.814736 5.928421-5.12 9.162105-12.665263 9.162106-22.366316s-2.964211-16.976842-8.353685-22.096842c-5.928421-5.389474-14.821053-7.814737-26.138947-7.814737-11.587368 0-20.749474 2.964211-27.216842 8.892631-6.467368 5.928421-10.509474 14.821053-11.587369 26.677895h-28.833684c1.616842-19.132632 8.623158-33.953684 21.288421-44.732631 11.856842-10.778947 27.216842-15.898947 46.08-15.898948z m-322.290526 0c18.324211 0 33.684211 5.12 45.541053 15.898948 11.587368 10.778947 17.515789 24.522105 17.515789 41.498947 0 16.707368-6.467368 31.797895-18.863158 45.541053-7.545263 7.814737-20.749474 18.054737-39.882105 30.989473-20.749474 13.743158-33.145263 25.869474-37.187368 36.378948h96.202105V727.578947H284.025263c0-19.132632 6.197895-35.84 19.132632-50.391579 7.006316-8.353684 21.557895-19.941053 43.385263-35.031579 12.934737-9.162105 22.096842-16.437895 27.486316-22.096842 8.623158-9.701053 13.204211-20.210526 13.20421-31.528421 0-10.778947-2.964211-18.863158-8.892631-24.252631-5.928421-5.389474-14.821053-8.084211-26.138948-8.084211-12.126316 0-21.288421 4.042105-27.486316 12.39579-6.467368 8.084211-9.701053 19.671579-10.24 35.301052H285.103158c0.269474-21.557895 6.467368-38.804211 18.593684-51.738947 12.395789-14.012632 29.103158-20.749474 49.583158-20.749474zM512 26.947368C288.768 26.947368 107.789474 207.925895 107.789474 431.157895h808.421052c0-223.232-180.978526-404.210526-404.210526-404.210527z m16.168421 136.623158v192.404211h-29.372632V198.871579c-11.587368 11.048421-26.408421 19.132632-44.193684 24.252632V194.021053c8.623158-2.155789 17.515789-5.928421 27.216842-11.317895 9.701053-5.928421 17.785263-12.126316 24.252632-19.132632h22.096842z" fill="#2F6B98" p-id="5691"></path></svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
18
frontend/src/assets/legend/map-gjszzBudabiao.svg
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gjszzBudabiao</title>
|
||||||
|
<g id="3-水质监测" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="3.1-水质监测-水环境质量状况-全国" transform="translate(-160.000000, -891.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 733.000000)">
|
||||||
|
<g id="编组-9备份-5" transform="translate(142.000000, 129.000000)">
|
||||||
|
<g id="map-gjszz-budabiao" transform="translate(0.000000, 28.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#E42A36" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#E55555" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12.0107258,14.3980672 L12.0107259,14.3980672 C12.8853636,14.4014722 13.7243228,14.0414852 14.337543,13.3996426 L14.337543,13.3996425 C14.9575059,12.7506519 15.3045997,11.8767805 15.3038931,10.9666969 C15.3038931,9.0686913 14.0147945,7.12000089 12.0107259,4 C10.0022357,7.12000089 8.71755984,9.07000145 8.71755984,10.9666969 C8.71819144,11.8799477 9.06620343,12.7555025 9.68390893,13.3996425 L9.68390903,13.3996426 C10.2971232,14.0414853 11.1360883,14.4014722 12.010726,14.3980672 L12.0107258,14.3980672 Z M11.9860933,6.21064557 C12.2507335,6.6363962 12.3966333,7.13169634 12.4080021,7.63999598 C12.4080021,9.32935154 10.7468972,9.61469147 10.7468972,8.57469676 C10.7708979,7.89999656 11.5888214,6.83595134 11.9860978,6.208691 L11.9860978,6.210641 L11.9860933,6.21064557 Z M12.0113574,16.9980487 C10.5473074,16.9980487 8.46428781,16.6080486 7.49730218,15.4640533 L7.49730218,15.4640531 C7.89712499,15.2262292 8.32116543,15.0344071 8.76176614,14.892054 C9.30746915,15.2820541 10.4228711,15.6980547 12.0107153,15.6980547 C13.5985595,15.6980547 14.7139614,15.2820541 15.2842968,14.892054 C15.7251536,15.0350541 16.1502214,15.2274541 16.5512874,15.4660046 C15.5596752,16.6100045 13.47666,17 12.0125997,17 L12.0107049,16.99805 L12.0113574,16.9980487 Z M16.4483475,9.79735777 C16.8462559,9.12135199 17.5391214,9.43335208 17.8890292,8.8093519 C18.310938,8.08135119 17.442488,7.32735148 16.7489904,7.97735217 C16.3750823,8.34655279 16.301185,9.04335197 16.448349,9.79735777 L16.4483475,9.79735777 Z M7.2490831,7.97410116 C6.57958585,7.29810147 5.68712961,8.05210118 6.10904431,8.80610089 C6.48042553,9.42945056 7.15055339,9.11810098 7.54909393,9.79410066 C7.72025822,9.04335045 7.64636049,8.34654974 7.2490831,7.97735522 L7.2490831,7.97410521 L7.2490831,7.97410116 Z" id="形状" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
16
frontend/src/assets/legend/map-gjszzDabiao.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gjszzDabiao</title>
|
||||||
|
<g id="3-水质监测" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="3.1-水质监测-水环境质量状况-全国" transform="translate(-160.000000, -863.000000)">
|
||||||
|
<g id="图例备份-4" transform="translate(16.000000, 733.000000)">
|
||||||
|
<g id="map-gjszz-dabiao" transform="translate(142.000000, 129.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#6AB200" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#78C300" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12.0107258,14.3980672 L12.0107259,14.3980672 C12.8853636,14.4014722 13.7243228,14.0414852 14.337543,13.3996426 L14.337543,13.3996425 C14.9575059,12.7506519 15.3045997,11.8767805 15.3038931,10.9666969 C15.3038931,9.0686913 14.0147945,7.12000089 12.0107259,4 C10.0022357,7.12000089 8.71755984,9.07000145 8.71755984,10.9666969 C8.71819144,11.8799477 9.06620343,12.7555025 9.68390893,13.3996425 L9.68390903,13.3996426 C10.2971232,14.0414853 11.1360883,14.4014722 12.010726,14.3980672 L12.0107258,14.3980672 Z M11.9860933,6.21064557 C12.2507335,6.6363962 12.3966333,7.13169634 12.4080021,7.63999598 C12.4080021,9.32935154 10.7468972,9.61469147 10.7468972,8.57469676 C10.7708979,7.89999656 11.5888214,6.83595134 11.9860978,6.208691 L11.9860978,6.210641 L11.9860933,6.21064557 Z M12.0113574,16.9980487 C10.5473074,16.9980487 8.46428781,16.6080486 7.49730218,15.4640533 L7.49730218,15.4640531 C7.89712499,15.2262292 8.32116543,15.0344071 8.76176614,14.892054 C9.30746915,15.2820541 10.4228711,15.6980547 12.0107153,15.6980547 C13.5985595,15.6980547 14.7139614,15.2820541 15.2842968,14.892054 C15.7251536,15.0350541 16.1502214,15.2274541 16.5512874,15.4660046 C15.5596752,16.6100045 13.47666,17 12.0125997,17 L12.0107049,16.99805 L12.0113574,16.9980487 Z M16.4483475,9.79735777 C16.8462559,9.12135199 17.5391214,9.43335208 17.8890292,8.8093519 C18.310938,8.08135119 17.442488,7.32735148 16.7489904,7.97735217 C16.3750823,8.34655279 16.301185,9.04335197 16.448349,9.79735777 L16.4483475,9.79735777 Z M7.2490831,7.97410116 C6.57958585,7.29810147 5.68712961,8.05210118 6.10904431,8.80610089 C6.48042553,9.42945056 7.15055339,9.11810098 7.54909393,9.79410066 C7.72025822,9.04335045 7.64636049,8.34654974 7.2490831,7.97735522 L7.2490831,7.97410521 L7.2490831,7.97410116 Z" id="形状" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
16
frontend/src/assets/legend/map-gjszzWudabiaoshujv.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gjszzWudabiaoshujv</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="图例备份-5" transform="translate(-318.000000, -301.000000)">
|
||||||
|
<g id="编组-9备份-5" transform="translate(318.000000, 129.000000)">
|
||||||
|
<g id="map-gjszzWudabiaoshujv" transform="translate(0.000000, 172.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#6488B3" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#7399C6" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12.0107258,14.3980672 L12.0107259,14.3980672 C12.8853636,14.4014722 13.7243228,14.0414852 14.337543,13.3996426 L14.337543,13.3996425 C14.9575059,12.7506519 15.3045997,11.8767805 15.3038931,10.9666969 C15.3038931,9.0686913 14.0147945,7.12000089 12.0107259,4 C10.0022357,7.12000089 8.71755984,9.07000145 8.71755984,10.9666969 C8.71819144,11.8799477 9.06620343,12.7555025 9.68390893,13.3996425 L9.68390903,13.3996426 C10.2971232,14.0414853 11.1360883,14.4014722 12.010726,14.3980672 L12.0107258,14.3980672 Z M11.9860933,6.21064557 C12.2507335,6.6363962 12.3966333,7.13169634 12.4080021,7.63999598 C12.4080021,9.32935154 10.7468972,9.61469147 10.7468972,8.57469676 C10.7708979,7.89999656 11.5888214,6.83595134 11.9860978,6.208691 L11.9860978,6.210641 L11.9860933,6.21064557 Z M12.0113574,16.9980487 C10.5473074,16.9980487 8.46428781,16.6080486 7.49730218,15.4640533 L7.49730218,15.4640531 C7.89712499,15.2262292 8.32116543,15.0344071 8.76176614,14.892054 C9.30746915,15.2820541 10.4228711,15.6980547 12.0107153,15.6980547 C13.5985595,15.6980547 14.7139614,15.2820541 15.2842968,14.892054 C15.7251536,15.0350541 16.1502214,15.2274541 16.5512874,15.4660046 C15.5596752,16.6100045 13.47666,17 12.0125997,17 L12.0107049,16.99805 L12.0113574,16.9980487 Z M16.4483475,9.79735777 C16.8462559,9.12135199 17.5391214,9.43335208 17.8890292,8.8093519 C18.310938,8.08135119 17.442488,7.32735148 16.7489904,7.97735217 C16.3750823,8.34655279 16.301185,9.04335197 16.448349,9.79735777 L16.4483475,9.79735777 Z M7.2490831,7.97410116 C6.57958585,7.29810147 5.68712961,8.05210118 6.10904431,8.80610089 C6.48042553,9.42945056 7.15055339,9.11810098 7.54909393,9.79410066 C7.72025822,9.04335045 7.64636049,8.34654974 7.2490831,7.97735522 L7.2490831,7.97410521 L7.2490831,7.97410116 Z" id="形状" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
11
frontend/src/assets/legend/map-gyssFangzirantongdao.svg
Normal file
|
After Width: | Height: | Size: 14 KiB |
11
frontend/src/assets/legend/map-gyssJiyunyuxitong.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gyssJiyunyuxitong</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-gyssJiyunyuxitong" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M10,3 C10.7904039,3 11.4334516,3.65555871 11.4334516,4.46132697 C11.4334516,4.63300525 11.4042603,4.79786534 11.350672,4.95101926 L15.4928103,7.48724827 C15.521589,7.50486583 15.5468213,7.52621036 15.5682698,7.55031267 C15.8198355,7.64628463 16,7.89479872 16,8.18539763 L16,13.5 C16,13.7761424 15.7761424,14 15.5,14 L15.3345427,14 L15.3345561,13.3200863 L15.333,13.32 L15.3330488,14 L4.66545726,14 C4.29852737,14 4,13.6956645 4,13.3215957 L4,8.18539763 C4,8.02655263 4.05382808,7.88028194 4.14386634,7.76454938 C4.17128151,7.71516837 4.21142971,7.67169643 4.26293885,7.64016392 L8.6503913,4.95402625 C8.5961344,4.80002837 8.5665617,4.63413849 8.5665617,4.46134057 C8.5665617,3.65557231 9.2095961,3 10,3 Z M7.314,8.186 L4.66696457,8.18692067 L4.66696457,13.3200727 L7.314,13.32 L7.314,8.186 Z M11.588,8.186 L7.981,8.186 L7.981,13.32 L11.588,13.32 L11.588,8.186 Z M15.3330488,8.18692067 L12.255,8.186 L12.255,13.32 L15.333,13.32 L15.3330488,8.18692067 Z M10,5.92266754 C9.6190463,5.92266754 9.2723263,5.77038231 9.0153355,5.52239156 L9.0041218,5.53089342 L9.0041218,5.53089342 L5.777,7.506 L14.228,7.506 L11.0014273,5.53090702 L10.987702,5.51945162 C10.7304063,5.76917766 10.3824535,5.92266754 10,5.92266754 Z M10,3.67992731 C9.577353,3.67992731 9.233513,4.03045703 9.233513,4.46132697 C9.233513,4.89219691 9.577353,5.24272663 10,5.24272663 C10.4226603,5.24272663 10.7665004,4.89219691 10.7665004,4.46132697 C10.7665004,4.03045703 10.4226603,3.67992731 10,3.67992731 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
12
frontend/src/assets/legend/map-gyssQita.svg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gyssQita</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-gyssQita" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M15.3285024,5.28571322 L10.4556195,3.09751195 C10.1661029,2.96749602 9.8340457,2.96749602 9.5445304,3.09751195 L4.67164751,5.28571322 C4.263666,5.46887583 4,5.88024173 4,6.33364584 L4,12.6662796 C4,13.1196838 4.263666,13.5310496 4.67164751,13.7143621 L9.5443805,15.9025633 C9.6891381,15.9675712 9.8445316,16 9.9999251,16 C10.1553185,16 10.310712,15.967421 10.4554696,15.9025633 L15.3283525,13.7143621 C15.736334,13.5310484 16,13.1196825 16,12.6662796 L16,6.33364584 C16,5.88024173 15.736334,5.46887583 15.3283525,5.28556342 L15.3285024,5.28571322 Z M15.1138759,12.6662873 C15.1138759,12.7632736 15.0574498,12.8511015 14.9702998,12.8902871 L10.0975668,15.0784884 C10.0356754,15.1062631 9.9646253,15.1062631 9.9027342,15.0784884 L5.02985136,12.8902871 L5.02985138,12.8902871 C4.94259532,12.8510798 4.88627531,12.7632546 4.88627531,12.6662873 L4.88627531,6.33365346 C4.88627531,6.2366671 4.94270136,6.14883918 5.02985138,6.10965362 L9.9027342,3.92145235 C9.9646257,3.89367765 10.0356758,3.89367765 10.0975668,3.92145235 L14.9702998,6.10965362 C15.0575977,6.14883854 15.1138759,6.2368169 15.1138759,6.33365346 L15.1138759,12.6662873 L15.1138759,12.6662873 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
<path d="M6.08814777,9.2456397 C7.58083303,7.07722789 9.6742023,6.94489877 12.2244779,8.71942013 L12.46,8.888 L12.5113171,8.84784687 C12.801825,8.60759718 13.1023705,8.33912117 13.4131431,8.04109241 L13.6481431,7.81200897 L14.3518569,8.52249247 C14.0155583,8.85558675 13.686881,9.1591039 13.365774,9.4338634 L13.259,9.522 L13.2744836,9.5356366 C13.5561753,9.7765319 13.8427374,10.0384558 14.1340012,10.3212567 L14.3533279,10.5372694 L13.6466721,11.2448268 C13.2894654,10.8880754 12.9451166,10.5668278 12.6131976,10.2806993 L12.457,10.149 L12.4251125,10.1726885 C10.81852,11.3175227 9.4191754,11.6923101 8.2196907,11.4156278 L8.0496946,11.3716828 C7.07021355,11.0908503 6.45026857,10.471575 6.12162041,9.8838748 L6.05091841,9.7489805 L5.9223952,9.4864272 L6.08814777,9.2456397 Z M11.4712461,9.4016865 C9.661509,8.19164377 8.2776944,8.22037291 7.22833434,9.4056594 L7.106,9.551 L7.17279988,9.636591 L7.26679989,9.7443244 C7.55006535,10.0529475 7.90130098,10.2888448 8.3253054,10.4104135 C9.1654778,10.6513039 10.2064711,10.4349065 11.4685936,9.6190631 L11.63,9.511 L11.4712461,9.4016865 Z" id="路径-7备份" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
11
frontend/src/assets/legend/map-gyssShengyuji.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gyssShengyuji</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-gyssShengyuji" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M11.1785724,4 L11.1785724,5.19999894 L15.5,5.19999894 L15.5,14.8000011 L11.1785724,14.8000011 L11.1785724,16 L8.8214276,16 L8.8214276,14.8000011 L4.5,14.8000011 L4.5,5.19999894 L8.8214276,5.19999894 L8.8214276,4 L11.1785724,4 Z M10.3928579,4.79999973 L9.6071434,4.79999973 L9.6071434,15.1999976 L10.3928579,15.1999976 L10.3928579,4.79999973 Z M8.8214237,5.99999867 L5.28570665,5.99999867 L5.28570665,13.9999987 L8.8214237,13.9999987 L8.8214237,5.99999867 Z M14.7142855,5.99999867 L11.1785684,5.99999867 L11.1785684,13.9999987 L14.7142855,13.9999987 L14.7142855,5.99999867 Z M7.05357171,9.199995 L8.0357145,10.7999997 L6.07143155,10.7999997 L7.05357432,9.199995 L7.05357171,9.199995 Z M13.928575,9.199995 L12.9464322,10.7999997 L11.9642894,9.199995 L13.928575,9.199995 L13.928575,9.199995 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
17
frontend/src/assets/legend/map-gyssYudao.svg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-gyssYudao</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-gyssYudao">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266" fill-rule="nonzero"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050" fill-rule="nonzero"></path>
|
||||||
|
<rect id="矩形" x="4" y="4" width="12" height="12"></rect>
|
||||||
|
<polygon id="矩形" fill="#FFFFFF" fill-rule="nonzero" points="6 4 7 4 6 15 5 15"></polygon>
|
||||||
|
<polygon id="矩形备份-13" fill="#FFFFFF" fill-rule="nonzero" points="13 4 14 4 15 15 14 15"></polygon>
|
||||||
|
<rect id="矩形" fill="#FFFFFF" fill-rule="nonzero" x="6" y="6" width="5" height="1"></rect>
|
||||||
|
<rect id="矩形备份-9" fill="#FFFFFF" fill-rule="nonzero" x="6" y="10" width="5" height="1"></rect>
|
||||||
|
<rect id="矩形备份-14" fill="#FFFFFF" fill-rule="nonzero" x="9" y="8" width="5" height="1"></rect>
|
||||||
|
<rect id="矩形备份-15" fill="#FFFFFF" fill-rule="nonzero" x="9" y="12" width="5" height="1"></rect>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
16
frontend/src/assets/legend/map-liuliangzhan.svg
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
12
frontend/src/assets/legend/map-qixidi.svg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-qixidi</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-qixidi" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M9.2875299,4.00044577 L9.4708807,4.01157403 C10.079569,4.07386324 10.6580992,4.38547759 11.0459125,4.86767649 C11.0499753,4.87247666 11.0499753,4.87887689 11.0540381,4.88367706 C11.5757024,4.76047269 12.1058986,4.69487037 12.6316257,4.69487037 C13.6192939,4.69487037 14.5630837,4.91967833 15.3610188,5.34529341 L15.3610188,5.34529341 C15.7902117,5.57230477 16.039692,6.0305035 15.9948171,6.50853418 L15.9948171,6.50853418 L15.9662312,6.74752888 C15.7014649,8.57548004 14.3943931,10.2945354 12.5048667,11.2759035 C11.4712888,11.8131225 10.3341094,12.0967326 9.2156189,12.0967326 C8.2088555,12.0967326 7.27441014,11.8695245 6.47728759,11.4407093 L6.47728759,11.4407093 L5.76548397,13.71759 C5.71307758,13.8853362 5.55573779,13.9998586 5.37748599,14 L5.37748599,14 C5.19797723,13.9996437 5.04049702,13.8843697 4.98867542,13.7159899 L4.98867542,13.7159899 L4.66283838,12.6579525 C4.4873861,12.086741 4.19756583,11.5558922 3.81046167,11.0966972 L3.81046167,11.0966972 L3.09297012,10.2418669 C3.00646361,10.138692 2.97807321,9.99976709 3.0173194,9.87167999 C3.08212497,9.66017269 3.30880797,9.54043779 3.52362757,9.60424429 L3.52362757,9.60424429 L5.85892851,10.299869 C6.01087746,8.63260987 7.04161136,7.02135279 8.6378879,5.94531467 C8.4550616,5.67370505 8.1418192,5.47809812 7.82288897,5.46009748 C7.73928277,5.45537294 7.65920296,5.42532725 7.59360705,5.37407194 C7.4178479,5.23673707 7.38844232,4.98512316 7.52792861,4.81207453 L7.52792861,4.81207453 L7.63908221,4.6855003 C8.0629432,4.23897877 8.6616087,3.98794291 9.2875299,4.00044577 L9.2875299,4.00044577 Z M4.56979955,10.7518848 C4.91870064,11.2010657 5.19170851,11.7027297 5.37829796,12.2375376 L5.37829796,12.2375376 L5.73419977,11.0986971 L4.56979955,10.7518848 Z M14.9738334,6.04851832 C13.5160986,5.27049076 11.4513805,5.33169293 9.745002,6.21812433 C7.89236242,7.18095844 6.69708488,8.88981897 6.64914376,10.6170802 C7.369073,11.062696 8.2519208,11.2971043 9.2160246,11.2971043 C10.202474,11.2971043 11.2084247,11.0450953 12.1254001,10.5682785 C13.8577806,9.66864659 15.0299001,8.08459045 15.1863182,6.43453199 C15.2013505,6.27412631 15.1200944,6.12612107 14.9738334,6.04851832 Z M12.5471193,7.00015203 C12.6593107,7.00015203 12.7502596,7.0896982 12.7502596,7.20015912 L12.7502596,7.20015912 L12.757221,7.31672421 C12.8163811,7.81381605 13.245331,8.19958052 13.7659611,8.20019454 L13.7659611,8.20019454 L13.8199639,8.20733899 C13.9059424,8.23062423 13.9691014,8.30815087 13.9691014,8.40020163 C13.9691014,8.51066254 13.8781525,8.60020871 13.7659611,8.60020871 L13.7659611,8.60020871 L13.6292051,8.59378797 C12.9090043,8.52582546 12.343979,7.92677309 12.343979,7.20015912 C12.343979,7.0896982 12.434928,7.00015203 12.5471193,7.00015203 Z M13.4535339,5.82330996 C13.6772422,5.82397554 13.8580477,6.00306688 13.8573762,6.22332432 L13.8573762,6.22332432 L13.848831,6.30390862 C13.8103029,6.48613382 13.6461084,6.62333868 13.4498749,6.62333868 C13.2254929,6.62333868 13.0435947,6.44424591 13.0435947,6.22332432 C13.0435947,6.00240275 13.2254929,5.82330996 13.4498753,5.82330996 L13.4498753,5.82330996 L13.4535339,5.82330996 Z M9.2716858,4.80007387 C9.0730247,4.79577072 8.8758631,4.83484098 8.694361,4.91447793 L8.694361,4.91447793 L8.8439478,5.01358899 C9.0365862,5.15454486 9.2012377,5.33000868 9.3289713,5.53129981 L9.3289713,5.53129981 L9.3655365,5.51049903 C9.6319195,5.37240164 9.9066782,5.25056694 10.1882548,5.1456861 L10.1882548,5.1456861 L10.0729016,5.06047982 C9.8344418,4.90058378 9.5520187,4.80521713 9.2716851,4.80007409 L9.2716858,4.80007387 Z" id="形状结合" fill="#FFFFFF" transform="translate(9.500000, 9.000000) rotate(28.000000) translate(-9.500000, -9.000000) "></path>
|
||||||
|
<path d="M15.7360749,13.0769258 L15.7360749,13.0769258 C15.5237688,12.9882108 15.2753241,13.078435 15.1811563,13.2784475 C15.1795493,13.2818608 15.1779935,13.2852954 15.1764896,13.2887502 L15.1764896,13.2887502 C14.840198,14.0426272 13.9188803,14.3969274 13.1186619,14.0801128 C12.7325767,13.9272542 12.4272148,13.6355506 12.2703402,13.2697328 L12.2703402,13.2697328 C12.1808955,13.062827 11.9312245,12.9624252 11.7107542,13.0447022 L11.7107542,13.0447022 C11.6293936,13.0755336 11.5602236,13.1294376 11.5128241,13.1989485 C11.4926386,13.224304 11.4718924,13.2570549 11.4511463,13.2887493 L11.4511463,13.2887493 C11.2061489,13.8373553 10.6362852,14.1944341 10.0045184,14.1952087 C9.3770868,14.1952087 8.8175008,13.8412877 8.5651809,13.3077656 L8.5651809,13.3077656 C8.529251,13.1863283 8.4362865,13.0870694 8.3128622,13.038363 L8.3128622,13.038363 C8.0925471,12.9560259 7.84293983,13.0561663 7.75327617,13.2628648 L7.75327621,13.2628648 C7.51464114,13.825609 6.93643042,14.1948295 6.29319469,14.1952086 L6.29319462,14.1952086 C5.64614816,14.1946236 5.0647235,13.822826 4.82525937,13.2565263 L4.82525937,13.2565263 C4.73779763,13.0514492 4.49317982,12.9489729 4.27296251,13.0251574 L4.27296255,13.0251574 C4.05476329,13.1073545 3.94564929,13.3382367 4.02681182,13.5460015 L4.02681173,13.5460013 C4.51876132,14.7242792 5.93145137,15.3037388 7.18214983,14.8402794 C7.55627732,14.7016403 7.88811769,14.4778372 8.148013,14.1888689 L8.1480132,14.1888691 C9.0177066,15.1549417 10.5540269,15.2738961 11.5794738,14.4545625 C11.6832802,14.3716213 11.7795209,14.280625 11.8671838,14.1825296 L11.8671838,14.1825296 C12.730285,15.1507894 14.263136,15.276548 15.2909172,14.4634283 C15.5864338,14.2296295 15.8185996,13.9328907 15.9682011,13.5977683 C16.0567928,13.404432 15.9541834,13.1667246 15.7360687,13.0769241" id="路径" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.8 KiB |
16
frontend/src/assets/legend/map-rengongchanluanchang.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-rengongchanluanchang</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-rengongchanluanchang" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<g id="ArtificialSpawningGround" transform="translate(4.000000, 6.000000)" fill="#FFFFFF">
|
||||||
|
<path d="M4.875,-6.06329801e-14 C6.20052193,0.031635124 7.00479166,0.586591614 7.78139928,1.3126291 L8.05515121,1.57540777 L8.61505298,2.12982181 L8.91084755,2.41457441 C9.06259105,2.55734796 9.22070666,2.70028721 9.38790696,2.84145638 L10.0440897,2.26437071 L11.4207693,1.02125358 C11.4719645,0.976455146 11.5312715,0.949208968 11.592274,0.93884802 L11.653604,0.934090777 C11.7559705,0.935460372 11.8571055,0.983115763 11.9273035,1.07396885 C11.9845964,1.14831842 12.0048602,1.24331862 11.9984824,1.33543231 L12,1.36 L12,5.36 L11.9955,5.40408343 L12,5.45258889 C11.9997857,5.64105003 11.8722945,5.79762808 11.7043649,5.82991675 L11.6396653,5.83601846 C11.5771941,5.8361519 11.5161673,5.81879286 11.4624901,5.786203 L11.4114814,5.74861997 L10.0448988,4.40532995 L9.38791054,3.82754029 L9.22367758,3.9685796 L8.91231729,4.24788192 L8.2029043,4.91470967 L7.93287643,5.16201473 C7.1701929,5.84267054 6.40668062,6.34248894 5.10199651,6.39418619 L4.87465872,6.39860919 C2.97631236,6.39860919 1.37890958,5.06041081 0.0964286745,3.6346414 C0.0363548099,3.56776296 0.0058603394,3.48430846 0.000769424645,3.39886997 L0.0016491578,3.33464709 C-0.0074444812,3.22774873 0.0213362245,3.11825135 0.0964286745,3.03465279 L0.392777898,2.70692922 L0.695785093,2.37885637 L1.00614337,2.05482229 C2.05369292,0.986315578 3.23531247,0.0582557292 4.66652114,0.00198352565 L4.875,-6.06329801e-14 Z M4.8582233,0.799799827 L4.72265004,0.79988337 C3.53419086,0.824874421 2.56806288,1.4982934 1.00872303,3.18157609 L0.86925,3.3328 L1.02218986,3.49382467 C2.2943978,4.81087303 3.47383182,5.52835945 4.6916774,5.59370499 L4.87465872,5.59860919 C5.89463189,5.59860919 6.5189405,5.34380955 7.29704941,4.68311453 L7.4910242,4.51203552 L8.11423478,3.93068817 L8.57923808,3.50378015 L8.76675,3.3344 L8.61302089,3.19775693 L8.33568029,2.9387243 L7.41005224,2.03086319 C6.50129291,1.1583935 5.87348299,0.824030182 4.8582233,0.799799827 Z M11.25,2.18088343 L10.5035493,2.85576071 L9.95859034,3.33535226 L10.5043607,3.81393893 L11.25,4.54728343 L11.25,2.18088343 Z" id="形状结合"></path>
|
||||||
|
<path d="M8.625,7.2 C8.83210678,7.2 9,7.3790861 9,7.6 C9,7.8209139 8.83210678,8 8.625,8 C8.41789322,8 8.25,7.8209139 8.25,7.6 C8.25,7.3790861 8.41789322,7.2 8.625,7.2 Z M10.125,7.2 C10.3321068,7.2 10.5,7.3790861 10.5,7.6 C10.5,7.8209139 10.3321068,8 10.125,8 C9.91789322,8 9.75,7.8209139 9.75,7.6 C9.75,7.3790861 9.91789322,7.2 10.125,7.2 Z M7.875,6.4 C8.08210678,6.4 8.25,6.5790861 8.25,6.8 C8.25,7.0209139 8.08210678,7.2 7.875,7.2 C7.66789322,7.2 7.5,7.0209139 7.5,6.8 C7.5,6.5790861 7.66789322,6.4 7.875,6.4 Z M9.375,6.4 C9.58210678,6.4 9.75,6.5790861 9.75,6.8 C9.75,7.0209139 9.58210678,7.2 9.375,7.2 C9.16789322,7.2 9,7.0209139 9,6.8 C9,6.5790861 9.16789322,6.4 9.375,6.4 Z M10.875,6.4 C11.0821068,6.4 11.25,6.5790861 11.25,6.8 C11.25,7.0209139 11.0821068,7.2 10.875,7.2 C10.6678932,7.2 10.5,7.0209139 10.5,6.8 C10.5,6.5790861 10.6678932,6.4 10.875,6.4 Z M8.625,5.6 C8.83210678,5.6 9,5.7790861 9,6 C9,6.2209139 8.83210678,6.4 8.625,6.4 C8.41789322,6.4 8.25,6.2209139 8.25,6 C8.25,5.7790861 8.41789322,5.6 8.625,5.6 Z M10.125,5.6 C10.3321068,5.6 10.5,5.7790861 10.5,6 C10.5,6.2209139 10.3321068,6.4 10.125,6.4 C9.91789322,6.4 9.75,6.2209139 9.75,6 C9.75,5.7790861 9.91789322,5.6 10.125,5.6 Z" id="形状结合"></path>
|
||||||
|
<path d="M3.68701886,0.578119922 C4.73228033,2.25053827 4.76961109,3.96078359 3.79901116,5.63590386 L3.68701886,5.82188008 L3.06298114,5.37811992 C3.94377455,3.96885046 3.97765122,2.59719275 3.16461115,1.19081651 L3.06298114,1.02188008 L3.68701886,0.578119922 Z" id="路径-15"></path>
|
||||||
|
<path d="M2.475,3.6 C2.26826515,3.6 2.1,3.42056627 2.1,3.19996463 C2.1,2.97943271 2.26819583,2.8 2.475,2.8 C2.68175193,2.8 2.85,2.97943373 2.85,3.19996463 C2.85,3.42056627 2.68175293,3.6 2.475,3.6 L2.475,3.6 Z" id="路径"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.3 KiB |
14
frontend/src/assets/legend/map-rengongshuiwenjiance.svg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-rengongshuiwenjiance</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-rengongshuiwenjiance" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<g id="路径" transform="translate(4.000000, 3.000000)" fill="#FFFFFF">
|
||||||
|
<path d="M6.2199212,0 C8.3064256,0 10,1.70901982 10,3.81455314 C10,4.21721717 9.9360342,4.60451235 9.8233325,4.96721736 L9.8233325,4.96721736 L8.7816033,4.96721736 C8.9369489,4.61373366 9.0252826,4.22336471 9.0252826,3.81455314 C9.0252826,2.25307433 7.7672791,0.9836068 6.2199212,0.9836068 C4.6725365,0.9836038 3.41454193,2.25306533 3.41454193,3.81147336 C3.41454193,5.04712941 4.2004138,6.0983592 5.2939248,6.4856544 L5.2939248,6.4856544 L5.2939248,7.512294 C5.2726029,7.5184415 5.2512809,7.5215153 5.226913,7.5276628 C4.2156526,7.7612724 3.2866192,8.277666 2.53425923,9.0368875 C1.72098537,9.8575754 1.1879368,10.884221 0.98690134,12 L0.98690134,12 L0,12 C0.35638699,9.6823795 1.90679384,7.7643432 3.99329822,6.8975397 C3.05208676,6.2059412 2.43984241,5.0809469 2.43984241,3.81455314 C2.43984241,1.70901982 4.1334168,0 6.2199212,0 Z" id="形状结合-path"></path>
|
||||||
|
<path d="M8.08549336,7.74111631 L9.05666185,7.74111631 L9.05666187,7.74111631 C9.27200653,7.74881686 9.4403279,7.92943274 9.43261898,8.14453298 C9.42529699,8.3488264 9.26118743,8.51274994 9.05666187,8.52006336 L8.08549337,8.52006336 L8.08549337,9.26058686 L8.08549346,9.26058692 C8.642944,9.58206603 8.83394081,10.2940672 8.51209639,10.8508866 C8.19025196,11.4077044 7.47744168,11.5984844 6.91998957,11.2770053 C6.36253903,10.9555262 6.17154222,10.243525 6.49338664,9.68670563 C6.59568111,9.50972811 6.74281095,9.36276449 6.91998957,9.26058692 L6.91998957,5.5993886 L6.91998957,5.59938844 C6.91056535,5.27790932 7.16383184,5.00966809 7.48567627,5.00025442 C7.80752069,4.9908409 8.07606674,5.24381992 8.08549111,5.56529903 C8.08582415,5.57665982 8.08582415,5.58802788 8.0854911,5.59938859 L8.0854911,6.37833564 L9.05665959,6.37833564 L9.05665961,6.37833564 C9.27200427,6.38603619 9.44032564,6.56665207 9.43261672,6.7817523 C9.42529473,6.98604572 9.26118517,7.14996927 9.05665961,7.15728268 L8.08549111,7.15728268 L8.08549111,7.7411187 L8.08549336,7.74111631 Z M9.83299902,12.9991308 L9.83299901,12.9991308 C9.54507544,13.0033669 9.26390568,12.9119144 9.0336876,12.7391491 L9.0336876,12.7391491 C8.81913534,12.5662135 8.51286991,12.5662135 8.29831766,12.7391491 L8.29831764,12.7391491 C7.82232125,13.0869503 7.17568494,13.0869503 6.69968699,12.7391491 L6.69968699,12.7391491 C6.48568073,12.5662596 6.17982206,12.5662596 5.9658158,12.7391491 L5.96581579,12.7391491 C5.4898194,13.0869503 4.84318309,13.0869503 4.36718513,12.7391491 L4.36718513,12.7391491 C4.26513394,12.6519125 4.13426755,12.6056723 4,12.609408 L4,11.8309602 L4,11.8309602 C4.28792363,11.8267241 4.56909339,11.9181765 4.79931147,12.0909418 L4.79931143,12.0909418 C5.01351951,12.2632625 5.31897532,12.2632625 5.53318262,12.0909418 L5.53318259,12.0909418 C6.00917898,11.7431407 6.6558153,11.7431407 7.13181325,12.0909418 L7.13181325,12.0909418 C7.34618012,12.2633414 7.65181741,12.2633414 7.86618428,12.0909418 L7.8661842,12.0909419 C8.34238867,11.743776 8.98861353,11.743776 9.46481486,12.0909418 L9.46481482,12.0909417 C9.67952665,12.2639562 9.98597278,12.2639562 10.2006846,12.0909418 L10.2006846,12.0909418 C10.4310936,11.9185914 10.712175,11.8273441 11,11.8314594 L11,12.6099072 L11,12.6099072 C10.8655877,12.6062385 10.7345876,12.652463 10.6323111,12.7396484 L10.6323111,12.7396483 C10.4020891,12.9124136 10.1209194,13.0038664 9.83299971,12.99963 L9.83299902,12.9991308 Z M5.95082819,10.3249617 L5.95082815,10.3249604 C5.95923327,10.5891347 6.03506784,10.8467848 6.17113924,11.0734685 L6.17113924,11.0734685 C6.09836171,11.0984897 6.0299317,11.1346858 5.96831347,11.1807545 L5.96831346,11.1807545 C5.49231707,11.5285557 4.84568076,11.5285557 4.3696828,11.1807545 L4.36968281,11.1807545 C4.26811582,11.0949376 4.13847832,11.0494647 4.00549521,11.0530105 L4.00549521,10.2745627 L4.00549521,10.2745627 C4.29341884,10.2703266 4.5745886,10.3617791 4.80480668,10.5345443 L4.80480665,10.5345443 C5.01901472,10.706865 5.32447054,10.706865 5.53867783,10.5345444 L5.53867784,10.5345444 C5.6642704,10.4434033 5.8037844,10.373136 5.95182398,10.3264591 L5.95082819,10.3249617 Z M10.2006887,10.533047 L10.2006886,10.533047 C10.4309106,10.3602818 10.7120803,10.268829 11,10.2730654 L11,11.0530103 L11,11.0530103 C10.8656495,11.0491554 10.7346408,11.0952052 10.632315,11.1822529 L10.632315,11.1822529 C10.1561629,11.5295774 9.50983874,11.5295774 9.03368433,11.1822529 L9.03368436,11.1822529 C8.97278234,11.137023 8.90542047,11.1011936 8.83385531,11.0759647 L8.83385531,11.0759647 C8.97021534,10.8493498 9.04639175,10.5917099 9.05516608,10.3274574 L9.055166,10.3274574 C9.20247654,10.3739425 9.34131078,10.4438703 9.46631353,10.5345441 L9.46631353,10.5345441 C9.68122484,10.7069922 9.98727202,10.7069922 10.2021833,10.5345441 L10.2006887,10.533047 Z" id="形状"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.2 KiB |
16
frontend/src/assets/legend/map-rgszzBudabiao.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-rgszzBudabiao</title>
|
||||||
|
<g id="3-水质监测" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="图例备份-5" transform="translate(-142.000000, -330.000000)">
|
||||||
|
<g id="编组-9备份-5" transform="translate(142.000000, 246.000000)">
|
||||||
|
<g id="map-rgszzBudabiao" transform="translate(0.000000, 84.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#E42A36" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#E55555" fill-rule="nonzero"></path>
|
||||||
|
<path d="M14.4916497,9 C14.6408067,9.00304743 14.7816529,9.06285326 14.876571,9.1637994 C15.4535156,9.75804839 16.3366476,10.756082 17.0190081,11.5175587 C17.9760625,12.5910162 18.2805003,13.9905487 17.7158032,15.1470487 C18.1661762,15.6415339 18.0709806,16.3603359 17.5031807,16.7525497 C17.0266369,17.0817282 16.3528031,17.0825627 15.8751794,16.7545684 C14.542459,17.2533435 12.9940652,16.9767214 11.9944726,16.0612779 C10.6122551,14.8118313 10.7259819,12.9647074 11.9944726,11.5175587 C12.6462144,10.7709382 13.5074758,9.76909533 14.093606,9.16341847 C14.1897613,9.06256054 14.3323748,9.00409022 14.4829015,9.00380929 L14.4916497,9 Z M14.4824696,9.94432759 L14.4824696,9.94813688 C14.0494331,10.4128701 13.5249778,11.0147376 13.0525743,11.5556566 L12.6851494,11.9784876 C11.6711406,13.1317021 11.604787,14.4913257 12.4976383,15.413977 L12.6195377,15.5317917 C13.2867928,16.1437395 14.2852087,16.3771122 15.2066553,16.1495177 L15.4027813,16.0936615 C15.251645,15.4763949 15.703713,14.8692967 16.4125054,14.7376858 C16.5898713,14.7047495 16.7731504,14.7041878 16.9507788,14.736036 C17.3282629,13.8172311 16.9870826,12.7411071 16.3191567,11.9822969 L16.2841638,11.9403947 C15.7111559,11.2928157 15.0161105,10.5119116 14.4824696,9.94432759 Z M13.6238325,13.5703892 C14.1069826,13.5703892 14.4986537,13.9114848 14.4986537,14.3322469 C14.4986537,14.7206427 14.1649221,15.041157 13.7335681,15.0881686 L13.6238325,15.0941046 C13.1406825,15.0941046 12.7490113,14.753009 12.7490113,14.3322469 C12.7490113,13.9438511 13.082743,13.6233369 13.5140969,13.5763252 L13.6238325,13.5703892 Z M12.2199212,3 C14.3064256,3 16,4.70901982 16,6.81455314 C16,7.21721717 15.9360342,7.60451235 15.8233325,7.96721736 L15.8233325,7.96721736 L14.7816033,7.96721736 C14.9369489,7.61373366 15.0252826,7.22336471 15.0252826,6.81455314 C15.0252826,5.25307433 13.7672791,3.9836068 12.2199212,3.9836068 C10.6725365,3.9836038 9.41454193,5.25306533 9.41454193,6.81147336 C9.41454193,8.04712941 10.2004138,9.09835918 11.2939248,9.48565436 L11.2939248,9.48565436 L11.2939248,10.512294 C11.2726029,10.5184415 11.2512809,10.5215153 11.226913,10.5276628 C10.2156526,10.7612724 9.2866192,11.277666 8.53425923,12.0368875 C7.72098537,12.8575754 7.1879368,13.884221 6.98690134,15 L6.98690134,15 L6,15 C6.35638699,12.6823795 7.90679384,10.7643432 9.99329822,9.89753971 C9.05208676,9.20594117 8.43984241,8.0809469 8.43984241,6.81455314 C8.43984241,4.70901982 10.1334168,3 12.2199212,3 Z M15.8108855,13.5700083 C16.0524606,13.5700083 16.2482961,13.7405561 16.2482961,13.9509371 C16.2482961,14.1350206 16.0983595,14.2886066 15.899039,14.3241269 L15.8108855,14.331866 C15.5693105,14.331866 15.3734749,14.1613182 15.3734749,13.9509371 C15.3734749,13.7668537 15.5234115,13.6132676 15.7227321,13.5777474 L15.8108855,13.5700083 Z M14.4986537,12.0466739 C14.7402288,12.0466739 14.9360643,12.2172217 14.9360643,12.4276027 C14.9360643,12.6116861 14.7861277,12.7652722 14.5868072,12.8007924 L14.4986537,12.8085315 C14.2570787,12.8085315 14.0612432,12.6379838 14.0612432,12.4276027 C14.0612432,12.2435193 14.2111798,12.0899332 14.4105003,12.054413 L14.4986537,12.0466739 Z" id="形状结合" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.9 KiB |
16
frontend/src/assets/legend/map-rgszzDabiao.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-rgszzDabiao</title>
|
||||||
|
<g id="3-水质监测" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="图例备份-5" transform="translate(-142.000000, -302.000000)">
|
||||||
|
<g id="编组-9备份-5" transform="translate(142.000000, 246.000000)">
|
||||||
|
<g id="map-rgszzDabiao" transform="translate(0.000000, 56.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#6AB200" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#78C300" fill-rule="nonzero"></path>
|
||||||
|
<path d="M14.4916497,10 C14.6408067,10.0030474 14.7816529,10.0628533 14.876571,10.1637994 C15.4535156,10.7580484 16.3366476,11.756082 17.0190081,12.5175587 C17.9760625,13.5910162 18.2805003,14.9905487 17.7158032,16.1470487 C18.1661762,16.6415339 18.0709806,17.3603359 17.5031807,17.7525497 C17.0266369,18.0817282 16.3528031,18.0825627 15.8751794,17.7545684 C14.542459,18.2533435 12.9940652,17.9767214 11.9944726,17.0612779 C10.6122551,15.8118313 10.7259819,13.9647074 11.9944726,12.5175587 C12.6462144,11.7709382 13.5074758,10.7690953 14.093606,10.1634185 C14.1897613,10.0625605 14.3323748,10.0040902 14.4829015,10.0038093 L14.4916497,10 Z M14.4824696,10.9443276 L14.4824696,10.9481369 C14.0494331,11.4128701 13.5249778,12.0147376 13.0525743,12.5556566 L12.6851494,12.9784876 C11.6711406,14.1317021 11.604787,15.4913257 12.4976383,16.413977 L12.6195377,16.5317917 C13.2867928,17.1437395 14.2852087,17.3771122 15.2066553,17.1495177 L15.4027813,17.0936615 C15.251645,16.4763949 15.703713,15.8692967 16.4125054,15.7376858 C16.5898713,15.7047495 16.7731504,15.7041878 16.9507788,15.736036 C17.3282629,14.8172311 16.9870826,13.7411071 16.3191567,12.9822969 L16.2841638,12.9403947 C15.7111559,12.2928157 15.0161105,11.5119116 14.4824696,10.9443276 Z M13.6238325,14.5703892 C14.1069826,14.5703892 14.4986537,14.9114848 14.4986537,15.3322469 C14.4986537,15.7206427 14.1649221,16.041157 13.7335681,16.0881686 L13.6238325,16.0941046 C13.1406825,16.0941046 12.7490113,15.753009 12.7490113,15.3322469 C12.7490113,14.9438511 13.082743,14.6233369 13.5140969,14.5763252 L13.6238325,14.5703892 Z M12.2199212,4 C14.3064256,4 16,5.70901982 16,7.81455314 C16,8.21721717 15.9360342,8.60451235 15.8233325,8.96721736 L15.8233325,8.96721736 L14.7816033,8.96721736 C14.9369489,8.61373366 15.0252826,8.22336471 15.0252826,7.81455314 C15.0252826,6.25307433 13.7672791,4.9836068 12.2199212,4.9836068 C10.6725365,4.9836038 9.41454193,6.25306533 9.41454193,7.81147336 C9.41454193,9.04712941 10.2004138,10.0983592 11.2939248,10.4856544 L11.2939248,10.4856544 L11.2939248,11.512294 C11.2726029,11.5184415 11.2512809,11.5215153 11.226913,11.5276628 C10.2156526,11.7612724 9.2866192,12.277666 8.53425923,13.0368875 C7.72098537,13.8575754 7.1879368,14.884221 6.98690134,16 L6.98690134,16 L6,16 C6.35638699,13.6823795 7.90679384,11.7643432 9.99329822,10.8975397 C9.05208676,10.2059412 8.43984241,9.0809469 8.43984241,7.81455314 C8.43984241,5.70901982 10.1334168,4 12.2199212,4 Z M15.8108855,14.5700083 C16.0524606,14.5700083 16.2482961,14.7405561 16.2482961,14.9509371 C16.2482961,15.1350206 16.0983595,15.2886066 15.899039,15.3241269 L15.8108855,15.331866 C15.5693105,15.331866 15.3734749,15.1613182 15.3734749,14.9509371 C15.3734749,14.7668537 15.5234115,14.6132676 15.7227321,14.5777474 L15.8108855,14.5700083 Z M14.4986537,13.0466739 C14.7402288,13.0466739 14.9360643,13.2172217 14.9360643,13.4276027 C14.9360643,13.6116861 14.7861277,13.7652722 14.5868072,13.8007924 L14.4986537,13.8085315 C14.2570787,13.8085315 14.0612432,13.6379838 14.0612432,13.4276027 C14.0612432,13.2435193 14.2111798,13.0899332 14.4105003,13.054413 L14.4986537,13.0466739 Z" id="形状结合" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.9 KiB |
16
frontend/src/assets/legend/map-rgszzWudabiaoshujv.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-rgszzWudabiaoshujv</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="图例备份-5" transform="translate(-318.000000, -331.000000)">
|
||||||
|
<g id="编组-9备份-5" transform="translate(318.000000, 129.000000)">
|
||||||
|
<g id="map-rgszzWudabiaoshujv" transform="translate(0.000000, 202.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#6488B3" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#7399C6" fill-rule="nonzero"></path>
|
||||||
|
<path d="M14.4916497,10 C14.6408067,10.0030474 14.7816529,10.0628533 14.876571,10.1637994 C15.4535156,10.7580484 16.3366476,11.756082 17.0190081,12.5175587 C17.9760625,13.5910162 18.2805003,14.9905487 17.7158032,16.1470487 C18.1661762,16.6415339 18.0709806,17.3603359 17.5031807,17.7525497 C17.0266369,18.0817282 16.3528031,18.0825627 15.8751794,17.7545684 C14.542459,18.2533435 12.9940652,17.9767214 11.9944726,17.0612779 C10.6122551,15.8118313 10.7259819,13.9647074 11.9944726,12.5175587 C12.6462144,11.7709382 13.5074758,10.7690953 14.093606,10.1634185 C14.1897613,10.0625605 14.3323748,10.0040902 14.4829015,10.0038093 L14.4916497,10 Z M14.4824696,10.9443276 L14.4824696,10.9481369 C14.0494331,11.4128701 13.5249778,12.0147376 13.0525743,12.5556566 L12.6851494,12.9784876 C11.6711406,14.1317021 11.604787,15.4913257 12.4976383,16.413977 L12.6195377,16.5317917 C13.2867928,17.1437395 14.2852087,17.3771122 15.2066553,17.1495177 L15.4027813,17.0936615 C15.251645,16.4763949 15.703713,15.8692967 16.4125054,15.7376858 C16.5898713,15.7047495 16.7731504,15.7041878 16.9507788,15.736036 C17.3282629,14.8172311 16.9870826,13.7411071 16.3191567,12.9822969 L16.2841638,12.9403947 C15.7111559,12.2928157 15.0161105,11.5119116 14.4824696,10.9443276 Z M13.6238325,14.5703892 C14.1069826,14.5703892 14.4986537,14.9114848 14.4986537,15.3322469 C14.4986537,15.7206427 14.1649221,16.041157 13.7335681,16.0881686 L13.6238325,16.0941046 C13.1406825,16.0941046 12.7490113,15.753009 12.7490113,15.3322469 C12.7490113,14.9438511 13.082743,14.6233369 13.5140969,14.5763252 L13.6238325,14.5703892 Z M12.2199212,4 C14.3064256,4 16,5.70901982 16,7.81455314 C16,8.21721717 15.9360342,8.60451235 15.8233325,8.96721736 L15.8233325,8.96721736 L14.7816033,8.96721736 C14.9369489,8.61373366 15.0252826,8.22336471 15.0252826,7.81455314 C15.0252826,6.25307433 13.7672791,4.9836068 12.2199212,4.9836068 C10.6725365,4.9836038 9.41454193,6.25306533 9.41454193,7.81147336 C9.41454193,9.04712941 10.2004138,10.0983592 11.2939248,10.4856544 L11.2939248,10.4856544 L11.2939248,11.512294 C11.2726029,11.5184415 11.2512809,11.5215153 11.226913,11.5276628 C10.2156526,11.7612724 9.2866192,12.277666 8.53425923,13.0368875 C7.72098537,13.8575754 7.1879368,14.884221 6.98690134,16 L6.98690134,16 L6,16 C6.35638699,13.6823795 7.90679384,11.7643432 9.99329822,10.8975397 C9.05208676,10.2059412 8.43984241,9.0809469 8.43984241,7.81455314 C8.43984241,5.70901982 10.1334168,4 12.2199212,4 Z M15.8108855,14.5700083 C16.0524606,14.5700083 16.2482961,14.7405561 16.2482961,14.9509371 C16.2482961,15.1350206 16.0983595,15.2886066 15.899039,15.3241269 L15.8108855,15.331866 C15.5693105,15.331866 15.3734749,15.1613182 15.3734749,14.9509371 C15.3734749,14.7668537 15.5234115,14.6132676 15.7227321,14.5777474 L15.8108855,14.5700083 Z M14.4986537,13.0466739 C14.7402288,13.0466739 14.9360643,13.2172217 14.9360643,13.4276027 C14.9360643,13.6116861 14.7861277,13.7652722 14.5868072,13.8007924 L14.4986537,13.8085315 C14.2570787,13.8085315 14.0612432,13.6379838 14.0612432,13.4276027 C14.0612432,13.2435193 14.2111798,13.0899332 14.4105003,13.054413 L14.4986537,13.0466739 Z" id="形状结合" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.0 KiB |
16
frontend/src/assets/legend/map-shipinzhan.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-shipinzhan</title>
|
||||||
|
<g id="1-首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="图例备份-5" transform="translate(-318.000000, -406.000000)">
|
||||||
|
<g id="编组-9备份-5" transform="translate(318.000000, 129.000000)">
|
||||||
|
<g id="map-shipinzhan" transform="translate(0.000000, 277.000000)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<path d="M12,1 C17.5228475,1 22,5.48367994 22,11.0145795 C22,15.5981513 18.9251889,19.4625155 14.7285722,20.6518192 C14.0801126,21.2555114 13.512719,21.9434728 13.0416667,22.6982555 L12.4241725,23.6876865 C12.2779707,23.9219506 11.9695421,23.993339 11.7352781,23.8471372 C11.6706797,23.806822 11.6161427,23.7522849 11.5758275,23.6876865 L10.9583333,22.6982555 C10.487281,21.9434728 9.91988742,21.2555114 9.27176537,20.6511428 C5.07481109,19.4625155 2,15.5981513 2,11.0145795 C2,5.48367994 6.4771525,1 12,1 Z" id="路径" fill="#0292C5" fill-rule="nonzero"></path>
|
||||||
|
<path d="M12,2 C7.02976365,2 3,6.03563882 3,11.0145795 C3,14.9819459 5.58136776,18.4404602 9.28412666,19.6110508 L9.77691051,19.7548749 L9.95375471,19.9197807 C10.5649935,20.489756 11.110075,21.1266528 11.5787535,21.8184146 L11.8066784,22.1688117 L12,22.478 L12.1933216,22.1688117 C12.6366411,21.4584664 13.1579737,20.8014467 13.7470472,20.210064 L14.0471815,19.9198993 L14.2237777,19.7554947 L14.4559139,19.6897083 C18.2972752,18.6010825 21,15.0740888 21,11.0145795 C21,6.03563882 16.9702364,2 12,2 Z" id="路径" fill="#13ADE6" fill-rule="nonzero"></path>
|
||||||
|
<path d="M8.55976603,6 L18.5614658,8.8252168 L17.766585,9.87886369 L19,10.215199 L18.1685247,13.3785857 L15.6489027,12.6900156 L14.8546218,13.7448855 L11.273159,12.7230376 L11.273159,14.9532466 L7.77748338,14.9532466 L7.77748338,17 L7,17 L7,12.9071047 L7.77688347,12.9071047 L7.77688347,14.134423 L10.4968755,14.134423 L10.4962756,12.5016678 L7.10498426,11.5348566 L8.55976603,6 Z M15.9896516,8.94752057 L13.3860421,12.475984 L14.5708644,12.8135424 L17.2212668,9.29547476 L15.9896516,8.94690905 L15.9896516,8.94752057 Z M17.2374644,10.5814988 L16.1780233,11.9873805 L17.6250063,12.3824216 L18.0407439,10.801034 L17.2368645,10.5808873 L17.2374644,10.5814988 Z M9.09968505,7.00105626 L8.05944109,10.9575828 L12.5791631,12.2454414 L15.1827726,8.71881254 L9.09968505,7.00044474 L9.09968505,7.00105626 Z" id="形状" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
14
frontend/src/assets/legend/map-ssShuishengshengtai.svg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-ssShuishengshengtai</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-ssShuishengshengtai" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<g id="生态备份" transform="translate(4.000000, 3.000000)">
|
||||||
|
<path d="M9.07043049,4.44449309 C9.14237099,4.40624473 9.20169968,4.34981857 9.24180972,4.28149777 C9.34996602,4.0915655 9.28988908,3.85490556 9.10242073,3.73240454 C9.02134271,3.68276035 8.92642635,3.65729619 8.82992668,3.65930041 C8.737953,3.67013064 8.64826441,3.69720624 8.56657325,3.73781961 C8.42432889,3.80063494 8.28551042,3.86832376 8.14955,3.94196936 C7.51259318,4.30491597 6.97448229,4.8046142 6.5785662,5.40080201 C6.47173969,5.5610894 6.37291061,5.72679262 6.28322256,5.89520249 C5.96493048,5.32317055 5.63640599,4.75630641 5.29779131,4.1948543 C5.22581185,4.08059533 5.15611749,3.96633587 5.08071026,3.85207792 C4.97361307,3.69006269 4.7652706,3.6161708 4.57228466,3.67175475 C4.33933573,3.73710294 4.20637932,3.96908567 4.2753178,4.18990184 C4.28217745,4.2118739 4.29093616,4.23327238 4.30150488,4.25388032 C4.33578072,4.31669566 4.37976814,4.37626201 4.41747162,4.43907722 C4.67796835,4.8598321 4.92989632,5.28545945 5.17325554,5.71596054 C5.36748567,6.05494736 5.55885911,6.39772374 5.75080442,6.73725138 L5.84906204,6.91919954 C5.7330953,7.27659712 5.64112162,7.64049345 5.57428315,8.00872141 L5.50173248,7.94915519 C5.36017643,7.83260821 5.20669678,7.72975193 5.04357829,7.64211863 C4.93675178,7.58471836 4.83506599,7.5305672 4.71053103,7.52785967 L4.68196778,7.52785967 C4.54351228,7.53437855 4.41606973,7.60138135 4.33692321,7.70926574 C4.20109539,7.89395606 4.24574643,8.14766709 4.4374658,8.28056051 C4.48088201,8.30763609 4.52715439,8.3292966 4.57342623,8.35366452 C4.63626532,8.38615516 4.69739079,8.42135347 4.75623091,8.46034234 C5.02186916,8.64012468 5.23609352,8.8789314 5.37890975,9.15564383 L5.41661324,9.23687057 C5.37662466,10.0231455 5.33492234,10.7985863 5.43317995,11.5832463 C5.44860412,11.7050864 5.46688459,11.8280097 5.52343988,11.937936 C5.62496306,12.1491202 5.88786796,12.2423039 6.11065572,12.1460683 C6.21416709,12.1013553 6.29558451,12.0206349 6.33806402,11.9206081 C6.42603886,11.7180834 6.35977213,11.4559909 6.34434794,11.2415528 C6.30835822,10.7368641 6.2558019,10.2365069 6.27179728,9.73019952 C6.29407659,9.07063791 6.37919513,8.41432885 6.52658195,7.76992673 C6.58427965,7.51704089 6.65683032,7.26740378 6.74366301,7.02264041 L6.74937566,7.00910262 C7.02758178,6.2239106 7.46517113,5.48474929 8.14897104,4.95515102 C8.3700512,4.79648862 8.60598273,4.65731991 8.85334105,4.53926987 C8.9259001,4.50730855 8.99787996,4.47698386 9.07043049,4.44449309 Z M10.7692332,2.60630732 C10.493012,2.16354368 10.1502429,1.76045896 9.75149857,1.40948385 C8.75734909,0.522658245 7.44403295,0.0194854095 6.07269272,-2.56908511e-06 L5.92836338,-2.56908511e-06 C5.2502282,0.0099584619 4.58004967,0.136962074 3.95179034,0.374532093 C3.36385435,0.601966888 2.82142508,0.921628119 2.34772204,1.31983443 C1.54124862,2.00001324 0.955481978,2.87987738 0.657692306,3.85840977 C0.318208584,4.97280225 0.35678266,6.15876193 0.76806182,7.25163003 C1.21473007,8.43402116 2.08648203,9.43331426 3.2333293,10.0775735 C3.29505903,10.1033489 3.36211607,10.1159372 3.42965927,10.1144294 C3.65749613,10.1064311 3.83528669,9.92658583 3.82676527,9.71273417 C3.82582023,9.68901757 3.82255578,9.66543268 3.81701307,9.64227678 C3.79414231,9.55620683 3.74128881,9.47977694 3.66684687,9.42512653 L3.63447888,9.40520442 C3.43488535,9.29128234 3.2440962,9.16429696 3.06352902,9.02519086 C2.2655788,8.40700273 1.69358204,7.57006118 1.42761399,6.63155563 C1.08950998,5.43811872 1.2542696,4.16830585 1.88766294,3.0859232 C2.19101684,2.57328577 2.59567019,2.11960353 3.07997089,1.74915796 C4.48074383,0.667772801 6.42823205,0.461130169 8.0508362,1.22172064 C8.60447391,1.48246253 9.09895306,1.8415516 9.50686818,2.27908416 C9.97722982,2.78242514 10.3270052,3.37466586 10.5325619,4.01579117 C10.7978731,4.84903128 10.8185671,5.73357066 10.591461,6.57677311 C10.3784615,7.36224909 9.95296117,8.0827882 9.35617266,8.6685952 C9.11845345,8.89819722 8.85632688,9.10439031 8.57297388,9.28368905 C8.47321682,9.3459455 8.36868479,9.40122877 8.26892686,9.46348521 C8.21472759,9.50206313 8.17047625,9.55159867 8.13945465,9.60841787 C8.08900429,9.71219813 8.08997536,9.83159674 8.14210778,9.93464132 C8.19471743,10.0383611 8.29299176,10.1153202 8.41113357,10.145317 C8.50385802,10.1659595 8.6012547,10.1572029 8.68811852,10.1204144 L8.7231396,10.1024845 C9.79929817,9.51165747 10.6405111,8.60718757 11.1189052,7.52655639 C11.6140013,6.40530204 11.7056657,5.16301171 11.3799718,3.98839686 C11.244164,3.50347827 11.0386931,3.03867539 10.7692332,2.60630732 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
<path d="M5.37317496,12.4594594 L4.98703712,12.1824595 C4.85822995,12.0897148 4.68079575,12.0897148 4.55198858,12.1824595 L4.16585074,12.4594594 C3.76086209,12.7514435 3.20262493,12.7514435 2.79764146,12.4594594 L2.41150363,12.1824595 C2.28269646,12.0897148 2.10526226,12.0897148 1.97645508,12.1824595 L1.47705023,12.5444067 C1.30715491,12.6678131 1.06483549,12.6361197 0.935814252,12.4736177 C0.806793017,12.3111159 0.839928415,12.0793418 1.00982395,11.9559353 L1.50922881,11.5939881 C1.91421738,11.3020042 2.47245454,11.3020042 2.877438,11.5939881 L3.26357584,11.870988 C3.392383,11.9637327 3.5698172,11.9637327 3.69862437,11.870988 L4.08476221,11.5939881 C4.48975078,11.3020041 5.04798794,11.3020041 5.4529714,11.593988 L5.83910924,11.8709879 C5.9679164,11.9637327 6.1453506,11.9637327 6.27415778,11.8709879 L6.66029562,11.593988 C7.06528419,11.3020041 7.62352135,11.3020041 8.02850481,11.593988 L8.41464265,11.8709879 C8.54344981,11.9637326 8.72088401,11.9637326 8.84969118,11.8709879 L9.23582902,11.593988 C9.6408176,11.302004 10.1990548,11.302004 10.6040382,11.5939879 L10.9901761,11.8709878 C11.1600714,11.9943943 11.1932071,12.2261685 11.0641858,12.3886703 C10.9351645,12.5511721 10.6928451,12.5828658 10.5229498,12.4594592 L10.1368119,12.1824593 C10.0080048,12.0897146 9.83057057,12.0897146 9.7017634,12.1824593 L9.31562556,12.4594592 C8.91063691,12.7514432 8.35239975,12.7514432 7.94741629,12.4594592 L7.56127845,12.1824593 C7.43247128,12.0897146 7.25503708,12.0897146 7.12622991,12.1824593 L6.74009207,12.4594592 C6.54369488,12.601572 6.30418214,12.6785113 6.05791611,12.6786103 C5.81077872,12.6790481 5.57027465,12.6020807 5.37317496,12.4594594 Z" id="路径备份-6" fill="#FDFDFC"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 7.6 KiB |
13
frontend/src/assets/legend/map-stllxfssFangliudong.svg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-stllxfssFangliudong</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-stllxfssFangliudong" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M10.0000051,5.00000863 L10.0000053,5.00000863 C12.761427,5.00000863 15.0000303,7.2385545 15.0000303,9.9999837 C15.0000303,12.7614053 12.7614844,15.0000086 10.0000552,15.0000086 C7.23863357,15.0000086 5.00003028,12.7614628 5.00003028,10.0000336 C5.00003028,8.67395108 5.52680276,7.4021674 6.46448093,6.46449422 L6.4644809,6.46449425 C7.40215657,5.52681358 8.6739178,5.00000863 9.9999953,5.00000863 M10,4 L10,4 C6.68628688,4 4,6.68628688 4,10 C4,13.3137131 6.68628688,16 10,16 C13.3137131,16 16,13.3137131 16,10 L16,10 C16,6.68628688 13.3137131,4 10,4 C10,4 10,4 10,4 L10,4 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
<path d="M12.8828653,10.9996808 L12.4308873,10.6566523 L12.4308874,10.6566523 C11.9568446,10.2950677 11.303419,10.2950677 10.8293805,10.6566523 L10.3774026,10.9996808 L10.3774026,10.9996808 C10.2266329,11.1145329 10.0189446,11.1145329 9.8681748,10.9996808 L9.4161969,10.6566523 L9.4161969,10.6566523 C8.9421542,10.2950677 8.2887285,10.2950677 7.81469007,10.6566523 L7.23013216,11.1048766 L7.23013213,11.1048766 C7.03126848,11.2576994 6.99248332,11.5447221 7.14350317,11.7459593 C7.29452344,11.9471964 7.57816088,11.9864445 7.77702453,11.8336222 L8.3615825,11.3853979 L8.3615824,11.3853979 C8.5123521,11.2705458 8.7200405,11.2705458 8.8708102,11.3853979 L9.3227881,11.7284263 L9.3227881,11.7284264 C9.796661,12.0905246 10.4504264,12.0905246 10.924295,11.7284263 L11.3762729,11.3853978 L11.3762729,11.3853978 C11.5270426,11.2705457 11.7347309,11.2705457 11.8855006,11.3853978 L12.3374785,11.7284263 L12.3374786,11.7284263 C12.5308863,11.8881195 12.8156034,11.8589176 12.9734131,11.6632017 C13.1312228,11.4674856 13.1023654,11.1793702 12.9089578,11.0196771 C12.9005015,11.0126948 12.8917981,11.0060249 12.8828647,10.9996802 L12.8828653,10.9996808 Z" id="路径" fill="#FFFFFF"></path>
|
||||||
|
<path d="M12.8828653,8.25557394 L12.4308873,7.91254545 L12.4308874,7.91254547 C11.9570145,7.55044731 11.3032491,7.55044731 10.8293805,7.91254543 L10.3774026,8.25557392 L10.3774026,8.25557391 C10.2266329,8.37042598 10.0189446,8.37042598 9.8681749,8.25557392 L9.416197,7.91254544 L9.416197,7.91254546 C8.9423241,7.5504473 8.2885587,7.5504473 7.81469013,7.91254541 L7.23013221,8.36076973 L7.23013219,8.36076975 C7.03126853,8.51359249 6.99248337,8.80061523 7.14350322,9.0018524 C7.29452349,9.2030895 7.57816094,9.2423376 7.77702459,9.0895153 L8.3615825,8.64129097 L8.3615825,8.64129098 C8.5123522,8.52643891 8.7200405,8.52643891 8.8708102,8.64129096 L9.3227881,8.98431944 L9.322788,8.98431937 C9.7968308,9.345904 10.4502564,9.345904 10.9242949,8.98431952 L11.3762728,8.64129103 L11.3762728,8.64129104 C11.5270425,8.52643897 11.7347308,8.52643897 11.8855005,8.64129101 L12.3374784,8.9843195 L12.3374785,8.98431953 C12.5308862,9.1440127 12.8156033,9.1148109 12.973413,8.91909502 C13.1312227,8.72337895 13.1023653,8.43526359 12.9089578,8.2755704 C12.9005015,8.26858814 12.8917979,8.26191812 12.8828645,8.25557346 L12.8828653,8.25557394 Z" id="路径" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
11
frontend/src/assets/legend/map-stllxfssFangliuguan.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-stllxfssFangliuguan</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-stllxfssFangliuguan" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M15.2,7 L13.6,7 L6.8,7 L4.8,7 C4.3588,7 4,7.38442857 4,7.85714286 L4,12.1428571 C4,12.6155714 4.3588,13 4.8,13 L15.2,13 C15.6412,13 16,12.6155714 16,12.1428571 L16,7.85714286 C16,7.38442857 15.6412,7 15.2,7 Z M4.8,12.1428571 L4.8,7.85714286 L5.2804,7.85714286 L5.2804,12.1428571 L4.8,12.1428571 L4.8,12.1428571 Z M6.0804,12.1428571 L6.0804,7.85714286 L14.0832,7.85714286 L14.0832,12.1428571 L6.0804,12.1428571 Z M14.8832,12.1428571 L14.8832,7.85714286 L15.2,7.85714286 L15.2008,12.1428571 L14.8832,12.1428571 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
11
frontend/src/assets/legend/map-stllxfssFangliukong.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-stllxfssFangliukong</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-stllxfssFangliukong" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M15.3285024,6.28571322 L10.4556195,4.09751195 C10.1661029,3.96749602 9.8340457,3.96749602 9.5445304,4.09751195 L4.67164751,6.28571322 C4.263666,6.46887583 4,6.88024173 4,7.33364584 L4,13.6662796 C4,14.1196838 4.263666,14.5310496 4.67164751,14.7143621 L9.5443805,16.9025633 C9.6891381,16.9675712 9.8445316,17 9.9999251,17 C10.1553185,17 10.310712,16.967421 10.4554696,16.9025633 L15.3283525,14.7143621 C15.736334,14.5310484 16,14.1196825 16,13.6662796 L16,7.33364584 C16,6.88024173 15.736334,6.46887583 15.3283525,6.28556342 L15.3285024,6.28571322 Z M15.1138759,13.6662873 C15.1138759,13.7632736 15.0574498,13.8511015 14.9702998,13.8902871 L10.0975668,16.0784884 C10.0356754,16.1062631 9.9646253,16.1062631 9.9027342,16.0784884 L5.02985136,13.8902871 L5.02985138,13.8902871 C4.94259532,13.8510798 4.88627531,13.7632546 4.88627531,13.6662873 L4.88627531,7.33365346 C4.88627531,7.2366671 4.94270136,7.14883918 5.02985138,7.10965362 L9.9027342,4.92145235 C9.9646257,4.89367765 10.0356758,4.89367765 10.0975668,4.92145235 L14.9702998,7.10965362 C15.0575977,7.14883854 15.1138759,7.2368169 15.1138759,7.33365346 L15.1138759,13.6662873 L15.1138759,13.6662873 Z M12.8314472,11.358709 L12.3794693,11.0156805 L12.3794693,11.0156805 C11.9054266,10.6540959 11.2520009,10.6540959 10.7779624,11.0156805 L10.3259845,11.358709 L10.3259845,11.358709 C10.1752148,11.473561 9.9675265,11.473561 9.8167568,11.358709 L9.3647789,11.0156805 L9.3647789,11.0156805 C8.8907362,10.6540959 8.2373105,10.6540959 7.76327204,11.0156805 L7.17871412,11.4639048 L7.17871409,11.4639048 C6.97985044,11.6167276 6.94106528,11.9037503 7.09208513,12.1049874 C7.2431054,12.3062246 7.52674284,12.3454727 7.7256065,12.1926504 L8.3101644,11.744426 L8.3101644,11.744426 C8.4609341,11.629574 8.6686224,11.629574 8.8193921,11.744426 L9.27137,12.0874545 L9.2713701,12.0874546 C9.745243,12.4495527 10.3990084,12.4495527 10.872877,12.0874545 L11.3248549,11.744426 L11.3248549,11.744426 C11.4756246,11.6295739 11.6833129,11.6295739 11.8340826,11.744426 L12.2860605,12.0874544 L12.2860605,12.0874545 C12.4794682,12.2471477 12.7641854,12.2179458 12.9219951,12.0222298 C13.0798048,11.8265138 13.0509474,11.5383984 12.8575398,11.3787052 C12.8490835,11.371723 12.8403801,11.3650531 12.8314466,11.3587084 L12.8314472,11.358709 Z M12.8314472,8.61460211 L12.3794693,8.27157362 L12.3794693,8.27157364 C11.9055965,7.90947548 11.2518311,7.90947548 10.7779625,8.2715736 L10.3259846,8.61460209 L10.3259846,8.61460208 C10.1752149,8.72945415 9.9675265,8.72945415 9.8167568,8.61460209 L9.3647789,8.2715736 L9.364779,8.27157363 C8.8909061,7.90947547 8.2371407,7.90947547 7.76327209,8.27157358 L7.17871417,8.7197979 L7.17871415,8.71979792 C6.97985049,8.87262066 6.94106533,9.1596434 7.09208518,9.3608806 C7.24310545,9.5621177 7.5267429,9.6013658 7.72560655,9.4485435 L8.3101645,9.0003191 L8.3101644,9.0003192 C8.4609342,8.88546708 8.6686225,8.88546708 8.8193922,9.0003191 L9.2713701,9.3433476 L9.27137,9.3433475 C9.7454127,9.7049322 10.3988384,9.7049322 10.8728769,9.3433477 L11.3248548,9.0003192 L11.3248548,9.0003192 C11.4756245,8.88546714 11.6833128,8.88546714 11.8340825,9.0003192 L12.2860604,9.3433477 L12.2860604,9.3433477 C12.4794681,9.5030409 12.7641853,9.4738391 12.921995,9.2781232 C13.0798047,9.0824071 13.0509473,8.79429176 12.8575398,8.63459857 C12.8490834,8.62761631 12.8403799,8.62094629 12.8314464,8.61460163 L12.8314472,8.61460211 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.8 KiB |
11
frontend/src/assets/legend/map-stllxfssJihefadian.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-stllxfssJihefadian</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-stllxfssJihefadian" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M14.9985007,5.5 C15.5502249,5.5 16,5.92640556 16,6.44946304 L16,13.5562224 C15.994003,14.0792798 15.5442279,14.5 14.9925037,14.5 L5.00149925,14.5 C4.44977511,14.5 4,14.0735944 4,13.550537 L4,6.44377764 C4,5.92640556 4.44977511,5.5 5.00149925,5.5 L14.9985007,5.5 Z M14.9985007,6.21067593 L5.00149925,6.21067593 C4.86356822,6.21067593 4.74962519,6.31869867 4.74962519,6.44946304 L4.74962519,13.5562224 C4.74962519,13.6869867 4.86356822,13.7950095 5.00149925,13.7950095 L14.9985007,13.7950095 C15.1364318,13.7950095 15.2503748,13.6869867 15.2503748,13.5562224 L15.2503748,6.44946304 C15.2503748,6.31869867 15.1364318,6.21067593 14.9985007,6.21067593 Z M11.0344828,7.31933039 C11.1784108,7.45578016 11.1784108,7.68319646 11.0344828,7.81964624 L9.1094453,9.644662 L11.7901049,9.644662 C11.94003,9.644662 12.077961,9.7299431 12.137931,9.8663929 C12.197901,9.9971573 12.161919,10.1506633 12.053973,10.2530006 L9.4872564,12.686355 C9.4152924,12.7545799 9.3193403,12.7886924 9.2233883,12.7886924 C9.1274363,12.7886924 9.0314843,12.7545799 8.9595202,12.686355 C8.8155922,12.5499052 8.8155922,12.3224889 8.9595202,12.1860392 L10.8845577,10.3610234 L8.2038981,10.3610234 C8.053973,10.3610234 7.91604198,10.2757423 7.85607196,10.1392925 C7.79610195,10.0085281 7.83208396,9.8550221 7.94002999,9.7526848 L10.5067466,7.31933039 C10.6506747,7.18288061 10.8905547,7.18288061 11.0344828,7.31933039 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
11
frontend/src/assets/legend/map-stllxfssShengtaijizu.svg
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
11
frontend/src/assets/legend/map-stllxfssXiehongzha.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="20px" height="23px" viewBox="0 0 20 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>map-stllxfssXiehongzha</title>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="map-stllxfssXiehongzha" fill-rule="nonzero">
|
||||||
|
<path d="M10,0 C15.5228475,0 20,4.48367994 20,10.0145795 C20,14.5981513 16.9251889,18.4625155 12.7285722,19.6518192 C12.0801126,20.2555114 11.512719,20.9434728 11.0416667,21.6982555 L10.4241725,22.6876865 C10.2779707,22.9219506 9.9695421,22.993339 9.7352781,22.8471372 C9.6706797,22.806822 9.6161427,22.7522849 9.5758275,22.6876865 L8.9583333,21.6982555 C8.487281,20.9434728 7.91988742,20.2555114 7.27176537,19.6511428 C3.07481109,18.4625155 0,14.5981513 0,10.0145795 C0,4.48367994 4.4771525,0 10,0 Z" id="路径" fill="#0AC266"></path>
|
||||||
|
<path d="M10,1 C5.02976365,1 1,5.03563882 1,10.0145795 C1,13.9819459 3.58136776,17.4404602 7.28412666,18.6110508 L7.77691051,18.7548749 L7.95375471,18.9197807 C8.5649935,19.489756 9.110075,20.1266528 9.5787535,20.8184146 L9.8066784,21.1688117 L10,21.478 L10.1933216,21.1688117 C10.6366411,20.4584664 11.1579737,19.8014467 11.7470472,19.210064 L12.0471815,18.9198993 L12.2237777,18.7554947 L12.4559139,18.6897083 C16.2972752,17.6010825 19,14.0740888 19,10.0145795 C19,5.03563882 14.9702364,1 10,1 Z" id="路径" fill="#00A050"></path>
|
||||||
|
<path d="M14.124294,10.128791 L14.124294,5.39041257 L14.2177027,5.29588898 L14.124294,5.29588898 L14.124294,4 L5.87570601,4 L5.87570601,6.20148892 L5.85762694,6.21978377 L5.87570601,6.21978377 L5.87570601,10.1287873 L4,11.8972925 L4,14.9174774 L6.7796597,14.9174774 L6.7796597,11.3179613 L13.2203403,11.3179613 L13.2203403,14.9174774 L16,14.9174774 L16,11.8972925 L14.124294,10.128791 Z M6.7796597,9.9458425 L13.2203403,9.9458425 L13.2203403,10.4032149 L6.7796597,10.4032149 L6.7796597,9.9458425 Z M13.2203403,4.91474081 L13.2203403,5.44834784 L12.4534851,6.22435566 L13.2203403,6.22435566 L13.2203403,9.1835498 L6.7796597,9.1835498 L6.7796597,6.14811994 L7.62335051,5.29588393 L6.7796597,5.29588393 L6.7796597,4.91474081 L13.2203403,4.91474081 L13.2203403,4.91474081 Z M5.87570601,14.0027299 L4.90395474,14.0027299 L4.90395474,12.2952046 L5.87570601,11.3804609 L5.87570601,14.0042544 L5.87570601,14.0027299 Z M15.0960463,14.0027299 L14.124295,14.0027299 L14.124295,11.3789364 L15.0960463,12.2936801 L15.0960463,14.0012054 L15.0960463,14.0027299 Z M12.8828653,13.9996808 L12.4308873,13.6566523 L12.4308874,13.6566523 C11.9568446,13.2950677 11.303419,13.2950677 10.8293805,13.6566523 L10.3774026,13.9996808 L10.3774026,13.9996808 C10.2266329,14.1145329 10.0189446,14.1145329 9.8681748,13.9996808 L9.4161969,13.6566523 L9.4161969,13.6566523 C8.9421542,13.2950677 8.2887285,13.2950677 7.81469007,13.6566523 L7.23013216,14.1048766 L7.23013213,14.1048766 C7.03126848,14.2576994 6.99248332,14.5447221 7.14350317,14.7459593 C7.29452344,14.9471964 7.57816088,14.9864445 7.77702453,14.8336222 L8.3615825,14.3853979 L8.3615824,14.3853979 C8.5123521,14.2705458 8.7200405,14.2705458 8.8708102,14.3853979 L9.3227881,14.7284263 L9.3227881,14.7284264 C9.796661,15.0905246 10.4504264,15.0905246 10.924295,14.7284263 L11.3762729,14.3853978 L11.3762729,14.3853978 C11.5270426,14.2705457 11.7347309,14.2705457 11.8855006,14.3853978 L12.3374785,14.7284263 L12.3374786,14.7284263 C12.5308863,14.8881195 12.8156034,14.8589176 12.9734131,14.6632017 C13.1312228,14.4674856 13.1023654,14.1793702 12.9089578,14.0196771 C12.9005015,14.0126948 12.8917981,14.0060249 12.8828647,13.9996802 L12.8828653,13.9996808 Z M12.8828653,12.2555739 L12.4308873,11.9125454 L12.4308874,11.9125455 C11.9570145,11.5504473 11.3032491,11.5504473 10.8293805,11.9125454 L10.3774026,12.2555739 L10.3774026,12.2555739 C10.2266329,12.370426 10.0189446,12.370426 9.8681749,12.2555739 L9.416197,11.9125454 L9.416197,11.9125455 C8.9423241,11.5504473 8.2885587,11.5504473 7.81469013,11.9125454 L7.23013221,12.3607697 L7.23013219,12.3607698 C7.03126853,12.5135925 6.99248337,12.8006152 7.14350322,13.0018524 C7.29452349,13.2030895 7.57816094,13.2423376 7.77702459,13.0895153 L8.3615825,12.641291 L8.3615825,12.641291 C8.5123522,12.5264389 8.7200405,12.5264389 8.8708102,12.641291 L9.3227881,12.9843194 L9.322788,12.9843194 C9.7968308,13.345904 10.4502564,13.345904 10.9242949,12.9843195 L11.3762728,12.641291 L11.3762728,12.641291 C11.5270425,12.526439 11.7347308,12.526439 11.8855005,12.641291 L12.3374784,12.9843195 L12.3374785,12.9843195 C12.5308862,13.1440127 12.8156033,13.1148109 12.973413,12.919095 C13.1312227,12.7233789 13.1023653,12.4352636 12.9089578,12.2755704 C12.9005015,12.2685881 12.8917979,12.2619181 12.8828645,12.2555735 L12.8828653,12.2555739 Z M8.064787,6.21979168 L8.9777819,5.2958999 L8.1265575,5.2958999 L7.21356256,6.21979168 L8.064787,6.21979168 Z M9.4207176,6.21979168 L10.3337125,5.2958999 L9.4809815,5.2958999 L8.5679866,6.21979168 L9.4207176,6.21979168 Z M10.6621463,6.21979168 L11.5751412,5.2958999 L10.7239167,5.2958999 L9.8094153,6.21979168 L10.6621463,6.21979168 L10.6621463,6.21979168 Z M12.0180768,6.21979168 L12.9310717,5.2958999 L12.0783407,5.2958999 L11.1653458,6.21979168 L12.0180768,6.21979168 Z" id="形状" fill="#FFFFFF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.2 KiB |
12
frontend/src/assets/legend/map-yeshengdongwu.svg
Normal file
|
After Width: | Height: | Size: 7.9 KiB |