Ver código fonte

修复状态机数据过大问题

z332406259 4 anos atrás
pai
commit
6d21c9dd6f

+ 6 - 6
app/controller/carStatusCloudController.js

@@ -10,7 +10,7 @@ class CarStatusCloudController extends Controller {
     super(ctx);
     // 特殊的入参校验可以重写在这,默认可以使用commonRule
     this.createRule = {
-      vin: { type: 'string' },
+      vin: { type: 'string', required: false },
       startTime: { type: 'number', min: 0 }, // 开始时间的时间戳  包含
       endTime: { type: 'number', min: 0 }, // 结束时间的时间戳  不包含(客户端处理结束时间  下一日 ,下一月第一日 ,下一年第一日)
     };
@@ -21,7 +21,7 @@ class CarStatusCloudController extends Controller {
     // 校验参数 组装参数
     const payload = ctx.validate(this.createRule);
     // // 调用 Service 进行业务处理
-    const data = service.tFsmHitoryService.danger(payload);
+    const data = await service.tFsmHitoryService.danger(payload);
     // // 设置响应内容和响应状态码
     ctx.success({ data });
   }
@@ -31,7 +31,7 @@ class CarStatusCloudController extends Controller {
     // 校验参数 组装参数
     const payload = ctx.validate(this.createRule);
     // // 调用 Service 进行业务处理
-    const data = service.tFsmHitoryService.normal(payload);
+    const data = await service.tFsmHitoryService.normal(payload);
     // // 设置响应内容和响应状态码
     ctx.success({ data });
   }
@@ -41,7 +41,7 @@ class CarStatusCloudController extends Controller {
     // 校验参数 组装参数
     const payload = ctx.validate(this.createRule);
     // // 调用 Service 进行业务处理
-    const data = service.tFsmHitoryService.fault(payload);
+    const data = await service.tFsmHitoryService.fault(payload);
     // // 设置响应内容和响应状态码
     ctx.success({ data });
   }
@@ -51,7 +51,7 @@ class CarStatusCloudController extends Controller {
     // 校验参数 组装参数
     const payload = ctx.validate(this.createRule);
     // // 调用 Service 进行业务处理
-    const data = service.tFsmHitoryService.intelligence(payload);
+    const data = await service.tFsmHitoryService.intelligence(payload);
     // // 设置响应内容和响应状态码
     ctx.success({ data });
   }
@@ -61,7 +61,7 @@ class CarStatusCloudController extends Controller {
     // 校验参数 组装参数
     const payload = ctx.validate(this.createRule);
     // // 调用 Service 进行业务处理
-    const data = service.tFsmHitoryService.intelligenceMix(payload);
+    const data = await service.tFsmHitoryService.intelligenceMix(payload);
     // // 设置响应内容和响应状态码
     ctx.success({ data });
   }

+ 1 - 1
app/schedule/updateData.js

@@ -9,7 +9,7 @@ class UpdateData extends Subscription {
       // interval: '24h', // 1 分钟间隔
       cron: '0 0 5 * * ? ', // 每天凌晨5点
       type: 'worker', //  all 指定所有的都需要执行  worker 其中一个
-      // immediate: true,
+      immediate: true,
       cronOptions: {
         tz: 'Asia/Shanghai',
       },

+ 3 - 3
app/service/statisticsService.js

@@ -89,9 +89,9 @@ class StatisticsService extends Service {
         await this.sign([ 'msg_center_record' ], baseData, async () => {
           await ctx.service.msgCenterRecordService2.statistics(baseData);
         });
-        // await ctx.service.tVehicleReportInfoService.statistics(baseData);// 重新处理
-        // await ctx.service.tBoxAutoTestService.statistics(baseData);// 重新处理
-        // await ctx.service.tFsmHitoryService.statistics(baseData);// 重新处理
+        await ctx.service.tVehicleReportInfoService.statistics(baseData);// 重新处理
+        await ctx.service.tBoxAutoTestService.statistics(baseData);// 重新处理
+        await ctx.service.tFsmHitoryService.statistics(baseData);// 重新处理
       } catch (e) {
         const errData =
             { ...baseData.initData, start_time: new Date(), end_time: new Date(),

+ 71 - 66
app/service/tFsmHitoryService.js

@@ -7,18 +7,19 @@ class TFsmHitoryService extends Service {
 
   async danger({ type, startTime, endTime, vin }) {
     const { ctx } = this;
-    const cond = [{ $match: {} }];
+    let cond = [];
     if (vin) {
-      cond[0].$match.vin = vin;
+      cond = [{ $match: {} }]
+      cond[0].$match = { 'vins._id': vin };
     }
     const agg = [
       { $match: ctx.helper.getTimeRangMatch(startTime, endTime) },
       { $unwind: '$vins' },
       ...cond,
       { $group: ctx.helper.getTimeGroup(type,
-        { danger_drive_cnt: { $sum: '$danger_drive_cnt' },
-          safety_air_bag_cnt: { $sum: '$safety_air_bag_cnt' },
-          fault_cnt: { $sum: '$fault_cnt' },
+        { danger_drive_cnt: { $sum: '$vins.danger_drive_cnt' },
+          safety_air_bag_cnt: { $sum: '$vins.safety_air_bag_cnt' },
+          fault_cnt: { $sum: '$vins.fault_cnt' },
         }),
       },
     ];
@@ -30,7 +31,7 @@ class TFsmHitoryService extends Service {
     const { ctx } = this;
     const cond = [{ $match: {} }];
     if (vin) {
-      cond[0].$match.vin = vin;
+      cond[0].$match = { 'vins._id': vin };
     }
     const agg = [
       { $match: ctx.helper.getTimeRangMatch(startTime, endTime) },
@@ -38,14 +39,14 @@ class TFsmHitoryService extends Service {
       ...cond,
       { $group: ctx.helper.getTimeGroup(type,
         {
-          long_drive_cnt: { $sum: '$long_drive_cnt' }, // 长时行驶次数
-          speeding_cnt: { $sum: '$speeding_cnt' }, // 超速行驶次数
-          un_tie_sb_cnt: { $sum: '$un_tie_sb_cnt' }, // 未系安全带次数
-          leave_sw_cnt: { $sum: '$leave_sw_cnt' }, // 双手离开方向盘次数
-          acceleration_cnt: { $sum: '$acceleration_cnt' }, // 急加速次数
-          decelerate_cnt: { $sum: '$decelerate_cnt' }, // 加减速次数
-          turn_cnt: { $sum: '$turn_cnt' }, // 急转弯次数
-          clu_cnt: { $sum: '$clu_cnt' }, // 急换道次数
+          long_drive_cnt: { $sum: '$vins.long_drive_cnt' }, // 长时行驶次数
+          speeding_cnt: { $sum: '$vins.speeding_cnt' }, // 超速行驶次数
+          un_tie_sb_cnt: { $sum: '$vins.un_tie_sb_cnt' }, // 未系安全带次数
+          leave_sw_cnt: { $sum: '$vins.leave_sw_cnt' }, // 双手离开方向盘次数
+          acceleration_cnt: { $sum: '$vins.acceleration_cnt' }, // 急加速次数
+          decelerate_cnt: { $sum: '$vins.decelerate_cnt' }, // 加减速次数
+          turn_cnt: { $sum: '$vins.turn_cnt' }, // 急转弯次数
+          clu_cnt: { $sum: '$vins.clu_cnt' }, // 急换道次数
         }),
       },
     ];
@@ -57,7 +58,7 @@ class TFsmHitoryService extends Service {
     const { ctx } = this;
     const cond = [{ $match: {} }];
     if (vin) {
-      cond[0].$match.vin = vin;
+      cond[0].$match = { 'vins._id': vin };
     }
     const agg = [
       { $match: ctx.helper.getTimeRangMatch(startTime, endTime) },
@@ -65,13 +66,13 @@ class TFsmHitoryService extends Service {
       ...cond,
       { $group: ctx.helper.getTimeGroup(type,
         {
-          fault_type1: { $sum: '$fault_type1' }, // 故障类型1
-          fault_type2: { $sum: '$fault_type2' }, // 故障类型2
-          fault_type3: { $sum: '$fault_type3' }, // 故障类型3
-          fault_type4: { $sum: '$fault_type4' }, // 故障类型4
-          fault_type5: { $sum: '$fault_type5' }, // 故障类型5
-          fault_type6: { $sum: '$fault_type6' }, // 故障类型6
-          fault_type7: { $sum: '$fault_type7' }, // 故障类型7
+          fault_type1: { $sum: '$vins.fault_type1' }, // 故障类型1
+          fault_type2: { $sum: '$vins.fault_type2' }, // 故障类型2
+          fault_type3: { $sum: '$vins.fault_type3' }, // 故障类型3
+          fault_type4: { $sum: '$vins.fault_type4' }, // 故障类型4
+          fault_type5: { $sum: '$vins.fault_type5' }, // 故障类型5
+          fault_type6: { $sum: '$vins.fault_type6' }, // 故障类型6
+          fault_type7: { $sum: '$vins.fault_type7' }, // 故障类型7
         }),
       },
     ];
@@ -83,7 +84,7 @@ class TFsmHitoryService extends Service {
     const { ctx } = this;
     const cond = [{ $match: {} }];
     if (vin) {
-      cond[0].$match.vin = vin;
+      cond[0].$match = { 'vins._id': vin };
     }
     const agg = [
       { $match: ctx.helper.getTimeRangMatch(startTime, endTime) },
@@ -91,8 +92,8 @@ class TFsmHitoryService extends Service {
       ...cond,
       { $group: ctx.helper.getTimeGroup(type,
         {
-          v_parking_cnt: { $sum: '$v_parking_cnt' }, // 代客泊车次数
-          acc_cnt: { $sum: '$acc_cnt' }, // ACC次数
+          v_parking_cnt: { $sum: '$vins.v_parking_cnt' }, // 代客泊车次数
+          acc_cnt: { $sum: '$vins.acc_cnt' }, // ACC次数
         }),
       },
     ];
@@ -104,7 +105,7 @@ class TFsmHitoryService extends Service {
     const { ctx } = this;
     const cond = [{ $match: {} }];
     if (vin) {
-      cond[0].$match.vin = vin;
+      cond[0].$match = { 'vins._id': vin };
     }
     const agg = [
       { $match: ctx.helper.getTimeRangMatch(startTime, endTime) },
@@ -112,10 +113,10 @@ class TFsmHitoryService extends Service {
       ...cond,
       { $group: ctx.helper.getTimeGroup(type,
         {
-          intel: { $sum: '$intel' }, // 智能行程
-          pack: { $sum: '$pack' }, // 智能行程
-          acc: { $sum: '$acc' }, // 智能行程
-          mileage_cnt: { $sum: '$mileage_cnt' }, // 总行程
+          intel: { $sum: '$vins.intel' }, // 智能行程
+          pack: { $sum: '$vins.pack' }, // 智能行程
+          acc: { $sum: '$vins.acc' }, // 智能行程
+          mileage_cnt: { $sum: '$vins.mileage_cnt' }, // 总行程
         }),
       },
     ];
@@ -252,42 +253,46 @@ class TFsmHitoryService extends Service {
     const vins = await this.app.getHistoryModel(ctx.helper.formatTime3(startTime)).aggregate(agg)
       .allowDiskUse(true);
 
-    // const parkArr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ];
-    //
-    // for (const vin of vins) {
-    //   const list = await this.app.getHistoryModel(ctx.helper.formatTime3(startTime))
-    //     .find({ vin: vin._id }).batchSize(100000);
-    //   let iFlag = 0;
-    //   let pFlag = 0;
-    //   let aFlag = 0;
-    //   let intelCount = 0;
-    //   let packCount = 0;
-    //   let accCount = 0;
-    //   list.forEach(l => {
-    //     if (l.TRAVEL_STATUS == '1') {
-    //       iFlag = 0;
-    //       pFlag = 0;
-    //       aFlag = 0;
-    //     } else {
-    //       if (iFlag == 0 && ((l._S0210 && l._S0210[1] && parkArr.indexOf(l._S0210[1]) != -1) || l._S0508[1])) {
-    //         iFlag = 1;
-    //         intelCount++;
-    //       }
-    //       if (pFlag == 0 && l._S0210 && l._S0210[1] && parkArr.indexOf(l._S0210[1]) != -1) {
-    //         packCount++;
-    //         pFlag = 1;
-    //       }
-    //       if (aFlag == 0 && l._S0508[1]) {
-    //         accCount++;
-    //         aFlag = 1;
-    //       }
-    //     }
-    //   });
-    //
-    //   vin.intel = intelCount;
-    //   vin.pack = packCount;
-    //   vin.acc = accCount;
-    // }
+    const parkArr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ];
+
+    console.log('size', vins.length);
+    let num = 0;
+    for (const vin of vins) {
+      num++;
+      console.log('vin', vin._id, num);
+      const list = await this.app.getHistoryModel(ctx.helper.formatTime3(startTime))
+        .find({ vin: vin._id, timeStamp: { $gte: startTime, $lt: endTime } }).batchSize(100000);
+      let iFlag = 0;
+      let pFlag = 0;
+      let aFlag = 0;
+      let intelCount = 0;
+      let packCount = 0;
+      let accCount = 0;
+      list.forEach(l => {
+        if (l.TRAVEL_STATUS == '1') {
+          iFlag = 0;
+          pFlag = 0;
+          aFlag = 0;
+        } else {
+          if (iFlag == 0 && ((l._S0210 && l._S0210[1] && parkArr.indexOf(l._S0210[1]) != -1) || l._S0508[1])) {
+            iFlag = 1;
+            intelCount++;
+          }
+          if (pFlag == 0 && l._S0210 && l._S0210[1] && parkArr.indexOf(l._S0210[1]) != -1) {
+            packCount++;
+            pFlag = 1;
+          }
+          if (aFlag == 0 && l._S0508[1]) {
+            accCount++;
+            aFlag = 1;
+          }
+        }
+      });
+
+      vin.intel = intelCount;
+      vin.pack = packCount;
+      vin.acc = accCount;
+    }
 
     return vins;
   }

+ 1 - 0
config/config.local.js

@@ -22,6 +22,7 @@ module.exports = () => {
   config.mongoose = {
     clients: {
       etlDB: {// 原始数据库
+        // url: 'mongodb://faw-etl:faw-etl123@10.124.8.116:27016/faw-etl', // uat
         url: 'mongodb://faw-etl:faw-etl123@uat.dbaas.private:27028/faw-etl', // uat
         options: {
           useUnifiedTopology: true,