浏览代码

菜单配置

xusl 9 月之前
父节点
当前提交
34b639faa0
共有 25 个文件被更改,包括 1208 次插入137 次删除
  1. 1 0
      ipp-ap/package.json
  2. 3 3
      ipp-ap/src/api/admin/menu.js
  3. 0 1
      ipp-ap/src/page/index/sidebar/index.vue
  4. 4 0
      ipp-ap/src/page/login/userlogin.vue
  5. 10 0
      ipp-ap/src/router/page/index.js
  6. 25 9
      ipp-ap/src/router/views/index.js
  7. 7 4
      ipp-ap/src/store/modules/user.js
  8. 133 27
      ipp-ap/src/views/idp/control/dqIntervene/index.vue
  9. 529 0
      ipp-ap/src/views/idp/system/sysUser/index.vue
  10. 34 0
      ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/SysMenu.java
  11. 15 67
      ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/SysUser.java
  12. 11 0
      ipp-common/ipp-common-security/src/main/java/com/jiayue/ipp/common/security/user/SysUserService.java
  13. 4 9
      ipp-common/ipp-common-security/src/main/java/com/jiayue/ipp/common/security/user/impl/JwtUserDetailsServiceImpl.java
  14. 2 5
      ipp-common/ipp-common-security/src/main/java/com/jiayue/ipp/common/security/user/impl/SysUserServiceImpl.java
  15. 73 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/SysMenuController.java
  16. 12 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/SysParameterController.java
  17. 119 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/SysUserController.java
  18. 37 4
      ipp-idp/src/main/java/com/jiayue/ipp/idp/job/SendJyDqData.java
  19. 17 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/SysMenuMapper.java
  20. 4 1
      ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/SysParameterMapper.java
  21. 19 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/SysMenuService.java
  22. 3 7
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/SysParameterService.java
  23. 129 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/SysMenuServiceImpl.java
  24. 16 0
      ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/SysParameterServiceImpl.java
  25. 1 0
      ipp-idp/src/main/resources/bootstrap.yml

+ 1 - 0
ipp-ap/package.json

@@ -10,6 +10,7 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "js-md5": "^0.7.3",
     "@jiaminghi/data-view": "^2.10.0",
     "@riophae/vue-treeselect": "^0.4.0",
     "@smallwei/avue": "2.6.18",

+ 3 - 3
ipp-ap/src/api/admin/menu.js

@@ -4,9 +4,9 @@ import request from '@/router/axios'
 
 export function getMenu(obj) {
   return request({
-    url: '/admin/menu/getMenu',
-    method: 'post',
-    data: obj
+    url: '/sysMenu/getMenufindByName',
+    method: 'get',
+    params: obj
   })
 }
 

+ 0 - 1
ipp-ap/src/page/index/sidebar/index.vue

@@ -33,7 +33,6 @@ export default {
     return {};
   },
   created() {
-
     this.$store.dispatch("GetMenu", {type: true, id: -1, applyId: applyId}).then(data => {
       if (data.length === 0) return;
       this.$router.$avueRouter.formatRoutes(data, true);

+ 4 - 0
ipp-ap/src/page/login/userlogin.vue

@@ -67,6 +67,8 @@
 <script>
 import { randomLenNum } from "@/util/util";
 import { mapGetters } from "vuex";
+import md5 from 'js-md5';
+
 export default {
   name: "userlogin",
   data () {
@@ -124,6 +126,8 @@ export default {
     handleLogin () {
       this.$refs.loginForm.validate(valid => {
         if (valid) {
+          var md5password = md5(this.loginForm.password)+'SYJY!';
+          this.loginForm.password = md5password;
           this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
             // console.log(this.$router.getRoutes())
             this.$router.push(this.tagWel.value );

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

@@ -156,6 +156,16 @@ export default [
     }],
   },
   {
+    path: '/idp/system/sysUser',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: '用户管理',
+      component: () =>
+        import ( /* webpackChunkName: "views" */ '@/views/idp/system/sysUser')
+    }],
+  },
+  {
     path: '/idp/system/sysparameter',
     component: Layout,
     children: [{

+ 25 - 9
ipp-ap/src/router/views/index.js

@@ -33,7 +33,7 @@ export default [
         children: [],
         hasChildren: false,
         icon: "",
-        id: "4080",
+        id: "4081",
         keepAlive: "0",
         label: "测风塔数据查询",
         menuType: "0",
@@ -48,7 +48,7 @@ export default [
         children: [],
         hasChildren: false,
         icon: "",
-        id: "4080",
+        id: "4082",
         keepAlive: "0",
         label: "风机数据查询",
         menuType: "0",
@@ -63,7 +63,7 @@ export default [
         children: [],
         hasChildren: false,
         icon: "",
-        id: "4080",
+        id: "4083",
         keepAlive: "0",
         label: "气象站数据查询",
         menuType: "0",
@@ -78,7 +78,7 @@ export default [
         children: [],
         hasChildren: false,
         icon: "",
-        id: "4080",
+        id: "4084",
         keepAlive: "0",
         label: "逆变器数据查询",
         menuType: "0",
@@ -93,7 +93,7 @@ export default [
       children: [],
       hasChildren: false,
       icon: "",
-      id: "4246",
+      id: "4085",
       keepAlive: "0",
       label: " 准确率查询",
       menuType: "0",
@@ -195,7 +195,7 @@ export default [
         children: [],
         hasChildren: false,
         icon: "icon-bangzhushouji",
-        id: "4173",
+        id: "4174",
         keepAlive: "0",
         label: "逆变器管理",
         menuType: "0",
@@ -210,7 +210,7 @@ export default [
         children: [],
         hasChildren: false,
         icon: "icon-bangzhushouji",
-        id: "4173",
+        id: "4175",
         keepAlive: "0",
         label: "人工干预",
         menuType: "0",
@@ -236,7 +236,8 @@ export default [
     permission: null,
     sort: 3,
     spread: false,
-    children: [{
+    children: [
+      {
       children: [],
       hasChildren: false,
       icon: "icon-bangzhushouji",
@@ -251,6 +252,21 @@ export default [
       sort: 8,
       spread: false
     },
+      {
+        children: [],
+        hasChildren: false,
+        icon: "icon-bangzhushouji",
+        id: "4136",
+        keepAlive: null,
+        label: "用户管理",
+        menuType: "0",
+        name: "用户管理",
+        parentId: "4059",
+        path: "/idp/system/sysUser/index",
+        permission: "",
+        sort: 8,
+        spread: false
+      },
     //   {
     //   children: [],
     //   hasChildren: false,
@@ -356,7 +372,7 @@ export default [
       children: [],
       hasChildren: false,
       icon: "",
-      id: "4065",
+      id: "4244",
       keepAlive: "0",
       label: "文件解析记录",
       menuType: "0",

+ 7 - 4
ipp-ap/src/store/modules/user.js

@@ -56,6 +56,7 @@ const user = {
   actions: {
     // 根据用户名登录
     LoginByUsername({commit}, userInfo) {
+      localStorage.setItem('username',userInfo.username)
       // const user = encryption({
       //   data: userInfo,
       //   key: 'thanks,jiayuecsc',
@@ -158,10 +159,12 @@ const user = {
       route.forEach(r => {
         r.id != undefined ? routes.push(r) : routes
       })
-
       return new Promise(resolve => {
-        // getMenu(MenuObj).then((res) => {
-        let menu = deepClone(routes)
+        let username =localStorage.getItem('username')
+        let params = {'username':username}
+        getMenu(params).then((res) => {
+        let menu = deepClone(res.data.data)
+          menu = Array.from(menu)
           menu.forEach(ele => {
             addPath(ele)
           })
@@ -169,7 +172,7 @@ const user = {
           commit('SET_MENU', {type, menu})
           resolve(menu)
         })
-      // })
+      })
     }
 
   },

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

@@ -145,54 +145,160 @@ 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]
+        // 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',
+          title: {
+            top: 20,
+            text: '人工干预',
+            textStyle: {
+              fontWeight: 'normal',
+              fontSize: 16,
+              color: '#040606'
+            },
+            left: '1%'
           },
           tooltip: {
             trigger: 'axis',
             axisPointer: {
-              type: 'cross'
-            },
+              animation:false,
+              lineStyle: {
+                color: '#040606'
+              }
+            }
           },
-
-          xAxis: {
-            type: 'category',
-            data:time,
+          legend: {
+            top: 20,
+            icon: 'rect',
+            itemWidth: 14,
+            itemHeight: 5,
+            itemGap: 13,
+            data: ['预测值', '干预值'],
+            right: '4%',
+            textStyle: {
+              fontSize: 12
+            }
           },
-          yAxis: [
+          dataZoom: [
             {
-              type: 'value',
-              position: 'left',
-              name: '功率',
-              min: 0,
-              max: this.capacity,
-              axisLabel: {
-                formatter: '{value} MW'
-              },
+              startValue: ''
+            },
+            {
+              type: 'inside'
+            }],
+          grid: {
+            top: 100,
+            left: '3%',
+            right: '2%',
+            bottom: '10%',
+            containLabel: true
+          },
+          xAxis: [{
+            type: 'category',
+            boundaryGap: true,
+            axisLine: {
+              lineStyle: {
+                color: '#040606'
+              }
+            },
+            data: time
+          }],
+          yAxis: [{
+            type: 'value',
+            name: '(MW)',
+            min: 0,
+            max: this.capacity,
+            axisTick: {
+              show: false
+            },
+            axisLine: {
+              lineStyle: {
+                color: '#040606'
+              }
+            },
+            axisLabel: {
+              interval:'auto',
+              textStyle: {
+                fontSize: 14
+              }
+            },
+            splitLine: {
+              lineStyle: {
+                color: '#57617B'
+              }
             }
-          ],
+          }],
           series: [
             {
               name:'预测值',
               data: activePower,
               type: 'line',
-              symbol: 'none'
+              symbol: 'none',
+              smooth: true,
+              showSymbol:false,
+              symbolSize: 5,
             },
             {
               name:'干预值',
               data: presetsPower,
               type: 'line',
               symbol: 'none',
+              smooth: true,
+              showSymbol:false,
+              symbolSize: 5,
             },
           ]
-        }
-        this.chart.setOption(fdoption,true)
+        };
+
+
+        this.chart.setOption(option,true)
         // window.onresize = this.chart.resize()
       })
     },

+ 529 - 0
ipp-ap/src/views/idp/system/sysUser/index.vue

@@ -0,0 +1,529 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+
+  <div class="app-container">
+    <div>
+      <el-card>
+        <div slot="header" class="clearfix">
+          <b><span>用户管理</span></b>
+        </div>
+
+        <div class="filter-container">
+          <el-button type="primary" size="small" style="round-clip: 10px" @click="insertEvent"
+                     :loading="loadButton">添加
+          </el-button>
+        </div>
+        <div style="padding-top: 10px">
+          <vxe-table
+            ref="xTable"
+            border
+            export-config
+            keep-source
+            auto-resize
+            resizable
+            :edit-rules="rules"
+            :loading="loading"
+            :data="tableData"
+            v-show="showTable"
+            show-overflow
+            highlight-current-row
+            align="center"
+          >
+            <!--:edit-config="{trigger: 'manual', mode: 'row',autoClear:false,showStatus: true,icon:'none'}"-->
+            <vxe-table-column title="用户基本信息" align="center">
+              <vxe-table-column
+                field="userName"
+                title="用户名"
+                width="7%"
+                align="center"
+              />
+              <!--:edit-render="{name: '$input', attrs: {type: 'text'}}"-->
+              <vxe-table-column
+                field="passWord"
+                title="密码"
+                width="12%"
+                align="center"
+              />
+              <!--:edit-render="{name: '$input', attrs: {type: 'text'}}"-->
+              <vxe-table-column
+                field="name"
+                title="姓名"
+                width="7%"
+                align="center"
+              />
+              <!--:edit-render="{name: '$input', attrs: {type: 'text'}}"-->
+              <vxe-table-column
+                field="status"
+                title="状态"
+                width="8%"
+                align="center"
+                :formatter="formatStatus"
+              />
+              <!--:edit-render="{name: '$select', options: userStatus }"-->
+              <vxe-table-column title="操作" width="15%" align="center">
+                <template v-slot="{ row }">
+                  <!--<template v-if="$refs.xTable.isActiveByRow(row)">-->
+                  <!--<el-button-->
+                  <!--type="success"-->
+                  <!--style="padding: 3px 4px 3px 4px;margin: 2px;"-->
+                  <!--size="mini"-->
+                  <!--icon="el-icon-edit"-->
+                  <!--@click="editSave(row)"-->
+                  <!--&gt;保存-->
+                  <!--</el-button>-->
+                  <!--<el-button-->
+                  <!--class="cancel-btn"-->
+                  <!--icon="el-icon-refresh"-->
+                  <!--type="warning"-->
+                  <!--style="padding: 3px 4px 3px 4px;margin: 2px;"-->
+                  <!--size="mini"-->
+                  <!--@click="cancelRowEvent(row)"-->
+                  <!--&gt;取消-->
+                  <!--</el-button>-->
+                  <!--</template>-->
+                  <!--<template v-else>-->
+                  <el-button
+                    :loading="loadButton"
+                    type="primary"
+                    style="padding: 3px 4px 3px 4px;margin: 2px;"
+                    size="mini "
+                    icon="el-icon-edit"
+                    @click="editRowEvent(row)"
+                  >编辑
+                  </el-button>
+                  <el-button
+                    :loading="loadButton"
+                    type="danger"
+                    style="padding: 3px 4px 3px 4px;margin: 2px;"
+                    size="mini "
+                    icon="el-icon-delete"
+                    @click="deleteRowEvent(row)"
+                  >删除
+                  </el-button>
+                  <!--</template>-->
+                </template>
+              </vxe-table-column>
+            </vxe-table-column>
+          </vxe-table>
+          <vxe-modal
+            ref="xModal"
+            v-model="showEdit"
+            :title="selectRow ? '编辑&保存' : '新增&保存'"
+            width="800"
+            resize
+            destroy-on-close
+          >
+            <el-form
+              :model="formData"
+              :rules="rules"
+              ref="ruleForm"
+              label-width="100px"
+              title-align="center"
+              title-width="100"
+            >
+              <el-form-item label="用户名" prop="userName" class="formItem" >
+                <el-input v-model="formData.userName" placeholder="填写用户名" clearable></el-input>
+              </el-form-item>
+              <el-form-item label="密码" prop="passWord" class="formItem" >
+                <el-input v-model="formData.passWord" placeholder="填写密码" clearable></el-input>
+              </el-form-item>
+              <el-form-item label="姓名" prop="name" class="formItem" >
+                <el-input v-model="formData.name" placeholder="填写姓名" clearable></el-input>
+              </el-form-item>
+              <el-form-item label="状态" prop="status" class="formItem" >
+                <el-select v-model="formData.status" placeholder="请选择状态" size="medium">
+                  <el-option
+                    v-for="item in userStatus"
+                    :key="item.value"
+                    :value="item.value"
+                    :label="item.label"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="配置菜单" prop="menu" class="formItem" >
+                  <el-cascader
+                    v-model="formData.menu"
+                    :options="options"
+                    :props="props"
+                    collapse-tags
+                  />
+              </el-form-item>
+              <el-form-item align="center" span="24">
+                <el-button status="primary" @click="editSave">保存</el-button>
+                <el-button @click="cancelRowEvent">取消</el-button>
+              </el-form-item>
+            </el-form>
+          </vxe-modal>
+        </div>
+      </el-card>
+    </div>
+
+    <!-- 删除提示框 -->
+    <el-dialog :visible.sync="delVisible" title="提示" width="300px" center>
+      <div class="del-dialog-cnt">删除不可恢复,是否确定删除?</div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="deleteCancel()">取 消</el-button>
+        <el-button type="primary" @click="deleteInfo()">确 定</el-button>
+      </span>
+    </el-dialog>
+
+  </div>
+
+</template>
+
+<script>
+
+  export default {
+    data() {
+      let strTopShiftReg = /(\~(?=\!)|\!(?=\@)|\@(?=\#)|\#(?=\$)|\$(?=\%)|\%(?=\^)|\^(?=\&)|\&(?=\*)|\*(?=\()|\((?=\))|\)(?=\_)|\_(?=\+)|\+(?=\~)){3}/
+      let strTopResverShiftReg = /(\+(?=\_)|\_(?=\))|\)(?=\()|\((?=\*)|\*(?=\&)|\&(?=\^)|\^(?=\%)|\%(?=\$)|\$(?=\#)|\#(?=\@)|\@(?=\!)|\!(?=\~)|\~(?=\+)){3}/
+      //字母连续规则
+      let strReg = /(a(?=b)|b(?=c)|c(?=d)|d(?=e)|e(?=f)|f(?=g)|g(?=h)|h(?=i)|i(?=j)|j(?=k)|k(?=l)|l(?=m)|m(?=n)|n(?=o)|o(?=p)|p(?=q)|q(?=r)|r(?=s)|s(?=t)|t(?=u)|u(?=v)|v(?=w)|w(?=x)|x(?=y)|y(?=z)|z(?=a)){3}[a-z]/i
+      let strResverReg = /(a(?=z)|z(?=y)|y(?=x)|x(?=w)|w(?=v)|v(?=u)|u(?=t)|t(?=s)|s(?=r)|r(?=q)|q(?=p)|p(?=o)|o(?=n)|n(?=m)|m(?=l)|l(?=k)|k(?=j)|j(?=i)|i(?=h)|h(?=g)|g(?=f)|f(?=e)|e(?=d)|d(?=c)|c(?=b)|b(?=a)){3}[a-z]/i
+      //数字连续规则
+      let numReg = /(\`(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)|0(?=\-)|\-(?=\=)|\=(?=\`)){3}/
+      let numResverReg = /(\=(?=\-)|\-(?=0)|0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=\`)|\`(?=\=)){3}/
+      //键盘字母横向连续规则
+      let keyboardHorizontalReg = /(q(?=w)|w(?=e)|e(?=r)|r(?=t)|t(?=y)|y(?=u)|u(?=i)|i(?=o)|o(?=p)|p(?=q)|a(?=s)|s(?=d)|d(?=f)|f(?=g)|g(?=h)|h(?=j)|j(?=k)|k(?=l)|l(?=a)|z(?=x)|x(?=c)|c(?=v)|v(?=b)|b(?=n)|n(?=m)|m(?=z)){3}[a-z]/i
+      let keyboardHorizontalResverReg = /(p(?=o)|o(?=i)|i(?=u)|u(?=y)|y(?=t)|t(?=r)|r(?=e)|e(?=w)|w(?=q)|q(?=p)|l(?=k)|k(?=j)|j(?=h)|h(?=g)|g(?=f)|f(?=d)|d(?=s)|s(?=a)|a(?=l)|m(?=n)|n(?=b)|b(?=v)|v(?=c)|c(?=x)|x(?=z)|z(?=m)){3}[a-z]/i
+      //多个相同字母、数字规则
+      let sameReg = /([0-9a-zA-Z])\1{3}/
+      let keyboardSlopeArr = ["1qaz", "2wsx", "3edc", "4rfv", "5tgb", "6yhn", "7ujm", "8ik,", "9ol.", "0p;/", "/;p0", ".lo9", ",ki8", "mju7", "nhy6", "bgt5", "vfr4", "cde3", "xsw2", "zaq1", "4esz", "5rdx", "6tfc", "7ygv", "8uhb", "9ijn", "0okm", "-pl,", "=[;.", ".;[=", ",lp-", "mko0", "nji9", "bhu8", "vgy7", "cft6", "xdr5", "zse4"]
+      let keyboardSlopeShiftArr = ["!qaz", "@wsx", "#edc","$rfv", "%tgb", "^yhn", "&ujm", "*ik<", "(ol>", ")p:?", "?:p)", ">lo(", "<ki*", "mju&", "nhy^", "bgt%", "vfr$", "cde#", "xsw@", "zaq!", "$esz", "%rdx", "^tfc", "&ygv", "*uhb", "(ijn", ")okm", "_pl<", "+{:>", ">:{+", "<lp_", "mko)", "nji(", "bhu*", "vgy&", "cft^", "xdr%", "zse$"]
+      const checkName = ({rule, value, callback}) => {
+        var userName = this.formData.userName
+        var s6 = this.tableDatas
+        if (userName == null || userName === '') {
+          return Promise.reject(new Error('请填写用户名'))
+        }
+        for (let i = 0; i < s6.length; i++) {
+          if (this.id == '' || this.id == undefined) {
+            // 新增
+            if ((userName == s6[i].userName)) {
+              return Promise.reject(new Error('用户名不能重复'))
+            }
+          } else {
+            // 修改
+            if (this.id != s6[i].id) {
+              if ((userName == s6[i].userName)) {
+                return Promise.reject(new Error('用户名不能重复'))
+              }
+            }
+          }
+        }
+        return Promise.resolve()
+      }
+      const checkPassword = (rule, value, callback) => {
+        var password = this.formData.passWord
+        if (this.fileUploadNodeShowSysValue==0){
+          if (sameReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有连续4位相同的数字或字母'))
+          } else if (strResverReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位连续的字母'))
+          } else if (strReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位键盘横向方向连续的字符'))
+          } else if (numReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位键盘横向方向连续的字符'))
+          } else if (numResverReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位连续的数字'))
+          } else if (keyboardHorizontalReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位键盘横向方向连续的字母'))
+          } else if (keyboardHorizontalResverReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位键盘横向方向连续的字母'))
+          } else if (keyboardSlopeArr.some(v => password.toLowerCase().indexOf(v) > -1)) {
+            return Promise.reject(new Error('密码不能含有4位键盘斜向方向连续的字符'))
+          }else if (keyboardSlopeShiftArr.some(v => password.toLowerCase().indexOf(v) > -1)) {
+            return Promise.reject(new Error('密码不能含有4位键盘斜向方向连续的字符'))
+          }else if (strTopShiftReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位键盘横向方向连续的字符'))
+          }else if (strTopResverShiftReg.test(password)) {
+            return Promise.reject(new Error('密码不能含有4位键盘横向方向连续的字符'))
+          }
+        }
+        return Promise.resolve()
+      }
+      return {
+        fileUploadNodeShowSysValue: '1',
+        id: '',
+        tableDatas: [],
+        elStations: [],
+        elStation: '',
+        total: 0,
+        pageSize: 5,
+        currentPage: 1,
+        loadButton: false,
+        rowId: '',
+        showTable: true,
+        tableData: [],
+        delVisible: false,
+        loading: false,
+        // 是否为编辑
+        isEdit: false,
+        pvRotationMode: [],
+        userStatus: [{value: "0", label: "正常"}, {value: "2", label: "禁用"}],
+        // 表单验证规则
+        rules: {
+          userName: [
+            {required: true, validator: checkName},
+            {message: '输入过长', max: 15}
+          ],
+          passWord: [
+            {required: true, message: '请填写密码'},
+            {
+              pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{7,10}/,
+              message: '由8位数字、字母大小写及特殊符号组成'
+            }
+          ],
+          name:[{required: true, message: '请填写姓名', trigger: 'blur'}],
+          status:[{required: true, message: '请选择状态', trigger: 'change'}]
+        },
+        formData:{},
+        showEdit:false,
+        selectRow:false,
+        props: { multiple: true },
+        options:[],
+        childrenOption:[]
+      }
+    },
+    created() {
+      this.getParameterBySysKey()
+      this.getAll()
+      this.getAllMenu()
+    },
+
+    methods: {
+      getParameterBySysKey(){
+        var queryParams ={
+          sysKey:'FILE_UPLOAD_NODE_SHOW'
+        }
+
+        this.$axios.get('/sysparameter/getParameterBySysKey',{params: queryParams}).then(res => {
+          this.fileUploadNodeShowSysValue = res.data.sysValue
+        })
+      },
+      getAll() {
+        this.loading = true
+        this.$axios.get('/sysUser/').then((res) => {
+          this.tableData = res.data.data
+          if (res.data.data == null) {
+            this.showTable = false
+          } else {
+            this.showTable = true
+          }
+          this.loading = false
+        }).catch((error) => {
+          this.$message.error('获取用户信息出错' + error)
+        })
+      },
+      getAllMenu(){
+        this.$axios.get('/sysMenu').then(res => {
+          var data = res.data.data
+          var option = []
+
+          for(var i=0;i<data.length;i++){
+            var children = []
+            if(data[i].children.length>0){
+              for (var j =0;j<data[i].children.length;j++) {
+                if(data[i].children[j].id ==1){
+                  children.push({
+                    id: data[i].children[j].id,
+                    fId:58,
+                    value:data[i].children[j].id,
+                    label: data[i].children[j].title,
+                    path: data[i].children[j].path,
+                    itemPath: data[i].children[j].itemPath,
+                    url: data[i].children[j].url
+                  })
+                  this.childrenOption.push({
+                    id: data[i].children[j].id,
+                    fId:58,
+                    value:data[i].children[j].id,
+                    label: data[i].children[j].title,
+                    path: data[i].children[j].path,
+                    itemPath: data[i].children[j].itemPath,
+                    url: data[i].children[j].url
+                  })
+                }else{
+                  children.push({
+                    id: data[i].children[j].id,
+                    fId:data[i].id,
+                    value:data[i].children[j].id,
+                    label: data[i].children[j].title,
+                    path: data[i].children[j].path,
+                    itemPath: data[i].children[j].itemPath,
+                    url: data[i].children[j].url
+                  })
+                  this.childrenOption.push({
+                    id: data[i].children[j].id,
+                    fId:data[i].id,
+                    value:data[i].children[j].id,
+                    label: data[i].children[j].title,
+                    path: data[i].children[j].path,
+                    itemPath: data[i].children[j].itemPath,
+                    url: data[i].children[j].url
+                  })
+                }
+              }
+            }
+
+            option.push({
+              id: data[i].id,
+              value:data[i].id,
+              label: data[i].title,
+              itemPath: data[i].itemPath,
+              url: data[i].url,
+              children:children
+            })
+          }
+          this.options = option
+          // console.log(this.childrenOption)
+        })
+      },
+      insertEvent(row) {
+        this.id = ''
+        this.showTable = true
+        this.isEdit = false
+        // this.loadButton = true
+        this.showEdit = true
+        this.selectRow = false
+        this.formData={}
+        // this.$refs.xTable.insert().then(({row}) => this.$refs.xTable.setActiveRow(row))
+      },
+      editRowEvent(row) {
+        this.id = row.id
+        this.isEdit = true
+        // this.loadButton = true
+        this.showEdit = true
+        this.selectRow = true
+        this.formData = row
+        this.formData.menu = this.formatMenu(this.formData.menu)
+        // this.$refs.xTable.setActiveRow(row)
+      },
+      editSave() {
+        this.$refs["ruleForm"].validate(valid => {
+          if (valid) {
+            var menu = []
+            if(this.formData.menu != null){
+              for(var i=0;i<this.formData.menu.length;i++){
+                if(menu.find(value=>value == this.formData.menu[i][0])){
+                  menu.push(this.formData.menu[i][1])
+                }else{
+                  menu.push(this.formData.menu[i][0])
+                  menu.push(this.formData.menu[i][1])
+                }
+              }
+              // console.log(this.formData.menu)
+              this.formData.menu = menu.toString()
+            }else{
+              this.formData.menu = ''
+            }
+            alert(this.isEdit)
+            if (this.isEdit) {
+              console.log(this.formData)
+              // 编辑保存
+              this.$axios.put('/sysUser/', this.formData).then(res => {
+                this.$message({
+                  message: '修改成功',
+                  type: 'success'
+                })
+                this.loadButton = false
+                this.getAll()
+              }).catch((error) => {
+                // this.$refs.xTable.setActiveRow(row)
+                this.$message.error('修改用户出错' + error)
+              })
+            } else {
+              // 新增保存
+              this.formData.stationCode = this.elStation
+              this.$axios.post('/sysUser/', this.formData).then(res => {
+                this.$message({
+                  message: '保存成功',
+                  type: 'success'
+                })
+                this.loadButton = false
+                this.getAll()
+              }).catch((error) => {
+                this.$message.error('修改用户出错' + error)
+              })
+            }
+            this.showEdit = false
+            this.selectRow = false
+          }
+        })
+
+      },
+      cancelRowEvent(row) {
+        // const xTable = this.$refs.xTable
+        this.$refs.xModal.close()
+        this.loadButton = false
+        // xTable.clearActived().then(() => {
+        //   // 还原行数据
+        //   if (this.isEdit) {
+        //     // 编辑
+        //     xTable.revertData(row)
+        //   } else {
+        //     // 新增
+        //     xTable.remove(row)
+        //   }
+        //   this.loadButton = false
+        // })
+      },
+      // 删除场站信息
+      deleteRowEvent(row) {
+        this.rowId = row.id
+        this.delVisible = true
+      },
+      deleteCancel() {
+        this.delVisible = false
+      },
+      deleteInfo() {
+        this.$axios.delete('/sysUser/' + this.rowId).then(res => {
+          this.$message({
+            message: '删除成功',
+            type: 'success'
+          })
+          this.delVisible = false
+          this.getAll()
+        }).catch((error) => {
+          this.$message.error('删除用户出错' + error)
+        })
+      },
+      formatStatus({ cellValue }){
+        const item = this.userStatus.find(item => item.value === cellValue)
+        return item ? item.label : ''
+      },
+      formatMenu(menu){
+        if(menu === null){
+          return null
+        }else{
+          var data = menu.split(",")
+          var menuArr = []
+          for (var i=0;i<data.length;i++){
+            for(var j=0;j<this.childrenOption.length;j++){
+              if(this.childrenOption[j].id == data[i]){
+                menuArr.push([this.childrenOption[j].fId,this.childrenOption[j].id])
+              }
+            }
+          }
+          return menuArr
+        }
+
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+  .my_table_insert .vxe-body--row.is--new {
+    background-color: #f1fdf1;
+  }
+  .formItem{
+    width: 45%;
+    display: inline-block;
+  }
+  /*/deep/*/
+  /*.vxe-input--inner{*/
+  /*  width: auto;*/
+  /*}*/
+
+</style>

+ 34 - 0
ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/SysMenu.java

@@ -0,0 +1,34 @@
+package com.jiayue.ipp.common.data.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.core.annotation.Order;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+/**
+ * 菜单实体
+ *
+ * @author bizy
+ * @version 1.0
+ * @since 2018/10/22 11:29
+ */
+@Data
+@TableName("t_sys_menu")
+@ApiModel(value = "t_sys_menu")
+public class SysMenu implements Serializable {
+    @Id
+    @Order(1)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+    private String icon;
+    private String title;
+    private String path;
+    private String parentId;
+    private Integer sort;
+}

+ 15 - 67
ipp-common/ipp-common-data/src/main/java/com/jiayue/ipp/common/data/entity/SysUser.java

@@ -9,6 +9,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springframework.core.annotation.Order;
 
+import java.io.Serializable;
 import java.time.LocalDateTime;
 
 /**
@@ -18,80 +19,27 @@ import java.time.LocalDateTime;
  * @version: 1.0
  */
 @Data
-@TableName("sys_user")
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "sys_user")
-public class SysUser extends AbstractBaseEntity {
+@TableName("t_sys_user")
+@ApiModel(value = "t_sys_user")
+public class SysUser implements Serializable {
 
 	@TableId(type = IdType.AUTO)
-	@ApiModelProperty(value = "用户ID")
-	private Long userId;
+	private Integer id;
 
-	@ApiModelProperty(value = "用户名")
-	private String username;
+	private String userName;
 
-	@ApiModelProperty(value = "密码")
-	private String password;
+	private String passWord;
 
-	@ApiModelProperty(value = "姓名")
-	private String fullname;
+	private String name;
 
-	@ApiModelProperty(value = "用户类型")
-	private String userType;
+	private Integer pwdErrNum;
 
-	@ApiModelProperty(value = "密码最后一次修改时间")
-	private LocalDateTime pwdChangedTime;
-
-	@ApiModelProperty(value = "随机盐")
-	private String salt;
-
-	@ApiModelProperty(value = "锁定状态")
-	private String lockFlag;
-
-	@ApiModelProperty(value = "锁定原因")
-	private String lockedReason;
-
-	@ApiModelProperty(value = "头像")
-	private String avatar;
-
-	@ApiModelProperty(value = "性别")
-	private String sex;
-
-	@ApiModelProperty(value = "生日")
-	private String birthdate;
-
-	@ApiModelProperty(value = "电话号码")
-	private String phone;
-
-	@ApiModelProperty(value = "邮件地址")
-	private String email;
-
-	@ApiModelProperty(value = "微信号")
-	private String wechat;
-
-	@ApiModelProperty(value = "证件类型")
-	private String credentialsType;
-
-	@ApiModelProperty(value = "证件号码")
-	private String credentialsNumber;
-
-	@ApiModelProperty(value = "住址")
-	private String homeAddress;
-
-	@ApiModelProperty(value = "微信openid")
-	private String wxOpenid;
-
-	@ApiModelProperty(value = "小程序openid")
-	private String miniOpenid;
-
-	@ApiModelProperty(value = "企鹅openid")
-	private String qqOpenid;
-
-	@ApiModelProperty(value = "租户ID")
-	private Long tenantId;
-
-	@ApiModelProperty(value = "备注")
-	private String remark;
+	private Long lockTime;
+	/**
+	 * 状态,0正常、1锁定、2禁用
+	 */
+	private String status;
+	private String menu;
 
 }
 

+ 11 - 0
ipp-common/ipp-common-security/src/main/java/com/jiayue/ipp/common/security/user/SysUserService.java

@@ -3,9 +3,20 @@ package com.jiayue.ipp.common.security.user;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jiayue.ipp.common.data.entity.SysUser;
 
+import java.util.List;
+
 /**
  * @Author: tl
  * @Date: 2023/6/19 17:54
  */
 public interface SysUserService extends IService<SysUser> {
+    SysUser findByUserName(String username);
+
+
+    boolean saveUser(SysUser user);
+
+    List<SysUser> getAll();
+
+
+    void delete(String ids);
 }

+ 4 - 9
ipp-common/ipp-common-security/src/main/java/com/jiayue/ipp/common/security/user/impl/JwtUserDetailsServiceImpl.java

@@ -45,21 +45,16 @@ public class JwtUserDetailsServiceImpl implements UserDetailsService {
         if(sysUser == null){
             password = passwordEncoder.encode("sda21dsad13214sda22dsa@#$#$%!ds1d1");
         }else {
-            password = passwordEncoder.encode(sysUser.getPassword());
-            if (sysUser.getLockFlag().equals("1")) {
+            password = passwordEncoder.encode(sysUser.getPassWord());
+            if (sysUser.getStatus().equals("1") && (System.currentTimeMillis() - sysUser.getLockTime()) < 300000) {
                 password = passwordEncoder.encode("sda21dsad13214sda22dsa@#$#$%!ds1d1");
             }
 
-            if (sysUser.getLockFlag().equals("2")) {
+            if (sysUser.getStatus().equals("2")) {
                 password = passwordEncoder.encode("sda21dsad13214sda22dsa@#$#$%!ds1d1");
             }
         }
-
-
-
-
         user = new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList(username.toUpperCase()));
         return user;
     }
-
-}
+}

+ 2 - 5
ipp-common/ipp-common-security/src/main/java/com/jiayue/ipp/common/security/user/impl/SysUserServiceImpl.java

@@ -21,11 +21,8 @@ import java.util.List;
 @Slf4j
 public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
 
-
-
-
     public SysUser findByUserName(String username) {
-        SysUser sysUser = getOne(Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getUsername,username));
+        SysUser sysUser = getOne(Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getUserName,username));
 
         return sysUser;
     }
@@ -36,7 +33,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     public List<SysUser> getAll() {
-        return list();
+        return this.list();
     }
 
 

+ 73 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/SysMenuController.java

@@ -0,0 +1,73 @@
+package com.jiayue.ipp.idp.controller;
+
+import com.jiayue.ipfcst.common.core.web.vo.ResponseVO;
+import com.jiayue.ipp.common.data.entity.SysMenu;
+import com.jiayue.ipp.idp.service.SysMenuService;
+import com.jiayue.ipp.idp.util.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 菜单
+ *
+ * @author zy
+ * @version 3.0
+ * @since 2020/6/28 10:12
+ */
+@RestController
+@Slf4j
+@RequestMapping(value = "sysMenu")
+public class SysMenuController {
+
+    private final SysMenuService sysMenuService;
+
+    @Autowired
+    public SysMenuController(SysMenuService sysMenuService) {
+        this.sysMenuService = sysMenuService;
+    }
+
+    /**
+     * 获取菜单信息
+     *
+     * @return 菜单信息
+     */
+
+    @GetMapping()
+    public R getAll() {
+
+        try {
+            List<SysMenu> menu = this.sysMenuService.getAllMenu();
+            return R.ok(menu);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(" 获取所有用户异常");
+            return R.failed(null);
+        }
+
+    }
+  /**
+   * 获取菜单信息
+   *
+   * @return 菜单信息
+   */
+
+  @GetMapping("/getMenufindByName")
+  public R getMenufindByName(String username) {
+
+    try {
+      List<SysMenu> menu = this.sysMenuService.getMenuFindByUserName(username);
+      return R.ok(menu);
+    } catch (Exception e) {
+      e.printStackTrace();
+      log.error(" 获取所有用户异常");
+      return R.failed(null);
+    }
+
+  }
+}

+ 12 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/SysParameterController.java

@@ -2,12 +2,14 @@ package com.jiayue.ipp.idp.controller;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jiayue.ipfcst.common.core.web.vo.ResponseVO;
 import com.jiayue.ipp.common.data.entity.SysParameter;
 import com.jiayue.ipp.idp.service.SysParameterService;
 import com.jiayue.ipp.idp.util.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -94,5 +96,15 @@ public class SysParameterController {
     public R removeById(@PathVariable String id) {
         return R.ok(sysParameterService.removeById(id));
     }
+    /**
+     * 根据参数标识获取系统参数
+     *
+     * @param sysKey
+     * @return 执行结果
+     */
 
+    @GetMapping(value = "/getParameterBySysKey")
+    public R getParameterBySysKey(String sysKey) {
+        return R.ok(sysParameterService.getParameterBySysKey(sysKey));
+    }
 }

+ 119 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/SysUserController.java

@@ -0,0 +1,119 @@
+package com.jiayue.ipp.idp.controller;
+
+import com.jiayue.ipp.common.data.entity.SysUser;
+import com.jiayue.ipp.common.security.user.impl.SysUserServiceImpl;
+import com.jiayue.ipp.idp.util.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.DigestUtils;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * 用户信息restful接口
+ *
+ * @author bizy
+ * @version 3.0
+ * @since 2020/6/28 10:12
+ */
+@RestController
+@Slf4j
+public class SysUserController {
+
+
+    @Autowired
+    SysUserServiceImpl sysUserServiceImpl;
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+
+    @GetMapping(value = "sysUser/")
+    public R getAll() {
+        try {
+            List<SysUser> ps = sysUserServiceImpl.getAll();
+            return R.ok(ps);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(" 获取所有用户异常");
+            return R.failed(null);
+        }
+
+    }
+
+    /**
+     * 保存用户信息
+     *
+     * @param sysUser 参数
+     * @return 执行结果
+     */
+    @PostMapping(value = "sysUser/")
+    public R save(@RequestBody SysUser sysUser) {
+        try {
+          // 用户名密码md5
+          sysUser = md5User(sysUser);
+            sysUserServiceImpl.save(sysUser);
+          return R.ok("保存成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(" 保存用户信息异常");
+            return R.failed(" 保存用户信息异常");
+        }
+
+    }
+
+    /**
+     * 更新用户信息
+     *
+     * @param sysUser 参数
+     * @return 执行结果
+     */
+    @PutMapping(value = "sysUser/")
+    public R update(@RequestBody SysUser sysUser) {
+        try {
+          // 用户名密码md5
+          sysUser = md5User(sysUser);
+            sysUserServiceImpl.updateById(sysUser);
+          return R.ok("修改成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(" 更新用户信息异常");
+            return R.failed();
+        }
+    }
+
+    /**
+     * 删除用户信息
+     *
+     * @param ids 删除id
+     * @return 执行结果
+     */
+    @DeleteMapping(value = "sysUser/{ids}")
+    public R delete(@PathVariable("ids") String ids) {
+        try {
+            sysUserServiceImpl.delete(ids);
+            return R.ok("删除成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(" 删除用户信息异常");
+            return R.failed("删除用户信息异常");
+        }
+
+    }
+
+  /**
+   * 用户名密码加密
+   * @param sysUser
+   * @return
+   */
+    public SysUser md5User(SysUser sysUser){
+      String userPassWord = sysUser.getPassWord();
+      String passwordMD5;
+      passwordMD5 = DigestUtils.md5DigestAsHex(userPassWord.getBytes())+"SYJY!";
+      sysUser.setPassWord(passwordMD5);
+      return sysUser;
+    }
+
+}

+ 37 - 4
ipp-idp/src/main/java/com/jiayue/ipp/idp/job/SendJyDqData.java

@@ -8,10 +8,13 @@ import cn.hutool.extra.template.TemplateConfig;
 import cn.hutool.extra.template.TemplateEngine;
 import cn.hutool.extra.template.TemplateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.jiayue.ipfcst.common.core.util.DateMomentUtil;
+import com.jiayue.ipp.common.data.entity.DqIntervene;
 import com.jiayue.ipp.common.data.entity.ForecastPowerShortTerm;
 import com.jiayue.ipp.common.data.entity.an.ParsingChannel;
 import com.jiayue.ipp.idp.dto.ForecastData;
+import com.jiayue.ipp.idp.service.DqInterveneService;
 import com.jiayue.ipp.idp.service.ForecastPowerShortTermService;
 import com.jiayue.ipp.idp.service.an.ParsingChannelService;
 import com.jiayue.ipp.idp.util.FileUtil;
@@ -32,6 +35,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 下发嘉越短期数据
@@ -52,6 +56,8 @@ public class SendJyDqData {
     ForecastPowerShortTermService forecastPowerShortTermService;
     @Autowired
     VelocityEngine velocityEngine;
+    @Autowired
+    DqInterveneService dqInterveneService;
 
     @Scheduled(cron = "0 0/1 * * * *")
     public void sendJyDqData() {
@@ -84,12 +90,39 @@ public class SendJyDqData {
                 queryWrapper.between(ForecastPowerShortTerm::getForecastTime, new Date(startTime), new Date(endTime));
 
                 List<ForecastPowerShortTerm> forecastPowerShortTermList = this.forecastPowerShortTermService.list(queryWrapper);
-                System.out.println(stationCode+"获取实时短期数据多少条:"+forecastPowerShortTermList.size());
+                Map<Long, ForecastPowerShortTerm> forecastPowerShortMap = forecastPowerShortTermList.stream()
+                        .collect(Collectors.toMap(
+                                myObject -> myObject.getForecastTime().getTime(), // keyMapper,将Date转换为long
+                                myObject -> myObject, // valueMapper,保持原对象
+                                (existing, replacement) -> existing // mergeFunction,处理重复key的情况,这里简单地保留现有的value
+                        ));
+
+                // 人工干预
+                QueryWrapper<DqIntervene> dqInterveneQueryWrapper = new QueryWrapper<>();
+                dqInterveneQueryWrapper.between("forecast_time", new Date(startTime), new Date(endTime));
+                dqInterveneQueryWrapper.eq("station_code",stationCode);
+                List<DqIntervene> dqInterveneList = dqInterveneService.list(dqInterveneQueryWrapper);
+                Map<Long, DqIntervene> dqInterveneMap = dqInterveneList.stream()
+                        .collect(Collectors.toMap(
+                                myObject -> myObject.getForecastTime().getTime(), // keyMapper,将Date转换为long
+                                myObject -> myObject, // valueMapper,保持原对象
+                                (existing, replacement) -> existing // mergeFunction,处理重复key的情况,这里简单地保留现有的value
+                        ));
+
                 List<ForecastData> vList = new ArrayList<>();
-                for (ForecastPowerShortTerm forecastPowerShortTerm:forecastPowerShortTermList){
+
+                for (Long tempTime = startTime.longValue(); tempTime <= endTime.longValue(); tempTime = tempTime + 15 * 60 * 1000L) {
                     ForecastData forecastData = new ForecastData();
-                    forecastData.setTime(DateFormatUtils.format(forecastPowerShortTerm.getForecastTime(), "yyyy-MM-dd HH:mm:ss"));
-                    forecastData.setPower(forecastPowerShortTerm.getFpValue().toString());
+                    forecastData.setTime(DateFormatUtils.format(tempTime, "yyyy-MM-dd HH:mm:ss"));
+                    if (dqInterveneMap.get(tempTime)!=null){
+                        forecastData.setPower(dqInterveneMap.get(tempTime).getActivePower().toString());
+                    }
+                    else if (forecastPowerShortMap.get(tempTime)!=null){
+                        forecastData.setPower(forecastPowerShortMap.get(tempTime).getFpValue().toString());
+                    }
+                    else{
+                        forecastData.setPower("");
+                    }
                     vList.add(forecastData);
                 }
 

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

+ 4 - 1
ipp-idp/src/main/java/com/jiayue/ipp/idp/mapper/SysParameterMapper.java

@@ -3,6 +3,8 @@ package com.jiayue.ipp.idp.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jiayue.ipp.common.data.entity.SysParameter;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * idp_sys_parameter
@@ -12,5 +14,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface SysParameterMapper extends BaseMapper<SysParameter> {
-
+    @Select("SELECT t.* FROM idp_sys_parameter t WHERE t.sys_key=#{sysKey}")
+    public SysParameter findBySysKeyEquals(@Param("sysKey") String sysKey);
 }

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

@@ -0,0 +1,19 @@
+package com.jiayue.ipp.idp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.ipp.common.data.entity.SysMenu;
+import java.util.List;
+
+
+/**
+ * 菜单业务层
+ *
+ * @author zy
+ * @version 1.0
+ * @since 2019/8/7 9:32
+ */
+
+public interface SysMenuService extends IService<SysMenu> {
+    List<SysMenu> getAllMenu();
+   List<SysMenu> getMenuFindByUserName(String username);
+}

+ 3 - 7
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/SysParameterService.java

@@ -1,6 +1,5 @@
 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.SysParameter;
 
@@ -12,11 +11,8 @@ import com.jiayue.ipp.common.data.entity.SysParameter;
  */
 public interface SysParameterService extends IService<SysParameter> {
 
-    /**
-     * @param accuracy_cdq_howlongago 参数
-     * @param s                       默认值
-     * @param stationCode             场站编号
-     * @return
-     */
+
     String getSysParameterAndStationCode(String sysKey, String defaultValue, String stationCode);
+
+    SysParameter getParameterBySysKey(final String sysKey);
 }

+ 129 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/SysMenuServiceImpl.java

@@ -0,0 +1,129 @@
+package com.jiayue.ipp.idp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.ipp.common.data.entity.SysMenu;
+import com.jiayue.ipp.common.data.entity.SysUser;
+import com.jiayue.ipp.common.security.user.impl.SysUserServiceImpl;
+import com.jiayue.ipp.idp.mapper.SysMenuMapper;
+import com.jiayue.ipp.idp.service.SysMenuService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 菜单业务层
+ *
+ * @author zy
+ * @version 1.0
+ * @since 2019/8/7 9:32
+ */
+@Service
+@Slf4j
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
+  @Autowired
+  SysMenuMapper sysMenuMapper;
+  @Autowired
+  SysUserServiceImpl sysUserServiceImpl;
+
+
+  public List<SysMenu> getAllMenu(){
+    List list = new ArrayList();
+    try {
+      List<SysMenu> allSysMenu = sysMenuMapper.selectList(null);
+      /*根据path为空找出找出父菜单*/
+      List<SysMenu> fatherSysMenu = allSysMenu.stream().filter(w -> w.getParentId().equals("-1")).collect(Collectors.toList());
+      for (SysMenu sysMenu :fatherSysMenu){
+        List itemSysMenu = new ArrayList();
+        Map map = new HashMap();
+//        if(sysMenu.getId() != 37){
+          /*根据父path与子itemPath相同找出父的子菜单*/
+          for(SysMenu sysMenu1 :allSysMenu){
+            if(sysMenu.getId().longValue()==Long.parseLong(sysMenu1.getParentId())){
+              itemSysMenu.add(sysMenu1);
+            }
+          }
+//        }
+        map.put("id",sysMenu.getId());
+        map.put("itemPath",sysMenu.getPath());
+        map.put("title",sysMenu.getTitle());
+        map.put("children",itemSysMenu);
+        map.put("url",sysMenu.getPath());
+        list.add(map);
+      }
+    }catch (Exception e){
+      log.error("菜单查询异常:" + e);
+    }
+    return list;
+  }
+  public List<SysMenu> getMenuFindByUserName(String username){
+    List list = new ArrayList();
+    try {
+      SysUser user = sysUserServiceImpl.findByUserName(username);
+      if(user.getMenu() != null && !user.getMenu().equals("")){
+        String[] menuId = user.getMenu().split(",");
+        /*根据9000/9001过滤出菜单*/
+        List<SysMenu> allMenuList = sysMenuMapper.selectList(null);
+        List<SysMenu> sysMenuList = new ArrayList<>();
+        for (SysMenu sysMenu:allMenuList){
+          for (String str:menuId){
+            if(sysMenu.getId().toString().equals(str)){
+              sysMenuList.add(sysMenu);
+            }
+          }
+        }
+
+        /*根据path为空找出9000/90001找出父菜单*/
+        List<SysMenu> sysFatherMenuList = sysMenuList.stream().filter(w -> w.getParentId().equals("-1")).collect(Collectors.toList());
+        sysFatherMenuList.sort(Comparator.comparing(SysMenu::getSort));
+        /*根据path不为空找出9000/90001找出子菜单*/
+        List<SysMenu> sysChildrenMenuList = sysMenuList.stream().filter(w -> !w.getParentId().equals("-1")).collect(Collectors.toList());
+        sysChildrenMenuList.sort(Comparator.comparing(SysMenu::getSort));
+        /*根据父path整合父子菜单*/
+        for(SysMenu father:sysFatherMenuList){
+          List children = new ArrayList();
+          for(SysMenu children1:sysChildrenMenuList){
+            if(children1.getParentId().equals(father.getId().toString())){
+              Map cmap = new HashMap();
+              cmap.put("name", children1.getTitle());
+              cmap.put("label", children1.getTitle());
+              cmap.put("path",children1.getPath());
+              cmap.put("hasChildren",false);
+              List list2 = new ArrayList();
+              cmap.put("children",list2);
+              cmap.put("id",children1.getId().toString());
+              cmap.put("parentId",children1.getParentId());
+              cmap.put("icon","");
+              cmap.put("spread",false);
+              cmap.put("menuType","0");
+              cmap.put("keepAlive","0");
+              cmap.put("permission","");
+              cmap.put("sort",children1.getSort());
+              children.add(cmap);
+            }
+          }
+          Map fmap = new HashMap();
+          fmap.put("name", father.getTitle());
+          fmap.put("label", father.getTitle());
+          fmap.put("path",father.getPath());
+          fmap.put("hasChildren",true);
+          fmap.put("children",children);
+          fmap.put("id",father.getId().toString());
+          fmap.put("parentId","-1");
+          fmap.put("icon",father.getIcon());
+          fmap.put("spread",false);
+          fmap.put("menuType","0");
+          fmap.put("keepAlive","0");
+          fmap.put("permission","");
+          fmap.put("sort",father.getSort());
+          list.add(fmap);
+        }
+      }
+    }catch (Exception e){
+      log.error("根据用户名查询菜单异常:" + e);
+    }
+    return list;
+  }
+}

+ 16 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/service/impl/SysParameterServiceImpl.java

@@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jiayue.ipp.common.data.entity.SysParameter;
 import com.jiayue.ipp.idp.mapper.SysParameterMapper;
 import com.jiayue.ipp.idp.service.SysParameterService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -18,6 +21,9 @@ import java.util.List;
 @Service
 public class SysParameterServiceImpl extends ServiceImpl<SysParameterMapper, SysParameter> implements SysParameterService {
 
+    @Autowired
+    SysParameterMapper sysParameterMapper;
+
     @Override
     public String getSysParameterAndStationCode(String sysKey, String defaultValue, String stationCode) {
         QueryWrapper<SysParameter> wrapper = new QueryWrapper<>();
@@ -37,4 +43,14 @@ public class SysParameterServiceImpl extends ServiceImpl<SysParameterMapper, Sys
 
     }
 
+    /**
+     * 查询参数值
+     *
+     * @param sysKey 参数标识
+     * @return 参数
+     */
+    public SysParameter getParameterBySysKey(final String sysKey) {
+        SysParameter sysParameter = sysParameterMapper.findBySysKeyEquals(sysKey);
+        return sysParameter;
+    }
 }

+ 1 - 0
ipp-idp/src/main/resources/bootstrap.yml

@@ -36,3 +36,4 @@ calculate:
     enabled: true
     version: 0.0.1-SNAPSHOT
 
+dqForecastDays: 10