Prechádzať zdrojové kódy

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

yeshijie 7 rokov pred
rodič
commit
3e300947c1
29 zmenil súbory, kde vykonal 1830 pridanie a 229 odobranie
  1. 159 4
      common/common-entity/src/main/java/com/yihu/wlyy/entity/job/QuartzJobConfig.java
  2. 162 0
      common/common-entity/src/main/java/com/yihu/wlyy/entity/oldpeople/OldPeoplePhysicalExaminationEntity.java
  3. 86 0
      common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/PatientRemindRecordsEntity.java
  4. 9 0
      common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/SignFamilyRenewLog.java
  5. 1 1
      patient-co-service/wlyy_service/src/main/java/com/yihu/wlyy/service/controller/SignController.java
  6. 0 33
      patient-co-service/wlyy_service/src/main/java/com/yihu/wlyy/service/service/SignZYService.java
  7. 10 0
      patient-co-service/wlyy_sign/src/main/java/com/yihu/wlyy/sign/entity/SignFamilyRenewLog.java
  8. 2 0
      patient-co-service/wlyy_sign/src/main/java/com/yihu/wlyy/sign/service/SignZYService.java
  9. 2 1
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/config/SwaggerConfig.java
  10. 1 1
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/controller/ExtractDataController.java
  11. 56 0
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/etl/convert/wlyy/ServerTypeConvert.java
  12. 25 0
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/etl/convert/wlyy/model/ServerType.java
  13. 199 27
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/service/ExtractDataService.java
  14. 22 22
      patient-co/patient-co-statistics-es/src/main/resources/application.yml
  15. 7 14
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/mycache/CachePool.java
  16. 7 14
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java
  17. 14 8
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignJob.java
  18. 15 9
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOrgJob.java
  19. 15 8
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOrgOutJob.java
  20. 15 9
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTeamJob.java
  21. 14 8
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTeamOutJob.java
  22. 15 9
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTownJob.java
  23. 14 8
      patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTownOutJob.java
  24. 2 2
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java
  25. 407 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java
  26. 276 2
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statisticsES/StatisticsESService.java
  27. 9 9
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/ElasticsearchUtil.java
  28. 219 40
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/EsStatisticsController.java
  29. 67 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

+ 159 - 4
common/common-entity/src/main/java/com/yihu/wlyy/entity/job/QuartzJobConfig.java

@ -14,7 +14,7 @@ import org.hibernate.annotations.GenericGenerator;
@Table(name = "wlyy_job_config")
public class QuartzJobConfig implements java.io.Serializable {
    private String id;
    /*private String id;
    private String quotaId;//指标id
    private String jobName;//任务名称
    private String jobInfo;//任务描述
@ -24,12 +24,12 @@ public class QuartzJobConfig implements java.io.Serializable {
    private String status;//1 启动 0停止
    private String del;//是否删除 1正常 0删除
    /** minimal constructor */
    *//** minimal constructor *//*
    public QuartzJobConfig() {
    }
    /** full constructor */
    *//** full constructor *//*
    public QuartzJobConfig(String jobName, String jobInfo, String jobType,
                           String jobClass, String quartzCron, String status) {
        this.jobName = jobName;
@ -123,5 +123,160 @@ public class QuartzJobConfig implements java.io.Serializable {
    public void setDel(String del) {
        this.del = del;
    }
    }*/
    private String id;
	private String quotaId;//指标id
	private String jobName;//任务名称
	private String jobInfo;//任务描述
	private String jobType;//任务类型(0--单次执行  1--周期执行 2--监听任务)
	private String jobClass;//任务执行的class
	private String quartzCron;//quartz表达式
	private String status;//1 启动 0停止
	private String del;//是否删除 1正常 0删除
	private String sql;
	private String sqlCount;
	private String sqlDay;
	private String sqlYear;
	private String cacheKey;//缓存的key
	/** minimal constructor */
	public QuartzJobConfig() {
	}
	/** full constructor */
	public QuartzJobConfig(String jobName, String jobInfo, String jobType,
                           String jobClass, String quartzCron, String status) {
		this.jobName = jobName;
		this.jobInfo = jobInfo;
		this.jobType = jobType;
		this.jobClass = jobClass;
		this.quartzCron = quartzCron;
		this.status = status;
	}
	// Property accessors
	@GenericGenerator(name = "generator", strategy = "uuid")
	@Id
	@GeneratedValue(generator = "generator")
	@Column(name = "id", unique = true, nullable = false, length = 50)
	public String getId() {
		return this.id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@Column(name = "job_name", length = 50)
	public String getJobName() {
		return this.jobName;
	}
	public void setJobName(String jobName) {
		this.jobName = jobName;
	}
	@Column(name = "job_info", length = 200)
	public String getJobInfo() {
		return this.jobInfo;
	}
	public void setJobInfo(String jobInfo) {
		this.jobInfo = jobInfo;
	}
	@Column(name = "job_type", length = 10)
	public String getJobType() {
		return this.jobType;
	}
	public void setJobType(String jobType) {
		this.jobType = jobType;
	}
	@Column(name = "job_class", length = 200)
	public String getJobClass() {
		return jobClass;
	}
	public void setJobClass(String jobClass) {
		this.jobClass = jobClass;
	}
	@Column(name = "quartz_cron", length = 200)
	public String getQuartzCron() {
		return this.quartzCron;
	}
	public void setQuartzCron(String quartzCron) {
		this.quartzCron = quartzCron;
	}
	@Column(name = "status", length = 1)
	public String getStatus() {
		return this.status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	@Column(name = "quota_id", length = 50)
	public String getQuotaId() {
		return quotaId;
	}
	public void setQuotaId(String quotaId) {
		this.quotaId = quotaId;
	}
	@Column(name = "del", length = 1)
	public String getDel() {
		return del;
	}
	public void setDel(String del) {
		this.del = del;
	}
	public String getSql() {
		return sql;
	}
	public void setSql(String sql) {
		this.sql = sql;
	}
	public String getSqlCount() {
		return sqlCount;
	}
	public void setSqlCount(String sqlCount) {
		this.sqlCount = sqlCount;
	}
	public String getSqlDay() {
		return sqlDay;
	}
	public void setSqlDay(String sqlDay) {
		this.sqlDay = sqlDay;
	}
	public String getSqlYear() {
		return sqlYear;
	}
	public void setSqlYear(String sqlYear) {
		this.sqlYear = sqlYear;
	}
	public String getCacheKey() {
		return cacheKey;
	}
	public void setCacheKey(String cacheKey) {
		this.cacheKey = cacheKey;
	}
}

+ 162 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/oldpeople/OldPeoplePhysicalExaminationEntity.java

@ -0,0 +1,162 @@
package com.yihu.wlyy.entity.oldpeople;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
 * @author huangwenjie
 * @date 2017/10/18 17:15
 */
@Entity
@Table(name = "wlyy_old_people_physical_examination",catalog = "")
public class OldPeoplePhysicalExaminationEntity extends IdEntity implements Serializable {
	private String code;
	private String medicalNo;
	private String patientName;
	private String patientCode;
	private String idCard;
	private String doctorCode;
	private String jwDoctorCode;
	private String orgCode;
	private String orgName;
	private Timestamp medicalTime;
	private Integer sex;
	private String homeAddres;
	private Timestamp createTime;
	
	private static final long serialVersionUID = 8358924836164389434L;
	
	@Basic
	@Column(name = "code")
	public String getCode() {
		return code;
	}
	
	public void setCode(String code) {
		this.code = code;
	}
	
	@Basic
	@Column(name = "medical_no")
	public String getMedicalNo() {
		return medicalNo;
	}
	
	public void setMedicalNo(String medicalNo) {
		this.medicalNo = medicalNo;
	}
	
	@Basic
	@Column(name = "patient_name")
	public String getPatientName() {
		return patientName;
	}
	
	public void setPatientName(String patientName) {
		this.patientName = patientName;
	}
	
	@Basic
	@Column(name = "patient_code")
	public String getPatientCode() {
		return patientCode;
	}
	
	public void setPatientCode(String patientCode) {
		this.patientCode = patientCode;
	}
	
	@Basic
	@Column(name = "id_card")
	public String getIdCard() {
		return idCard;
	}
	
	public void setIdCard(String idCard) {
		this.idCard = idCard;
	}
	
	@Basic
	@Column(name = "doctor_code")
	public String getDoctorCode() {
		return doctorCode;
	}
	
	public void setDoctorCode(String doctorCode) {
		this.doctorCode = doctorCode;
	}
	
	@Basic
	@Column(name = "jw_doctor_code")
	public String getJwDoctorCode() {
		return jwDoctorCode;
	}
	
	public void setJwDoctorCode(String jwDoctorCode) {
		this.jwDoctorCode = jwDoctorCode;
	}
	
	@Basic
	@Column(name = "org_code")
	public String getOrgCode() {
		return orgCode;
	}
	
	public void setOrgCode(String orgCode) {
		this.orgCode = orgCode;
	}
	
	@Basic
	@Column(name = "org_name")
	public String getOrgName() {
		return orgName;
	}
	
	public void setOrgName(String orgName) {
		this.orgName = orgName;
	}
	
	@Basic
	@Column(name = "medical_time")
	public Timestamp getMedicalTime() {
		return medicalTime;
	}
	
	public void setMedicalTime(Timestamp medicalTime) {
		this.medicalTime = medicalTime;
	}
	
	@Basic
	@Column(name = "sex")
	public Integer getSex() {
		return sex;
	}
	
	public void setSex(Integer sex) {
		this.sex = sex;
	}
	
	@Basic
	@Column(name = "home_addres")
	public String getHomeAddres() {
		return homeAddres;
	}
	
	public void setHomeAddres(String homeAddres) {
		this.homeAddres = homeAddres;
	}
	
	@Basic
	@Column(name = "create_time")
	public Timestamp getCreateTime() {
		return createTime;
	}
	
	public void setCreateTime(Timestamp createTime) {
		this.createTime = createTime;
	}
	
}

+ 86 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/PatientRemindRecordsEntity.java

@ -0,0 +1,86 @@
package com.yihu.wlyy.entity.patient;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
 * @author huangwenjie
 * @date 2017/10/18 17:15
 */
@Entity
@Table(name = "wlyy_people_remind_records", catalog = "")
public class PatientRemindRecordsEntity extends IdEntity implements Serializable {
	private String code;
	private Integer type;
	private String patientCode;
	private String relationCode;
	private Timestamp remindTime;
	private Timestamp createTime;
	
	private static final long serialVersionUID = 8358924836164389434L;
	
	@Basic
	@Column(name = "code")
	public String getCode() {
		return code;
	}
	
	public void setCode(String code) {
		this.code = code;
	}
	
	@Basic
	@Column(name = "type")
	public Integer getType() {
		return type;
	}
	
	public void setType(Integer type) {
		this.type = type;
	}
	
	@Basic
	@Column(name = "patient_code")
	public String getPatientCode() {
		return patientCode;
	}
	
	public void setPatientCode(String patientCode) {
		this.patientCode = patientCode;
	}
	
	@Basic
	@Column(name = "relation_code")
	public String getRelationCode() {
		return relationCode;
	}
	
	public void setRelationCode(String relationCode) {
		this.relationCode = relationCode;
	}
	
	@Basic
	@Column(name = "remind_time")
	public Timestamp getRemindTime() {
		return remindTime;
	}
	
	public void setRemindTime(Timestamp remindTime) {
		this.remindTime = remindTime;
	}
	
	@Basic
	@Column(name = "create_time")
	public Timestamp getCreateTime() {
		return createTime;
	}
	
	public void setCreateTime(Timestamp createTime) {
		this.createTime = createTime;
	}
	
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/patient/SignFamilyRenewLog.java

@ -36,6 +36,8 @@ public class SignFamilyRenewLog extends IdEntity {
    private String renewChangeReason;
    private String expensesStatus;
    private String patient;
    public String getSignCode() {
        return signCode;
    }
@ -211,4 +213,11 @@ public class SignFamilyRenewLog extends IdEntity {
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
}

+ 1 - 1
patient-co-service/wlyy_service/src/main/java/com/yihu/wlyy/service/controller/SignController.java

@ -107,7 +107,7 @@ public class SignController {
    public Result getSickMedicalSimpleListInfo (
            @ApiParam(name="TIME_START",value="修改的开始时间",defaultValue = "2012-2-6 00:00:00")
            @RequestParam(value="TIME_START",required = false) String TIME_START,
            @ApiParam(name="TIME_END",value="修改的开始时间",defaultValue = "2012-2-7 23:59:59")
            @ApiParam(name="TIME_END",value="修改的结束时间",defaultValue = "2012-2-7 23:59:59")
            @RequestParam(value="TIME_END",required = false) String TIME_END){
        try {
            String response = signZYService.getSickMedicalSimpleListInfo(TIME_START,TIME_END);

+ 0 - 33
patient-co-service/wlyy_service/src/main/java/com/yihu/wlyy/service/service/SignZYService.java

@ -17,49 +17,16 @@ import java.util.*;
@Service("SignZYService")
public class SignZYService {
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private DoctorDao doctorDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorMappingDao doctorMappingDao;
    @Autowired
    private HospitalMappingDao hospitalMappingDao;
    @Autowired
    private AdminTeamDao adminTeamDao;
    @Autowired
    private DoctorTeamDao teamDao;
    @Autowired
    private DoctorTeamMemberDao teamMemberDao;
    @Autowired
    private MessageDao messageDao;
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private ZysoftService zysoftService;
    @Autowired
    private LogService logService;
    @Autowired
    private SystemDictService systemDictService;
    /**
     * 获取机构映射

+ 10 - 0
patient-co-service/wlyy_sign/src/main/java/com/yihu/wlyy/sign/entity/SignFamilyRenewLog.java

@ -34,6 +34,8 @@ public class SignFamilyRenewLog extends IdEntity {
	private Date createTime;
	private Date applyDate;//签约时间
	private String expensesStatus; //扣费状态【0未扣费 1已扣费 2已退费】
	
	private String patient;
	@Column(name = "apply_date")
	public Date getApplyDate() {
@ -206,4 +208,12 @@ public class SignFamilyRenewLog extends IdEntity {
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	
	public String getPatient() {
		return patient;
	}
	
	public void setPatient(String patient) {
		this.patient = patient;
	}
}

+ 2 - 0
patient-co-service/wlyy_sign/src/main/java/com/yihu/wlyy/sign/service/SignZYService.java

@ -294,6 +294,8 @@ public class SignZYService {
            else{
                log.setExpensesStatus("0"); //扣费
            }
    
            log.setPatient(sign.getPatient());
            signFamilyRenewLogDao.save(log);

+ 2 - 1
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/config/SwaggerConfig.java

@ -42,7 +42,8 @@ public class SwaggerConfig extends WebMvcConfigurerAdapter {
                .select()
                .paths(or(
                        regex("/job/.*"),
                        regex("/quotaQuery/.*")
                        regex("/quotaQuery/.*"),
                        regex("/extractDataToEs/.*")
                ))
                .build()
                .apiInfo(publicApiInfo());

+ 1 - 1
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/controller/ExtractDataController.java

@ -18,7 +18,7 @@ import java.util.List;
 */
@RestController
@RequestMapping("/extractData")
@RequestMapping("/extractDataToEs")
@Api(description = "抽取mysql数据到es")
public class ExtractDataController extends BaseController {
    @Autowired

+ 56 - 0
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/etl/convert/wlyy/ServerTypeConvert.java

@ -0,0 +1,56 @@
package com.yihu.wlyy.statistics.etl.convert.wlyy;
import com.yihu.wlyy.entity.dimension.WlyyDimensionQuota;
import com.yihu.wlyy.statistics.etl.convert.Convert;
import com.yihu.wlyy.statistics.etl.convert.wlyy.model.HealthLable;
import com.yihu.wlyy.statistics.etl.convert.wlyy.model.ServerType;
import com.yihu.wlyy.statistics.vo.DataModel;
import org.springframework.beans.BeanUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by chenweida on 2017/10/18.
 * 服务类型转换器
 */
public class ServerTypeConvert implements Convert {
    @Override
    public List<DataModel> convert(JdbcTemplate jdbcTemplate, List<DataModel> oneList, String slaveLevel, WlyyDimensionQuota temp) {
        List<DataModel> returnList = new ArrayList<>();
        //得到患者的服务类型
        String sql = "select w.sign_code signCode,w.server_type serverType from wlyy_sign_family_server w ";
        List<ServerType> serverTypes = jdbcTemplate.query(sql, new BeanPropertyRowMapper(ServerType.class));
        //List转Map LIST key签约表code value是服务类型
        Map<String, List<String>> serverTypesMap = new HashMap<>();
        serverTypes.forEach(one -> {
            List<String> serverTypeList = serverTypesMap.get(one.getSignCode());
            if (serverTypeList == null) {
                serverTypeList = new ArrayList<String>();
            }
            serverTypeList.add(one.getServerType());
            serverTypesMap.put(one.getSignCode(),serverTypeList);
        });
        oneList.stream().forEach(one -> {
            List<String> serverTypeList = serverTypesMap.get(one.getBusinessId());
            if (serverTypeList != null) {
                for (int i = 0; i < serverTypeList.size(); i++) {
                    try {
                        DataModel dataModelTemp = new DataModel();
                        BeanUtils.copyProperties(one, dataModelTemp);
                        DataModel.class.getMethod("setSlaveKey" + slaveLevel, String.class).invoke(dataModelTemp, serverTypeList.get(i));
                        returnList.add(dataModelTemp);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        return returnList;
    }
}

+ 25 - 0
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/etl/convert/wlyy/model/ServerType.java

@ -0,0 +1,25 @@
package com.yihu.wlyy.statistics.etl.convert.wlyy.model;
/**
 * Created by chenweida on 2017/10/18.
 */
public class ServerType {
    private String signCode;
    private String serverType;
    public String getSignCode() {
        return signCode;
    }
    public void setSignCode(String signCode) {
        this.signCode = signCode;
    }
    public String getServerType() {
        return serverType;
    }
    public void setServerType(String serverType) {
        this.serverType = serverType;
    }
}

+ 199 - 27
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/service/ExtractDataService.java

@ -2,12 +2,25 @@ package com.yihu.wlyy.statistics.service;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.statistics.dao.WlyyQuotaResultDao;
import com.yihu.wlyy.statistics.etl.save.es.ElasticFactory;
import com.yihu.wlyy.statistics.etl.save.es.ElastricSearchSave;
import com.yihu.wlyy.statistics.util.DateUtil;
import com.yihu.wlyy.statistics.vo.SaveModel;
import io.searchbox.client.JestClient;
import io.searchbox.core.*;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
@ -15,8 +28,12 @@ import java.util.List;
 */
@Service
public class ExtractDataService {
    @Autowired
    private ElasticFactory elasticFactory;
    @Value("${es.type}")
    private String esType;
    @Value("${es.index}")
    private String esIndex;
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;
    @Autowired
@ -24,10 +41,131 @@ public class ExtractDataService {
    public void extractOneDate(String date) {
        List<WlyyQuotaResult> quotaResults = wlyyQuotaResultDao.findByDate(date);
        save2es(quotaResults, date, null);
    }
    public void extractOneDateWithId(String date, String quotaId) {
        List<WlyyQuotaResult> quotaResults = wlyyQuotaResultDao.findByDateAndId(date, quotaId);
        save2es(quotaResults, date, quotaId);
    }
    public void extractDate2Date(String start, String end) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = sdf.parse(start);
        Date endDate = sdf.parse(end);
        if (startDate.after(endDate)) {
            throw new Exception("日期参数错误");
        }
        int day = daysBetween(startDate, endDate);
        for (int i = 0; i < day + 1; i++) {
            System.out.println(getYesterday(i, startDate));
            extractOneDate(getYesterday(i, startDate));
        }
    }
    public void extractDate2DateWithId(String start, String end, String quotaId) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = sdf.parse(start);
        Date endDate = sdf.parse(end);
        if (startDate.after(endDate)) {
            throw new Exception("日期参数错误");
        }
        int day = daysBetween(startDate, endDate);
        for (int i = 0; i < day + 1; i++) {
            extractOneDateWithId(getYesterday(i, startDate), quotaId);
        }
    }
    private String getYesterday(Integer day, Date startDate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        cal.add(Calendar.DAY_OF_MONTH, day);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
    private int daysBetween(Date smdate, Date bdate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        smdate = sdf.parse(sdf.format(smdate));
        bdate = sdf.parse(sdf.format(bdate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }
    private void deleteData(Date quotaDate, String quotaCode) {
        try {
            JestClient jestClient = elasticFactory.getJestClient();
            //先根据条件查找出来
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(
                    new BoolQueryBuilder()
                            .must(QueryBuilders.matchQuery("quotaCode", quotaCode))
                            .must(QueryBuilders.matchQuery("quotaDate", quotaDate))
            ).size(50000);//一次取10000条
            Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(esIndex).addType(esType)
                    .build();
            SearchResult result = jestClient.execute(search);
            List<SaveModel> saveModels = result.getSourceAsObjectList(SaveModel.class);
            //根据id批量删除
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esIndex).defaultType(esType);
            for (SaveModel obj : saveModels) {
                Delete index = new Delete.Builder(obj.getId()).build();
                bulk.addAction(index);
            }
            BulkResult br = jestClient.execute(bulk.build());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void deleteData(Date quotaDate) {
        try {
            JestClient jestClient = elasticFactory.getJestClient();
            //先根据条件查找出来
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(
                    new BoolQueryBuilder()
                            .must(QueryBuilders.matchQuery("quotaDate", quotaDate))
            ).size(100000);//一次取10000条
            Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(esIndex).addType(esType)
                    .build();
            SearchResult result = jestClient.execute(search);
            List<SaveModel> saveModels = result.getSourceAsObjectList(SaveModel.class);
            //根据id批量删除
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esIndex).defaultType(esType);
            for (SaveModel obj : saveModels) {
                Delete index = new Delete.Builder(obj.getId()).build();
                bulk.addAction(index);
            }
            BulkResult br = jestClient.execute(bulk.build());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void save2es(List<WlyyQuotaResult> quotaResults, String quotaCode, String quotaDate) {
        List<SaveModel> saveModel = new ArrayList<>();
        if (quotaResults != null && quotaResults.size() > 0) {
            //查询ES是否有这天的数据有就删除
            if (StringUtils.isEmpty(quotaCode)) {
                deleteData(DateUtil.strToDate(quotaDate, "yyyy-MM-dd"));
            } else {
                deleteData(DateUtil.strToDate(quotaDate, "yyyy-MM-dd"), quotaCode);
            }
            //
            quotaResults.stream().forEach(one -> {
                SaveModel saveModelTemp = new SaveModel();
@ -50,37 +188,71 @@ public class ExtractDataService {
                saveModelTemp.setSlaveKey2Name(one.getLevel3TypeName());
                if (
                        "1".equals(one.getQuatoCode()) ||
                        "2".equals(one.getQuatoCode()) ||
                        "6".equals(one.getQuatoCode())||
                                "7".equals(one.getQuatoCode())||
                                "8".equals(one.getQuatoCode())||
                                "9".equals(one.getQuatoCode())
                   ){
                    saveModelTemp.setTimeLevel("2");
                                "2".equals(one.getQuatoCode()) ||
                                "6".equals(one.getQuatoCode()) ||
                                "7".equals(one.getQuatoCode()) ||
                                "8".equals(one.getQuatoCode()) ||
                                "9".equals(one.getQuatoCode()) ||
                                "10".equals(one.getQuatoCode()) ||
                                "12".equals(one.getQuatoCode()) ||
                                "13".equals(one.getQuatoCode()) ||
                                "14".equals(one.getQuatoCode()) ||
                                "15".equals(one.getQuatoCode()) ||
                                "16".equals(one.getQuatoCode()) ||
                                "17".equals(one.getQuatoCode()) ||
                                "20".equals(one.getQuatoCode()) ||
                                "21".equals(one.getQuatoCode()) ||
                                "26".equals(one.getQuatoCode()) ||
                                "29".equals(one.getQuatoCode()) ||
                                "30".equals(one.getQuatoCode()) ||
                                "31".equals(one.getQuatoCode()) ||
                                "32".equals(one.getQuatoCode()) ||
                                "33".equals(one.getQuatoCode()) ||
                                "34".equals(one.getQuatoCode()) ||
                                "35".equals(one.getQuatoCode()) ||
                                "36".equals(one.getQuatoCode()) ||
                                "37".equals(one.getQuatoCode()) ||
                                "38".equals(one.getQuatoCode()) ||
                                "39".equals(one.getQuatoCode()) ||
                                "40".equals(one.getQuatoCode()) ||
                                "41".equals(one.getQuatoCode()) ||
                                "42".equals(one.getQuatoCode()) ||
                                "43".equals(one.getQuatoCode()) ||
                                "44".equals(one.getQuatoCode()) ||
                                "45".equals(one.getQuatoCode()) ||
                                "46".equals(one.getQuatoCode()) ||
                                "47".equals(one.getQuatoCode()) ||
                                "48".equals(one.getQuatoCode()) ||
                                "49".equals(one.getQuatoCode()) ||
                                "50".equals(one.getQuatoCode()) ||
                                "51".equals(one.getQuatoCode()) ||
                                "52".equals(one.getQuatoCode()) ||
                                "53".equals(one.getQuatoCode()) ||
                                "54".equals(one.getQuatoCode()) ||
                                "55".equals(one.getQuatoCode()) ||
                                "56".equals(one.getQuatoCode()) ||
                                "57".equals(one.getQuatoCode())
                        ) {
                    saveModelTemp.setTimeLevel("2");//到达量
                }
                if (
                        "3".equals(one.getQuatoCode()) ||
                        "4".equals(one.getQuatoCode()) ||
                        "5".equals(one.getQuatoCode())
                        ){
                    saveModelTemp.setTimeLevel("2");
                                "4".equals(one.getQuatoCode()) ||
                                "5".equals(one.getQuatoCode()) ||
                                "22".equals(one.getQuatoCode()) ||
                                "23".equals(one.getQuatoCode()) ||
                                "24".equals(one.getQuatoCode()) ||
                                "25".equals(one.getQuatoCode()) ||
                                "27".equals(one.getQuatoCode())
                        ) {
                    saveModelTemp.setTimeLevel("1");//增量
                }
                saveModelTemp.setAreaLevel("5");
            });
        }
    }
    public void extractOneDateWithId(String date, String quotaId) {
        wlyyQuotaResultDao.findByDateAndId(date, quotaId);
    }
    public void extractDate2Date(String startDate, String endDate) {
    }
    public void extractDate2DateWithId(String startDate, String endDate, String quotaId) {
                saveModel.add(saveModelTemp);
            });
            elastricSearchSave.save(saveModel);
        }
    }
}

+ 22 - 22
patient-co/patient-co-statistics-es/src/main/resources/application.yml

@ -108,30 +108,30 @@ spring:
  profiles: test
  datasource:
    primaryReadWrite:
      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: linzhou
      password: linzhou
    primaryRead:
      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: linzhou
      password: linzhou
    im: #im库
      url: jdbc:mysql://172.17.110.160/im_new?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: linzhou
      password: linzhou
#    primaryReadWrite:
#      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: root
#      password: 123456
#      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: linzhou
#      password: linzhou
#    primaryRead:
#      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: root
#      password: 123456
#      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: linzhou
#      password: linzhou
#    im: #im库
#      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: root
#      password: 123456
#      url: jdbc:mysql://172.17.110.160/im_new?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: linzhou
#      password: linzhou
    primaryReadWrite:
      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: root
      password: 123456
    primaryRead:
      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: root
      password: 123456
    im: #im库
      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: root
      password: 123456
  redis:
    host: 172.19.103.88 # Redis server host.
@ -164,7 +164,7 @@ wlyy:
    databaseName: im_new
quartz:
  name: schedulerFactoryBean_test
  name: schedulerFactoryBean_cwd
---

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

@ -335,9 +335,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id ,fr.patient " +
                    "   from wlyy_sign_family_renew_log fr " +
                    "   join wlyy_patient p ON p.idcard = fr.idcard" +
                    "   where " +
                    "   fr.apply_date<'"+ date + Constant.quota_date_last+"' " +
                    "   and fr.sign_year ='"+Constant.getNowYearByDate(date)+"' " +
@ -367,9 +366,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    "  from wlyy_sign_family_renew_log fr " +
                    "  join wlyy_patient p ON p.idcard = fr.idcard" +
                    "  where " +
                    "  fr.apply_date<'"+ date + Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(date)+"'   " +
@ -399,9 +397,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id ,p.`code` patient " +
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id ,fr.patient " +
                    "  from wlyy_sign_family_renew_log fr " +
                    "  join wlyy_patient p ON p.idcard = fr.idcard" +
                    "  where " +
                    "  fr.apply_date<'"+date+ Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(date)+"'  " +
@ -431,9 +428,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id ,fr.patient " +
                    "   from wlyy_sign_family_renew_log fr " +
                    "   join wlyy_patient p ON p.idcard = fr.idcard" +
                    "   where " +
                    "   fr.apply_date<'"+ date + Constant.quota_date_last+"' " +
                    "   and fr.sign_year ='"+Constant.getNowYearByDate(date)+"' " +
@ -464,9 +460,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    "  from wlyy_sign_family_renew_log fr " +
                    "  join wlyy_patient p ON p.idcard = fr.idcard" +
                    "  where " +
                    "  fr.apply_date<'"+ date + Constant.quota_date_last+"'" +
                    "   and fr.sign_year ='"+Constant.getNowYearByDate(date)+"'" +
@ -497,9 +492,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql="select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql="select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    "  from wlyy_sign_family_renew_log fr " +
                    "  join wlyy_patient p ON p.idcard = fr.idcard" +
                    "  where " +
                    "  fr.apply_date<'"+date+ Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(date)+"'" +
@ -530,9 +524,8 @@ public class CachePool {
        if (model == null) {
            model = new RenewCacheModel();
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient  " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient  " +
                    "  from wlyy_sign_family_renew_log fr " +
                    "  join wlyy_patient p ON p.idcard = fr.idcard" +
                    "  where " +
                    "  fr.apply_date<'"+ date + Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(date)+"'" +

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

@ -147,9 +147,8 @@ public class CurrentDayAllQuotaJob implements Job {
     */
    public Map<String,Object> getCityRenewTotals(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard" +
                    " where  " +
                    " fr.apply_date<'"+ tomorrow+"' and " +
                    " fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "' and " +
@ -174,9 +173,8 @@ public class CurrentDayAllQuotaJob implements Job {
     */
    public Map<String,Object> getTowmRenewTotals(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard" +
                    " where  " +
                    " fr.apply_date<'"+ tomorrow+"' and " +
                    " fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "' and " +
@ -201,9 +199,8 @@ public class CurrentDayAllQuotaJob implements Job {
     */
    public Map<String,Object> getOrgRenewTotals(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard" +
                    " where " +
                    " fr.apply_date<'"+ tomorrow+"' and  fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "'and  fr.hospital=fr.old_hospital  and LENGTH(fr.hospital)=10 and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
@ -224,9 +221,8 @@ public class CurrentDayAllQuotaJob implements Job {
     */
    public Map<String,Object> getTeamRenewTotals(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard" +
                    " where   " +
                    " fr.apply_date<'"+ tomorrow+"' and  fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "' and fr.admin_team_id=fr.old_admin_team_id  and LENGTH(fr.hospital)=10 and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
@ -243,9 +239,8 @@ public class CurrentDayAllQuotaJob implements Job {
    public Map<String,Object> getTeamRenewOut(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard " +
                    " where    " +
                    " fr.apply_date<'"+ tomorrow+"' and  fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "' and fr.admin_team_id!=fr.old_admin_team_id  and LENGTH(fr.hospital)=10 and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
@ -262,9 +257,8 @@ public class CurrentDayAllQuotaJob implements Job {
    public Map<String,Object> getOrgRenewOut(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient" +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard" +
                    " where   " +
                    " fr.apply_date<'"+ tomorrow+"' and  fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital!=fr.old_hospital and LENGTH(fr.hospital)=10 and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
@ -281,9 +275,8 @@ public class CurrentDayAllQuotaJob implements Job {
    public Map<String,Object> getTownRenewOut(){
        try{
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,p.`code` patient " +
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id ,fr.patient " +
                    " from wlyy_sign_family_renew_log fr " +
                    " join wlyy_patient p ON p.idcard = fr.idcard " +
                    " where " +
                    " fr.apply_date<'"+ tomorrow+"' and  fr.sign_year= '" + Constant.getNowYearByDate(tomorrow) + "' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital!=fr.old_hospital and LEFT(fr.hospital,6)!=LEFT(fr.old_hospital,6)  and LENGTH(fr.hospital)=10 and LENGTH(fr.old_hospital)=10 ";
            //抽取數據

+ 14 - 8
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignJob.java

@ -6,6 +6,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -50,6 +52,8 @@ public class RenewSignJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -87,15 +91,17 @@ public class RenewSignJob implements Job {
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id  from wlyy_sign_family_renew_log fr where " +
                    "   fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
                    "   and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"' " +
                    "   and LENGTH(fr.hospital)=10 " +
                    "   and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
//            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id  from wlyy_sign_family_renew_log fr where " +
//                    "   fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
//                    "   and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"' " +
//                    "   and LENGTH(fr.hospital)=10 " +
//                    "   and LENGTH(fr.old_hospital)=10 ";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //从缓存取数据
            RenewCacheModel cacheModel=cachePool.getArriveRenewTotalCityMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 15 - 9
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOrgJob.java

@ -5,6 +5,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -46,6 +48,8 @@ public class RenewSignOrgJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -82,16 +86,18 @@ public class RenewSignOrgJob implements Job {
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where " +
                    "   fr.apply_date<'"+yesterday+Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'  " +
                    "  and fr.hospital=fr.old_hospital " +
                    "  and LENGTH(fr.hospital)=10 " +
                    "  and LENGTH(fr.old_hospital)=10";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
//            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where " +
//                    "   fr.apply_date<'"+yesterday+Constant.quota_date_last+"' " +
//                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'  " +
//                    "  and fr.hospital=fr.old_hospital " +
//                    "  and LENGTH(fr.hospital)=10 " +
//                    "  and LENGTH(fr.old_hospital)=10";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //从缓存取数据
            RenewCacheModel cacheModel=cachePool.getArriveRenewTotalOrgMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 15 - 8
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOrgOutJob.java

@ -5,6 +5,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -46,6 +48,8 @@ public class RenewSignOrgOutJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -82,16 +86,19 @@ public class RenewSignOrgOutJob implements Job {
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
                    "  fr.apply_date<'"+yesterday+Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'" +
                    "  and fr.hospital!=fr.old_hospital" +
                    "  and LENGTH(fr.hospital)=10 " +
                    "  and LENGTH(fr.old_hospital)=10";
//            String sql="select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
//                    "  fr.apply_date<'"+yesterday+Constant.quota_date_last+"' " +
//                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'" +
//                    "  and fr.hospital!=fr.old_hospital" +
//                    "  and LENGTH(fr.hospital)=10 " +
//                    "  and LENGTH(fr.old_hospital)=10";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            RenewCacheModel cacheModel= cachePool.getArriveRenewSignOrgOutMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 15 - 9
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTeamJob.java

@ -5,6 +5,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -46,6 +48,8 @@ public class RenewSignTeamJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -82,16 +86,18 @@ public class RenewSignTeamJob implements Job {
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id  from wlyy_sign_family_renew_log fr where " +
                    "   fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
                    "   and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"' " +
                    "   and fr.admin_team_id=fr.old_admin_team_id " +
                    "   and LENGTH(fr.hospital)=10 " +
                    "   and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
//            String sql=" select fr.sign_code code,fr.hospital ,fr.admin_team_id  from wlyy_sign_family_renew_log fr where " +
//                    "   fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
//                    "   and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"' " +
//                    "   and fr.admin_team_id=fr.old_admin_team_id " +
//                    "   and LENGTH(fr.hospital)=10 " +
//                    "   and LENGTH(fr.old_hospital)=10 ";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //从缓存取数据
            RenewCacheModel cacheModel=cachePool.getArriveRenewTotalTeamMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 14 - 8
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTeamOutJob.java

@ -5,6 +5,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -46,6 +48,8 @@ public class RenewSignTeamOutJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -82,16 +86,18 @@ public class RenewSignTeamOutJob implements Job {
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
                    "  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"'" +
                    "   and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'" +
                    "   and fr.admin_team_id!=fr.old_admin_team_id " +
                    "   and LENGTH(fr.hospital)=10 " +
                    "   and LENGTH(fr.old_hospital)=10 ";
//            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
//                    "  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"'" +
//                    "   and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'" +
//                    "   and fr.admin_team_id!=fr.old_admin_team_id " +
//                    "   and LENGTH(fr.hospital)=10 " +
//                    "   and LENGTH(fr.old_hospital)=10 ";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            RenewCacheModel cacheModel= cachePool.getArriveRenewSignTeamOutMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 15 - 9
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTownJob.java

@ -5,6 +5,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -46,6 +48,8 @@ public class RenewSignTownJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -82,16 +86,18 @@ public class RenewSignTownJob implements Job {
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
                    "  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'   " +
                    "  and LEFT(fr.hospital,6)=LEFT(fr.old_hospital,6) " +
                    "  and LENGTH(fr.hospital)=10 " +
                    "  and LENGTH(fr.old_hospital)=10 ";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
//            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
//                    "  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
//                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'   " +
//                    "  and LEFT(fr.hospital,6)=LEFT(fr.old_hospital,6) " +
//                    "  and LENGTH(fr.hospital)=10 " +
//                    "  and LENGTH(fr.old_hospital)=10 ";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //从缓存取数据
            RenewCacheModel cacheModel=cachePool.getArriveRenewTotalTownMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 14 - 8
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignTownOutJob.java

@ -5,6 +5,8 @@ import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.RenewCacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
@ -46,6 +48,8 @@ public class RenewSignTownOutJob implements Job {
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    String yesterday;
    String daybefore;
@ -82,16 +86,18 @@ public class RenewSignTownOutJob implements Job {
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
                    "  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'" +
                    "  and LEFT(fr.hospital,6)!=LEFT(fr.old_hospital,6)  " +
                    "  and LENGTH(fr.hospital)=10 " +
                    "  and LENGTH(fr.old_hospital)=10 ";
//            String sql=" select fr.sign_code code,fr.old_hospital hospital,fr.old_admin_team_id admin_team_id from wlyy_sign_family_renew_log fr where " +
//                    "  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' " +
//                    "  and fr.sign_year ='"+Constant.getNowYearByDate(yesterday)+"'" +
//                    "  and LEFT(fr.hospital,6)!=LEFT(fr.old_hospital,6)  " +
//                    "  and LENGTH(fr.hospital)=10 " +
//                    "  and LENGTH(fr.old_hospital)=10 ";
//            //抽取數據
//            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            RenewCacheModel cacheModel= cachePool.getArriveRenewSignTownOutMapByDate(yesterday);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            FilterModel etlModels= signDataFilter.filter(cacheModel.getSignFamilies(),null,null,cacheModel.getSql(),yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据

+ 2 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java

@ -2291,7 +2291,7 @@ public class SignWebService extends BaseService {
        log.setAdminTeamId(renew.getAdminTeamId());
        log.setDoctor(renew.getDoctor());
        log.setHospital(renew.getHospital());
        log.setPatient(renew.getPatient());
        //存储旧签约记录
        if (sign != null) {
            Integer id = (Integer) sign.get("admin_team_code");
@ -2326,7 +2326,7 @@ public class SignWebService extends BaseService {
        log.setAdminTeamId(renew.getAdminTeamId());
        log.setDoctor(renew.getDoctor());
        log.setHospital(renew.getHospital());
        log.setPatient(renew.getPatient());
        //存储旧签约记录
        if (sign != null) {
            Integer id = (Integer) sign.get("admin_team_code");

+ 407 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java

@ -21,6 +21,8 @@ import com.yihu.wlyy.util.MapListUtils;
import com.yihu.wlyy.util.SystemConf;
import io.swagger.models.auth.In;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.time.DateUtils;
import org.elasticsearch.common.inject.internal.Join;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -34,6 +36,7 @@ import org.springframework.jdbc.support.nativejdbc.OracleJdbc4NativeJdbcExtracto
import org.springframework.stereotype.Service;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@ -4951,6 +4954,410 @@ public class StatisticsService extends BaseService {
    }
    public Map<String,Object> getPrescriptionCount(String level,String area,String disease){
        //总数
        String totalSql ="SELECT " +
                " count(1) total" +
                " FROM " +
                " wlyy_prescription p ";
        if(StringUtils.isNotBlank(disease)){
            totalSql += " JOIN wlyy_prescription_diagnosis d ON  d.prescription_code = p.code WHERE d.health_problem ='"+disease+"' ";
        }else{
            totalSql +=" WHERE 1=1 ";
        }
        //进行中
        String  processingSql="SELECT " +
                " count(1) processingCount " +
                " FROM " +
                " wlyy_prescription p ";
        if(StringUtils.isNotBlank(disease)){
            processingSql += " JOIN wlyy_prescription_diagnosis d ON  d.prescription_code = p.code WHERE d.health_problem ='"+disease+"' ";
        }else{
            processingSql +=" WHERE 1=1 ";
        }
        processingSql += " AND  p.`status` < " + PrescriptionLog.PrescriptionLogStatus.finish.getValue() +
                " AND p.`status`>= " + PrescriptionLog.PrescriptionLogStatus.revieweding.getValue() ;
        //已完成,已经取消,审核不通过,其他原因取消
        String stateSql = "SELECT " +
                " count(1) count" +
                " FROM " +
                " wlyy_prescription p ";
        if(StringUtils.isNotBlank(disease)){
            stateSql += " JOIN wlyy_prescription_diagnosis d ON  d.prescription_code = p.code WHERE d.health_problem ='"+disease+"' ";
        }else{
            stateSql +=" WHERE 1=1 ";
        }
        stateSql += " AND p.`status` = ? " ;
        //市区
        if("4".equals(level)){
            //市区无过滤
        //区级
        }else if("3".equals(level)){
            totalSql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            processingSql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            stateSql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
        //机构
        }else if("2".equals(level)){
            totalSql += " p.hospital = '"+area+"' ";
            processingSql += " p.hospital = '"+area+"' ";
            stateSql += " p.hospital = '"+area+"' ";
        }
        Map<String,Object> rs = new HashedMap();
        //总数
        List<Map<String,Object>> total = jdbcTemplate.queryForList(totalSql);
        if(total!=null&&total.size()>0){
            rs.put("total",total.get(0).get("total"));
        }else{
            rs.put("total",0);
        }
        //进行中
        List<Map<String,Object>> processingCount = jdbcTemplate.queryForList(processingSql);
        if(total!=null&&total.size()>0){
            rs.put("processingCount",processingCount.get(0).get("processingCount"));
        }else{
            rs.put("processingCount",0);
        }
        //已完成
        List<Map<String,Object>> finishCount = jdbcTemplate.queryForList(stateSql,new Object[]{PrescriptionLog.PrescriptionLogStatus.finish.getValue()});
        if(total!=null&&total.size()>0){
            rs.put("finishCount",finishCount.get(0).get("count"));
        }else{
            rs.put("finishCount",0);
        }
        //已取消
        List<Map<String,Object>> patientCancelCount = jdbcTemplate.queryForList(stateSql,new Object[]{PrescriptionLog.PrescriptionLogStatus.patient_canel.getValue()});
        if(total!=null&&total.size()>0){
            rs.put("patientCancelCount",patientCancelCount.get(0).get("count"));
        }else{
            rs.put("patientCancelCount",0);
        }
        //审核不通过
        List<Map<String,Object>> noReviewedCount = jdbcTemplate.queryForList(stateSql,new Object[]{PrescriptionLog.PrescriptionLogStatus.no_reviewed.getValue()});
        if(total!=null&&total.size()>0){
            rs.put("noReviewedCount",noReviewedCount.get(0).get("count"));
        }else{
            rs.put("noReviewedCount",0);
        }
        //其他原因取消
        List<Map<String,Object>> payOuttimeCount = jdbcTemplate.queryForList(stateSql,new Object[]{PrescriptionLog.PrescriptionLogStatus.pay_outtime.getValue()});
        if(total!=null&&total.size()>0){
            rs.put("payOuttimeCount",payOuttimeCount.get(0).get("count"));
        }else{
            rs.put("payOuttimeCount",0);
        }
        return rs;
    }
    /**
     *
     * @param level 等级
     * @param area 等级编码
     * @param disease 疾病编码
     * @param type 类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
     * @return
     */
    public List<Map<String,Object>> getPrescriptionTotalHistogram(String level,String area,String disease,String type){
        List<Map<String,Object>> rs = new ArrayList<>();
        Calendar dd = Calendar.getInstance();//定义日期实例
        Date endDate = new Date();
        dd.setTime(endDate);
        for(int i=1;i<7;i++){
            Map<String,Object> mc = new HashedMap();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            String date = sdf.format(dd.getTime());
            mc.put("month",date);
            mc.put("count",0);
            dd.add(Calendar.MONTH,-1);
            rs.add(mc);
        }
        String sql = "SELECT count(1) AS count,LEFT(p.create_time,7) AS month " +
                " FROM wlyy_prescription p ";
        if(StringUtils.isNotBlank(disease)){
            sql += " JOIN wlyy_prescription_diagnosis d ON d.prescription_code = p.code WHERE d.health_problem ='"+disease+"' ";
        }else{
            sql +=" WHERE 1=1 ";
        }
        //市区
        if("4".equals(level)){
            //市区无过滤
            //区级
        }else if("3".equals(level)){
            sql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            //机构
        }else if("2".equals(level)){
            sql += " p.hospital = '"+area+"' ";
        }
        //类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
        if("1".equals(type)){
            //无状态过滤
        }else if("2".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.finish.getValue()+"' ";
        }else if("3".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.patient_canel.getValue()+"' ";
        }else if("4".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.no_reviewed.getValue()+"' ";
        }else if("5".equals(type)){
            sql +=" AND p.`status` <'"+PrescriptionLog.PrescriptionLogStatus.finish.getValue()+"' " +
                  " AND p.`status`>='"+PrescriptionLog.PrescriptionLogStatus.revieweding+"'";
        }else if("6".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.pay_outtime.getValue()+"'";
        }
        sql += " AND p.create_time >='"+DateUtil.dateToStr(dd.getTime(),"YYYY-MM-dd HH:mm:ss")+"' AND p.create_time <='"+ DateUtil.dateToStr(new Date(),"YYYY-MM-dd HH:mm:ss")+"'  GROUP BY LEFT(p.create_time,7) ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Iterator iterator = list.iterator();
        for(Map<String,Object> m:rs){
            while (iterator.hasNext()){
                Map<String,Object> ml = ( Map<String,Object>)iterator.next();
                String monthKey = (String)m.get("month");
                String monthKeyDb = (String)ml.get("month");
                if(monthKey.equals(monthKeyDb)){
                    m.put("count",ml.get("count"));
                    iterator.remove();
                }
            }
        }
        return rs;
    }
    /**
     *
     * @param level
     * @param lowlevel
     * @param area
     * @param disease
     * @param type
     * @return
     */
    public List<Map<String,Object>> getPrescriptionTotalLowLevel(String level,String lowlevel,String area,String disease,String type){
        List<Map<String,Object>> rs ;
        String sql =null;
        //市级维度
        if("4".equals(level)){
            //默认查找市级维度
            if("3".equals(lowlevel)){
                sql = "SELECT " +
                        " t.code, " +
                        " t.name, " +
                        " ifnull(s.count,0) num  " +
                        " FROM " +
                        " dm_town t " +
                        " LEFT JOIN ( " +
                        " SELECT " +
                        " count(1) count, " +
                        " LEFT (p.hospital, 6) code " +
                        " FROM " +
                        " wlyy_prescription p ";
                sql = setDiseaseTypeSql(disease,type,sql);
                sql +=  " GROUP BY " +
                        "  LEFT (p.hospital, 6) " +
                        " ) s ON s.code = t.code " +
                        " WHERE " +
                        " t.city='350200' " +
                        " ORDER BY num DESC";
            }else if("2".equals(lowlevel)){
                 sql = "SELECT " +
                        " t.code, " +
                        " t.name, " +
                        " ifnull(s.count,0) num  " +
                        " FROM " +
                        " dm_hospital t " +
                        " LEFT JOIN ( " +
                        " SELECT " +
                        " count(1) count, " +
                        " p.hospital code " +
                        " FROM " +
                        " wlyy_prescription p ";
                 sql = setDiseaseTypeSql(disease,type,sql);
                 sql += " GROUP BY " +
                        "  p.hospital " +
                        " ) s ON s.code = t.code " +
                        " WHERE " +
                        " t.city='350200' " +
                        " AND LENGTH(t.code)=10 " +
                        " ORDER BY num DESC";
            }else if("1".equals(lowlevel)){
                 sql = " SELECT " +
                        " t.id code, " +
                        " t.name, " +
                        " ifnull(s.count,0) num  " +
                        " FROM " +
                        " wlyy_admin_team t " +
                        " LEFT JOIN ( " +
                        " SELECT " +
                        "  count(1) count, " +
                        "  p.admin_team_id code " +
                        "  FROM " +
                        "  wlyy_prescription p " ;
                sql = setDiseaseTypeSql(disease,type,sql);
                sql +=  "  GROUP BY " +
                        "  p.admin_team_id " +
                        " ) s ON s.code = t.id " +
                        " ORDER BY num DESC ";
            }
        //区级维度
        }else if("3".equals(level)){
            if("2".equals(lowlevel)){
                 sql = "SELECT " +
                        " t.code, " +
                        " t.name, " +
                        " ifnull(s.count,0) num  " +
                        " FROM " +
                        " dm_hospital t " +
                        " LEFT JOIN ( " +
                        " SELECT " +
                        " count(1) count, " +
                        " p.hospital code " +
                        " FROM " +
                        " wlyy_prescription p ";
                sql = setDiseaseTypeSql(disease,type,sql);
                sql += " GROUP BY " +
                        "  p.hospital " +
                        " ) s ON s.code = t.code " +
                        " WHERE " +
                        " t.city='350200' " +
                        " AND LENGTH(t.code)=10 " +
                        " AND t.town ='"+area+"'" +
                        " ORDER BY num DESC";
            }else if("1".equals(lowlevel)){
                 sql = " SELECT " +
                        " t.id code, " +
                        " t.name, " +
                        " ifnull(s.count,0) num  " +
                        " FROM " +
                        " wlyy_admin_team t " +
                        " LEFT JOIN ( " +
                        " SELECT " +
                        "  count(1) count, " +
                        "  p.admin_team_id code " +
                        "  FROM " +
                        "  wlyy_prescription p " ;
                sql = setDiseaseTypeSql(disease,type,sql);
                sql +=  "  GROUP BY " +
                        "  p.admin_team_id " +
                        " ) s ON s.code = t.id " +
                        " WHERE LEFT(t.org_code,6) ='"+area+"' " +
                        " ORDER BY num DESC ";
            }
        //机构级维度
        }else if("2".equals(level)){
            if("1".equals(lowlevel)){
                 sql = " SELECT " +
                        " t.id code, " +
                        " t.name, " +
                        " ifnull(s.count,0) num  " +
                        " FROM " +
                        " wlyy_admin_team t " +
                        " LEFT JOIN ( " +
                        " SELECT " +
                        "  count(1) count, " +
                        "  p.admin_team_id code " +
                        "  FROM " +
                        "  wlyy_prescription p " ;
                sql = setDiseaseTypeSql(disease,type,sql);
                sql +=  "  GROUP BY " +
                        "  p.admin_team_id " +
                        " ) s ON s.code = t.id " +
                        " WHERE t.org_code ='"+area+"'" +
                        " ORDER BY num DESC ";
            }
        }
        rs = jdbcTemplate.queryForList(sql);
        return rs;
    }
    public String setDiseaseTypeSql(String disease,String type,String sql){
        if(StringUtils.isNotBlank(disease)){
            sql += " JOIN wlyy_prescription_diagnosis d ON d.prescription_code = p.code WHERE d.health_problem ='"+disease+"' ";
        }else{
            sql +=" WHERE 1=1 ";
        }
        //类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
        if("1".equals(type)){
            //无状态过滤
        }else if("2".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.finish.getValue()+"' ";
        }else if("3".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.patient_canel.getValue()+"' ";
        }else if("4".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.no_reviewed.getValue()+"' ";
        }else if("5".equals(type)){
            sql +=" AND p.`status` <'"+PrescriptionLog.PrescriptionLogStatus.finish.getValue()+"' " +
                    " AND p.`status`>='"+PrescriptionLog.PrescriptionLogStatus.revieweding+"'";
        }else if("6".equals(type)){
            sql +=" AND p.`status` ='"+PrescriptionLog.PrescriptionLogStatus.pay_outtime.getValue()+"'";
        }
        return sql;
    }
    public Map<String,Object> getPrescriptionCost(String level,String area,String disease){
        Map<String,Object> rs = new HashedMap();
        String sql = "SELECT " +
                " IFNULL(SUM(t.total_amount),0) sum" +
                " FROM " +
                " wlyy_prescription_pay t ";
        String avgSql = "SELECT" +
                " IFNULL(AVG(t.total_amount),0) avg" +
                " FROM" +
                " wlyy_prescription_pay t " ;
        if(StringUtils.isNotBlank(disease)){
            sql += " JOIN wlyy_prescription_diagnosis d ON d.prescription_code = t.prescription_code ";
            avgSql += " JOIN wlyy_prescription_diagnosis d ON d.prescription_code = t.prescription_code ";
        }
        if("4".equals(level)){
            sql +=" WHERE 1=1  ";
            avgSql +=" WHERE 1=1  ";
        }else if("3".equals(level)){
            sql +=" JOIN wlyy_prescription p ON t.prescription_code = p.code WHERE LEFT(p.hospital,6) ='"+area+"' ";
            avgSql +=" JOIN wlyy_prescription p ON t.prescription_code = p.code WHERE LEFT(p.hospital,6) ='"+area+"' ";
        }else if("2".equals(level)){
            sql +=" JOIN wlyy_prescription p ON t.prescription_code = p.code WHERE p.hospital ='"+area+"' ";
            avgSql +=" JOIN wlyy_prescription p ON t.prescription_code = p.code WHERE p.hospital ='"+area+"' ";
        }
        if(StringUtils.isNotBlank(disease)){
            sql += " AND  d.health_problem ='"+disease+"'";
            avgSql += " AND  d.health_problem ='"+disease+"'";
        }
        sql +="AND t.trade_status = 1 ";
        avgSql +="AND t.trade_status = 1 ";
        List<Map<String,Object>> sum = jdbcTemplate.queryForList(sql);
        if(sum!=null&&sum.size()>0){
            BigDecimal s = (BigDecimal)sum.get(0).get("sum");
            rs.put("sum",s.divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP));
        }else{
            rs.put("sum",0);
        }
        List<Map<String,Object>> avg = jdbcTemplate.queryForList(avgSql);
        if(avg!=null&&avg.size()>0){
            BigDecimal a =  (BigDecimal)avg.get(0).get("avg");
            rs.put("avg",a.divide((new BigDecimal(100))).setScale(2,BigDecimal.ROUND_HALF_UP));
        }else{
            rs.put("avg",0);
        }
        return rs;
    }
}

+ 276 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statisticsES/StatisticsESService.java

@ -57,6 +57,7 @@ public class StatisticsESService {
    private SystemDictService systemDictService;
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
    /**
     * 获取上次统计时间
     *
@ -1923,8 +1924,281 @@ public class StatisticsESService {
        }
        return resultMaps;
    }
    public JSONObject getRenewPercentAndChangePercent(String renewIndex, String level, String code, String year, String lowCode) {
        return null;
    public JSONObject getRenewPercentAndChangePercent(Integer level, String area, String year, String lowCode) {
        JSONObject jo = new JSONObject();
        String switchIndex = "";//转签index
        String signIndex ="1";//签约index
        String renewIndex ="";//续签index
        String date = year + "-06-30";
        try{
            if (level == 5) {
                //团队的转签
                if(StringUtils.isNoneBlank(lowCode)){
                    //服务类型维度
                    switchIndex = "55";
                    renewIndex = "52";
                }else{
                    switchIndex = "35";
                    renewIndex = "42";
                }
            } else if (level == 4) {
                //社区的转签
                if(StringUtils.isNoneBlank(lowCode)){
                    //服务类型维度
                    switchIndex = "56";
                    renewIndex = "53";
                }else{
                    switchIndex = "35";
                    renewIndex = "43";
                }
            } else {
                //区和市的转签
                if(StringUtils.isNoneBlank(lowCode)){
                    //服务类型维度
                    switchIndex = "57";
                    renewIndex = "54";
                }else{
                    switchIndex = "35";
                    renewIndex = "44";
                }
            }
            String timeKey = elasticsearchUtil.getQuotaTime();
            SaveModel renewSaveModel = new SaveModel();
            SaveModel switchSaveModel = new SaveModel();
            SaveModel signSaveModel = new SaveModel();
            if (StringUtils.isNotBlank(lowCode)){
                //续签量
                renewSaveModel = elasticsearchUtil.findOneDateQuotaLevel1(timeKey,area,level,renewIndex,"2",lowCode);
                //转签量
                switchSaveModel = elasticsearchUtil.findOneDateQuotaLevel1(timeKey,area,level,switchIndex,"2",lowCode);
            }else{
                //续签量
                renewSaveModel=elasticsearchUtil.findOneDateQuotaLevel0(timeKey,area,level,renewIndex,"2");
                //转签量
                switchSaveModel=elasticsearchUtil.findOneDateQuotaLevel0(timeKey,area,level,renewIndex,"2");
            }
            int renewNum = renewSaveModel.getResult2();
            int switchNum = switchSaveModel.getResult2();
            //根据年度获取去年的签约数 签约指标是1
            if(StringUtils.isNoneBlank(lowCode)){
                if("3".equals(lowCode)){
                    //老年人
                    lowCode = "3";
                }else if("4".equals(lowCode)){
                    //高血压
                    lowCode = "1";
                }else if("5".equals(lowCode)){
                    //糖尿病
                    lowCode = "2";
                }
                signIndex = "17";
                signSaveModel=elasticsearchUtil.findOneDateQuotaLevel1(date,area,level,signIndex,"2",lowCode);
            }else{
                signSaveModel=elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,signIndex,"2");
            }
            //签约量
            int signNum = signSaveModel.getResult2();
            jo.put("yesterYearSign", signNum);//去年的签约量
            jo.put("thisYearRenew", renewNum);//今年的续签量
            jo.put("thisYearSwithch", switchNum);//今年的转签量
            jo.put("renewRange", getRange(renewNum, signNum, 2));//续签率  50.00%
            jo.put("switchRange", getRange(switchNum, renewNum, 2));//转签率
        }catch (Exception e){
            e.getMessage();
            jo.put("status","0");
            jo.put("error","查询失败"+e.getMessage());
            return jo;
        }
        return jo;
    }
    public JSONObject getRenewAnalysis(String switchIndex, String switchIndexReson, String signIn, String signOut, String level, String code) throws Exception{
        JSONObject jo = new JSONObject();
        //获取统计的最新事件
        String quotaDate = elasticsearchUtil.getQuotaTime();
        //获取转签人数
        int switchNum = getLevel1NumForRedis(switchIndex, level, code, quotaDate);
        //获取转签分布
        JSONArray switchJO = getLevel2JsonObjectForRedis(switchIndexReson, level, code, quotaDate);
        //获取签入人数
        int inNum = getLevel1NumForRedis(signIn, level, code, quotaDate);
        //获取签出人数
        int outNum = getLevel1NumForRedis(signOut, level, code, quotaDate);
        int changeTeam = getLevel1NumForRedis("31", level, code, quotaDate);//夸团队的数目
        int changeHospital = getLevel1NumForRedis("32", level, code, quotaDate);//夸社区的数目
        int changeTown = getLevel1NumForRedis("33", level, code, quotaDate);//夸社区的数目
        int allChangeCount = changeTeam + changeHospital + changeTown; //跨团队,跨社区 跨区的分母
        jo.put("inNum", inNum);//今年的签入量
        jo.put("outNum", outNum);//今年的签出量
        jo.put("thisYearSwithch", switchNum);//今年的转签量
        jo.put("switchHealth", switchJO);//今年的服务分布
        String changeTeamNum = getRangeNoLast(changeTeam, allChangeCount, 2);//跨团队转签率
        String changeHospNum = getRangeNoLast(changeHospital, allChangeCount, 2);//跨社区转签率
        String changeTownNum = "";
        //保留两位小数
        DecimalFormat df = new DecimalFormat("######0.00");
        if (changeTown == 0) {
            changeTownNum = "0";
        } else {
            changeTownNum = df.format(100 - Double.valueOf(changeTeamNum) - Double.valueOf(changeHospNum)) + "";//跨区转签率,解决算出来可能不是100%的问题 用扣的
        }
        jo.put("switchTeam", changeTeamNum + "%");//今年的转签量
        jo.put("switchHospital", changeHospNum + "%");//今年的转签量
        jo.put("switchTown", changeTownNum + "%");//今年的转签量
        return jo;
    }
    /**
     * 通用的方法 获取一级维度的数据
     *
     * @param index
     * @param level
     * @param code
     * @param timeKey
     * @return
     */
    private int getLevel1NumForRedis(String index, String level, String code, String timeKey) throws Exception{
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(timeKey,code,Integer.parseInt(level),index,"2");
        return saveModel.getResult2();
    }
    /**
     * 通用的方法 获取二级维度的数据列表
     *
     * @param index
     * @param level
     * @param code
     * @param timeKey
     * @return
     */
    private JSONArray getLevel2JsonObjectForRedis(String index, String level, String code, String timeKey) throws Exception{
        List<SaveModel> list = elasticsearchUtil.findOneDateQuotaLevel1(timeKey,code,Integer.parseInt(level),index,"2");
//        JSONObject jo = new JSONObject();
        JSONArray switchJo = new JSONArray();
        list.stream().forEach(one->{
            Map<String,Object> map = new HashMap<>();
            map.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(one.getQuotaDate()));
            if (SaveModel.teamLevel.equals(level)) {
                map.put("code",one.getTeam());
                map.put("name",one.getTeamName());
            } else if (SaveModel.OrgLevel.equals(level)) {
                map.put("code",one.getHospital());
                map.put("name",one.getHospitalName());
            } else if (SaveModel.townLevel.equals(level)) {
                map.put("code",one.getTown());
                map.put("name",one.getTownName());
            } else if (SaveModel.cityLevel.equals(level)) {
                map.put("code",one.getCity());
                map.put("name",one.getCityName());
            }
            map.put("num",one.getResult2());
            switchJo.put(map);
        });
        return switchJo;
    }
    public String getRangeNoLast(int first, int second, int i) {
        if (second == 0 && first > 0) {
            return "100";
        } else if (second == 0 && first == 0) {
            return "0";
        }
        float size = (float) (first * 100) / second;
        DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
        String filesize = df.format(size);
        return filesize;
    }
    /**
     * 查询某个级别的某个指标到达量(单条记录)
     *
     * @param date
     * @param area
     * @param level
     * @return
     * @throws Exception
     */
    public JSONObject getLowLevelTotalSingle2(String date, String area, int level) throws Exception {
//        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        //获取微信关注的未交费
//        Map<String, Object> expenseStatus0 = getByIndexSingle(date, area, level, "49",dateFormat);
        SaveModel expenseStatus0 = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"49","2");
        //获取微信关注的已交费
//        Map<String, Object> expenseStatus1 = getByIndexSingle(date, area, level, "50",dateFormat);
        SaveModel expenseStatus1 = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"50","2");
        //获取已缴费的签约数
//        Map<String, Object> expenseStatus1Sigjn = getByIndexSingle(date, area, level, "1",dateFormat);
        SaveModel expenseStatus1Sigjn = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"1","2");
        JSONObject jsonObject = new JSONObject();
        if (SaveModel.teamLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getTeamName());
        } else if (SaveModel.OrgLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getHospitalName());
        } else if (SaveModel.townLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getTownName());
        } else if (SaveModel.cityLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getCityName());
        }
        jsonObject.put("code", area);
        Long  weChatAmount0 =  Long.valueOf(expenseStatus0.getResult2().toString());
        Long  weChatAmount1 =  Long.valueOf(expenseStatus1.getResult2().toString());
        Long  signAccount =  Long.valueOf(expenseStatus1Sigjn.getResult2().toString());
        jsonObject.put("weChatAmount0", weChatAmount0);//微信关注未交费数
        jsonObject.put("weChatAmount1", weChatAmount1);//微信关注已交费数
        jsonObject.put("bindRate", getRangeDouuble(weChatAmount1.intValue(), signAccount.intValue(), 2));//微信关注率
        return jsonObject;
    }
    /**
     * 获取某个指标某一天某一level的值 到达量(单条记录)
     *
     * @param date
     * @param area
     * @param level
     * @param index
     * @param dateFormat
     * @return
     * @throws Exception
     */
    private Map<String,Object> getByIndexSingle(String date, String area, int level, String index, SimpleDateFormat dateFormat) throws Exception {
        Map<String,Object> map =null;
        if (date.compareTo(dateFormat.format(new Date())) >= 0) {
            map = getTodayLowLevelTotalSingle(date, area, level, index);
        }
        return map;
    }
    /**
     * 获取今天某个区域一级指标的下级统计(单条记录)
     *
     * @param area
     * @param level
     * @param index
     * @return
     */
    public Map<String, Object> getTodayLowLevelTotalSingle(String date, String area, int level, String index) throws Exception {
        Map<String, Object> data = new HashMap<>();
        String redisData = "";
        try {
//            redisData = redisTemplate.opsForValue().get("quota:" + index + ":" + level + ":" + area  + ":" + getQuotaTimeStamp());
        } catch (Exception e) {
            redisData = "";
        }
        if (!org.springframework.util.StringUtils.isEmpty(redisData)) {
            JSONObject json = new JSONObject(redisData);
            data.put("code", String.valueOf(json.get("code")));
            data.put("name", String.valueOf(json.get("name")));
            data.put("amount",String.valueOf(json.get("num")));
        } else {
            Calendar today = Calendar.getInstance();
            today.add(Calendar.DATE, -1);
            String preDate = new SimpleDateFormat("yyyy-MM-dd").format(today.getTime());
//            data = getTodayBeforeLowLevelTotalSingle(preDate, area, level, index);
        }
        return data;
    }
}

+ 9 - 9
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/ElasticsearchUtil.java

@ -243,10 +243,10 @@ public class ElasticsearchUtil {
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if(startDate.length()>10){
                startDate = changeTime(endDate);
            if(endDate.length()>10){
                endDate = changeTime(endDate);
            }else{
                startDate = changeDate(endDate);
                endDate = changeDate(endDate);
            }
        }
        StringBuffer sql = new StringBuffer();
@ -334,10 +334,10 @@ public class ElasticsearchUtil {
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if(startDate.length()>10){
                startDate = changeTime(endDate);
            if(endDate.length()>10){
                endDate = changeTime(endDate);
            }else{
                startDate = changeDate(endDate);
                endDate = changeDate(endDate);
            }
        }
        StringBuffer sql = new StringBuffer();
@ -425,10 +425,10 @@ public class ElasticsearchUtil {
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if(startDate.length()>10){
                startDate = changeTime(endDate);
            if(endDate.length()>10){
                endDate = changeTime(endDate);
            }else{
                startDate = changeDate(endDate);
                endDate = changeDate(endDate);
            }
        }
        StringBuffer sql = new StringBuffer();

+ 219 - 40
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/EsStatisticsController.java

@ -6,7 +6,9 @@ import com.yihu.wlyy.service.app.statisticsES.StatisticsESService;
import com.yihu.wlyy.util.Constant;
import com.yihu.wlyy.util.ValueComparator;
import com.yihu.wlyy.web.BaseController;
import com.yihu.wlyy.web.quota.vo.SaveModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -27,7 +29,7 @@ import java.util.TreeMap;
 * Created by chenweida on 2017/10/13.
 */
@Controller
@RequestMapping(value = "/esstatistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE,method = {RequestMethod.GET,RequestMethod.POST})
@RequestMapping(value = "/esstatistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = {RequestMethod.GET, RequestMethod.POST})
@Api(description = "ES统计查询")
public class EsStatisticsController extends BaseController {
@ -37,6 +39,7 @@ public class EsStatisticsController extends BaseController {
    StatisticsService statisticsService;
    @Autowired
    StatisticsAllService statisticsAllService;
    /**
     * 获取统计时间
     *
@ -52,6 +55,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 指标按间隔统计  增量
     * 按年度统计是根据前端传的 startDate
@ -235,8 +239,8 @@ public class EsStatisticsController extends BaseController {
            JSONArray jsonArray2 = null;
            if (Constant.getNowYearByDate(endDate).equals(year)) {
                jsonArray2 = statisticsESService.getLowLevelIncrementDetail(endDate, endDate, area, level, indexes[1], sort, lowLevel);
            }else{
                String date=Integer.valueOf(year)+1+"-06-30";
            } else {
                String date = Integer.valueOf(year) + 1 + "-06-30";
                jsonArray2 = statisticsESService.getLowLevelIncrementDetail(date, date, area, level, indexes[1], sort, lowLevel);
            }
            jsonArrays.add(jsonArray2);
@ -272,13 +276,13 @@ public class EsStatisticsController extends BaseController {
                for (Map.Entry<String, JSONObject> one : index1.entrySet()) {
                    JSONObject map1 = one.getValue();
                    JSONObject map2 = index2.get(one.getKey());
                    String amount1="0";
                    if(map1!=null&&map1.has("amount")){
                        amount1=map1.get("amount").toString();
                    String amount1 = "0";
                    if (map1 != null && map1.has("amount")) {
                        amount1 = map1.get("amount").toString();
                    }
                    String amount2="0";
                    if(map2!=null&&map2.has("amount")){
                        amount2=map2.get("amount").toString();
                    String amount2 = "0";
                    if (map2 != null && map2.has("amount")) {
                        amount2 = map2.get("amount").toString();
                    }
                    String amount = amount1 + "," + amount2;
@ -352,8 +356,8 @@ public class EsStatisticsController extends BaseController {
        try {
            JSONObject result = new JSONObject();
            //year没传默认是今年
            if(org.springframework.util.StringUtils.isEmpty(year)){
                year= Constant.getNowYear();
            if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }
@ -364,11 +368,11 @@ public class EsStatisticsController extends BaseController {
//                JSONObject signRate = statisticsAllService.getSignRate(endDate, area, level,year);
//                JSONObject signTaskRate = statisticsAllService.getSignTaskRate(endDate, area, level,year);
                long sign = statisticsESService.getIndexTotal(endDate, area, level, "13","2");
                long sign = statisticsESService.getIndexTotal(endDate, area, level, "13", "2");
                long weiJf = statisticsESService.getWeiJiaoFei(endDate, area, level);
                JSONObject jo = statisticsESService.getRenewPercent(level + "", area, Constant.getNowYear());
                JSONObject signRate = statisticsESService.getSignRate(endDate, area, level,year);
                JSONObject signTaskRate = statisticsESService.getSignTaskRate(endDate, area, level,year);
                JSONObject signRate = statisticsESService.getSignRate(endDate, area, level, year);
                JSONObject signTaskRate = statisticsESService.getSignTaskRate(endDate, area, level, year);
                result.put("sign", sign);
                result.put("expenses", weiJf);
@ -378,11 +382,11 @@ public class EsStatisticsController extends BaseController {
                result.put("renewRange", jo.get("renewRange"));//续签率  50.00%
            } else {
                //如果年度不是当前年度 就根据endDate 找到那个年度的最后一天的数据
                if(!Constant.getNowYear().equals(year)){
                    endDate=(Integer.valueOf(year)+1)+"-06-30";
                if (!Constant.getNowYear().equals(year)) {
                    endDate = (Integer.valueOf(year) + 1) + "-06-30";
                }
//                result = statisticsAllService.getGroupInfo(endDate, lowCode, area, level,year);
                result = statisticsESService.getGroupInfo(endDate, lowCode, area, level,year);
                result = statisticsESService.getGroupInfo(endDate, lowCode, area, level, year);
            }
            return write(200, "查询成功", "data", result);
@ -409,6 +413,8 @@ public class EsStatisticsController extends BaseController {
                                       int level,
                                       @RequestParam(required = false) String year) {
        try {
            level=changeLevel(level);
            JSONArray result = statisticsESService.getSixFiveStatistics(endDate, area, level);
            return write(200, "查询成功", "data", result);
@ -448,11 +454,11 @@ public class EsStatisticsController extends BaseController {
            if (index != null) {
                for (String idx : indexes) {
                    if(org.springframework.util.StringUtils.isEmpty(year)){
                        year=Constant.getNowYear();
                    if (org.springframework.util.StringUtils.isEmpty(year)) {
                        year = Constant.getNowYear();
                    }
//                    JSONObject json = statisticsAllService.getDateTotal(startDate, endDate, interval, area, level, idx, lowCode,year);
                    JSONObject json = statisticsESService.getDateTotal(startDate, endDate, interval, area, level, idx, lowCode,year);
                    JSONObject json = statisticsESService.getDateTotal(startDate, endDate, interval, area, level, idx, lowCode, year);
                    result.put("index_" + idx, json);
                }
            }
@ -487,31 +493,33 @@ public class EsStatisticsController extends BaseController {
                                            @RequestParam(required = false) String lowCode) {
        try {
            String[] indexes = index.split(",");
            level=changeLevel(level);
            lowLevel=changeLevel(Integer.valueOf(lowLevel))+"";
            JSONObject result = new JSONObject();
            String year=Constant.getNowYearByDate(date);
            String year = Constant.getNowYearByDate(date);
            if (StringUtils.isNotEmpty(lowCode)) {
//                指定level下特定查询级别
                if (index.equals("17")) {
                    //sort=1&date=2017-07-13&level=4&index=17&area=350200&lowLevel=1&lowCode=3
                    result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotalTeamLeader(date, area, level, index, sort, lowLevel, lowCode,year));
                    result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotalTeamLeader(date, area, level, index, sort, lowLevel, lowCode, year));
                } else {
                    result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotal(date, area, level, index, sort, lowLevel, lowCode,year));
                    result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotal(date, area, level, index, sort, lowLevel, lowCode, year));
                }
            } else {
//                未指定level下特定查询级别
                for (String idx : indexes) {
                    if (idx.equals("18") || index.equals("19")) {
                        result.put("index_" + idx, statisticsAllService.getLowLevelTotalSpecial(date, area, level, idx, sort, lowLevel));
                    } else if ( index.equals("21")) {
                    } else if (index.equals("21")) {
                        result.put("index_" + idx, statisticsESService.getLowLevelTotal2(date, area, level, idx, sort, lowLevel));
                    } else if (idx.equals("28")) {
                        //level=4&area=350200&sort=1&index=28&date=undefined&lowLevel=2
                        result.put("index_" + idx, statisticsESService.getAvgAllInfo(level, area, lowLevel));
                    } else if (idx.equals("13")) {
                        // sort=1&date=2017-07-13&level=4&index=13&area=350200&lowCode=
                        result.put("index_" + idx, statisticsESService.getLowLevelTotalTeamLeader(date, area, level, idx, sort, lowLevel,year));
                        result.put("index_" + idx, statisticsESService.getLowLevelTotalTeamLeader(date, area, level, idx, sort, lowLevel, year));
                    } else {
                        result.put("index_" + idx, statisticsESService.getLowLevelTotal(date, area, level, idx, sort, lowLevel,year));
                        result.put("index_" + idx, statisticsESService.getLowLevelTotal(date, area, level, idx, sort, lowLevel, year));
                    }
                }
            }
@ -573,7 +581,7 @@ public class EsStatisticsController extends BaseController {
            JSONObject result = new JSONObject();
            for (String idx : indexes) {
                Long total = statisticsESService.getIndexTotal(endDate, area, level, idx,"2");
                Long total = statisticsESService.getIndexTotal(endDate, area, level, idx, "2");
                result.put("index_" + idx, total);
            }
@ -627,9 +635,9 @@ public class EsStatisticsController extends BaseController {
            JSONObject data = null;
            if (Constant.getNowYear().equals(year)) {
                data = statisticsESService.getConsultingStatisticsList(level, area, lowlevel,null);
                data = statisticsESService.getConsultingStatisticsList(level, area, lowlevel, null);
            } else if (org.springframework.util.StringUtils.isEmpty(year)) {
                data = statisticsESService.getConsultingStatisticsList(level, area, lowlevel,null);
                data = statisticsESService.getConsultingStatisticsList(level, area, lowlevel, null);
//                data = statisticsService.getConsultingStatisticsListAll(level, area, lowlevel, year);
            } else {
@ -645,6 +653,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 咨询统计
     * 咨询分析页面具体交互与业务分析内一致,即按市、区、社区、机构有不同展示,可一级级进入查看
@ -673,7 +682,7 @@ public class EsStatisticsController extends BaseController {
//                //去数据库查找年份
//                data = statisticsService.getConsultingTitleWithYear(level, area, year);
//            }
            data = statisticsESService.getConsultingTitle(level, area,year);
            data = statisticsESService.getConsultingTitle(level, area, year);
            if (data != null) {
                return write(200, "查询成功", "data", data);
            } else {
@ -706,7 +715,7 @@ public class EsStatisticsController extends BaseController {
//            } else {
//                return write(200, "查询成功", "data", statisticsService.getCoutListByTimeYear(level, area, year));
//            }
            return write(200, "查询成功", "data", statisticsESService.getCoutListByTime(level,area,year));
            return write(200, "查询成功", "data", statisticsESService.getCoutListByTime(level, area, year));
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
@ -730,6 +739,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取得分平均数
     *
@ -766,6 +776,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 统计当前团队,签约人数,服务次数,平均满意度
     *
@ -815,6 +826,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取咨询数和未回复数
     *
@ -836,6 +848,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取机构内服务排行
     *
@ -877,6 +890,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 判断团队是否是团队长
     *
@ -915,6 +929,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 计算团队医生月或周咨询未回复和总数折线图
     *
@ -939,6 +954,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队内这成员,未回复数,总数,结束咨询数
     *
@ -962,6 +978,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取Doctor咨询结果
     *
@ -984,6 +1001,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队随访量折线统计图
     *
@ -1006,6 +1024,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getTeamDoctorFollowupLine")
    @ResponseBody
    public String getTeamDoctorFollowupLine(@RequestParam(required = true) String type,
@ -1020,6 +1039,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 根据团队获取团队底下用户列表
     *
@ -1044,6 +1064,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取医生随访头信息
     *
@ -1066,6 +1087,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取待预约量团队统计则线图
     *
@ -1088,6 +1110,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队医生预约量团队统计则线图
     *
@ -1112,6 +1135,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队待预约量医生列表信息
     *
@ -1136,6 +1160,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队医生待预信息
     *
@ -1158,6 +1183,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队健康指导折线图
     *
@ -1180,6 +1206,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队医生则线图
     *
@ -1204,6 +1231,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队指导总数List
     *
@ -1228,6 +1256,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取医生健康指导头部信息
     *
@ -1250,6 +1279,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队健康教育折线统计
     *
@ -1272,6 +1302,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队健康
     *
@ -1295,6 +1326,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取团队成员健康教育列表
     *
@ -1319,6 +1351,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getTeamDoctorEduTitle")
    @ResponseBody
    public String getTeamDoctorEduTitle(@RequestParam(required = true) String teamCode,
@ -1332,6 +1365,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getDotorInfo")
    @ResponseBody
    public String getDotorInfo(String code) {
@ -1342,6 +1376,7 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getTeamRenewChangeLine")
    @ResponseBody
    public String getTeamRenewChangeLine(@RequestParam(required = true) String teamCode,
@ -1355,41 +1390,185 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/cleanDoctorScore")
    @ResponseBody
    public String cleanDoctorScore(){
        try{
    public String cleanDoctorScore() {
        try {
            return write(200, "清洗完成", "data", statisticsAllService.cleanDoctorScore());
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取转签率和续签率
     * 前端:续签进展
     * <p>
     * //@param index 42,43,44 (52,53,54 服务类型维度)
     *
     * @param index 42,43,44 (52,53,54 服务类型维度)
     * @param level 等级  4 市  3区  2社区 1团队
     * @param code  市 默认是厦门市 350200  区 就是区的code  社区就是社区的code 团队就是团队的code
     * @param year  年份 非比传
     * @param level   等级  4 市  3区  2社区 1团队
     * @param area    市 默认是厦门市 350200  区 就是区的code  社区就是社区的code 团队就是团队的code
     * @param year    年份 非比传
     * @param lowCode 服务类型维度code(老年人3,高血压4,糖尿病5)
     * @return
     */
    @RequestMapping(value = "/getRenewPercentAndChangePercent", method = RequestMethod.GET)
    @ResponseBody
    public String getRenewPercentAndChangePercent(
            @RequestParam(required = true) String index,//续签index
            //@RequestParam(required = true) String index,//续签index
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String area,
            @RequestParam(required = false) String year,
            @RequestParam(required = false) String lowCode) {
        try {
            //return write(200, "查询成功", "data", statisticsService.getRenewPercentAndChangePercent(index,level, code, year,lowCode));
            return write(200, "查询成功!", "data", statisticsESService.getRenewPercentAndChangePercent(changeLevel(level), area, year, lowCode));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取转签人数,转签原因分析,转签分布
     * 前端:签约数据分析,团队转签详情
     *
     * @param level 等级  4 市  3区  2社区 1团队
     * @param code  市 默认是厦门市 350200  区 就是区的code  社区就是社区的code 团队就是团队的code
     * @return
     */
    @RequestMapping(value = "/getRenewAnalysis", method = RequestMethod.GET)
    @ResponseBody
    public String getRenewAnalysis(
            @RequestParam(required = true) String level,
            @RequestParam(required = true) String code,
            @RequestParam(required = true) String code) {
        try {
            String switchIndex = "";
            String switchIndexReson = "";
            String signIn = "";
            String signOut = "";
            if ("1".equals(level)) {
                //团队的转签人数
                switchIndex = "35";
                //团队的转签原因
                switchIndexReson = "30";
                //团队的签入
                signIn = "34";
                //团队的签出
                signOut = "35";
            } else if ("2".equals(level)) {
                //社区的转签人数
                switchIndex = "35";
                //社区的转签原因
                switchIndexReson = "30";
                //社区的签入
                signIn = "38";
                //社区的签出
                signOut = "39";
            } else {
                //区和市的转签人数
                switchIndex = "35";
                //区和市的转签原因
                switchIndexReson = "30";
                //区和市的签入
                signIn = "40";
                //区和市的签出
                signOut = "41";
            }
            return write(200, "查询成功", "data", statisticsESService.getRenewAnalysis(switchIndex, switchIndexReson, signIn, signOut, level, code));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /**
     * 去年的签约量,续签量和续签率 列表
     *
     * @param index    42,43,44 (52,53,54 服务类型维度)
     * @param area     每个层级大的code  例如湖里区 350206  xx社区 3502060100
     * @param level    level1_type等级 1:团队 2社区机构 3区级 4市级
     * @param sort     0:升序 1:降序
     * @param lowLevel 只有可能是 1,2,3,不传默认是level-1;
     * @param year     不管根据当前时间找年度
     * @param lowCode  如果是服务类型维度code(老年人3,高血压4,糖尿病5)
     * @return
     */
    @RequestMapping("/lowlevel_all_sign_renew")
    @ResponseBody
    public String getIndexLowLevelTotalSignAndRenew(
            @RequestParam(required = true) String index,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) int sort,
            @RequestParam(required = false) String lowLevel,
            @RequestParam(required = false) String year,
            @RequestParam(required = false) String lowCode) {
        try {
            return write(200, "查询成功", "data", statisticsService.getRenewPercentAndChangePercent(index,level, code, year,lowCode));
            JSONObject result = new JSONObject();
            //如果年度是空,按当前时间计算是年度是属于那个年度
            if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }
            //lowLevel不传默认是 level-1
            if (org.springframework.util.StringUtils.isEmpty(lowLevel)) {
                lowLevel = level - 1 + "";
            }
            result.put("index_" + index, statisticsAllService.getLevelTwoLowLevelTotalSignAndRenew(area, changeLevel(level), index, sort, String.valueOf(changeLevel(Integer.valueOf(lowLevel))), year, lowCode));
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getLevelTotalSingle")
    @ResponseBody
    public String getLevelTotalSingle(@ApiParam(name = "date", value = "日期标识") @RequestParam(required = true) String date,
                                      @ApiParam(name = "area", value = "区域code") @RequestParam(required = true) String area,
                                      @ApiParam(name = "level", value = "级别") @RequestParam(required = true) int level) {
        try {
            return write(200, "查询成功", "data", statisticsESService.getLowLevelTotalSingle2(date, area, level));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /**
     * 将参数转换成需要的SaveModel里的标识
     *
     * @param level 等级  4 市  3区  2社区 1团队
     * @return
     * @author zhangdan
     * @time 2017-10-18
     */
    public int changeLevel(int level) {
        int resultLevel = 0;
        if (level == 1) {
            //团队转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.teamLevel);
        } else if (level == 2) {
            //社区转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.OrgLevel);
        } else if (level == 3) {
            //区转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.townLevel);
        } else if (level == 4) {
            //市转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.cityLevel);
        }
        if (resultLevel == 0) {
            resultLevel = level;
        }
        return resultLevel;
    }
}

+ 67 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -10,6 +10,7 @@ import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.ValueComparator;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
@ -1518,6 +1519,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping(value = "/getRenewAnalysis", method = RequestMethod.GET)
    @ResponseBody
    @Deprecated
    public String getRenewAnalysis(
            @RequestParam(required = true) String level,
            @RequestParam(required = true) String code) {
@ -1636,6 +1638,7 @@ public class StatisticsController extends BaseController {
    @RequestMapping("/getLevelTotalSingle")
    @ResponseBody
    @Deprecated
    public String getLevelTotalSingle(@ApiParam(name="date", value="日期标识") @RequestParam(required = true)String date,
                                      @ApiParam(name="area", value="区域code") @RequestParam(required = true)String area,
                                      @ApiParam(name="level", value="级别") @RequestParam(required = true)int level){
@ -1660,4 +1663,68 @@ public class StatisticsController extends BaseController {
        }
    }
    //=================================长处方分析===============================================
    @RequestMapping("/getPrescriptionCount")
    @ResponseBody
    @ApiOperation("订单统计-顶部总数获取")
    public String getPrescriptionCount(@ApiParam(name="level", value="级别") @RequestParam(required = true)String level,
                                       @ApiParam(name="area", value="级别对应编码") @RequestParam(required = true)String area,
                                       @ApiParam(name="disease", value="疾病类型") @RequestParam(required = false)String disease){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionCount(level,area,disease));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionTotalHistogram")
    @ResponseBody
    @ApiOperation("订单统计-中部树状图获取")
    public String getPrescriptionTotalHistogram(@ApiParam(name="level", value="级别") @RequestParam(required = true)String level,
                                                @ApiParam(name="area", value="级别对应编码") @RequestParam(required = true)String area,
                                                @ApiParam(name="disease", value="疾病类型") @RequestParam(required = false)String disease,
                                                @ApiParam(name="type", value="类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消") @RequestParam(required = true)String type){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionTotalHistogram(level,area,disease,type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionTotalLowLevel")
    @ResponseBody
    @ApiOperation("订单统计-下部列表接口")
    public String getPrescriptionTotalLowLevel(@ApiParam(name="level", value="级别") @RequestParam(required = true)String level,
                                               @ApiParam(name="lowlevel", value="第二级别") @RequestParam(required = true)String lowlevel,
                                               @ApiParam(name="area", value="界别编码") @RequestParam(required = true)String area,
                                               @ApiParam(name="disease", value="疾病") @RequestParam(required = false)String disease,
                                               @ApiParam(name="type", value="类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消") @RequestParam(required = true)String type){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionTotalLowLevel(level,lowlevel,area,disease,type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionCost")
    @ResponseBody
    @ApiOperation("费用统计-顶部部头部接口")
    public String getPrescriptionCost(@ApiParam(name="level", value="级别") @RequestParam(required = true)String level,
                                      @ApiParam(name="area", value="界别编码") @RequestParam(required = true)String area,
                                      @ApiParam(name="disease", value="疾病") @RequestParam(required = false)String disease){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionCost(level,area,disease));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
}