Commit eb85f2cf by Zllgogo

no message

parent eeb50188
......@@ -372,130 +372,176 @@ export async function getOperateData(year) {
// return riskData;
// }
export async function getRiskData() {
let riskData = [
{
key: "迁出异常",
value: 0
},
{
key: "办公地址冲突",
value: 0
},
{
key: "连续未填报",
value: 0
},
];
let bgdzctTable = {headerList:["", "", ""]}
// export async function getRiskData() {
// let riskData = [
// {
// key: "迁出异常",
// value: 0
// },
// {
// key: "办公地址冲突",
// value: 0
// },
// {
// key: "连续未填报",
// value: 0
// },
// ];
// let bgdzctTable = {headerList:["", "", ""]}
// 1. 获取所有迁出记录(state 为迁出)
let zaifuList = await selectManyTableData(OPERATIONALDATATYPE.多表联查,TABLENAME.企业基础信息表,{},["eId", "enterpriseName"],
{
[TABLENAME.企业孵化信息]: {
column: ["state", "moveOutTime", "moveOutType", "endTime"],
where: { state: FUHUASTATE.迁出 }
}
}
);
// // 1. 获取所有迁出记录(state 为迁出)
// let zaifuList = await selectManyTableData(OPERATIONALDATATYPE.多表联查,TABLENAME.企业基础信息表,{},["eId", "enterpriseName"],
// {
// [TABLENAME.企业孵化信息]: {
// column: ["state", "moveOutTime", "moveOutType", "endTime"],
// where: { state: FUHUASTATE.迁出 }
// }
// }
// );
let abnormalCount = 0;
// let abnormalCount = 0;
for (const info of zaifuList) {
const incubationInfo = info.enterprise_fuhuas[0]; // 关联的孵化信息
if (!incubationInfo || !incubationInfo.moveOutTime) continue;
// for (const info of zaifuList) {
// const incubationInfo = info.enterprise_fuhuas[0]; // 关联的孵化信息
// if (!incubationInfo || !incubationInfo.moveOutTime) continue;
let moveOutTime = new Date(incubationInfo.moveOutTime);
let endTime = info.enterprise_fuhuas[0].endTime ? new Date(info.enterprise_fuhuas[0].endTime) : null;
// let moveOutTime = new Date(incubationInfo.moveOutTime);
// let endTime = info.enterprise_fuhuas[0].endTime ? new Date(info.enterprise_fuhuas[0].endTime) : null;
// 1. 违约迁出
let isBreachExit = incubationInfo.moveOutType === EMIGRATIONTYPE.违约退租;
// // 1. 违约迁出
// let isBreachExit = incubationInfo.moveOutType === EMIGRATIONTYPE.违约退租;
// 2. 未到期迁出(迁出早于孵化结束)
let isEarlyExit = endTime && moveOutTime < endTime;
// // 2. 未到期迁出(迁出早于孵化结束)
// let isEarlyExit = endTime && moveOutTime < endTime;
// 如果满足任一异常条件,计为异常
if (isBreachExit || isEarlyExit) {
abnormalCount++;
}
}
// // 如果满足任一异常条件,计为异常
// if (isBreachExit || isEarlyExit) {
// abnormalCount++;
// }
// }
riskData[0].value = abnormalCount;
// riskData[0].value = abnormalCount;
// 2. 办公地址冲突(楼号 + 室号 + 时间段冲突)
// // 2. 办公地址冲突(楼号 + 室号 + 时间段冲突)
let 企业基础信息includeConf = {};
企业基础信息includeConf[TABLENAME.企业基础信息表] = { cloum: ["enterpriseName"], where: {} }
let leaseList = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.租赁信息, {}, ["eId", "building", "roomNumber", "startTime", "endTime"], 企业基础信息includeConf);
// let 企业基础信息includeConf = {};
// 企业基础信息includeConf[TABLENAME.企业基础信息表] = { cloum: ["enterpriseName"], where: {} }
// 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:楼号_室号,值是租赁时间段列表
let addressMap = new Map<string, Array<{ eId: number; enterpriseName:string; start: Date; end: Date }>>();
// // 构建一个 map,key 是 building_roomNumber:楼号_室号,值是租赁时间段列表
// let addressMap = new Map<string, Array<{ eId: number; enterpriseName:string; start: Date; end: Date }>>();
for (const lease of leaseList) {
const key = `${lease.building}_${lease.roomNumber}`;
const timeRange = {
eId: lease.eId,
enterpriseName: lease.enterprise.enterpriseName,
start: new Date(lease.startTime),
end: new Date(lease.endTime)
};
if (!addressMap.has(key)) {
addressMap.set(key, []);
}
addressMap.get(key)?.push(timeRange);
}
// for (const lease of leaseList) {
// const key = `${lease.building}_${lease.roomNumber}`;
// const timeRange = {
// eId: lease.eId,
// enterpriseName: lease.enterprise.enterpriseName,
// start: new Date(lease.startTime),
// end: new Date(lease.endTime)
// };
// if (!addressMap.has(key)) {
// addressMap.set(key, []);
// }
// addressMap.get(key)?.push(timeRange);
// }
let conflictCount = 0;
let conflictList = [];
// 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; // 当前地址组合已冲突,跳出循环
// }
// }
// }
// }
// 遍历每个地址组合,检查时间段是否有重叠
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];
// riskData[1].value = conflictCount;
// 判断时间段是否重叠
if (a.start < b.end && b.start < a.end) {
conflictCount++;
conflictList.push([a.enterpriseName, b.enterpriseName, "同时间段内,地址相同"])
break; // 当前地址组合已冲突,跳出循环
}
}
}
}
// // 3. 连续未填报(改进:在孵企业中没有任何经营数据)
// let selectParam = {state:STATE.是};
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 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 reportedEIds = new Set(reportedEnterprises.map(e => e.eId));
// 收集所有有填报记录的企业
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);
// }
// });
// 找出没有填报的在孵企业
let continuousUnreported = new Set<number>();
// riskData[2].value = continuousUnreported.size;
allIncubatingEnterprises.forEach(ent => {
if (!reportedEIds.has(ent.eId)) {
continuousUnreported.add(ent.eId);
}
// return riskData;
// }
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