Commit bf81317a by Leo Zheng

给右边部分的API增加注释

parent 26e06e9a
/**
* abstractDataStrategyMid.ts
* 该文件定义了一个抽象类,用于中间数据策略的基础实现。
* 该文件定义了一个抽象类,用于中间数据策略的基础实现。
*/
import {dataStrategy} from "../dataStrategy";
......
import {dataStrategy} from "../dataStrategy";
import {DataExtractor} from "../../../util/dataExtractor";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
/**
* abstractDataStrategyRight.ts
* 该文件定义了一个抽象类,用于右侧数据策略的基础实现。
*/
import { dataStrategy } from "../dataStrategy";
import { DataExtractor } from "../../../util/dataExtractor";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
/**
* 抽象数据策略右侧类,所有右侧具体策略类都需要继承该抽象类。
*/
export abstract class abstractDataStrategyRight implements dataStrategy {
extractor = DataExtractor.getInstance();
static readonly FILENAME = '寿州古城.xlsx';
......@@ -10,24 +17,43 @@ export abstract class abstractDataStrategyRight implements dataStrategy {
static readonly TIMEDIFFERENCE = 8;
protected eventData;
/**
* 构造函数,读取 Excel 数据并初始化 eventData 属性。
*/
constructor() {
this.eventData = this.readDataFromExcel();
}
/**
* 执行策略的方法,具体实现由子类提供。
* @param params - 可选参数。
*/
abstract execute(params?: any): any;
execute(params?: any): any {
}
/**
* 参数检查方法,检查参数中是否包含年份信息。
* @param params - 请求参数。
* @throws 如果参数无效则抛出错误。
*/
protected paramsCheck(params) {
if (!params || !params.query || !params.query.year) {
throw new Error('Year parameter is required.');
}
}
/**
* 从 Excel 文件中读取数据。
* @returns 读取的数据。
*/
protected readDataFromExcel() {
return this.extractor.getData(abstractDataStrategyRight.FILENAME, abstractDataStrategyRight.SHEETNAME);
}
/**
* 注册事件项,初始化事件计数映射。
* @param list - 事件名称列表。
* @returns 初始化的事件计数映射。
*/
protected registerItems(list: string[]) {
const eventCount: Map<string, number> = new Map();
list.forEach(event => {
......@@ -36,17 +62,24 @@ export abstract class abstractDataStrategyRight implements dataStrategy {
return eventCount;
}
/**
* 统计事件列表中每个事件的数量。
* @param list - 事件名称列表。
* @param target - 目标事件名称。
* @param data - 数据源。
* @param year - 指定年份。
* @returns 事件计数映射。
*/
protected getListCount(list: string[], target: string, data: any, year: number) {
const count = this.registerItems(list);
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['创建时间']);
const rowYear = rowDate.getFullYear();
if (rowYear == year) {
if (rowYear === year) {
count.set(row[target], count.get(row[target]) + 1);
}
});
return count;
}
}
/**
* eventCategoryCountStrategy.ts
* 该文件定义了事件类别计数策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import mapToObj from "../../../util/mapToObj";
/**
* 事件类别计数策略类,继承自 abstractDataStrategyRight。
*/
export class eventCategoryCountStrategy extends abstractDataStrategyRight {
/**
* 执行事件类别计数策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件类别计数的对象表示。
*/
execute(params?: any): any {
// 检查参数是否有效
this.paramsCheck(params);
// 定义网格名称列表
const eventList = ['咨询', '求助', '预警系统', '投诉', '指挥调度', '建议']
// 目标字段名称
const target = '事件类型';
// 获取指定年份的网格事件数量统计,并转换为对象
return mapToObj(this.getListCount(eventList, target, this.eventData, params.query.year));
}
}
\ No newline at end of file
/**
* eventMonthDistributionStrategy.ts
* 该文件定义了事件按月分布策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import mapToObj from "../../../util/mapToObj";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
/**
* 事件按月分布策略类,继承自 abstractDataStrategyRight。
*/
export class eventMonthDistributionStrategy extends abstractDataStrategyRight {
/**
* 执行事件按月分布策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件按月分布计数的对象表示。
*/
execute(params?: any): any{
// 检查参数是否有效
this.paramsCheck(params);
// 获取指定年份的事件按月分布计数,并转换为对象
return mapToObj(this.getEventMonthDistribution(this.eventData, params.query.year));
}
/**
* 获取指定年份的事件按月分布计数。
* @param data - 从数据源提取的数据。
* @param year - 指定年份。
* @returns 事件按月分布计数的映射。
*/
private getEventMonthDistribution(data: any, year: number) {
const eventCount: Map<number, number> = new Map();
for (let month = 1; month <= 12; month++) {
......
/**
* eventProcessingTimeStrategy.ts
* 该文件定义了事件处理时间策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
import getRandomNumber from "../../../util/randomNumberGenerator";
import mapToObj from "../../../util/mapToObj";
/**
* 事件处理时间策略类,继承自 abstractDataStrategyRight。
*/
export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
/**
* 执行事件处理时间策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件处理时间的对象表示。
*/
execute(params?: any): any {
// 检查参数是否有效
this.paramsCheck(params);
// 获取指定年份的事件处理时间,并转换为对象
return mapToObj(this.getEventProcessingTime(this.eventData, params.query.year));
}
/**
* 获取指定年份的事件处理时间。
* @param data - 从数据源提取的数据。
* @param year - 指定年份。
* @returns 事件处理时间的映射。
*/
private getEventProcessingTime(data: any, year: number) {
const statusList = ['调度时长', '处置等待', '处置时长', '办结时长']
const timeMap = this.registerItems(statusList);
......@@ -81,6 +103,12 @@ export class eventProcessingTimeStrategy extends abstractDataStrategyRight {
}
/**
* 计算两个时间点之间的时间差。
* @param start - 开始时间。
* @param end - 结束时间。
* @returns 时间差(分钟)。
*/
private calculateTimeDifference(start: number, end: number): number {
const time = excelSerialToJSDate(start).getTime() - excelSerialToJSDate(end).getTime();
return time / (1000 * 60);
......
/**
* eventSrcStrategy.ts
* 该文件定义了事件来源统计策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import mapToObj from "../../../util/mapToObj";
/**
* 事件来源策略类,继承自 abstractDataStrategyRight。
*/
export class eventSrcStrategy extends abstractDataStrategyRight {
/**
* 执行事件来源统计策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件来源统计的对象表示。
*/
execute(params?: any): any {
// 检查参数是否有效
this.paramsCheck(params);
// 定义事件来源列表
const sourceList = ['景管通', '12301热线', '舆情平台', '电话热线', '指挥调度', '12345热线']
// 目标字段名称
const target = '事件来源';
// 获取指定年份的事件来源统计,并转换为对象
return mapToObj(this.getListCount(sourceList, target, this.eventData, params.query.year));
}
}
\ No newline at end of file
/**
* eventSubCategoryCountStrategy.ts
* 该文件定义了事件子类别计数策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import mapToObj from "../../../util/mapToObj";
/**
* 事件子类别计数策略类,继承自 abstractDataStrategyRight。
*/
export class eventSubCategoryCountStrategy extends abstractDataStrategyRight {
/**
* 执行事件子类别计数策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件子类别计数的对象表示。
*/
execute(params?: any): any {
// 检查参数是否有效
this.paramsCheck(params);
// 定义事件子类别列表
const eventList = ['服务质量', '医疗救助', '纠纷', '环境卫生', '血族调查', '设施设备'];
// 目标字段名称
const target = '事件子类型';
// 获取指定年份的事件子类别计数,并转换为对象
return mapToObj(this.getListCount(eventList, target, this.eventData, params.query.year));
}
}
\ No newline at end of file
/**
* eventTimeDistributionStrategy.ts
* 该文件定义了事件时间分布策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
import mapToObj from "../../../util/mapToObj";
/**
* 事件时间分布策略类,继承自 abstractDataStrategyRight。
*/
export class eventTimeDistributionStrategy extends abstractDataStrategyRight {
/**
* 执行事件时间分布策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件时间分布的对象表示。
*/
execute(params?: any): any{
// 检查参数是否有效
this.paramsCheck(params);
// 获取指定年份的事件时间分布,并转换为对象
return mapToObj(this.getEventTimeDistribution(this.eventData, params.query.year));
}
/**
* 获取指定年份的事件时间分布。
* @param data - 从数据源提取的数据。
* @param year - 指定年份。
* @returns 事件时间分布的映射。
*/
private getEventTimeDistribution(data: any, year: number) {
const eventCount: Map<number, number> = new Map();
for (let hour = 0; hour < 24; hour++) {
......
/**
* getEventCountByYearStrategy.ts
* 该文件定义了按年统计事件数量策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
import mapToObj from "../../../util/mapToObj";
/**
* 按年统计事件数量策略类,继承自 abstractDataStrategyRight。
*/
export class getEventCountByYearStrategy extends abstractDataStrategyRight {
/**
* 执行按年统计事件数量策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件数量统计的对象表示。
*/
execute(params?: any): any {
// 检查参数是否有效
this.paramsCheck(params);
// 获取指定年份的事件数量统计,并转换为对象
return mapToObj(this.getEventCountForYear(this.eventData, params.query.year));
}
/**
* 获取指定年份的事件数量统计。
* @param data - 从数据源提取的数据。
* @param year - 指定年份。
* @returns 事件数量统计的映射。
*/
private getEventCountForYear(data: any, year: number) {
// 定义事件列表
const eventList = ['事件总数', '历史遗留', '办结率'];
const eventCount = this.registerItems(eventList);
......@@ -32,6 +56,8 @@ export class getEventCountByYearStrategy extends abstractDataStrategyRight {
eventCount.set('历史遗留', eventCount.get('历史遗留') + 1);
}
});
// 计算办结率
eventCount.set('办结率', finishedEventCount / eventCount.get('事件总数'));
return eventCount;
}
......
/**
* gridEventCountStrategy.ts
* 该文件定义了按网格统计事件数量策略的具体实现。
*/
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import mapToObj from "../../../util/mapToObj";
/**
* 按网格统计事件数量策略类,继承自 abstractDataStrategyRight。
*/
export class gridEventCountStrategy extends abstractDataStrategyRight {
/**
* 执行按网格统计事件数量策略。
* @param params - 请求参数,包含年份信息。
* @returns 事件数量统计的对象表示。
*/
execute(params?: any): any {
// 检查参数是否有效
this.paramsCheck(params);
// 定义网格名称列表
const gridList = ['寿州全域', '八公山景区', '寿县古城'];
// 目标字段名称
const target = '网格名称';
// 获取指定年份的网格事件数量统计,并转换为对象
return mapToObj(this.getListCount(gridList, target, this.eventData, params.query.year));
}
}
\ No newline at end of file
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