Jelajahi Sumber

统计新增6个指标

chenweida 8 tahun lalu
induk
melakukan
7c8a4b4ce3

+ 13 - 0
patient-co-statistics/pom.xml

@ -2,6 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <groupId>com.yihu</groupId>
    <artifactId>patient-co-statistics</artifactId>
    <version>1.0.0</version>
@ -371,6 +372,12 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${version.spring-boot}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
@ -408,6 +415,12 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

+ 1 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/QuartzJobConfigDao.java

@ -18,7 +18,7 @@ public interface QuartzJobConfigDao extends PagingAndSortingRepository<QuartzJob
    @Query(" FROM QuartzJobConfig a WHERE a.status=?1 and a.del='1'")
    List<QuartzJobConfig> findByAll(String s);
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,20,21,22,23,24,25,26,27,29,30,31,32,32,33,34,35)  and a.del='1' ")
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,20,21,22,23,24,25,26,27,29,30,31,32,32,33,34,35,36)  and a.del='1' ")
    List<QuartzJobConfig> findByIds();
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")

+ 5 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/SignDataFilter.java

@ -38,6 +38,7 @@ public class SignDataFilter {
    public static String level2Health = "5";//健康服务分布
    public static String level2Age2 = "6";//年龄
    public static String level2AgeDisease = "7";//年龄疾病
    public static String level2ServerType= "8";//年龄疾病
    public static String level3Disease = "1";//疾病分组
@ -345,6 +346,10 @@ public class SignDataFilter {
                    returnLevel2Key = getAgeDisease(signFamily);
                    return returnLevel2Key;
                }
                case "8": {
                    return signFamily.getSignType();
                }
            }
        }
        return returnLevel2Key;

+ 1 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/mycache/CachePool.java

@ -50,7 +50,7 @@ public class CachePool {
        CacheModel model= arriveSignFamilyExpenseStatus1Map.get(date);
        if(model==null){
            model=new CacheModel();
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a " +
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient,server_type from wlyy_sign_family a " +
                    " where status in(1,2) and a.type =2  and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'" ;
            String sqlCount="select count(id) from wlyy_sign_family a " +
                    " where  status in(1,2) and a.type =2 and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'";

+ 4 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/DBStorage.java

@ -206,7 +206,7 @@ public class DBStorage {
     * @param day
     * @param wlyyQuota
     * @param foreachNum 如果start是默认的 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type       1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6年龄2  7年龄疾病 8 回复时间 9续签原因
     * @param type       1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6年龄2  7年龄疾病 8 回复时间 9续签原因 10 服务类型
     * @param start      起始位置 默认是1
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,
@ -840,6 +840,9 @@ public class DBStorage {
            case 9: {
                return Constant.getReason(i);
            }
            case 10: {
                return Constant.getServerType(i);
            }
            default: {
                return "";
            }

+ 5 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java

@ -124,7 +124,7 @@ public class RedisStorage {
     * @param data
     * @param wlyyQuotaId
     * @param foreachNum  标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type        1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6繳費未交費 7年齡疾病 8 咨询分组 9续签原因
     * @param type        1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6繳費未交費 7年齡疾病 8 咨询分组 9续签原因 10签约服务
     * @param start       循环开始
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) throws Exception {
@ -1224,6 +1224,10 @@ public class RedisStorage {
                //疾病年齡
                return Constant.getReason(i);
            }
            case 10: {
                //疾病年齡
                return Constant.getServerType(i);
            }
            default: {
                return "";
            }

+ 212 - 165
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/Constant.java

@ -9,286 +9,288 @@ import java.util.Date;
 * 常量类
 */
public class Constant {
    public static String quota_date_last=" 17:00:00 ";
    public static String city="350200";
    public static String cityName="厦门市";
    public static String quota_date_last = " 17:00:00 ";
    public static String city = "350200";
    public static String cityName = "厦门市";
    //二级维度的性别
    public static String level_sex_1="1";
    public static String level_sex_2="2";
    public static String level_sex_3="3";
    public static String level_sex_1_name="女";
    public static String level_sex_2_name="男";
    public static String level_sex_3_name="未知";
    public static String level_sex_1 = "1";
    public static String level_sex_2 = "2";
    public static String level_sex_3 = "3";
    public static String level_sex_1_name = "女";
    public static String level_sex_2_name = "男";
    public static String level_sex_3_name = "未知";
    //二级维度的年龄
    public static String level_age_1="1";
    public static String level_age_2="2";
    public static String level_age_3="3";
    public static String level_age_4="4";
    public static String level_age_5="5";
    public static String level_age_6="6";
    public static String level_age_1_name="0~6";
    public static String level_age_2_name="7~18";
    public static String level_age_3_name="19~30";
    public static String level_age_4_name="31~50";
    public static String level_age_5_name="51~65";
    public static String level_age_6_name=">65";
    public static String level_age_1 = "1";
    public static String level_age_2 = "2";
    public static String level_age_3 = "3";
    public static String level_age_4 = "4";
    public static String level_age_5 = "5";
    public static String level_age_6 = "6";
    public static String level_age_1_name = "0~6";
    public static String level_age_2_name = "7~18";
    public static String level_age_3_name = "19~30";
    public static String level_age_4_name = "31~50";
    public static String level_age_5_name = "51~65";
    public static String level_age_6_name = ">65";
    //二级维度的年龄
    public static String level_age2_1="1";
    public static String level_age2_2="2";
    public static String level_age2_1_name="<=65";
    public static String level_age2_2_name=">65";
    public static String level_age2_1 = "1";
    public static String level_age2_2 = "2";
    public static String level_age2_1_name = "<=65";
    public static String level_age2_2_name = ">65";
    //二级维度的组
    public static String level_group_0="0";
    public static String level_group_1="1";
    public static String level_group_2="2";
    public static String level_group_3="3";
    public static String level_group_4="4";
    public static String level_group_5="5";
    public static String level_group_6="6";
    public static String level_group_7="7";
    public static String level_group_0_name="未分組";
    public static String level_group_1_name="普通人群";
    public static String level_group_2_name="慢病65岁以下人群";
    public static String level_group_3_name="65岁以上人群";
    public static String level_group_4_name="高血压";
    public static String level_group_5_name="糖尿病";
    public static String level_group_6_name="糖尿病和高血压";
    public static String level_group_7_name="慢病65岁以上人群";
    public static String level_group_0 = "0";
    public static String level_group_1 = "1";
    public static String level_group_2 = "2";
    public static String level_group_3 = "3";
    public static String level_group_4 = "4";
    public static String level_group_5 = "5";
    public static String level_group_6 = "6";
    public static String level_group_7 = "7";
    public static String level_group_0_name = "未分組";
    public static String level_group_1_name = "普通人群";
    public static String level_group_2_name = "慢病65岁以下人群";
    public static String level_group_3_name = "65岁以上人群";
    public static String level_group_4_name = "高血压";
    public static String level_group_5_name = "糖尿病";
    public static String level_group_6_name = "糖尿病和高血压";
    public static String level_group_7_name = "慢病65岁以上人群";
    //二级维度签约扣费
    public static String level_expense_0="0";
    public static String level_expense_1="1";
    public static String level_expense_2="2";
    public static String level_expense_0_name="未缴费人数";
    public static String level_expense_1_name="已缴费人数";
    public static String level_expense_2_name="已退费";
    public static String level_expense_0 = "0";
    public static String level_expense_1 = "1";
    public static String level_expense_2 = "2";
    public static String level_expense_0_name = "未缴费人数";
    public static String level_expense_1_name = "已缴费人数";
    public static String level_expense_2_name = "已退费";
    //二级维度健康分布
    public static String level_health_fb_0="0";
    public static String level_health_fb_1="1";
    public static String level_health_fb_2="2";
    public static String level_health_fb_3="3";
    public static String level_health_fb_4="4";
    public static String level_health_fb_0_name="未标注";
    public static String level_health_fb_1_name="健康人群";
    public static String level_health_fb_2_name="患病人群";
    public static String level_health_fb_3_name="高危人群";
    public static String level_health_fb_4_name="恢复期人群";
    public static String level_health_fb_0 = "0";
    public static String level_health_fb_1 = "1";
    public static String level_health_fb_2 = "2";
    public static String level_health_fb_3 = "3";
    public static String level_health_fb_4 = "4";
    public static String level_health_fb_0_name = "未标注";
    public static String level_health_fb_1_name = "健康人群";
    public static String level_health_fb_2_name = "患病人群";
    public static String level_health_fb_3_name = "高危人群";
    public static String level_health_fb_4_name = "恢复期人群";
    //二姐维度的年龄疾病
    public static String level_age_disease_1="1";
    public static String level_age_disease_2="2";
    public static String level_age_disease_3="3";
    public static String level_age_disease_1_name="高血压";
    public static String level_age_disease_2_name="糖尿病";
    public static String level_age_disease_3_name="65岁以上";
    public static String level_age_disease_1 = "1";
    public static String level_age_disease_2 = "2";
    public static String level_age_disease_3 = "3";
    public static String level_age_disease_1_name = "高血压";
    public static String level_age_disease_2_name = "糖尿病";
    public static String level_age_disease_3_name = "65岁以上";
    //耳机维度的时间分布
    public static String level_reply_time_1="1";
    public static String level_reply_time_2="2";
    public static String level_reply_time_3="3";
    public static String level_reply_time_4="4";
    public static String level_reply_time_5="5";
    public static String level_reply_time_1_name="0-8";
    public static String level_reply_time_2_name="8-12";
    public static String level_reply_time_3_name="12-13";
    public static String level_reply_time_4_name="13-18";
    public static String level_reply_time_5_name="18-24";
    public static String level_sign_reason_1="1";
    public static String level_sign_reason_2="2";
    public static String level_sign_reason_3="3";
    public static String level_sign_reason_4="4";
    public static String level_sign_reason_5="5";
    public static String level_sign_reason_6="6";
    public static String level_sign_reason_1_name="常住地变更";
    public static String level_sign_reason_2_name="医生专业度不够";
    public static String level_sign_reason_3_name="咨询回复慢";
    public static String level_sign_reason_4_name="无获得感";
    public static String level_sign_reason_5_name="医生服务态度差";
    public static String level_sign_reason_6_name="其它";
    public static String level_reply_time_1 = "1";
    public static String level_reply_time_2 = "2";
    public static String level_reply_time_3 = "3";
    public static String level_reply_time_4 = "4";
    public static String level_reply_time_5 = "5";
    public static String level_reply_time_1_name = "0-8";
    public static String level_reply_time_2_name = "8-12";
    public static String level_reply_time_3_name = "12-13";
    public static String level_reply_time_4_name = "13-18";
    public static String level_reply_time_5_name = "18-24";
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_2="2";
    public static String level_disease_3="3";
    public static String level_disease_4="4";
    public static String level_disease_1_name="高血压";
    public static String level_disease_2_name="糖尿病";
    public static String level_disease_3_name="糖尿病和高血压";
    public static String level_disease_4_name="健康人群";
    public static String level_sign_reason_1 = "1";
    public static String level_sign_reason_2 = "2";
    public static String level_sign_reason_3 = "3";
    public static String level_sign_reason_4 = "4";
    public static String level_sign_reason_5 = "5";
    public static String level_sign_reason_6 = "6";
    public static String level_sign_reason_1_name = "常住地变更";
    public static String level_sign_reason_2_name = "医生专业度不够";
    public static String level_sign_reason_3_name = "咨询回复慢";
    public static String level_sign_reason_4_name = "无获得感";
    public static String level_sign_reason_5_name = "医生服务态度差";
    public static String level_sign_reason_6_name = "其它";
    //三级维度的疾病
    public static String level_disease_1 = "1";
    public static String level_disease_2 = "2";
    public static String level_disease_3 = "3";
    public static String level_disease_4 = "4";
    public static String level_disease_1_name = "高血压";
    public static String level_disease_2_name = "糖尿病";
    public static String level_disease_3_name = "糖尿病和高血压";
    public static String level_disease_4_name = "健康人群";
    public static String getlevelHealthFbName(String key){
        switch (key){
            case "1":{
    public static String getlevelHealthFbName(String key) {
        switch (key) {
            case "1": {
                return level_health_fb_1_name;
            }
            case "2":{
            case "2": {
                return level_health_fb_2_name;
            }
            case "3":{
            case "3": {
                return level_health_fb_3_name;
            }
            case "4":{
            case "4": {
                return level_health_fb_4_name;
            }
            case "0":{
            case "0": {
                return level_health_fb_0_name;
            }
        }
        return "";
    }
    public static String getLevelAge2(String key){
        switch (key){
            case "1":{
    public static String getLevelAge2(String key) {
        switch (key) {
            case "1": {
                return level_age2_1_name;
            }
            case "2":{
            case "2": {
                return level_age2_2_name;
            }
        }
        return "";
    }
    public static String getLevelExpenseName(String key){
        switch (key){
            case "1":{
    public static String getLevelExpenseName(String key) {
        switch (key) {
            case "1": {
                return level_expense_1_name;
            }
            case "2":{
            case "2": {
                return level_expense_2_name;
            }
            case "0":{
            case "0": {
                return level_expense_0_name;
            }
        }
        return "";
    }
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
    public static String getLevelSexName(String key) {
        switch (key) {
            case "1": {
                return level_sex_1_name;
            }
            case "2":{
            case "2": {
                return level_sex_2_name;
            }
            case "3":{
            case "3": {
                return level_sex_3_name;
            }
        }
        return "";
    }
    public static String getLevelGroupName(String key){
        switch (key){
            case "0":{
    public static String getLevelGroupName(String key) {
        switch (key) {
            case "0": {
                return level_group_0_name;
            }
            case "1":{
            case "1": {
                return level_group_1_name;
            }
            case "2":{
            case "2": {
                return level_group_2_name;
            }
            case "3":{
            case "3": {
                return level_group_3_name;
            }
            case "4":{
            case "4": {
                return level_group_4_name;
            }
            case "5":{
            case "5": {
                return level_group_5_name;
            }
            case "6":{
            case "6": {
                return level_group_6_name;
            }
            case "7":{
            case "7": {
                return level_group_7_name;
            }
        }
        return "";
    }
    public static String getLevelAgeName(String key){
        switch (key){
            case "1":{
    public static String getLevelAgeName(String key) {
        switch (key) {
            case "1": {
                return level_age_1_name;
            }
            case "2":{
            case "2": {
                return level_age_2_name;
            }
            case "3":{
            case "3": {
                return level_age_3_name;
            }
            case "4":{
            case "4": {
                return level_age_4_name;
            }
            case "5":{
            case "5": {
                return level_age_5_name;
            }
            case "6":{
            case "6": {
                return level_age_6_name;
            }
        }
        return "";
    }
    public static String getLevelDiseaseName(String key){
        switch (key){
            case "1":{
    public static String getLevelDiseaseName(String key) {
        switch (key) {
            case "1": {
                return level_disease_1_name;
            }
            case "2":{
            case "2": {
                return level_disease_2_name;
            }
            case "3":{
            case "3": {
                return level_disease_3_name;
            }
            case "4":{
            case "4": {
                return level_disease_4_name;
            }
        }
        return "";
    }
    public static String getLevelAgeDiseaseName(String key){
        switch (key){
            case "1":{
    public static String getLevelAgeDiseaseName(String key) {
        switch (key) {
            case "1": {
                return level_age_disease_1_name;
            }
            case "2":{
            case "2": {
                return level_age_disease_2_name;
            }
            case "3":{
            case "3": {
                return level_age_disease_3_name;
            }
        }
        return "";
    }
    public static String getLevelReplyTimeName(String key){
        switch (key){
            case "1":{
    public static String getLevelReplyTimeName(String key) {
        switch (key) {
            case "1": {
                return level_reply_time_1_name;
            }
            case "2":{
            case "2": {
                return level_reply_time_2_name;
            }
            case "3":{
            case "3": {
                return level_reply_time_3_name;
            }
            case "4":{
            case "4": {
                return level_reply_time_4_name;
            }
            case "5":{
            case "5": {
                return level_reply_time_5_name;
            }
        }
@ -298,13 +300,13 @@ public class Constant {
    public static String getStartTime() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString=simpleDateFormat.format(today);
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear() ) + "-06-30";
            return (1900 + today.getYear()) + "-06-30";
        } else {
            return (1900 + today.getYear() - 1) + "-06-30";
        }
@ -313,15 +315,15 @@ public class Constant {
    public static String getStartYear() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString=simpleDateFormat.format(today);
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear() ) +"";
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) +"";
            return (1900 + today.getYear() - 1) + "";
        }
    }
@ -330,26 +332,71 @@ public class Constant {
    }
    public static String getReason(String key) {
        switch (key){
            case "1":{
        switch (key) {
            case "1": {
                return level_sign_reason_1_name;
            }
            case "2":{
            case "2": {
                return level_sign_reason_2_name;
            }
            case "3":{
            case "3": {
                return level_sign_reason_3_name;
            }
            case "4":{
            case "4": {
                return level_sign_reason_4_name;
            }
            case "5":{
            case "5": {
                return level_sign_reason_5_name;
            }
            case "6":{
            case "6": {
                return level_sign_reason_6_name;
            }
        }
        return "6";
    }
    public static String getServerType(String key) {
        switch (key) {
            case "1": {
                return "普通服务";
            }
            case "2": {
                return "老年人服务";
            }
            case "3": {
                return "慢性病服务";
            }
            case "4": {
                return "未知4";
            }
            case "5": {
                return "未知5";
            }
            case "6": {
                return "孕产妇";
            }
            case "7": {
                return "未知7";
            }
            case "8": {
                return "儿童(0-6岁)";
            }
            case "9": {
                return "高血压";
            }
            case "10": {
                return "糖尿病";
            }
            case "11": {
                return "贫困人口";
            }
            case "12": {
                return "计生特殊家庭";
            }
            case "13": {
                return "特殊人群";
            }
        }
        return "0";
    }
}

+ 24 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java

@ -183,6 +183,7 @@ public class CurrentDayAllQuotaJob implements Job {
        computequota_33(); //统计续签夸区
        computequota_34(); //续签签入
        computequota_35(); //统计续签签出
        computequota_36(sql, signFamilies, null); //签约服务类型
        quartzJobLog.setJobContent(allContent.toString());
@ -206,6 +207,29 @@ public class CurrentDayAllQuotaJob implements Job {
        redisTemplate.opsForValue().set("quota:timeKey", RedisStorage.timeKey);
    }
    private void computequota_36(String sql, List<SignFamily> signFamilies, Object o) {
        String quotaId = "36";
        //找出今天的签约信息
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        try {
            //抽取數據
            // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2ServerType, sql, null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(patientSexRoleData, null, quotaId, 13, 10, 1);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------36----------");
    }
    private void computequota_22() {
        String quotaId = "22";

+ 127 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignServerTypeJob.java

@ -0,0 +1,127 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.11.
 * 签约 服务类型
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class SignServerTypeJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private SignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    String yesterday;
    String daybefore;
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try {
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore = StringUtils.isEmpty(map.get("daybefore")) ? SignJob.getDayString(-2) : map.get("daybefore").toString();
            yesterday = StringUtils.isEmpty(map.get("yesterday")) ? SignJob.getDayString(-1) : map.get("yesterday").toString();
            //计算指标
            computequota();
        } catch (Exception e) {
            e.printStackTrace();
            //如果出錯立即重新執行
            JobExecutionException e2 = new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    private void computequota() throws Exception {
        try {
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 36 + "'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //从缓存取数据
            CacheModel cacheModel = cachePool.getSignFamilysWithExpenseStatus1ByDate(yesterday);
            //清洗數據
            FilterModel etlModels = signDataFilter.filter(cacheModel.getSignFamilies(), SignDataFilter.level2ServerType, cacheModel.getSql(), yesterday);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>> returnDatas = levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = level2Role.elt(returnDatas);
            dbStorage.saveByLevel2(level2Data, yesterday, wlyyQuota, 13, 10, 1);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError() ? "1" : "0");
            quartzJobLogDao.save(quartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Transactional
    private void deleteData() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 14 + "'");
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
}