Browse Source

Merge branch 'key_projects'

# Conflicts:
#	pom.xml
liuyuqiang 1 year ago
parent
commit
944347047c

+ 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'
+  })
+}

+ 205 - 241
data-ui/src/views/data/generalbusiness/keyProjects/index.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px"
-             @submit.native.prevent>
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" @submit.native.prevent>
       <el-form-item label="项目名称" prop="projectName">
         <el-input
           v-model="queryParams.projectName"
@@ -12,14 +11,13 @@
         />
       </el-form-item>
       <el-form-item label="属地辖区" prop="territoriality">
-        <el-select v-model="queryParams.territoriality" placeholder="请选择属地辖区" clearable size="small">
-          <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          />
-        </el-select>
+        <el-input
+          v-model="queryParams.territoriality"
+          placeholder="请输入属地辖区"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="所属开发区" prop="park">
         <el-select v-model="queryParams.park" placeholder="请选择所属开发区">
@@ -31,6 +29,15 @@
           ></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item prop="deptId">
+        <template slot="label">
+          <span @click="changeQueryType" v-if="queryParams.deptName === 0">本级及下级</span>
+          <span @click="changeQueryType" v-if="queryParams.deptName === 1">只查询本级</span>
+        </template>
+        <treeselect v-model="queryParams.deptId" :options="deptOptions" multiple:false :show-count="true"
+                    placeholder="请选择部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'" style="width: 240px"/>
+        <el-input v-model="queryParams.deptName" v-if="false"/>
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -38,17 +45,18 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+      <!--<el-col :span="1.5">
         <el-button
           type="primary"
           plain
           icon="el-icon-plus"
           size="mini"
+
           @click="handleAdd"
           v-hasPermi="['forest:keyProjects:add']"
         >新增
         </el-button>
-      </el-col>
+      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="success"
@@ -96,6 +104,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>
 
@@ -208,17 +228,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"
@@ -226,45 +246,56 @@
                   :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-select v-model="form.joinStatisticalBank" placeholder="" disabled>
+                <el-option
+                  v-for="dict in joinStatistical"
+                  :key="dict.value"
+                  :label="dict.name"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="是否入统" prop="joinStatistical">
+              <el-select v-model="form.joinStatistical" placeholder="" disabled>
+                <el-option
+                  v-for="dict in joinStatistical"
+                  :key="dict.value"
+                  :label="dict.name"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
             </el-form-item>
             <el-form-item label="所属部门" prop="deptId">
               <treeselect v-model="form.deptId" :options="deptOptions" multiple:false :show-count="true"
@@ -276,8 +307,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"
@@ -286,11 +317,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"
@@ -300,21 +331,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"
@@ -324,16 +352,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"
@@ -342,29 +371,32 @@
                 ></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="thisYearCumulativeInvestment">
+              <el-input v-model="form.thisYearCumulativeInvestment" readonly/>
             </el-form-item>
-            <el-form-item label="建筑面积" prop="constructionArea">
-              <el-input v-model="form.constructionArea" placeholder="请输入建筑面积" maxlength="50"/>
+            <el-form-item label="实际竣工时间" prop="realityCompletedTime">
+              <el-input v-model="form.realityCompletedTime" readonly/>
             </el-form-item>
-            <el-form-item label="所属分类" prop="cameraSystem">
-              <el-select v-model="form.cameraSystem" placeholder="请选择所属分类">
+            <el-form-item label="是否春季集中开复工项目" prop="springStartProject">
+              <el-select v-model="form.springStartProject" placeholder="" disabled>
                 <el-option
-                  v-for="dict in dict.type.camera_system"
+                  v-for="dict in joinStatistical"
                   :key="dict.value"
-                  :label="dict.label"
+                  :label="dict.name"
                   :value="dict.value"
                 ></el-option>
               </el-select>
-            </el-form-item>-->
+            </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>
@@ -429,142 +461,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">
@@ -597,6 +496,32 @@
             <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-select v-model="form.joinStatisticalBank" placeholder="" disabled>
+                <el-option
+                  v-for="dict in joinStatistical"
+                  :key="dict.value"
+                  :label="dict.name"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="是否入统" prop="joinStatistical">
+              <el-select v-model="form.joinStatistical" placeholder="" disabled>
+                <el-option
+                  v-for="dict in joinStatistical"
+                  :key="dict.value"
+                  :label="dict.name"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
             <el-form-item label="所属部门" prop="deptId">
               <el-input v-model="form.deptName" readonly/>
             </el-form-item>
@@ -670,6 +595,25 @@
                 ></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-select v-model="form.springStartProject" placeholder="" disabled>
+                <el-option
+                  v-for="dict in joinStatistical"
+                  :key="dict.value"
+                  :label="dict.name"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
           </el-col>
         </el-row>
         <el-row>
@@ -749,7 +693,7 @@
 <script>
 import {
   addProjects,
-  delProjects,
+  delProjects,pushMessage,
   getProjects, getProjectsSchedule,
   listProjects,
   updateProjects, addProjectsScheduleInfo, getHistoryByTime, deleteSchedule, selectPark
@@ -796,6 +740,16 @@ export default {
       projectsList: [],
       // 弹出层标题
       title: "",
+      joinStatistical:[
+        {
+          name:'是',
+          value:'1'
+        },
+        {
+          name:'否',
+          value:'0'
+        }
+      ],
       // 是否显示弹出层
       open: false,
       scheduleUpload: false,
@@ -823,6 +777,7 @@ export default {
         latitude: null,
         cameraSystem: null,
         deptId: null,
+        deptName: 0,
         introduction: null,
         parkLongitude: null,
         parkLatitude: null,
@@ -833,25 +788,6 @@ export default {
         endTime: null,
         keyProjectsId: null,
       },
-      options: [{
-        value: '市本级',
-        label: '市本级'
-      }, {
-        value: '铁东区',
-        label: '铁东区'
-      }, {
-        value: '铁西区',
-        label: '铁西区'
-      }, {
-        value: '梨树县',
-        label: '梨树县'
-      }, {
-        value: '双辽市',
-        label: '双辽市'
-      }, {
-        value: '伊通县',
-        label: '伊通县'
-      }],
       // 表单参数
       form: {},
       // 表单校验
@@ -862,15 +798,15 @@ export default {
         projectName: [
           {required: true, message: "项目名称不能为空", trigger: "blur"}
         ],
-        territoriality: [
+       /* territoriality: [
           {required: true, message: "属地辖区不能为空", trigger: ["blur", "change"]}
-        ],
-        principal: [
+        ],*/
+        /*principal: [
           {required: true, message: "负责人不能为空", trigger: "blur"}
-        ],
-        constructionSite: [
+        ],*/
+        /*constructionSite: [
           {required: true, message: "建设地点不能为空", trigger: "blur"}
-        ],
+        ],*/
         nature: [
           {required: true, message: "在建性质不能为空", trigger: "blur"}
         ],
@@ -894,14 +830,14 @@ export default {
         parkLatitude: [
           {validator: checkLat, trigger: ["blur", "change"]}
         ],
-        introduction: [
-          {required: true, message: "建设内容不能为空", trigger: "blur"}
-        ],
+        // introduction: [
+        //   {required: true, message: "建设内容不能为空", trigger: "blur"}
+        // ],
         cameraSystem: [
           {required: true, message: "所属分类不能为空", trigger: "change"}
         ],
         phone: [
-          {required: true, message: "联系电话不能为空", trigger: "blur"},
+          // {required: true, message: "联系电话不能为空", trigger: "blur"},
           {validator: validPhoneMobile, trigger: 'blur'}
         ],
         totalInvest: [
@@ -941,6 +877,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');
     },
@@ -1103,7 +1044,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");
     },
@@ -1123,9 +1072,14 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
+      this.queryParams.deptName = 0;
       this.resetForm("queryForm");
       this.handleQuery();
     },
+    // 点击按钮修改是否只查询本级部门用户
+    changeQueryType() {
+      this.queryParams.deptName = this.queryParams.deptName === 0 ? 1 : 0;
+    },
     resetHistoryQuery() {
       this.resetForm("historyForm");
       this.handleHistoryQuery();
@@ -1163,6 +1117,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

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

@@ -1,12 +1,18 @@
 package com.sooka.sponest.data.generalbusiness.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.TableDataInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.system.api.domain.SysUser;
 import com.sooka.sponest.data.generalbusiness.domain.CenterdataTKeyProjects;
+import com.sooka.sponest.data.generalbusiness.domain.CenterdataTKeyProjectsBo;
 import com.sooka.sponest.data.generalbusiness.service.ICenterdataTKeyProjectsService;
 import com.sooka.sponest.data.utils.ExcelUtil;
 import io.swagger.annotations.Api;
@@ -18,7 +24,11 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 重点工程Controller
@@ -151,4 +161,45 @@ 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(@RequestBody List<CenterdataTKeyProjects> centerdataTKeyProjects) {
+        for (CenterdataTKeyProjects projects : centerdataTKeyProjects){
+            if (StringUtils.isEmpty(projects.getProjectId())||StringUtils.isEmpty(projects.getProjectName())||StringUtils.isEmpty(projects.getLongitude())||
+                    StringUtils.isEmpty(projects.getLatitude())|| StringUtils.isEmpty(projects.getNature())){
+                return AjaxResult.error(5002, "缺少必要参数");
+            }
+            if (projects.getEndTime()!=null&&projects.getStartTime()!=null){
+                if (projects.getEndTime().compareTo(projects.getStartTime())<0){
+                    return AjaxResult.error(5003,"计划竣工时间不能小于开复工时间");
+                }
+            }
+        }
+        int result;
+        try {
+            result = centerdataTKeyProjectsService.receivedMessage(centerdataTKeyProjects);
+        }catch (Exception e){
+            logger.error(e.getMessage());
+            return AjaxResult.error("数据格式错误");
+        }
+        return toAjax(result);
+    }
+
+    /*
+    * 推送报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 14:58
+    */
+    @ApiOperation(value = "推送报文", notes = "推送报文")
+    @GetMapping("/receivedMessage/{ids}")
+    public R pushMessage(@PathVariable String[] ids) {
+        return centerdataTKeyProjectsService.pushMessage(ids);
+    }
+
 }

+ 133 - 2
src/main/java/com/sooka/sponest/data/generalbusiness/domain/CenterdataTKeyProjects.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
 import java.util.Date;
@@ -33,6 +34,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "属地辖区", required = false)
     @Excel(name = "属地辖区")
+//    @NotBlank(message = "属地辖区不能为空")
     private String territoriality;
 
     /**
@@ -118,6 +120,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "负责人", required = false)
     @Excel(name = "负责人")
+//    @NotBlank(message = "负责人不能为空")
     private String principal;
 
     /**
@@ -125,11 +128,13 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "联系电话", required = false)
     @Excel(name = "联系电话")
+//    @NotBlank(message = "联系电话不能为空")
     private String phone;
 
     /**
      * 开复工时间
      */
+    @DateTimeFormat(pattern = "yyyy-MM")
     @JsonFormat(pattern = "yyyy-MM")
     @Excel(name = "开复工时间",dateFormat = "yyyy-MM")
     private Date startTime;
@@ -137,6 +142,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
     /**
      * 计划竣工时间
      */
+    @DateTimeFormat(pattern = "yyyy-MM")
     @JsonFormat(pattern = "yyyy-MM")
     @Excel(name = "计划竣工时间",dateFormat = "yyyy-MM")
     private Date endTime;
@@ -146,6 +152,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "建设地点", required = false)
     @Excel(name = "建设地点")
+//    @NotBlank(message = "建设地点不能为空")
     private String constructionSite;
 
     /**
@@ -153,6 +160,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "在建性质", required = false)
     @Excel(name = "在建性质",dictType = "centerdata_zj_nature")
+    @NotBlank(message = "在建性质不能为空")
     private String nature;
 
     /**
@@ -238,7 +246,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "建设内容", required = false)
     @Excel(name = "建设内容")
-    @NotBlank(message = "建设内容不能为空")
+//    @NotBlank(message = "建设内容不能为空")
     private String introduction;
 
     public Long getDeptId() {
@@ -259,7 +267,7 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
      */
     @ApiModelProperty(value = "所属部门", required = false)
     @Excel(name = "所属部门")
-    @NotBlank(message = "所属部门不能为空")
+//    @NotBlank(message = "所属部门不能为空")
     private String deptName;
 
     /**
@@ -268,6 +276,129 @@ public class CenterdataTKeyProjects extends BaseBusinessEntity {
     @ApiModelProperty(value = "附件", required = false)
     private String photoId;
 
+    @ApiModelProperty(value = "续建项目去年底前累计投资(万元)", required = false)
+    @Excel(name = "续建项目去年底前累计投资(万元)")
+    private String continuationProjectInvest;
+
+    @DateTimeFormat(pattern = "yyyy-MM")
+    @JsonFormat(pattern = "yyyy-MM")
+    @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;
+
+    @DateTimeFormat(pattern = "yyyy-MM")
+    @JsonFormat(pattern = "yyyy-MM")
+    @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;
     }

+ 698 - 0
src/main/java/com/sooka/sponest/data/generalbusiness/domain/CenterdataTKeyProjectsBo.java

@@ -0,0 +1,698 @@
+package com.sooka.sponest.data.generalbusiness.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.annotation.Excel;
+import com.sooka.sponest.data.base.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 重点工程对象 centerdata_t_key_projects
+ *
+ * @author ruoyi
+ * @date 2023-04-23
+ */
+@ApiModel(description = "数据中心重点工程实体类对象")
+public class CenterdataTKeyProjectsBo extends BaseBusinessEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private String id;
+
+    /**
+     * 属地辖区
+     */
+    @ApiModelProperty(value = "属地辖区", required = false)
+    @Excel(name = "属地辖区")
+    @NotBlank(message = "属地辖区不能为空")
+    private String territoriality;
+
+    /**
+     * 所属开发区
+     */
+    @ApiModelProperty(value = "所属开发区", required = false)
+   // @Excel(name = "所属开发区",dictType = "centerdata_park")
+    private String park;
+
+
+
+    @Excel(name = "所属开发区")
+    private String parkLabel;
+
+    /**
+     * 开发区中心点经度
+     */
+    @ApiModelProperty(value = "开发区中心点经度", required = false)
+    @Excel(name = "开发区中心点经度")
+    private String parkLongitude;
+
+    /**
+     * 开发区中心点纬度
+     */
+    @ApiModelProperty(value = "开发区中心点纬度", required = false)
+    @Excel(name = "开发区中心点纬度")
+    private String parkLatitude;
+
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(value = "项目名称", required = false)
+    @Excel(name = "项目名称")
+    @NotBlank(message = "项目名称不能为空")
+    private String projectName;
+
+    /**
+     * 项目环境
+     */
+    @ApiModelProperty(value = "项目环境", required = false)
+    @Excel(name = "项目环境",dictType = "centerdata_environment")
+    private String environment;
+
+    /**
+     * 法人单位
+     */
+    @ApiModelProperty(value = "法人单位", required = false)
+    @Excel(name = "法人单位")
+    private String legalUnit;
+
+    /**
+     * 工程目标
+     */
+    @ApiModelProperty(value = "工程目标", required = false)
+//    @Excel(name = "工程目标")
+//    @NotBlank(message = "工程目标不能为空")
+    private String projectTarget;
+
+    /**
+     * 工程类型
+     */
+    @ApiModelProperty(value = "工程类型", required = false)
+//    @Excel(name = "工程类型")
+    private String projectType;
+
+    /**
+     * 工程属地
+     */
+    @ApiModelProperty(value = "工程属地", required = false)
+//    @Excel(name = "工程属地" , dictType = "forest_lin_level")
+//    @NotBlank(message = "工程属地不能为空")
+    private String projectLevel;
+
+    /**
+     * 建设单位
+     */
+    @ApiModelProperty(value = "建设单位", required = false)
+//    @Excel(name = "建设单位")
+    private String constructionUnit;
+
+    /**
+     * 负责人
+     */
+    @ApiModelProperty(value = "负责人", required = false)
+    @Excel(name = "负责人")
+    @NotBlank(message = "负责人不能为空")
+    private String principal;
+
+    /**
+     * 联系电话
+     */
+    @ApiModelProperty(value = "联系电话", required = false)
+    @Excel(name = "联系电话")
+    @NotBlank(message = "联系电话不能为空")
+    private String phone;
+
+    /**
+     * 开复工时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM")
+    @JsonFormat(pattern = "yyyy-MM")
+    @Excel(name = "开复工时间",dateFormat = "yyyy-MM")
+    private String startTime;
+
+    /**
+     * 计划竣工时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM")
+    @JsonFormat(pattern = "yyyy-MM")
+    @Excel(name = "计划竣工时间",dateFormat = "yyyy-MM")
+    private String endTime;
+
+    /**
+     * 建设地点
+     */
+    @ApiModelProperty(value = "建设地点", required = false)
+    @Excel(name = "建设地点")
+    @NotBlank(message = "建设地点不能为空")
+    private String constructionSite;
+
+    /**
+     * 在建性质
+     */
+    @ApiModelProperty(value = "在建性质", required = false)
+    @Excel(name = "在建性质",dictType = "centerdata_zj_nature")
+    @NotBlank(message = "在建性质不能为空")
+    private String nature;
+
+    /**
+     * 总投资
+     */
+    @ApiModelProperty(value = "总投资", required = false)
+    @Excel(name = "总投资(万元)")
+    private String totalInvest;
+
+    /**
+     * 年度计划投资
+     */
+    @ApiModelProperty(value = "年度计划投资", required = false)
+    @Excel(name = "年度计划投资(万元)")
+    private String yearInvest;
+
+    /**
+     * 产业类别
+     */
+    @ApiModelProperty(value = "产业类别", required = false)
+    @Excel(name = "产业类别",dictType = "centerdata_industry_type")
+    private String industryType;
+
+    /**
+     * 项目秘书
+     */
+    @ApiModelProperty(value = "项目秘书", required = false)
+    @Excel(name = "项目秘书")
+    private String secretary;
+
+    /**
+     * 项目秘书职务
+     */
+    @ApiModelProperty(value = "项目秘书职务", required = false)
+    @Excel(name = "项目秘书职务")
+    private String secretaryDuties;
+
+    /**
+     * 项目秘书手机
+     */
+    @ApiModelProperty(value = "项目秘书手机", required = false)
+    @Excel(name = "项目秘书手机")
+    private String secretaryPhone;
+
+    /**
+     * 建筑面积
+     */
+    @ApiModelProperty(value = "建筑面积", required = false)
+//    @Excel(name = "建筑面积")
+    private String constructionArea;
+
+    /**
+     * 经度
+     */
+    @ApiModelProperty(value = "经度", required = false)
+    @Excel(name = "经度")
+    @NotBlank(message = "经度不能为空")
+    private String longitude;
+
+    /**
+     * 纬度
+     */
+    @ApiModelProperty(value = "纬度", required = false)
+    @Excel(name = "纬度")
+    @NotBlank(message = "纬度不能为空")
+    private String latitude;
+
+    /**
+     * 所属分类
+     */
+    @ApiModelProperty(value = "所属分类", required = false)
+//    @Excel(name = "所属分类" , dictType = "camera_system")
+//    @NotBlank(message = "所属分类不能为空")
+    private String cameraSystem;
+
+    /**
+     * 显示排序
+     */
+    private Long orderNum;
+
+    /**
+     * 工程简介
+     */
+    @ApiModelProperty(value = "建设内容", required = false)
+    @Excel(name = "建设内容")
+    @NotBlank(message = "建设内容不能为空")
+    private String introduction;
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    /**
+     * 所属部门id
+     */
+    private Long deptId;
+
+    /**
+     * 所属部门
+     */
+    @ApiModelProperty(value = "所属部门", required = false)
+    @Excel(name = "所属部门")
+//    @NotBlank(message = "所属部门不能为空")
+    private String deptName;
+
+    /**
+     * 图片地址
+     */
+    @ApiModelProperty(value = "附件", required = false)
+    private String photoId;
+
+    @ApiModelProperty(value = "续建项目去年底前累计投资(万元)", required = false)
+    @Excel(name = "续建项目去年底前累计投资(万元)")
+    private String continuationProjectInvest;
+
+    @DateTimeFormat(pattern = "yyyy-MM")
+    @JsonFormat(pattern = "yyyy-MM")
+    @ApiModelProperty(value = "续建项目首次开工时间", required = false)
+    @Excel(name = "续建项目首次开工时间")
+    private String 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;
+
+    @DateTimeFormat(pattern = "yyyy-MM")
+    @JsonFormat(pattern = "yyyy-MM")
+    @ApiModelProperty(value = "实际竣工时间", required = false)
+    @Excel(name = "实际竣工时间")
+    private String 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 String getContinuationProjectStartTime() {
+        return continuationProjectStartTime;
+    }
+
+    public void setContinuationProjectStartTime(String continuationProjectStartTime) {
+        this.continuationProjectStartTime = continuationProjectStartTime;
+    }
+
+    public String getRealityCompletedTime() {
+        return realityCompletedTime;
+    }
+
+    public void setRealityCompletedTime(String realityCompletedTime) {
+        this.realityCompletedTime = realityCompletedTime;
+    }
+
+    public String getTerritoriality() {
+        return territoriality;
+    }
+
+    public void setTerritoriality(String territoriality) {
+        this.territoriality = territoriality;
+    }
+
+    public String getPark() {
+        return park;
+    }
+
+    public void setPark(String park) {
+        this.park = park;
+    }
+
+    public String getParkLongitude() {
+        return parkLongitude;
+    }
+
+    public void setParkLongitude(String parkLongitude) {
+        this.parkLongitude = parkLongitude;
+    }
+
+    public String getParkLatitude() {
+        return parkLatitude;
+    }
+
+    public void setParkLatitude(String parkLatitude) {
+        this.parkLatitude = parkLatitude;
+    }
+
+    public String getEnvironment() {
+        return environment;
+    }
+
+    public void setEnvironment(String environment) {
+        this.environment = environment;
+    }
+
+    public String getLegalUnit() {
+        return legalUnit;
+    }
+
+    public void setLegalUnit(String legalUnit) {
+        this.legalUnit = legalUnit;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getNature() {
+        return nature;
+    }
+
+    public void setNature(String nature) {
+        this.nature = nature;
+    }
+
+    public String getTotalInvest() {
+        return totalInvest;
+    }
+
+    public void setTotalInvest(String totalInvest) {
+        this.totalInvest = totalInvest;
+    }
+
+    public String getYearInvest() {
+        return yearInvest;
+    }
+
+    public void setYearInvest(String yearInvest) {
+        this.yearInvest = yearInvest;
+    }
+
+    public String getIndustryType() {
+        return industryType;
+    }
+
+    public void setIndustryType(String industryType) {
+        this.industryType = industryType;
+    }
+
+    public String getSecretary() {
+        return secretary;
+    }
+
+    public void setSecretary(String secretary) {
+        this.secretary = secretary;
+    }
+
+    public String getSecretaryDuties() {
+        return secretaryDuties;
+    }
+
+    public void setSecretaryDuties(String secretaryDuties) {
+        this.secretaryDuties = secretaryDuties;
+    }
+
+    public String getSecretaryPhone() {
+        return secretaryPhone;
+    }
+
+    public void setSecretaryPhone(String secretaryPhone) {
+        this.secretaryPhone = secretaryPhone;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    private List<String> deviceList;
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectTarget(String projectTarget) {
+        this.projectTarget = projectTarget;
+    }
+
+    public String getProjectTarget() {
+        return projectTarget;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public String getProjectType() {
+        return projectType;
+    }
+
+    public void setProjectLevel(String projectLevel) {
+        this.projectLevel = projectLevel;
+    }
+
+    public String getProjectLevel() {
+        return projectLevel;
+    }
+
+    public void setConstructionUnit(String constructionUnit) {
+        this.constructionUnit = constructionUnit;
+    }
+
+    public String getConstructionUnit() {
+        return constructionUnit;
+    }
+
+    public void setPrincipal(String principal) {
+        this.principal = principal;
+    }
+
+    public String getPrincipal() {
+        return principal;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhotoId(String photoId) {
+        this.photoId = photoId;
+    }
+
+    public String getPhotoId() {
+        return photoId;
+    }
+
+    public void setConstructionSite(String constructionSite) {
+        this.constructionSite = constructionSite;
+    }
+
+    public String getConstructionSite() {
+        return constructionSite;
+    }
+
+    public void setConstructionArea(String constructionArea) {
+        this.constructionArea = constructionArea;
+    }
+
+    public String getConstructionArea() {
+        return constructionArea;
+    }
+
+    public void setLongitude(String longitude) {
+        this.longitude = longitude;
+    }
+
+    public String getLongitude() {
+        return longitude;
+    }
+
+    public void setLatitude(String latitude) {
+        this.latitude = latitude;
+    }
+
+    public String getLatitude() {
+        return latitude;
+    }
+
+    public void setCameraSystem(String cameraSystem) {
+        this.cameraSystem = cameraSystem;
+    }
+
+    public String getCameraSystem() {
+        return cameraSystem;
+    }
+
+    public Long getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Long orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public void setIntroduction(String introduction) {
+        this.introduction = introduction;
+    }
+
+    public String getIntroduction() {
+        return introduction;
+    }
+
+    public List<String> getDeviceList() {
+        return deviceList;
+    }
+
+    public void setDeviceList(List<String> deviceList) {
+        this.deviceList = deviceList;
+    }
+
+    public String getParkLabel() {
+        return parkLabel;
+    }
+
+    public void setParkLabel(String parkLabel) {
+        this.parkLabel = parkLabel;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("projectName", getProjectName())
+                .append("projectTarget", getProjectTarget())
+                .append("projectType", getProjectType())
+                .append("projectLevel", getProjectLevel())
+                .append("constructionUnit", getConstructionUnit())
+                .append("principal", getPrincipal())
+                .append("phone", getPhone())
+                .append("constructionSite", getConstructionSite())
+                .append("constructionArea", getConstructionArea())
+                .append("longitude", getLongitude())
+                .append("latitude", getLatitude())
+                .append("cameraSystem", getCameraSystem())
+                .append("deptId", getDeptId())
+                .append("deptName", getDeptName())
+                .append("introduction", getIntroduction())
+                .append("photoId", getPhotoId())
+                .toString();
+    }
+}

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

@@ -51,4 +51,28 @@ public interface CenterdataTKeyProjectsMapper {
      * @return 结果
      */
     int deleteCenterdataTKeyProjectsByIds(String[] ids);
+
+    /*
+    * 按重点工程id查询最新一条进度图
+    *
+    * @author 韩福成
+    * @date 2024/1/18 15:23
+    */
+    String getSelectScheduleById(String id);
+
+    /*
+    * 查询项目id集合
+    *
+    * @author 韩福成
+    * @date 2024/4/2 9:56
+    */
+    List<String> getProjectId();
+
+    /*
+    * 按项目id修改重点工程
+    *
+    * @author 韩福成
+    * @date 2024/4/2 10:06
+    */
+    int updateByProjectId(CenterdataTKeyProjects centerdataTKeyProjects);
 }

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

@@ -1,5 +1,7 @@
 package com.sooka.sponest.data.generalbusiness.service;
 
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysUser;
 import com.sooka.sponest.data.generalbusiness.domain.CenterdataTKeyProjects;
 
 import java.util.List;
@@ -51,4 +53,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);
 }

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

@@ -1,20 +1,29 @@
 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;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.SysUser;
 import com.sooka.sponest.data.base.service.impl.BaseServiceImpl;
 import com.sooka.sponest.data.generalbusiness.domain.CenterdataTKeyProjects;
 import com.sooka.sponest.data.generalbusiness.mapper.CenterdataTKeyProjectsMapper;
 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 +129,69 @@ public class CenterdataTKeyProjectsServiceImpl extends BaseServiceImpl implement
         }
         return centerdataTKeyProjectsMapper.deleteCenterdataTKeyProjectsByIds(ids);
     }
+
+    /*
+    * 接收报文
+    *
+    * @author 韩福成
+    * @date 2024/1/18 14:45
+    */@Override
+    public int receivedMessage(List<CenterdataTKeyProjects> centerdataTKeyProjects) {
+        logger.info("token=========================="+ SecurityUtils.getToken());
+        List<String> project = centerdataTKeyProjectsMapper.getProjectId();
+        int i = 0;
+//        LoginUser user = tokenService.getLoginUser(SecurityUtils.getToken());
+        logger.info("user=========================="+ SecurityUtils.getLoginUser());
+        for (CenterdataTKeyProjects projects : centerdataTKeyProjects){
+            projects.setMessage(JSON.toJSONString(projects));
+            if (project.contains(projects.getProjectId())){
+                //需求要求建设地点为空不修改
+                boolean matches = projects.getConstructionSite().matches(".*\\s{2,}.*");
+                if (matches){
+                    projects.setConstructionSite(null);
+                }
+                projects.setUpdateBy(SecurityUtils.getUserId());
+                projects.setUpdateTime(DateUtils.getNowDate());
+                projects.setUpdateName( SecurityUtils.getLoginUser().getSysUser().getNickName());
+                i = centerdataTKeyProjectsMapper.updateByProjectId(projects);
+            }else {
+                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);
+            }
+        }
+        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);
+            List<String> schedule = new ArrayList<>();
+            if (schedulePictures!=null){
+                String[] schedules = schedulePictures.split(",");
+                for (String pictures : schedules){
+                    String picture = pictures.substring(pictures.indexOf("group1"));
+                    schedule.add(picture);
+                }
+            }
+            map.put("schedulePictures", schedule);
+            map.put("projectId",centerdataTKeyProjects.getProjectId());
+            list.add(map);
+        }
+        return SpringUtils.getBean(RemoteExchangeService.class).pushMessage(list);
+    }
 }

+ 1 - 1
src/main/resources/mapper/commandcenter/CommandCentreMapper.xml

@@ -176,7 +176,7 @@
                 AND project_level = #{params.projectLevel}
             </if>
             <if test="params.nature != null and params.nature != ''"><!--在建性质-->
-                AND nature in (${params.nature})
+                AND nature = #{params.nature}
             </if>
         </where>
         GROUP BY a.id

+ 122 - 4
src/main/resources/mapper/generalbusiness/CenterdataTKeyProjectsMapper.xml

@@ -46,12 +46,22 @@
         <result property="secretaryDuties" column="secretary_duties"/>
         <result property="secretaryPhone" column="secretary_phone"/>
         <result property="parkLabel" column="parkLabel"/>
+        <result property="continuationProjectInvest" column="continuation_project_invest"/>
+        <result property="continuationProjectStartTime" column="continuation_project_start_time"/>
+        <result property="joinStatisticalBank" column="join_statistical_bank"/>
+        <result property="joinStatistical" column="join_statistical"/>
+        <result property="joinStatisticalInvest" column="join_statistical_invest"/>
+        <result property="thisYearCumulativeInvestment" column="thisyear_cumulative_investment"/>
+        <result property="realityCompletedTime" column="reality_completed_time"/>
+        <result property="springStartProject" column="spring_start_project"/>
+        <result property="projectId" column="project_id"/>
     </resultMap>
 
     <sql id="selectCenterdataTKeyProjectsVo">
         select id, project_name, project_target, project_type, project_level, construction_unit, principal, phone, construction_site, construction_area, longitude, latitude, camera_system, dept_id, dept_name, order_num, introduction,
         photo_id, create_time, create_by, create_name, update_time, update_by, update_name, territoriality, park, park_longitude, park_latitude, environment, legal_unit, start_time, end_time, nature, total_invest, year_invest, industry_type,
-        secretary, secretary_duties, secretary_phone from centerdata_t_key_projects
+        secretary, secretary_duties, secretary_phone,project_id,continuation_project_invest,continuation_project_start_time,join_statistical_bank,join_statistical,join_statistical_invest,thisyear_cumulative_investment,reality_completed_time,spring_start_project
+        from centerdata_t_key_projects
     </sql>
 
     <select id="selectCenterdataTKeyProjectsList" parameterType="CenterdataTKeyProjects"
@@ -80,9 +90,16 @@
             <if test="longitude != null  and longitude != ''">and longitude = #{longitude}</if>
             <if test="latitude != null  and latitude != ''">and latitude = #{latitude}</if>
             <if test="cameraSystem != null  and cameraSystem != ''">and camera_system = #{cameraSystem}</if>
-            <if test="deptId != null  and deptId != ''">and dept_id = #{deptId}</if>
+            <if test="deptId != null">
+                <choose>
+                    <when test="deptName != null and deptName == 0">
+                        and FIND_IN_SET( #{deptId}, CONCAT( d.ancestors, ",", d.dept_id) )
+                    </when>
+                    <otherwise>and d.dept_id = #{deptId}</otherwise>
+                </choose>
+            </if>
             <if test="introduction != null  and introduction != ''">and introduction = #{introduction}</if>
-            <if test="territoriality != null  and territoriality != ''">and territoriality = #{territoriality}</if>
+            <if test="territoriality != null  and territoriality != ''">and territoriality like concat('%', #{territoriality},'%')</if>
             <if test="park != null  and park != ''">and park = #{park}</if>
             ${params.dataScope}
         </where>
@@ -136,6 +153,16 @@
             <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="continuationProjectInvest != null">continuation_project_invest,</if>
+            <if test="continuationProjectStartTime != null">continuation_project_start_time,</if>
+            <if test="joinStatisticalBank != null">join_statistical_bank,</if>
+            <if test="joinStatistical != null">join_statistical,</if>
+            <if test="joinStatisticalInvest != null">join_statistical_invest,</if>
+            <if test="thisYearCumulativeInvestment != null">thisyear_cumulative_investment,</if>
+            <if test="realityCompletedTime != null">reality_completed_time,</if>
+            <if test="springStartProject != null">spring_start_project,</if>
+            <if test="projectId != null">project_id,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -177,6 +204,16 @@
             <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="continuationProjectInvest != null">#{continuationProjectInvest},</if>
+            <if test="continuationProjectStartTime != null">#{continuationProjectStartTime},</if>
+            <if test="joinStatisticalBank != null">#{joinStatisticalBank},</if>
+            <if test="joinStatistical != null">#{joinStatistical},</if>
+            <if test="joinStatisticalInvest != null">#{joinStatisticalInvest},</if>
+            <if test="thisYearCumulativeInvestment != null">#{thisYearCumulativeInvestment},</if>
+            <if test="realityCompletedTime != null">#{realityCompletedTime},</if>
+            <if test="springStartProject != null">#{springStartProject},</if>
+            <if test="projectId != null">#{projectId},</if>
         </trim>
     </insert>
 
@@ -221,6 +258,15 @@
             <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>
+            <if test="continuationProjectInvest != null">continuation_project_invest = #{continuationProjectInvest},</if>
+            <if test="continuationProjectStartTime != null">continuation_project_start_time = #{continuationProjectStartTime},</if>
+            <if test="joinStatisticalBank != null">join_statistical_bank = #{joinStatisticalBank},</if>
+            <if test="joinStatistical != null">join_statistical = #{joinStatistical},</if>
+            <if test="joinStatisticalInvest != null">join_statistical_invest = #{joinStatisticalInvest},</if>
+            <if test="thisYearCumulativeInvestment != null">thisyear_cumulative_investment = #{thisYearCumulativeInvestment},</if>
+            <if test="realityCompletedTime != null">reality_completed_time = #{realityCompletedTime},</if>
+            <if test="springStartProject != null">spring_start_project = #{springStartProject},</if>
         </trim>
         where id = #{id}
     </update>
@@ -231,4 +277,76 @@
             #{id}
         </foreach>
     </delete>
-</mapper>
+
+    <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>
+
+    <select id="getProjectId" parameterType="String" resultType="java.lang.String">
+        SELECT project_id projectId from centerdata_t_key_projects
+    </select>
+
+    <update id="updateByProjectId" parameterType="CenterdataTKeyProjects">
+        update centerdata_t_key_projects
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="projectName != null">project_name = #{projectName},</if>
+            <if test="projectTarget != null">project_target = #{projectTarget},</if>
+            <if test="projectType != null">project_type = #{projectType},</if>
+            <if test="projectLevel != null">project_level = #{projectLevel},</if>
+            <if test="constructionUnit != null">construction_unit = #{constructionUnit},</if>
+            <if test="principal != null">principal = #{principal},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="constructionSite != null">construction_site = #{constructionSite},</if>
+            <if test="constructionArea != null">construction_area = #{constructionArea},</if>
+            <if test="longitude != null">longitude = #{longitude},</if>
+            <if test="latitude != null">latitude = #{latitude},</if>
+            <if test="cameraSystem != null">camera_system = #{cameraSystem},</if>
+            <if test="deptId != null and deptId != ''">dept_id = #{deptId},</if>
+            <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
+            <if test="photoId != null">photo_id = #{photoId},</if>
+            <if test="orderNum != null">order_num = #{orderNum},</if>
+            <if test="introduction != null">introduction = #{introduction},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createName != null">create_name = #{createName},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateName != null">update_name = #{updateName},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="territoriality != null">territoriality = #{territoriality},</if>
+            <if test="park != null">park = #{park},</if>
+            <if test="parkLongitude != null">park_longitude = #{parkLongitude},</if>
+            <if test="parkLatitude != null">park_latitude = #{parkLatitude},</if>
+            <if test="environment != null">environment = #{environment},</if>
+            <if test="legalUnit != null">legal_unit = #{legalUnit},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="nature != null">nature = #{nature},</if>
+            <if test="totalInvest != null">total_invest = #{totalInvest},</if>
+            <if test="yearInvest != null">year_invest = #{yearInvest},</if>
+            <if test="industryType != null">industry_type = #{industryType},</if>
+            <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>
+            <if test="continuationProjectInvest != null">continuation_project_invest = #{continuationProjectInvest},</if>
+            <if test="continuationProjectStartTime != null">continuation_project_start_time = #{continuationProjectStartTime},</if>
+            <if test="joinStatisticalBank != null">join_statistical_bank = #{joinStatisticalBank},</if>
+            <if test="joinStatistical != null">join_statistical = #{joinStatistical},</if>
+            <if test="joinStatisticalInvest != null">join_statistical_invest = #{joinStatisticalInvest},</if>
+            <if test="thisYearCumulativeInvestment != null">thisyear_cumulative_investment = #{thisYearCumulativeInvestment},</if>
+            <if test="realityCompletedTime != null">reality_completed_time = #{realityCompletedTime},</if>
+            <if test="springStartProject != null">spring_start_project = #{springStartProject},</if>
+        </trim>
+        where project_id = #{projectId}
+    </update>
+</mapper>