Explorar el Código

增加逆变器信息和逆变器数据展示

xusl hace 1 año
padre
commit
41b6d80f05
Se han modificado 19 ficheros con 944 adiciones y 26 borrados
  1. 6 6
      ipp-ap/src/const/crud/inverterstatusdata.js
  2. 25 3
      ipp-ap/src/router/page/index.js
  3. 36 6
      ipp-ap/src/router/views/index.js
  4. 7 7
      ipp-ap/src/views/an/PFParsing/index.vue
  5. 2 2
      ipp-ap/src/views/an/PFParsing/nbqparsing.vue
  6. 0 1
      ipp-ap/src/views/idp/control/inverterinfo/index.vue
  7. 0 1
      ipp-ap/src/views/idp/data/inverterstatusdata/index.vue
  8. 129 0
      ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/InverterInfo.java
  9. 203 0
      ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/InverterStatusData.java
  10. 143 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/InverterInfoController.java
  11. 65 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/InverterStatusDataController.java
  12. 56 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/an/ParsingNbqController.java
  13. 16 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/InverterInfoMapper.java
  14. 17 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/InverterStatusDataMapper.java
  15. 19 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/InverterInfoService.java
  16. 17 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/InverterStatusDataService.java
  17. 37 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/InverterInfoServiceImpl.java
  18. 35 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/InverterStatusDataServiceImpl.java
  19. 131 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/an/ParsingNbqInfoServiceImpl.java

+ 6 - 6
ipp-ap/src/const/crud/inverterstatusdata.js

@@ -26,7 +26,7 @@ export const tableOption = {
   },
     {
       "type": "input",
-      "label": "设备编号",
+      "label": "设备名称",
       "prop": "equipmentId",
       dicUrl: '/inverterinfo/all'
     }
@@ -65,11 +65,11 @@ export const tableOption = {
       "label": "无功(KVar)",
       "prop": "reactivePower"
     }
-    , {
-      "type": "input",
-      "label": "功率因数",
-      "prop": "powerFactor"
-    }
+    // , {
+    //   "type": "input",
+    //   "label": "功率因数",
+    //   "prop": "powerFactor"
+    // }
     , {
       "type": "input",
       "label": "电压",

+ 25 - 3
ipp-ap/src/router/page/index.js

@@ -63,6 +63,18 @@ export default [
         import ( /* webpackChunkName: "views" */ '@/views/idp/data/weatherstationstatusdata')
     }],
   },
+
+  {
+    path: '/idp/data/inverterstatusdata',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: '逆变器数据查询',
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/idp/data/inverterstatusdata')
+    }],
+  },
+
   {
     path: '/idp/data/accuracyCalculation',
     component: Layout,
@@ -104,6 +116,16 @@ export default [
     }],
   },
   {
+    path: '/idp/control/windturbineinfo',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: '风机管理',
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/idp/control/windturbineinfo')
+    }],
+  },
+  {
     path: '/idp/control/weatherstationinfo',
     component: Layout,
     children: [{
@@ -114,13 +136,13 @@ export default [
     }],
   },
   {
-    path: '/idp/control/windturbineinfo',
+    path: '/idp/control/inverterinfo',
     component: Layout,
     children: [{
       path: 'index',
-      name: '风机管理',
+      name: '逆变器管理',
       component: () =>
-        import ( /* webpackChunkName: "views" */ '@/views/idp/control/windturbineinfo')
+        import ( /* webpackChunkName: "views" */ '@/views/idp/control/inverterinfo')
     }],
   },
   {

+ 36 - 6
ipp-ap/src/router/views/index.js

@@ -74,7 +74,21 @@ export default [
         sort: 1,
         spread: false
       },
-
+      {
+        children: [],
+        hasChildren: false,
+        icon: "",
+        id: "4080",
+        keepAlive: "0",
+        label: "逆变器数据查询",
+        menuType: "0",
+        name: "逆变器数据查询",
+        parentId: "4058",
+        path: "/idp/data/inverterstatusdata/index",
+        permission: "",
+        sort: 1,
+        spread: false
+      },
       {
       children: [],
       hasChildren: false,
@@ -151,6 +165,21 @@ export default [
         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
+      },
+      {
+        children: [],
+        hasChildren: false,
+        icon: "icon-bangzhushouji",
         id: "4172",
         keepAlive: "0",
         label: "气象站管理",
@@ -161,21 +190,22 @@ export default [
         permission: "",
         sort: 1,
         spread: false
-      }, {
+      },
+      {
         children: [],
         hasChildren: false,
         icon: "icon-bangzhushouji",
         id: "4173",
         keepAlive: "0",
-        label: "风机管理",
+        label: "逆变器管理",
         menuType: "0",
-        name: "风机管理",
+        name: "逆变器管理",
         parentId: "4051",
-        path: "/idp/control/windturbineinfo/index",
+        path: "/idp/control/inverterinfo/index",
         permission: "",
         sort: 1,
         spread: false
-      }
+      },
     ]
   },
   {

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

@@ -11,20 +11,20 @@
 <!--        <el-tab-pane label="nwp" name="nwp">-->
 <!--          <nwpparsing v-if="isNwp"/>-->
 <!--        </el-tab-pane>-->
-        <el-tab-pane label="气象站" name="qxz">
-          <qxzparsing v-if="isQxz"/>
+        <el-tab-pane label="实际功率" name="rp">
+          <rpparsing v-if="isRp"/>
         </el-tab-pane>
         <el-tab-pane label="测风塔" name="cft">
           <cftparsing v-if="isCft"/>
         </el-tab-pane>
-<!--        <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="rp">
-          <rpparsing v-if="isRp"/>
+        <el-tab-pane label="气象站" name="qxz">
+          <qxzparsing v-if="isQxz"/>
+        </el-tab-pane>
+        <el-tab-pane label="逆变器" name="nbq">
+          <nbqparsing v-if="isNbq"/>
         </el-tab-pane>
       </el-tabs>
       <!--通道配置的编辑框-->

+ 2 - 2
ipp-ap/src/views/an/PFParsing/nbqparsing.vue

@@ -21,7 +21,7 @@
             </tr>
             <tr>
               <td>当日发电量公式:{{ props.row.dayElectricQuantity }}</td>
-              <td>累发电量公式:{{ props.row.cumulativeGeneratedEnergy }}</td>
+              <td>累发电量公式:{{ props.row.cumulativeGeneratedEnergy }}</td>
               <td>并网小时数公式:{{ props.row.dayGridConnectedHours }}</td>
             </tr>
           </table>
@@ -196,7 +196,7 @@
                 <el-col :span="8">
                   <el-form-item prop="cumulativeGeneratedEnergy" label-width="110px" class="formulaColor">
                     <span slot="label">
-                      累发电量公式
+                      累发电量公式
                     </span>
                     <el-input v-model="form.cumulativeGeneratedEnergy" readonly
                               @click.native="ftck(form.cumulativeGeneratedEnergy,'form.cumulativeGeneratedEnergy','(累积发电量)')"></el-input>

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

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

+ 0 - 1
ipp-ap/src/views/idp/data/inverterstatusdata/index.vue

@@ -69,7 +69,6 @@
       <avue-crud ref="crud"
                  :page.sync="page"
                  :data="tableData"
-                 :permission="permissionList"
                  :table-loading="tableLoading"
                  :option="tableOption"
                  @search-change="searchChange"

+ 129 - 0
ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/InverterInfo.java

@@ -0,0 +1,129 @@
+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;
+
+/**
+ * idp_inverter_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:11
+ */
+@Data
+@TableName("idp_inverter_info")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "idp_inverter_info")
+public class InverterInfo extends BaseDataEntity<InverterInfo> {
+    private static final long serialVersionUID = 1L;
+
+    public InverterInfo() {
+        this.setEquipmentType(EquipmentTypeEnum.INVERTER.getCode());
+    }
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.ASSIGN_UUID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+
+    /**
+     * 设备类型
+     */
+    @ApiModelProperty(value = "设备类型")
+    private Integer equipmentType;
+
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+
+    /**
+     * 制造商
+     */
+    @ApiModelProperty(value = "制造商")
+    private String manufacturer;
+
+
+    /**
+     * 型号
+     */
+    @ApiModelProperty(value = "型号")
+    private String modelNumber;
+
+
+    /**
+     * 安装时间
+     */
+    @ApiModelProperty(value = "安装时间")
+    private LocalDate installationTime;
+
+
+    /**
+     * 入库时间间隔  单位 s
+     */
+    @ApiModelProperty(value = "入库时间间隔  单位 s")
+    private Integer timeInterval;
+
+
+    /**
+     * 设备编号
+     */
+    @ApiModelProperty(value = "设备编号")
+    private String equipmentNo;
+
+
+    /**
+     * 是否组串式 1:是 0:不是
+     */
+    @ApiModelProperty(value = "是否组串式 1:是 0:不是")
+    private String groupSeries;
+
+
+    /**
+     * 逆变器效率
+     */
+    @ApiModelProperty(value = "逆变器效率")
+    private BigDecimal efficiency = new BigDecimal(-99);
+
+
+    /**
+     * 额定功率
+     */
+    @ApiModelProperty(value = "额定功率")
+    private BigDecimal capacity = new BigDecimal(-99);
+
+
+    /**
+     * 集电线路
+     */
+    @ApiModelProperty(value = "集电线路")
+    private String collectorCircuit;
+
+
+    /**
+     * 逆变器是否样板机 1:是 0:不是
+     */
+    @ApiModelProperty(value = "逆变器是否样板机 1:是 0:不是")
+    private String sample;
+    /**
+     * 绑定数据采集通道
+     */
+    @ApiModelProperty(value = "绑定数据采集通道")
+    private String bindTunnel;
+
+}

+ 203 - 0
ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/InverterStatusData.java

@@ -0,0 +1,203 @@
+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 javax.validation.constraints.Digits;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * idp_inverter_status_data
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:14
+ */
+@Data
+@TableName("idp_inverter_status_data")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "idp_inverter_status_data")
+public class InverterStatusData extends BaseDataEntity<InverterStatusData> {
+    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")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data1 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段2
+     */
+    @ApiModelProperty(value = "备用字段2")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data2 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段3
+     */
+    @ApiModelProperty(value = "备用字段3")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data3 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段4
+     */
+    @ApiModelProperty(value = "备用字段4")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data4 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段5
+     */
+    @ApiModelProperty(value = "备用字段5")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data5 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段6
+     */
+    @ApiModelProperty(value = "备用字段6")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data6 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段7
+     */
+    @ApiModelProperty(value = "备用字段7")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data7 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段8
+     */
+    @ApiModelProperty(value = "备用字段8")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data8 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段9
+     */
+    @ApiModelProperty(value = "备用字段9")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data9 = new BigDecimal(-99);
+
+
+    /**
+     * 备用字段10
+     */
+    @ApiModelProperty(value = "备用字段10")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal data10 = new BigDecimal(-99);
+
+
+    /**
+     * 有功(KW)
+     */
+    @ApiModelProperty(value = "有功(KW)")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal activePower = new BigDecimal(-99);
+
+
+    /**
+     * 无功(KVar)
+     */
+    @ApiModelProperty(value = "无功(KVar)")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal reactivePower = new BigDecimal(-99);
+
+
+    /**
+     * 功率因数
+     */
+    @ApiModelProperty(value = "功率因数")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal powerFactor = new BigDecimal(-99);
+
+
+    /**
+     * 电压
+     */
+    @ApiModelProperty(value = "电压")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal voltage = new BigDecimal(-99);
+
+
+    /**
+     * 电流
+     */
+    @ApiModelProperty(value = "电流")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal electricalCurrent = new BigDecimal(-99);
+
+
+    /**
+     * 当日发电量
+     */
+    @ApiModelProperty(value = "当日发电量")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal dayElectricQuantity = new BigDecimal(-99);
+
+
+    /**
+     * 累积发电量
+     */
+    @ApiModelProperty(value = "累积发电量")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal cumulativeGeneratedEnergy = new BigDecimal(-99);
+
+
+    /**
+     * 当日并网小时数
+     */
+    @ApiModelProperty(value = "当日并网小时数")
+    @Digits(integer = 10, fraction = 2)
+    private BigDecimal dayGridConnectedHours = new BigDecimal(-99);
+
+
+}

+ 143 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/InverterInfoController.java

@@ -0,0 +1,143 @@
+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.InverterInfo;
+import com.jiayue.ipp.idp.service.InverterInfoService;
+import com.jiayue.ipp.idp.util.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * idp_inverter_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:11
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/inverterinfo")
+@Api(value = "inverterinfo", tags = "idp_inverter_info管理")
+public class InverterInfoController {
+
+    private final InverterInfoService inverterInfoService;
+
+    /**
+     * 分页查询
+     *
+     * @param page         分页对象
+     * @param inverterInfo idp_inverter_info
+     * @return
+     */
+    @ApiOperation(value = "分页查询", notes = "分页查询")
+    @GetMapping("/page")
+    public R getInverterInfoPage(Page page, InverterInfo inverterInfo) {
+        return R.ok(inverterInfoService.page(page, Wrappers.query(inverterInfo)));
+    }
+
+    /**
+     * 根据场站编号分页查询
+     *
+     * @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(inverterInfoService.page(page, inverterInfoService.getByStationCode(stationCode)));
+    }
+
+    /**
+     * 通过id查询idp_inverter_info
+     *
+     * @param id id
+     * @return R
+     */
+    @ApiOperation(value = "通过id查询", notes = "通过id查询")
+    @GetMapping("/{id}")
+    public R getById(@PathVariable("id") String id) {
+        return R.ok(inverterInfoService.getById(id));
+    }
+
+    /**
+     * 新增idp_inverter_info
+     *
+     * @param inverterInfo idp_inverter_info
+     * @return R
+     */
+    @ApiOperation(value = "新增idp_inverter_info", notes = "新增idp_inverter_info")
+    @PostMapping
+    public R save(@RequestBody InverterInfo inverterInfo) {
+        return R.ok(inverterInfoService.save(inverterInfo));
+    }
+
+    /**
+     * 修改idp_inverter_info
+     *
+     * @param inverterInfo idp_inverter_info
+     * @return R
+     */
+    @ApiOperation(value = "修改idp_inverter_info", notes = "修改idp_inverter_info")
+    @PutMapping
+    public R updateById(@RequestBody InverterInfo inverterInfo) {
+        return R.ok(inverterInfoService.updateById(inverterInfo));
+    }
+
+    /**
+     * 通过id删除idp_inverter_info
+     *
+     * @param id id
+     * @return R
+     */
+    @ApiOperation(value = "通过id删除idp_inverter_info", notes = "通过id删除idp_inverter_info")
+    @DeleteMapping("/{id}")
+    public R removeById(@PathVariable String id) {
+        return R.ok(inverterInfoService.removeById(id));
+    }
+
+    /**
+     * 根据场站编号查询 返回map格式
+     *
+     * @param stationCode
+     * @return
+     */
+    @ApiOperation(value = "根据场站编号查询", notes = "分页查询")
+    @PostMapping("/findByStationCode")
+    public R findByStationCode(String stationCode) {
+        List<InverterInfo> inverterInfoList = inverterInfoService.findByStationCode(stationCode);
+        List<Map<String, String>> list = new ArrayList<>();
+        for (InverterInfo e : inverterInfoList) {
+            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<InverterInfo> inverterInfoList = inverterInfoService.list();
+        List<Map<String, String>> list = new ArrayList<>();
+        for (InverterInfo e : inverterInfoList) {
+            Map<String, String> map = new HashMap<>();
+            map.put("label", e.getName());
+            map.put("value", e.getId());
+            list.add(map);
+        }
+        return R.ok(list);
+    }
+}

+ 65 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/InverterStatusDataController.java

@@ -0,0 +1,65 @@
+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.InverterStatusData;
+import com.jiayue.ipp.idp.service.InverterStatusDataService;
+import com.jiayue.ipp.idp.util.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+
+/**
+ * idp_inverter_status_data
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:14
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/inverterstatusdata")
+@Api(value = "inverterstatusdata", tags = "idp_inverter_status_data管理")
+public class InverterStatusDataController {
+
+    private final InverterStatusDataService inverterStatusDataService;
+
+    /**
+     * 分页查询
+     *
+     * @param page               分页对象
+     * @param inverterStatusData idp_inverter_status_data
+     * @return
+     */
+    @ApiOperation(value = "分页查询", notes = "分页查询")
+    @GetMapping("/page")
+    public R getInverterStatusDataPage(Page page, InverterStatusData inverterStatusData) {
+        return R.ok(inverterStatusDataService.page(page, Wrappers.query(inverterStatusData)));
+    }
+
+    /**
+     * 根据场站编号和设备ID分页查询
+     *
+     * @param currentPage
+     * @param pageSize
+     * @param stationCode 场站编号
+     * @param equipmentId 设备id
+     * @param startTime   开始时间
+     * @param endTime     结束时间
+     * @return
+     */
+    @ApiOperation(value = "根据场站编号和设备ID和时间范围分页查询", notes = "分页查询")
+    @PostMapping("/getByStationCodeAndEquipmentIdAndTimeBetween")
+    public R getByStationCodeAndEquipmentIdAndTimeBetween(Long currentPage, Long pageSize, String stationCode, String equipmentId, Long startTime, Long endTime) {
+        Page page = new Page(currentPage, pageSize);
+        page.setMaxLimit((long) -1);
+        return R.ok(inverterStatusDataService.page(page, inverterStatusDataService.getByStationCodeAndEquipmentIdAndTimeBetween(stationCode, equipmentId, new Date(startTime), new Date(endTime))));
+    }
+}

+ 56 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/an/ParsingNbqController.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.ParsingNbqInfo;
+import com.jiayue.ipp.idp.service.an.ParsingNbqInfoService;
+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("/parsingNbqController")
+public class ParsingNbqController {
+    @Autowired
+    ParsingNbqInfoService parsingNbqInfoService;
+
+    @ApiOperation(value = "添加Nbq配置", notes = "添加Nbq配置")
+    @PostMapping()
+    public R add(@RequestBody ParsingNbqInfo parsingNbqInfo) {
+        if (parsingNbqInfoService.save(parsingNbqInfo)) {
+            return R.ok("添加成功!");
+        } else {
+            return R.failed("添加失败!");
+        }
+    }
+
+    @ApiOperation(value = "修改Nbq配置", notes = "修改Nbq配置")
+    @PutMapping()
+    public R update(@RequestBody ParsingNbqInfo parsingNbqInfo) {
+        if (parsingNbqInfoService.updateById(parsingNbqInfo)) {
+            return R.ok("修改成功!");
+        } else {
+            return R.failed("修改失败!");
+        }
+    }
+
+    @ApiOperation(value = "根据id删除Nbq配置", notes = "根据id删除Nbq配置")
+    @DeleteMapping("/{id}")
+    public R delete(@PathVariable String id) {
+        if (parsingNbqInfoService.removeById(id)) {
+            return R.ok("删除成功!");
+        } else {
+            return R.failed("删除失败!");
+        }
+    }
+
+    @ApiOperation(value = "分页查询Nbq配置", notes = "分页查询Nbq配置")
+    @GetMapping("/page")
+    public R page(ParsingNbqInfo parsingNbqInfo, Page page) {
+        return R.ok(parsingNbqInfoService.page(page, Wrappers.query(parsingNbqInfo)));
+    }
+}

+ 16 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/InverterInfoMapper.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.InverterInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * idp_inverter_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:11
+ */
+@Mapper
+public interface InverterInfoMapper extends BaseMapper<InverterInfo> {
+
+}

+ 17 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/InverterStatusDataMapper.java

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

+ 19 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/InverterInfoService.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.InverterInfo;
+
+import java.util.List;
+
+/**
+ * idp_inverter_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:11
+ */
+public interface InverterInfoService extends IService<InverterInfo> {
+    QueryWrapper<InverterInfo> getByStationCode(String stationCode);
+
+    List<InverterInfo> findByStationCode(String stationCode);
+}

+ 17 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/InverterStatusDataService.java

@@ -0,0 +1,17 @@
+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.InverterStatusData;
+
+import java.util.Date;
+
+/**
+ * 逆变器数据业务层接口
+ *
+ * @author tl
+ * @date 2022-05-11 09:51:21
+ */
+public interface InverterStatusDataService extends IService<InverterStatusData> {
+    QueryWrapper<InverterStatusData> getByStationCodeAndEquipmentIdAndTimeBetween(String stationCode, String equipmentId, Date startTime, Date endTime);
+}

+ 37 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/InverterInfoServiceImpl.java

@@ -0,0 +1,37 @@
+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.InverterInfo;
+import com.jiayue.ipp.idp.mapper.InverterInfoMapper;
+import com.jiayue.ipp.idp.service.InverterInfoService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * idp_inverter_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:11
+ */
+@Service
+public class InverterInfoServiceImpl extends ServiceImpl<InverterInfoMapper, InverterInfo> implements InverterInfoService {
+    @Override
+    public QueryWrapper<InverterInfo> getByStationCode(String stationCode) {
+        QueryWrapper<InverterInfo> wrapper = new QueryWrapper<>();
+        if (stationCode != null && !stationCode.equals("")) {
+            wrapper.eq("station_code", stationCode);
+        }
+        return wrapper;
+    }
+
+    @Override
+    public List<InverterInfo> findByStationCode(String stationCode) {
+        QueryWrapper<InverterInfo> 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/InverterStatusDataServiceImpl.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.InverterStatusData;
+import com.jiayue.ipp.idp.mapper.InverterStatusDataMapper;
+import com.jiayue.ipp.idp.service.InverterStatusDataService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * idp_inverter_status_data
+ *
+ * @author whc
+ * @date 2022-03-18 15:49:14
+ */
+@Service
+public class InverterStatusDataServiceImpl extends ServiceImpl<InverterStatusDataMapper, InverterStatusData> implements InverterStatusDataService {
+    @Override
+    public QueryWrapper<InverterStatusData> getByStationCodeAndEquipmentIdAndTimeBetween(String stationCode, String equipmentId, Date startTime, Date endTime) {
+        QueryWrapper<InverterStatusData> 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;
+    }
+}

+ 131 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/an/ParsingNbqInfoServiceImpl.java

@@ -0,0 +1,131 @@
+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.InverterInfo;
+import com.jiayue.ipp.common.data.entity.InverterStatusData;
+import com.jiayue.ipp.common.data.entity.an.ParsingInfo;
+import com.jiayue.ipp.common.data.entity.an.ParsingNbqInfo;
+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.ParsingNbqInfoMapper;
+import com.jiayue.ipp.idp.service.InverterInfoService;
+import com.jiayue.ipp.idp.service.InverterStatusDataService;
+import com.jiayue.ipp.idp.service.an.ParsingInterface;
+import com.jiayue.ipp.idp.service.an.ParsingNbqInfoService;
+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 ParsingNbqInfoServiceImpl extends ServiceImpl<ParsingNbqInfoMapper, ParsingNbqInfo> implements ParsingNbqInfoService, ParsingInterface {
+
+    private final InverterStatusDataService inverterStatusDataService;
+
+    private final InverterInfoService inverterInfoService;
+
+    @Override
+    public boolean save(ParsingInfo parsingInfo) {
+        return save((ParsingNbqInfo) parsingInfo);
+    }
+
+    @Override
+    public boolean deleteById(String id) {
+        return removeById(id);
+    }
+
+    @Override
+    public String parsing(File file, ParsingUrl ftpParsingUrl) {
+        String parsingStatus = ParsingConstant.FAIL;
+
+        try {
+
+            //查询符合该场站的nbq配置信息
+            List<ParsingNbqInfo> parsingNbqInfos = baseMapper.selectList(Wrappers.lambdaQuery(ParsingNbqInfo.class).like(ParsingInfo::getStationCode, ftpParsingUrl.getStationCode()));
+            if (parsingNbqInfos.size() > 0) {
+
+                //解析文件内容以行为单位的 List<String>
+                List<String> fileContent = FileUtil.getFileContent(file);
+
+                //查询对应该场站路径下的逆变器信息
+                List<InverterInfo> inverterInfoList = inverterInfoService.list(Wrappers.lambdaQuery(InverterInfo.class).eq(InverterInfo::getStationCode, ftpParsingUrl.getStationCode()));
+
+                //因为有可能该场站有多种解析配置,例如多个逆变器数据情况,需要循环解析信息
+                for (ParsingNbqInfo parsingNbqInfo : parsingNbqInfos) {
+                    //判断文件名是否符合配置
+                    if (file.getName().indexOf(parsingNbqInfo.getFileName()) >= 0) {
+
+                        //判断数据类型是单行还是多行
+                        if (parsingNbqInfo.getDataType().equals(FieldUtil.SINGLE)) {
+                            /**
+                             * 逆变器和风机id  需要解析名称找出对应设备存入id
+                             *
+                             */
+                            String nbqName = parsingName(parsingNbqInfo.getEquipmentName(), fileContent);
+                            List<InverterInfo> filterInverterInfos = inverterInfoList.stream().filter(i -> i.getName().equals(nbqName)).collect(Collectors.toList());
+                            if (filterInverterInfos.size() > 0) {
+                                Long time = parsingTime(parsingNbqInfo.getTime(), fileContent);
+                                if (time != 0l) {
+                                    InverterStatusData inverterStatusData = new InverterStatusData();
+                                    LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault());
+                                    inverterStatusData.setTime(localDateTime);
+
+                                    inverterStatusData.setActivePower(parsingValue(parsingNbqInfo.getActivePower(), fileContent));
+                                    inverterStatusData.setCumulativeGeneratedEnergy(parsingValue(parsingNbqInfo.getCumulativeGeneratedEnergy(), fileContent));
+                                    inverterStatusData.setDayGridConnectedHours(parsingValue(parsingNbqInfo.getDayGridConnectedHours(), fileContent));
+                                    inverterStatusData.setDayElectricQuantity(parsingValue(parsingNbqInfo.getDayElectricQuantity(), fileContent));
+                                    inverterStatusData.setElectricalCurrent(parsingValue(parsingNbqInfo.getElectricalCurrent(), fileContent));
+                                    inverterStatusData.setReactivePower(parsingValue(parsingNbqInfo.getReactivePower(), fileContent));
+                                    inverterStatusData.setPowerFactor(parsingValue(parsingNbqInfo.getPowerFactor(), fileContent));
+                                    inverterStatusData.setVoltage(parsingValue(parsingNbqInfo.getVoltage(), fileContent));
+                                    inverterStatusData.setStatus(parsingStatus(parsingNbqInfo.getStatus(), fileContent));
+                                    inverterStatusData.setEquipmentId(filterInverterInfos.get(0).getEquipmentNo());
+                                    inverterStatusData.setStationCode(ftpParsingUrl.getStationCode());
+                                    inverterStatusDataService.save(inverterStatusData);
+                                    log.info("解析NBQ文件:{} 成功! O(∩_∩)O", file.getName());
+                                    parsingStatus = FileTypeEnum.NBQ.name();
+                                } else {
+                                    parsingStatus += "nbq {" + nbqName + "} 在本地无配置无法解析";
+                                    log.info("nbq {} 在本地无配置无法解析", nbqName);
+                                }
+                            } else {
+                                parsingStatus += "解析NBQ文件时间错误";
+                                log.error("解析NBQ文件时间错误");
+                            }
+                        } else {
+                            parsingStatus += "nbq暂无多行解析方式";
+                            log.info("nbq暂无多行解析方式");
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            parsingStatus += "解析逆变器数据失败";
+            log.error("解析逆变器数据失败! /(ㄒoㄒ)/~~", e);
+        } finally {
+            return parsingStatus;
+        }
+
+    }
+
+}