12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 'use strict';
- const Service = require('egg').Service;
- class TVehicleReportInfoService extends Service {
- // vhl_val_cnt车况数量
- // alarm_cnt 告警总数量
- // failure_cnt 故障总数量
- // 车辆上报分类信息统计
- async index({ type, startTime, endTime, seriesCode, modelCode }) {
- const { ctx } = this;
- const cond = [{ $match: {} }];
- if (seriesCode) {
- cond[0].$match['car._id.series_code'] = seriesCode;
- }
- if (modelCode) {
- cond[0].$match['car._id.model_code'] = modelCode;
- }
- const agg = [
- { $match: ctx.helper.getTimeRangMatch(startTime, endTime) },
- { $unwind: '$car' },
- ...cond,
- { $group: ctx.helper.getTimeGroup(type, { vhl_val_cnt: { $sum: '$car.vhl_val_cnt' },
- alarm_cnt: { $sum: '$car.alarm_cnt' }, failure_cnt: { $sum: '$car.failure_cnt' } }) },
- ];
- return await ctx.model.Local.TVehicleReportInfoModel.aggregateFix(agg);
- }
- // -------------------------------------------------------------------数据清洗----------------------------------------------------------------------
- async statistics({ timeRangData, initData, isForceUpdate }) {
- const { ctx } = this;
- const hasData = await ctx.service.statisticsService.saveBefore(ctx.model.Local.TVehicleReportInfoModel,
- { ...initData });
- if (hasData && !isForceUpdate) {
- return;
- }
- initData.start_time = new Date();
- const car = await this.group(timeRangData);
- ctx.logger.info('任务进行group');
- await ctx.service.statisticsService.save(ctx.model.Local.TVehicleReportInfoModel,
- { ...initData, car }, isForceUpdate);
- }
- async group({ startTime, endTime }) {
- const { ctx } = this;
- const agg = [
- { $match: ctx.helper.getTimeRangMatch(startTime, endTime, 'report_time') },
- { $group: { _id: '$vin',
- vhl_val_cnt: { $sum: '$vhl_val_cnt' }, alarm_cnt: { $sum: '$alarm_cnt' }, failure_cnt: { $sum: '$failure_cnt' } },
- },
- { $lookup: { from: 't_vehicle_record', localField: '_id', foreignField: 'vin', as: 'car' } },
- { $unwind: { path: '$car', preserveNullAndEmptyArrays: true } },
- { $group: { _id: { series_code: '$car.series_code', model_code: '$car.model_code' },
- vhl_val_cnt: { $sum: '$vhl_val_cnt' }, alarm_cnt: { $sum: '$alarm_cnt' }, failure_cnt: { $sum: '$failure_cnt' } },
- },
- ];
- return await ctx.model.TVehicleReportInfoModel.aggregateFix(agg);
- }
- }
- module.exports = TVehicleReportInfoService;
|