Commit b3ce4f36 by zhengyoujia

Merge branch 'test' into 'master'

Test

See merge request !8
parents 5061a810 05bd5f06
.idea
/out
/node_modules
/test
/src/__test__
/public
/logs
/video
/files
*test*
src/__test__
*.logs
*.zip
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
moduleFileExtensions: ['ts', 'tsx', 'js'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
},
testMatch: [
'**/src/**/*.test.(ts|tsx)',
],
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
};
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -27,7 +27,7 @@
"xml2js": "^0.4.23"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "jest"
},
"author": "cjj",
"license": "ISC",
......@@ -41,5 +41,11 @@
"video/**/*"
],
"outputPath": "dist"
},
"devDependencies": {
"@types/jest": "^29.5.12",
"jest": "^29.7.0",
"ts-jest": "^29.1.5",
"typescript": "^5.5.3"
}
}
import { randomStatusGenerator } from "../../../util/randomStatusGenerator";
import mapToObj from "../../../util/mapToObj";
import {abstractDataStrategyLeft} from "./abstractDataStrategyLeft";
export class gateStatusStrategy extends abstractDataStrategyLeft {
private gateStatusMap: Map<string, string> = new Map();
constructor() {
super();
this.gateStatusMap.set('south', '');
this.gateStatusMap.set('east', '');
this.gateStatusMap.set('west', '');
this.gateStatusMap.set('north', '');
}
execute(): any {
this.gateStatusMap.forEach((value, key, map) => {
map.set(key, randomStatusGenerator.getRandomStatus());
});
return mapToObj(this.gateStatusMap);
}
getGateStatusMap() {
return this.gateStatusMap;
}
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
execute(params?: any): any {
if (!params || !params.query || !params.query.date || !params.query.sight) {
throw new Error('Date and sight parameters are required');
throw new Error('Date and sight parameters are required.');
}
const sightData = this.extractor.getData(sightVisitorFlowByHourStrategy.FILENAME, sightVisitorFlowByHourStrategy.SHEETNAME);
return mapToObj(this.getVisitorFlowByHour(sightData, params.query.sight, params.query.date));
......@@ -20,7 +20,6 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['游玩时间']);
const rowHour = rowDate.getHours();
let rowDateString = '';
try {
rowDateString = rowDate.toISOString().split('T')[0];
......@@ -30,6 +29,7 @@ export class sightVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
}
const rowSight = row['景点名称'];
rowDate.setHours(rowDate.getHours() - sightVisitorFlowByHourStrategy.TIMEDIFFERENCE);
const rowHour = rowDate.getHours();
if (rowDateString == date && rowSight == sight) {
visitorCount.set(rowHour, (visitorCount.get(rowHour) || 0) + 1);
......
......@@ -7,7 +7,7 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
execute(params?: any): any {
if (!params || !params.query || !params.query.date) {
throw new Error('Date parameters are required');
throw new Error('Date parameter is required.');
}
const sightData = this.extractor.getData(totalVisitorFlowByHourStrategy.FILENAME, totalVisitorFlowByHourStrategy.SHEETNAME);
return mapToObj(this.getTotalVisitorFlowByHour(sightData, params.query.date));
......@@ -21,7 +21,6 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['游玩时间']);
const rowHour = rowDate.getHours();
let rowDateString = '';
try {
rowDateString = rowDate.toISOString().split('T')[0];
......@@ -29,7 +28,10 @@ export class totalVisitorFlowByHourStrategy extends abstractDataStrategyLeft {
catch (e) {
rowDateString = 'invalid time';
}
rowDate.setHours(rowDate.getHours() - totalVisitorFlowByHourStrategy.TIMEDIFFERENCE);
rowDate.setHours(rowDate.getHours() - 8);
const rowHour = rowDate.getHours();
if (rowDateString == date) {
visitorCount.set(rowHour, (visitorCount.get(rowHour) || 0) + 1);
......
......@@ -20,7 +20,7 @@ export abstract class abstractDataStrategyRight implements dataStrategy {
protected paramsCheck(params) {
if (!params || !params.query || !params.query.year) {
throw new Error('Year parameters are required');
throw new Error('Year parameter is required.');
}
}
......
import {abstractDataStrategyRight} from "./abstractDataStrategyRight";
import excelSerialToJSDate from "../../../util/excelDateToJSDate";
import getRandomNumber from "../../../util/randomNumberGenerator";
export class dispatchTimeStrategy extends abstractDataStrategyRight {
execute(params?: any): any {
this.paramsCheck(params);
return this.getAverageDispatchTime(this.eventData, params.query.year);
}
private getAverageDispatchTime(data: any, year: number) {
let count = 0, time = 0;
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['创建时间']);
const rowYear = rowDate.getFullYear();
if (rowYear == year) {
if (row['处置状态'] == '待调度') {
time = getRandomNumber(0.5, 1.7, 1);
count++;
}
}
})
return time / count;
}
}
\ No newline at end of file
......@@ -16,6 +16,7 @@ export class eventMonthDistributionStrategy extends abstractDataStrategyRight {
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['创建时间']);
rowDate.setHours(rowDate.getHours() - eventMonthDistributionStrategy.TIMEDIFFERENCE);
const rowYear = rowDate.getFullYear();
const rowMonth = rowDate.getMonth();
......
......@@ -16,10 +16,9 @@ export class eventTimeDistributionStrategy extends abstractDataStrategyRight {
data.forEach(row => {
const rowDate = excelSerialToJSDate(row['创建时间']);
rowDate.setHours(rowDate.getHours() - eventTimeDistributionStrategy.TIMEDIFFERENCE);
const rowHour = rowDate.getHours()
const rowYear = rowDate.getFullYear();
rowDate.setHours(rowDate.getHours() - eventTimeDistributionStrategy.TIMEDIFFERENCE);
if (rowYear == year) {
eventCount.set(rowHour, (eventCount.get(rowHour) || 0) + 1);
}
......
......@@ -38,7 +38,7 @@ export class strategyFactory {
'getEventSubCategoryCount': eventSubCategoryCountStrategy,
'getEventSourceCount': eventSrcStrategy,
'getGridEventCount': gridEventCountStrategy,
'getEventProcessingTime': eventProcessingTimeStrategy
'getEventProcessingTime': eventProcessingTimeStrategy,
};
static createStrategy(type: string): dataStrategy {
......
......@@ -20,7 +20,6 @@ export class DataExtractor {
private loadAllData(): void {
const dirPath = join(__dirname, '../../src/data');
const files = readdirSync(dirPath).filter(file => file.endsWith('.xlsx'));
console.log(dirPath);
files.forEach(file => {
const filePath = join(dirPath, 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