Browse Source

完成一键设置干预值功能

xusl 9 tháng trước cách đây
mục cha
commit
d088b229b8

+ 59 - 37
ipp-ap/package-lock.json

@@ -21,7 +21,10 @@
         "echarts": "^5.3.1",
         "element-ui": "^2.15.8",
         "esri-loader": "^3.5.0",
+        "js-md5": "^0.7.3",
+        "moment": "^2.24.0",
         "nprogress": "^0.2.0",
+        "qs": "^6.11.2",
         "script-loader": "^0.7.2",
         "vue": "^2.6.10",
         "vue-axios": "^2.1.4",
@@ -8704,6 +8707,11 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/js-md5": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz",
+      "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
+    },
     "node_modules/js-message": {
       "version": "1.0.7",
       "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
@@ -9469,6 +9477,14 @@
         "mkdirp": "bin/cmd.js"
       }
     },
+    "node_modules/moment": {
+      "version": "2.30.1",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/monaco-editor": {
       "version": "0.21.3",
       "resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.21.3.tgz",
@@ -10092,7 +10108,6 @@
       "version": "1.13.1",
       "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
       "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
-      "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -11692,12 +11707,17 @@
       }
     },
     "node_modules/qs": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
-      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
-      "dev": true,
+      "version": "6.12.2",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.12.2.tgz",
+      "integrity": "sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==",
+      "dependencies": {
+        "side-channel": "^1.0.6"
+      },
       "engines": {
         "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/query-string": {
@@ -12179,6 +12199,15 @@
         "request": "^2.34"
       }
     },
+    "node_modules/request/node_modules/qs": {
+      "version": "6.5.3",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
+      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
@@ -12979,7 +13008,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz",
       "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
-      "dev": true,
       "dependencies": {
         "call-bind": "^1.0.7",
         "es-errors": "^1.3.0",
@@ -14846,21 +14874,6 @@
       "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
       "dev": true
     },
-    "node_modules/url/node_modules/qs": {
-      "version": "6.12.1",
-      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.12.1.tgz",
-      "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
-      "dev": true,
-      "dependencies": {
-        "side-channel": "^1.0.6"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/use": {
       "version": "3.1.1",
       "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz",
@@ -22946,6 +22959,11 @@
       "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
       "dev": true
     },
+    "js-md5": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz",
+      "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
+    },
     "js-message": {
       "version": "1.0.7",
       "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
@@ -23568,6 +23586,11 @@
         "minimist": "^1.2.6"
       }
     },
+    "moment": {
+      "version": "2.30.1",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
+    },
     "monaco-editor": {
       "version": "0.21.3",
       "resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.21.3.tgz",
@@ -24055,8 +24078,7 @@
     "object-inspect": {
       "version": "1.13.1",
       "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
-      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
-      "dev": true
+      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
     },
     "object-is": {
       "version": "1.1.6",
@@ -25393,10 +25415,12 @@
       "dev": true
     },
     "qs": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
-      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
-      "dev": true
+      "version": "6.12.2",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.12.2.tgz",
+      "integrity": "sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==",
+      "requires": {
+        "side-channel": "^1.0.6"
+      }
     },
     "query-string": {
       "version": "4.3.4",
@@ -25762,6 +25786,14 @@
         "tough-cookie": "~2.5.0",
         "tunnel-agent": "^0.6.0",
         "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "qs": {
+          "version": "6.5.3",
+          "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
+          "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+          "dev": true
+        }
       }
     },
     "request-promise-core": {
@@ -26425,7 +26457,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz",
       "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.7",
         "es-errors": "^1.3.0",
@@ -27882,15 +27913,6 @@
           "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz",
           "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
           "dev": true
-        },
-        "qs": {
-          "version": "6.12.1",
-          "resolved": "https://registry.npmmirror.com/qs/-/qs-6.12.1.tgz",
-          "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
-          "dev": true,
-          "requires": {
-            "side-channel": "^1.0.6"
-          }
         }
       }
     },

+ 133 - 48
ipp-ap/src/views/idp/control/dqIntervene/index.vue

@@ -23,6 +23,7 @@
         </el-form-item>
         <el-form-item>
           <el-button size="small" :loading="loading" @click="getDqData">查询</el-button>
+          <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-s-tools" @click="batchDqPresets">一键设置干预值</el-button>
           <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-s-tools" @click="saveDqPresets">保存并下发短期干预值</el-button>
         </el-form-item>
       </el-form>
@@ -57,7 +58,7 @@
               align="center"
               label="干预值">
               <template slot-scope="scope">
-                <vxe-input type="number" v-model="scope.row.presetsPower" size="small" style="width:100%" min="0" placeholder=""></vxe-input>
+                <vxe-input type="number" v-model="scope.row.presetsPower" size="small" style="width:100%" min="0" :max="capacity" placeholder=""></vxe-input>
               </template>
             </el-table-column>
           </el-table>
@@ -66,6 +67,59 @@
           <div id="gycharts" style="float:left;width: 95%;height: 550px"></div>
         </div>
       </div>
+
+      <div>
+        <el-dialog :visible.sync="bathInterveneVisible" :close-on-click-modal='false'
+                   :before-close="closeDialog" width="50%">
+          <el-form :model="bathForm">
+            <fieldset>
+              <legend>一键设置干预值</legend>
+              <el-row style="gutter:30" class="row-bg el-row-two" justify="space-between">
+                <el-col :span="10" :offset="1">
+                  <el-form-item label="开始时间:" label-width="150px" style="min-width: 100px">
+                    <el-time-select
+                      v-model="bathForm.startTime"
+                      :clearable="false"
+                      :picker-options="{
+                        start:'00:00',
+                        step:'00:15',
+                        end:'23:45'
+                      }"
+                      placeholder="选择日期">
+                    </el-time-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="10" :offset="1">
+                  <el-form-item label="结束时间:" label-width="150px" style="min-width: 110px">
+                    <el-time-select
+                      v-model="bathForm.endTime"
+                      :clearable="false"
+                      :picker-options="{
+                        start:'00:00',
+                        step:'00:15',
+                        end:'23:45',
+                      }"
+                      placeholder="选择日期">
+                    </el-time-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row style="gutter:30" class="row-bg el-row-two" justify="space-between">
+                <el-col :span="10" :offset="1">
+                  <el-form-item label="设定干预值:" label-width="150px" style="min-width: 110px">
+                    <el-input-number style="width: 100%" v-model="bathForm.dqValue" :min=0 placeholder="必填项"/>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="10" :offset="1">
+                </el-col>
+              </el-row>
+            </fieldset>
+          </el-form>
+          <span slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="saveBathIntervene()">设 置</el-button>
+        </span>
+        </el-dialog>
+      </div>
     </el-container>
   </div>
 </template>
@@ -76,9 +130,16 @@ import {getStation} from "@/api/inverterinfo";
 export default {
   data() {
     return {
+      bathForm: {
+        startTime: '00:00',
+        endTime: '23:45',
+        dqValue: 0
+      },
+      bathInterveneVisible: false,
       gyDate:'',
       stationCode: '',
       stationList: [],
+      stationAllList: [],
       chart:null,
       // 日期选择器
       dateTime: '',
@@ -94,6 +155,9 @@ export default {
     this.chart.clear()
   },
   created: function() {
+    this.$axios.get('/electricfield/allData').then((res) => {
+      this.stationAllList = res.data.data
+    })
   },
   mounted() {
     this.getStationCode()
@@ -105,6 +169,49 @@ export default {
     // })
   },
   methods: {
+    batchDqPresets(){
+      if (this.tableData.length==0){
+        this.$message.warning('请先获取干预数据')
+        return
+      }
+      this.bathForm.startTime="00:00"
+      this.bathForm.endTime="23:45"
+      this.bathInterveneVisible = true
+    },
+    saveBathIntervene(){
+      if (this.bathForm.startTime=='' ||this.bathForm.startTime==null || this.bathForm.endTime=='' || this.bathForm.endTime==null){
+        this.$message.warning('请选择开始时间和结束时间!')
+        return
+      }
+      if (this.bathForm.startTime>this.bathForm.endTime){
+        this.$message.warning('开始时间不能大于结束时间,不能进行设置!')
+        return
+      }
+
+      if (this.bathForm.dqValue=='' ||this.bathForm.dqValue==null ){
+        this.$message.warning('请录入干预值!')
+        return
+      }
+
+      if (this.bathForm.dqValue>this.capacity){
+        this.$message.warning('干预值超出装机容量:'+this.capacity+'MW,不能进行设置!')
+        return
+      }
+
+      for (let i=0;i<this.tableData.length;i++){
+        let tempsj = this.$moment(this.tableData[i].forecastTime).format('HH:mm')
+        if (tempsj>=this.bathForm.startTime && tempsj<=this.bathForm.endTime){
+          this.tableData[i].presetsPower = this.bathForm.dqValue
+        }
+      }
+      this.closeDialog()
+    },
+    closeDialog() {
+      this.bathForm.startTime=''
+      this.bathForm.endTime=''
+      this.bathForm.dqValue=''
+      this.bathInterveneVisible = false
+    },
     getStationCode() {
       this.$axios.get('/electricfield/all').then((res) => {
         this.stationList = res.data.data
@@ -130,6 +237,9 @@ export default {
         endTime:endTime,
         stationCode:this.stationCode
       }
+      const item = this.stationAllList.find(item => item.stationCode === this.stationCode)
+      this.capacity = item.capacity
+
       this.$axios.get('/dqInterveneController/getShort/',{params: queryParams}).then((res) => {
         this.tableData = res.data.data
         let activePower=[]
@@ -144,53 +254,6 @@ export default {
           time.push(this.$moment(this.tableData[i].forecastTime).format('YYYY-MM-DD HH:mm:ss'))
         }
         this.chart = this.$echarts.init(document.getElementById('gycharts'))
-        // var fmColors= ['#FF0000', '#00fe3b']
-        // var fdoption= {
-        //   color: fmColors,
-        //   legend: {
-        //     icon:'roundRect',
-        //     data: ['预测值', '干预值'],
-        //     selectedMode:false,
-        //     padding: [0, 0, 0, 0]
-        //   },
-        //   tooltip: {
-        //     trigger: 'axis',
-        //     axisPointer: {
-        //       type: 'cross'
-        //     },
-        //   },
-        //
-        //   xAxis: {
-        //     type: 'category',
-        //     data:time,
-        //   },
-        //   yAxis: [
-        //     {
-        //       type: 'value',
-        //       position: 'left',
-        //       name: '功率',
-        //       min: 0,
-        //       max: this.capacity,
-        //       axisLabel: {
-        //         formatter: '{value} MW'
-        //       },
-        //     }
-        //   ],
-        //   series: [
-        //     {
-        //       name:'预测值',
-        //       data: activePower,
-        //       type: 'line',
-        //       symbol: 'none'
-        //     },
-        //     {
-        //       name:'干预值',
-        //       data: presetsPower,
-        //       type: 'line',
-        //       symbol: 'none',
-        //     },
-        //   ]
-        // }
 
         const option = {
           backgroundColor: 'transparent',
@@ -322,6 +385,28 @@ export default {
       else{
         this.$message.warning('数据不足96个点不能下发干预!')
       }
+    },
+    // 保存短期干预
+    bathDqPresets(){
+      if (this.tableData.length>0){
+        var dqTempDto = {
+          list: this.tableData,
+          stationCode:this.stationCode
+        }
+        this.$axios.post('/dqInterveneController/saveIntervene',dqTempDto).then((res) => {
+          if (res==undefined){
+            this.$message.success('保存失败')
+          }
+          else{
+            this.$message.success('保存成功')
+            this.getDqData()
+          }
+        }).catch((error) => {
+        })
+      }
+      else{
+        this.$message.warning('数据不足96个点不能下发干预!')
+      }
     }
   }
 }

+ 6 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/ElectricFieldController.java

@@ -204,4 +204,10 @@ public class ElectricFieldController {
             return R.failed(e.toString());
         }
     }
+
+    @GetMapping("/allData")
+    public R allData() {
+        List<ElectricField> electricFieldList = electricFieldService.list();
+        return R.ok(electricFieldList);
+    }
 }