kgdxpr 7 months ago
commit 3b00f6e054

@ -0,0 +1,58 @@
# 查看DataEase宿主机配置
ulimit -n
输出:1014
# 临时修改大
ulimit -n 10000
#永久修改
vi /etc/security/limits.conf
在最底部加上
* soft nofile 65535
* hard nofile 65535
# 查看mysql的配置信息
vi /opt/dataease2.0/conf/my.cnf
# 以下是修改后的内容
[mysqld]
datadir=/var/lib/mysql
default-storage-engine=INNODB
character_set_server=utf8
#lower_case_table_names=1
table_open_cache=128
max_connections=2000
max_connect_errors=6000
innodb_file_per_table=1
#innodb_buffer_pool_size=1G
max_allowed_packet=64M
transaction_isolation=READ-COMMITTED
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800
innodb_flush_log_at_trx_commit=0
sync_binlog=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
skip-name-resolve
#下面是黄海增加的优化配置信息
innodb_buffer_pool_size = 8192MB
innodb_buffer_pool_instances = 8
max_allowed_packet = 8M
back_log = 1000
[mysql]
default-character-set=utf8
[mysql.server]
default-character-set=utf8
# 重新启动下Mysql
docker restart 349ec45f2c98
# 在线升级dataease
dectl upgrade

@ -0,0 +1,218 @@
### 一、修改目标
由于地图组件是无法通过传递参数进行绘制固定区域地图的,黄海采用的办法是外部链接+$Java$路由,将控制权交给$Java$,获取要绘制哪个城市后,由$Java$修改数据库中的数据来达到改变城市的效果,具体代码见:
```shell
D:\dsWork\YunNanDsBase\src\main\java\com\dsideal\base\DataEase\Controller\DataEaseController.java
public void updateCityArea(String city_name){
...
}
```
这样做后,正常操作是没有问题的,可以从省级页面跳转到任何一个城市页面,城市的地图也能正确展示,但有一个问题:害怕刷新页面!
因为一旦刷新了页面,数据库中的城市数据可能已经被修改,就会造成数据还是这个城市的,但地图已经是别的城市了!
需要解决掉这个问题。
黄海的办法是采用$OpenResty$捕获链接,比如:
```
http://10.10.14.203:8100/#/de-link/X4l1qGNH?attachParams=eyJjaXR5X25hbWUiOiLkuL3msZ/luIIifQ==
```
一旦可以拦截成功,就可以采用前置拦截进行处理,修改数据表中城市为丽江市!
但经实验发现,这样干行不通,原因是:
- 去掉$DataEaseV2$中共享链接中存在的#号,这个#号会导致浏览器不会把#号后面的参数传递给$Nginx$,也就是刷新动作无法捕获。
### 二、解决办法
**配置信任的服务器$HTTPS$验证**
```
git config --global http.sslVerify false
```
**使用$TortoiseGit$下载源码**
```
https://github.com/dataease/dataease.git
```
**$DataEase$ $v2$ 开源代码 $Windows$ 从$0$到$1$环境搭建**
```
https://blog.csdn.net/chajinglong/article/details/142666079
```
**前端项目编译**
- 使用$vscode$ 打开`D:\dsWork\dataease\core\core-frontend\src\router\index.ts`
**$vue3$ $history$模式配置及$nginx$服务器配置**
```
https://blog.csdn.net/jay100500/article/details/130072520
```
**切换到$V2.10.1$版本**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412110806315.png)
$NodeJs$与$NPM$版本
```
<nodeVersion>v16.15.0</nodeVersion>
<npmVersion>8.5.5</npmVersion>
```
### 三、遇到的问题
```
D:\dsWork\DataEaseV2.10.1\core\core-frontend\src\custom-component\v-query\DynamicTimeFiltering.vue
D:\dsWork\DataEaseV2.10.1\core\core-frontend\src\custom-component\v-query\DynamicTimeRangeFiltering.vue
```
**改正前**
```javascript
timeGranularityMultiple: {
type: String as PropType<DatePickType>,
default: () => {
return 'yearrange'
}
}
```
**改正后**
```javascript
timeGranularityMultiple: {
type: Object as PropType<DatePickType>,
default: () => {
return { type: 'yearrange' }
}
}
```
**$core-frontend$前端打包失败**
```
**报错:** on project core-frontend: Failed to run task: 'npm run build:distributed' failed.
**原因:**在core-frontend/package.json中 "build:distributed": "NODE_OPTIONS=--max_old_space_size=4096 vite build --mode distributed && npm run
```
build:flush",而在**$Windows$系统不支持$NODE\_OPTIONS$命令**
**解决方案:**
```
使用npm install cross-env --save-dev 安装cross-env
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111339690.png)
在`core-frontend/package.json`中添加`cross-env`命令
![(https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111339065.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111341686.png)
### 四、去掉$Vue$中的#号
```javascript
D:\dsWork\DataEaseV2.10.1\core\core-frontend\src\router\index.ts
//import { createRouter, createWebHashHistory } from 'vue-router'
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
//history: createWebHashHistory(),
history: createWebHistory(),
routes: routes as RouteRecordRaw[]
})
```
然后前端重新打包,漫长的等待...
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111557806.png)
**配置好的$Nginx$配置文件**
```nginx
upstream dataease {
server 10.10.14.203:8100;
}
location /de2api {
client_max_body_size 600m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_pass http://dataease;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
```
### 五、参考资料
**官方:源码部署**
```
https://dataease.io/docs/v2/installation/deployment_installation/
```
**手把手教你搭建$DataEase$二次开发环境$Windows$**
```
https://segmentfault.com/a/1190000045261128
```
**用户名与密码**
```
admin
DataEase@123456
```

@ -0,0 +1,16 @@
磨憨-磨丁合作区
http://10.10.14.203:8100/#/de-link/OxwyzDTr?attachParams=eyJhcmVhX25hbWUiOiLno6jmhqgt56Oo5LiB5ZCI5L2c5Yy6In0=
经开区
http://10.10.14.203:8100/#/de-link/OxwyzDTr?attachParams=eyJhcmVhX25hbWUiOiLnu4/lvIDljLoifQ==
阳宗海区
http://10.10.14.203:8100/#/de-link/OxwyzDTr?attachParams=eyJhcmVhX25hbWUiOiLpmLPlrpfmtbfljLoifQ==
工具页面:
https://www.toolhelper.cn/EncodeDecode/Base64
加码示例:
{"area_name":"阳宗海区"}

@ -1,5 +0,0 @@
因为用户可能打开了一个市州的页面,然后他又打开了另一个市州的页面,
这时,他回来刷新了第一个市州的页面,就会造成地图显示错误。
原因我们在通过JAVA将城市动态修改的如果再点一次数据就改动了。
办法采用OpenResty开发一个前置的拦截器发现固定的链接访问时就解析base64,然后先写入数据库正确的市州代码,再让其它访问即可。

@ -0,0 +1,19 @@
#省管理员
sys1
12345678
大屏数据维护
大屏数据省代录市数据
大屏数据省代录区数据
#市州管理员
shi1
200187
大屏数据维护
大屏数据市级代录
#县区管理员
qu1
358526
大屏数据维护

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,5 @@
将文件156810100_full.json覆盖掉
/opt/dataease/data/custom/full/156/156810100_full.json
香港特别行政区

@ -0,0 +1,8 @@
location /de2api/map/156/156810100.json {
root /usr/local/openresty/nginx/html;
}
因为204的Ningx是使用Docker部署的所以需要进入Docker拷贝文件
拷贝到的文件位置:
/usr/local/openresty/nginx/html/de2api/map/156/156810100.json

@ -51,10 +51,7 @@
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="uploadData"><a
class="woo-theme-color">上传数据</a></span>
<i class="woo-tool-text-delimiter"></i>
<span class="woo-tool-span woo-tool-text-span" lay-event="downloadSample"><a
class="woo-theme-color">下载样例模板</a></span>
class="woo-theme-color">全量更新</a></span>
<i class="woo-tool-text-delimiter"></i>
<span class="woo-tool-span woo-tool-text-span" lay-event="downloadData"><a
class="woo-theme-color">下载数据</a></span>
@ -123,7 +120,7 @@
content: './upload.html?id=' + obj.data.id
});
} else if (obj.event === 'downloadSample') {
} else if (obj.event === 'downloadSample') {
window.location.href = "/dsBase/dataease/downSampleExcel?id=" + obj.data.id;
} else if (obj.event === 'downloadData') {
window.location.href = "/dsBase/dataease/downloadExcel?id=" + obj.data.id;

@ -51,18 +51,14 @@
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="uploadData"><a
class="woo-theme-color">上传数据</a></span>
<i class="woo-tool-text-delimiter"></i>
class="woo-theme-color">全量更新</a></span>
<i class="woo-tool-text-delimiter"></i>
<span class="woo-tool-span woo-tool-text-span" lay-event="downloadData"><a
class="woo-theme-color">下载数据</a></span>
<i class="woo-tool-text-delimiter"></i>
<span class="woo-tool-span woo-tool-text-span" lay-event="mod"><a
class="woo-theme-color">数据维护</a></span>
</script>
</div>
</div>
@ -111,7 +107,7 @@
content: './upload_proxy_city.html?id=' + obj.data.id
});
} else if (obj.event === 'downloadData') {
}else if (obj.event === 'downloadData') {
window.location.href = "/dsBase/dataease/downloadExcelByCity?id=" + obj.data.id;
} else {
window.location.href = "./dataMod_proxy_city.html?id=" + obj.data.id

@ -51,7 +51,7 @@
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="uploadData"><a
class="woo-theme-color">上传数据</a></span>
class="woo-theme-color">全量更新</a></span>
<i class="woo-tool-text-delimiter"></i>
<span class="woo-tool-span woo-tool-text-span" lay-event="downloadData"><a
class="woo-theme-color">下载数据</a></span>
@ -60,9 +60,6 @@
class="woo-theme-color">数据维护</a></span>
</script>
</div>
</div>

@ -68,135 +68,115 @@
</head>
<body class="layui-form">
<div class="layui-card" style="margin-top: 50px;">
<div class="layui-card-body">
<!-- <button type="button" class="layui-btn" id="getData">获取数据</button> -->
<div class="fix">
<button type="button" class="layui-btn" id="saveData">保存</button>
<button type="button" class="layui-btn" id="back">返回</button>
</div>
<table id="ID-table-demo-data"></table>
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="add"><a
class="woo-theme-color">向下插入</a></span>
<span class="woo-tool-span woo-tool-text-span" lay-event="delete"><a
class="woo-theme-color">删除</a></span>
</script>
<div class="layui-card" style="margin-top: 50px;">
<div class="layui-card-body">
<!-- <button type="button" class="layui-btn" id="getData">获取数据</button> -->
<div class="fix">
<button type="button" class="layui-btn" id="back">返回</button>
</div>
</div>
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="../js/layui/layui.js"></script>
<script>
layui.use('table', function () {
var table = layui.table;
var $ = layui.jquery;
var util = layui.util;
var id = GetQueryString("id");
// var id = "3";
<table id="ID-table-demo-data"></table>
var _data = [];
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="delete"><a
class="woo-theme-color">删除</a></span>
</script>
$.ajax({
type: "GET",
async: false,
url: '/dsBase/dataease/getDataSetContent?id=' + id,
dataType: "json",
success: function (res) {
_data = res.data;
}
});
</div>
</div>
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="../js/layui/layui.js"></script>
<script>
layui.use('table', function () {
var table = layui.table;
var $ = layui.jquery;
var id = GetQueryString("id");
var _data = [];
$.ajax({
type: "GET",
async: false,
url: '/dsBase/dataease/getDataSetContent?id=' + id,
dataType: "json",
success: function (res) {
_data = res.data;
}
});
var _emptyData = {};
var _cols = [];
let keys = Object.keys(_data[0]);
var _emptyData = {};
var _cols = [];
let keys = Object.keys(_data[0]);
keys.forEach((item, index) => {
_emptyData[item] = "";
var _obj = { field: item, title: item, edit: 'text', align: 'center', expandedMode: 'tips' }
_cols.push(_obj);
});
_cols.push({ title: '操作', align: 'center', toolbar: '#table-bar' });
table.render({
elem: '#ID-table-demo-data',
id: 'ID-table-demo-data',
page: false,
cols: [_cols],
data: _data
});
keys.forEach((item, index) => {
_emptyData[item] = "";
var _obj = {field: item, title: item, edit: 'text', align: 'center', expandedMode: 'tips'}
_cols.push(_obj);
});
_cols.push({title: '操作', align: 'center', toolbar: '#table-bar'});
table.render({
elem: '#ID-table-demo-data',
id: 'ID-table-demo-data',
page: true //开启分页
, limit: 10 //每页显示的条数
, limits: [10, 20, 30]
, request: {
pageName: 'pageNumber' //页码的参数名称默认page
, limitName: 'pageSize' //每页数据量的参数名默认limit
},
cols: [_cols],
data: _data
});
table.on('tool(ID-table-demo-data)', function (obj) {
if (obj.event === 'add') {
_data.splice(obj.index + 1, 0, _emptyData);
table.cache['ID-table-demo-data'] = _data;
table.renderData('ID-table-demo-data');
} else {
layer.confirm('确定删除吗?', { icon: 0 }, function (index) {
var cacheData = table.cache['ID-table-demo-data'];
cacheData.splice(obj.index, 1)
table.renderData('ID-table-demo-data');
layer.close(index);
});
}
table.on('tool(ID-table-demo-data)', function (obj) {
layer.confirm('确定删除吗?', {icon: 0}, function (index) {
var cacheData = table.cache['ID-table-demo-data'];
cacheData.splice(obj.index, 1)
table.renderData('ID-table-demo-data');
layer.close(index);
});
});
$("#saveData").click(function () {
const cleanedData = table.cache['ID-table-demo-data'].map(item => {
const { LAY_NUM, LAY_INDEX, ...rest } = item;
return rest;
});
$.ajax({
type: "POST",
dataType: "json",
async: false,
url: '/dsBase/dataease/saveDataSet',
data: {
"id": id,
"data": JSON.stringify(cleanedData)
},
success: function (res) {
if (res.success) {
layer.msg("保存成功!", {
icon: 1,
time: 1300
});
} else {
layer.msg(res.message, {
icon: 2,
time: 2000
});
}
table.on('edit(ID-table-demo-data)', function(obj){
var value = obj.value // 得到修改后的值
,data = obj.data // 得到所在行所有数据
,field = obj.field; // 得到字段名
// 发送Ajax请求
$.ajax({
url: '/dsBase/dataease/saveDataSet',
type: 'POST',
data: {
dataset_id:id,
id: data.id,
field: field,
value: value
},
success: function(res){
if(res.success){
layer.msg('保存成功');
} else {
layer.msg('保存失败');
}
});
}
});
});
$("#back").click(function () {
history.back();
});
$("#back").click(function () {
history.back();
});
function GetQueryString(name, istop) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (typeof (istop) != "undefined") r = top.location.search.substr(1).match(reg);
function GetQueryString(name, istop) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (typeof (istop) != "undefined") r = top.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
});
</script>
if (r != null) return unescape(r[2]);
return null;
}
});
</script>
</body>

@ -160,7 +160,7 @@
type: "POST",
dataType: "json",
async: false,
url: '/dsBase/dataease/saveDataSetByCity',
url: '/dsBase/dataease/saveDataSet',
data: {
"id": id,
"data": JSON.stringify(cleanedData)

@ -68,135 +68,118 @@
</head>
<body class="layui-form">
<div class="layui-card" style="margin-top: 50px;">
<div class="layui-card-body">
<!-- <button type="button" class="layui-btn" id="getData">获取数据</button> -->
<div class="fix">
<button type="button" class="layui-btn" id="saveData">保存</button>
<button type="button" class="layui-btn" id="back">返回</button>
</div>
<table id="ID-table-demo-data"></table>
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="add"><a
class="woo-theme-color">向下插入</a></span>
<span class="woo-tool-span woo-tool-text-span" lay-event="delete"><a
class="woo-theme-color">删除</a></span>
</script>
<div class="layui-card" style="margin-top: 50px;">
<div class="layui-card-body">
<!-- <button type="button" class="layui-btn" id="getData">获取数据</button> -->
<div class="fix">
<button type="button" class="layui-btn" id="saveData">保存</button>
<button type="button" class="layui-btn" id="back">返回</button>
</div>
<table id="ID-table-demo-data"></table>
<script type="text/html" id="table-bar">
<span class="woo-tool-span woo-tool-text-span" lay-event="delete"><a
class="woo-theme-color">删除</a></span>
</script>
</div>
</div>
</div>
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="../js/layui/layui.js"></script>
<script>
layui.use('table', function () {
var table = layui.table;
var $ = layui.jquery;
var id = GetQueryString("id");
var _data = [];
$.ajax({
type: "GET",
async: false,
url: '/dsBase/dataease/getDataSetContentByProvince?id=' + id,
dataType: "json",
success: function (res) {
_data = res.data;
}
});
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="../js/layui/layui.js"></script>
<script>
layui.use('table', function () {
var table = layui.table;
var $ = layui.jquery;
var util = layui.util;
var id = GetQueryString("id");
var _emptyData = {};
var _cols = [];
let keys = Object.keys(_data[0]);
// var id = "3";
keys.forEach((item, index) => {
_emptyData[item] = "";
var _obj = {field: item, title: item, edit: 'text', align: 'center'}
_cols.push(_obj);
});
_cols.push({title: '操作', align: 'center', toolbar: '#table-bar'});
table.render({
elem: '#ID-table-demo-data',
id: 'ID-table-demo-data',
page: false,
cols: [_cols],
data: _data
});
var _data = [];
table.on('tool(ID-table-demo-data)', function (obj) {
layer.confirm('确定删除吗?', {icon: 0}, function (index) {
var cacheData = table.cache['ID-table-demo-data'];
cacheData.splice(obj.index, 1)
table.renderData('ID-table-demo-data');
layer.close(index);
});
});
$("#saveData").click(function () {
const cleanedData = table.cache['ID-table-demo-data'].map(item => {
const {LAY_NUM, LAY_INDEX, ...rest} = item;
return rest;
});
$.ajax({
type: "GET",
async: false,
url: '/dsBase/dataease/getDataSetContentByProvince?id=' + id,
type: "POST",
dataType: "json",
async: false,
url: '/dsBase/dataease/saveDataSet',
data: {
"id": id,
"data": JSON.stringify(cleanedData)
},
success: function (res) {
_data = res.data;
}
});
var _emptyData = {};
var _cols = [];
let keys = Object.keys(_data[0]);
keys.forEach((item, index) => {
_emptyData[item] = "";
var _obj = { field: item, title: item, edit: 'text', align: 'center' }
_cols.push(_obj);
});
_cols.push({ title: '操作', align: 'center', toolbar: '#table-bar' });
table.render({
elem: '#ID-table-demo-data',
id: 'ID-table-demo-data',
page: false,
cols: [_cols],
data: _data
});
table.on('tool(ID-table-demo-data)', function (obj) {
if (obj.event === 'add') {
_data.splice(obj.index + 1, 0, _emptyData);
table.cache['ID-table-demo-data'] = _data;
table.renderData('ID-table-demo-data');
} else {
layer.confirm('确定删除吗?', { icon: 0 }, function (index) {
var cacheData = table.cache['ID-table-demo-data'];
cacheData.splice(obj.index, 1)
table.renderData('ID-table-demo-data');
layer.close(index);
});
}
});
$("#saveData").click(function () {
const cleanedData = table.cache['ID-table-demo-data'].map(item => {
const { LAY_NUM, LAY_INDEX, ...rest } = item;
return rest;
});
$.ajax({
type: "POST",
dataType: "json",
async: false,
url: '/dsBase/dataease/saveDataSetByProvince',
data: {
"id": id,
"data": JSON.stringify(cleanedData)
},
success: function (res) {
if (res.success) {
layer.msg("保存成功!", {
icon: 1,
time: 1300
});
} else {
layer.msg(res.message, {
icon: 2,
time: 2000
});
}
if (res.success) {
layer.msg("保存成功!", {
icon: 1,
time: 1300
});
} else {
layer.msg(res.message, {
icon: 2,
time: 2000
});
}
});
}
});
});
$("#back").click(function () {
history.back();
});
$("#back").click(function () {
history.back();
});
function GetQueryString(name, istop) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (typeof (istop) != "undefined") r = top.location.search.substr(1).match(reg);
function GetQueryString(name, istop) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (typeof (istop) != "undefined") r = top.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
});
</script>
if (r != null) return unescape(r[2]);
return null;
}
});
</script>
</body>

@ -29,7 +29,6 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
import com.jfinal.plugin.redis.RedisPlugin;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;

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

Loading…
Cancel
Save