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
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
154 additions
and
108 deletions
+154
-108
fuhua.ts
src/biz/fuhua.ts
+154
-108
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 为迁出)
let
zaifuList
=
await
selectManyTableData
(
OPERATIONALDATATYPE
.
多表联查
,
TABLENAME
.
企业基础信息表
,{},[
"eId"
,
"enterpriseName"
],
{
[
TABLENAME
.
企业孵化信息
]:
{
column
:
[
"state"
,
"moveOutTime"
,
"moveOutType"
,
"endTime"
],
where
:
{
state
:
FUHUASTATE
.
迁出
}
}
}
);
let
abnormalCount
=
0
;
for
(
const
info
of
zaifuList
)
{
// // 1. 获取所有迁出记录(state 为迁出)
const
incubationInfo
=
info
.
enterprise_fuhuas
[
0
];
// 关联的孵化信息
// let zaifuList = await selectManyTableData(OPERATIONALDATATYPE.多表联查,TABLENAME.企业基础信息表,{},["eId", "enterpriseName"],
if
(
!
incubationInfo
||
!
incubationInfo
.
moveOutTime
)
continue
;
// {
// [TABLENAME.企业孵化信息]: {
// column: ["state", "moveOutTime", "moveOutType", "endTime"],
// where: { state: FUHUASTATE.迁出 }
// }
// }
// );
// let abnormalCount = 0;
// for (const info of zaifuList) {
// const incubationInfo = info.enterprise_fuhuas[0]; // 关联的孵化信息
// 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 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;
// // 3. 连续未填报(改进:在孵企业中没有任何经营数据)
// let selectParam = {state:STATE.是};
// /**在孵企业 当前时间小于孵化结束时间 */
// 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
conflictCount
=
0
;
// let reportedEIds = new Set(reportedEnterprises.map(e => e.eId));
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
;
// // 找出没有填报的在孵企业
// let continuousUnreported = new Set<number>();
// 3. 连续未填报(改进:在孵企业中没有任何经营数据)
// allIncubatingEnterprises.forEach(ent => {
let
selectParam
=
{
state
:
STATE
.
是
};
// if (!reportedEIds.has(ent.eId)) {
// continuousUnreported.add(ent.eId);
// }
// });
/**在孵企业 当前时间小于孵化结束时间 */
// riskData[2].value = continuousUnreported.size;
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
reportedEIds
=
new
Set
(
reportedEnterprises
.
map
(
e
=>
e
.
eId
));
// return riskData;
// }
// 找出没有填报的在孵企业
export
async
function
getRiskData
()
{
let
continuousUnreported
=
new
Set
<
number
>
();
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
;
});
allIncubatingEnterprises
.
forEach
(
ent
=>
{
fhdbList
.
forEach
(
info
=>
{
if
(
!
reportedEIds
.
has
(
ent
.
eId
))
{
let
riskLevel
=
""
;
continuousUnreported
.
add
(
ent
.
eId
);
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
=
"关注"
;
}
}
});
riskData
[
2
].
value
=
continuousUnreported
.
size
;
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