AnaomalyMapper.xml 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.energy.manage.analyse.mappers.anomaly.AnomalyWindfarmMapper">
  4. <!-- 查询风机异常统计数 -->
  5. <select id="selectAnomalyWindfarmAndFieldId" resultType="com.energy.manage.analyse.domain.vo.anomaly.AnomalyOverviewVO">
  6. select
  7. field_id as fieldId,
  8. result_anomaly_count as totalAnomalyCount,
  9. sensor_anomaly_count as sensorAnomalyCount,
  10. anomaly_detection_count as detectorAnomalyCount
  11. from
  12. anomaly_windfarm
  13. where 1=1
  14. <if test="fieldId!=null">
  15. and field_id = #{fieldId}
  16. </if>
  17. <if test="beginTime != null and beginTime != ''">
  18. and source_datetime <![CDATA[>= ]]> #{beginTime}
  19. </if>
  20. <if test="endTime != null and endTime != ''">
  21. and source_datetime <![CDATA[<= ]]> #{endTime}
  22. </if>
  23. </select>
  24. <!-- 柱状图 -->
  25. <select id="selectAnomalyModelCount" resultType="com.energy.manage.analyse.domain.vo.anomaly.BarChartVO">
  26. SELECT
  27. COUNT(DISTINCT CASE WHEN model1_windpwr_is_anomaly = 1 THEN engine_id END) AS windpwrCount,
  28. COUNT(DISTINCT CASE WHEN model2_yaw_is_anomaly = 1 THEN engine_id END) AS yawCount,
  29. COUNT(DISTINCT CASE WHEN model3_pitch_is_anomaly = 1 THEN engine_id END) AS pitchCount,
  30. COUNT(DISTINCT CASE WHEN model4_is_anomaly = 1 THEN engine_id END) AS ctrlparamCount
  31. FROM
  32. anomaly_model_${year}
  33. WHERE
  34. <if test="fieldId!=null">
  35. field_id = #{fieldId}
  36. </if>
  37. <if test="beginTime != null and beginTime != ''">
  38. and source_datetime <![CDATA[>= ]]> #{beginTime}
  39. </if>
  40. <if test="endTime != null and endTime != ''">
  41. and source_datetime <![CDATA[<= ]]> #{endTime}
  42. </if>
  43. </select>
  44. <!-- 异常检测模块 -->
  45. <resultMap id="AnomalyModelResultMap" type="com.energy.manage.analyse.po.anomaly.AnomalyModelPO">
  46. <id property="id" column="id"/>
  47. <result property="fieldId" column="field_id"/>
  48. <result property="engineId" column="engine_id"/>
  49. <result column="sensor_anomaly_power" property="sensorAnomalyPower" jdbcType="INTEGER"/>
  50. <result column="sensor_anomaly_power_ratio" property="sensorAnomalyPowerRatio" jdbcType="DECIMAL"/>
  51. <result column="sensor_anomaly_wind" property="sensorAnomalyWind" jdbcType="INTEGER"/>
  52. <result column="sensor_anomaly_wind_ratio" property="sensorAnomalyWindRatio" jdbcType="DECIMAL"/>
  53. <result column="sensor_anomaly_pitch" property="sensorAnomalyPitch" jdbcType="INTEGER"/>
  54. <result column="sensor_anomaly_pitch_ratio" property="sensorAnomalyPitchRatio" jdbcType="DECIMAL"/>
  55. <result column="sensor_anomaly_speed" property="sensorAnomalySpeed" jdbcType="INTEGER"/>
  56. <result column="sensor_anomaly_speed_ratio" property="sensorAnomalySpeedRatio" jdbcType="DECIMAL"/>
  57. <result column="sensor_anomaly_torque" property="sensorAnomalyTorque" jdbcType="INTEGER"/>
  58. <result column="sensor_anomaly_torque_ratio" property="sensorAnomalyTorqueRatio" jdbcType="DECIMAL"/>
  59. <result column="sensor_anomaly_wind_pwr" property="sensorAnomalyWindPwr" jdbcType="INTEGER"/>
  60. <result column="sensor_anomaly_wind_pwr_ratio" property="sensorAnomalyWindPwrRatio" jdbcType="DECIMAL"/>
  61. <result column="sensor_anomaly_spd_trq" property="sensorAnomalySpdTrq" jdbcType="INTEGER"/>
  62. <result column="sensor_anomaly_spd_trq_ratio" property="sensorAnomalySpdTrqRatio" jdbcType="DECIMAL"/>
  63. <result column="model1_windpwr_is_anomaly" property="model1WindpwrIsAnomaly" jdbcType="INTEGER"/>
  64. <result column="model1_windpwr_normal_count" property="model1WindpwrNormalCount" jdbcType="INTEGER"/>
  65. <result column="model1_windpwr_anomaly_count" property="model1WindpwrAnomalyCount" jdbcType="INTEGER"/>
  66. <result column="model1_windpwr_anomaly_rate" property="model1WindpwrAnomalyRate" jdbcType="DECIMAL"/>
  67. <result column="model1_windpwr_powercurve" property="model1WindpwrPowercurve" jdbcType="INTEGER"/>
  68. <result column="model1_windpwr_powercurve_ratio" property="model1WindpwrPowercurveRatio" jdbcType="DECIMAL"/>
  69. <result column="model1_windpwr_scatter" property="model1WindpwrScatter" jdbcType="INTEGER"/>
  70. <result column="model1_windpwr_scatter_ratio" property="model1WindpwrScatterRatio" jdbcType="DECIMAL"/>
  71. <result column="model1_windpwr_simulink" property="model1WindpwrSimulink" jdbcType="INTEGER"/>
  72. <result column="model2_yaw_is_anomaly" property="model2YawIsAnomaly" jdbcType="INTEGER"/>
  73. <result column="model2_yaw_normal_count" property="model2YawNormalCount" jdbcType="INTEGER"/>
  74. <result column="model2_yaw_anomaly_count" property="model2YawAnomalyCount" jdbcType="INTEGER"/>
  75. <result column="model2_yaw_anomaly_rate" property="model2YawAnomalyRate" jdbcType="DECIMAL"/>
  76. <result column="model2_yaw_staticyaw" property="model2YawStaticyaw" jdbcType="INTEGER"/>
  77. <result column="model2_yaw_staticyaw_ratio" property="model2YawStaticyawRatio" jdbcType="DECIMAL"/>
  78. <result column="model2_yaw_cabletwist" property="model2YawCabletwist" jdbcType="INTEGER"/>
  79. <result column="model2_yaw_cabletwist_ratio" property="model2YawCabletwistRatio" jdbcType="DECIMAL"/>
  80. <result column="model3_pitch_is_anomaly" property="model3PitchIsAnomaly" jdbcType="INTEGER"/>
  81. <result column="model3_pitch_normal_count" property="model3PitchNormalCount" jdbcType="INTEGER"/>
  82. <result column="model3_pitch_anomaly_count" property="model3PitchAnomalyCount" jdbcType="INTEGER"/>
  83. <result column="model3_pitch_anomaly_rate" property="model3PitchAnomalyRate" jdbcType="DECIMAL"/>
  84. <result column="model3_pitch_pitchregulation" property="model3PitchPitchregulation" jdbcType="INTEGER"/>
  85. <result column="model3_pitch_pitchregulation_ratio" property="model3PitchPitchregulationRatio" jdbcType="DECIMAL"/>
  86. <result column="model3_pitch_pitchcoord" property="model3PitchPitchcoord" jdbcType="INTEGER"/>
  87. <result column="model3_pitch_pitchcoord_ratio" property="model3PitchPitchcoordRatio" jdbcType="DECIMAL"/>
  88. <result column="model3_pitch_minpitch" property="model3PitchMinpitch" jdbcType="INTEGER"/>
  89. <result column="model4_is_anomaly" property="model4IsAnomaly" jdbcType="INTEGER"/>
  90. <result column="model4_ctrlparam_normal_count" property="model4CtrlparamNormalCount" jdbcType="INTEGER"/>
  91. <result column="model4_ctrlparam_anomaly_count" property="model4CtrlparamAnomalyCount" jdbcType="INTEGER"/>
  92. <result column="model4_ctrlparam_anomaly_rate" property="model4CtrlparamAnomalyRate" jdbcType="DECIMAL"/>
  93. <result column="model4_ctrlparam_powerquality" property="model4CtrlparamPowerquality" jdbcType="INTEGER"/>
  94. <result column="model4_ctrlparam_powerquality_ratio" property="model4CtrlparamPowerqualityRatio" jdbcType="DECIMAL"/>
  95. <result column="model4_ctrlparam_deload" property="model4CtrlparamDeload" jdbcType="INTEGER"/>
  96. <result column="model4_ctrlparam_deload_ratio" property="model4CtrlparamDeloadRatio" jdbcType="DECIMAL"/>
  97. <result column="model4_ctrlparam_operationstate" property="model4CtrlparamOperationstate" jdbcType="INTEGER"/>
  98. <result column="model4_ctrlparam_operationstate_ratio" property="model4CtrlparamOperationstateRatio" jdbcType="DECIMAL"/>
  99. <result column="model5_is_anomaly" property="model5IsAnomaly" jdbcType="INTEGER"/>
  100. <result column="model5_aerodynamics_normal_count" property="model5AerodynamicsNormalCount" jdbcType="INTEGER"/>
  101. <result column="model5_aerodynamics_anomaly_count" property="model5AerodynamicsAnomalyCount" jdbcType="INTEGER"/>
  102. <result column="model5_aerodynamics_anomaly_ratio" property="model5AerodynamicsAnomalyRatio" jdbcType="DECIMAL"/>
  103. <result column="model5_aerodynamics_cp" property="model5AerodynamicsCp" jdbcType="INTEGER"/>
  104. <result column="model5_aerodynamics_cp_ratio" property="model5AerodynamicsCpRatio" jdbcType="DECIMAL"/>
  105. <result column="model5_aerodynamics_tsr" property="model5AerodynamicsTsr" jdbcType="INTEGER"/>
  106. <result column="model5_aerodynamics_tsr_ratio" property="model5AerodynamicsTsrRatio" jdbcType="DECIMAL"/>
  107. <result column="model5_aerodynamics_cp_tsr" property="model5AerodynamicsCpTsr" jdbcType="INTEGER"/>
  108. <result column="model5_aerodynamics_cp_tsr_ratio" property="model5AerodynamicsCpTsrRatio" jdbcType="DECIMAL"/>
  109. <result property="sourceDatetime" column="source_datetime"/>
  110. <result property="createTime" column="create_time"/>
  111. </resultMap>
  112. <!-- 查询所有记录 -->
  113. <select id="selectAllAnomalyModel" resultMap="AnomalyModelResultMap">
  114. SELECT
  115. id,
  116. field_id,
  117. engine_id,
  118. sensor_anomaly_power,
  119. sensor_anomaly_power_ratio,
  120. sensor_anomaly_wind,
  121. sensor_anomaly_wind_ratio,
  122. sensor_anomaly_pitch,
  123. sensor_anomaly_pitch_ratio,
  124. sensor_anomaly_speed,
  125. sensor_anomaly_speed_ratio,
  126. sensor_anomaly_torque,
  127. sensor_anomaly_torque_ratio,
  128. sensor_anomaly_wind_pwr,
  129. sensor_anomaly_wind_pwr_ratio,
  130. sensor_anomaly_spd_trq,
  131. sensor_anomaly_spd_trq_ratio,
  132. model1_windpwr_is_anomaly,
  133. model1_windpwr_normal_count,
  134. model1_windpwr_anomaly_count,
  135. model1_windpwr_anomaly_rate,
  136. model1_windpwr_powercurve,
  137. model1_windpwr_powercurve_ratio,
  138. model1_windpwr_scatter,
  139. model1_windpwr_scatter_ratio,
  140. model1_windpwr_simulink,
  141. model2_yaw_is_anomaly,
  142. model2_yaw_normal_count,
  143. model2_yaw_anomaly_count,
  144. model2_yaw_anomaly_rate,
  145. model2_yaw_staticyaw,
  146. model2_yaw_staticyaw_ratio,
  147. model2_yaw_cabletwist,
  148. model2_yaw_cabletwist_ratio,
  149. model3_pitch_is_anomaly,
  150. model3_pitch_normal_count,
  151. model3_pitch_anomaly_count,
  152. model3_pitch_anomaly_rate,
  153. model3_pitch_pitchregulation,
  154. model3_pitch_pitchregulation_ratio,
  155. model3_pitch_pitchcoord,
  156. model3_pitch_pitchcoord_ratio,
  157. model3_pitch_minpitch,
  158. model4_is_anomaly,
  159. model4_ctrlparam_normal_count,
  160. model4_ctrlparam_anomaly_count,
  161. model4_ctrlparam_anomaly_rate,
  162. model4_ctrlparam_powerquality,
  163. model4_ctrlparam_powerquality_ratio,
  164. model4_ctrlparam_deload,
  165. model4_ctrlparam_deload_ratio,
  166. model4_ctrlparam_operationstate,
  167. model4_ctrlparam_operationstate_ratio,
  168. model5_is_anomaly,
  169. model5_aerodynamics_normal_count,
  170. model5_aerodynamics_anomaly_count,
  171. model5_aerodynamics_anomaly_ratio,
  172. model5_aerodynamics_cp,
  173. model5_aerodynamics_cp_ratio,
  174. model5_aerodynamics_tsr,
  175. model5_aerodynamics_tsr_ratio,
  176. model5_aerodynamics_cp_tsr,
  177. model5_aerodynamics_cp_tsr_ratio,
  178. create_time,
  179. source_datetime
  180. FROM
  181. anomaly_model_${year}
  182. where
  183. <if test="fieldId!=null">
  184. field_id = #{fieldId}
  185. </if>
  186. <if test="beginTime != null and beginTime != ''">
  187. and source_datetime <![CDATA[>= ]]> #{beginTime}
  188. </if>
  189. <if test="endTime != null and endTime != ''">
  190. and source_datetime <![CDATA[<= ]]> #{endTime}
  191. </if>
  192. </select>
  193. <!-- 基础结果映射 -->
  194. <resultMap id="BaseResultMap" type="com.energy.manage.analyse.po.anomaly.BaseAnomalyDetectorPO">
  195. <id column="id" property="id" />
  196. <result column="field_id" property="fieldId" />
  197. <result column="engine_id" property="engineId" />
  198. <result column="anomaly_model_name" property="anomalyModelName" />
  199. <result column="sensor_is_anomaly" property="sensorIsAnomaly" />
  200. <result column="detector_is_anomaly" property="detectorIsAnomaly" />
  201. <result column="sensor_anomaly_type" property="sensorAnomalyType" />
  202. <result column="sensor_anomaly_count" property="sensorAnomalyCount" />
  203. <result column="sensor_normally_count" property="sensorNormallyCount" />
  204. <result column="detector_anomaly_count" property="detectorAnomalyCount" />
  205. <result column="detector_normally_count" property="detectorNormallyCount" />
  206. <result column="file_path" property="filePath" />
  207. <result column="graph_path" property="graphPath" />
  208. <result column="source_datetime" property="sourceDatetime" />
  209. <result column="create_time" property="createTime" />
  210. <result column="detector_anomaly_rate" property="detectorAnomalyRate" />
  211. </resultMap>
  212. <!-- 动态查询模块检测器 -->
  213. <select id="selectAnomalyDetectorAll" resultMap="BaseResultMap">
  214. SELECT * FROM
  215. ${tableName}
  216. where 1=1
  217. <if test="fieldId!=null">
  218. and field_id = #{fieldId}
  219. </if>
  220. <if test="engineId!=null">
  221. and engine_id = #{engineId}
  222. </if>
  223. <if test="beginTime != null and beginTime != ''">
  224. and source_datetime <![CDATA[>= ]]> #{beginTime}
  225. </if>
  226. <if test="endTime != null and endTime != ''">
  227. and source_datetime <![CDATA[<= ]]> #{endTime}
  228. </if>
  229. </select>
  230. <!-- ======================================== 子页面曲线图 ======================================== -->
  231. <!-- 1. 单表统计:指定年度表 -->
  232. <select id="selectBySingleTable" resultType="com.energy.manage.analyse.domain.vo.anomaly.AnomalyDailyVO">
  233. SELECT
  234. source_datetime AS createTime,
  235. model1_windpwr_powercurve_ratio AS model1WindpwrPowercurveRatio,
  236. model1_windpwr_scatter_ratio AS model1WindpwrScatterRatio,
  237. model2_yaw_staticyaw_ratio AS model2YawStaticyawRatio,
  238. model2_yaw_cabletwist_ratio AS model2YawCabletwistRatio,
  239. model3_pitch_pitchregulation_ratio AS model3PitchPitchregulationRatio,
  240. model3_pitch_pitchcoord_ratio AS model3PitchPitchcoordRatio,
  241. model4_ctrlparam_powerquality_ratio AS model4CtrlparamPowerqualityRatio,
  242. model4_ctrlparam_deload_ratio AS model4CtrlparamDeloadRatio,
  243. model4_ctrlparam_operationstate_ratio AS model4CtrlparamOperationstateRatio,
  244. model5_aerodynamics_cp_ratio AS model5AerodynamicsCpRatio,
  245. model5_aerodynamics_tsr_ratio AS model5AerodynamicsTsrRatio,
  246. model5_aerodynamics_cp_tsr_ratio AS model5AerodynamicsCpTsrRatio
  247. FROM ${tableName}
  248. WHERE
  249. field_id = #{fieldId}
  250. and engine_id = #{engineId}
  251. and source_datetime BETWEEN #{startDate} AND #{endDate}
  252. ORDER BY create_time ASC
  253. </select>
  254. <!-- 2. 跨表统计:跨年两张表 UNION ALL 合并(核心!) -->
  255. <select id="selectByUnionTables" resultType="com.energy.manage.analyse.domain.vo.anomaly.AnomalyDailyVO">
  256. SELECT
  257. createTime,
  258. model1WindpwrAnomalyRate,
  259. model2YawAnomalyRate,
  260. model3PitchAnomalyRate,
  261. model4CtrlparamAnomalyRate
  262. FROM (
  263. <!-- 第一张表 -->
  264. SELECT
  265. create_time AS createTime,
  266. model1_windpwr_anomaly_rate as model1WindpwrAnomalyRate,
  267. model2_yaw_anomaly_rate as model2YawAnomalyRate,
  268. model3_pitch_anomaly_rate as model3PitchAnomalyRate,
  269. model4_ctrlparam_anomaly_rate as model4CtrlparamAnomalyRate
  270. FROM ${table1}
  271. WHERE
  272. field_id = #{fieldId}
  273. and engine_id = #{engineId}
  274. and source_datetime BETWEEN #{startDate} AND #{endDate}
  275. UNION ALL
  276. <!-- 第二张表 -->
  277. SELECT
  278. create_time AS createTime,
  279. model1_windpwr_anomaly_rate as model1WindpwrAnomalyRate,
  280. model2_yaw_anomaly_rate as model2YawAnomalyRate,
  281. model3_pitch_anomaly_rate as model3PitchAnomalyRate,
  282. model4_ctrlparam_anomaly_rate as model4CtrlparamAnomalyRate
  283. FROM ${table2}
  284. WHERE
  285. field_id = #{fieldId}
  286. and engine_id = #{engineId}
  287. and source_datetime BETWEEN #{startDate} AND #{endDate}
  288. ) AS union_data
  289. ORDER BY date ASC
  290. </select>
  291. <select id="selectAnomalySensorCountVO" resultType="com.energy.manage.analyse.domain.vo.anomaly.AnomalySensorCountVO">
  292. SELECT
  293. field_id,
  294. COUNT(DISTINCT CASE WHEN sensor_anomaly_power = 1 THEN engine_id END) AS 'sensorAnomalyPowerCount',
  295. COUNT(DISTINCT CASE WHEN sensor_anomaly_wind = 1 THEN engine_id END) AS 'sensorAnomalyWindCount',
  296. COUNT(DISTINCT CASE WHEN sensor_anomaly_pitch = 1 THEN engine_id END) AS 'sensorAnomalyPitchCount',
  297. COUNT(DISTINCT CASE WHEN sensor_anomaly_speed = 1 THEN engine_id END) AS 'sensorAnomalyApeedCount',
  298. COUNT(DISTINCT CASE WHEN sensor_anomaly_torque = 1 THEN engine_id END) AS 'sensorAnomalyTorqueCount',
  299. COUNT(DISTINCT CASE WHEN sensor_anomaly_wind_pwr = 1 THEN engine_id END) AS 'sensorAnomalyWindPwrCount',
  300. COUNT(DISTINCT CASE WHEN sensor_anomaly_spd_trq = 1 THEN engine_id END) AS 'sensorAnomalySpdTrqCount'
  301. FROM anomaly_model_${year}
  302. where 1=1
  303. <if test="fieldId!=null">
  304. and field_id = #{fieldId}
  305. </if>
  306. <if test="beginTime != null and beginTime != ''">
  307. and source_datetime <![CDATA[>= ]]> #{beginTime}
  308. </if>
  309. <if test="endTime != null and endTime != ''">
  310. and source_datetime <![CDATA[<= ]]> #{endTime}
  311. </if>
  312. GROUP BY field_id
  313. </select>
  314. <!-- yichangjianc异常检测统计 -->
  315. <select id="selectModeCount" resultType="com.energy.manage.analyse.domain.vo.anomaly.AnomalyCount">
  316. SELECT
  317. field_id,
  318. COUNT(DISTINCT CASE WHEN
  319. model1_windpwr_powercurve = 1
  320. OR model1_windpwr_scatter = 1
  321. THEN engine_id END) AS model1Count,
  322. COUNT(DISTINCT CASE WHEN
  323. model2_yaw_staticyaw = 1
  324. OR model2_yaw_cabletwist = 1
  325. THEN engine_id END) AS model2Count,
  326. COUNT(DISTINCT CASE WHEN
  327. model3_pitch_pitchregulation = 1
  328. OR model3_pitch_pitchcoord = 1
  329. THEN engine_id END) AS model3Count,
  330. COUNT(DISTINCT CASE WHEN
  331. model4_ctrlparam_powerquality = 1
  332. OR model4_ctrlparam_deload = 1
  333. OR model4_ctrlparam_operationstate = 1
  334. THEN engine_id END) AS model4Count,
  335. COUNT(DISTINCT CASE WHEN
  336. model5_aerodynamics_cp = 1
  337. OR model5_aerodynamics_tsr = 1
  338. OR model5_aerodynamics_cp_tsr = 1
  339. THEN engine_id END) AS model5Count
  340. FROM anomaly_model_${year}
  341. WHERE field_id =#{fieldId}
  342. <if test="beginTime != null and beginTime != ''">
  343. and source_datetime <![CDATA[>= ]]> #{beginTime}
  344. </if>
  345. <if test="endTime != null and endTime != ''">
  346. and source_datetime <![CDATA[<= ]]> #{endTime}
  347. </if>
  348. GROUP BY field_id;
  349. </select>
  350. <select id="selectEngineCountByCode" resultType="Integer">
  351. select count(1) as engineCount
  352. from wind_field wf
  353. inner join wind_engine_group weg on wf.field_code = weg.field_code
  354. where wf.company_code = #{companyCode}
  355. </select>
  356. </mapper>