Explorar el Código

Merge branch 'dev' of trick9191/patient-co-management into dev

trick9191 hace 7 años
padre
commit
a1f0f3dee7

+ 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;
    }
}

+ 65 - 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;
@ -1662,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, "查询失败");
        }
    }
}