Commit 902871d0 by Leo Zheng

完成左边图的数据接口

- TODO:更多测试
parent 0581ff2b
import { dataStrategy } from "./dataStrategy";
import { randomStatusGenerator } from "../../util/randomStatusGenerator";
export class guchengLoadStrategy implements dataStrategy {
execute(): any {
return randomStatusGenerator.getRandomStatus();
}
}
\ No newline at end of file
import { dataStrategy } from "./dataStrategy";
import { DataExtractor } from "../../util/dataExtractor";
import excelDateToJSDate from "../../util/excelDateToJSDate";
import excelSerialToJSDate from "../../util/excelDateToJSDate";
import mapToObj from "../../util/mapToObj";
......@@ -13,7 +12,7 @@ export class sightVisitorFlowByHourStrategy implements dataStrategy {
if (!params || !params.query || !params.query.date || !params.query.sight) {
throw new Error('Date and sight parameters are required');
}
let sightData = this.extractor.getData(sightVisitorFlowByHourStrategy.fileName, sightVisitorFlowByHourStrategy.sheetName);
const sightData = this.extractor.getData(sightVisitorFlowByHourStrategy.fileName, sightVisitorFlowByHourStrategy.sheetName);
return mapToObj(this.getVisitorFlowByHour(sightData, params.query.sight, params.query.date));
}
......@@ -25,15 +24,13 @@ export class sightVisitorFlowByHourStrategy implements dataStrategy {
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['游玩时间']);
const rowHour = rowDate.getHours();
let rowDateString = '';
try {
rowDateString = rowDate.toISOString().split('T')[0];
}
catch (e) {
rowDateString = 'invalid time'
rowDateString = 'invalid time';
}
const rowSight = row['景点名称'];
rowDate.setHours(rowDate.getHours() - 8);
......@@ -44,7 +41,6 @@ export class sightVisitorFlowByHourStrategy implements dataStrategy {
}
}
});
return visitorCount;
}
}
......@@ -3,14 +3,19 @@ import { allEventDataStrategy } from "./eventDataStrategy";
import { sightVisitorFlowByDayStrategy } from "./sightVisitorFlowByDayStrategy";
import { gateStatusStrategy } from "./gateStatusStrategy";
import { sightVisitorFlowByHourStrategy } from "./sightVisitorFlowPerHourStrategy";
import { guchengLoadStrategy } from "./guchengLoadStrategy";
import { totalVisitorFlowStrategy } from "./totalVisitorFlowStrategy";
import {totalVisitorFlowByHourStrategy} from "./totalVisitorFlowByHourStrategy";
export class strategyFactory {
private static strategies: { [key: string]: new () => dataStrategy } = {
'allEvents': allEventDataStrategy,
'sightVisitorFlowByDay': sightVisitorFlowByDayStrategy,
'gateStatus': gateStatusStrategy,
'sightVisitorFlowPerHour': sightVisitorFlowByHourStrategy
'sightVisitorFlowPerHour': sightVisitorFlowByHourStrategy,
'guchengLoad': guchengLoadStrategy,
'totalVisitorFlow': totalVisitorFlowStrategy,
'totalVisitorFlowByDay': totalVisitorFlowByHourStrategy
};
static createStrategy(type: string): dataStrategy {
......
import { dataStrategy } from "./dataStrategy";
import {DataExtractor} from "../../util/dataExtractor";
import excelSerialToJSDate from "../../util/excelDateToJSDate";
import mapToObj from "../../util/mapToObj";
export class totalVisitorFlowByHourStrategy implements dataStrategy {
extractor = DataExtractor.getInstance();
static readonly fileName = '票务系统.xlsx';
static readonly sheetName = '票务系统-订单主表';
execute(params?: any): any {
if (!params || !params.query || !params.query.date) {
throw new Error('Date parameters are required');
}
const sightData = this.extractor.getData(totalVisitorFlowByHourStrategy.fileName, totalVisitorFlowByHourStrategy.sheetName);
return mapToObj(this.getTotalVisitorFlowByHour(sightData, params.query.date));
}
private getTotalVisitorFlowByHour(data: any, date: string) {
const visitorCount: Map<number, number> = new Map();
for (let hour = 0; hour < 24; hour++) {
visitorCount.set(hour, 0);
}
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['游玩时间']);
const rowHour = rowDate.getHours();
let rowDateString = '';
try {
rowDateString = rowDate.toISOString().split('T')[0];
}
catch (e) {
rowDateString = 'invalid time';
}
rowDate.setHours(rowDate.getHours() - 8);
if (rowDateString == date) {
if (visitorCount.has(rowHour - 8)) {
visitorCount.set(rowHour - 8, (visitorCount.get(rowHour) || 0) + 1);
}
}
});
return visitorCount;
}
}
\ No newline at end of file
import { dataStrategy } from "./dataStrategy";
import {DataExtractor} from "../../util/dataExtractor";
import excelSerialToJSDate from "../../util/excelDateToJSDate";
import mapToObj from "../../util/mapToObj";
export class totalVisitorFlowStrategy implements dataStrategy {
extractor = DataExtractor.getInstance();
static readonly fileName = '票务系统.xlsx';
static readonly sheetName = '票务系统-订单主表';
execute(params?: any): any {
if (!params || !params.query || !params.query.date) {
throw new Error("Data parameter is required.")
}
let sightData = this.extractor.getData(totalVisitorFlowStrategy.fileName, totalVisitorFlowStrategy.sheetName);
return mapToObj(this.getTotalVisitorByDay(sightData, params.query.date));
}
private getTotalVisitorByDay(data: any, date: string) {
const visitorCount: Map<string, number> = new Map();
visitorCount.set('total', 0);
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['游玩时间']);
let rowDateString = '';
try {
rowDateString = rowDate.toISOString().split('T')[0];
}
catch (e) {
rowDateString = 'invalid time'
}
if (rowDateString == date) {
visitorCount.set('total', visitorCount.get('total') + 1);
visitorCount.set(row['订单游客类型'], (visitorCount.get(row['订单游客类型']) || 0) + 1);
}
});
return visitorCount;
}
}
\ No newline at end of file
export class randomStatusGenerator {
private static statuses: string[] = ['正常', '拥挤', '畅'];
private static statuses: string[] = ['正常', '拥挤', '畅'];
static getRandomStatus(): string {
const randomIndex = Math.floor(Math.random() * randomStatusGenerator.statuses.length);
......
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