Sfoglia il codice sorgente

1.调整项目进度情况表格格式
2.新增上传拐点坐标呵风机坐标数据
3.删除sql中的数据库名称

wangt 1 anno fa
parent
commit
b6e159ed4c

+ 124 - 0
neim-biz/src/main/java/com/jiayue/biz/controller/HomePageController.java

@@ -1,7 +1,13 @@
 package com.jiayue.biz.controller;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
+import com.jiayue.biz.domain.Coordinates;
+import com.jiayue.biz.domain.FanTower;
+import com.jiayue.biz.domain.ProjectInfo;
 import com.jiayue.biz.domain.ProjectProgressInfo;
 import com.jiayue.biz.service.HomePageService;
+import com.jiayue.biz.service.ProjectInfoService;
 import com.jiayue.biz.service.ProjectProgressInfoService;
 import com.jiayue.biz.util.CommonUtil;
 import com.jiayue.common.core.controller.BaseController;
@@ -19,7 +25,11 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
+import java.util.UUID;
 
 
 /**
@@ -37,6 +47,8 @@ public class HomePageController extends BaseController {
     private final HomePageService homePageService;
     private final ProjectProgressInfoService projectProgressInfoService;
 
+    private final ProjectInfoService projectInfoService;
+
     /**
      * 首页风速曲线
      */
@@ -264,6 +276,118 @@ public class HomePageController extends BaseController {
         return success("200");
     }
 
+    /**
+     * 更新项目拐点坐标和风机坐标数据
+     *
+     * @param file
+     * @param projectNo
+     * @return
+     */
+    @PostMapping("/uploadProjectFile")
+    public AjaxResult uploadProjectFile(@RequestParam("file") MultipartFile file, @RequestParam("id") String projectNo) {
+
+        try {
+            // 得到上传文件后缀
+            String originalName = file.getOriginalFilename();
+            String fileUrl = CommonUtil.getRealPath() + File.separator + "uploadCoordinateFile" + File.separator;
+
+            // 复制文件
+            File targetFile = new File(fileUrl, originalName);
+            if (targetFile.exists()) {
+                FileUtils.delete(targetFile);
+            }
+            FileUtils.writeByteArrayToFile(targetFile, file.getBytes());
+
+            log.info("坐标文件上传成功:{} ,更新记录信息", fileUrl + originalName);
+
+            //读取上传文件的内容
+
+            List<String> fileStrList = FileUtil.readLines(targetFile, StandardCharsets.UTF_8);
+            if (null == fileStrList || fileStrList.isEmpty()) {
+                return success("读取文件内容为空");
+            }
+            ProjectInfo projectInfo = null;
+            String xiangmuStr = fileStrList.get(0);
+            if (xiangmuStr.startsWith("xiangmu")) {
+                log.info("上传文件项目信息:{}", xiangmuStr);
+                String[] xiangmuStrArr = xiangmuStr.split(" ");
+                if (null != xiangmuStrArr && xiangmuStrArr.length == 4) {
+
+                    String projectId = xiangmuStrArr[1];
+                    if (!projectNo.equals(projectId)) {
+                        return success("读取文件内容不正确,填写的项目ID:" + xiangmuStr + ",与选择的项目编号不符合");
+                    }
+                    projectInfo = projectInfoService.getOneProjectInfoByProjectNo(projectNo);
+                    projectInfo.getProjectBasicInfo().setPosition(xiangmuStrArr[2] + "," + xiangmuStrArr[3]);
+                } else {
+                    return success("读取文件内容不正确,项目信息填写不正确:" + xiangmuStr);
+                }
+
+            } else {
+                return success("读取文件内容不正确,未填写项目信息");
+            }
+            //更新项目信息中的拐点坐标
+
+            String coordinatesStr = fileStrList.get(1);
+            if (coordinatesStr.startsWith("guaidian")) {
+                log.info("上传文件拐点坐标信息:{}", coordinatesStr);
+                String[] coordinatesStrArr = coordinatesStr.split(" ");
+                if (null != coordinatesStrArr && coordinatesStrArr.length == 2) {
+                    List<List<Coordinates>> coLists = new ArrayList<>();
+                    List<Coordinates> coSubLists = new ArrayList<>();
+                    String[] coordinatesStrList = coordinatesStrArr[1].split(";");
+                    for (String str : coordinatesStrList
+                    ) {
+                        String[] coordinates = str.split(",");
+                        if (null != coordinates && coordinates.length == 2) {
+                            Coordinates coordinates1 = new Coordinates(coordinates[0], coordinates[1]);
+                            coSubLists.add(coordinates1);
+                        }
+                    }
+                    coLists.add(coSubLists);
+                    projectInfo.setCoordinates(coLists);
+                } else {
+                    return success("读取文件内容不正确,项目拐点坐标填写不正确:" + coordinatesStr);
+                }
+
+            } else {
+                return success("读取文件内容不正确,未填写项目信息");
+            }
+            //风机型号
+            String fjTypeStr = fileStrList.get(2);
+            if (fjTypeStr.startsWith("fengji")) {
+                log.info("上传文件风机型号信息:{}", fjTypeStr);
+                String fjType = fjTypeStr.substring(6);
+                log.info("上传文件风机型号:{}", fjType);
+                List<FanTower> fanTowerList = new ArrayList<>();
+                for (int i = 3; i < fileStrList.size(); i++) {
+                    String fjStr = fileStrList.get(i);
+                    if (StrUtil.isNotBlank(fjStr)) {
+                        String[] fjStrArr = fjStr.split(" ");
+                        FanTower fanTower = new FanTower();
+                        fanTower.setId(UUID.randomUUID().toString());
+                        fanTower.setFanModel(fjType);
+                        fanTower.setFanName(fjStrArr[1]);
+
+                        fanTower.setLongitudeFan(fjStrArr[2]);
+                        fanTower.setLatitudeFan(fjStrArr[3]);
+                        fanTowerList.add(fanTower);
+                    }
+                }
+                projectInfo.setFanTowerList(fanTowerList);
+            } else {
+                return success("读取文件内容不正确,未填写风机型号信息");
+            }
+
+            projectInfoService.saveProjectInfo(projectInfo);
+            log.info("根据上传文件内容更新项目信息完成");
+        } catch (IOException e) {
+            logger.error("保存文件到服务器(本地)失败", e);
+        }
+
+        return success("200");
+    }
+
     @PostMapping("/downloadProjectProgressFile")
     public void downloadProjectProgressFile(HttpServletResponse response, @RequestBody String filePath) {
         File projectProgressDirFileNew = new File(filePath);

+ 7 - 4
neim-biz/src/main/java/com/jiayue/biz/mapper/ProphaseWeatherDataMapper.java

@@ -4,11 +4,13 @@ import cn.hutool.db.Entity;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jiayue.biz.domain.ProphaseWeatherData;
-import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.sql.Timestamp;
 import java.util.List;
-import java.util.Map;
 
 /**
  * ProphaseWeatherDataMapper
@@ -47,9 +49,10 @@ public interface ProphaseWeatherDataMapper extends BaseMapper<ProphaseWeatherDat
     @Select("SELECT t1.ts,t1.air_density FROM weather_${equipmentId} t1 where  t1.ts >= #{startTime} and t1.ts <= #{endTime}")
     List<ProphaseWeatherData> selectAir(@Param("equipmentId") String equipmentId, @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime);
 
-    @Select("select first (ts) from nerp_db.weather_#{equipmentId}")
+    @Select("select first (ts) from weather_#{equipmentId}")
     List<Entity> getFirstData(@Param("equipmentId") String equipmentId);
-    @Select("select last (ts) from nerp_db.weather_#{equipmentId}")
+
+    @Select("select last (ts) from weather_#{equipmentId}")
     List<Entity> getLastData(@Param("equipmentId") String equipmentId);
 
     @Select("CREATE TABLE IF NOT EXISTS weather_${equipmentId} USING prophase_weather_data TAGS (#{equipmentId})")

+ 10 - 0
neim-biz/src/main/java/com/jiayue/biz/service/ProjectInfoService.java

@@ -11,12 +11,22 @@ public interface ProjectInfoService {
 
     //查询项目信息
     List<ProjectInfo> getProjectInfoList();
+
     //根据id查询
     ProjectInfo getOneProjectInfoById(String id);
 
     /**
      * 根据id删除
+     *
      * @param id id
      */
     void delProjectInfo(String id);
+
+    /**
+     * 根据项目编号查询项目信息
+     *
+     * @param projectNo
+     * @return
+     */
+    ProjectInfo getOneProjectInfoByProjectNo(String projectNo);
 }

+ 5 - 1
neim-biz/src/main/java/com/jiayue/biz/service/impl/ProjectInfoServiceImpl.java

@@ -19,7 +19,6 @@ public class ProjectInfoServiceImpl implements ProjectInfoService {
     //保存
     public void saveProjectInfo(ProjectInfo projectInfo) {
         mongoTemplate.save(projectInfo);
-
     }
 
     //查询所有项目信息
@@ -38,4 +37,9 @@ public class ProjectInfoServiceImpl implements ProjectInfoService {
         mongoTemplate.remove(new Query(Criteria.where("_id").is(id)), ProjectInfo.class);
     }
 
+    @Override
+    public ProjectInfo getOneProjectInfoByProjectNo(String projectNo) {
+        return mongoTemplate.findOne(new Query(Criteria.where("projectBasicInfo.projectNo").is(projectNo)), ProjectInfo.class);
+    }
+
 }

+ 10 - 0
neim-ui/src/api/biz/dataQuery/homePage.js

@@ -96,6 +96,7 @@ export function delProjectProgressInfo(query) {
   })
 }
 
+//上传项目相关文件
 export function uploadProjectProgressFile(data) {
   return request({
     url: '/dataQuery/homePage/uploadProjectProgressFile',
@@ -104,6 +105,15 @@ export function uploadProjectProgressFile(data) {
   })
 }
 
+//上传项目拐点坐标及风机坐标文件
+export function uploadProjectFile(data) {
+  return request({
+    url: '/dataQuery/homePage/uploadProjectFile',
+    method: 'post',
+    data: data
+  })
+}
+
 
 export function downloadProjectProgressFile(data, file_name) {
   axios({

+ 50 - 68
neim-ui/src/views/largeScreenPage/Subpage/projectEvolve.vue

@@ -22,34 +22,26 @@
         <div class="tableContent">
           <el-table
             :data="tableData"
-            style="width: 100%;margin-bottom: 20px;"
             :cell-style="cellStyle"
             :header-cell-style="headClass"
             border
             :span-method="handleSpanMethod">
             <el-table-column
-              prop="taskLevel"
-              label="项目级别"
-              sortable
-              width="180" v-if="false">
-            </el-table-column>
-            <el-table-column
               prop="taskNo"
               label="序号"
               sortable
-              width="80" :formatter="formatTaskNo">
+              width="50%" :formatter="formatTaskNo">
 
             </el-table-column>
 
             <el-table-column
               prop="taskTitle"
               label="工作内容"
-              sortable
-              width="180">
+              width="60%" align="center">
             </el-table-column>
             <el-table-column
               prop="taskContent"
-              label="详细工作内容">
+              label="详细工作内容" width="150%">
               <template slot-scope="scope">
                 <span v-if="scope.row.taskContent !== '' && scope.row.taskContent !==null"
                       v-html="scope.row.taskContent.replace(/\n|\r\n/g, '<br>').replace(/ /g, '  ')"></span>
@@ -57,20 +49,16 @@
 
             </el-table-column>
             <el-table-column
-              prop="taskPlanTime" width="100"
-              label="计划完成时间" :formatter="formatTime2">
-            </el-table-column>
-            <el-table-column
-              prop="taskCompleteTime" width="100"
+              prop="taskCompleteTime" width="30%"
               label="实际完成时间" :formatter="formatTime3">
             </el-table-column>
             <el-table-column
-              prop="taskStatus" width="100"
-              label="进展状态">
+              prop="taskStatus" width="30%"
+              label="进展状态" :key="Math.random()">
             </el-table-column>
             <el-table-column
-              prop="fileUrl" width="100"
-              label="附件">
+              prop="fileUrl" width="70%"
+              label="附件" :key="Math.random()">
 
                 <span slot-scope="scope">
                     <span v-for="(item,index) in scope.row.fileUrl" v-text="formatFileUrl(item,index)"
@@ -79,7 +67,7 @@
                           @click="downloadFile(item)"> &nbsp<br></span>
               </span>
             </el-table-column>
-            <el-table-column label="操作" width="200">
+            <el-table-column label="操作" width="70%">
               <template slot-scope="scope">
                 <el-button
                   size="mini"
@@ -96,34 +84,41 @@
                   @click="handleDelete(scope.$index, scope.row)">删除
                 </el-button>
 
-                <br>
-                <el-upload
-                  :http-request="dataUpload"
-                  :before-upload="beforeUpload"
-                  class="el-upload-button"
-                  action=""
-                  ref="upload"
-                >
-                  <el-button
-                    @click="row=scope.row"
-                    slot="trigger"
-                    type="text"
-                    size="mini"
-                    icon="el-icon-upload2"
-                  >上传附件
-                  </el-button>
-                </el-upload>
+                <div style="float:right">
+                  <el-upload
+                    :http-request="dataUpload"
+                    :before-upload="beforeUpload"
+                    class="el-upload-button"
+                    action=""
+                    ref="upload"
+                  >
+                    <el-button
+                      @click="row=scope.row"
+                      slot="trigger"
+                      type="text"
+                      size="mini"
+                      icon="el-icon-upload2"
+                    >上传附件
+                    </el-button>
+                  </el-upload>
+                </div>
               </template>
             </el-table-column>
             <el-table-column
               prop="taskParentNo"
               label="父序号"
               sortable
-              width="180" v-if="false">
+              width="100%" v-if="false" :key="Math.random()">
             </el-table-column>
 
             <el-table-column
-              prop="showIndex" width="50"
+              prop="taskLevel"
+              label="项目级别"
+              sortable
+              width="10%" v-if="false" :key="Math.random()">
+            </el-table-column>
+            <el-table-column
+              prop="showIndex" width="20%"
               label="显示">
             </el-table-column>
           </el-table>
@@ -169,17 +164,6 @@
           <el-input type="textarea" v-model="form.taskContent"
                     auto-complete="off"></el-input>
         </el-form-item>
-        <el-form-item label="计划完成时间"
-                      :label-width="formLabelWidth">
-          <el-date-picker
-            v-model="form.taskPlanTime"
-            align="right"
-            value-format="yyyy-MM-dd"
-            type="date"
-            placeholder="选择日期"
-            :picker-options="pickerOptions">
-          </el-date-picker>
-        </el-form-item>
 
         <el-form-item label="进展状态"
                       :label-width="formLabelWidth">
@@ -250,7 +234,6 @@ export default {
         taskParentNo: "",
         taskTitle: "",
         taskContent: "",
-        taskPlanTime: "",
         taskCompleteTime: "",
         taskStatus: ""
       },
@@ -397,7 +380,6 @@ export default {
     },
     // 合并单元格
     handleSpanMethod({rowIndex, columnIndex}) {
-      // if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2) {
       if (columnIndex === 0 || columnIndex === 1) {
         const _row = this.spanArr[rowIndex];
         const _col = _row > 0 ? 1 : 0;
@@ -447,7 +429,6 @@ export default {
       this.form.taskContent = row.taskContent
       this.form.id = row.id
       this.form.taskLevel = row.taskLevel
-      this.form.taskPlanTime = row.taskPlanTime
       this.form.taskCompleteTime = row.taskCompleteTime
       this.form.taskStatus = row.taskStatus
     },
@@ -467,7 +448,6 @@ export default {
     formatFileUrl(url, index) {
       const pos = url.lastIndexOf('\\')  // ' / '所在的最后位置
       const filenameFull = url.substr(pos + 1)  //截取文件名称和后缀   输出:香菜.png
-      //url = url.substr(0,pos)  //截取路径字符串    输出:http://localhost:8080/static
       const pname = filenameFull.substring(0, filenameFull.lastIndexOf("."))  //截取文件名   输出:香菜
       return index + 1 + '.' + pname + ""
     },
@@ -502,13 +482,6 @@ export default {
 
     },
     /*格式化时间*/
-    formatTime2(row) {
-      if (row.taskPlanTime != undefined) {
-        return dayFormat(row.taskPlanTime)
-      }
-      return
-    },
-    /*格式化时间*/
     formatTime3(row) {
       if (row.taskCompleteTime != undefined) {
         return dayFormat(row.taskCompleteTime)
@@ -534,14 +507,13 @@ export default {
       return
     },
     cellStyle({row, column, rowIndex, columnIndex}) {
-      console.log(column)
-      console.log(row)
       if (column.property === 'taskTitle' || column.property === 'taskNo') {
         switch (row.taskTitle) {
           case '成立项目公司':
             return {
               //background: 'yel',
               color: '#E6A23C',
+              textAlign: 'left',
               fontSize: '20px'
             }
             break
@@ -549,6 +521,7 @@ export default {
             return {
               //background: 'blue',
               color: '#E6A23C',
+              textAlign: 'left',
               fontSize: '20px'
             }
             break
@@ -556,12 +529,13 @@ export default {
             return {
               //background: 'blue',
               color: '#E6A23C',
+              textAlign: 'left',
               fontSize: '20px'
             }
             break
           default:
             return {
-              textAlign: 'right'
+              textAlign: 'center'
             }
             break
         }
@@ -712,6 +686,11 @@ export default {
   color: white;
 }
 
+/* 隐藏 */
+.tableContent /deep/ .el-table colgroup col[name='gutter'] {
+  width: 0px;
+}
+
 .tableContent /deep/ .el-table__body-wrapper::-webkit-scrollbar {
   width: 8px; /*滚动条宽度*/
   height: 12px; /*滚动条高度*/
@@ -730,13 +709,18 @@ export default {
 }
 
 .tableContent /deep/ .el-table colgroup col[name='gutter'] {
-  width: 9px;
+  width: 0px;
 }
 
 .tableContent /deep/ .el-table__body {
   width: 100% !important;
 }
 
+.tableContent /deep/ .el-table__header {
+  width: 100% !important;
+}
+
+
 .bottomPushBtu {
   background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
   background-size: 100% 100%;
@@ -750,8 +734,6 @@ export default {
 }
 
 .textarea {
-
   white-space: pre-wrap;
-
 }
 </style>

+ 17 - 16
neim-ui/src/views/largeScreenPage/Subpage/projectInfo.vue

@@ -90,16 +90,16 @@
     <!--3D弹窗-->
     <div class="map3D">
       <el-dialog
-      :visible.sync="dialogVisible" :modal-append-to-body="false"
-      width="80%"
-      :before-close="handleClose">
+        :visible.sync="dialogVisible" :modal-append-to-body="false"
+        width="80%"
+        :before-close="handleClose">
         <bige-map3-d :mapValue="mapValue" v-if="dialogVisible"/>
       </el-dialog>
     </div>
 
-<!--    <div v-if="mapMark === 'mapBtu3D'">-->
-<!--      <bige-map3-d ref="childMethod" :mapValue="mapValue"/>-->
-<!--    </div>-->
+    <!--    <div v-if="mapMark === 'mapBtu3D'">-->
+    <!--      <bige-map3-d ref="childMethod" :mapValue="mapValue"/>-->
+    <!--    </div>-->
     <div class="bottomPushBtu" @click="pushPreProjectResource()">
       <span>前期项目资源信息</span>
     </div>
@@ -107,7 +107,7 @@
 </template>
 
 <script>
-import {projectMapInfo, getPointMap} from "@/api/biz/dataQuery/largeScreenPage";
+import {getPointMap, projectMapInfo} from "@/api/biz/dataQuery/largeScreenPage";
 import bigeMap from "@/views/largeScreenPage/components/bigeMap";
 import bigeHeatMap from "@/views/largeScreenPage/components/bigeHeatMap";
 import bigeHeatSunMap from "@/views/largeScreenPage/components/bigeHeatSunMap";
@@ -126,9 +126,7 @@ export default {
       project: {},
       projectName: '',
       coordinates: [],//中心点坐标
-      // projectOverview: '依兰县位于黑龙江省中南部。 黑龙江华电哈尔滨依兰鸡冠山四期200MW风电项目中心位于黑龙江省哈尔滨市依兰县东侧15km的鸡冠砬子山上,整个场址为低山丘陵区,场区实际可利用面积约63km2。',
       projectOverview: '',
-      // resourcesOverview: '根据风能资源推测120m数据分析,年平均风速为8.007m/s,平均风功率密度为567W/m²,属于3级风场。主风向为WSW,次风向为W,空气密度为1.2kg/m³。'
       resourcesOverview: '',
       mapMark: 'mapBtuOne',
       //地图传值
@@ -140,7 +138,7 @@ export default {
         allPointInfo: null,//所有点位信息
       },
       allPointInfo: [],
-      dialogVisible:false
+      dialogVisible: false
     }
   },
   destroyed() {
@@ -192,7 +190,7 @@ export default {
         let data = res.data
         this.projectOverview = data.projectOverview
         this.resourcesOverview = data.resourcesOverview
-        if(data.latitude !== undefined){
+        if (data.latitude !== undefined) {
           this.coordinates = [Number(data.latitude), Number(data.longitude)]
           this.mapValue = {
             params: new Date(),
@@ -203,7 +201,7 @@ export default {
             id: projectId,
             allPointInfo: this.allPointInfo,//所有点位信息
           }
-        }else{
+        } else {
           this.mapValue = {
             params: new Date(),
             level: 12,//地图层级
@@ -254,7 +252,7 @@ export default {
         this.mapMark = 'mapBtu'
       }
     },
-    dialog3DMap(){
+    dialog3DMap() {
       let center = this.$refs.childMethod.center
       let level = this.$refs.childMethod.level
       this.mapValue = {
@@ -268,7 +266,7 @@ export default {
       }
       this.dialogVisible = true
     },
-    handleClose(){
+    handleClose() {
       this.dialogVisible = false
     },
     clickBtu(id) {
@@ -497,14 +495,17 @@ export default {
   left: 22%;
   top: .5%;
 }
-.map3D /deep/ .el-dialog__header, .map3D /deep/ .el-dialog__body  {
- padding: 0;
+
+.map3D /deep/ .el-dialog__header, .map3D /deep/ .el-dialog__body {
+  padding: 0;
 }
+
 .map3D /deep/ .el-dialog__headerbtn {
   z-index: 100;
   top: 10px;
   right: 10px;
 }
+
 .map3D /deep/ .el-dialog__headerbtn .el-dialog__close {
   color: #ffffff;
 }