hanfucheng 1 рік тому
батько
коміт
02919963a4

+ 7 - 0
data-ui/src/api/data/generalbusiness/keyProjects/projects.js

@@ -80,3 +80,10 @@ export function selectPark(data){
     data: data
   })
 }
+
+export function pushMessage(id) {
+  return request({
+    url: '/sooka-sponest-center-data/projects/receivedMessage/' + id,
+    method: 'get'
+  })
+}

+ 123 - 206
data-ui/src/views/data/generalbusiness/keyProjects/index.vue

@@ -38,7 +38,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-     <!-- <el-col :span="1.5">
+      <!--<el-col :span="1.5">
         <el-button
           type="primary"
           plain
@@ -97,6 +97,18 @@
         >上传
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="multiple"
+          @click="pushMessage"
+          v-hasPermi="['forest:keyProjects:edit']"
+        >推送
+        </el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -209,17 +221,17 @@
 
     <!-- 添加或修改重点工程对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="1000px" class="form-style">
-      <el-form ref="form" :model="form" :rules="rules" label-width="160px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="180px">
         <el-row :gutter="24">
           <el-col :span="12">
             <el-form-item label="项目名称" prop="projectName">
-              <el-input v-model="form.projectName" placeholder="请输入项目名称" maxlength="50"/>
+              <el-input v-model="form.projectName" placeholder="" maxlength="50" readonly/>
             </el-form-item>
-            <el-form-item label="经度" prop="longitude" @dblclick.native="showMap">
-              <el-input v-model="form.longitude" placeholder="鼠标双击选择经度" maxlength="32"/>
+            <el-form-item label="经度" prop="longitude" >
+              <el-input v-model="form.longitude" placeholder="" maxlength="32" readonly/>
             </el-form-item>
-            <el-form-item label="属地辖区" prop="territoriality">
-              <el-select v-model="form.territoriality" placeholder="请输入属地辖区" maxlength="32">
+            <!--<el-form-item label="属地辖区" prop="territoriality">
+              <el-select v-model="form.territoriality" placeholder="请输入属地辖区" maxlength="32" readonly>
                 <el-option
                   v-for="item in options"
                   :key="item.value"
@@ -227,45 +239,42 @@
                   :value="item.value"
                 ></el-option>
               </el-select>
-            </el-form-item>
-            <!--<el-form-item label="工程属地" prop="projectLevel">
-              <el-select v-model="form.projectLevel" placeholder="请选择工程属地">
-                <el-option
-                  v-for="dict in dict.type.centerdata_project_level"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="建设单位" prop="constructionUnit">
-              <el-input v-model="form.constructionUnit" placeholder="请输入建设单位" maxlength="50"/>
             </el-form-item>-->
+            <el-form-item label="属地辖区" prop="territoriality">
+              <el-input v-model="form.territoriality" maxlength="32" readonly/>
+            </el-form-item>
             <el-form-item label="负责人" prop="principal">
-              <el-input v-model="form.principal" placeholder="请输入负责人" maxlength="20"/>
+              <el-input v-model="form.principal" placeholder="" maxlength="20" readonly/>
             </el-form-item>
-            <el-form-item label="开发区中心点经度" prop="parkLongitude" @dblclick.native="showMaptwo">
-              <el-input v-model="form.parkLongitude" placeholder="鼠标双击选择经度" maxlength="32"/>
+            <el-form-item label="开发区中心点经度" prop="parkLongitude" >
+              <el-input v-model="form.parkLongitude" placeholder="" maxlength="32" readonly/>
             </el-form-item>
             <el-form-item label="开复工时间" prop="startTime">
-              <el-date-picker clearable
-                              v-model="form.startTime"
-                              type="month"
-                              value-format="yyyy-MM"
-                              placeholder="请选择开复工时间">
-              </el-date-picker>
+              <el-input v-model="form.startTime" readonly/>
             </el-form-item>
             <el-form-item label="建设地点" prop="constructionSite">
-              <el-input v-model="form.constructionSite" placeholder="请输入建设地点" maxlength="255"/>
+              <el-input v-model="form.constructionSite" placeholder="" maxlength="255" readonly/>
             </el-form-item>
             <el-form-item label="总投资(万元)" prop="totalInvest">
-              <el-input v-model="form.totalInvest" placeholder="请输入总投资" maxlength="32"/>
+              <el-input v-model="form.totalInvest" placeholder="" maxlength="32" readonly/>
             </el-form-item>
             <el-form-item label="法人单位" prop="legalUnit">
-              <el-input v-model="form.legalUnit" placeholder="请输入法人单位" maxlength="32"/>
+              <el-input v-model="form.legalUnit" placeholder="" maxlength="32" readonly/>
             </el-form-item>
             <el-form-item label="项目秘书职务" prop="secretaryDuties">
-              <el-input v-model="form.secretaryDuties" placeholder="请输入项目秘书职务" maxlength="32"/>
+              <el-input v-model="form.secretaryDuties" placeholder="" maxlength="32" readonly/>
+            </el-form-item>
+            <el-form-item label="续建项目去年底前累计投资" prop="continuationProjectInvest">
+              <el-input v-model="form.continuationProjectInvest" placeholder="" maxlength="32" readonly/>
+            </el-form-item>
+            <el-form-item label="续建项目首次开工时间" prop="continuationProjectStartTime">
+              <el-input v-model="form.continuationProjectStartTime" placeholder=""  readonly/>
+            </el-form-item>
+            <el-form-item label="是否入统计库" prop="joinStatisticalBank">
+              <el-input v-model="form.joinStatisticalBank" placeholder=""  readonly/>
+            </el-form-item>
+            <el-form-item label="是否入统" prop="joinStatistical">
+              <el-input v-model="form.joinStatistical" placeholder=""  readonly/>
             </el-form-item>
             <el-form-item label="所属部门" prop="deptId">
               <treeselect v-model="form.deptId" :options="deptOptions" multiple:false :show-count="true"
@@ -277,8 +286,8 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="项目环境" prop="environment">
-
-              <el-select v-model="form.environment" placeholder="请选择项目环境">
+              <el-select v-model="form.environment" ref="selectRef5" @blur="addClick()" @click.native="addClick()"
+                         placeholder="">
                 <el-option
                   v-for="dict in dict.type.centerdata_environment"
                   :key="dict.value"
@@ -287,11 +296,11 @@
                 ></el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="纬度" prop="latitude" @dblclick.native="showMap">
-              <el-input v-model="form.latitude" placeholder="鼠标双击选择纬度" maxlength="32"/>
+            <el-form-item label="纬度" prop="latitude" >
+              <el-input v-model="form.latitude" placeholder="" maxlength="32"  readonly/>
             </el-form-item>
             <el-form-item label="所属开发区" prop="park">
-              <el-select v-model="form.park" placeholder="请选择所属开发区">
+              <el-select v-model="form.park" placeholder="请选择所属开发区" >
                 <el-option
                   v-for="item in deptOptionsPark"
                   :key="item.deptId"
@@ -301,21 +310,18 @@
               </el-select>
             </el-form-item>
             <el-form-item label="联系电话" prop="phone">
-              <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="13"/>
+              <el-input v-model="form.phone" placeholder="" maxlength="13" readonly/>
             </el-form-item>
-            <el-form-item label="开发区中心点纬度" prop="parkLatitude" @dblclick.native="showMaptwo">
-              <el-input v-model="form.parkLatitude" placeholder="鼠标双击选择纬度" maxlength="32"/>
+            <el-form-item label="开发区中心点纬度" prop="parkLatitude">
+              <el-input v-model="form.parkLatitude" placeholder="" maxlength="32" readonly/>
             </el-form-item>
+
             <el-form-item label="计划竣工时间" prop="endTime">
-              <el-date-picker clearable
-                              v-model="form.endTime"
-                              type="month"
-                              value-format="yyyy-MM"
-                              placeholder="请选择计划竣工时间">
-              </el-date-picker>
+              <el-input v-model="form.endTime" readonly/>
             </el-form-item>
             <el-form-item label="在建性质" prop="nature">
-              <el-select v-model="form.nature" placeholder="请选择在建性质">
+              <el-select v-model="form.nature" ref="selectRef6" @blur="addClick()" @click.native="addClick()"
+                         placeholder="">
                 <el-option
                   v-for="dict in dict.type.centerdata_zj_nature"
                   :key="dict.value"
@@ -325,16 +331,17 @@
               </el-select>
             </el-form-item>
             <el-form-item label="年度计划投资(万元)" prop="yearInvest">
-              <el-input v-model="form.yearInvest" placeholder="请输入年度计划投资" maxlength="32"/>
+              <el-input v-model="form.yearInvest" placeholder="" maxlength="32" readonly/>
             </el-form-item>
             <el-form-item label="项目秘书" prop="secretary">
-              <el-input v-model="form.secretary" placeholder="请输入项目秘书" maxlength="32"/>
+              <el-input v-model="form.secretary" placeholder="" maxlength="32" readonly/>
             </el-form-item>
             <el-form-item label="项目秘书手机" prop="secretaryPhone">
-              <el-input v-model="form.secretaryPhone" placeholder="请输入项目秘书手机" maxlength="13"/>
+              <el-input v-model="form.secretaryPhone" placeholder="" maxlength="13" readonly/>
             </el-form-item>
             <el-form-item label="产业类别" prop="industryType">
-              <el-select v-model="form.industryType" placeholder="请选择产业类别">
+              <el-select v-model="form.industryType" ref="selectRef7" @blur="addClick()" @click.native="addClick()"
+                         placeholder="">
                 <el-option
                   v-for="dict in dict.type.centerdata_industry_type"
                   :key="dict.value"
@@ -343,29 +350,25 @@
                 ></el-option>
               </el-select>
             </el-form-item>
-            <!--<el-form-item label="工程目标" prop="projectTarget">
-              <el-input v-model="form.projectTarget" placeholder="请输入工程目标" maxlength="255"/>
+            <el-form-item label="1-N月入统投资" prop="joinStatisticalInvest">
+              <el-input v-model="form.joinStatisticalInvest"  readonly/>
             </el-form-item>
-            <el-form-item label="建筑面积" prop="constructionArea">
-              <el-input v-model="form.constructionArea" placeholder="请输入建筑面积" maxlength="50"/>
+            <el-form-item label="今年实际累计完成投资" prop="thisYearCumulativeInvestment">
+              <el-input v-model="form.thisYearCumulativeInvestment" readonly/>
+            </el-form-item>
+            <el-form-item label="实际竣工时间" prop="realityCompletedTime">
+              <el-input v-model="form.realityCompletedTime" readonly/>
+            </el-form-item>
+            <el-form-item label="是否春季集中开复工项目" prop="springStartProject">
+              <el-input v-model="form.springStartProject" readonly/>
             </el-form-item>
-            <el-form-item label="所属分类" prop="cameraSystem">
-              <el-select v-model="form.cameraSystem" placeholder="请选择所属分类">
-                <el-option
-                  v-for="dict in dict.type.camera_system"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>-->
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
             <el-form-item label="建设内容" prop="introduction">
-              <el-input v-model="form.introduction" type="textarea" placeholder="请输入建设内容" maxlength="500"
-                        :autosize="{ minRows: 5, maxRows: 5}"/>
+              <el-input v-model="form.introduction" type="textarea" placeholder="" maxlength="500"
+                        :autosize="{ minRows: 5, maxRows: 5}" readonly/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -430,142 +433,9 @@
       </el-form>
     </el-dialog>
 
-    <el-dialog :title="title" :visible.sync="scheduleHistory" width="900px" class="form-style">
-      <!-- 修改内容回显开始 -->
-      <!--<el-form ref="form" :model="form" :rules="rules" label-width="150px">
-        <ul class="xg_cont">
-            <li>
-              <el-form-item label="年度计划投资(万元)" prop="yearInvest">
-                <el-input v-model="form.yearInvest" placeholder="请输入年度计划投资" maxlength="32" disabled/>
-              </el-form-item>
-            </li>
-            <li>
-             &lt;!&ndash; <h4 class="sjxtitle">项目环境</h4>
-              <span class="sjx_cont">
-                <dict-tag :options="dict.type.centerdata_environment" :value="form.environment"/>
-              </span>&ndash;&gt;
-
-              <el-form-item label="项目环境" prop="environment">
-                <el-select v-model="form.environment" placeholder="请选择项目环境" disabled>
-                  <el-option
-                    v-for="dict in dict.type.centerdata_environment"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </li>
-            <li>
-              <h4 class="sjxtitle">经度</h4>
-              <span class="sjx_cont">{{form.longitude}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">纬度</h4>
-              <span class="sjx_cont">{{form.latitude}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">属地辖区</h4>
-              <span class="sjx_cont">{{form.territoriality}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">所属开发区</h4>
-              <span class="sjx_cont">{{form.parkName}}</span>
-            </li>
-          <li>
-            <h4 class="sjxtitle">负责人</h4>
-            <span class="sjx_cont">{{form.principal}}</span>
-          </li>
-          <li>
-            <h4 class="sjxtitle">联系电话</h4>
-            <span class="sjx_cont">{{form.phone}}</span>
-          </li>
-            <li>
-              <h4 class="sjxtitle">开发区中心点经度</h4>
-              <span class="sjx_cont">{{form.parkLongitude}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">开发区中心点纬度</h4>
-              <span class="sjx_cont">{{form.parkLatitude}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">开复工时间</h4>
-              <span class="sjx_cont">{{form.startTime}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">计划竣工时间</h4>
-              <span class="sjx_cont">{{form.endTime}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">建设地点</h4>
-              <span class="sjx_cont">{{form.constructionSite}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">在建性质</h4>
-              <span class="sjx_cont">
-                <dict-tag :options="dict.type.centerdata_zj_nature" :value="form.nature"/>
-              </span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">总投资(万元)</h4>
-              <span class="sjx_cont">{{form.totalInvest}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">年度计划投资(万元)</h4>
-              <span class="sjx_cont">{{form.yearInvest}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">法人单位</h4>
-              <span class="sjx_cont">{{form.legalUnit}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">项目秘书</h4>
-              <span class="sjx_cont">{{form.secretary}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">项目秘书职务</h4>
-              <span class="sjx_cont">{{form.secretaryDuties}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">项目秘书手机</h4>
-              <span class="sjx_cont">{{form.secretaryPhone}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">所属部门</h4>
-              <span class="sjx_cont">{{form.deptName}}</span>
-            </li>
-            <li>
-              <h4 class="sjxtitle">产业类别</h4>
-              <span class="sjx_cont">
-                <dict-tag :options="dict.type.centerdata_industry_type" :value="form.industryType"/>
-              </span>
-            </li>
-            <li class="jiansheCont">
-              <h4 class="sjxtitle">绑定设备</h4>
-              <span class="sjx_cont" >
-                <span v-for="(list,index) in form.deviceList">
-                  <span v-for="dict in cameraList" v-if="list == dict.id">
-                    {{ dict.cameraName }}<span v-if="index!=form.deviceList.length-1" >,</span>
-                  </span>
-                </span>
-              </span>
-            </li>
-            <li class="jiansheCont">
-              <h4 class="sjxtitle">建设内容</h4>
-              <span class="sjx_cont js_cont">{{form.introduction}}</span>
-            </li>
-            <li class="jiansheCont">
-              <h4 class="sjxtitle">封面</h4>
-              <el-image v-if="form.photoId!=null"
-                :src="form.photoId" style="width:150px;height:150px;"
-                :preview-src-list="[form.photoId]">
-              </el-image>
-            </li>
-
-        </ul>
-      </el-form>-->
-
-      <el-form ref="form" :model="form" :rules="rules" label-width="160px">
+    <el-dialog :title="title" :visible.sync="scheduleHistory" width="1000px" class="form-style">
+      <!-- 详情内容回显开始 -->
+      <el-form ref="form" :model="form" :rules="rules" label-width="180px">
         <el-row :gutter="24">
           <el-col :span="12">
             <el-form-item label="项目名称" prop="projectName">
@@ -598,6 +468,18 @@
             <el-form-item label="项目秘书职务" prop="secretaryDuties">
               <el-input v-model="form.secretaryDuties" maxlength="32" readonly/>
             </el-form-item>
+            <el-form-item label="续建项目去年底前累计投资" prop="continuationProjectInvest">
+              <el-input v-model="form.continuationProjectInvest" placeholder="" maxlength="32" readonly/>
+            </el-form-item>
+            <el-form-item label="续建项目首次开工时间" prop="continuationProjectStartTime">
+              <el-input v-model="form.continuationProjectStartTime" placeholder=""  readonly/>
+            </el-form-item>
+            <el-form-item label="是否入统计库" prop="joinStatisticalBank">
+              <el-input v-model="form.joinStatisticalBank" placeholder=""  readonly/>
+            </el-form-item>
+            <el-form-item label="是否入统" prop="joinStatistical">
+              <el-input v-model="form.joinStatistical" placeholder=""  readonly/>
+            </el-form-item>
             <el-form-item label="所属部门" prop="deptId">
               <el-input v-model="form.deptName" readonly/>
             </el-form-item>
@@ -671,6 +553,18 @@
                 ></el-option>
               </el-select>
             </el-form-item>
+            <el-form-item label="1-N月入统投资" prop="joinStatisticalInvest">
+              <el-input v-model="form.joinStatisticalInvest"  readonly/>
+            </el-form-item>
+            <el-form-item label="今年实际累计完成投资" prop="thisYearCumulativeInvestment">
+              <el-input v-model="form.thisYearCumulativeInvestment" readonly/>
+            </el-form-item>
+            <el-form-item label="实际竣工时间" prop="realityCompletedTime">
+              <el-input v-model="form.realityCompletedTime" readonly/>
+            </el-form-item>
+            <el-form-item label="是否春季集中开复工项目" prop="springStartProject">
+              <el-input v-model="form.springStartProject" readonly/>
+            </el-form-item>
           </el-col>
         </el-row>
         <el-row>
@@ -750,7 +644,7 @@
 <script>
 import {
   addProjects,
-  delProjects,
+  delProjects,pushMessage,
   getProjects, getProjectsSchedule,
   listProjects,
   updateProjects, addProjectsScheduleInfo, getHistoryByTime, deleteSchedule, selectPark
@@ -942,6 +836,11 @@ export default {
       this.$refs.selectRef3.blur();
       this.$refs.selectRef4.blur();
     },
+    addClick(){
+      this.$refs.selectRef5.blur();
+      this.$refs.selectRef6.blur();
+      this.$refs.selectRef7.blur();
+    },
     handleClick() {
       alert('button click');
     },
@@ -1104,7 +1003,15 @@ export default {
         yearInvest: null,
         secretary: null,
         parkLatitude: null,
-        secretaryPhone: null
+        secretaryPhone: null,
+        continuationProjectInvest: null,
+        continuationProjectStartTime: null,
+        joinStatisticalBank: null,
+        joinStatistical: null,
+        joinStatisticalInvest: null,
+        thisYearCumulativeInvestment: null,
+        realityCompletedTime: null,
+        springStartProject: null
       };
       this.resetForm("form");
     },
@@ -1164,6 +1071,16 @@ export default {
       this.title = "进度上传";
       this.scheduleUpload = true;
     },
+    /*推送图片*/
+    pushMessage(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否推送选中数据的进度图?').then(function () {
+        return pushMessage(ids);
+      }).then(() => {
+        this.$modal.msgSuccess("推送成功");
+      }).catch(() => {
+      });
+    },
     /** 历史进度查看 */
     getScheduleHistory(row) {
       this.keyProjectsId = row.id || this.ids

+ 6 - 0
pom.xml

@@ -91,6 +91,12 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>sooka-sponest-api-exchange</artifactId>
+            <version>3.4.0</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 30 - 0
src/main/java/com/sooka/sponest/data/generalbusiness/controller/CenterdataTKeyProjectsController.java

@@ -1,5 +1,6 @@
 package com.sooka.sponest.data.generalbusiness.controller;
 
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.TableDataInfo;
@@ -151,4 +152,33 @@ public class CenterdataTKeyProjectsController extends BaseController {
     public AjaxResult remove(@PathVariable String[] ids) {
         return toAjax(centerdataTKeyProjectsService.deleteCenterdataTKeyProjectsByIds(ids));
     }
+
+    /**
+     * 接受报文
+     */
+    @ApiOperation(value = "接受报文", notes = "接受报文")
+    @Log(title = "接受报文", businessType = BusinessType.INSERT)
+    @PostMapping("/receivedMessage")
+    public AjaxResult receivedMessage(@Validated @RequestBody List<CenterdataTKeyProjects> centerdataTKeyProjects) {
+        for (CenterdataTKeyProjects projects : centerdataTKeyProjects){
+            if (projects.getEndTime()!=null&&projects.getStartTime()!=null){
+                if (projects.getEndTime().compareTo(projects.getStartTime())<0){
+                    return AjaxResult.error("项目名称'"+projects.getProjectName()+"'的计划竣工时间不能小于开复工时间");
+                }
+            }
+        }
+        return toAjax(centerdataTKeyProjectsService.receivedMessage(centerdataTKeyProjects));
+    }
+
+    /*
+    * 推送报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 14:58
+    */
+    @ApiOperation(value = "推送报文", notes = "推送报文")
+    @GetMapping("/receivedMessage/{ids}")
+    public R pushMessage(@PathVariable String[] ids) {
+        return centerdataTKeyProjectsService.pushMessage(ids);
+    }
 }

+ 124 - 0
src/main/java/com/sooka/sponest/data/generalbusiness/domain/CenterdataTKeyProjects.java

@@ -33,6 +33,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "属地辖区", required = false)
     @Excel(name = "属地辖区")
+    @NotBlank(message = "属地辖区不能为空")
     private String territoriality;
 
     /**
@@ -118,6 +119,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "负责人", required = false)
     @Excel(name = "负责人")
+    @NotBlank(message = "负责人不能为空")
     private String principal;
 
     /**
@@ -125,6 +127,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "联系电话", required = false)
     @Excel(name = "联系电话")
+    @NotBlank(message = "联系电话不能为空")
     private String phone;
 
     /**
@@ -146,6 +149,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "建设地点", required = false)
     @Excel(name = "建设地点")
+    @NotBlank(message = "建设地点不能为空")
     private String constructionSite;
 
     /**
@@ -153,6 +157,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "在建性质", required = false)
     @Excel(name = "在建性质",dictType = "centerdata_zj_nature")
+    @NotBlank(message = "在建性质不能为空")
     private String nature;
 
     /**
@@ -268,6 +273,125 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
     @ApiModelProperty(value = "附件", required = false)
     private String photoId;
 
+    @ApiModelProperty(value = "续建项目去年底前累计投资(万元)", required = false)
+    @Excel(name = "续建项目去年底前累计投资(万元)")
+    private String continuationProjectInvest;
+
+    @ApiModelProperty(value = "续建项目首次开工时间", required = false)
+    @Excel(name = "续建项目首次开工时间")
+    private Date continuationProjectStartTime;
+
+    @ApiModelProperty(value = "是否入统计库", required = false)
+    @Excel(name = "是否入统计库")
+    private String joinStatisticalBank;
+
+    @ApiModelProperty(value = "是否入统", required = false)
+    @Excel(name = "是否入统")
+    private String joinStatistical;
+
+    @ApiModelProperty(value = "1-N月入统投资", required = false)
+    @Excel(name = "1-N月入统投资")
+    private String joinStatisticalInvest;
+
+    @ApiModelProperty(value = "今年实际累计完成投资", required = false)
+    @Excel(name = "今年实际累计完成投资")
+    private String thisYearCumulativeInvestment;
+
+    @ApiModelProperty(value = "实际竣工时间", required = false)
+    @Excel(name = "实际竣工时间")
+    private Date realityCompletedTime;
+
+    @ApiModelProperty(value = "是否春季集中开复工项目", required = false)
+    @Excel(name = "是否春季集中开复工项目")
+    private String springStartProject;
+
+    @ApiModelProperty(value = "报文", required = false)
+    private String message;
+
+    @ApiModelProperty(value = "项目id", required = false)
+    @NotBlank(message = "项目id不能为空")
+    private String projectId;
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getJoinStatisticalBank() {
+        return joinStatisticalBank;
+    }
+
+    public void setJoinStatisticalBank(String joinStatisticalBank) {
+        this.joinStatisticalBank = joinStatisticalBank;
+    }
+
+    public String getJoinStatistical() {
+        return joinStatistical;
+    }
+
+    public void setJoinStatistical(String joinStatistical) {
+        this.joinStatistical = joinStatistical;
+    }
+
+    public String getJoinStatisticalInvest() {
+        return joinStatisticalInvest;
+    }
+
+    public void setJoinStatisticalInvest(String joinStatisticalInvest) {
+        this.joinStatisticalInvest = joinStatisticalInvest;
+    }
+
+    public String getThisYearCumulativeInvestment() {
+        return thisYearCumulativeInvestment;
+    }
+
+    public void setThisYearCumulativeInvestment(String thisYearCumulativeInvestment) {
+        this.thisYearCumulativeInvestment = thisYearCumulativeInvestment;
+    }
+
+    public String getSpringStartProject() {
+        return springStartProject;
+    }
+
+    public void setSpringStartProject(String springStartProject) {
+        this.springStartProject = springStartProject;
+    }
+
+    public String getContinuationProjectInvest() {
+        return continuationProjectInvest;
+    }
+
+    public void setContinuationProjectInvest(String continuationProjectInvest) {
+        this.continuationProjectInvest = continuationProjectInvest;
+    }
+
+    public Date getContinuationProjectStartTime() {
+        return continuationProjectStartTime;
+    }
+
+    public void setContinuationProjectStartTime(Date continuationProjectStartTime) {
+        this.continuationProjectStartTime = continuationProjectStartTime;
+    }
+
+    public Date getRealityCompletedTime() {
+        return realityCompletedTime;
+    }
+
+    public void setRealityCompletedTime(Date realityCompletedTime) {
+        this.realityCompletedTime = realityCompletedTime;
+    }
+
     public String getTerritoriality() {
         return territoriality;
     }

+ 8 - 0
src/main/java/com/sooka/sponest/data/generalbusiness/mapper/CenterdataTKeyProjectsMapper.java

@@ -51,4 +51,12 @@ public interface CenterdataTKeyProjectsMapper {
      * @return 结果
      */
     int deleteCenterdataTKeyProjectsByIds(String[] ids);
+
+    /*
+    * 按重点工程id查询最新一条进度图
+    *
+    * @author 韩福成
+    * @date 2024/1/18 15:23
+    */
+    String getSelectScheduleById(String id);
 }

+ 17 - 0
src/main/java/com/sooka/sponest/data/generalbusiness/service/ICenterdataTKeyProjectsService.java

@@ -1,5 +1,6 @@
 package com.sooka.sponest.data.generalbusiness.service;
 
+import com.ruoyi.common.core.domain.R;
 import com.sooka.sponest.data.generalbusiness.domain.CenterdataTKeyProjects;
 
 import java.util.List;
@@ -51,4 +52,20 @@ public interface ICenterdataTKeyProjectsService {
      * @return 结果
      */
     int deleteCenterdataTKeyProjectsByIds(String[] ids);
+
+    /*
+    * 接收报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 14:45
+    */
+    int receivedMessage(List<CenterdataTKeyProjects> centerdataTKeyProjects);
+
+    /*
+    * 推送报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 15:19
+    */
+    R pushMessage(String[] ids);
 }

+ 66 - 0
src/main/java/com/sooka/sponest/data/generalbusiness/service/impl/CenterdataTKeyProjectsServiceImpl.java

@@ -1,6 +1,9 @@
 package com.sooka.sponest.data.generalbusiness.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.SpringUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.datascope.annotation.DataScopeMutiDept;
@@ -11,10 +14,14 @@ import com.sooka.sponest.data.generalbusiness.mapper.CenterdataTKeyProjectsMappe
 import com.sooka.sponest.data.generalbusiness.service.ICenterdataTKeyProjectsService;
 import com.sooka.sponest.data.system.equipment.domain.CenterdataTEquipmentCamera;
 import com.sooka.sponest.data.system.equipment.service.ICenterdataTEquipmentCameraService;
+import com.sooka.sponest.exchange.api.RemoteExchangeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 重点工程Service业务层处理
@@ -120,4 +127,63 @@ public class CenterdataTKeyProjectsServiceImpl extends BaseServiceImpl implement
         }
         return centerdataTKeyProjectsMapper.deleteCenterdataTKeyProjectsByIds(ids);
     }
+
+    /*
+    * 接收报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 14:45
+    */@Override
+    public int receivedMessage(List<CenterdataTKeyProjects> centerdataTKeyProjects) {
+        int i = 0;
+        for (CenterdataTKeyProjects projects : centerdataTKeyProjects){
+            CenterdataTKeyProjects project = centerdataTKeyProjectsMapper.selectCenterdataTKeyProjectsById(projects.getId());
+            projects.setMessage(JSON.toJSONString(projects));
+            if (project==null){
+                projects.setId(IdUtils.fastUUID());
+                projects.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
+                projects.setDeptName(SecurityUtils.getLoginUser().getSysUser().getDeptNames());
+                projects.setCreateBy(SecurityUtils.getUserId().toString());
+                projects.setCreateName( SecurityUtils.getLoginUser().getSysUser().getNickName());
+                projects.setCreateTime(DateUtils.getNowDate());
+                i = centerdataTKeyProjectsMapper.insertCenterdataTKeyProjects(projects);
+            }else {
+                projects.setUpdateBy(SecurityUtils.getUserId());
+                projects.setUpdateTime(DateUtils.getNowDate());
+                projects.setUpdateName( SecurityUtils.getLoginUser().getSysUser().getNickName());
+                i = centerdataTKeyProjectsMapper.updateCenterdataTKeyProjects(projects);
+            }
+        }
+        return i;
+    }
+
+    /*
+    * 推送报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 15:19
+    */
+    @Override
+    public R pushMessage(String[] ids) {
+        List<Map<String,Object>> list = new ArrayList<>();
+        for (String id : ids) {
+            Map<String,Object> map = new HashMap<>();
+            CenterdataTKeyProjects centerdataTKeyProjects = centerdataTKeyProjectsMapper.selectCenterdataTKeyProjectsById(id);
+            String schedulePictures = centerdataTKeyProjectsMapper.getSelectScheduleById(id);
+            if (schedulePictures!=null){
+                String schedule = "";
+                String[] schedules = schedulePictures.split(",");
+                for (String pictures : schedules){
+                    String picture = pictures.substring(pictures.indexOf("group1"));
+                    schedule = schedule + picture + ",";
+                }
+                map.put("schedulePictures", schedule.substring(0, schedule.length() - 1));
+            }else {
+                map.put("schedulePictures", "");
+            }
+            map.put("projectId",centerdataTKeyProjects.getProjectId());
+            list.add(map);
+        }
+        return SpringUtils.getBean(RemoteExchangeService.class).pushMessage(list);
+    }
 }

+ 19 - 0
src/main/resources/mapper/generalbusiness/CenterdataTKeyProjectsMapper.xml

@@ -136,6 +136,8 @@
             <if test="secretary != null">secretary,</if>
             <if test="secretaryDuties != null">secretary_duties,</if>
             <if test="secretaryPhone != null">secretary_phone,</if>
+            <if test="message != null">message,</if>
+            <if test="projectId != null">project_id,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -177,6 +179,8 @@
             <if test="secretary != null">#{secretary},</if>
             <if test="secretaryDuties != null">#{secretaryDuties},</if>
             <if test="secretaryPhone != null">#{secretaryPhone},</if>
+            <if test="message != null">#{message},</if>
+            <if test="projectId != null">#{projectId},</if>
         </trim>
     </insert>
 
@@ -221,6 +225,7 @@
             <if test="secretary != null">secretary = #{secretary},</if>
             <if test="secretaryDuties != null">secretary_duties = #{secretaryDuties},</if>
             <if test="secretaryPhone != null">secretary_phone = #{secretaryPhone},</if>
+            <if test="message != null">message = #{message},</if>
         </trim>
         where id = #{id}
     </update>
@@ -231,4 +236,18 @@
             #{id}
         </foreach>
     </delete>
+
+    <select id="getSelectScheduleById" parameterType="String" resultType="java.lang.String">
+        SELECT
+            GROUP_CONCAT( a.schedule_pictures ) schedulePictures
+        FROM
+            centerdata_t_key_projects_schedule a
+        WHERE
+            a.key_projects_id = #{id}
+        GROUP BY
+            a.schedule_time
+        ORDER BY
+            a.schedule_time DESC
+            LIMIT 1
+    </select>
 </mapper>