Sfoglia il codice sorgente

统计查看详情

LuChongMei 6 giorni fa
parent
commit
43493bedf6

+ 24 - 4
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/lyservice/controller/LyServiceController.java

@@ -124,8 +124,16 @@ public class LyServiceController {
 			end = year+"-"+ month + "-" + day;
 			start =year+"-"+month+"-01";
 		}
-		HashMap<String,Object> result = lyServiceService.getProgressStatistics(start,end);
-		return ResponseEntity.ok ( result );
+		UserDTO userDTO = UserUtils.getCurrentUserDTO();
+		//办理部门
+		if(userDTO.getRoleIds().equals("1910175949166673921")){
+			HashMap<String,Object> result = lyServiceService.getProgressStatistics2(start,end,userDTO.getLoginName());
+			return ResponseEntity.ok ( result );
+		}else{
+			HashMap<String,Object> result = lyServiceService.getProgressStatistics(start,end);
+			return ResponseEntity.ok ( result );
+		}
+
 	}
 
 	/**
@@ -159,8 +167,20 @@ public class LyServiceController {
 	@ApiLog("获取挂钩干部详情数据")
 	@ApiOperation(value = "获取挂钩干部详情数据")
 	@GetMapping("getPersonInfo")
-	public ResponseEntity<List<HashMap<String,Object>>> getPersonInfo(String name,String des1,String beginTime,String endTime) {
-		List<HashMap<String,Object>> result = lyServiceService.getPersonInfo(name,des1,beginTime,endTime);
+	public ResponseEntity<List<HashMap<String,Object>>> getPersonInfo(String name,String des1,String beginTime,String endTime,String state) {
+		List<HashMap<String,Object>> result = lyServiceService.getPersonInfo(name,des1,beginTime,endTime,state);
+		return ResponseEntity.ok ( result );
+	}
+
+	/**
+	 * 获取企业走访详情数据
+	 */
+
+	@ApiLog("获取企业走访详情数据")
+	@ApiOperation(value = "获取企业走访详情数据")
+	@GetMapping("getCompanyInfo")
+	public ResponseEntity<List<HashMap<String,Object>>> getCompanyInfo(String name,String des1,String beginTime,String endTime,String state) {
+		List<HashMap<String,Object>> result = lyServiceService.getCompanyInfo(name,des1,beginTime,endTime,state);
 		return ResponseEntity.ok ( result );
 	}
 

+ 9 - 1
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/lyservice/mapper/LyServiceMapper.java

@@ -49,5 +49,13 @@ public interface LyServiceMapper extends BaseMapper<LyService> {
 
     List<HashMap<String, Object>> getAreaInfo();
 
-    List<HashMap<String, Object>> getPersonInfo(String name,String des1,String beginTime,String endTime);
+    List<HashMap<String, Object>> getPersonInfo(String name,String des1,String beginTime,String endTime,String state);
+
+    HashMap<String, Object> getAllSum2(String loginName);
+
+    HashMap<String, Object> getFinishSum2(String start, String end, String loginName);
+
+    HashMap<String, Object> getProgressMonth2(String start, String end, String loginName);
+
+    List<HashMap<String, Object>> getCompanyInfo(String name, String des1, String beginTime, String endTime,String state);
 }

+ 58 - 3
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/lyservice/mapper/xml/LyServiceMapper.xml

@@ -51,6 +51,11 @@
 		WHERE del_flag = 0 ;
 	</select>
 
+	<select id="getAllSum2" resultType="Map">
+		SELECT count(id) allqy,COUNT(DISTINCT des13) allper FROM ly_enterprise_info
+		WHERE del_flag = 0 AND des13 = #{loginName} ;
+	</select>
+
 	<select id="getFinishSum" resultType="Map">
 		SELECT count(a.id) finishqy,COUNT(DISTINCT des13) finishper
 		FROM ly_enterprise_info a
@@ -59,12 +64,32 @@
 		AND DATE_FORMAT(b.create_date, '%Y-%m-%d') >= #{start} AND DATE_FORMAT(b.create_date, '%Y-%m-%d') &lt;= #{end};
 	</select>
 
+	<select id="getFinishSum2" resultType="Map">
+		SELECT count(a.id) finishqy,COUNT(DISTINCT des13) finishper
+		FROM ly_enterprise_info a
+		LEFT JOIN ly_service b ON a.id = b.qy_id
+		WHERE a.del_flag = 0 AND qy_id IS NOT NULL
+		AND des13 = #{loginName}
+		AND DATE_FORMAT(b.create_date, '%Y-%m-%d') >= #{start} AND DATE_FORMAT(b.create_date, '%Y-%m-%d') &lt;= #{end};
+	</select>
+
 	<select id="getProgressMonth" resultType="Map" parameterType="String">
-		SELECT COUNT(*) allque, COUNT(IF(states != 0 or states IS NULL ,1,NULL )) AS unfinish
-		FROM dzf_question_detil WHERE del_flag = 0
+		SELECT COUNT(*) allque, COUNT(CASE WHEN states != 0 THEN 1 END) AS unfinish
+		FROM dzf_question_detil WHERE del_flag = 0 AND states IS NOT NULL
 		AND DATE_FORMAT(create_date, '%Y-%m-%d') >= #{start} AND DATE_FORMAT(create_date, '%Y-%m-%d') &lt;= #{end};
 	</select>
 
+	<select id="getProgressMonth2" resultType="Map"  parameterType="String">
+		SELECT COUNT(*) allque, COUNT(CASE WHEN states != 0 THEN 1 END) AS unfinish
+		FROM
+		(SELECT record_id FROM dzf_question_op_record
+		WHERE del_flag = 0 AND FIND_IN_SET(#{userName},des3)
+		AND DATE_FORMAT(create_date, '%Y-%m-%d') >= #{start}  AND DATE_FORMAT(create_date, '%Y-%m-%d') &lt;= #{end}
+		GROUP BY record_id) b
+		LEFT JOIN dzf_question_detil a ON a.id = b.record_id
+		WHERE del_flag = 0 AND states IS NOT NULL;
+	</select>
+
 	<select id="getPerson" resultType="Map">
 		SELECT des1, COUNT(DISTINCT des13) AS perNum FROM ly_enterprise_info WHERE del_flag = 0 AND des13 IS NOT NULL GROUP BY des1;
 	</select>
@@ -74,7 +99,7 @@
 	</select>
 
 	<select id="getPersonInfo" resultType="Map">
-		SELECT COUNT(DISTINCT b.id) sum,des13,des14 as bz5 FROM ly_enterprise_info a
+		SELECT COUNT(DISTINCT b.id) sum,des13,des14 as bz5,des1 FROM ly_enterprise_info a
 		LEFT JOIN
 		(SELECT * FROM ly_service WHERE del_flag = 0
 		<if test="beginTime != ''">
@@ -88,8 +113,38 @@
 		<if test="name != ''">
 			AND name LIKE CONCAT('%', #{name}, '%')
 		</if>
+		<if test="state == 1">
+			AND b.id IS NULL
+		</if>
+		<if test="state == 2">
+			AND b.id IS NOT NULL
+		</if>
 		GROUP BY des13
 		ORDER BY sum DESC;
 	</select>
 
+	<select id="getCompanyInfo" resultType="Map">
+		SELECT b.id AS sum,des13,des14,des1,name FROM ly_enterprise_info a
+		LEFT JOIN
+		(SELECT * FROM ly_service WHERE del_flag = 0
+		<if test="beginTime != ''">
+			AND DATE_FORMAT(create_date, '%Y-%m-%d') >= #{beginTime} AND DATE_FORMAT(create_date, '%Y-%m-%d') &lt;= #{endTime}
+		</if>
+		) b ON a.id = b.qy_id
+		WHERE a.del_flag = 0 AND des13 IS NOT NULL
+		<if test="des1 != ''">
+			AND des1 = #{des1}
+		</if>
+		<if test="name != ''">
+			AND name LIKE CONCAT('%', #{name}, '%')
+		</if>
+		<if test="state == 1">
+			AND b.id IS NULL
+		</if>
+		<if test="state == 2">
+			AND b.id IS NOT NULL
+		</if>
+		ORDER BY sum DESC;
+	</select>
+
 </mapper>

+ 63 - 2
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/lyservice/service/LyServiceService.java

@@ -110,7 +110,68 @@ public class LyServiceService extends ServiceImpl<LyServiceMapper, LyService> {
 		return baseMapper.getAreaInfo();
 	}
 
-	public List<HashMap<String, Object>> getPersonInfo(String name,String des1,String beginTime,String endTime) {
-		return baseMapper.getPersonInfo(name,des1,beginTime.substring(0,10),endTime.substring(0,10));
+	public List<HashMap<String, Object>> getPersonInfo(String name,String des1,String beginTime,String endTime,String state) {
+		return baseMapper.getPersonInfo(name,des1,beginTime.substring(0,10),endTime.substring(0,10),state);
 	}
+
+	public List<HashMap<String, Object>> getCompanyInfo(String name, String des1, String beginTime, String endTime,String state) {
+		return baseMapper.getCompanyInfo(name,des1,beginTime.substring(0,10),endTime.substring(0,10),state);
+	}
+
+	public HashMap<String, Object> getProgressStatistics2(String start, String end, String loginName) {
+		HashMap<String,Object> map = new HashMap<>();
+		// 获取总的数据
+		HashMap<String,Object> allSum = baseMapper.getAllSum2(loginName);
+		// 获取总的数据
+		HashMap<String,Object> finishSum = baseMapper.getFinishSum2(start,end,loginName);
+		// 计算占比
+		double qyAcount =  0;
+		Integer finishqy = Integer.valueOf(finishSum.get("finishqy").toString());
+		double allqy = Integer.valueOf(allSum.get("allqy").toString());
+		if(allqy != 0){
+			qyAcount = finishqy / allqy * 100;
+		}
+		// 计算占比
+		double perAcount = 0 ;
+		Integer finishPer = Integer.valueOf(finishSum.get("finishper").toString());
+		double allper = Integer.valueOf(allSum.get("allper").toString());
+		if(allper!=0){
+			perAcount = finishPer / allper * 100;
+		}
+		// 保存两位小数
+		BigDecimal bg = new BigDecimal(qyAcount);
+		double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+		BigDecimal bg2 = new BigDecimal(perAcount);
+		double f2 = bg2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+		// 走访企业
+		map.put("qyAcount", String.valueOf(f1));
+		map.put("qyFinishSum", String.valueOf(finishqy));
+		map.put("qyUnfinish", String.valueOf(100 - f1));
+		map.put("qyUnFinishSum", String.valueOf(Integer.valueOf(allSum.get("allqy").toString()) - finishqy));
+		// 走访人数
+		map.put("perFinishSum", String.valueOf(finishPer));
+		map.put("perAcount", String.valueOf(f2));
+		map.put("perUnFinishSum", String.valueOf(Integer.valueOf(allSum.get("allper").toString()) - finishPer));
+		map.put("perUnfinish", String.valueOf(100 - f2));
+		// 问题数
+		// 月份
+		HashMap<String, Object> monthNum = baseMapper.getProgressMonth2(start,end,loginName);
+		// 计算占比
+		double unAcount =  0;
+		Integer unfinish = Integer.valueOf(monthNum.get("unfinish").toString());
+		double allque = Integer.valueOf(monthNum.get("allque").toString());
+		if(allque != 0){
+			unAcount = unfinish / allque * 100;
+		}
+		BigDecimal bg3 = new BigDecimal(unAcount);
+		double f3 = bg3.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+		// 问题数
+		map.put("queFinishSum", String.valueOf(Integer.valueOf(monthNum.get("allque").toString()) - unfinish ));
+		map.put("queAcount", String.valueOf(100.0 - f3));
+		map.put("queUnFinishSum", String.valueOf(unfinish));
+		map.put("queUnfinish", String.valueOf(f3));
+		return map;
+	}
+
+
 }

+ 8 - 3
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/xml/DzfQuestionMapper.xml

@@ -28,7 +28,12 @@
 		a.create_date AS "createDate",
 		a.update_by AS "updateBy.id",
 		a.update_date AS "updateDate",
-		a.del_flag AS "delFlag"
+		a.del_flag AS "delFlag",
+
+		b.q_name AS "detailName",
+		b.q_type AS "detailType",
+		b.states AS "detailStates"
+
 	</sql>
 
 	<sql id="dzfQuestionJoins">
@@ -129,13 +134,13 @@
 		<include refid="dzfQuestionJoins2"/>
 		WHERE a.del_flag = 0 AND b.del_flag = 0 AND b.states IS NOT NULL
 		<if test="state == 999">
-			AND (b.states != 0)
+			AND b.states != 0
 		</if>
 		<if test="state != 999">
 			AND b.states = #{state}
 		</if>
 		AND DATE_FORMAT(b.create_date, '%Y-%m-%d') >= #{start}  AND DATE_FORMAT(b.create_date, '%Y-%m-%d') &lt;= #{end}
-		group by a.id
+<!--		group by a.id-->
 	</select>
 
 	<select id="findList4" resultType="com.jeeplus.question.service.dto.DzfQuestionDTO" >

+ 15 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/dto/DzfQuestionDTO.java

@@ -151,6 +151,21 @@ public class DzfQuestionDTO extends BaseDTO {
      */
 	@ExcelProperty("备用10")
 	private String des10;
+	/**
+	 * 问题名称
+	 */
+	@Query(tableColumn = "b.q_name", javaField = "detailName", type = QueryType.LIKE)
+	private String detailName;
+	/**
+	 * 问题类别
+	 */
+	@Query(tableColumn = "b.q_type", javaField = "detailType", type = QueryType.LIKE)
+	private String detailType;
+	/**
+	 * 问题状态
+	 */
+	@Query(tableColumn = "b.states", javaField = "detailStates", type = QueryType.LIKE)
+	private String detailStates;
     /**
      *子表列表
      */

+ 8 - 0
jp-ui/src/api/question/dzfQuestionService.js

@@ -37,6 +37,14 @@ export default {
     })
   },
 
+  list2: function(params) {
+  	return request({
+  		url: '/question/dzfQuestion/list2',
+  		method: 'get',
+  		params: params
+  	})
+  },
+
   getReportFinishVisit: function(start, end) {
     return request({
       url: '/question/dzfQuestion/getReportFinishVisit',

+ 9 - 0
jp-ui/src/api/service/lyServiceService.js

@@ -57,6 +57,7 @@ export default {
   		method: 'get'
   	})
   },
+
   getPersonInfo: function (params) {
     return request({
       url: '/lyservice/lyService/getPersonInfo',
@@ -65,6 +66,14 @@ export default {
     })
   },
 
+  getCompanyInfo: function (params) {
+    return request({
+      url: '/lyservice/lyService/getCompanyInfo',
+      method: 'get',
+      params: params
+    })
+  },
+
   exportTemplate: function () {
     return request({
       url: '/lyservice/lyService/import/template',

+ 28 - 18
jp-ui/src/views/modules/sys/dashboard/analysis/index.vue

@@ -259,7 +259,7 @@
         <el-row :gutter="20">
           <el-col :span="4">
             <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}">
-              <div class="footer-fast-1-1">
+              <div class="footer-fast-1-1" @click="goInfo(0,1)">
                 <p><span style="color: red;">●</span>未完成大走访人数</p>
                 <p><span style="font-size: 20px;font-weight: 700;margin-right: 10px;">{{allSum.perUnFinishSum}}</span>人
                 </p>
@@ -269,7 +269,7 @@
           </el-col>
           <el-col :span="4">
             <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}">
-              <div class="footer-fast-1-1">
+              <div class="footer-fast-1-1" @click="goInfo(0,2)">
                 <p><span style="color: #0843cd;">●</span>完成大走访人数</p>
                 <p><span style="font-size: 20px;font-weight: 700;margin-right: 10px;">{{allSum.perFinishSum}}</span>人
                 </p>
@@ -279,7 +279,7 @@
           </el-col>
           <el-col :span="4">
             <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}">
-              <div class="footer-fast-1-1">
+              <div class="footer-fast-1-1" @click="goInfo(3,1)">
                 <p><span style="color: red;">●</span>未完成大走访企业数</p>
                 <p><span style="font-size: 20px;font-weight: 700;margin-right: 10px;">{{allSum.qyUnFinishSum}}</span>个
                 </p>
@@ -289,7 +289,7 @@
           </el-col>
           <el-col :span="4">
             <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}">
-              <div class="footer-fast-1-1">
+              <div class="footer-fast-1-1" @click="goInfo(3,2)">
                 <p><span style="color: #0843cd;">●</span>完成大走访企业数</p>
                 <p><span style="font-size: 20px;font-weight: 700;margin-right: 10px;">{{allSum.qyFinishSum}}</span>个
                 </p>
@@ -298,8 +298,8 @@
             </el-card>
           </el-col>
           <el-col :span="4">
-            <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}">
-              <div class="footer-fast-1-1">
+            <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}" >
+              <div class="footer-fast-1-1" @click="goInfo(1,1)">
                 <p><span style="color: red;">●</span>未办结问题数</p>
                 <p><span style="font-size: 20px;font-weight: 700;margin-right: 10px;">{{allSum.queUnFinishSum}}</span>个
                 </p>
@@ -308,8 +308,8 @@
             </el-card>
           </el-col>
           <el-col :span="4">
-            <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}">
-              <div class="footer-fast-1-1">
+            <el-card shadow="always" :body-style="{padding: '5px',margin:'0px'}" >
+              <div class="footer-fast-1-1" @click="goInfo(2,2)">
                 <p><span style="color: #0843cd;">●</span>办结问题数</p>
                 <p><span style="font-size: 20px;font-weight: 700;margin-right: 10px;">{{allSum.queFinishSum}}</span>个
                 </p>
@@ -325,14 +325,9 @@
         </div>
       </div>
     </div>
-
-    <el-dialog title="走访" :close-on-click-modal="false" v-dialogDrag :visible.sync="visible">
-
-      <span slot="footer" class="dialog-footer">
-        <el-button size="small" @click="visible = false">关闭</el-button>
-        <!-- <el-button size="small" type="primary"  @click="doSubmit()" v-noMoreClick>确定</el-button> -->
-      </span>
-    </el-dialog>
+    <question-info ref="questionInfo"></question-info>
+    <index-info ref="indexInfo"></index-info>
+    <index-info2 ref="indexInfo2"></index-info2>
   </div>
 </template>
 
@@ -341,7 +336,10 @@
   import notifyService from "@/api/notify/notifyService";
   import lyService from "@/api/service/lyServiceService";
   import userService from "@/api/sys/userService";
-  import visitStatistics from './visitStatistics'
+  import visitStatistics from './visitStatistics';
+  import questionInfo from './questionInfo';
+  import indexInfo from './indexInfo';
+  import indexInfo2 from './indexInfo2';
   export default {
     data() {
       return {
@@ -455,7 +453,10 @@
       };
     },
     components: {
-      visitStatistics
+      visitStatistics,
+      questionInfo,
+      indexInfo,
+      indexInfo2
     },
     activated() {
 
@@ -603,6 +604,15 @@
           })
         })
       },
+      goInfo(val,state) {
+        if(val == 0){
+          this.$refs.indexInfo.init(this.value2,state)
+        }else if (val == 3){
+          this.$refs.indexInfo2.init(this.value2,state)
+        }else{
+          this.$refs.questionInfo.init(val, this.value2)
+        }
+      },
       getPageInfo() {
         bigScreenService.InfoStatistics({}).then(({
           data

+ 180 - 0
jp-ui/src/views/modules/sys/dashboard/analysis/indexInfo.vue

@@ -0,0 +1,180 @@
+<template>
+  <div class="page">
+    <el-dialog title="走访信息" :close-on-click-modal="false" v-dialogDrag :visible.sync="visible">
+      <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm"
+        @keyup.enter.native="refreshList()" @submit.native.prevent>
+        <!-- 搜索框-->
+        <el-form-item prop="des1" title="属地">
+          <el-select v-model="searchForm.des1" placeholder="请选择">
+            <el-option v-for="item in areaList" :key="item" :label="item" :value="item">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="createTime">
+          <el-date-picker size="mini" v-model="searchForm.createTime" type="daterange" align="right" unlink-panels
+            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+          <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div style="height: calc(70vh - 80px);">
+        <vxe-table border="inner" auto-resize resizable height="auto" :loading="loading" size="small"
+          ref="lyServiceTable" show-header-overflow show-overflow highlight-hover-row :menu-config="{}"
+          :print-config="{}" :export-config="{
+                remote: true,
+                filename: `走访统计${moment(new Date()).format(
+            		'YYYY-MM-DD'
+                )}`,
+                sheetName: '走访统计',
+                exportMethod: exportMethod,
+                types: ['xlsx'],
+                modes: ['current', 'selected', 'all'],
+            }" :data="dataList" :checkbox-config="{}">
+          <vxe-column type="seq" width="80" title="序号"></vxe-column>
+          <vxe-column field="bz5" title="挂钩干部">
+          </vxe-column>
+          <vxe-column field="des1" title="属地">
+          </vxe-column>
+          <vxe-column field="sum" title="走访次数">
+          </vxe-column>
+        </vxe-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="visible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import lyServiceService from '@/api/service/lyServiceService'
+  export default {
+    data() {
+      return {
+        searchForm: {
+          name: '',
+          des1: '',
+          createTime: [],
+          state:''
+        },
+        dataList: [],
+        areaList: [],
+        loading: false,
+        visible: false
+      }
+    },
+    methods: {
+      init(date,state) {
+        this.searchForm.state = state
+        date[0] = new Date(date[0]);
+        this.searchForm.createTime = date
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.getAreaInfo()
+          this.refreshList()
+        })
+      },
+      // 获取数据列表
+      refreshList() {
+        this.loading = true
+        this.searchForm.beginTime = this.searchForm.createTime[0]
+        this.searchForm.endTime = this.searchForm.createTime[1]
+        lyServiceService.getPersonInfo({
+          ...this.searchForm
+        }).then(({
+          data
+        }) => {
+          this.dataList = data
+          this.loading = false
+        })
+      },
+      getAreaInfo() {
+        this.areaList = []
+        lyServiceService.getAreaInfo().then(({
+          data
+        }) => {
+          for (var index = 0; index < data.length; index++) {
+            this.areaList.push(data[index].des1);
+          }
+        })
+      },
+
+
+      // 下载模板
+      downloadTpl() {
+        this.loading = true
+        lyServiceService.exportTemplate().then(({
+          data
+        }) => {
+          // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, '请假表单导入模板')
+          this.loading = false
+        }).catch(function(err) {
+          this.loading = false
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      // 自定义服务端导入
+      importMethod({
+        file
+      }) {
+        // 处理表单
+        const formBody = new FormData()
+        formBody.append('file', file)
+        this.loading = true
+        lyServiceService.importExcel(formBody).then(({
+          data
+        }) => {
+          this.$message.success({
+            dangerouslyUseHTMLString: true,
+            message: data
+          })
+          this.refreshList()
+        })
+      },
+      // 自定义服务端导出
+      exportMethod({
+        options
+      }) {
+        // 传给服务端的参数
+        const params = {
+          current: this.tablePage.currentPage,
+          size: this.tablePage.pageSize,
+          orders: this.tablePage.orders,
+          ...this.searchForm,
+          filename: options.filename,
+          sheetName: options.sheetName,
+          isHeader: options.isHeader,
+          original: options.original,
+          mode: options.mode,
+          selectIds: options.mode === 'selected' ? options.data.map((item) => item.id) : [],
+          exportFields: options.columns.map((column) => column.property && column.property.split('.')[0])
+        }
+        this.loading = true
+        return lyServiceService.exportExcel(params).then(({
+          data
+        }) => {
+          // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, options.filename)
+          this.loading = false
+        }).catch(function(err) {
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      resetSearch() {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>
+

+ 188 - 0
jp-ui/src/views/modules/sys/dashboard/analysis/indexInfo2.vue

@@ -0,0 +1,188 @@
+<template>
+  <div class="page">
+    <el-dialog title="走访信息" :close-on-click-modal="false" v-dialogDrag :visible.sync="visible">
+      <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm"
+        @keyup.enter.native="refreshList()" @submit.native.prevent>
+        <!-- 搜索框-->
+        <el-form-item prop="name" title="企业名称">
+          <el-input size="small" v-model="searchForm.name" placeholder="企业名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item prop="des1" title="属地">
+          <el-select v-model="searchForm.des1" placeholder="请选择">
+            <el-option v-for="item in areaList" :key="item" :label="item" :value="item">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="createTime">
+          <el-date-picker size="mini" v-model="searchForm.createTime" type="daterange" align="right" unlink-panels
+            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+          <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div style="height: calc(70vh - 80px);">
+        <vxe-table border="inner" auto-resize resizable height="auto" :loading="loading" size="small"
+          ref="lyServiceTable" show-header-overflow show-overflow highlight-hover-row :menu-config="{}"
+          :print-config="{}" :export-config="{
+                remote: true,
+                filename: `走访统计${moment(new Date()).format(
+            		'YYYY-MM-DD'
+                )}`,
+                sheetName: '走访统计',
+                exportMethod: exportMethod,
+                types: ['xlsx'],
+                modes: ['current', 'selected', 'all'],
+            }" :data="dataList" :checkbox-config="{}">
+          <vxe-column type="seq" width="80" title="序号"></vxe-column>
+          <vxe-column field="name" title="企业">
+          </vxe-column>
+          <vxe-column field="des14" title="挂钩干部">
+          </vxe-column>
+          <vxe-column field="des1" title="属地">
+          </vxe-column>
+          <vxe-column field="sum" title="是否走访">
+            <template slot-scope="scope">
+              {{scope.row.sum==null?'否':'已走访' }}
+            </template>
+          </vxe-column>
+        </vxe-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="visible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import lyServiceService from '@/api/service/lyServiceService'
+  export default {
+    data() {
+      return {
+        searchForm: {
+          name: '',
+          des1: '',
+          createTime: [],
+          state:''
+        },
+        dataList: [],
+        areaList: [],
+        loading: false,
+        visible: false
+      }
+    },
+    methods: {
+      init(date,state) {
+        this.searchForm.state = state
+        date[0] = new Date(date[0]);
+        this.searchForm.createTime = date
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.getAreaInfo()
+          this.refreshList()
+        })
+      },
+      // 获取数据列表
+      refreshList() {
+        this.loading = true
+        this.searchForm.beginTime = this.searchForm.createTime[0]
+        this.searchForm.endTime = this.searchForm.createTime[1]
+        lyServiceService.getCompanyInfo({
+          ...this.searchForm
+        }).then(({
+          data
+        }) => {
+          this.dataList = data
+          this.loading = false
+        })
+      },
+      getAreaInfo() {
+        this.areaList = []
+        lyServiceService.getAreaInfo().then(({
+          data
+        }) => {
+          for (var index = 0; index < data.length; index++) {
+            this.areaList.push(data[index].des1);
+          }
+        })
+      },
+
+
+      // 下载模板
+      downloadTpl() {
+        this.loading = true
+        lyServiceService.exportTemplate().then(({
+          data
+        }) => {
+          // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, '请假表单导入模板')
+          this.loading = false
+        }).catch(function(err) {
+          this.loading = false
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      // 自定义服务端导入
+      importMethod({
+        file
+      }) {
+        // 处理表单
+        const formBody = new FormData()
+        formBody.append('file', file)
+        this.loading = true
+        lyServiceService.importExcel(formBody).then(({
+          data
+        }) => {
+          this.$message.success({
+            dangerouslyUseHTMLString: true,
+            message: data
+          })
+          this.refreshList()
+        })
+      },
+      // 自定义服务端导出
+      exportMethod({
+        options
+      }) {
+        // 传给服务端的参数
+        const params = {
+          current: this.tablePage.currentPage,
+          size: this.tablePage.pageSize,
+          orders: this.tablePage.orders,
+          ...this.searchForm,
+          filename: options.filename,
+          sheetName: options.sheetName,
+          isHeader: options.isHeader,
+          original: options.original,
+          mode: options.mode,
+          selectIds: options.mode === 'selected' ? options.data.map((item) => item.id) : [],
+          exportFields: options.columns.map((column) => column.property && column.property.split('.')[0])
+        }
+        this.loading = true
+        return lyServiceService.exportExcel(params).then(({
+          data
+        }) => {
+          // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, options.filename)
+          this.loading = false
+        }).catch(function(err) {
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      resetSearch() {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>
+

+ 185 - 0
jp-ui/src/views/modules/sys/dashboard/analysis/questionInfo.vue

@@ -0,0 +1,185 @@
+<template>
+  <div class="page">
+    <el-dialog title="问题信息" :close-on-click-modal="false" v-dialogDrag :visible.sync="visible">
+      <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm"
+        @keyup.enter.native="refreshList()" @submit.native.prevent>
+        <!-- 搜索框-->
+        <el-form-item prop="state" title="状态">
+          <el-select v-model="searchForm.state" placeholder="请选择">
+            <el-option v-for="item in range" :key="item.value" :label="item.text" :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="createTime">
+          <el-date-picker size="mini" v-model="searchForm.createTime" type="daterange" align="right" unlink-panels
+            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+          <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div style="height: calc(100% - 80px);">
+        <vxe-table border="inner" auto-resize resizable height="auto" :loading="loading" size="small"
+          ref="dzfQuestionTable" show-header-overflow show-overflow highlight-hover-row :menu-config="{}"
+          :print-config="{}" :data="dataList" :checkbox-config="{}">
+          <vxe-column type="seq" width="40"></vxe-column>
+          <vxe-column type="checkbox" width="40px"></vxe-column>
+          <vxe-column field="" title="企业名称">
+            <template slot-scope="scope">
+              {{scope.row.qyName }}
+            </template>
+          </vxe-column>
+          <vxe-column field="detailName" title="问题名称">
+          </vxe-column>
+          <vxe-column field="detailType" title="问题类别">
+          </vxe-column>
+          <vxe-column field="qySd" title="属地">
+          </vxe-column>
+          <vxe-column field="qyFzr" title="企业负责人">
+          </vxe-column>
+          <vxe-column field="phone" title="负责人号码">
+          </vxe-column>
+          <vxe-column field="officer" title="挂钩干部">
+          </vxe-column>
+          <vxe-column field="officeName" title="挂钩干部姓名">
+          </vxe-column>
+          <vxe-column field="" title="问题状态">
+            <template slot-scope="scope">
+              {{getState(scope.row.detailStates)}}
+            </template>
+          </vxe-column>
+          <vxe-column field="finishTime" title="办结时间">
+          </vxe-column>
+        </vxe-table>
+        <vxe-pager background size="small" :current-page="tablePage.currentPage" :page-size="tablePage.pageSize"
+          :total="tablePage.total" :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+          :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+          @page-change="currentChangeHandle">
+        </vxe-pager>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="visible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import dzfQuestionService from '@/api/question/dzfQuestionService'
+  export default {
+    data() {
+      return {
+        searchForm: {
+          state: '',
+          createTime: [],
+          start: '',
+          end: ''
+        },
+        dataList: [],
+        range: [{
+            value: 0,
+            text: "办结"
+          }, {
+            value: 999,
+            text: "未办结全部"
+          },
+          {
+            value: 1,
+            text: "提交"
+          },
+          {
+            value: 4,
+            text: "反馈大走访"
+          },
+          {
+            value: 5,
+            text: "正在办理"
+          },
+          {
+            value: 6,
+            text: "难以化解"
+          },
+          {
+            value: 7,
+            text: "持续跟踪"
+          },
+          {
+            value: 8,
+            text: "提请会办"
+          },
+          {
+            value: 9,
+            text: "交办"
+          }
+        ],
+        loading: false,
+        visible: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: [{
+            column: 'a.create_date',
+            asc: false
+          }]
+        },
+      }
+    },
+    methods: {
+      init(state, date) {
+        if (state == 1) {
+          state = 999
+        } else if (state == 2) {
+          state = 0
+        }
+        date[0] = new Date( date[0]);
+        this.searchForm.createTime = date
+        this.searchForm.state = state
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.refreshList()
+        })
+      },
+      // 获取数据列表
+      refreshList() {
+        this.loading = true
+        this.searchForm.start = this.searchForm.createTime[0]
+        this.searchForm.end = this.searchForm.createTime[1]
+        dzfQuestionService.list2({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then(({
+          data
+        }) => {
+          this.dataList = data.records
+          this.loading = false
+        })
+      },
+      getState(val){
+      var result =  this.range.filter(item => item.value == val)
+      return result[0].text
+      },
+      // 当前页
+      currentChangeHandle({
+        currentPage,
+        pageSize
+      }) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.refreshList()
+      },
+
+      resetSearch() {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>
+8