You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

615 lines
23 KiB

3 years ago
package com.fr.plugin.lzljgdmap;
import com.fr.base.Base64;
import com.fr.extended.chart.AbstractChart;
import com.fr.extended.chart.HyperLinkPara;
import com.fr.extended.chart.StringFormula;
import com.fr.extended.chart.ToHyperlinkJSONHelper;
import com.fr.general.ComparatorUtils;
import com.fr.js.NameJavaScript;
import com.fr.js.NameJavaScriptGroup;
import com.fr.json.*;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.lzljgdmap.data.LzljMapDataConfig;
import com.fr.plugin.transform.ExecuteFunctionRecord;
import com.fr.plugin.transform.FunctionRecorder;
import com.fr.stable.AssistUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.web.Repository;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author fr.open
* @date 2022/8/19
*/
@FunctionRecorder
public class LzljMapChart extends AbstractChart<LzljMapDataConfig> {
private static final String ID = "LzljMapChart";
private static final String NAME = "热力点组合图__EK";
private JSONObject titleConf;
private JSONObject mapConf;
private JSONObject pointConf;
private JSONObject heatConf;
private JSONObject toolConf;
private JSONObject labelConf;
private JSONObject tipsConf;
private JSONArray pointStyleCond;
private NameJavaScriptGroup linkNameGroup;
@Override
protected String getChartID() {
return ID;
}
@Override
public String getChartName() {
return NAME;
}
@ExecuteFunctionRecord
@Override
protected void addJSON(LzljMapDataConfig dataConfig, JSONObject jsonObject, Repository repository, JSONPara jsonPara) throws JSONException {
jsonObject.put("titleConf", getTitleConf());
jsonObject.put("mapConf", getMapConf());
jsonObject.put("pointConf", getPointConf());
jsonObject.put("heatConf", getHeatConf());
jsonObject.put("toolConf", getToolConf());
jsonObject.put("labelConf", getLabelConf());
jsonObject.put("tipsConf", getTipsConf());
jsonObject.put("pointStyleCond", getPointStyleCond());
addAutoLinkJSON(jsonObject, jsonPara);
jsonObject.put("data", makeChartData(dataConfig, repository));
}
private JSONArray makeChartData(LzljMapDataConfig dataConfig, Repository repository) {
JSONArray dataArr = JSONFactory.createJSON(JSON.ARRAY);
if (null == dataConfig || null == dataConfig.getDatatype()) {
return dataArr;
}
List<Object> region = dataConfig.getRegion().getValues();
List<Object> area = dataConfig.getArea().getValues();
List<Object> county = dataConfig.getCounty().getValues();
List<Object> layertype = dataConfig.getLayertype().getValues();
List<Object> datatype = dataConfig.getDatatype().getValues();
List<Object> lng = dataConfig.getLng().getValues();
List<Object> lat = dataConfig.getLat().getValues();
List<Object> name = dataConfig.getName().getValues();
List<Object> val = dataConfig.getVal().getValues();
List<Object> desc = dataConfig.getDesc().getValues();
for (int i = 0; i < datatype.size(); i++) {
try {
JSONObject dataObj = JSONFactory.createJSON(JSON.OBJECT);
if(null == layertype || layertype.isEmpty()) {
continue;
}
if(null == datatype || datatype.isEmpty()) {
continue;
}
if(null == lng || lng.isEmpty() || null == lat || lat.isEmpty()) {
continue;
}
if(null != region && !region.isEmpty()) {
dataObj.put("region", region.get(i));
} else {
dataObj.put("region", "");
}
if(null != area && !area.isEmpty()) {
dataObj.put("area", area.get(i));
} else {
dataObj.put("area", "");
}
if(null != county && !county.isEmpty()) {
dataObj.put("county", county.get(i));
} else {
dataObj.put("county", "");
}
if(null != layertype && !layertype.isEmpty()) {
dataObj.put("layertype", layertype.get(i));
} else {
dataObj.put("layertype", "");
}
if(null != datatype && !datatype.isEmpty()) {
dataObj.put("datatype", datatype.get(i));
} else {
dataObj.put("datatype", "");
}
if(null != lng && !lng.isEmpty()) {
dataObj.put("lng", lng.get(i));
} else {
dataObj.put("lng", "");
}
if(null != lat && !lat.isEmpty()) {
dataObj.put("lat", lat.get(i));
} else {
dataObj.put("lat", "");
}
if(null != name && !name.isEmpty()) {
dataObj.put("name", name.get(i));
} else {
dataObj.put("name", "");
}
if(null != val && !val.isEmpty()) {
dataObj.put("val", val.get(i));
} else {
dataObj.put("val", "");
}
if(null != desc && !desc.isEmpty()) {
dataObj.put("desc", desc.get(i));
} else {
dataObj.put("desc", "");
}
dataArr.put(dataObj);
} catch (Exception e) {
FineLoggerFactory.getLogger().error("热力点组合图__EK,数据处理有错误," + e.getMessage(), e);
}
}
return dataArr;
}
@Override
protected String[] requiredJS() {
return new String[]{
"com/fr/plugin/lzljgdmap/web/jstree.js",
"com/fr/plugin/lzljgdmap/web/LzljMapChartWrapper.js"
};
}
@Override
protected String[] requiredCSS() {
return new String[]{
"com/fr/plugin/lzljgdmap/web/LzljMapChart.css"
};
}
@Override
protected String wrapperName() {
return "LzljMapChartWrapper";
}
private void addAutoLinkJSON(JSONObject paramJSONObject, JSONPara paramAbstractChart)
throws JSONException {
ToHyperlinkJSONHelper.addECNameToLinkGroup(paramAbstractChart.ecName, paramAbstractChart.sheetIndex, this.getLinkNameGroup());
paramJSONObject.put("pointLink", ToHyperlinkJSONHelper.addAutoLinkJSON(this.getLinkNameGroup(), hyperLinkParas()));
}
@Override
public NameJavaScriptGroup getHotHyperlink(String s) {
NameJavaScriptGroup retLinkGroup = new NameJavaScriptGroup();
for (int i = 0; i < linkNameGroup.size(); i++) {
NameJavaScript hyperlink = linkNameGroup.getNameHyperlink(i);
if ("pointLink".equals(s)) {
try {
retLinkGroup.addNameHyperlink((NameJavaScript)hyperlink.clone());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
return retLinkGroup;
}
@Override
protected HyperLinkPara[] hyperLinkParas() {
return new HyperLinkPara[]{
new HyperLinkPara() {
@Override
public String getName() {
return "分类";
}
@Override
public String getFormulaContent() {
return "LAYERTYPE";
}
@Override
public String[] getProps() {
return new String[]{"layertype"};
}
},
new HyperLinkPara() {
@Override
public String getName() {
return "类型";
}
@Override
public String getFormulaContent() {
return "DATATYPE";
}
@Override
public String[] getProps() {
return new String[]{"datatype"};
}
},
new HyperLinkPara() {
@Override
public String getName() {
return "名称";
}
@Override
public String getFormulaContent() {
return "POINTNAME";
}
@Override
public String[] getProps() {
return new String[]{"name"};
}
},
new HyperLinkPara() {
@Override
public String getName() {
return "经度";
}
@Override
public String getFormulaContent() {
return "POINTLNG";
}
@Override
public String[] getProps() {
return new String[]{"lng"};
}
},
new HyperLinkPara() {
@Override
public String getName() {
return "纬度";
}
@Override
public String getFormulaContent() {
return "POINTLAT";
}
@Override
public String[] getProps() {
return new String[]{"lat"};
}
},
new HyperLinkPara() {
@Override
public String getName() {
return "描述";
}
@Override
public String getFormulaContent() {
return "POINTDESC";
}
@Override
public String[] getProps() {
return new String[]{"desc"};
}
}
};
}
@Override
protected void readAttr(XMLableReader xmLableReader) {
super.readAttr(xmLableReader);
String jsonStr = xmLableReader.getAttrAsString("titleConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setTitleConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("mapConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setMapConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("pointConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setPointConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("heatConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setHeatConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("toolConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setToolConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("labelConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setLabelConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("tipsConf", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setTipsConf(new JSONObject(jsonStr));
}
jsonStr = xmLableReader.getAttrAsString("pointStyleCond", "");
if (StringUtils.isNotEmpty(jsonStr)) {
this.setPointStyleCond(new JSONArray(new String(Base64.decode(jsonStr))));
}
if (null == linkNameGroup) {
linkNameGroup = (NameJavaScriptGroup)xmLableReader.readXMLObject(new NameJavaScriptGroup());
}
}
@Override
protected void writeAttr(XMLPrintWriter xmlPrintWriter) {
super.writeAttr(xmlPrintWriter);
if (null != titleConf) {
xmlPrintWriter.attr("titleConf", titleConf.toString());
}
if (null != mapConf) {
xmlPrintWriter.attr("mapConf", mapConf.toString());
}
if (null != pointConf) {
xmlPrintWriter.attr("pointConf", pointConf.toString());
}
if (null != heatConf) {
xmlPrintWriter.attr("heatConf", heatConf.toString());
}
if (null != toolConf) {
xmlPrintWriter.attr("toolConf", toolConf.toString());
}
if (null != labelConf) {
xmlPrintWriter.attr("labelConf", labelConf.toString());
}
if (null != tipsConf) {
xmlPrintWriter.attr("tipsConf", tipsConf.toString());
}
if (null != pointStyleCond) {
xmlPrintWriter.attr("pointStyleCond", Base64.encode(pointStyleCond.toString().getBytes()));
}
if (null != linkNameGroup) {
linkNameGroup.writeXML(xmlPrintWriter);
}
}
@Override
public boolean equals(Object o) {
boolean isEq = super.equals(o)
&& o instanceof LzljMapChart
&& ComparatorUtils.equals(((LzljMapChart) o).getTitleConf(), this.titleConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getMapConf(), this.mapConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getPointConf(), this.pointConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getHeatConf(), this.heatConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getToolConf(), this.toolConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getLabelConf(), this.labelConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getTipsConf(), this.tipsConf)
&& ComparatorUtils.equals(((LzljMapChart) o).getPointStyleCond(), this.pointStyleCond)
&& ComparatorUtils.equals(((LzljMapChart) o).getLinkNameGroup(), this.linkNameGroup)
;
return isEq;
}
@Override
public int hashCode() {
return super.hashCode() + AssistUtils.hashCode(new Object[]{this.titleConf, this.mapConf,this.pointConf,this.heatConf,this.toolConf,this.labelConf, this.tipsConf, this.pointStyleCond});
}
@Override
public LzljMapChart clone() throws CloneNotSupportedException {
LzljMapChart chart = (LzljMapChart)super.clone();
if (this.linkNameGroup != null) {
chart.setLinkNameGroup((NameJavaScriptGroup) this.getLinkNameGroup().clone());
}
return chart;
}
@Override
protected List<StringFormula> formulas() {
List<StringFormula> formulaList = new ArrayList<StringFormula>();
return formulaList;
}
@Override
protected String demoImagePath() {
return "com/fr/plugin/lzljgdmap/images/demo.png";
}
public JSONObject getTitleConf() {
if (null == titleConf) {
titleConf = new JSONObject();
titleConf.put("titlevisiable", false);
titleConf.put("titlename", "热力点组合图");
titleConf.put("titleposition", 0);
titleConf.put("titlesize", 13);
titleConf.put("titlestyle", 1);
titleConf.put("titlefamily", "微软雅黑");
titleConf.put("titlecolor", "#ffffff");
titleConf.put("titlebgcolor", "#000000");
titleConf.put("titleBgOpacity", 55);
}
return titleConf;
}
public void setTitleConf(JSONObject titleConf) {
this.titleConf = titleConf;
}
public JSONObject getTipsConf() {
if (null == tipsConf) {
tipsConf = new JSONObject();
tipsConf.put("showPointTips", true);
tipsConf.put("tipBgColor", "#c0c0c0");
tipsConf.put("tipBgOpacity", 70.0);
tipsConf.put("showLayerType", true);
tipsConf.put("showDataType", true);
tipsConf.put("showDesc", true);
tipsConf.put("showLat", true);
tipsConf.put("showLng", true);
tipsConf.put("showName", true);
tipsConf.put("tipfamily", "微软雅黑");
tipsConf.put("tipstyle", 0);
tipsConf.put("tipsize", 12);
tipsConf.put("tipcolor", "#ffcc00");
}
return tipsConf;
}
public void setTipsConf(JSONObject tipsConf) {
this.tipsConf = tipsConf;
}
public JSONArray getPointStyleCond() {
if (null == pointStyleCond || pointStyleCond.size() == 0) {
pointStyleCond = JSONArray.create();
}
return pointStyleCond;
}
public void setPointStyleCond(JSONArray pointStyleCond) {
this.pointStyleCond = pointStyleCond;
}
public JSONObject getMapConf() {
if (null == mapConf) {
mapConf = new JSONObject();
mapConf.put("areaBorderColor", "#808080");
mapConf.put("centerx", "118.796452");
mapConf.put("centery", "32.058908");
mapConf.put("circleBorderColor", "#ff0000");
mapConf.put("circleBorderWidth", 2);
mapConf.put("circleFillColor", "#ff0000");
mapConf.put("circleOpacity", "#575656");
mapConf.put("countryBorderColor", 64);
mapConf.put("mapKey", "grey");
mapConf.put("mapzoom", 10);
mapConf.put("regionBorderColor", "#c0c0c0");
mapConf.put("regionBorderWidth", 3);
mapConf.put("showCircleDetail", true);
}
return mapConf;
}
public void setMapConf(JSONObject mapConf) {
this.mapConf = mapConf;
}
public JSONObject getPointConf() {
if (null == pointConf) {
pointConf = new JSONObject();
pointConf.put("clusterBgOpacity", 100);
pointConf.put("clusterBorderColor", "#3366ff");
pointConf.put("clusterFillColor", "#1fade5");
pointConf.put("clusterMaxZoom", 12);
pointConf.put("clusterPointSize", 32);
pointConf.put("clusterTextColor", "#ffffff");
pointConf.put("pointSize", 32);
pointConf.put("pointimg", "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAD60lEQVR4nO1YMWgUQRTd4mb2orYiJpnZw84gaGEhImIhCJJC0gixEQVJmiAowcJCECSdSRrRoGIhGAVNYWEhpEiCAdOI3u1tjhAbG1OoIMTu/D+5O3f3Ljszyc3MBefBh2V3/p/3/v75M7ue5+Dg4ODg4GAKqwUvX+G0b5n7/WAjNevHe/jMNj8tiHjuVMTprTL358ucVrPNn8ex6GOb946xHNABELUgFr2lLWAM2zqUEfWQoyGjz3cgPGEYC2Pa1iWFckAvlRn53i7xDcOYENu2vkxEgX+j7cJThnPY1tkSEaMXdYtvJAHmsq03AezYpsQ3ktApu0SJ0SOwba2YTwBdwblt6/e22e3XoYw/wJ7/AG3zmq6rxsG5rYqv7fMKpMn7MMidbHXiw3v4DMeoxLR6TigrHXLIhHxcMqGQhAWdGrfEMs+flSW5cijPVeOjj3QVABcdGjMBE4/JkCux3Om0b8jJNXi2BPYLmtmXkNO3rbY29JVMwpgZ1THUBIjKfjzuA+v1MNx/l+HzEb8Kk/OQcYkELBkVjw1LgtTvz91drO4DJ7jzcO+nyA8rIp4EjIGxRH5GP6WRoFBIQBfjPiDsqUJje5HwhVgin3TlaAX+wBCKYPRxfXxYyBcUxKP9KfZ5tO6PsUQ+yMlkAkbECSDDjQT05s4oJqCKPv8SQIYlEjBiLAFAaEgoIPZGdpqAUKriyJCxBGye2ASEAnq7Pl6mZ2RWAMQSjgdOxhJQ3O/tkxDxKu6D3V0hAd/ivhhL5IOcjCVggxQjs1mEQHAlKYLcl377nN6J+2IsQfnPGhWPKHH/ungZkCtxH7j3UmLpPEn4QAyRD3Ixqx5QLJBjqqWMiLj/cIuxP+DN30uPxxjC8gcuZlQ3k5sRkcMDUNrva7DnIJZ53UqMXvh0wNubHid5eJoxo7YFQuafk1nTpYBcVY2NPlL9Ajjo0CYNIDEt1dygUclsVRtbrKDBxmzahMZswqqHnIC+gaPt3TCgA1FvVw8aXuO9jWcKseJnBauAtfpMKQltMJzTtu4GKgVywnQCcE7buhOA8/ojU+JxLtt6m1D75F01kIBVnMu23pYIGbms/e3DHLZ1ZkLxz49q42s6VHUcNC6Fzi39NHQshY4v/TTauRR2RemngeUq/I6XE1/ZNaWfhtS/PFHpm/zbqwNh4N/ctnjwtc2/LYi4P6Ve+v6Ubd5tw+ZPVH9OPgH+nPGfnLoB3/jHQdiahPg1HGubrxbAd/+geN3TQds8tQJEjmYkYNQ2PyOIOJlsbnpk0jYvo4gYfd0QD9e2+RhH1fNyIaOLaHhtm48VFLvzHM02DwcHBwcHh/8UfwE/2Xk+00CsAAAAAABJRU5ErkJggg==");
pointConf.put("pointimgh", 64);
pointConf.put("pointimgw", 64);
pointConf.put("pointimgtype", "png");
}
return pointConf;
}
public void setPointConf(JSONObject pointConf) {
this.pointConf = pointConf;
}
public JSONObject getHeatConf() {
if (null == heatConf) {
heatConf = new JSONObject();
heatConf.put("bgOpacity", 100);
heatConf.put("interval", 4);
heatConf.put("intervalColors", "#0000ff|#0000ff|#00ff00|#ffea00|#ff0000");
heatConf.put("intervalPos", "0.0|0.1849315|0.47945204|0.760274|1.0");
heatConf.put("maxValue", 1);
heatConf.put("radius", 100);
}
return heatConf;
}
public void setHeatConf(JSONObject heatConf) {
this.heatConf = heatConf;
}
public JSONObject getToolConf() {
if (null == toolConf) {
toolConf = new JSONObject();
toolConf.put("toolBgColor", "#808080");
toolConf.put("toolBgOpacity", 80);
toolConf.put("toolBtnColor", "#fc8d51");
toolConf.put("toolcolor", "#ffffff");
toolConf.put("toolfamily", "微软雅黑");
toolConf.put("toolsize", 13);
toolConf.put("toolstyle", 0);
toolConf.put("detailBgColor", "#ffffff");
toolConf.put("detailTitleBgColor", "#ecb562");
toolConf.put("detailBgOpacity", 100);
toolConf.put("showRegion", true);
toolConf.put("showArea", true);
toolConf.put("showName", true);
toolConf.put("showLayerType", true);
toolConf.put("showDataType", true);
toolConf.put("showLng", true);
toolConf.put("showLat", true);
toolConf.put("showVal", true);
toolConf.put("showDesc", true);
toolConf.put("detailsize", 14);
toolConf.put("detailstyle", 0);
toolConf.put("detailfamily", "微软雅黑");
toolConf.put("detailcolor", "#333333");
}
return toolConf;
}
public void setToolConf(JSONObject toolConf) {
this.toolConf = toolConf;
}
public JSONObject getLabelConf() {
if (null == labelConf) {
labelConf = new JSONObject();
labelConf.put("labelBgColor", "transparent");
labelConf.put("labelJsPane", "");
labelConf.put("labelType", 1);
labelConf.put("labelcolor", "#ff0000");
labelConf.put("labelfamily", "微软雅黑");
labelConf.put("labelsize", 10);
labelConf.put("labelstyle", 0);
labelConf.put("showDataType", true);
labelConf.put("showDesc", true);
labelConf.put("showLat", true);
labelConf.put("showLng", true);
labelConf.put("showLayerType", true);
labelConf.put("showName", true);
labelConf.put("showPointLabel", true);
}
return labelConf;
}
public void setLabelConf(JSONObject labelConf) {
this.labelConf = labelConf;
}
public NameJavaScriptGroup getLinkNameGroup() {
return linkNameGroup;
}
public void setLinkNameGroup(NameJavaScriptGroup linkNameGroup) {
this.linkNameGroup = linkNameGroup;
}
}