Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yuyiAdminServer
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
yuyiAdminServer
Commits
eb85f2cf
Commit
eb85f2cf
authored
May 17, 2025
by
Zllgogo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
eeb50188
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
144 additions
and
98 deletions
+144
-98
fuhua.ts
src/biz/fuhua.ts
+144
-98
No files found.
src/biz/fuhua.ts
View file @
eb85f2cf
...
@@ -372,130 +372,176 @@ export async function getOperateData(year) {
...
@@ -372,130 +372,176 @@ export async function getOperateData(year) {
// return riskData;
// return riskData;
// }
// }
export
async
function
getRiskData
()
{
//
export async function getRiskData() {
let
riskData
=
[
//
let riskData = [
{
//
{
key
:
"迁出异常"
,
//
key: "迁出异常",
value
:
0
//
value: 0
},
//
},
{
//
{
key
:
"办公地址冲突"
,
//
key: "办公地址冲突",
value
:
0
//
value: 0
},
//
},
{
//
{
key
:
"连续未填报"
,
//
key: "连续未填报",
value
:
0
//
value: 0
},
//
},
];
//
];
let
bgdzctTable
=
{
headerList
:[
""
,
""
,
""
]}
//
let bgdzctTable = {headerList:["", "", ""]}
// 1. 获取所有迁出记录(state 为迁出)
//
// 1. 获取所有迁出记录(state 为迁出)
let
zaifuList
=
await
selectManyTableData
(
OPERATIONALDATATYPE
.
多表联查
,
TABLENAME
.
企业基础信息表
,{},[
"eId"
,
"enterpriseName"
],
//
let zaifuList = await selectManyTableData(OPERATIONALDATATYPE.多表联查,TABLENAME.企业基础信息表,{},["eId", "enterpriseName"],
{
//
{
[
TABLENAME
.
企业孵化信息
]:
{
//
[TABLENAME.企业孵化信息]: {
column
:
[
"state"
,
"moveOutTime"
,
"moveOutType"
,
"endTime"
],
//
column: ["state", "moveOutTime", "moveOutType", "endTime"],
where
:
{
state
:
FUHUASTATE
.
迁出
}
//
where: { state: FUHUASTATE.迁出 }
}
//
}
}
//
}
);
//
);
let
abnormalCount
=
0
;
//
let abnormalCount = 0;
for
(
const
info
of
zaifuList
)
{
//
for (const info of zaifuList) {
const
incubationInfo
=
info
.
enterprise_fuhuas
[
0
];
// 关联的孵化信息
//
const incubationInfo = info.enterprise_fuhuas[0]; // 关联的孵化信息
if
(
!
incubationInfo
||
!
incubationInfo
.
moveOutTime
)
continue
;
//
if (!incubationInfo || !incubationInfo.moveOutTime) continue;
let
moveOutTime
=
new
Date
(
incubationInfo
.
moveOutTime
);
//
let moveOutTime = new Date(incubationInfo.moveOutTime);
let
endTime
=
info
.
enterprise_fuhuas
[
0
].
endTime
?
new
Date
(
info
.
enterprise_fuhuas
[
0
].
endTime
)
:
null
;
//
let endTime = info.enterprise_fuhuas[0].endTime ? new Date(info.enterprise_fuhuas[0].endTime) : null;
// 1. 违约迁出
//
// 1. 违约迁出
let
isBreachExit
=
incubationInfo
.
moveOutType
===
EMIGRATIONTYPE
.
违约退租
;
//
let isBreachExit = incubationInfo.moveOutType === EMIGRATIONTYPE.违约退租;
// 2. 未到期迁出(迁出早于孵化结束)
//
// 2. 未到期迁出(迁出早于孵化结束)
let
isEarlyExit
=
endTime
&&
moveOutTime
<
endTime
;
//
let isEarlyExit = endTime && moveOutTime < endTime;
// 如果满足任一异常条件,计为异常
//
// 如果满足任一异常条件,计为异常
if
(
isBreachExit
||
isEarlyExit
)
{
//
if (isBreachExit || isEarlyExit) {
abnormalCount
++
;
//
abnormalCount++;
}
//
}
}
//
}
riskData
[
0
].
value
=
abnormalCount
;
//
riskData[0].value = abnormalCount;
// 2. 办公地址冲突(楼号 + 室号 + 时间段冲突)
//
// 2. 办公地址冲突(楼号 + 室号 + 时间段冲突)
let
企业基础信息
includeConf
=
{};
//
let 企业基础信息includeConf = {};
企业基础信息
includeConf
[
TABLENAME
.
企业基础信息表
]
=
{
cloum
:
[
"enterpriseName"
],
where
:
{}
}
//
企业基础信息includeConf[TABLENAME.企业基础信息表] = { cloum: ["enterpriseName"], where: {} }
let
leaseList
=
await
selectManyTableData
(
OPERATIONALDATATYPE
.
多表联查
,
TABLENAME
.
租赁信息
,
{},
[
"eId"
,
"building"
,
"roomNumber"
,
"startTime"
,
"endTime"
],
企业基础信息
includeConf
);
//
let leaseList = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.租赁信息, {}, ["eId", "building", "roomNumber", "startTime", "endTime"], 企业基础信息includeConf);
// let leaseList = await selectData(OPERATIONALDATATYPE.查询多个,TABLENAME.租赁信息,{},["eId", "building", "roomNumber", "startTime", "endTime"]);
//
// let leaseList = await selectData(OPERATIONALDATATYPE.查询多个,TABLENAME.租赁信息,{},["eId", "building", "roomNumber", "startTime", "endTime"]);
// 构建一个 map,key 是 building_roomNumber:楼号_室号,值是租赁时间段列表
//
// 构建一个 map,key 是 building_roomNumber:楼号_室号,值是租赁时间段列表
let
addressMap
=
new
Map
<
string
,
Array
<
{
eId
:
number
;
enterpriseName
:
string
;
start
:
Date
;
end
:
Date
}
>>
();
//
let addressMap = new Map<string, Array<{ eId: number; enterpriseName:string; start: Date; end: Date }>>();
for
(
const
lease
of
leaseList
)
{
//
for (const lease of leaseList) {
const
key
=
`
${
lease
.
building
}
_
${
lease
.
roomNumber
}
`
;
//
const key = `${lease.building}_${lease.roomNumber}`;
const
timeRange
=
{
//
const timeRange = {
eId
:
lease
.
eId
,
//
eId: lease.eId,
enterpriseName
:
lease
.
enterprise
.
enterpriseName
,
//
enterpriseName: lease.enterprise.enterpriseName,
start
:
new
Date
(
lease
.
startTime
),
//
start: new Date(lease.startTime),
end
:
new
Date
(
lease
.
endTime
)
//
end: new Date(lease.endTime)
};
//
};
if
(
!
addressMap
.
has
(
key
))
{
//
if (!addressMap.has(key)) {
addressMap
.
set
(
key
,
[]);
//
addressMap.set(key, []);
}
//
}
addressMap
.
get
(
key
)?.
push
(
timeRange
);
//
addressMap.get(key)?.push(timeRange);
}
//
}
let
conflictCount
=
0
;
// let conflictCount = 0;
let
conflictList
=
[];
// let conflictList = [];
// // 遍历每个地址组合,检查时间段是否有重叠
// for (const [key, ranges] of addressMap.entries()) {
// for (let i = 0; i < ranges.length; i++) {
// for (let j = i + 1; j < ranges.length; j++) {
// const a = ranges[i];
// const b = ranges[j];
// // 判断时间段是否重叠
// if (a.start < b.end && b.start < a.end) {
// conflictCount++;
// conflictList.push([a.enterpriseName, b.enterpriseName, "同时间段内,地址相同"])
// break; // 当前地址组合已冲突,跳出循环
// }
// }
// }
// }
// 遍历每个地址组合,检查时间段是否有重叠
// riskData[1].value = conflictCount;
for
(
const
[
key
,
ranges
]
of
addressMap
.
entries
())
{
for
(
let
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
for
(
let
j
=
i
+
1
;
j
<
ranges
.
length
;
j
++
)
{
const
a
=
ranges
[
i
];
const
b
=
ranges
[
j
];
// 判断时间段是否重叠
// // 3. 连续未填报(改进:在孵企业中没有任何经营数据)
if
(
a
.
start
<
b
.
end
&&
b
.
start
<
a
.
end
)
{
// let selectParam = {state:STATE.是};
conflictCount
++
;
conflictList
.
push
([
a
.
enterpriseName
,
b
.
enterpriseName
,
"同时间段内,地址相同"
])
break
;
// 当前地址组合已冲突,跳出循环
}
}
}
}
riskData
[
1
].
value
=
conflictCount
;
// /**在孵企业 当前时间小于孵化结束时间 */
// let araeParam = {column:["area", "unitPrice", "roomNumber", "rent", "startTime", "endTime"], where:{} };
// let zaifuTableInfo:any = {};
// zaifuTableInfo[TABLENAME.租赁信息] = araeParam;
// zaifuTableInfo[TABLENAME.企业孵化信息] = {column:["state", "startTime", "endTime"], where:{state:{"%ne%":FUHUASTATE.迁出}} };
// let allIncubatingEnterprises = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.企业基础信息表, selectParam, ["eId"], zaifuTableInfo );
// 3. 连续未填报(改进:在孵企业中没有任何经营数据)
// // 收集所有有填报记录的企业
let
selectParam
=
{
state
:
STATE
.
是
}
;
// let reportedEnterprises = await selectData(OPERATIONALDATATYPE.查询多个,TABLENAME.企业经营信息,{},["eId"])
;
/**在孵企业 当前时间小于孵化结束时间 */
// let reportedEIds = new Set(reportedEnterprises.map(e => e.eId));
let
araeParam
=
{
column
:[
"area"
,
"unitPrice"
,
"roomNumber"
,
"rent"
,
"startTime"
,
"endTime"
],
where
:{}
};
let
zaifuTableInfo
:
any
=
{};
zaifuTableInfo
[
TABLENAME
.
租赁信息
]
=
araeParam
;
zaifuTableInfo
[
TABLENAME
.
企业孵化信息
]
=
{
column
:[
"state"
,
"startTime"
,
"endTime"
],
where
:{
state
:{
"%ne%"
:
FUHUASTATE
.
迁出
}}
};
let
allIncubatingEnterprises
=
await
selectManyTableData
(
OPERATIONALDATATYPE
.
多表联查
,
TABLENAME
.
企业基础信息表
,
selectParam
,
[
"eId"
],
zaifuTableInfo
);
// 收集所有有填报记录的
企业
// // 找出没有填报的在孵
企业
let
reportedEnterprises
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
企业经营信息
,{},[
"eId"
]
);
// let continuousUnreported = new Set<number>(
);
let
reportedEIds
=
new
Set
(
reportedEnterprises
.
map
(
e
=>
e
.
eId
));
// allIncubatingEnterprises.forEach(ent => {
// if (!reportedEIds.has(ent.eId)) {
// continuousUnreported.add(ent.eId);
// }
// });
// 找出没有填报的在孵企业
// riskData[2].value = continuousUnreported.size;
let
continuousUnreported
=
new
Set
<
number
>
();
allIncubatingEnterprises
.
forEach
(
ent
=>
{
// return riskData;
if
(
!
reportedEIds
.
has
(
ent
.
eId
))
{
// }
continuousUnreported
.
add
(
ent
.
eId
);
}
export
async
function
getRiskData
()
{
let
yj
=
{
高风险
:
0
,
中低风险
:
0
,
关注
:
0
};
let
riskEnterprises
:
any
[]
=
[];
// 获取所有企业孵化信息
let
fhColumn
=
[
"enterpriseName"
,
"industry"
,
"eId"
,
"shijiaoziben"
];
let
manyTableInfo
:
any
=
{};
manyTableInfo
[
TABLENAME
.
企业孵化信息
]
=
{
column
:
[
"fId"
,
"eId"
,
"moveOutTime"
,
"moveOutType"
],
where
:
{}
};
let
fhdbList
=
await
selectManyTableData
(
OPERATIONALDATATYPE
.
多表联查
,
TABLENAME
.
企业基础信息表
,
{},
fhColumn
,
manyTableInfo
);
// 获取所有企业经营信息
let
manageList
=
await
selectData
(
OPERATIONALDATATYPE
.
查询多个
,
TABLENAME
.
企业经营信息
,
{},
[
"annual"
,
"eId"
]);
let
map
=
{};
manageList
.
forEach
(
info
=>
{
map
[
info
.
eId
]
=
1
;
});
});
riskData
[
2
].
value
=
continuousUnreported
.
size
;
fhdbList
.
forEach
(
info
=>
{
let
riskLevel
=
""
;
if
(
info
.
enterprise_fuhuas
[
0
].
moveOutType
==
EMIGRATIONTYPE
.
违约退租
||
info
.
enterprise_fuhuas
[
0
].
moveOutType
==
EMIGRATIONTYPE
.
到期退租
)
{
yj
.
高风险
+=
1
;
riskLevel
=
"高风险"
;
}
else
if
(
!
map
[
info
.
eId
])
{
yj
.
中低风险
+=
1
;
riskLevel
=
"中低风险"
;
}
else
{
yj
.
关注
+=
1
;
riskLevel
=
"关注"
;
}
riskEnterprises
.
push
([
info
.
enterpriseName
,
riskLevel
]);
});
return
riskData
;
return
{
yj
,
riskEnterprises
};
}
}
/**
/**
...
...
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