Jelajahi Sumber

五损计算及接口

chenminghua 1 tahun lalu
induk
melakukan
15290cee72
21 mengubah file dengan 646 tambahan dan 883 penghapusan
  1. 0 794
      data/power/agc_info_net.json
  2. 1 5
      power-fitting/src/main/java/com/gyee/power/fitting/common/alg/PowerProcessALG.java
  3. 16 0
      power-fitting/src/main/java/com/gyee/power/fitting/common/constants/Constants.java
  4. 4 0
      power-fitting/src/main/java/com/gyee/power/fitting/common/feign/IAdapterService.java
  5. 5 0
      power-fitting/src/main/java/com/gyee/power/fitting/common/spring/InitialRunner.java
  6. 23 0
      power-fitting/src/main/java/com/gyee/power/fitting/common/util/CollectUtil.java
  7. 3 5
      power-fitting/src/main/java/com/gyee/power/fitting/common/util/FileUtil.java
  8. 47 0
      power-fitting/src/main/java/com/gyee/power/fitting/controller/analyse/FiveLossInfoController.java
  9. 21 2
      power-fitting/src/main/java/com/gyee/power/fitting/controller/base/WindInfoController.java
  10. 1 8
      power-fitting/src/main/java/com/gyee/power/fitting/model/Powerfittinganalysis.java
  11. 18 16
      power-fitting/src/main/java/com/gyee/power/fitting/model/Powerlossinfo.java
  12. 64 0
      power-fitting/src/main/java/com/gyee/power/fitting/model/custom/FjjxbVo.java
  13. 7 0
      power-fitting/src/main/java/com/gyee/power/fitting/model/custom/ToData.java
  14. 7 1
      power-fitting/src/main/java/com/gyee/power/fitting/service/PowerfittinganalysisService.java
  15. 16 0
      power-fitting/src/main/java/com/gyee/power/fitting/service/PowerlossinfoService.java
  16. 1 1
      power-fitting/src/main/java/com/gyee/power/fitting/service/custom/curve/DataFittingService.java
  17. 315 30
      power-fitting/src/main/java/com/gyee/power/fitting/service/custom/fiveloss/FiveLossService.java
  18. 2 1
      power-fitting/src/main/java/com/gyee/power/fitting/service/impl/PowerfittinganalysisServiceImpl.java
  19. 79 0
      power-fitting/src/main/java/com/gyee/power/fitting/service/impl/PowerlossinfoServiceImpl.java
  20. 10 10
      power-fitting/src/main/resources/application.yaml
  21. 6 10
      power-fitting/src/main/resources/mapper/PowerlossinfoMapper.xml

+ 0 - 794
data/power/agc_info_net.json

@@ -1,794 +0,0 @@
-[
-  {
-    "id": "MHS_BT",
-    "coordinate": {
-      "x": 0,
-      "y": 0
-    },
-    "installedCapacity": 69.5,
-    "title": "麻黄山第二风电场",
-    "smallTitle": "(麻黄山)",
-    "status": {
-      "name": "状态",
-      "tag": "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_AI0296",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_AI0013",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_AI0294",
-        "multiplier": 0.1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0193",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_AI0295",
-        "multiplier": 0.01,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "MHSFGL.NX_GD_MHSF_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI1207"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI1208"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI1209"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI1210"
-      }
-    ]
-  },
-  {
-    "id": "NSS_BT",
-    "coordinate": {
-      "x": 0,
-      "y": 1
-    },
-    "installedCapacity": 148.5,
-    "title": "牛首山第二风电场",
-    "smallTitle": "(牛首山)",
-    "status": {
-      "name": "状态",
-      "tag": "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_AI1019",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_AI1009",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_AI1010",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0193",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_AI1011",
-        "multiplier": 0.1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "NSSFGL.NX_GD_NSSF_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI1547"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI1556"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI1567"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI1568"
-      }
-    ]
-  },
-  {
-    "id": "QS_BT",
-    "coordinate": {
-      "x": 0,
-      "y": 2
-    },
-    "installedCapacity": 99,
-    "title": "麻黄山第六风电场",
-    "smallTitle": "(青山)",
-    "status": {
-      "name": "状态",
-      "tag": "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_AI1281",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_AI1282",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_AI1284",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "QSFCJSFW.NX_GD_QSF_FJ_P1_XXX_XXX_CI0192,QSFCJSFW.NX_GD_QSF_FJ_P2_XXX_XXX_CI0192",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_AI1285",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "QSFGL.NX_GD_QSF_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI2442"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI2443"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI2444"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI2445"
-      }
-    ]
-  },
-  {
-    "id": "XN6_BT",
-    "coordinate": {
-      "x": 1,
-      "y": 0
-    },
-    "installedCapacity": 49.5,
-    "title": "星能第六风电场",
-    "smallTitle": "(石板泉一期)",
-    "status": {
-      "name": "状态",
-      "tag": "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0818",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0012",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0819",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0826",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0820",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0827",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3831"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3832"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3833"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3834"
-      }
-    ]
-  },
-  {
-    "id": "N5_BT",
-    "coordinate": {
-      "x": 1,
-      "y": 1
-    },
-    "installedCapacity": 149,
-    "title": "牛首山第五风电场",
-    "smallTitle": "(二三四期)",
-    "status": {
-      "name": "状态",
-      "tag": "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI026X"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0818",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0817",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0819",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0830",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0820",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_AI0831",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3831"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3832"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3833"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3834"
-      }
-    ]
-  },
-  {
-    "id": "XS_BT",
-    "coordinate": {
-      "x": 1,
-      "y": 2
-    },
-    "installedCapacity": 99,
-    "title": "香山第五风电场",
-    "smallTitle": "(香山)",
-    "status": {
-      "name": "状态",
-      "tag": "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_AI0411",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_AI0415",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_AI0412",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0193",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_AI0413",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "XSFGL.NX_GD_XSF_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1749"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1750"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1753"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1754"
-      }
-    ]
-  },
-  {
-    "id": "SL_BT",
-    "coordinate": {
-      "x": 1,
-      "y": 3
-    },
-    "installedCapacity": 49.5,
-    "title": "宋堡第六风电场",
-    "smallTitle": "(青山三期)",
-    "status": {
-      "name": "状态",
-      "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0165"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_AI0052",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "SLDQ.NX_GD_QSF_DQ_P1_L1_001_AI0013",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_AI0053",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "QSFCJSFW.NX_GD_QSF_FJ_P3_XXX_XXX_CI0192",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_AI0054",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "SLFGL.NX_GD_QSF_YC_P1_L1_001_LCDQ01",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0142"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0143"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0162"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0163"
-      }
-    ]
-  },
-  {
-    "id": "XH_BT",
-    "coordinate": {
-      "x": 2,
-      "y": 0
-    },
-    "installedCapacity": 20,
-    "title": "宣和光伏电站",
-    "smallTitle": "(宣和)",
-    "status": {
-      "name": "状态",
-      "tag": "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "XHDQ.NX_GD_XHG_DQ_P1_L1_001_AI0204",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "XHDQ.NX_GD_XHG_DQ_P1_L1_001_AI0193",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "XHDQ.NX_GD_XHG_DQ_P1_L1_001_AI0194",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0192",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "XHDQ.NX_GD_XHG_DQ_P1_L1_001_AI0195",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "XHGGL.NX_GD_XHG_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0099"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0100"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": ""
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": ""
-      }
-    ]
-  },
-  {
-    "id": "DWK_BT",
-    "coordinate": {
-      "x": 2,
-      "y": 1
-    },
-    "installedCapacity": 10,
-    "title": "大武口光伏电站",
-    "smallTitle": "(大武口)",
-    "status": {
-      "name": "状态",
-      "tag": "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_AI0838",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0192",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_AI0839",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "DWKGGL.NX_GD_DWKG_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_DI0761"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_DI0767"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": ""
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": ""
-      }
-    ]
-  },
-  {
-    "id": "PL_BT",
-    "coordinate": {
-      "x": 2,
-      "y": 2
-    },
-    "installedCapacity": 30,
-    "title": "平罗光伏电站",
-    "smallTitle": "(平罗三期)",
-    "status": {
-      "name": "状态",
-      "tag": "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0263"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_AI0838",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_AI0835",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_AI0836",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0192",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_AI0837",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "PLGGL.NX_GD_PLG_YC_P1_L1_001_CDQ0001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": ""
-      },
-      {
-        "name": "AGC远方:",
-        "tag": ""
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": ""
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": ""
-      }
-    ]
-  },
-  {
-    "id": "HZJ_BT",
-    "coordinate": {
-      "x": 3,
-      "y": 0
-    },
-    "installedCapacity": 50,
-    "title": "海子井光伏电站",
-    "smallTitle": "(海子井)",
-    "status": {
-      "name": "状态",
-      "tag": "HZJGDCJSFW.NX_GD_HZJG_XX_XX_XXX_XXX_CI0010"
-    },
-    "aiPoints": [
-      {
-        "name": "有功设定限值:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_AI0016",
-        "multiplier": 0.001,
-        "unit": "MW",
-        "type": 1
-      },
-      {
-        "name": "实发有功:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_AI0015",
-        "multiplier": 1,
-        "unit": "MW",
-        "type": 2
-      },
-      {
-        "name": "AGC可调上限:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_AI0021",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "理论功率:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_AI0214",
-        "multiplier": 1,
-        "unit": "MW"
-      },
-      {
-        "name": "AGC可调下限:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_AI0022",
-        "multiplier": 0.001,
-        "unit": "MW"
-      },
-      {
-        "name": "预测功率:",
-        "tag": "HZJGGL.NX_GD_HZJG_YC_P1_L1_001_CDQ001",
-        "multiplier": 1,
-        "unit": "MW"
-      }
-    ],
-    "diPoints": [
-      {
-        "name": "AGC投入:",
-        "tag": "HZJDQ.NX_GD_HZJG_DQ_P1_L1_001_DI0090"
-      },
-      {
-        "name": "AGC远方:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_DI0005"
-      },
-      {
-        "name": "有功增闭锁:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_DI0030"
-      },
-      {
-        "name": "有功减闭锁:",
-        "tag": "HZJAGC.NX_GD_HZJG_DQ_P1_L1_001_DI0031"
-      }
-    ]
-  }
-]

+ 1 - 5
power-fitting/src/main/java/com/gyee/power/fitting/common/alg/PowerProcessALG.java

@@ -60,11 +60,7 @@ public class PowerProcessALG {
                 filter = 1;
             }
             // 过滤非合理值 并网状态下功率小于等于0
-            if (filter == 0 && isfhl && item.getPower() <= 0) {
-                filter = 1;
-            }
-            // 过滤非合理值 并网状态下功率小于等于0
-            if (filter == 0 && isfhl && item.getSpeed() < 3 && item.getPower() != 0) {
+            if (filter == 0 && isfhl && item.getSpeed() < 0 && item.getPower() <= minp) {
                 filter = 1;
             }
             // 过滤并网后十分钟

+ 16 - 0
power-fitting/src/main/java/com/gyee/power/fitting/common/constants/Constants.java

@@ -1,5 +1,7 @@
 package com.gyee.power.fitting.common.constants;
 
+import com.gyee.power.fitting.model.anno.Desc;
+
 public class Constants {
 
     // 数据准备  标记
@@ -10,4 +12,18 @@ public class Constants {
 
     // 数据处理完  标记
     public static final String DATA_FITTING = "fitting";
+
+    //功率
+    public static final String CODE_POINT_POWER = "AI130";
+
+    //风速
+    public static final String CODE_POINT_SPEED = "AI022";
+
+    //明细状态
+    // 0-待机  1-手动停机  2-正常发电  3-缺陷降出力  4-限电降出力  5-限电停机  6-故障停机
+    // 7-场内受累停机  8-检修停机  9-场内受累检修  10-电网受累  11-环境受累  12-风机离线
+    public static final String CODE_POINT_MXZT = "ZTMX";
+
+    //电量
+    public static final String CODE_POINT_RFDL = "RFDL";
 }

+ 4 - 0
power-fitting/src/main/java/com/gyee/power/fitting/common/feign/IAdapterService.java

@@ -31,4 +31,8 @@ public interface IAdapterService {
     @RequestLine("GET /ts/history/raw?tagName={tagName}&startTs={startTs}&endTs={endTs}")
     List<TsDoubleData> getRawValuesByKey(@Param(value = "tagName") String tagName, @Param(value = "startTs") long startTs,
                                       @Param(value = "endTs") long endTs);
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /ts/history/section?tagNames={tagNames}&ts={ts}")
+    JSONObject getHistorySection(@Param(value = "tagNames") String tagNames, @Param(value = "ts") long ts);
 }

+ 5 - 0
power-fitting/src/main/java/com/gyee/power/fitting/common/spring/InitialRunner.java

@@ -58,9 +58,12 @@ public class InitialRunner implements CommandLineRunner {
 
     /**期次**/
     public static List<Project> projectList = new ArrayList<>();
+    public static Map<String, Project> projectMap = new HashMap<>();
     /**线路**/
     public static List<Line> lineList = new ArrayList<>();
+    public static Map<String, Line> lineMap = new HashMap<>();
 
+    /** key: NG01_01 **/
     public static Map<String, List<Windturbinetestingpointai2>> pointMap = new HashMap<>();
 
     /**所有设备型号**/
@@ -135,10 +138,12 @@ public class InitialRunner implements CommandLineRunner {
 
     private void cacheProject(){
         projectList.addAll(projectService.selectList());
+        projectList.forEach(f -> projectMap.put(f.getId(), f));
     }
 
     private void cacheLine(){
         lineList.addAll(lineService.selectList());
+        lineList.forEach(f -> lineMap.put(f.getId(), f));
     }
 
 }

+ 23 - 0
power-fitting/src/main/java/com/gyee/power/fitting/common/util/CollectUtil.java

@@ -1,5 +1,8 @@
 package com.gyee.power.fitting.common.util;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
@@ -11,4 +14,24 @@ public class CollectUtil {
         Map<Object, Boolean> seen = new ConcurrentHashMap<>();
         return object -> seen.putIfAbsent(keyExtractor.apply(object), Boolean.TRUE) == null;
     }
+
+    /**
+     * 通过数量分组
+     * @param list
+     * @param qty
+     * @return
+     * @param <T>
+     */
+    public static <T> List<List<T>> groupListByQty(List<T> list, int qty) {
+        if (list == null || list.size() == 0 || qty <= 0) {
+            return Collections.EMPTY_LIST;
+        }
+        List<List<T>> result = new ArrayList<>();
+        int count = 0;
+        while (count < list.size()) {
+            result.add(new ArrayList<>(list.subList(count, Math.min((count + qty), list.size()))));
+            count += qty;
+        }
+        return result;
+    }
 }

+ 3 - 5
power-fitting/src/main/java/com/gyee/power/fitting/common/util/FileUtil.java

@@ -76,7 +76,6 @@ public class FileUtil {
             }
 
         } catch (IOException e) {
-            e.printStackTrace();
             log.error(e.getMessage());
         } catch (Exception e) {
             e.printStackTrace();
@@ -87,7 +86,6 @@ public class FileUtil {
                 os.close();
                 inputStream.close();
             } catch (IOException e) {
-                e.printStackTrace();
                 log.error(e.getMessage());
             }
         }
@@ -111,10 +109,10 @@ public class FileUtil {
      */
     public static List<String> readFile(String fileName, boolean isAll) {
         List<String> list = new ArrayList<>();
-
-        File file = new File(fileName);
         BufferedReader reader = null;
+
         try {
+            File file = new File(fileName);
             reader = new BufferedReader(new FileReader(file));
             String content = null;
             int line = 0;
@@ -128,7 +126,7 @@ public class FileUtil {
             }
             reader.close();
         } catch (IOException e) {
-            e.printStackTrace();
+            log.error(e.getMessage());
         } finally {
             if (reader != null) {
                 try {

+ 47 - 0
power-fitting/src/main/java/com/gyee/power/fitting/controller/analyse/FiveLossInfoController.java

@@ -0,0 +1,47 @@
+package com.gyee.power.fitting.controller.analyse;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.power.fitting.common.result.JsonResult;
+import com.gyee.power.fitting.common.result.ResultCode;
+import com.gyee.power.fitting.common.util.DateUtil;
+import com.gyee.power.fitting.model.custom.FjjxbVo;
+import com.gyee.power.fitting.service.custom.fiveloss.FiveLossService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * 损失电量分析
+ */
+@RestController
+@CrossOrigin
+@RequestMapping("/fjjxb")
+public class FiveLossInfoController {
+
+    @Resource
+    private FiveLossService fiveLossService;
+
+    @GetMapping("index")
+    public JSONObject fiveLoss(String station, String project, String line, String st, String et, String type){
+        Date begin = DateUtil.parseStrtoDate(st, DateUtil.DATE_PATTERN);
+        Date end = DateUtil.parseStrtoDate(et, DateUtil.DATE_PATTERN);
+        List<String> projects = StringUtils.isEmpty(project) ? Collections.emptyList() : Arrays.asList(project.split(","));
+        List<String> lines = StringUtils.isEmpty(line) ? Collections.emptyList() : Arrays.asList(line.split(","));
+
+        Map<String, Object> map = fiveLossService.fiveLoss(station, projects, lines, begin, end, type);
+        return JsonResult.successData(ResultCode.SUCCESS, map);
+    }
+
+
+    @GetMapping("cal")
+    public JSONObject test(){
+        fiveLossService.fiveLossCal();
+        return JsonResult.success(ResultCode.SUCCESS);
+    }
+}

+ 21 - 2
power-fitting/src/main/java/com/gyee/power/fitting/controller/base/WindInfoController.java

@@ -4,15 +4,16 @@ import com.alibaba.fastjson.JSONObject;
 import com.gyee.power.fitting.common.result.JsonResult;
 import com.gyee.power.fitting.common.result.ResultCode;
 import com.gyee.power.fitting.common.spring.InitialRunner;
-import com.gyee.power.fitting.model.Windpowerstation;
-import com.gyee.power.fitting.model.Windturbine;
+import com.gyee.power.fitting.model.*;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 场站风机等基础数据
@@ -33,4 +34,22 @@ public class WindInfoController {
         List<Windturbine> list = InitialRunner.wpMap.get(stationId);
         return JsonResult.successData(ResultCode.SUCCESS, list);
     }
+
+    @GetMapping("project")
+    public JSONObject getProject(String stationId){
+        List<Project> list = InitialRunner.projectList.stream().filter(f -> f.getWindpowerstationid().equals(stationId)).collect(Collectors.toList());
+        return JsonResult.successData(ResultCode.SUCCESS, list);
+    }
+
+    @GetMapping("line")
+    public JSONObject getLine(String projectId){
+        List<Line> list = new ArrayList<>();
+        String[] projects = projectId.split(",");
+        Map<String, List<Line>> map = InitialRunner.lineList.stream().collect(Collectors.groupingBy(Line::getProjectid));
+        for (String project : projects){
+            if (map.get(project).size() > 0)
+                list.addAll(map.get(project));
+        }
+        return JsonResult.successData(ResultCode.SUCCESS, list);
+    }
 }

+ 1 - 8
power-fitting/src/main/java/com/gyee/power/fitting/model/Powerfittinganalysis.java

@@ -77,18 +77,11 @@ public class Powerfittinganalysis extends Model<Powerfittinganalysis> {
     private Double pc25ratio;
 
     @TableField("INTERP")
-    private Integer interp;
+    private Integer interp; //等间隔时间,单位:秒
 
     @TableField("ISCAL")
     private Integer iscal;  //0-没有计算  1-已计算
 
-
-    public void setIscal(Integer iscal) {
-        if (null == iscal)
-            iscal = 0;
-        this.iscal = iscal;
-    }
-
     @Override
     protected Serializable pkVal() {
         return null;

+ 18 - 16
power-fitting/src/main/java/com/gyee/power/fitting/model/Powerlossinfo.java

@@ -5,9 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-
 import java.io.Serializable;
-import java.time.LocalDate;
+import java.util.Date;
 
 /**
  * <p>
@@ -40,31 +39,34 @@ public class Powerlossinfo extends Model<Powerlossinfo> {
     private String stationid;
 
     @TableField("RECORDDATE")
-    private LocalDate recorddate;
+    private Date recorddate;
 
     @TableField("GENECAPACITY")
-    private String genecapacity;
+    private double genecapacity;
 
     @TableField("THEROGENECAPACITY")
-    private String therogenecapacity;
+    private double therogenecapacity;
 
     @TableField("SPEED")
-    private String speed;
+    private double speed;
+
+    @TableField("DAYSLSSDL")
+    private double dayslssdl;
 
-    @TableField("MONTHSJDL")
-    private String monthsjdl;
+    @TableField("DAYJHJXSSDL")
+    private double dayjhjxssdl;
 
-    @TableField("MONTHJHJXSSDL")
-    private String monthjhjxssdl;
+    @TableField("DAYFJHJXSSDL")
+    private double dayfjhjxssdl;
 
-    @TableField("MONTHFJHJXSSDL")
-    private String monthfjhjxssdl;
+    @TableField("DAYXDSSDL")
+    private double dayxdssdl;
 
-    @TableField("MONTHXDSSDL")
-    private String monthxdssdl;
+    @TableField("DAYXNSSDL")
+    private double dayxnssdl;
 
-    @TableField("MONTHXNSSDL")
-    private String monthxnssdl;
+    @TableField("DAYGZSSDL")
+    private double daygzssdl;
 
 
     @Override

+ 64 - 0
power-fitting/src/main/java/com/gyee/power/fitting/model/custom/FjjxbVo.java

@@ -0,0 +1,64 @@
+package com.gyee.power.fitting.model.custom;
+
+import com.gyee.power.fitting.model.Powerlossinfo;
+import com.gyee.power.fitting.model.anno.Desc;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+@Data
+public class FjjxbVo implements ToData<List<Powerlossinfo>>{
+
+    private String id;
+    @Desc(des = "名称")
+    private String name;
+    @Desc(des = "理论发电量(万kWh)")
+    private double llfdl;
+    @Desc(des = "实际发电量(万kWh)")
+    private double sjfdl;
+    @Desc(des = "平均风速(m/s)")
+    private double speed;
+    @Desc(des = "计划检修(万kWh)")
+    private double fjhjx;
+    @Desc(des = "非计划检修(万kWh)")
+    private double jhjx;
+    @Desc(des = "受累(万kWh)")
+    private double sl;
+    @Desc(des = "限电(万kWh)")
+    private double xd;
+    @Desc(des = "性能(万kWh)")
+    private double xn;
+    @Desc(des = "风能利用率(%)")
+    private double fnlly;
+
+
+    @Override
+    public FjjxbVo toData(List<Powerlossinfo> ls) {
+        FjjxbVo vo = new FjjxbVo();
+
+        double fdl = ls.stream().mapToDouble(Powerlossinfo::getGenecapacity).sum();
+        double llfdl = ls.stream().mapToDouble(Powerlossinfo::getTherogenecapacity).sum();
+        double speed = ls.stream().mapToDouble(Powerlossinfo::getSpeed).average().getAsDouble();
+        double fjh = ls.stream().mapToDouble(Powerlossinfo::getDayfjhjxssdl).sum();
+        double jh = ls.stream().mapToDouble(Powerlossinfo::getDayjhjxssdl).sum();
+        double sl = ls.stream().mapToDouble(Powerlossinfo::getDayslssdl).sum();
+        double xd = ls.stream().mapToDouble(Powerlossinfo::getDayxdssdl).sum();
+        double xn = ls.stream().mapToDouble(Powerlossinfo::getDayxnssdl).sum();
+        vo.setLlfdl(new BigDecimal(llfdl/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setSjfdl(new BigDecimal(fdl/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setSpeed(new BigDecimal(speed).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setFjhjx(new BigDecimal(fjh/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setJhjx(new BigDecimal(jh/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setSl(new BigDecimal(sl/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setXd(new BigDecimal(xd/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        vo.setXn(new BigDecimal(xn/10000).setScale(2, RoundingMode.CEILING).doubleValue());
+        if (llfdl > 0)
+            vo.setFnlly(new BigDecimal((fdl / llfdl)*100).setScale(2, RoundingMode.CEILING).doubleValue());
+        else
+            vo.setFnlly(82.35);
+
+        return vo;
+    }
+}

+ 7 - 0
power-fitting/src/main/java/com/gyee/power/fitting/model/custom/ToData.java

@@ -0,0 +1,7 @@
+package com.gyee.power.fitting.model.custom;
+
+public interface ToData<T> {
+
+    Object toData(T t);
+
+}

+ 7 - 1
power-fitting/src/main/java/com/gyee/power/fitting/service/PowerfittinganalysisService.java

@@ -31,5 +31,11 @@ public interface PowerfittinganalysisService extends IService<Powerfittinganalys
 
     void deleteList(String ids);
 
-    List<Powerfittinganalysis> selectListByIsCal(int isCal);
+    /**
+     * 查询准备的数据
+     * @param type  Constants.DATA_PREPARE
+     * @param isCal
+     * @return
+     */
+    List<Powerfittinganalysis> selectListByIsCal(String type, int isCal);
 }

+ 16 - 0
power-fitting/src/main/java/com/gyee/power/fitting/service/PowerlossinfoService.java

@@ -1,8 +1,12 @@
 package com.gyee.power.fitting.service;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gyee.power.fitting.model.Powerlossinfo;
 
+import java.util.Date;
+import java.util.List;
+
 
 /**
  * <p>
@@ -14,4 +18,16 @@ import com.gyee.power.fitting.model.Powerlossinfo;
  */
 public interface PowerlossinfoService extends IService<Powerlossinfo> {
 
+
+    void insertItem(Powerlossinfo obj);
+
+
+    void insertBatch(List<Powerlossinfo> list);
+
+
+    void deleteBatch(String wtId, List<Date> dates);
+
+    void deleteByWtIdAndDate(String wtId, Date date);
+
+    List<Powerlossinfo> selectList(String station, List<String> project, List<String> line, Date st, Date et);
 }

+ 1 - 1
power-fitting/src/main/java/com/gyee/power/fitting/service/custom/curve/DataFittingService.java

@@ -280,7 +280,7 @@ public class DataFittingService {
         double[] arrX = arraySpeed.stream().sorted().mapToDouble(i->i).toArray();
         double[] arrY = arrayPower.stream().sorted().mapToDouble(i->i).toArray();
 
-        //功率曲线拟合
+        //功率曲线拟合 不合理数据过滤
         List<Point> temp = PowerFittingALG.buildLine(arrX, arrY, arraySpeed.size(), dimension, 0.01);
         temp.forEach(f -> { if (f.getX() < 2.5 && f.getY() > 0) f.setY(0); });
 

+ 315 - 30
power-fitting/src/main/java/com/gyee/power/fitting/service/custom/fiveloss/FiveLossService.java

@@ -1,60 +1,345 @@
 package com.gyee.power.fitting.service.custom.fiveloss;
 
-
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.power.fitting.common.constants.Constants;
+import com.gyee.power.fitting.common.feign.RemoteServiceBuilder;
 import com.gyee.power.fitting.common.spring.InitialRunner;
+import com.gyee.power.fitting.common.util.CollectUtil;
 import com.gyee.power.fitting.common.util.DateUtil;
 import com.gyee.power.fitting.common.util.FileUtil;
 import com.gyee.power.fitting.model.*;
+import com.gyee.power.fitting.model.anno.AnnotationTool;
+import com.gyee.power.fitting.model.anno.FixedVo;
+import com.gyee.power.fitting.model.custom.FjjxbVo;
+import com.gyee.power.fitting.model.custom.PowerPointData;
+import com.gyee.power.fitting.model.custom.TableTitle;
+import com.gyee.power.fitting.model.custom.TsDoubleData;
 import com.gyee.power.fitting.service.PowerfittinganalysisService;
-import lombok.val;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.gyee.power.fitting.service.PowerlossinfoService;
+import com.gyee.power.fitting.service.Windturbinetestingpointai2Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 
+@Slf4j
 @Service
 public class FiveLossService {
 
     @Resource
     private PowerfittinganalysisService analysisService;
+    @Resource
+    private PowerlossinfoService lossInfoService;
+    @Resource
+    private RemoteServiceBuilder remoteService;
 
-//    @Autowired
-//    private
-//
-//    public void fiveLoss(List<String> ids){
-//
-//    }
+    /**
+     * 五项损失
+     *
+     * @param station 场站
+     * @param project 期次
+     * @param line    线路
+     * @param type    1:场站  2:期次  3:线路
+     * @return
+     */
+    public Map<String, Object> fiveLoss(String station, List<String> project, List<String> line, Date st, Date et, String type) {
+        Map<String, Object> promise = new HashMap<>();
+        Map<String, String> stationMap = InitialRunner.stationMap;
+        Map<String, Windturbine> wtMap = InitialRunner.wtMap;
+        Map<String, Project> pMap = InitialRunner.projectMap;
+        Map<String, Line> lMap = InitialRunner.lineMap;
 
+        List<Powerlossinfo> list = lossInfoService.selectList(station, project, line, st, et);
+        if (list == null || list.size() == 0)
+            return promise;
 
-    //明细状态
-    // 0-待机  1-手动停机  2-正常发电  3-缺陷降出力  4-限电降出力  5-限电停机  6-故障停机
-    // 7-场内受累停机  8-检修停机  9-场内受累检修  10-电网受累  11-环境受累  12-风机离线
-    @Transactional
-    public void fiveLossCal(){
-        Date currentDate = DateUtil.getNowDate();
-        Date date = DateUtil.addSeconds(currentDate, -1);
-        Date date15age = DateUtil.addMinutes(currentDate, -15);
+        Map<String, List<Powerlossinfo>> collect = null;
+        if (type.equals("1"))
+            collect = list.stream().collect(Collectors.groupingBy(Powerlossinfo::getStationid));
+        else if (type.equals("2"))
+            collect = list.stream().collect(Collectors.groupingBy(Powerlossinfo::getProjectid));
+        else if (type.equals("3"))
+            collect = list.stream().collect(Collectors.groupingBy(Powerlossinfo::getLineid));
+        else if (line.size() > 0)
+            collect = list.stream().collect(Collectors.groupingBy(Powerlossinfo::getLineid));
+        else if (project.size() > 0)
+            collect = list.stream().collect(Collectors.groupingBy(Powerlossinfo::getProjectid));
+        else
+            collect = list.stream().collect(Collectors.groupingBy(Powerlossinfo::getWindturbineid));
+
+        List<FjjxbVo> result = collect.entrySet()
+                .stream()
+                .map(entry -> {
+                    String key = entry.getKey();
+                    List<Powerlossinfo> value = entry.getValue();
+                    FjjxbVo vo = new FjjxbVo().toData(value);
+                    vo.setId(key);
+                    if (type.equals("1"))
+                        vo.setName(stationMap.get(key));
+                    else if (type.equals("2"))
+                        vo.setName(pMap.get(key).getName());
+                    else if (type.equals("3"))
+                        vo.setName(lMap.get(key).getName());
+                    else if (line.size() > 0)
+                        vo.setName(lMap.get(key).getName());
+                    else if (project.size() > 0)
+                        vo.setName(pMap.get(key).getName());
+                    else
+                        vo.setName(wtMap.get(key).getName());
+                    return vo;
+                }).sorted(Comparator.comparing(FjjxbVo::getId)).collect(Collectors.toList());
 
-        List<Windpowerstation> wpls = InitialRunner.wpList;
-        List<Windturbine> wtls = InitialRunner.wtList;
-        List<Project> pjls = InitialRunner.projectList;
-        List<Line> lnls = InitialRunner.lineList;
+        /** 添加标题 **/
+        List<FixedVo> fxList = AnnotationTool.getFixedVoList(FjjxbVo.class);
+        List<TableTitle> lt = fxList.stream().map(d -> new TableTitle(d.getName(), d.getDes())).collect(Collectors.toList());
 
+        promise.put("title", lt);
+        promise.put("data", result);
+
+        return promise;
+    }
+
+
+    /** 根据已缓存的文件计算损失电量
+     * 明细状态
+     * 0-待机  1-手动停机  2-正常发电  3-缺陷降出力  4-限电降出力  5-限电停机  6-故障停机
+     * 7-场内受累停机  8-检修停机  9-场内受累检修  10-电网受累  11-环境受累  12-风机离线
+     */
+    @Async
+    @Transactional
+    public void fiveLossCal() {
+        log.info("======风机绩效榜计算开始.............");
         Map<String, Windturbine> wtmap = InitialRunner.wtMap;
-        List<Powerfittinganalysis> analyses = analysisService.selectListByIsCal(1);
+        Map<String, List<Modelpowerdetails>> modelmap = InitialRunner.modelPowerDetailMap;
 
-        wtls.forEach(item -> {
-            Windturbine wt = wtmap.get(item.getId());
-            List<Powerfittinganalysis> collect = analyses.stream().filter(f -> f.getWindturbine().equals(wt.getId())).collect(Collectors.toList());
-            collect.forEach(p -> {
-                List<String> content = FileUtil.readFile(p.getPath(), true);
+        List<Powerfittinganalysis> analyses = analysisService.selectListByIsCal(Constants.DATA_PREPARE, 0);
+        if (analyses.size() == 0)
+            return;
+
+        for (Powerfittinganalysis p : analyses) {
+            List<Powerlossinfo> result = new ArrayList<>();
+            Windturbine wt = wtmap.get(p.getWindturbine());
+            List<String> content = FileUtil.readFile(p.getPath(), true);
+            if (content.size() == 0)
+                continue;
+
+            log.info("======风机绩效榜计算:" + p.getWindturbine());
+            content.remove(0); //去掉标题栏
+            int count = 86400 / p.getInterp(); //一天86400s  一天的条数
+            List<List<String>> coll = CollectUtil.groupListByQty(content, count);
+            coll.forEach(ls -> {
+                double rfdl = 0; //日发电量
+                double gzssdl = 0;//故障损失电量
+                double jhjxssdl = 0;//计划检修损失电量
+                double fjhjxssdl = 0;//非计划检修电量
+                double xdssdl = 0;//限电损失电量
+                double slssdl = 0;//受累损失电量
+                double xnssdl = 0;//性能损失电量
+
+                List<PowerPointData> pdl = ls.stream().map(mp -> new PowerPointData(mp.split(","), false)).collect(Collectors.toList());
+                double zcfd = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 2); //正常发电
+                xdssdl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 5);  //限电损失电量
+                double qxjcl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 3); //缺陷降出力损失电量
+                double xdjcl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 4); //限电降出力损失电量
+                double cnsltj = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 7); //场内受累停机损失电量
+                double cnsljx = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 9); //场内受累检修损失电量
+                double dwsl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 10); //电网受累损失电量
+                double hjsl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 11); //环境受累损失电量
+
+                gzssdl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 6);
+                jhjxssdl = generalLoss(pdl, modelmap.get(wt.getModelid()), p.getInterp(), 8);
+                fjhjxssdl = gzssdl;
+                xdssdl = xdssdl + xdjcl;
+                slssdl = cnsltj + dwsl + hjsl + cnsljx + cnsljx;
+                xnssdl = qxjcl + zcfd;
+                rfdl = pdl.get(pdl.size() - 1).getDl();
+                double llgdl = rfdl + gzssdl + jhjxssdl + fjhjxssdl + xdssdl + slssdl + xnssdl;
+
+                Powerlossinfo loss = new Powerlossinfo();
+                loss.setLineid(wt.getLineid());
+                loss.setProjectid(wt.getProjectid());
+                loss.setRecorddate(DateUtil.parseStrtoDate(pdl.get(0).getTime(), DateUtil.DATE_PATTERN));
+                loss.setStationid(wt.getWindpowerstationid());
+                loss.setWindturbineid(wt.getId());
+                loss.setGenecapacity(rfdl);
+                loss.setTherogenecapacity(llgdl);
+                loss.setDayjhjxssdl(jhjxssdl);
+                loss.setDayfjhjxssdl(fjhjxssdl);
+                loss.setDaygzssdl(gzssdl);
+                loss.setDayxdssdl(xdssdl);
+                loss.setDayxnssdl(xnssdl);
+                loss.setDayslssdl(slssdl);
+                loss.setSpeed(pdl.stream().mapToDouble(PowerPointData::getSpeed).average().getAsDouble());
+                result.add(loss);
             });
+
+            //保存之前删除已有的五损数据
+            lossInfoService.deleteBatch(wt.getId(), result.stream().map(m -> m.getRecorddate()).collect(Collectors.toList()));
+            lossInfoService.insertBatch(result);
+        }
+        //更新已经计算过的文件数据
+        analyses.forEach((entity) -> entity.setIscal(1));
+        analysisService.updateBatchById(analyses);
+        log.info("======风机榜效帮计算结束.............");
+    }
+
+
+    /**
+     * 损失电量计算  eg: 1.5MW   一小时发电:1500kWh    一分钟发电:1500/60 == 25kW
+     *
+     * @param ztmxData 状态明细
+     * @param zsglData 设备的理论功率
+     * @param interval 原始数据的间隔
+     * @param status   风机当前状态
+     * @return
+     */
+    private double generalLoss(List<PowerPointData> ztmxData, List<Modelpowerdetails> zsglData, int interval, double status) {
+        double ssdl = 0.0;
+        List<PowerPointData> pointData = ztmxData.stream().filter(zt -> zt.getMxzt() == status).collect(Collectors.toList());
+        List<Modelpowerdetails> theoryData = zsglData.stream().filter(f -> f.getTheorypower() > 0).collect(Collectors.toList());
+        if (status == 2.0 || status == 3.0 || status == 4.0 || status == 9.0 || status == 10.0 || status == 11.0) {
+            for (PowerPointData obj : pointData) {
+                for (int i = 0; i < theoryData.size(); i++) {
+                    if (String.format("%.2f", obj.getSpeed()).equals(String.format("%.2f", theoryData.get(i).getSpeed()))) {
+                        double zsgl = theoryData.get(i).getTheorypower();
+                        double power = obj.getPower();
+                        double temp = (zsgl - power) > 0 ? zsgl - power : 0;
+                        ssdl = ssdl + (temp / 60) * (interval / 60);
+                        break;
+                    }
+                }
+            }
+        } else {
+            for (PowerPointData obj : pointData) {
+                for (int i = 0; i < theoryData.size(); i++) {
+                    if (String.format("%.2f", obj.getSpeed()).equals(String.format("%.2f", theoryData.get(i).getSpeed()))) {
+                        double zsgl = theoryData.get(i).getTheorypower();
+                        ssdl = ssdl + (zsgl / 60) * (interval / 60);
+                        break;
+                    }
+                }
+            }
+        }
+
+        return ssdl > 0 ? ssdl : 0;
+    }
+
+
+    /**
+     * 通过线上实时计算五损数据
+     * @param st   开始时间
+     * @param et   结束时间
+     * @param interval  等间隔时间
+     */
+    @Async
+    @Transactional
+    public void fiveLossCalByLine(long st, long et, int interval){
+        List<Windpowerstation> wpList = InitialRunner.wpList;
+        Map<String, Windturbine> wtmap = InitialRunner.wtMap;
+        Map<String, List<Windturbinetestingpointai2>> pointMap = InitialRunner.pointMap;
+        Map<String, List<Modelpowerdetails>> modelmap = InitialRunner.modelPowerDetailMap;
+
+        List<Powerlossinfo> result = new ArrayList<>();
+        pointMap.forEach((k, v) -> {
+            Windturbine wt = wtmap.get(k);
+            String speed = v.stream().filter(f -> f.getUniformcode().equals(Constants.CODE_POINT_SPEED)).findFirst().get().getId();
+            String power = v.stream().filter(f -> f.getUniformcode().equals(Constants.CODE_POINT_POWER)).findFirst().get().getId();
+            String fdl = v.stream().filter(f -> f.getUniformcode().equals(Constants.CODE_POINT_RFDL)).findFirst().get().getId();
+            String status = v.stream().filter(f -> f.getUniformcode().equals(Constants.CODE_POINT_MXZT)).findFirst().get().getId();
+
+            List<TsDoubleData> speedLS = remoteService.adapter().getHistorySnap(speed, st, et, interval);
+            List<TsDoubleData> powerLS = remoteService.adapter().getHistorySnap(power, st, et, interval);
+            JSONObject rfdlObj = remoteService.adapter().getHistorySection(fdl, et);
+            List<TsDoubleData> statusLS = remoteService.adapter().getHistorySnap(status, st, et, interval);
+
+            double rfdl = 0; //日发电量
+            double gzssdl = 0;//故障损失电量
+            double jhjxssdl = 0;//计划检修损失电量
+            double fjhjxssdl = 0;//非计划检修电量
+            double xdssdl = 0;//限电损失电量
+            double slssdl = 0;//受累损失电量
+            double xnssdl = 0;//性能损失电量
+
+            double zcfd = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 2); //正常发电
+            xdssdl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 5);  //限电损失电量
+            double qxjcl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()),interval, 3); //缺陷降出力损失电量
+            double xdjcl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 4); //限电降出力损失电量
+            double cnsltj = generalLossLine(statusLS, speedLS, powerLS,  modelmap.get(wt.getModelid()), interval, 7); //场内受累停机损失电量
+            double cnsljx = generalLossLine(statusLS, speedLS, powerLS,  modelmap.get(wt.getModelid()), interval, 9); //场内受累检修损失电量
+            double dwsl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 10); //电网受累损失电量
+            double hjsl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 11); //环境受累损失电量
+
+            gzssdl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 6);
+            jhjxssdl = generalLossLine(statusLS, speedLS, powerLS, modelmap.get(wt.getModelid()), interval, 8);
+            fjhjxssdl = gzssdl;
+            xdssdl = xdssdl + xdjcl;
+            slssdl = cnsltj + dwsl + hjsl + cnsljx + cnsljx;
+            xnssdl = qxjcl + zcfd;
+            rfdl = rfdlObj.getJSONObject(fdl).getDoubleValue("doubleValue");
+
+            double llgdl = rfdl + gzssdl + jhjxssdl + fjhjxssdl + xdssdl + slssdl + xnssdl;
+
+            Powerlossinfo loss = new Powerlossinfo();
+            loss.setLineid(wt.getLineid());
+            loss.setProjectid(wt.getProjectid());
+            loss.setRecorddate(DateUtil.parseStrtoDate(DateUtil.format(st, DateUtil.DATE_PATTERN), DateUtil.DATE_PATTERN));
+            loss.setStationid(wt.getWindpowerstationid());
+            loss.setWindturbineid(wt.getId());
+            loss.setGenecapacity(rfdl);
+            loss.setTherogenecapacity(llgdl);
+            loss.setDayjhjxssdl(jhjxssdl);
+            loss.setDayfjhjxssdl(fjhjxssdl);
+            loss.setDaygzssdl(gzssdl);
+            loss.setDayxdssdl(xdssdl);
+            loss.setDayxnssdl(xnssdl);
+            loss.setDayslssdl(slssdl);
+            loss.setSpeed(speedLS.stream().mapToDouble(TsDoubleData::getDoubleValue).average().getAsDouble());
+            result.add(loss);
+
+            //保存之前删除已有的五损数据
+            lossInfoService.deleteByWtIdAndDate(wt.getId(), loss.getRecorddate());
         });
+
+        lossInfoService.insertBatch(result);
+    }
+
+    private double generalLossLine(List<TsDoubleData> ztmxData, List<TsDoubleData> speedData, List<TsDoubleData> powerData, List<Modelpowerdetails> zsglData, int interval, double status) {
+        double ssdl = 0.0;
+        List<Modelpowerdetails> theoryData = zsglData.stream().filter(f -> f.getTheorypower() > 0).collect(Collectors.toList());
+        if (ztmxData.size() == powerData.size()){
+            if (status == 2.0 || status == 3.0 || status == 4.0 || status == 9.0 || status == 10.0 || status == 11.0) {
+                for (int i = 0; i < ztmxData.size(); i++) {
+                    for (int j = 0; j < theoryData.size(); j++) {
+                        if (String.format("%.2f", speedData.get(i).getDoubleValue()).equals(String.format("%.2f", theoryData.get(j).getSpeed()))) {
+                            double zsgl = theoryData.get(j).getTheorypower();
+                            double power = powerData.get(i).getDoubleValue();
+                            double temp = (zsgl - power) > 0 ? zsgl - power : 0;
+                            ssdl = ssdl + (temp / 60) * (interval / 60);
+                            break;
+                        }
+                    }
+                }
+            } else {
+                for (int i = 0; i < ztmxData.size(); i++) {
+                    for (int j = 0; j < theoryData.size(); j++) {
+                        if (String.format("%.2f", speedData.get(i).getDoubleValue()).equals(String.format("%.2f", theoryData.get(j).getSpeed()))) {
+                            double zsgl = theoryData.get(j).getTheorypower();
+                            ssdl = ssdl + (zsgl / 60) * (interval / 60);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        return ssdl > 0 ? ssdl : 0;
     }
 }

+ 2 - 1
power-fitting/src/main/java/com/gyee/power/fitting/service/impl/PowerfittinganalysisServiceImpl.java

@@ -91,10 +91,11 @@ public class PowerfittinganalysisServiceImpl extends ServiceImpl<Powerfittingana
     }
 
     @Override
-    public List<Powerfittinganalysis> selectListByIsCal(int isCal) {
+    public List<Powerfittinganalysis> selectListByIsCal(String type, int isCal) {
         List<Powerfittinganalysis> list = new ArrayList();
 
         ExcludeQueryWrapper wrapper = new ExcludeQueryWrapper();
+        wrapper.eq("type", type);
         wrapper.eq("iscal", isCal);
 
         try{

+ 79 - 0
power-fitting/src/main/java/com/gyee/power/fitting/service/impl/PowerlossinfoServiceImpl.java

@@ -1,10 +1,17 @@
 package com.gyee.power.fitting.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.power.fitting.common.base.ExcludeQueryWrapper;
+import com.gyee.power.fitting.common.util.CollectUtil;
+import com.gyee.power.fitting.common.util.SnowFlakeUtil;
 import com.gyee.power.fitting.mapper.PowerlossinfoMapper;
 import com.gyee.power.fitting.model.Powerlossinfo;
 import com.gyee.power.fitting.service.PowerlossinfoService;
 import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +24,76 @@ import org.springframework.stereotype.Service;
 @Service
 public class PowerlossinfoServiceImpl extends ServiceImpl<PowerlossinfoMapper, Powerlossinfo> implements PowerlossinfoService {
 
+    @Override
+    public void insertItem(Powerlossinfo obj) {
+        if (obj == null)
+            return;
+
+        obj.setId(SnowFlakeUtil.generateId());
+        try{
+            baseMapper.insert(obj);
+        }catch (Exception e){
+            log.error("PowerlossinfoServiceImpl--insertItem", e);
+        }
+    }
+
+    /**
+     * 超过1000条分批保存
+     * @param list
+     */
+    @Override
+    public void insertBatch(List<Powerlossinfo> list) {
+        list.forEach(item -> item.setId(SnowFlakeUtil.generateId()));
+        try{
+            if (list.size() > 1000){
+                List<List<Powerlossinfo>> coll = CollectUtil.groupListByQty(list, 1000);
+                coll.forEach(ls -> saveBatch(ls));
+            } else {
+                saveBatch(list);
+            }
+        }catch (Exception e){
+            log.error("PowerlossinfoServiceImpl--insertBatch", e);
+        }
+    }
+
+    @Override
+    public void deleteBatch(String wtId, List<Date> dates) {
+        QueryWrapper<Powerlossinfo> wrapper = new QueryWrapper<>();
+        wrapper.eq("windturbineid", wtId);
+        wrapper.in("recorddate", dates);
+        try{
+            baseMapper.delete(wrapper);
+        }catch (Exception e){
+            log.error("PowerlossinfoServiceImpl--deleteBatch", e);
+        }
+    }
+
+    @Override
+    public void deleteByWtIdAndDate(String wtId, Date date) {
+        QueryWrapper<Powerlossinfo> wrapper = new QueryWrapper<>();
+        wrapper.eq("windturbineid", wtId);
+        wrapper.eq("recorddate", date);
+        try{
+            baseMapper.delete(wrapper);
+        }catch (Exception e){
+            log.error("PowerlossinfoServiceImpl--deleteByWtIdAndDate", e);
+        }
+    }
+
+    @Override
+    public List<Powerlossinfo> selectList(String station, List<String> project, List<String> line, Date st, Date et) {
+        List<Powerlossinfo> list = new ArrayList<>();
+        ExcludeQueryWrapper<Powerlossinfo> wrapper = new ExcludeQueryWrapper<>();
+        wrapper.eq("stationid", station)
+                .in("projectid", project)
+                .in("lineid", line)
+                .ge("recorddate", st)
+                .le("recorddate", et);
+        try{
+            list = baseMapper.selectList(wrapper);
+        }catch (Exception e){
+            log.error("FiveLossService--fiveLoss", e);
+        }
+        return list;
+    }
 }

+ 10 - 10
power-fitting/src/main/resources/application.yaml

@@ -35,16 +35,16 @@ spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     # 宁夏三区oracle
-#    driver-class-name: oracle.jdbc.OracleDriver
-#    url: jdbc:oracle:thin:@192.168.1.105:1521:gdnxfd
-#    username: nxfdprod
-#    password: gdnxfd123
+    driver-class-name: oracle.jdbc.OracleDriver
+    url: jdbc:oracle:thin:@192.168.1.105:1521:gdnxfd
+    username: nxfdprod
+    password: gdnxfd123
 
     # 华为云oracle(功率预测的环境)
-    driver-class-name: oracle.jdbc.OracleDriver
-    url: jdbc:oracle:thin:@120.46.129.85:1521:ORCL
-    username: gyee
-    password: FRWIND
+#    driver-class-name: oracle.jdbc.OracleDriver
+#    url: jdbc:oracle:thin:@120.46.129.85:1521:ORCL
+#    username: gyee
+#    password: FRWIND
 
     # 本地sql-lite
 #    driver-class-name: org.sqlite.JDBC
@@ -81,8 +81,8 @@ mybatis-plus:
 
 logging:
   level:
-    root: error
-    com.example: debug
+    root: info
+    com.example: info
   file:
     path: ./logs
 

+ 6 - 10
power-fitting/src/main/resources/mapper/PowerlossinfoMapper.xml

@@ -13,16 +13,12 @@
         <result column="GENECAPACITY" property="genecapacity" />
         <result column="THEROGENECAPACITY" property="therogenecapacity" />
         <result column="SPEED" property="speed" />
-        <result column="MONTHSJDL" property="monthsjdl" />
-        <result column="MONTHJHJXSSDL" property="monthjhjxssdl" />
-        <result column="MONTHFJHJXSSDL" property="monthfjhjxssdl" />
-        <result column="MONTHXDSSDL" property="monthxdssdl" />
-        <result column="MONTHXNSSDL" property="monthxnssdl" />
+        <result column="DAYSLSSDL" property="dayslssdl" />
+        <result column="DAYJHJXSSDL" property="dayjhjxssdl" />
+        <result column="DAYFJHJXSSDL" property="dayfjhjxssdl" />
+        <result column="DAYXDSSDL" property="dayxdssdl" />
+        <result column="DAYXNSSDL" property="dayxnssdl" />
+        <result column="DAYGZSSDL" property="daygzssdl" />
     </resultMap>
 
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        ID, WINDTURBINEID, PROJECTID, LINEID, STATIONID, RECORDDATE, GENECAPACITY, THEROGENECAPACITY, SPEED, MONTHSJDL, MONTHJHJXSSDL, MONTHFJHJXSSDL, MONTHXDSSDL, MONTHXNSSDL
-    </sql>
-
 </mapper>