Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
zjntServer
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
node_server
zjntServer
Commits
baa4449d
Commit
baa4449d
authored
Apr 21, 2025
by
lixinming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
787061ff
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
420 additions
and
82 deletions
+420
-82
.gitignore
.gitignore
+3
-2
serverConfig.xml
serverConfig.xml
+1
-0
cgq.ts
src/biz/chuanGanQi/cgq.ts
+229
-24
cyszhgl.ts
src/biz/cyszhgl.ts
+80
-35
getData.ts
src/biz/getData.ts
+3
-1
serverConfig.ts
src/config/serverConfig.ts
+3
-1
dataInterface.ts
src/data/interface/dataInterface.ts
+94
-0
main.ts
src/main.ts
+6
-2
http_server.ts
src/net/http_server.ts
+1
-1
router.ts
src/routers/router.ts
+0
-16
No files found.
.gitignore
View file @
baa4449d
...
...
@@ -7,4 +7,5 @@
*test*
*.log
*.zip
*.xlsx
\ No newline at end of file
*.xlsx
/public
\ No newline at end of file
serverConfig.xml
View file @
baa4449d
...
...
@@ -14,4 +14,5 @@
<hqmdzmytgl>
https://openapi-cn.growatt.com/v1/plant/power
</hqmdzmytgl>
<hqdzsblb>
https://openapi-cn.growatt.com/v1/device/list
</hqdzsblb>
</dataCenterInterface>
<xcxInterface>
http://101.89.111.202:13281/zjnt/xcx/dataout/zzzmj
</xcxInterface>
</config>
src/biz/chuanGanQi/cgq.ts
View file @
baa4449d
This diff is collapsed.
Click to expand it.
src/biz/cyszhgl.ts
View file @
baa4449d
import
{
systemConfig
}
from
'../config/serverConfig'
;
import
{
dataCenterInterfaceConfig
,
systemConfig
}
from
'../config/serverConfig'
;
import
{
cyszhglTableData
,
zzqkTableData
}
from
'../data/table/cyszhglData'
;
import
{
doubleYBarCharPackage
,
keyValuePackage
,
onceYBarChartPackage
,
rankPackage
,
tablePackage
}
from
'../dataPackage/inFrontOut'
;
import
{
getDoubleYBarChartOut
,
getKeyValueOut
,
getOnceYBarChartOut
,
getTableOut
}
from
'../dataPackage/out'
;
import
{
post
}
from
'../util/request'
;
/* 产业数字化管理 */
...
...
@@ -225,61 +226,105 @@ export function zzfb(req, res) {
* @param req
* @param res
*/
export
function
zzqk
(
req
,
res
)
{
export
async
function
zzqk
(
req
,
res
)
{
let
type
=
req
.
body
.
type
||
"全部"
;
//表格暂时无法切换下拉数据
let
ret
:
any
=
{};
let
excelData
=
zzqkTableData
();
let
zzzljbqkPackageData
=
keyValuePackage
(
excelData
[
'种植种类基本情况'
].
dataList
);
let
interfaceDataInfoRes
:
any
=
await
post
(
dataCenterInterfaceConfig
.
xcxzzcq
,
{},
{});
let
interfaceDataInfo
=
interfaceDataInfoRes
.
body
.
data
;
let
zzzljbqkPackageData
=
keyValuePackage
(
interfaceDataInfo
.
zhongZhiTypeList
);
ret
[
'zzzljbqk'
]
=
getKeyValueOut
(
'种植种类基本情况'
,
zzzljbqkPackageData
);
let
zzzwPackageData
=
keyValuePackage
(
excelData
[
'种植作物'
].
data
List
);
let
zzzwPackageData
=
keyValuePackage
(
interfaceDataInfo
.
zhongZhiZuoWu
List
);
ret
[
'zzzw'
]
=
getKeyValueOut
(
'种植作物'
,
zzzwPackageData
);
let
nzqkPackageData
=
keyValuePackage
(
excelData
[
'农资情况'
].
data
List
);
let
nzqkPackageData
=
keyValuePackage
(
interfaceDataInfo
.
nongZi
List
);
ret
[
'nzqk'
]
=
getKeyValueOut
(
'农资情况'
,
nzqkPackageData
);
let
flyyqkPackageData
=
onceYBarChartPackage
(
excelData
[
'肥料用药情况'
]
,
''
,
''
);
let
flyyqkPackageData
=
onceYBarChartPackage
(
interfaceDataInfo
.
feiliaoyongyaoqingkuang
,
''
,
''
);
ret
[
'flyyqk'
]
=
getOnceYBarChartOut
(
'肥料用药情况'
,
flyyqkPackageData
);
let
nscz
=
excelData
[
'农事操作'
];
let
allnscz
=
getAllChart
(
excelData
[
'农事操作'
]);
nscz
.
unshift
(
allnscz
);
let
nsczPackageData
=
onceYBarChartPackage
(
nscz
,
''
,
''
);
let
nsczPackageData
=
onceYBarChartPackage
([{
name
:
"操作记录"
,
data
:
interfaceDataInfo
.
nongShiList
}],
''
,
''
);
ret
[
'nscz'
]
=
getOnceYBarChartOut
(
'农事操作'
,
nsczPackageData
);
ret
[
'nscz'
][
"chartList"
][
0
].
total
=
interfaceDataInfo
.
nongShiCount
;
let
zwcljn
=
excelData
[
'作物产量(今年)'
];
let
allzwcljn
=
getAllChart
(
excelData
[
'作物产量(今年)'
]);
zwcljn
.
unshift
(
allzwcljn
);
let
zwcljnPackageData
=
onceYBarChartPackage
(
zwcljn
,
''
,
''
);
// let zwcljn = excelData['作物产量(今年)'];
// let allzwcljn = getAllChart(excelData['作物产量(今年)']);
// zwcljn.unshift(allzwcljn);
// let zwcljnPackageData2 = onceYBarChartPackage(zwcljn, '', '' );
// ret['zwcljn2'] = getOnceYBarChartOut('作物产量(今年)', zwcljnPackageData2);
let
zwcljnPackageData
=
onceYBarChartPackage
(
interfaceDataInfo
.
chanLiangList
,
''
,
''
);
ret
[
'zwcljn'
]
=
getOnceYBarChartOut
(
'作物产量(今年)'
,
zwcljnPackageData
);
ret
[
'zwcljn'
][
"chartList"
][
0
].
total
=
interfaceDataInfo
.
chanLiangStatisList
[
0
].
value
;
let
zwclqn
=
excelData
[
'作物产量(去年)'
];
let
allzwclqn
=
getAllChart
(
excelData
[
'作物产量(去年)'
]);
zwclqn
.
unshift
(
allzwclqn
);
let
zwclqnPackageData
=
onceYBarChartPackage
(
zwclqn
,
''
,
''
);
ret
[
'zwclqn'
]
=
getOnceYBarChartOut
(
'作物产量(去年)'
,
zwclqnPackageData
);
let
thisYear
=
0
;
let
lastYear
=
0
;
ret
[
'zwcljn'
].
chartList
.
forEach
(
info
=>
{
let
{
thisChartTitle
,
total
}
=
info
;
if
(
thisChartTitle
==
type
)
thisYear
=
total
;
})
ret
[
'zwclqn'
].
chartList
.
forEach
(
info
=>
{
let
{
thisChartTitle
,
total
}
=
info
;
if
(
thisChartTitle
==
type
)
lastYear
=
total
;
})
let
tongbi
=
(((
thisYear
-
lastYear
)
/
lastYear
)
*
100
/
100
).
toFixed
(
2
)
+
"%"
;
// let zwclqnPackageData = onceYBarChartPackage([interfaceDataInfo.chanLiangList[1]], '', '' );
// ret['zwclqn'] = getOnceYBarChartOut('作物产量(去年)', zwclqnPackageData);
// ret['zwclqn']["chartList"][0].total = 0;
let
tongbi
=
interfaceDataInfo
.
chanLiangStatisList
[
1
].
value
;
ret
[
"zwcltb"
]
=
{
title
:
"作物产量同比"
,
dataList
:
tongbi
};
let
zwxs
=
excelData
[
'作物销售'
];
let
allzwxs
=
getAllChart
(
excelData
[
'作物销售'
]);
zwxs
.
unshift
(
allzwxs
);
let
zwxsPackageData
=
onceYBarChartPackage
(
zwxs
,
''
,
''
);
let
zwxsPackageData
=
onceYBarChartPackage
([{
name
:
"作物销售"
,
data
:
interfaceDataInfo
.
lastMonthXiaoShouList
}],
''
,
''
);
ret
[
'zwxs'
]
=
getOnceYBarChartOut
(
'作物销售'
,
zwxsPackageData
);
ret
[
'zwxs'
][
"chartList"
][
0
].
total
=
interfaceDataInfo
.
lastMonthXiaoShou
;
res
.
send
(
ret
);
// let zzzljbqkPackageData = keyValuePackage(excelData['种植种类基本情况'].dataList);
// ret['zzzljbqk'] = getKeyValueOut('种植种类基本情况', zzzljbqkPackageData);
// let zzzwPackageData = keyValuePackage(excelData['种植作物'].dataList);
// ret['zzzw'] = getKeyValueOut('种植作物', zzzwPackageData);
// let nzqkPackageData = keyValuePackage(excelData['农资情况'].dataList);
// ret['nzqk'] = getKeyValueOut('农资情况', nzqkPackageData);
// let flyyqkPackageData = onceYBarChartPackage(excelData['肥料用药情况'], '', '' );
// ret['flyyqk'] = getOnceYBarChartOut('肥料用药情况', flyyqkPackageData);
// let nscz = excelData['农事操作'];
// let allnscz = getAllChart(excelData['农事操作']);
// nscz.unshift(allnscz);
// let nsczPackageData = onceYBarChartPackage(nscz, '', '' );
// ret['nscz'] = getOnceYBarChartOut('农事操作', nsczPackageData);
// let zwcljn = excelData['作物产量(今年)'];
// let allzwcljn = getAllChart(excelData['作物产量(今年)']);
// zwcljn.unshift(allzwcljn);
// let zwcljnPackageData = onceYBarChartPackage(zwcljn, '', '' );
// ret['zwcljn'] = getOnceYBarChartOut('作物产量(今年)', zwcljnPackageData);
// let zwclqn = excelData['作物产量(去年)'];
// let allzwclqn = getAllChart(excelData['作物产量(去年)']);
// zwclqn.unshift(allzwclqn);
// let zwclqnPackageData = onceYBarChartPackage(zwclqn, '', '' );
// ret['zwclqn'] = getOnceYBarChartOut('作物产量(去年)', zwclqnPackageData);
// let thisYear = 0;
// let lastYear = 0;
// ret['zwcljn'].chartList.forEach( info => {
// let {thisChartTitle, total} = info;
// if (thisChartTitle == type) thisYear = total;
// })
// ret['zwclqn'].chartList.forEach( info => {
// let {thisChartTitle, total} = info;
// if (thisChartTitle == type) lastYear = total;
// })
// let tongbi = (((thisYear - lastYear) / lastYear) * 100 / 100).toFixed(2) + "%";
// ret["zwcltb"] = {title:"作物产量同比", dataList:tongbi};
// let zwxs = excelData['作物销售'];
// let allzwxs = getAllChart(excelData['作物销售']);
// zwxs.unshift(allzwxs);
// let zwxsPackageData = onceYBarChartPackage(zwxs, '', '' );
// ret['zwxs'] = getOnceYBarChartOut('作物销售', zwxsPackageData);
// res.send(ret);
}
...
...
src/biz/getData.ts
View file @
baa4449d
...
...
@@ -3,7 +3,7 @@
*/
import
{
systemConfig
}
from
"../config/serverConfig"
;
import
{
getGuangFu
}
from
"../data/interface/dataInterface"
;
import
{
get
2
,
get
GuangFu
}
from
"../data/interface/dataInterface"
;
import
{
getKeyValueOut
,
getOnceYBarChartOut
}
from
"../dataPackage/out"
;
import
{
get
}
from
"../util/request"
;
...
...
@@ -152,11 +152,13 @@ let guangfuData = {
],
},
};
/**
* 初始化接口数据
*/
export
async
function
guangfuInit
()
{
await
getGuangFu
();
await
get2
();
console
.
log
();
}
...
...
src/config/serverConfig.ts
View file @
baa4449d
...
...
@@ -17,6 +17,7 @@ export let dataCenterInterfaceConfig = {
hqmdzmytgl
:
""
,
//获取某电站某一天功率数据
hqmdzjbxx
:
""
,
//获取某电站基本信息
hqdzsblb
:
""
,
//获取电站设备列表
xcxzzcq
:
""
,
//小程序种植情况
}
...
...
@@ -35,7 +36,7 @@ export async function initConfig() {
checkConfig
(
integralConfig
,
configInfo
.
config
);
let
{
port
,
imgPath
,
token
,
userName
,
plantId
,
dataCenterInterface
}
=
configInfo
.
config
;
let
{
port
,
imgPath
,
token
,
userName
,
plantId
,
dataCenterInterface
,
xcxInterface
}
=
configInfo
.
config
;
systemConfig
.
port
=
parseInt
(
port
[
0
]);
systemConfig
.
imgPath
=
imgPath
[
0
];
...
...
@@ -51,6 +52,7 @@ export async function initConfig() {
dataCenterInterfaceConfig
.
hqmdzmytgl
=
dataCenterInterface
[
0
].
hqmdzmytgl
[
0
];
dataCenterInterfaceConfig
.
hqmdzjbxx
=
dataCenterInterface
[
0
].
hqmdzjbxx
[
0
];
dataCenterInterfaceConfig
.
hqdzsblb
=
dataCenterInterface
[
0
].
hqdzsblb
[
0
];
dataCenterInterfaceConfig
.
xcxzzcq
=
xcxInterface
[
0
];
// console.log(dataCenterInterfaceConfig.hqmdzsjgl);
}
...
...
src/data/interface/dataInterface.ts
View file @
baa4449d
...
...
@@ -4,12 +4,106 @@ import { get } from "../../util/request";
import
{
BizError
}
from
"../../util/bizError"
;
import
{
guangfuTableData
}
from
"../table/tableData"
;
export
async
function
get2
()
{
let
nowTimeMs
=
new
Date
().
valueOf
();
let
nowTime
=
moment
().
format
(
"YYYY-MM-DD"
);
let
result
=
{
jbqk
:[],
//基本情况
nhfx
:{
count
:[],
charData
:[],
dayData
:[]},
//能耗分析
trsy
:{
count
:[],
charData
:[]},
//投入使用
ztsj
:[],
//整体数据
xyfxfd
:{
count
:[],
chartData
:[]},
//效益分析-发电
xyfx
:{
count
:[],
chartData
:{}},
//效益分析
jnjp
:{
count
:[],
chartData
:[]}
//节能减排
};
// let userquery = {user_name:systemConfig.userName};
let
header
=
{
token
:
systemConfig
.
token
};
//基本情况
let
jbqkData
=
{
安全运行天数
:
0
,
组件总功率
:
'1024kWp'
,
//万雷提供的常量 1577号是 849kWp 2195号是 175kWp
设备总数
:
0
};
//能耗分析
let
nhfxData
=
{
"年用电量"
:
0
,
"光伏发电量"
:
0
}
//870225 //这个是卉绿的
//870209 //这个是农投的
let
idList
=
[
870225
,
870209
];
let
发电功率
Map
=
{};
//{电站:{月份:1}}
for
(
let
i
=
0
;
i
<
idList
.
length
;
i
++
)
{
let
plant_id
=
idList
[
i
];
发电功率
Map
[
plant_id
]
=
{};
//获取站点下的设备列表
let
nthqdzsblb
:
any
=
await
get
(
dataCenterInterfaceConfig
.
hqdzsblb
,
{
plant_id
,
perpage
:
100
},
header
);
let
deviceList
=
nthqdzsblb
.
body
?
nthqdzsblb
.
body
.
devices
||
[]
:
[];
jbqkData
.
设备总数
=
deviceList
.
length
;
let
t
=
await
get
(
"https://openapi-cn.growatt.com/v1/plant/data"
,
{
plant_id
},
header
)
let
hqmdzsjgl
:
any
=
await
get
(
dataCenterInterfaceConfig
.
hqmdzsjgl
,
{
plant_id
},
header
);
if
(
!
hqmdzsjgl
.
body
)
{
console
.
log
(
"接口请求失败-获取某电站数据概览:hqmdzsjgl"
);
hqmdzsjgl
.
body
=
{
total_energy
:
0
};
}
nhfxData
[
"光伏发电量"
]
+=
hqmdzsjgl
.
body
.
total_energy
;
let
hqmdzjbxx
:
any
=
await
get
(
dataCenterInterfaceConfig
.
hqmdzjbxx
,
{
plant_id
:
systemConfig
.
plantId
},
header
);
if
(
!
hqmdzjbxx
.
body
)
{
console
.
log
(
"接口请求失败-获取某电站基本信息:hqmdzjbxx"
,
hqmdzjbxx
);
hqmdzjbxx
=
{
body
:{
create_date
:
0
}};
}
if
(
hqmdzjbxx
.
body
.
create_date
)
{
let
diffDay
=
moment
(
hqmdzjbxx
.
body
.
create_date
).
diff
(
moment
(),
'days'
);
jbqkData
.
安全运行天数
=
Math
.
max
(
jbqkData
.
安全运行天数
,
diffDay
);
}
let
nhfxquery
=
{
plant_id
:
systemConfig
.
plantId
,
// start_date:hqmdzjbxx.body.create_date || "2024-12-01",
start_date
:
"2024-12-01"
,
end_date
:
nowTime
,
time_unit
:
"month"
,
page
:
1
,
perpage
:
100
}
console
.
log
();
let
fdglData
:
any
=
await
get
(
dataCenterInterfaceConfig
.
hqmdzlsfdl
,
nhfxquery
,
header
);
if
(
!
fdglData
.
body
)
{
console
.
log
(
"接口请求失败-获取某电站历史发电量:hqmdzlsfdl"
,
fdglData
.
body
);
fdglData
=
{
body
:{
energys
:[]}};
}
fdglData
.
body
.
energys
.
forEach
(
item
=>
{
let
{
date
,
energy
}
=
item
;
发电功率
Map
[
plant_id
][
date
]
=
energy
;
});
}
console
.
log
();
}
/**
* 光伏
* @returns
*/
export
async
function
getGuangFu
()
{
return
let
result
=
{
jbqk
:[],
//基本情况
nhfx
:{
count
:[],
charData
:[],
dayData
:[]},
//能耗分析
...
...
src/main.ts
View file @
baa4449d
...
...
@@ -4,7 +4,7 @@ import { httpServer } from "./net/http_server";
import
{
initConfig
,
systemConfig
}
from
"./config/serverConfig"
;
import
{
guangfuInit
}
from
"./biz/getData"
;
import
{
initToken
,
tokenTask
}
from
"./data/interface/chuanGanqi"
;
import
{
initDeviceMap
,
温湿度变化趋势变化趋势
,
光照变化
,
土壤温度变化趋势
}
from
"./biz/chuanGanQi/cgq"
;
import
{
initDeviceMap
,
温湿度变化趋势变化趋势
,
光照变化
,
土壤温度变化趋势
,
initCGQData
}
from
"./biz/chuanGanQi/cgq"
;
import
{
getGuangFu
}
from
"./data/interface/dataInterface"
;
async
function
lanuch
()
{
...
...
@@ -17,6 +17,7 @@ async function lanuch() {
}
//缓存数据
async
function
systemTask
()
{
/**溢佳 设备token */
...
...
@@ -26,7 +27,10 @@ async function systemTask() {
// await 温湿度变化趋势变化趋势("A2", "温度");
// await 土壤温度变化趋势();
// await guangfuInit();
await
initCGQData
();
console
.
log
(
"数据初始化成功"
);
}
lanuch
();
src/net/http_server.ts
View file @
baa4449d
...
...
@@ -8,7 +8,7 @@ import * as path from "path";
export
class
httpServer
{
static
createServer
(
port
:
number
)
{
static
createServer
(
port
:
number
)
{
var
httpServer
=
express
();
httpServer
.
all
(
'*'
,
function
(
req
,
res
,
next
)
{
...
...
src/routers/router.ts
View file @
baa4449d
...
...
@@ -31,47 +31,31 @@ export function setRouter(httpServer){
//======post
httpServer
.
post
(
'/weather'
,
asyncHandler
(
leftBiz
.
getData
));
httpServer
.
get
(
'/weather'
,
asyncHandler
(
leftBiz
.
getData
));
httpServer
.
post
(
'/cyszhgl'
,
asyncHandler
(
cyszhglBiz
.
getData
));
httpServer
.
post
(
'/zzqk'
,
asyncHandler
(
cyszhglBiz
.
zzqk
));
// httpServer.post('/cyszhgl/zzzl', asyncHandler(cyszhglBiz.zzzl));
// httpServer.post('/cyszhgl/zzfb', asyncHandler(cyszhglBiz.zzfb));
httpServer
.
post
(
'/gfny'
,
asyncHandler
(
gfnyBiz
.
getData
));
httpServer
.
post
(
'/yzdqxdnyzl'
,
asyncHandler
(
yzdqxdnyzlBiz
.
getData
));
httpServer
.
post
(
'/jscxpop'
,
asyncHandler
(
yzdqxdnyzlBiz
.
getJscxPop
));
httpServer
.
post
(
'/hjszzl'
,
asyncHandler
(
hjszzlBiz
.
getData
));
httpServer
.
post
(
'/nyjqr'
,
asyncHandler
(
nyjqrBiz
.
getData
));
httpServer
.
post
(
'/jdaqgl'
,
asyncHandler
(
jdaqglBiz
.
getData
));
httpServer
.
post
(
'/gbzscbgjdAq'
,
asyncHandler
(
gbzscbgjdAqBiz
.
getData
));
httpServer
.
post
(
'/gbzscbgjdBq'
,
asyncHandler
(
gbzscbgjdBqBiz
.
getData
));
httpServer
.
post
(
'/guiyu'
,
asyncHandler
(
guiYuBiz
.
getData
));
//======get
httpServer
.
get
(
'/cyszhgl'
,
asyncHandler
(
cyszhglBiz
.
getData
));
httpServer
.
get
(
'/zzqk'
,
asyncHandler
(
cyszhglBiz
.
zzqk
));
// httpServer.get('/cyszhgl/zzzl', asyncHandler(cyszhglBiz.zzzl));
// httpServer.get('/cyszhgl/zzfb', asyncHandler(cyszhglBiz.zzfb));
httpServer
.
get
(
'/gfny'
,
asyncHandler
(
gfnyBiz
.
getData
));
httpServer
.
get
(
'/yzdqxdnyzl'
,
asyncHandler
(
yzdqxdnyzlBiz
.
getData
));
httpServer
.
get
(
'/jscxpop'
,
asyncHandler
(
yzdqxdnyzlBiz
.
getJscxPop
));
httpServer
.
get
(
'/hjszzl'
,
asyncHandler
(
hjszzlBiz
.
getData
));
httpServer
.
get
(
'/nyjqr'
,
asyncHandler
(
nyjqrBiz
.
getData
));
httpServer
.
get
(
'/jdaqgl'
,
asyncHandler
(
jdaqglBiz
.
getData
));
httpServer
.
get
(
'/gbzscbgjdAq'
,
asyncHandler
(
gbzscbgjdAqBiz
.
getData
));
httpServer
.
get
(
'/gbzscbgjdBq'
,
asyncHandler
(
gbzscbgjdBqBiz
.
getData
));
httpServer
.
get
(
'/guiyu'
,
asyncHandler
(
guiYuBiz
.
getData
));
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment