Commit eb85f2cf by Zllgogo

no message

parent eeb50188
...@@ -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
};
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment