Bläddra i källkod

增加昨天的风机基础信息和风机数据的解析

xusl 1 år sedan
förälder
incheckning
dc94133912

+ 17 - 17
ipp-ap/src/page/index/top/index.vue

@@ -15,20 +15,20 @@
       </div>
     </div>
     <div class="top-bar__right">
-      <el-tooltip v-if="showLock"
-                  effect="dark"
-                  content="锁屏"
-                  placement="bottom">
-      </el-tooltip>
-      <el-tooltip v-if="showFullScren"
-                  effect="dark"
-                  :content="isFullScreen?'退出全屏':'全屏'"
-                  placement="bottom">
-        <div class="top-bar__item">
-          <i :class="isFullScreen?'icon-zuixiaohua':'icon-quanpingzuidahua'"
-             @click="handleScreen"></i>
-        </div>
-      </el-tooltip>
+<!--      <el-tooltip v-if="showLock"-->
+<!--                  effect="dark"-->
+<!--                  content="锁屏"-->
+<!--                  placement="bottom">-->
+<!--      </el-tooltip>-->
+<!--      <el-tooltip v-if="showFullScren"-->
+<!--                  effect="dark"-->
+<!--                  :content="isFullScreen?'退出全屏':'全屏'"-->
+<!--                  placement="bottom">-->
+<!--        <div class="top-bar__item">-->
+<!--          <i :class="isFullScreen?'icon-zuixiaohua':'icon-quanpingzuidahua'"-->
+<!--             @click="handleScreen"></i>-->
+<!--        </div>-->
+<!--      </el-tooltip>-->
       <el-dropdown>
         <span class="el-dropdown-link">
           {{userInfo.username}}
@@ -38,9 +38,9 @@
           <el-dropdown-item>
             <router-link to="/homePage">首页</router-link>
           </el-dropdown-item>
-          <el-dropdown-item @click.native="generateBackPassData">
-            回传实际功率
-          </el-dropdown-item>
+<!--          <el-dropdown-item @click.native="generateBackPassData">-->
+<!--            回传实际功率-->
+<!--          </el-dropdown-item>-->
           <el-dropdown-item @click.native="logout"
                             divided>退出系统
           </el-dropdown-item>

+ 11 - 0
ipp-ap/src/router/page/index.js

@@ -32,6 +32,7 @@ export default [
         import ( /* webpackChunkName: "views" */ '@/views/idp/data/forecastpowerdata')
     }],
   },
+
   {
     path: '/idp/data/windtowerstatusdata',
     component: Layout,
@@ -103,6 +104,16 @@ export default [
     }],
   },
   {
+    path: '/idp/control/windturbineinfo',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: '风机管理',
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/idp/control/windturbineinfo')
+    }],
+  },
+  {
     path: '/idp/system/sysparameter',
     component: Layout,
     children: [{

+ 14 - 0
ipp-ap/src/router/views/index.js

@@ -146,6 +146,20 @@ export default [
         permission: "",
         sort: 1,
         spread: false
+      }, {
+        children: [],
+        hasChildren: false,
+        icon: "icon-bangzhushouji",
+        id: "4173",
+        keepAlive: "0",
+        label: "风机管理",
+        menuType: "0",
+        name: "风机管理",
+        parentId: "4051",
+        path: "/idp/control/windturbineinfo/index",
+        permission: "",
+        sort: 1,
+        spread: false
       }
     ]
   },

+ 3 - 3
ipp-ap/src/views/an/PFParsing/index.vue

@@ -20,9 +20,9 @@
 <!--        <el-tab-pane label="逆变器" name="nbq">-->
 <!--          <nbqparsing v-if="isNbq"/>-->
 <!--        </el-tab-pane>-->
-<!--        <el-tab-pane label="风机" name="fj">-->
-<!--          <fjparsing v-if="isFj"/>-->
-<!--        </el-tab-pane>-->
+        <el-tab-pane label="风机" name="fj">
+          <fjparsing v-if="isFj"/>
+        </el-tab-pane>
         <el-tab-pane label="实际功率" name="rp">
           <rpparsing v-if="isRp"/>
         </el-tab-pane>

+ 47 - 15
ipp-ap/src/views/homePage/echartsMap.vue

@@ -10,6 +10,7 @@
   import map from '@/assets/allChinaMap/neimengMap/cityMap.js'
   import tomap from '@/assets/allChinaMap/neimengMap/cityToneimeng.js'
   import {fetchList as fetchElectricfieldList,homgpageAll,getServerTime} from "@/api/electricfield";
+  import {homgpageAllWindTurbineInfo} from '@/api/windturbineinfo'
 
   export default {
     name: "echartsMaps",
@@ -39,13 +40,23 @@
       },
       // 风机信息
       homgpageAll() {
-        homgpageAll().then(res => {
+        homgpageAllWindTurbineInfo().then(res => {
           // console.log(res.data.data)
           this.windInfo = res.data.data
           this.createMap(this.windInfo)
         }).catch(e=>{
           console.log('地图获取风机信息异常:+'+e)
         })
+
+
+
+        // homgpageAll().then(res => {
+        //   // console.log(res.data.data)
+        //   this.windInfo = res.data.data
+        //   this.createMap(this.windInfo)
+        // }).catch(e=>{
+        //   console.log('地图获取风机信息异常:+'+e)
+        // })
       },
       createMap(data) { /*, symbol*/
 
@@ -204,9 +215,8 @@
               let temp = []
               for (let i = 0; i < data.length; i++) {
                 let geoCoord = [data[i].longitude, data[i].latitude]
-
                 if (geoCoord) {
-                  if (data[i].electricFieldTypeEnum === '风力电站') {
+                  if (data[i].type === 'ElectricField') {
                     // 场站
                     temp.push({
                       // id: data[i].name,
@@ -216,33 +226,36 @@
                       value: geoCoord,
                       type: 'scatter', // series图表类型effectScatter
                       coordinateSystem: 'geo', // series坐标系类型
-                      symbol: 'image://img/fengdianzhan.png', // pin气泡,diamond菱形,scatter点,在这里引用svg路径,就可以自定义动图
+                      symbol: 'image://img/changzhan.png', // pin气泡,diamond菱形,scatter点,在这里引用svg路径,就可以自定义动图
                       showEffectOn: 'render',
-                      symbolSize: 25,
+                      symbolSize: 35,
                       hoverAnimation: true,
                       itemStyle: {
                         normal: {// 改用svg模式后normal不生效,字体大小被放大一般情况下字体给显示并且透明色transparent,鼠标经过显示白色
+
                           shadowBlur: 10,
                           shadowColor: '#333'
                         }
                       },
                     })
-                  }else {
-                    // 场站
+                  } else {
+                    // 风机
                     temp.push({
                       // id: data[i].name,
                       name: data[i].name,
+                      electricField: data[i].electricField,
                       record: data[i],
                       // value: geoCoord.concat(data[i].name)
                       value: geoCoord,
                       type: 'scatter', // series图表类型effectScatter
                       coordinateSystem: 'geo', // series坐标系类型
-                      symbol: 'image://img/guangfu.png', // pin气泡,diamond菱形,scatter点,在这里引用svg路径,就可以自定义动图
+                      symbol: 'image://img/fengdianzhan.png', // pin气泡,diamond菱形,scatter点,在这里引用svg路径,就可以自定义动图
                       showEffectOn: 'render',
-                      symbolSize: 25,
+                      symbolSize: 35,
                       hoverAnimation: true,
                       itemStyle: {
                         normal: {// 改用svg模式后normal不生效,字体大小被放大一般情况下字体给显示并且透明色transparent,鼠标经过显示白色
+
                           shadowBlur: 10,
                           shadowColor: '#333'
                         }
@@ -284,19 +297,38 @@
                   temp.push({
                     type: 'scatter', // series图表类型effectScatter
                     coordinateSystem: 'geo', // series坐标系类型
+                    symbol: 'image://img/changzhan.png', // pin气泡,diamond菱形,scatter点,在这里引用svg路径,就可以自定义动图
+                    showEffectOn: 'render',
+                    symbolSize: 35,
+                    hoverAnimation: true,
+                    itemStyle: {
+                      normal: {// 改用svg模式后normal不生效,字体大小被放大一般情况下字体给显示并且透明色transparent,鼠标经过显示白色
+
+                        shadowBlur: 10,
+                        shadowColor: '#333'
+                      }
+                    },
+                    data: handleEvents.initSeriesData(arr)
+                  })
+                } else {
+                  temp.push({
+                    type: 'scatter', // series图表类型effectScatter
+                    coordinateSystem: 'geo', // series坐标系类型
                     symbol: 'image://img/fengdianzhan.png', // pin气泡,diamond菱形,scatter点,在这里引用svg路径,就可以自定义动图
                     showEffectOn: 'render',
-                    symbolSize: 25,
+                    symbolSize: 35,
                     hoverAnimation: true,
                     itemStyle: {
                       normal: {// 改用svg模式后normal不生效,字体大小被放大一般情况下字体给显示并且透明色transparent,鼠标经过显示白色
+
                         shadowBlur: 10,
                         shadowColor: '#333'
                       }
                     },
-                    data: handleEvents.initSeriesData(arr),
+                    data: handleEvents.initSeriesData(arr)
                   })
                 }
+
               }
               return temp
             }
@@ -374,10 +406,10 @@
                     stroke: 'transparent',
                     key: name[0]
                   },
-                  onclick: function () {
-                    let name = this.style.key
-                    handleEvents.resetOption(chart, option, name)
-                  }
+                  // onclick: function () {
+                  //   let name = this.style.key
+                  //   handleEvents.resetOption(chart, option, name)
+                  // }
                 }, {
                   type: 'text',
                   left: 0,

+ 0 - 1
ipp-ap/src/views/idp/control/windturbineinfo/index.vue

@@ -37,7 +37,6 @@
       <avue-crud ref="crud"
                  :page.sync="page"
                  :data="tableData"
-                 :permission="permissionList"
                  :table-loading="tableLoading"
                  :option="tableOption"
                  @on-load="dataQuery"

+ 270 - 0
ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/WindTurbineInfo.java

@@ -0,0 +1,270 @@
+package com.jiayue.ipp.common.data.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jiayue.ipp.common.data.enums.EquipmentTypeEnum;
+import com.jiayue.ipp.common.mybatis.base.BaseDataEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * idp_wind_turbine_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:00
+ */
+@Data
+@TableName("idp_wind_turbine_info")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "idp_wind_turbine_info")
+public class WindTurbineInfo extends BaseDataEntity<WindTurbineInfo> {
+    private static final long serialVersionUID = 1L;
+
+    public WindTurbineInfo() {
+        this.setEquipmentType(EquipmentTypeEnum.WINDTURBINE.getCode());
+    }
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.ASSIGN_UUID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+
+    /**
+     * 备用字段A
+     */
+    @ApiModelProperty(value = "备用字段A")
+    private String backupA;
+
+
+    /**
+     * 备用字段B
+     */
+    @ApiModelProperty(value = "备用字段B")
+    private String backupB;
+
+
+    /**
+     * 备用字段C
+     */
+    @ApiModelProperty(value = "备用字段C")
+    private String backupC;
+
+
+    /**
+     * 备用字段D
+     */
+    @ApiModelProperty(value = "备用字段D")
+    private String backupD;
+
+
+    /**
+     * 备用字段E
+     */
+    @ApiModelProperty(value = "备用字段E")
+    private String backupE;
+
+
+    /**
+     * 设备类型
+     */
+    @ApiModelProperty(value = "设备类型")
+    private Integer equipmentType;
+
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+
+    /**
+     * 制造商
+     */
+    @ApiModelProperty(value = "制造商")
+    private String manufacturer;
+
+
+    /**
+     * 型号
+     */
+    @ApiModelProperty(value = "型号")
+    private String modelNumber;
+
+
+    /**
+     * 安装时间
+     */
+    @ApiModelProperty(value = "安装时间")
+    private Date installationTime;
+
+
+    /**
+     * 是否上报 1:是 0 否
+     */
+    @ApiModelProperty(value = "是否上报 1:是 0 否")
+    private String report;
+
+
+    /**
+     * 入库时间间隔 单位 s
+     */
+    @ApiModelProperty(value = "入库时间间隔 单位 s")
+    private Integer timeInterval;
+
+
+    /**
+     * 设备编号
+     */
+    @ApiModelProperty(value = "设备编号")
+    private String equipmentNo;
+
+
+    /**
+     * 风机等级
+     */
+    @ApiModelProperty(value = "风机等级")
+    private Integer grade;
+
+
+    /**
+     * 设计空气密度
+     */
+    @ApiModelProperty(value = "设计空气密度")
+    private BigDecimal airDensity = new BigDecimal(-99);
+
+
+    /**
+     * 切入速度
+     */
+    @ApiModelProperty(value = "切入速度")
+    private BigDecimal cutInSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 额定风速
+     */
+    @ApiModelProperty(value = "额定风速")
+    private BigDecimal ratedWindSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 切出速度
+     */
+    @ApiModelProperty(value = "切出速度")
+    private BigDecimal cutOutSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 生存风速
+     */
+    @ApiModelProperty(value = "生存风速")
+    private BigDecimal liveWindSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 叶轮直径(m)
+     */
+    @ApiModelProperty(value = "叶轮直径(m)")
+    private BigDecimal windWheelDiameter = new BigDecimal(-99);
+
+
+    /**
+     * 最大转速(m)
+     */
+    @ApiModelProperty(value = "最大转速(m)")
+    private BigDecimal windWheelMaxSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 最小转速(m)
+     */
+    @ApiModelProperty(value = "最小转速(m)")
+    private BigDecimal windWheelMinSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 额定转速(m)
+     */
+    @ApiModelProperty(value = "额定转速(m)")
+    private BigDecimal windWheelRatedSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 轮毂高度(m)
+     */
+    @ApiModelProperty(value = "轮毂高度(m)")
+    private BigDecimal hubHeight = new BigDecimal(-99);
+
+
+    /**
+     * 并网日期(m)
+     */
+    @ApiModelProperty(value = "并网日期")
+    private Date parallelInDate;
+
+
+    /**
+     * 使用寿命
+     */
+    @ApiModelProperty(value = "使用寿命")
+    private BigDecimal lifeLength = new BigDecimal(-99);
+
+
+    /**
+     * 最大功率
+     */
+    @ApiModelProperty(value = "最大功率")
+    private BigDecimal maxPower = new BigDecimal(-99);
+
+
+    /**
+     * 风机是否样板机 1:是 0:否
+     */
+    @ApiModelProperty(value = "风机是否样板机 1:是 0:否")
+    private String sample;
+
+
+    /**
+     * 经度
+     */
+    @ApiModelProperty(value = "经度")
+    private BigDecimal longitude = new BigDecimal(-99);
+
+
+    /**
+     * 纬度
+     */
+    @ApiModelProperty(value = "纬度")
+    private BigDecimal latitude = new BigDecimal(-99);
+
+
+    /**
+     * 集电线路
+     */
+    @ApiModelProperty(value = "集电线路")
+    private String collectorCircuit;
+
+
+    /**
+     * 分期
+     */
+    @ApiModelProperty(value = "分期")
+    private String divideIntoDifferentPeriod;
+
+    /**
+     * 绑定数据采集通道
+     */
+    @ApiModelProperty(value = "绑定数据采集通道")
+    private String bindTunnel;
+}

+ 219 - 0
ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/WindTurbineStatusData.java

@@ -0,0 +1,219 @@
+package com.jiayue.ipp.common.data.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jiayue.ipp.common.mybatis.base.BaseDataEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * idp_wind_turbine_status_data
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:07
+ */
+@Data
+@TableName("idp_wind_turbine_status_data")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "idp_wind_turbine_status_data")
+public class WindTurbineStatusData extends BaseDataEntity<WindTurbineStatusData> {
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.ASSIGN_UUID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+
+    /**
+     * 设备主键ID
+     */
+    @ApiModelProperty(value = "设备主键ID")
+    private String equipmentId;
+
+
+    /**
+     * 状态值为1代表运行,2代表待机,3代表停用,4代表故障
+     */
+    @ApiModelProperty(value = "状态值为1代表运行,2代表待机,3代表停用,4代表故障")
+    private String status;
+
+
+    /**
+     * 时间
+     */
+    @ApiModelProperty(value = "时间")
+    private LocalDateTime time;
+
+
+    /**
+     * 备用字段1
+     */
+    @ApiModelProperty(value = "备用字段1")
+    private BigDecimal data1 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段2
+     */
+    @ApiModelProperty(value = "备用字段2")
+    private BigDecimal data2 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段3
+     */
+    @ApiModelProperty(value = "备用字段3")
+    private BigDecimal data3 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段4
+     */
+    @ApiModelProperty(value = "备用字段4")
+    private BigDecimal data4 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段5
+     */
+    @ApiModelProperty(value = "备用字段5")
+    private BigDecimal data5 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段6
+     */
+    @ApiModelProperty(value = "备用字段6")
+    private BigDecimal data6 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段7
+     */
+    @ApiModelProperty(value = "备用字段7")
+    private BigDecimal data7 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段8
+     */
+    @ApiModelProperty(value = "备用字段8")
+    private BigDecimal data8 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段9
+     */
+    @ApiModelProperty(value = "备用字段9")
+    private BigDecimal data9 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段10
+     */
+    @ApiModelProperty(value = "备用字段10")
+    private BigDecimal data10 = new BigDecimal(-99);
+
+
+    /**
+     * 有功(KW)
+     */
+    @ApiModelProperty(value = "有功(KW)")
+    private BigDecimal activePower = new BigDecimal(-99);
+
+
+    /**
+     * 无功(KVar)
+     */
+    @ApiModelProperty(value = "无功(KVar)")
+    private BigDecimal reactivePower = new BigDecimal(-99);
+
+
+    /**
+     * 功率因数
+     */
+    @ApiModelProperty(value = "功率因数")
+    private BigDecimal powerFactor = new BigDecimal(-99);
+
+
+    /**
+     * 电压(V)
+     */
+    @ApiModelProperty(value = "电压(V)")
+    private BigDecimal voltage = new BigDecimal(-99);
+
+
+    /**
+     * 电流(A)
+     */
+    @ApiModelProperty(value = "电流(A)")
+    private BigDecimal electricalCurrent = new BigDecimal(-99);
+
+
+    /**
+     * 当日发电量(kW·h)
+     */
+    @ApiModelProperty(value = "当日发电量(kW·h)")
+    private BigDecimal dayElectricQuantity = new BigDecimal(-99);
+
+
+    /**
+     * 当日并网小时
+     */
+    @ApiModelProperty(value = "当日并网小时")
+    private BigDecimal dayGridConnectedHours = new BigDecimal(-99);
+
+
+    /**
+     * 转速(rpm)
+     */
+    @ApiModelProperty(value = "转速(rpm)")
+    private BigDecimal windWheelRatedSpeed = new BigDecimal(-99);
+
+
+    /**
+     * 风速(m/s)
+     */
+    @ApiModelProperty(value = "风速(m/s)")
+    private BigDecimal ws = new BigDecimal(-99);
+
+
+    /**
+     * 风向(°)
+     */
+    @ApiModelProperty(value = "风向(°)")
+    private BigDecimal wd = new BigDecimal(-99);
+
+
+    /**
+     * 温度(℃)
+     */
+    @ApiModelProperty(value = "温度(℃)")
+    private BigDecimal t = new BigDecimal(-99);
+
+
+    /**
+     * 桨距角(°)
+     */
+    @ApiModelProperty(value = "桨距角(°)")
+    private BigDecimal pitchAngle = new BigDecimal(-99);
+
+
+    /**
+     * 累积发电量(MW·h)
+     */
+    @ApiModelProperty(value = "累积发电量(MW·h)")
+    private BigDecimal cumulativeGeneratedEnergy = new BigDecimal(-99);
+
+
+}

+ 192 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/WindTurbineInfoController.java

@@ -0,0 +1,192 @@
+package com.jiayue.ipp.idp.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jiayue.ipp.common.data.entity.ElectricField;
+import com.jiayue.ipp.common.data.entity.WindTurbineInfo;
+import com.jiayue.ipp.idp.service.ElectricFieldService;
+import com.jiayue.ipp.idp.service.WindTurbineInfoService;
+import com.jiayue.ipp.idp.util.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * idp_wind_turbine_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:00
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/windturbineinfo")
+@Slf4j
+@Api(value = "windturbineinfo", tags = "idp_wind_turbine_info管理")
+public class WindTurbineInfoController {
+
+    private final WindTurbineInfoService windTurbineInfoService;
+    private final ElectricFieldService electricFieldService;
+
+    /**
+     * 分页查询
+     *
+     * @param page            分页对象
+     * @param windTurbineInfo idp_wind_turbine_info
+     * @return
+     */
+    @ApiOperation(value = "分页查询", notes = "分页查询")
+    @GetMapping("/page")
+    public R getWindTurbineInfoPage(Page page, WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.page(page, Wrappers.query(windTurbineInfo)));
+    }
+
+    /**
+     * 根据场站编号分页查询
+     *
+     * @param currentPage
+     * @param pageSize
+     * @param stationCode
+     * @return
+     */
+    @ApiOperation(value = "根据场站编号分页查询", notes = "分页查询")
+    @PostMapping("/getByStationCode")
+    public R getByStationCode(Long currentPage, Long pageSize, String stationCode) {
+        Page page = new Page(currentPage, pageSize);
+        page.setMaxLimit((long) -1);
+        return R.ok(windTurbineInfoService.page(page, windTurbineInfoService.getByStationCode(stationCode)));
+    }
+
+    /**
+     * 通过id查询idp_wind_turbine_info
+     *
+     * @param id id
+     * @return R
+     */
+    @ApiOperation(value = "通过id查询", notes = "通过id查询")
+    @GetMapping("/{id}")
+    public R getById(@PathVariable("id") String id) {
+        return R.ok(windTurbineInfoService.getById(id));
+    }
+
+    /**
+     * 新增idp_wind_turbine_info
+     *
+     * @param windTurbineInfo idp_wind_turbine_info
+     * @return R
+     */
+    @ApiOperation(value = "新增idp_wind_turbine_info", notes = "新增idp_wind_turbine_info")
+    @PostMapping
+    public R save(@RequestBody WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.save(windTurbineInfo));
+    }
+
+    /**
+     * 修改idp_wind_turbine_info
+     *
+     * @param windTurbineInfo idp_wind_turbine_info
+     * @return R
+     */
+    @ApiOperation(value = "修改idp_wind_turbine_info", notes = "修改idp_wind_turbine_info")
+    @PutMapping
+    public R updateById(@RequestBody WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.updateById(windTurbineInfo));
+    }
+
+    /**
+     * 通过id删除idp_wind_turbine_info
+     *
+     * @param id id
+     * @return R
+     */
+    @ApiOperation(value = "通过id删除idp_wind_turbine_info", notes = "通过id删除idp_wind_turbine_info")
+    @DeleteMapping("/{id}")
+    public R removeById(@PathVariable String id) {
+        return R.ok(windTurbineInfoService.removeById(id));
+    }
+
+    /**
+     * 根据场站编号查询 返回map格式
+     *
+     * @param stationCode
+     * @return
+     */
+    @ApiOperation(value = "根据场站编号查询", notes = "分页查询")
+    @PostMapping("/findByStationCode")
+    public R findByStationCode(String stationCode) {
+        List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.findByStationCode(stationCode);
+        List<Map<String, String>> list = new ArrayList<>();
+        for (WindTurbineInfo e : windTurbineInfoList) {
+            Map<String, String> map = new HashMap<>();
+            map.put("label", e.getName());
+            map.put("value", e.getEquipmentNo());
+            list.add(map);
+        }
+        return R.ok(list);
+    }
+
+    @GetMapping("/all")
+    public R findAll() {
+        List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.list();
+        List<Map<String, String>> list = new ArrayList<>();
+        for (WindTurbineInfo w : windTurbineInfoList) {
+            Map<String, String> map = new HashMap<>();
+            map.put("label", w.getName());
+            map.put("value", w.getEquipmentNo());
+            list.add(map);
+        }
+        return R.ok(list);
+    }
+    @GetMapping("/homgpageAllWindTurbineInfo")
+    public R homgpageAllWindTurbineInfo() {
+        List<ElectricField> electricFieldList = electricFieldService.list();
+        List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.list();
+//        List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.findByStationCode("T00007");
+        List<Map<String, String>> list = new ArrayList<>();
+        for(ElectricField electricField:electricFieldList){
+            Map<String, String> map = new HashMap<>();
+            map.put("type","ElectricField");
+            map.put("name", electricField.getName());
+            map.put("sign", electricField.getSign());
+            map.put("electricFieldTypeEnum", electricField.getElectricFieldTypeEnum().equals("1")?"光伏电站":"风力电站");
+            map.put("capacity", electricField.getCapacity().setScale(2, RoundingMode.HALF_UP).toString());
+            map.put("longitude", electricField.getLongitude().toString());
+            map.put("latitude", electricField.getLatitude().toString());
+            list.add(map);
+        }
+        for (WindTurbineInfo w : windTurbineInfoList) {
+            List<ElectricField> electricFields = electricFieldList.stream().filter(s -> s.getSign().equals(s.getStationCode())).collect(Collectors.toList());
+            Map<String, String> map = new HashMap<>();
+            map.put("type","WindTurbineInfo");
+            map.put("electricField", !electricFields.isEmpty()?electricFields.get(0).getName():w.getStationCode());
+            map.put("name", w.getName());
+            map.put("equipmentNo", w.getEquipmentNo());
+            map.put("longitude", w.getLongitude().toString());
+            map.put("latitude", w.getLatitude().toString());
+            list.add(map);
+        }
+        return R.ok(list);
+    }
+
+    /**
+     * 获取首页限电标识状态
+     * @return 结果集
+     */
+    @GetMapping(value = "/getServerTime")
+    public R getServerTime(){
+        try{
+            Date d = new Date();
+            return R.ok(d);
+        }catch(Exception e){
+            log.error("系统时间获取失败",e);
+            return R.failed(e.toString());
+        }
+    }
+}

+ 56 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/an/ParsingFjController.java

@@ -0,0 +1,56 @@
+package com.jiayue.ipp.idp.controller.an;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jiayue.ipp.common.data.entity.an.ParsingFjInfo;
+import com.jiayue.ipp.idp.service.an.ParsingFjInfoService;
+import com.jiayue.ipp.idp.util.R;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/parsingFjController")
+public class ParsingFjController {
+    @Autowired
+    ParsingFjInfoService parsingFjInfoService;
+
+    @ApiOperation(value = "添加Fj配置", notes = "添加Fj配置")
+    @PostMapping()
+    public R add(@RequestBody ParsingFjInfo parsingFjInfo) {
+        if (parsingFjInfoService.save(parsingFjInfo)) {
+            return R.ok("添加成功!");
+        } else {
+            return R.failed("添加失败!");
+        }
+    }
+
+    @ApiOperation(value = "修改Fj配置", notes = "修改Fj配置")
+    @PutMapping()
+    public R update(@RequestBody ParsingFjInfo parsingFjInfo) {
+        if (parsingFjInfoService.updateById(parsingFjInfo)) {
+            return R.ok("修改成功!");
+        } else {
+            return R.failed("修改失败!");
+        }
+    }
+
+    @ApiOperation(value = "根据id删除Fj配置", notes = "根据id删除Fj配置")
+    @DeleteMapping("/{id}")
+    public R delete(@PathVariable String id) {
+        if (parsingFjInfoService.removeById(id)) {
+            return R.ok("删除成功!");
+        } else {
+            return R.failed("删除失败!");
+        }
+    }
+
+    @ApiOperation(value = "分页查询Fj配置", notes = "分页查询Fj配置")
+    @GetMapping("/page")
+    public R page(ParsingFjInfo parsingFjInfo, Page page) {
+        return R.ok(parsingFjInfoService.page(page, Wrappers.query(parsingFjInfo)));
+    }
+}

+ 16 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/WindTurbineInfoMapper.java

@@ -0,0 +1,16 @@
+package com.jiayue.ipp.idp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jiayue.ipp.common.data.entity.WindTurbineInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * idp_wind_turbine_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:00
+ */
+@Mapper
+public interface WindTurbineInfoMapper extends BaseMapper<WindTurbineInfo> {
+
+}

+ 16 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/WindTurbineStatusDataMapper.java

@@ -0,0 +1,16 @@
+package com.jiayue.ipp.idp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jiayue.ipp.common.data.entity.WindTurbineStatusData;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 风机数据dao层
+ *
+ * @author tl
+ * @date 2022-05-11 09:47:21
+ */
+@Mapper
+public interface WindTurbineStatusDataMapper extends BaseMapper<WindTurbineStatusData> {
+
+}

+ 19 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/WindTurbineInfoService.java

@@ -0,0 +1,19 @@
+package com.jiayue.ipp.idp.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.ipp.common.data.entity.WindTurbineInfo;
+
+import java.util.List;
+
+/**
+ * idp_wind_turbine_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:00
+ */
+public interface WindTurbineInfoService extends IService<WindTurbineInfo> {
+    QueryWrapper<WindTurbineInfo> getByStationCode(String stationCode);
+
+    List<WindTurbineInfo> findByStationCode(String stationCode);
+}

+ 18 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/WindTurbineStatusDataService.java

@@ -0,0 +1,18 @@
+package com.jiayue.ipp.idp.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.ipp.common.data.entity.WindTurbineStatusData;
+
+
+import java.util.Date;
+
+/**
+ * idp_wind_turbine_status_data
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:07
+ */
+public interface WindTurbineStatusDataService extends IService<WindTurbineStatusData> {
+    QueryWrapper<WindTurbineStatusData> getByStationCodeAndEquipmentIdAndTimeBetween(String stationCode, String equipmentId, Date startTime, Date endTime);
+}

+ 2 - 1
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/an/FTPService.java

@@ -100,7 +100,8 @@ public class FTPService {
                     //遍历解析路径,对文件进行解析
                     for (ParsingUrl ftpParsingUrl : ftpParsingUrlList) {
                         String url = ftpParsingUrl.getUrl();
-                        String path = FileUtil.getParsingPath() + File.separator + ftpParsingUrl.getForecastManufactor() + File.separator + ftpParsingUrl.getStationCode();
+                        // 从ftp下载到本地parsing目录里
+                        String path = FileUtil.getParsingPath() + File.separator + ftpParsingUrl.getStationCode() + File.separator + ftpParsingUrl.getForecastManufactor();
                         File dirFile = new File(path);
                         if (!dirFile.exists()) {
                             dirFile.mkdirs();

+ 38 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/WindTurbineInfoServiceImpl.java

@@ -0,0 +1,38 @@
+package com.jiayue.ipp.idp.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.jiayue.ipp.common.data.entity.WindTurbineInfo;
+import com.jiayue.ipp.idp.mapper.WindTurbineInfoMapper;
+import com.jiayue.ipp.idp.service.WindTurbineInfoService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * idp_wind_turbine_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:00
+ */
+@Service
+public class WindTurbineInfoServiceImpl extends ServiceImpl<WindTurbineInfoMapper, WindTurbineInfo> implements WindTurbineInfoService {
+    @Override
+    public QueryWrapper<WindTurbineInfo> getByStationCode(String stationCode) {
+        QueryWrapper<WindTurbineInfo> wrapper = new QueryWrapper<>();
+        if (stationCode != null && !stationCode.equals("")) {
+            wrapper.eq("station_code", stationCode);
+        }
+        return wrapper;
+    }
+
+    @Override
+    public List<WindTurbineInfo> findByStationCode(String stationCode) {
+        QueryWrapper<WindTurbineInfo> wrapper = new QueryWrapper<>();
+        if (stationCode != null && !stationCode.equals("")) {
+            wrapper.eq("station_code", stationCode);
+        }
+        return baseMapper.selectList(wrapper);
+    }
+}

+ 35 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/WindTurbineStatusDataServiceImpl.java

@@ -0,0 +1,35 @@
+package com.jiayue.ipp.idp.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.ipp.common.data.entity.WindTurbineStatusData;
+import com.jiayue.ipp.idp.mapper.WindTurbineStatusDataMapper;
+import com.jiayue.ipp.idp.service.WindTurbineStatusDataService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * 风机数据业务层实现类
+ *
+ * @author tl
+ * @date 2022-05-11 18:07:03
+ */
+@Service
+public class WindTurbineStatusDataServiceImpl extends ServiceImpl<WindTurbineStatusDataMapper, WindTurbineStatusData> implements WindTurbineStatusDataService {
+    @Override
+    public QueryWrapper<WindTurbineStatusData> getByStationCodeAndEquipmentIdAndTimeBetween(String stationCode, String equipmentId, Date startTime, Date endTime) {
+        QueryWrapper<WindTurbineStatusData> wrapper = new QueryWrapper<>();
+        if (stationCode != null && !stationCode.equals("")) {
+            wrapper.eq("station_code", stationCode);
+        }
+        String[] args = equipmentId.split(",");
+        if (equipmentId != null && !equipmentId.equals("")) {
+            wrapper.in("equipment_id", args);
+        }
+        if (startTime != null && !startTime.equals("") && endTime != null && !endTime.equals("")) {
+            wrapper.between("time", startTime, endTime);
+        }
+        return wrapper;
+    }
+}

+ 142 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/an/ParsingFjInfoServiceImpl.java

@@ -0,0 +1,142 @@
+package com.jiayue.ipp.idp.service.impl.an;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.ipp.common.data.entity.WindTurbineInfo;
+
+import com.jiayue.ipp.common.data.entity.WindTurbineStatusData;
+import com.jiayue.ipp.common.data.entity.an.ParsingFjInfo;
+import com.jiayue.ipp.common.data.entity.an.ParsingInfo;
+import com.jiayue.ipp.common.data.entity.an.ParsingUrl;
+import com.jiayue.ipp.common.data.enums.FileTypeEnum;
+import com.jiayue.ipp.idp.dto.ParsingConstant;
+import com.jiayue.ipp.idp.mapper.an.ParsingFjInfoMapper;
+import com.jiayue.ipp.idp.service.WindTurbineInfoService;
+import com.jiayue.ipp.idp.service.WindTurbineStatusDataService;
+import com.jiayue.ipp.idp.service.an.ParsingFjInfoService;
+import com.jiayue.ipp.idp.service.an.ParsingInterface;
+import com.jiayue.ipp.idp.util.FieldUtil;
+import com.jiayue.ipp.idp.util.FileUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.File;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 风机解析业务层实现类
+ *
+ * @author tl
+ * @date 2022-05-11 18:07:03
+ */
+@Service
+@AllArgsConstructor
+@Slf4j
+@Transactional
+public class ParsingFjInfoServiceImpl extends ServiceImpl<ParsingFjInfoMapper, ParsingFjInfo> implements ParsingFjInfoService, ParsingInterface {
+
+
+    private final Long intervalTime = 300000l;
+
+    private final WindTurbineStatusDataService windTurbineStatusDataService;
+
+    private final WindTurbineInfoService windTurbineInfoService;
+
+
+    @Override
+    public boolean save(ParsingInfo parsingInfo) {
+        return save((ParsingFjInfo) parsingInfo);
+    }
+
+    @Override
+    public boolean deleteById(String id) {
+        return removeById(id);
+    }
+
+    @Override
+    public String parsing(File file, ParsingUrl ftpParsingUrl) {
+        String parsingStatus = ParsingConstant.FAIL;
+
+        try {
+
+
+            List<ParsingFjInfo> parsingFjInfos = baseMapper.selectList(Wrappers.lambdaQuery(ParsingFjInfo.class).like(ParsingInfo::getStationCode, ftpParsingUrl.getStationCode()));
+            if (parsingFjInfos.size() > 0) {
+
+                List<String> fileContent = FileUtil.getFileContent(file);
+                List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.list(Wrappers.lambdaQuery(WindTurbineInfo.class).eq(WindTurbineInfo::getStationCode, ftpParsingUrl.getStationCode()));
+
+                for (ParsingFjInfo parsingFjInfo : parsingFjInfos) {
+                    //判断文件名是否符合配置
+                    if (file.getName().indexOf(parsingFjInfo.getFileName()) >= 0) {
+
+                        WindTurbineStatusData windTurbineStatusData = new WindTurbineStatusData();
+
+                        if (parsingFjInfo.getDataType().equals(FieldUtil.SINGLE)) {
+
+                            String fjName = parsingName(parsingFjInfo.getEquipmentName(), fileContent);
+
+                            List<WindTurbineInfo> filterWindTurbineInfos = windTurbineInfoList.stream().filter(i -> i.getName().equals(fjName)).collect(Collectors.toList());
+
+                            if (filterWindTurbineInfos.size() > 0) {
+                                windTurbineStatusData.setEquipmentId(filterWindTurbineInfos.get(0).getEquipmentNo());
+                                Long time = parsingTime(parsingFjInfo.getTime(), fileContent);
+                                if (time != 0l) {
+                                    LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault());
+                                    windTurbineStatusData.setTime(localDateTime);
+
+                                    windTurbineStatusData.setActivePower(parsingValue(parsingFjInfo.getActivePower(), fileContent));
+                                    windTurbineStatusData.setCumulativeGeneratedEnergy(parsingValue(parsingFjInfo.getCumulativeGeneratedEnergy(), fileContent));
+                                    windTurbineStatusData.setDayGridConnectedHours(parsingValue(parsingFjInfo.getDayGridConnectedHours(), fileContent));
+                                    windTurbineStatusData.setWindWheelRatedSpeed(parsingValue(parsingFjInfo.getWindWheelRatedSpeed(), fileContent));
+                                    windTurbineStatusData.setDayElectricQuantity(parsingValue(parsingFjInfo.getDayElectricQuantity(), fileContent));
+                                    windTurbineStatusData.setElectricalCurrent(parsingValue(parsingFjInfo.getElectricalCurrent(), fileContent));
+                                    windTurbineStatusData.setPitchAngle(parsingValue(parsingFjInfo.getPitchAngle(), fileContent));
+                                    windTurbineStatusData.setPowerFactor(parsingValue(parsingFjInfo.getPowerFactor(), fileContent));
+                                    windTurbineStatusData.setReactivePower(parsingValue(parsingFjInfo.getReactivePower(), fileContent));
+                                    windTurbineStatusData.setVoltage(parsingValue(parsingFjInfo.getVoltage(), fileContent));
+                                    windTurbineStatusData.setWd(parsingValue(parsingFjInfo.getWd(), fileContent));
+                                    windTurbineStatusData.setWs(parsingValue(parsingFjInfo.getWs(), fileContent));
+                                    windTurbineStatusData.setT(parsingValue(parsingFjInfo.getT(), fileContent));
+
+                                    windTurbineStatusData.setStatus(parsingStatus(parsingFjInfo.getStatus(), fileContent));
+                                    windTurbineStatusData.setStationCode(parsingFjInfo.getStationCode());
+
+                                    windTurbineStatusDataService.save(windTurbineStatusData);
+                                    log.info("解析FJ文件:" + file.getName() + " 成功! O(∩_∩)O");
+                                    parsingStatus = FileTypeEnum.FJXX.name();
+                                } else {
+                                    parsingStatus += "解析FJ文件时间错误";
+                                    log.error("解析FJ文件时间错误");
+                                }
+                            } else {
+                                parsingStatus += "fj {" + fjName + "} 在本地无配置无法解析";
+                                log.info("fj {} 在本地无配置无法解析", fjName);
+                            }
+                        } else {
+                            parsingStatus += "fj暂无多行解析方式";
+                            log.info("fj暂无多行解析方式");
+                        }
+
+
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            parsingStatus += "解析风机数据错误! /(ㄒoㄒ)/~~";
+            log.error("解析风机数据错误",e);
+        } finally {
+            return parsingStatus;
+        }
+
+    }
+
+
+}