Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yuyiViewServer
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
yuyiViewServer
Commits
bbe37d6c
Commit
bbe37d6c
authored
May 14, 2025
by
chenjinjing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
688ba763
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
208 additions
and
55 deletions
+208
-55
yuyiServer.xlsx
res/yuyiServer.xlsx
+0
-0
qyszhx.ts
src/biz/qyszhx.ts
+3
-6
zhyy.ts
src/biz/zhyy.ts
+2
-2
out.ts
src/data/db/out.ts
+0
-5
qyfw.ts
src/data/db/qyfw.ts
+0
-3
qyszhx.ts
src/data/db/qyszhx.ts
+5
-6
zhyy.ts
src/data/db/zhyy.ts
+197
-32
zhyyData.ts
src/data/table/zhyyData.ts
+1
-1
No files found.
res/yuyiServer.xlsx
View file @
bbe37d6c
No preview for this file type
src/biz/qyszhx.ts
View file @
bbe37d6c
...
...
@@ -53,15 +53,12 @@ export async function getData(req, res) {
let
zzrzTableData
=
tablePackage
(
dbData
[
"资质认证"
].
headerList
[
0
],
dbData
[
"资质认证"
].
bodyList
);
ret
[
'zzrzTable'
]
=
getTableOut
(
'资质认证表格'
,
zzrzTableData
);
let
sxhc
=
keyValuePackage
(
dbData
[
'失信
核查
'
].
count
);
ret
[
'sxhc'
]
=
getKeyValueOut
(
'失信
核查
'
,
sxhc
);
let
sxhc
=
keyValuePackage
(
dbData
[
'失信
详情
'
].
count
);
ret
[
'sxhc'
]
=
getKeyValueOut
(
'失信
详情
'
,
sxhc
);
let
sxhcxx
=
keyValuePackage
(
dbData
[
'失信
核查
'
].
dataList
);
let
sxhcxx
=
keyValuePackage
(
dbData
[
'失信
详情
'
].
dataList
);
ret
[
'sxhcxx'
]
=
getKeyValueOut
(
'风险提示'
,
sxhcxx
);
let
sxxq
=
keyValuePackage
(
dbData
[
'失信详情'
].
dataList
);
ret
[
'sxxq'
]
=
getKeyValueOut
(
'失信详情'
,
sxxq
);
let
wfhc
=
keyValuePackage
(
dbData
[
'违法核查'
].
count
);
ret
[
'wfhc'
]
=
getKeyValueOut
(
'违法核查'
,
wfhc
);
...
...
src/biz/zhyy.ts
View file @
bbe37d6c
...
...
@@ -36,6 +36,8 @@ export async function getData(req, res) {
let
qymyd
=
keyValuePackage
(
excelData
[
'服务成果'
].
dataList
);
ret
[
'qymyd'
]
=
getKeyValueOut
(
'企业满意度'
,
qymyd
);
ret
[
'nrzqy'
]
=
{
title
:
"拟入驻企业"
,
dataList
:
excelData
[
"拟入驻企业"
].
bodyList
};
let
fhqgk
=
keyValuePackage
(
dbData
[
'孵化器概况'
]);
ret
[
'fhqgk'
]
=
getKeyValueOut
(
'孵化器概况'
,
fhqgk
);
...
...
@@ -51,8 +53,6 @@ export async function getData(req, res) {
let
yytg
=
getChart
(
dbData
[
'运营推广'
]);
ret
[
'yytg'
]
=
{
title
:
"运营推广"
,
dataList
:
yytg
};
ret
[
'nrzqy'
]
=
{
title
:
"拟入驻企业"
,
dataList
:
dbData
[
"拟入驻企业"
]
};
let
hzsj
=
keyValuePackage
(
dbData
[
'汇总数据'
]);
ret
[
'hzsj'
]
=
getKeyValueOut
(
'汇总数据'
,
hzsj
);
...
...
src/data/db/out.ts
View file @
bbe37d6c
...
...
@@ -99,11 +99,6 @@ function getStartAndEndTimeYearList(startTime, endTime) {
}
export
function
getKeyValue
(
data
)
{
let
result
=
[];
for
(
let
key
in
data
)
{
...
...
src/data/db/qyfw.ts
View file @
bbe37d6c
...
...
@@ -153,9 +153,6 @@ export async function get入孵企业数量变化趋势(type, time, state) {
}
export
async
function
getEnterpriseDetails
(
name
,
type
)
{
let
nowTime
=
new
Date
().
valueOf
();
...
...
src/data/db/qyszhx.ts
View file @
bbe37d6c
...
...
@@ -16,8 +16,7 @@ export async function getQyszhx(eId) {
企业科创分
:
{
count
:
[],
dataList
:
[],
chartData
:[]},
//count:所属国际二级行业,chartData:饼图
股权结构
:
{
dataList
:
[],
titleList
:
[
'key'
,
'value'
]
},
资质认证
:
{
count
:[],
bodyList
:
[],
headerList
:
[[
'生效时间'
,
'证书类型'
,
'状态'
]]},
//count:资质认证总数
失信核查
:
{
count
:[],
dataList
:[]},
//todo
失信详情
:
{
count
:[],
dataList
:
[]},
//todo
失信详情
:
{
count
:[],
dataList
:[]},
//todo
违法核查
:
{
count
:[],
dataList
:
[]},
//todo
企业服务申请情况
:
{
dataList
:
[],
titleList
:
[
'key'
,
'value'
]
},
企业服务申请类型
:
{
dataList
:
[],
titleList
:
[
'key'
,
'value'
]
},
...
...
@@ -115,12 +114,12 @@ export async function getQyszhx(eId) {
//企业风险动态:失信核查、失信详情、违法核查
let
企业风险动态
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
失信核查
,
{
eId
},
[
"eId"
,
"liandate"
,
"anno"
,
"executegov"
,
"executestatus"
,
"publicdate"
,
"executeno"
,
"actionRemark"
,
"amount"
]);
let
qyfxdt
=
{
失信
核查
:[],
失信
详情
:[],
违法核查
:[]};
let
qyfxdt
=
{
失信详情
:[],
违法核查
:[]};
企业风险动态
.
forEach
(
info
=>
{
qyfxdt
.
失信
核查
.
push
(
info
.
actionRemark
);
qyfxdt
.
失信
详情
.
push
(
info
.
actionRemark
);
})
qyszhx
.
失信
核查
.
count
=
[{
key
:
"失信核查次数"
,
value
:
企业风险动态
.
length
}];
qyszhx
.
失信
核查
.
dataList
=
qyfxdt
.
失信核查
;
qyszhx
.
失信
详情
.
count
=
[{
key
:
"失信核查次数"
,
value
:
企业风险动态
.
length
}];
qyszhx
.
失信
详情
.
dataList
=
qyfxdt
.
失信详情
;
let
严重违法犯罪
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
严重违法犯罪
,
{
eId
},
[
"eId"
,
"Type"
,
"AddReason"
,
"AddDate"
,
"AddOffice"
,
"RemoveReason"
,
"RemoveDate"
,
"RemoveOffice"
]);
严重违法犯罪
.
forEach
(
info
=>
{
...
...
src/data/db/zhyy.ts
View file @
bbe37d6c
import
moment
=
require
(
"moment"
);
import
{
FOLLOWUPSTATUS
,
FUHUASTATE
,
NEEDCATEGORY
,
OFFLINEPROMOTION
,
ONLINEPROMOTION
,
OPERATIONALDATATYPE
,
PROMOTIONTYPE
,
TABLENAME
}
from
"../../config/enum"
;
import
{
DEGREE
,
FOLLOWUPSTATUS
,
FUHUASTATE
,
NEEDCATEGORY
,
OFFLINEPROMOTION
,
ONLINEPROMOTION
,
OPERATIONALDATATYPE
,
PROMOTIONTYPE
,
TABLENAME
}
from
"../../config/enum"
;
import
{
selectData
,
selectManyTableData
}
from
"./operationalData"
;
import
{
changeEnumValue
}
from
"../../tools/eccEnum"
;
import
{
getChart
,
getYearList
,
get
在孵企业面积
,
get
在孵企业面积变化趋势
}
from
"./out"
;
import
{
systemConfig
}
from
"../../config/serverConfig"
;
import
{
getMySqlMs
}
from
"../../tools/systemTools"
;
import
{
getKeyValue
}
from
"./old/out"
;
function
getStartAndEndTimeYearList
(
startTime
,
endTime
)
{
...
...
@@ -86,31 +87,11 @@ export async function getZhyy() {
孵化器概况
:[],
在孵企业面积占比
:[],
孵化运营
:{
count
:[],
dataList
:[]
},
运营推广
:{
线上推广
:{
count
:
"78%"
,
dataList
:[{
key
:
"视频号"
,
value
:
17
},
{
key
:
"小红书"
,
value
:
16
},
{
key
:
"抖音"
,
value
:
18
}]},
线下推广
:{
count
:
"22%"
,
dataList
:[{
key
:
"活动宣讲数"
,
value
:
6
},
{
key
:
"三方机构合作"
,
value
:
9
}]}
},
拟入驻企业
:[[
"企业名称111"
,
"生物医药"
],
[
"企业名称111"
,
"生物医药"
],
[
"企业名称111"
,
"生物医药"
],
[
"企业名称111"
,
"生物医药"
],
[
"企业名称111"
,
"生物医药"
]],
汇总数据
:[
{
key
:
"企业总营收额"
,
value
:
"34450万"
},
{
key
:
"企业纳税"
,
value
:
"2440万"
},
{
key
:
"知识产权"
,
value
:
"263个"
},
],
本年新增就业
:[{
key
:
"本年新增就业"
,
value
:
"73人"
,
yoy
:
"1.25%"
}],
入孵企业就业人数排行
:[
{
key
:
"博士以上"
,
value
:
6
},
{
key
:
"博士"
,
value
:
12
},
{
key
:
"硕士"
,
value
:
7
},
{
key
:
"专科"
,
value
:
6
},
{
key
:
"其他"
,
value
:
3
},
],
学历情况分析
:[
{
key
:
"博士以上"
,
value
:
6
},
{
key
:
"博士"
,
value
:
12
},
{
key
:
"硕士"
,
value
:
7
},
{
key
:
"专科"
,
value
:
6
},
{
key
:
"其他"
,
value
:
3
},
],
运营推广
:{
线上推广
:{
count
:
""
,
dataList
:[]},
线下推广
:{
count
:
""
,
dataList
:[]}},
汇总数据
:[],
本年新增就业
:[],
入孵企业就业人数排行
:[],
学历情况分析
:[],
本月新增规模
:[{
key
:
"本月新增规模"
,
value
:
"827万"
,
yoy
:
"-1.05%"
,
qoq
:
"1.15%"
}],
入孵企业经营规模分析
:[
{
key
:
"<1000万"
,
value
:
"28%"
},
...
...
@@ -194,10 +175,20 @@ export async function getZhyy() {
//运营推广
let
promotionList
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
运营推广信息表
,{},
[
"opId"
,
"promotionType"
,
"promotionApp"
,
"promotionNum"
]);
let
promotionInfo
=
{
"线上推广"
:
{
count
:
'0%'
,
dataList
:
[]
},
"线下推广"
:
{
count
:
'0%'
,
dataList
:
[]
}};
let
线上推广
=
{
total
:
0
,
apps
:{
ONLINEPROMOTION
let
线上推广
=
{
total
:
0
,
apps
:{}
};
let
线下推广
=
{
total
:
0
,
apps
:{}
};
for
(
let
key
in
ONLINEPROMOTION
)
{
let
anyKey
:
any
=
key
;
if
(
isNaN
(
anyKey
))
{
线上推广
.
apps
[
key
]
=
0
;
}
}
for
(
let
key
in
OFFLINEPROMOTION
)
{
let
anyKey
:
any
=
key
;
if
(
isNaN
(
anyKey
))
{
线下推广
.
apps
[
key
]
=
0
;
}
}
...
...
@@ -206,25 +197,199 @@ export async function getZhyy() {
let
appStr
=
""
;
if
(
info
.
promotionType
==
PROMOTIONTYPE
.
线上推广
)
{
appStr
=
changeEnumValue
(
ONLINEPROMOTION
,
info
.
promotionApp
);
promotionInfo
[
"线上推广"
][
appStr
]
=
info
.
promotionNum
;
线上推广
.
apps
[
appStr
]
+=
info
.
promotionNum
;
线上推广
.
total
+=
info
.
promotionNum
;
}
else
if
(
info
.
promotionType
==
PROMOTIONTYPE
.
线下推广
)
{
appStr
=
changeEnumValue
(
OFFLINEPROMOTION
,
info
.
promotionApp
);
promotionInfo
[
"线下推广"
][
appStr
]
=
info
.
promotionNum
;
线下推广
.
apps
[
appStr
]
+=
info
.
promotionNum
;
线下推广
.
total
+=
info
.
promotionNum
;
}
})
}
// 计算百分比
let
totalAll
=
线上推广
.
total
+
线下推广
.
total
;
promotionInfo
.
线上推广
.
count
=
totalAll
?
`
${
Math
.
round
(
线上推广
.
total
/
totalAll
*
100
)}
%`
:
"0%"
;
promotionInfo
.
线下推广
.
count
=
totalAll
?
`
${
Math
.
round
(
线下推广
.
total
/
totalAll
*
100
)}
%`
:
"0%"
;
promotionInfo
.
线上推广
.
dataList
=
getKeyValue
(
线上推广
.
apps
);
promotionInfo
.
线下推广
.
dataList
=
getKeyValue
(
线下推广
.
apps
);
//汇总数据
let
hzsj
=
{
企业总营收额
:
0
,
企业纳税
:
0
,
知识产权
:
0
}
let
知识产权
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
知识产权
,
{},
[]);
知识产权
.
forEach
(
info
=>
{
hzsj
.
知识产权
+=
info
.
number
;
})
let
营收情况
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
企业经营信息
,
{},
[]);
营收情况
.
forEach
(
info
=>
{
let
{
BI
,
TXP
}
=
info
;
hzsj
.
企业总营收额
+=
parseFloat
(
BI
);
hzsj
.
企业纳税
+=
parseFloat
(
TXP
);
});
zhyy
.
汇总数据
=
getKeyValue
(
hzsj
);
//入孵企业就业情况
let
{
bnjyxz
,
rfqyjyrsph
,
xlqkfx
}
=
await
get
就业情况
();
zhyy
.
本年新增就业
=
getKeyValue
(
bnjyxz
);
zhyy
.
入孵企业就业人数排行
=
getKeyValue
(
rfqyjyrsph
);
zhyy
.
学历情况分析
=
getKeyValue
(
xlqkfx
);
//本季度新增规模
let
jingYingThisYear
=
moment
().
startOf
(
"year"
).
format
(
"YYYY-MM-DD HH:mm:ss"
);
let
benjidu
=
Math
.
floor
(
moment
().
month
()
/
3
)
+
1
;
let
本季度营收
dbList
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
企业经营信息
,
{
annual
:
jingYingThisYear
,
quarter
:
benjidu
},
null
);
let
本季度
=
0
;
本季度营收
dbList
.
forEach
(
info
=>
{
本季度
+=
info
.
BI
;
})
let
上季度营收
dbList
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
企业经营信息
,
{
annual
:
jingYingThisYear
,
quarter
:
benjidu
},
null
);
let
上季度
=
0
;
let
去年本季度
=
0
;
let
本季度营收数据
=
{
本季度新增规模
:
0
,
同比上季度
:
0
,
环比同期
:
0
};
//在孵企业营收占比
let
jingYingList
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
企业经营信息
,
{
annual
:
jingYingThisYear
},
null
);
let
产业规模企业
Map
=
{};
jingYingList
.
forEach
(
info
=>
{
let
{
BI
,
TXP
,
eId
}
=
info
;
if
(
!
产业规模企业
Map
[
eId
])
产业规模企业
Map
[
eId
]
=
0
;
产业规模企业
Map
[
eId
]
+=
parseFloat
(
BI
);
hzsj
.
企业总营收额
+=
parseFloat
(
BI
);
hzsj
.
企业纳税
+=
parseFloat
(
TXP
);
});
let
产业规模分析
List
=
[
{
num
:
5000
,
key
:
">5000万"
,
value
:
0
},
{
num
:
2000
,
key
:
"2000-5000万"
,
value
:
0
},
{
num
:
1000
,
key
:
"1000-2000万"
,
value
:
0
},
{
num
:
1
,
key
:
"<1000万"
,
value
:
0
},
];
for
(
let
key
in
产业规模企业
Map
)
{
let
itemCount
=
产业规模企业
Map
[
key
];
for
(
let
i
=
0
;
i
<
产业规模分析
List
.
length
;
i
++
)
{
let
{
num
}
=
产业规模分析
List
[
i
];
if
(
itemCount
>
num
)
{
产业规模分析
List
[
i
].
value
+=
1
;
break
;
}
}
}
let
在孵企业营收占比
=
[];
产业规模分析
List
.
forEach
(
info
=>
{
let
{
key
,
value
}
=
info
;
在孵企业营收占比
.
push
({
key
,
value
});
})
return
zhyy
;
}
/**
* 就业情况
*/
async
function
get
就业情况
()
{
// 获取当前年份
let
currentYear
=
new
Date
().
getFullYear
();
// 计算当前年份的开始时间和结束时间
const
StartOfYear
=
new
Date
(
`
${
currentYear
}
-01-01 00:00:00`
).
valueOf
();
const
EndOfYear
=
new
Date
(
`
${
currentYear
}
-12-31 23:59:59`
).
valueOf
();
// 计算去年的开始时间和结束时间
const
StartOfLastYearYear
=
new
Date
(
`
${
currentYear
-
1
}
-01-01 00:00:00`
).
valueOf
();
const
EndOfLastYearYear
=
new
Date
(
`
${
currentYear
-
1
}
-12-31 23:59:59`
).
valueOf
();
// 查询本年新增就业数据
let
currentYearNewJobs
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
参保记录
,
{
annual
:
{
"%between%"
:
[
getMySqlMs
(
StartOfYear
),
getMySqlMs
(
EndOfYear
)]
}
},
null
);
// 查询去年同期新增就业数据
let
lastYearMonthNewJobs
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
参保记录
,
{
annual
:
{
"%between%"
:
[
getMySqlMs
(
StartOfLastYearYear
),
getMySqlMs
(
EndOfLastYearYear
)]
}
},
null
);
//学历情况Map
let
xlqkfx
=
{
"专科"
:
0
,
"本科"
:
0
,
"硕士"
:
0
,
"博士"
:
0
,
"博士以上"
:
0
,
"其他"
:
0
};
// 计算本年新增就业人数
let
currentYearJobCount
=
0
;
currentYearNewJobs
.
forEach
(
info
=>
{
let
itemCount
=
0
;
if
(
info
.
zhuanKe
)
{
itemCount
+=
parseInt
(
info
.
zhuanKe
);
xlqkfx
.
专科
+=
parseInt
(
info
.
zhuanKe
);
}
if
(
info
.
benKe
)
{
itemCount
+=
parseInt
(
info
.
benKe
);
xlqkfx
.
本科
+=
parseInt
(
info
.
benKe
);
}
if
(
info
.
shuoshi
)
{
itemCount
+=
parseInt
(
info
.
shuoshi
);
xlqkfx
.
硕士
+=
parseInt
(
info
.
shuoshi
);
}
if
(
info
.
boShi
)
{
itemCount
+=
parseInt
(
info
.
boShi
);
xlqkfx
.
博士
+=
parseInt
(
info
.
boShi
);
}
if
(
info
.
boshiyishang
)
{
itemCount
+=
parseInt
(
info
.
boshiyishang
);
xlqkfx
.
博士以上
+=
parseInt
(
info
.
boshiyishang
);
}
if
(
info
.
qiTa
)
{
itemCount
+=
parseInt
(
info
.
qiTa
);
xlqkfx
.
其他
+=
parseInt
(
info
.
qiTa
);
}
currentYearJobCount
+=
itemCount
;
});
// 计算去年同期新增就业人数
let
lastYearYearJobCount
=
0
;
lastYearMonthNewJobs
.
forEach
(
info
=>
{
let
itemCount
=
0
;
if
(
info
.
zhuanKe
)
itemCount
+=
parseInt
(
info
.
zhuanKe
);
if
(
info
.
benKe
)
itemCount
+=
parseInt
(
info
.
benKe
);
if
(
info
.
shuoshi
)
itemCount
+=
parseInt
(
info
.
shuoshi
);
if
(
info
.
boShi
)
itemCount
+=
parseInt
(
info
.
boShi
);
if
(
info
.
boshiyishang
)
itemCount
+=
parseInt
(
info
.
boshiyishang
);
if
(
info
.
qiTa
)
itemCount
+=
parseInt
(
info
.
qiTa
);
lastYearYearJobCount
+=
itemCount
;
});
// 计算同比增长率
let
growthRate
=
""
;
if
(
lastYearYearJobCount
!==
0
)
{
growthRate
=
(((
currentYearJobCount
-
lastYearYearJobCount
)
/
lastYearYearJobCount
)
*
100
).
toFixed
(
2
)
+
"%"
;
}
let
bnjyxz
=
{
"本年新增就业"
:
currentYearJobCount
,
"同比去年"
:
growthRate
};
/**
* 入孵企业就业人数排行
*/
let
就业
includeConf
=
{};
就业
includeConf
[
TABLENAME
.
参保记录
]
=
{
cloum
:
[],
where
:
{
annual
:
{
"%between%"
:
[
getMySqlMs
(
StartOfYear
),
getMySqlMs
(
EndOfYear
)]
}
}
}
let
企业参保
dbList
=
await
selectManyTableData
(
OPERATIONALDATATYPE
.
多表联查
,
TABLENAME
.
企业基础信息表
,
{},
[
"eId"
,
"enterpriseName"
],
就业
includeConf
);
let
rfqyjyrsph
=
[];
企业参保
dbList
.
forEach
(
info
=>
{
let
{
enterpriseName
,
enterprise_canbaos
}
=
info
;
rfqyjyrsph
.
push
({
key
:
enterpriseName
,
value
:
enterprise_canbaos
.
length
});
});
rfqyjyrsph
.
sort
(
(
a
,
b
)
=>
{
return
b
.
value
-
a
.
value
;
})
return
{
bnjyxz
,
rfqyjyrsph
,
xlqkfx
};
}
...
...
src/data/table/zhyyData.ts
View file @
bbe37d6c
...
...
@@ -41,7 +41,7 @@ export function zhyyTableData() {
let
keyValueOrTitleList
=
[
"毕业情况"
,
"服务成果"
];
//适配 饼图 键值以及需要多个key的
let
barChartList
=
[];
//适配 柱状图 折线图
let
stringList
=
[];
let
decollatePlanarList
=
[];
//适配 表格
let
decollatePlanarList
=
[
"拟入驻企业"
];
//适配 表格
let
titltListConfig
=
{};
let
result
=
packageDataProcess
(
blockDataList
,
titltListConfig
,
keyValueOrTitleList
,
barChartList
,
stringList
,
decollatePlanarList
);
...
...
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