温红权 преди 8 години
родител
ревизия
6ea92cac66
променени са 17 файла, в които са добавени 689 реда и са изтрити 5 реда
  1. 1 0
      VisualInspection/.vscode/database.json
  2. 107 0
      VisualInspection/js/statistics/user_check_statistics.js
  3. 15 1
      VisualInspection/js/util/util.js
  4. 120 0
      VisualInspection/view/statistics/user_check_statistics.html
  5. 2 0
      VisualInspection_server/src/main/java/com/xintong/VideocheckApplication.java
  6. 43 0
      VisualInspection_server/src/main/java/com/xintong/system/securityTools/ThreadConfig.java
  7. 0 1
      VisualInspection_server/src/main/java/com/xintong/visualinspection/bean/StatisticsBo.java
  8. 36 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/bean/UserStatistic.java
  9. 8 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/controller/StatisticsController.java
  10. 22 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/dao/master/CheckUserStatisticsDao.java
  11. 117 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/mapper/master/CheckUserStatisticsMapper.xml
  12. 4 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/mapper/master/StatisticsMapper.xml
  13. 19 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/pojo/StatisiticPojo.java
  14. 4 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/service/StatisticsService.java
  15. 56 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/service/ThreadTaskService.java
  16. 132 0
      VisualInspection_server/src/main/java/com/xintong/visualinspection/service/impl/StatisticsServiceImpl.java
  17. 3 3
      VisualInspection_server/src/main/resources/application.properties

+ 1 - 0
VisualInspection/.vscode/database.json

@@ -0,0 +1 @@
+{}

+ 107 - 0
VisualInspection/js/statistics/user_check_statistics.js

@@ -0,0 +1,107 @@
+var year = new Date().getFullYear();
+$(function() {
+    // 公用方法,根据当前年月动态将13个月push数组
+    month_method();
+    // 公用方法,月份下拉框
+    // select_option();
+    // 回显当前年月份
+    // $(".div-month select").val(initDate);
+    $.jeDate("#month_date_from", {
+        isinitVal: true,
+        format: 'YYYY/MM' // 分隔符可以任意定义,该例子表示只显示年月
+    });
+    $.jeDate("#month_date_to", {
+        isinitVal: true,
+        format: 'YYYY/MM' // 分隔符可以任意定义,该例子表示只显示年月
+    });
+
+    $("#month_date_from").val("2017-07");
+
+
+    $("#searchbtn").on("click", function() {
+        var s_s = $("#start-score").val();
+        var e_s = $("#end-score").val();
+        var m_s = $("#month_number").val();
+        if (!isRealNum(s_s) || !isRealNum(e_s) || !isRealNum(m_s)) {
+            layer.msg('参数有错误!');
+            return;
+        }
+        getscore($("#month_date_from").val(), $("#month_date_to").val(), m_s, s_s, e_s);
+    });
+
+
+    getscore("2017-07", "2018-02", 3, 985, 1000);
+
+
+
+});
+
+
+
+
+function getscore(starttime, endtime, limitnumber, limitscore, limitscore2) {
+
+    var data_p = {
+        "start_date": moment(starttime + "-25 23:00:00").valueOf(),
+        "end_date": moment(endtime + "-25 23:00:00").valueOf(),
+        "limitnumber": limitnumber,
+        "limitscore": limitscore,
+        "limitscore2": limitscore2
+    };
+
+    //获取该人员排班
+    var url = "/statistics/user/score";
+
+    post_common_service(url, data_p, function(data) {
+
+        var table = '';
+        for (var i in data) {
+            var ss = data[i];
+            var dat = "";
+            for (var j in ss.userStatistics) {
+                var po = ss.userStatistics[j];
+                dat += po.p_str + "月、";
+            }
+            dat = dat.substring(0, dat.length - 1);
+            table += "<tr><td width='5%;'>" + (parseInt(i) + 1) + "</td><td width='15%;'>" + ss.user.workno + "</td><td width='15%;'>" + ss.dept + "</td><td width='20%;'><a href='JavaScript:void(0)' onclick='jumpuser(\"" + ss.user.id + "\",\"" + ss.user.organid + "\")'>" + ss.user.truename + "</a></td><td width='45%;'>" + dat + "</td></tr>";
+
+
+        }
+
+
+
+        $(".table-tbody").html(table);
+        $('[data-toggle="tooltip"]').tooltip();
+        $("tr:gt(0):odd").css("background", "#EFEFEF");
+
+        console.log(data)
+
+    });
+
+
+
+
+}
+
+function jumpuser(userid, deptid) {
+
+
+    var param = {
+        "parent_dept_id": GV("#center-manager"),
+        "dept_id": GV("#fsList"),
+        "start_date": $("#start-time").val(),
+        "end_date": $("#end-time").val(),
+        "start_num": $("#start-num").val(),
+        "end_num": $("#end-num").val(),
+        "start_score": $("#start-score").val(),
+        "end_score": $("#end-score").val(),
+        "job_select": $("#jobSelect").val()
+    }
+    $.zui.store.set('store_param_' + current_url, param);
+
+    url = "/view/statistics/personal_data_statistics.html?userid=" + userid + "&deptid=" + deptid + "&jump=1"
+
+    isnew = false;
+    changePage(url);
+
+}

+ 15 - 1
VisualInspection/js/util/util.js

@@ -270,6 +270,7 @@ function setFeeSelectValueNoAll(data, div, selectId) {
 }
 
 var cache_road_manager_wrecker_group_map;
+
 function getWreckerGroupList(callback) {
     get_common_service("/dept/getAllWG", null, function(data) {
         $.zui.store.set("cache_wrecker_group_list", data);
@@ -308,6 +309,7 @@ function setWreckerGroupSelectValue(data, div, selectId) {
     $(div).html('');
     $(div).html(optStr);
 }
+
 function setLaneSelect(div, selectId) {
     var optStr = '';
     var data = [];
@@ -713,7 +715,19 @@ function getJob() {
 }
 
 function getCodeByFlagAndValue(code_flag, code_value, callback) {
-    post_common_service("/constant/getConstantByFlagAndValue", {code_flag:code_flag,code_value:code_value}, function(data) {
+    post_common_service("/constant/getConstantByFlagAndValue", { code_flag: code_flag, code_value: code_value }, function(data) {
         callback(data);
     }, function(error) {});
+}
+
+function isRealNum(val) {
+    // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除
+    if (val === "" || val == null) {
+        return false;
+    }
+    if (!isNaN(val)) {
+        return true;
+    } else {
+        return false;
+    }
 }

+ 120 - 0
VisualInspection/view/statistics/user_check_statistics.html

@@ -0,0 +1,120 @@
+<script src="/js/statistics/common_statistic.js?__inline"></script>
+<script src="/js/statistics/user_check_statistics.js">
+</script>
+<style type="text/css">
+    table td,
+    table th {
+        text-align: center;
+        padding: 10px;
+        border: 1px solid #d9d9d9
+    }
+    
+    .table-title {
+        line-height: 50px;
+        text-align: center;
+    }
+    
+    .table-title span {
+        font-size: 22px;
+        color: #333;
+    }
+    
+    .table-head {
+        background-color: #EBF3FD;
+        margin-top: 10px;
+        width: 100%;
+    }
+    
+    .table-head table {
+        border: 1px solid #C7C6C5;
+    }
+    
+    #scrollTable table {
+        border: 1px solid #C7C6C5;
+    }
+    
+    .table-head table tr th {
+        font-size: 12px;
+        color: #333;
+        text-align: center;
+        border: 1px solid #C7C6C5;
+    }
+    
+    .table-tbody tr td {
+        height: 43px;
+    }
+    
+    table {
+        border-color: #d9d9d9;
+    }
+    
+    .div-score {
+        float: left;
+        padding-top: 6px;
+    }
+    
+    .special-style td {
+        border: 1px solid #c7c6c5;
+    }
+</style>
+
+<div class="container-fluid ">
+    <div class="row">
+        <label class="col-sm-1" style="line-height:30px;width:80px">开始月</label>
+        <div class="div-month col-sm-1">
+            <input id="month_date_from" class="form-control form-date" type="text" placeholder="请选择" style="height:30px;">
+        </div>
+        <label class="col-sm-1" style="line-height:30px;width:80px">结束月</label>
+        <div class="div-month col-sm-1">
+            <input id="month_date_to" class="form-control form-date " type="text " placeholder="请选择 " style="height:30px; ">
+        </div>
+
+        <label class="col-sm-1" style="line-height:30px;width:80px">连续月数</label>
+        <div class="div-month col-sm-2">
+            <input id="month_number" type="number" placeholder="请输入0以上的整数" style="height:30px;padding:5px " value="3" />
+        </div>
+        <div class="form-group col-sm-3">
+            <label for="exampleInputAccount1" class="col-sm-4" style="line-height:30px;width:80px">得分区间</label>
+            <div class="col-sm-3">
+                <input type="text" id="start-score" class="form-control form-date" value="985">
+            </div>
+            <div class="to-score col-sm-2" style="padding-top: 6px;text-align:center;width:10px"><label> - </label></div>
+            <div class="col-sm-3">
+                <input type="text" id="end-score" class="form-control form-date" value="1000">
+            </div>
+        </div>
+        <div class="col-sm-2 "><button class="btn btn-info2 col-sm-6 query-company " id="searchbtn">查询</button></div>
+    </div>
+
+
+</div>
+
+
+<div class="row ">
+
+    <div class="datatable" data-checkable="false" style="margin-bottom: 0px;margin-right:10px;" data-sortable="false">
+        <div class="table-head">
+            <table border="0" width="100%" align="center" style="margin-right:10px;">
+                <thead class="table-thead" align="center">
+                    <tr>
+                        <th width="5%">序号</th>
+                        <th width="15%">工号</th>
+                        <th width="15%">部门</th>
+                        <th width="20%">姓名</th>
+                        <th width="45%">满足条件月份</th>
+                    </tr>
+                </thead>
+            </table>
+        </div>
+        <!-- 使用一个div来显示数据表格   -->
+        <div id="scrollTable" style="height:500px;overflow:scroll;    margin-right: -10px;">
+            <table style="border-top:0" border="0" width="100%" align="center" id="table">
+                <tbody class="table-tbody" style="background:white; " align="center">
+
+                </tbody>
+            </table>
+        </div>
+    </div>
+
+</div>
+</div>

+ 2 - 0
VisualInspection_server/src/main/java/com/xintong/VideocheckApplication.java

@@ -6,9 +6,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 
 import com.alibaba.fastjson.parser.ParserConfig;
+import org.springframework.scheduling.annotation.EnableAsync;
 
 @SpringBootApplication
 @ServletComponentScan
+@EnableAsync
 public class VideocheckApplication {
 //	@Bean
 //	@ConfigurationProperties(prefix="spring.datasource")

+ 43 - 0
VisualInspection_server/src/main/java/com/xintong/system/securityTools/ThreadConfig.java

@@ -0,0 +1,43 @@
+package com.xintong.system.securityTools;
+
+/**
+ * 文件名:ThreadConfig
+ * 版本信息:日期:2018/2/5 Copyright 江苏省交通规划设计院 Corporation 2018 版权所有.
+ */
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+@Configuration
+@EnableAsync
+public class ThreadConfig {
+
+    private int corePoolSize = 10;//线程池维护线程的最少数量
+
+    private int maxPoolSize = 30;//线程池维护线程的最大数量
+
+    private int queueCapacity = 8; //缓存队列
+
+    private int keepAlive = 60;//允许的空闲时间
+
+    @Bean
+    public Executor threadExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(corePoolSize);
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setThreadNamePrefix("myExecutor-");
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //对拒绝task的处理策略
+        executor.setKeepAliveSeconds(keepAlive);
+        executor.initialize();
+        return executor;
+    }
+
+}

+ 0 - 1
VisualInspection_server/src/main/java/com/xintong/visualinspection/bean/StatisticsBo.java

@@ -1,7 +1,6 @@
 package com.xintong.visualinspection.bean;
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import lombok.Data;
 

+ 36 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/bean/UserStatistic.java

@@ -0,0 +1,36 @@
+package com.xintong.visualinspection.bean;
+
+import lombok.Data;
+
+/**
+ * 文件名:UserStatistic
+ * 版本信息:日期:2018/2/5 Copyright 江苏省交通规划设计院 Corporation 2018 版权所有.
+ */
+@Data
+public class UserStatistic {
+    private Long id;
+    private Integer user_id;
+    private Integer period_id;
+    private Integer user_score;
+    private Double user_total_score;
+    private Integer user_check_num;
+    private Integer user_ranking_c;
+    private Integer user_ranking_d;
+    private Integer user_ranking_s;
+    private Integer dept_id;
+    private Integer startperiod_id;
+    private Integer endperiod_id;
+    private Double limitscore;
+    private Double limitscore2;
+    private Double start_date;
+    private Double end_date;
+    private Integer limitnumber;
+    private String p_str;
+
+    private Integer count;
+
+    public void setUserTotalScore(){
+        this.user_total_score = 1000 - user_total_score/(user_check_num*1.00);
+    }
+
+}

+ 8 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/controller/StatisticsController.java

@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.xintong.visualinspection.bean.*;
+import com.xintong.visualinspection.pojo.StatisiticPojo;
 import com.xintong.visualinspection.pojo.UserRankingData;
 import com.xintong.visualinspection.util.CacheUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -373,5 +374,12 @@ public class StatisticsController extends BaseController {
     	List<WreckerStatisticsBO> lists=  statisticsService.getWreckerStaffInfo(obj);
     	return super.returnSuccessResult(lists);
     }
+
+
+    @RequestMapping(value = "/user/score")
+    public String getFsOnePersonCheckedItemDetailInfo(@RequestBody UserStatistic obj){
+        List<StatisiticPojo> returnList=  statisticsService.getuserStatistic(obj);
+        return super.returnSuccessResult((returnList));
+    }
     
 }

+ 22 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/dao/master/CheckUserStatisticsDao.java

@@ -0,0 +1,22 @@
+package com.xintong.visualinspection.dao.master;
+
+import com.xintong.visualinspection.bean.UserStatistic;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 文件名:CheckUserStatistics
+ * 版本信息:日期:2018/2/5 Copyright 江苏省交通规划设计院 Corporation 2018 版权所有.
+ */
+@Mapper
+public interface CheckUserStatisticsDao {
+    public UserStatistic getOne(Long id);
+    public UserStatistic getByUser(UserStatistic userStatistic);
+    public void insert(UserStatistic userStatistic);
+    public void update(UserStatistic userStatistic);
+    public void delete(Long id);
+    public void saveandupdate(UserStatistic userStatistic);
+    public List<UserStatistic> selectlimituser(UserStatistic userStatistic);
+
+}

+ 117 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/mapper/master/CheckUserStatisticsMapper.xml

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xintong.visualinspection.dao.master.CheckUserStatisticsDao" >
+    <resultMap id="BaseResultMap" type="com.xintong.visualinspection.bean.UserStatistic" >
+        <id column="id" property="id" jdbcType="INTEGER" />
+
+        <result column="user_id" property="user_id" jdbcType="INTEGER" />
+        <result column="period_id" property="period_id" jdbcType="INTEGER" />
+        <result column="user_score" property="user_score" jdbcType="INTEGER" />
+        <result column="user_check_num" property="user_check_num" jdbcType="INTEGER" />
+        <result column="user_total_score" property="user_total_score" jdbcType="DOUBLE" />
+        <result column="user_ranking_c" property="user_ranking_c" jdbcType="INTEGER" />
+        <result column="user_ranking_d" property="user_ranking_d" jdbcType="INTEGER" />
+        <result column="user_ranking_s" property="user_ranking_s" jdbcType="INTEGER" />
+        <result column="dept_id" property="dept_id" jdbcType="INTEGER" />
+
+    </resultMap>
+
+
+    <select id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap" >
+        SELECT *
+        FROM check_statistics
+        WHERE id = #{id}
+    </select>
+    
+    <select id="getByUser" parameterType="com.xintong.visualinspection.bean.UserStatistic" resultMap="BaseResultMap" >
+        SELECT *
+        FROM check_statistics
+        WHERE user_id = #{user_id} and period_id = #{period_id}
+    </select>
+    
+    <insert id="insert" useGeneratedKeys="true" keyProperty="id"  parameterType="com.xintong.visualinspection.bean.UserStatistic" >
+        <include refid="insertc"/>
+    </insert>
+
+    <update id="update" parameterType="com.xintong.visualinspection.bean.UserStatistic" >
+        <include refid="updatec"/>
+    </update>
+
+    <delete id="delete" parameterType="java.lang.Long" >
+        DELETE FROM
+        check_statistics
+        WHERE
+        id =#{id}
+    </delete>
+
+    <insert id="saveandupdate" useGeneratedKeys="true" keyProperty="id" parameterType="com.xintong.visualinspection.bean.UserStatistic" >
+        <selectKey keyProperty="count" resultType="int" order="BEFORE">
+            select count(*) as count from check_statistics where user_id = #{user_id} and period_id = #{period_id}
+        </selectKey>
+        <if test="count>0">
+           <include refid="updatec"/>
+        </if>
+        <if test="count==0">
+            <include refid="insertc"/>
+        </if>
+    </insert>
+
+
+    <sql id="updatec">
+        UPDATE
+        check_statistics
+        SET
+        <if test="user_score != null">user_score = #{user_score},</if>
+        <if test="user_check_num != null">user_check_num = #{user_check_num},</if>
+        <if test="user_ranking_c != null">user_ranking_c = #{user_ranking_c},</if>
+        <if test="user_ranking_d != null">user_ranking_d = #{user_ranking_d},</if>
+        <if test="user_ranking_s != null">user_ranking_s = #{user_ranking_s},</if>
+        <if test="dept_id != null">dept_id = #{dept_id}</if>
+        WHERE
+        user_id = #{user_id} and period_id = #{period_id}
+    </sql>
+    <sql id="insertc">
+         INSERT INTO
+        check_statistics
+        (user_id,period_id,user_score,user_check_num,user_ranking_c,user_ranking_d,user_ranking_s,dept_id)
+        VALUES
+        (#{user_id}, #{period_id},#{user_score},#{user_check_num},#{user_ranking_c},#{user_ranking_d},#{user_ranking_s},#{dept_id})
+    </sql>
+
+
+    <select id="selectlimituser"   parameterType="com.xintong.visualinspection.bean.UserStatistic" resultMap="BaseResultMap">
+
+        select c.* from (
+            <include refid="selectc"/>
+        ) c where c.user_id in ( select d.user_id from  (select p.user_id,count(user_id) as count from (<include refid="selectc"/>) p GROUP BY p.user_id ) d where d.count >=#{limitnumber} )
+
+    </select>
+
+    <sql id="selectc">
+      SELECT
+        b.*
+        FROM
+        (
+        SELECT
+        a.*,
+        (
+        1000- a.user_score / ( a.user_check_num * 1.00 )
+        ) AS user_total_score
+        FROM
+        (
+        SELECT
+        *
+        FROM
+        check_statistics
+        WHERE
+        period_id >= #{startperiod_id}
+        AND period_id &lt;= #{endperiod_id} AND user_check_num > 0
+        ) a
+        ) b
+        WHERE
+        b.user_total_score >=#{limitscore} and  b.user_total_score &lt;= #{limitscore2}
+        GROUP BY user_id ,period_id
+    </sql>
+
+
+</mapper>

+ 4 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/mapper/master/StatisticsMapper.xml

@@ -1091,4 +1091,8 @@
         GROUP BY o.wrecker_check_type , o.user_id
     </select>
 
+
+
+
+
 </mapper>

+ 19 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/pojo/StatisiticPojo.java

@@ -0,0 +1,19 @@
+package com.xintong.visualinspection.pojo;
+
+import com.xintong.visualinspection.bean.Organ;
+import com.xintong.visualinspection.bean.User;
+import com.xintong.visualinspection.bean.UserStatistic;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 文件名:StatisiticPojo
+ * 版本信息:日期:2018/2/6 Copyright 江苏省交通规划设计院 Corporation 2018 版权所有.
+ */
+@Data
+public class StatisiticPojo {
+    private User user;
+    private String dept;
+    private List<UserStatistic> userStatistics;
+}

+ 4 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/service/StatisticsService.java

@@ -1,5 +1,6 @@
 package com.xintong.visualinspection.service;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -7,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.xintong.visualinspection.bean.*;
+import com.xintong.visualinspection.pojo.StatisiticPojo;
 import com.xintong.visualinspection.pojo.TaskAndScore;
 import com.xintong.visualinspection.pojo.UserRankingData;
 
@@ -111,4 +113,6 @@ public interface StatisticsService {
 	// 获取清障稽查的信息
 	public List<WreckerStatisticsBO> getWreckerStaffInfo(WreckerStatisticsBO obj);
 
+    public List<StatisiticPojo> getuserStatistic(UserStatistic obj);
+
 }

+ 56 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/service/ThreadTaskService.java

@@ -0,0 +1,56 @@
+package com.xintong.visualinspection.service;
+
+import com.xintong.visualinspection.bean.CheckTaskPeriod;
+import com.xintong.visualinspection.bean.StatisticsBo;
+import com.xintong.visualinspection.bean.UserStatistic;
+import com.xintong.visualinspection.dao.master.CheckOtherDao;
+import com.xintong.visualinspection.dao.master.CheckTaskPeriodDao;
+import com.xintong.visualinspection.dao.master.CheckUserStatisticsDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 文件名:ThreadTaskService
+ * 版本信息:日期:2018/2/5 Copyright 江苏省交通规划设计院 Corporation 2018 版权所有.
+ */
+@Service
+public class ThreadTaskService {
+
+    @Autowired
+    private CheckTaskPeriodDao checkTaskPeriodDao;
+
+    @Autowired
+    private CheckUserStatisticsDao checkUserStatisticsDao;
+
+    @Async("threadExecutor")
+    public void saveUserStatic(List<StatisticsBo> statisticsBos, Long starttime,Long endtime){
+
+        List<CheckTaskPeriod> checkTaskPeriods = checkTaskPeriodDao.select(new CheckTaskPeriod());
+
+        CheckTaskPeriod period = null;
+        // 计算上个周期时间 周期时间:00:00:00 ----- 00:00:00 参数:23:00:00
+        for (CheckTaskPeriod p : checkTaskPeriods) {
+            if (starttime + 1 * 1000 * 60 * 60 == p.getStarttime().getTime() && endtime + 1 * 1000 * 60 * 60 == p.getEndtime().getTime()) {
+                period = p;
+                break;
+            }
+        }
+        if(period==null) { return;}
+        for (StatisticsBo s:statisticsBos
+                ) {
+            UserStatistic ss =new UserStatistic();
+            ss.setUser_id(s.getUser().getId());
+            ss.setUser_score(s.getCheck_all_score());
+            ss.setUser_check_num(s.getChecked_num());
+            ss.setUser_ranking_c(s.getCompany_ranking());
+            ss.setUser_ranking_d(s.getCenter_ranking());
+            ss.setUser_ranking_s(s.getFee_station_ranking());
+            ss.setDept_id(s.getUser().getOrganid());
+            ss.setPeriod_id(period.getId());
+            checkUserStatisticsDao.saveandupdate(ss);
+        }
+    }
+}

+ 132 - 0
VisualInspection_server/src/main/java/com/xintong/visualinspection/service/impl/StatisticsServiceImpl.java

@@ -20,12 +20,17 @@ import javax.servlet.http.HttpServletResponse;
 import com.xintong.visualinspection.bean.*;
 import com.xintong.visualinspection.dao.master.CheckOtherDao;
 import com.xintong.visualinspection.dao.master.CheckTaskPeriodDao;
+import com.xintong.visualinspection.dao.master.CheckUserStatisticsDao;
+import com.xintong.visualinspection.pojo.StatisiticPojo;
 import com.xintong.visualinspection.pojo.UserRankingData;
+import com.xintong.visualinspection.service.CheckTaskPeriodService;
+import com.xintong.visualinspection.service.ThreadTaskService;
 import org.jxls.common.Context;
 import org.jxls.util.JxlsHelper;
 import org.jxls.util.Util;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.thymeleaf.util.DateUtils;
 
@@ -63,6 +68,17 @@ public class StatisticsServiceImpl extends BaseService implements StatisticsServ
 	@Autowired
 	private CheckOtherDao checkOtherDao;
 
+    @Autowired
+    private CheckUserStatisticsDao checkUserStatisticsDao;
+
+    @Autowired
+    private ThreadTaskService threadTaskService;
+
+
+
+
+
+
     @Override
     public List<UserChangeStation> getUserChangeStation(StatisticsBean obj) {
         return statisticsDao.selectuserchangestation(obj);
@@ -298,9 +314,17 @@ public class StatisticsServiceImpl extends BaseService implements StatisticsServ
 			}
 		}
 
+
+        //更新数据库统计
+
+        threadTaskService.saveUserStatic(reList,obj.getStart_date().getTime(),obj.getEnd_date().getTime());
+
 		return reList;
 	}
 
+
+
+
 	@Override
 	public List<StatisticsBean> getFeeStationCheckedScore(StatisticsBean obj) {
 		// 获取收费站信息收费站人数
@@ -1242,9 +1266,15 @@ public class StatisticsServiceImpl extends BaseService implements StatisticsServ
 			return lists.subList(lists.size() - 20, lists.size());
 		}
 
+
+
+
 		return lists;
 	}
 
+
+
+
 	@Override
 	public List<StatisticsBean> getFSUp5Person(StatisticsBean obj) {
 		obj.setQueryType(2);
@@ -2360,4 +2390,106 @@ public class StatisticsServiceImpl extends BaseService implements StatisticsServ
 		});
 		return tmpList;
 	}
+
+    @Override
+    public List<StatisiticPojo> getuserStatistic(UserStatistic obj) {
+	    //
+        List<CheckTaskPeriod> checkTaskPeriods = checkTaskPeriodDao.select(new CheckTaskPeriod());
+
+        for (CheckTaskPeriod p : checkTaskPeriods) {
+            if (obj.getStart_date() + 1 * 1000 * 60 * 60 == p.getEndtime().getTime()) {
+                obj.setStartperiod_id(p.getId());
+            }
+            if (obj.getEnd_date() + 1 * 1000 * 60 * 60 == p.getEndtime().getTime()) {
+                obj.setEndperiod_id(p.getId());
+            }
+        }
+        if(obj.getStart_date()>(checkTaskPeriods.get(checkTaskPeriods.size()-1).getEndtime().getTime()- 1 * 1000 * 60 * 60)){
+            return  new ArrayList<>();
+        }
+        if(obj.getEnd_date()<(checkTaskPeriods.get(0).getEndtime().getTime()- 1 * 1000 * 60 * 60)){
+            return  new ArrayList<>();
+        }
+        if(obj.getStart_date()<(checkTaskPeriods.get(0).getEndtime().getTime()- 1 * 1000 * 60 * 60)){
+            obj.setStartperiod_id(checkTaskPeriods.get(0).getId());
+        }
+        if(obj.getEnd_date()>(checkTaskPeriods.get(checkTaskPeriods.size()-1).getEndtime().getTime()- 1 * 1000 * 60 * 60)){
+            obj.setEndperiod_id(checkTaskPeriods.get(checkTaskPeriods.size()-1).getId());
+        }
+
+        List<CheckTaskPeriod> temp_p = new ArrayList<>();
+        for (CheckTaskPeriod p : checkTaskPeriods) {
+            if(p.getId()>=obj.getStartperiod_id() && p.getId()<=obj.getEndperiod_id()){
+                temp_p.add(p);
+            }
+        }
+
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM");
+        //获取满足条件的人员
+        List<UserStatistic>  userStatistics = checkUserStatisticsDao.selectlimituser(obj);
+        
+        HashMap<Integer,List<UserStatistic>> usm = new HashMap<>();
+
+        for (UserStatistic c:userStatistics
+             ) {
+            List<UserStatistic> s = usm.get(c.getUser_id());
+            if(s==null){s = new ArrayList<>();}
+            s.add(c);
+            usm.put(c.getUser_id(),s);
+            for (CheckTaskPeriod p : checkTaskPeriods) {
+                if(c.getPeriod_id().equals(p.getId())){
+                    c.setP_str(simpleDateFormat.format(p.getEndtime()));
+                }
+            }
+
+        }
+
+
+
+
+        List<StatisiticPojo> user_ids = new ArrayList<>();
+
+        //判断是否连续
+        for(Integer k : usm.keySet()){
+
+            boolean isM = false;
+
+            List<UserStatistic> pp = new ArrayList<>();
+            //获取得分
+            List<UserStatistic> ll = usm.get(k);
+            int count=0;
+            for (CheckTaskPeriod p : temp_p
+                 ) {
+                boolean isfond = false;
+                for (UserStatistic s:ll
+                     ) {
+                    if(s.getPeriod_id().equals(p.getId())){
+                        isfond = true;
+                        pp.add(s);
+                        break;
+                    }
+                }
+                if(isfond){
+                    count++;
+                    if(count>=obj.getLimitnumber()){isM = true;break; }
+                }else{
+                    if(count>=obj.getLimitnumber()){isM = true;break; }
+                    count=0;
+                    pp.clear();
+                }
+            }
+
+
+
+            if(isM) {
+                StatisiticPojo p = new StatisiticPojo();
+                p.setUser(CacheUtil.getUserFromMap(k.longValue()));
+                p.setDept(CacheUtil.getOrgannameFromMap(p.getUser().getOrganid().longValue()));
+                p.setUserStatistics(pp);
+                user_ids.add(p);
+            }
+        }
+
+        return user_ids;
+    }
 }

+ 3 - 3
VisualInspection_server/src/main/resources/application.properties

@@ -3,7 +3,7 @@ spring.thymeleaf.cache=false
 context.listener.classes=com.xintong.SystemInit
 
 #master.datasource.url = jdbc:mysql://10.112.0.199:3306/visualinspection?useUnicode=true&characterEncoding=utf-8
-master.datasource.url = jdbc:mysql://git.topm.win:6400/visualinspection?useUnicode=true&characterEncoding=utf-8
+master.datasource.url = jdbc:mysql://git.topm.win:9003/visualinspection?useUnicode=true&characterEncoding=utf-8
 #master.datasource.url = jdbc:mysql://git.topm.win:6381/visualinspection?useUnicode=true&characterEncoding=utf-8
 #master.datasource.url = jdbc:mysql://10.112.0.199:7002/visualinspection?useUnicode=true&characterEncoding=utf-8
 master.datasource.username = root
@@ -13,7 +13,7 @@ master.mapper-locations=classpath:com/xintong/visualinspection/mapper/master/*.x
 
 ## \u7528\u6237\u6570\u636E\u6E90\u914D\u7F6E
 #cluster.datasource.url=jdbc:mysql://10.112.0.199:3306/visualinspection?useUnicode=true&characterEncoding=utf8
-cluster.datasource.url=jdbc:mysql://git.topm.win:6400/visualinspection?useUnicode=true&characterEncoding=utf8
+cluster.datasource.url=jdbc:mysql://git.topm.win:9003/visualinspection?useUnicode=true&characterEncoding=utf8
 #cluster.datasource.url = jdbc:mysql://git.topm.win:6381/visualinspection?useUnicode=true&characterEncoding=utf-8
 #cluster.datasource.url=jdbc:mysql://10.112.0.199:7002/visualinspection?useUnicode=true&characterEncoding=utf8
 cluster.datasource.username=root
@@ -62,7 +62,7 @@ spring.redis.host=git.topm.win
 #spring.redis.port=6379
 
 #spring.redis.port=7003
-spring.redis.port=6401
+spring.redis.port=9004
 #spring.redis.port=6380
 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09
 spring.redis.password=xintong