trick9191 vor 7 Jahren
Ursprung
Commit
5a71b01a1e

+ 14 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsAllService.java

@ -2711,6 +2711,20 @@ public class StatisticsAllService extends BaseService {
        return rs;
        return rs;
    }
    }
    public List<Map<String, Object>> translateTeamLeaderName2(List<Map<String, Object>> rs) {
        Map<Integer, Map<String, Object>> leaders = getAllTeamLeaders();
        if (rs != null && rs.size() > 0) {
            for (Map<String, Object> r : rs) {
                Integer id = (Integer) r.get("code");
                String name = getTeamLeaderNameByTeamCode(leaders, id);
                if (org.apache.commons.lang3.StringUtils.isNotBlank(name)) {
                    r.put("name", name);
                }
            }
        }
        return rs;
    }
    public JSONArray translateTeamLeaderName(JSONArray rs) {
    public JSONArray translateTeamLeaderName(JSONArray rs) {
        Map<Integer, Map<String, Object>> leaders = getAllTeamLeaders();
        Map<Integer, Map<String, Object>> leaders = getAllTeamLeaders();
        if (rs != null) {
        if (rs != null) {
@ -3052,7 +3066,6 @@ public class StatisticsAllService extends BaseService {
    /**
    /**
     * 根据父级的quato_code,查找二级数据列表
     * 根据父级的quato_code,查找二级数据列表
     * @param date
     * @param date
     * @param level
     * @param index
     * @param index
     * @param area
     * @param area
     * @param lowCode
     * @param lowCode

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

@ -5002,9 +5002,9 @@ public class StatisticsService extends BaseService {
            stateSql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            stateSql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
        //机构
        //机构
        }else if("2".equals(level)){
        }else if("2".equals(level)){
            totalSql += " p.hospital = '"+area+"' ";
            processingSql += " p.hospital = '"+area+"' ";
            stateSql += " p.hospital = '"+area+"' ";
            totalSql += " AND p.hospital = '"+area+"' ";
            processingSql += " AND p.hospital = '"+area+"' ";
            stateSql += " AND p.hospital = '"+area+"' ";
        }
        }
        Map<String,Object> rs = new HashedMap();
        Map<String,Object> rs = new HashedMap();
@ -5062,7 +5062,8 @@ public class StatisticsService extends BaseService {
     * @return
     * @return
     */
     */
    public List<Map<String,Object>> getPrescriptionTotalHistogram(String level,String area,String disease,String type){
    public List<Map<String,Object>> getPrescriptionTotalHistogram(String level,String area,String disease,String type){
        List<Map<String,Object>> rs = new ArrayList<>();
        List<Map<String,Object>> rs =new ArrayList<>();
        Calendar dd = Calendar.getInstance();//定义日期实例
        Calendar dd = Calendar.getInstance();//定义日期实例
        Date endDate = new Date();
        Date endDate = new Date();
@ -5093,7 +5094,7 @@ public class StatisticsService extends BaseService {
            sql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            sql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            //机构
            //机构
        }else if("2".equals(level)){
        }else if("2".equals(level)){
            sql += " p.hospital = '"+area+"' ";
            sql += " AND p.hospital = '"+area+"' ";
        }
        }
        //类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
        //类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
        if("1".equals(type)){
        if("1".equals(type)){
@ -5114,15 +5115,15 @@ public class StatisticsService extends BaseService {
        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) ";
        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);
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Iterator iterator = list.iterator();
        for(Map<String,Object> m:rs){
        for(Map<String,Object> m:rs){
            Iterator iterator = list.iterator();
            while (iterator.hasNext()){
            while (iterator.hasNext()){
                Map<String,Object> ml = ( Map<String,Object>)iterator.next();
                Map<String,Object> ml = ( Map<String,Object>)iterator.next();
                String monthKey = (String)m.get("month");
                String monthKey = (String)m.get("month");
                String monthKeyDb = (String)ml.get("month");
                String monthKeyDb = (String)ml.get("month");
                if(monthKey.equals(monthKeyDb)){
                if(monthKey.equals(monthKeyDb)){
                    m.put("count",ml.get("count"));
                    m.put("count",ml.get("count"));
                    iterator.remove();
                }
                }
            }
            }
        }
        }
@ -5274,6 +5275,9 @@ public class StatisticsService extends BaseService {
            }
            }
        }
        }
        rs = jdbcTemplate.queryForList(sql);
        rs = jdbcTemplate.queryForList(sql);
        if("1".equals(level)){
            statisticsAllService.translateTeamLeaderName2(rs);
        }
        return rs;
        return rs;
    }
    }
@ -5304,6 +5308,26 @@ public class StatisticsService extends BaseService {
    }
    }
    public String setDiseaseTypeSql2(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)){
            sql +=" AND p.dispensary_type ="+type;
        }else if("2".equals(type)){
            sql +=" AND p.dispensary_type ="+type;
        }else if("3".equals(type)){
            sql +=" AND p.dispensary_type ="+type;
        }
        sql +=" AND p.`status` >="+PrescriptionLog.PrescriptionLogStatus.pay_success.getValue();
        return sql;
    }
    public Map<String,Object> getPrescriptionCost(String level,String area,String disease){
    public Map<String,Object> getPrescriptionCost(String level,String area,String disease){
        Map<String,Object> rs = new HashedMap();
        Map<String,Object> rs = new HashedMap();
@ -5359,5 +5383,722 @@ public class StatisticsService extends BaseService {
        }
        }
        return rs;
        return rs;
    }
    }
    /**
     * 获取中部费用平均值
     * @param level
     * @param area
     * @param disease
     * @param startDate
     * @param endDate
     * @param type 1.按日,2.按周,3.按月
     */
    public List<Map<String,Object>> getPrescriptionCostAvgLine(String level,String area,String disease,String startDate,String endDate,String type){
        startDate += " 00:00:00";
        endDate += " 23:59:59";
        if("1".equals(type)){
            //按日
            List<Map<String,Object>> rs = DateUtil.findDates(DateUtil.stringToDate(startDate,"yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(endDate,"yyyy-MM-dd HH:mm:ss"));
            String sql = "SELECT " +
                    " avg(t.total_amount) avg, " +
                    " LEFT(t.create_time,10) date " +
                    " FROM " +
                    " wlyy_prescription_pay t ";
            sql = setLevelAndDisSql(sql,disease,level,area);
            sql +=  " AND t.trade_status = 1 " +
                    " AND t.create_time >='"+startDate+"' " +
                    " AND t.create_time <='"+endDate+"' " +
                    " GROUP BY LEFT(t.create_time,10)";
            return getDatesRs(sql,rs);
        }else if("2".equals(type)){
            //按周
            List<Map<String,Object>> rs = DateUtil.findDateASWeeks(DateUtil.stringToDate(startDate,"yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(endDate,"yyyy-MM-dd HH:mm:ss"));
            String sql ="SELECT " +
                    " avg(t.total_amount) avg, " +
                    " LEFT(date_sub(t.create_time,INTERVAL WEEKDAY(t.create_time) +0 DAY),10) date " +
                    " FROM " +
                    " wlyy_prescription_pay t ";
            sql = setLevelAndDisSql(sql,disease,level,area);
            sql +=  " AND t.trade_status = 1 " +
                    " AND t.create_time >='"+startDate+"' " +
                    " AND t.create_time <='"+endDate+"' " +
                    " GROUP BY DATE_FORMAT(t.create_time, '%v %x')";
            return getDatesRs(sql,rs);
        }else if("3".equals(type)){
            //按月
            List<Map<String,Object>> rs = DateUtil.findDateASMonth(DateUtil.stringToDate(startDate,"yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(endDate,"yyyy-MM-dd HH:mm:ss"));
            String sql = "SELECT " +
                    " avg(t.total_amount) avg, " +
                    " LEFT(t.create_time,7) date " +
                    " FROM " +
                    " wlyy_prescription_pay t ";
            sql = setLevelAndDisSql(sql,disease,level,area);
            sql +=  " AND t.trade_status = 1 " +
                    " AND t.create_time >='"+startDate+"' " +
                    " AND t.create_time <='"+endDate+"' " +
                    " GROUP BY LEFT(t.create_time,7)";
            return getDatesRs(sql,rs);
        }
        return null;
    }
    public String setLevelAndDisSql(String sql,String disease,String level,String area){
        if(StringUtils.isNotBlank(disease)){
            sql += " JOIN wlyy_prescription_diagnosis d ON d.prescription_code = t.prescription_code ";
        }
        if("4".equals(level)){
            sql +=" 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+"' ";
        }else if("2".equals(level)){
            sql +=" JOIN wlyy_prescription p ON t.prescription_code = p.code WHERE p.hospital ='"+area+"' ";
        }
        if(StringUtils.isNotBlank(disease)){
            sql += " AND  d.health_problem ='"+disease+"'";
        }
        return sql;
    }
    public String setLevelAndDisSql2(String sql,String disease,String level,String area){
        if(StringUtils.isNotBlank(disease)){
            sql += " JOIN wlyy_prescription_diagnosis d ON d.prescription_code = t.prescription_code ";
        }
        if("4".equals(level)){
            sql +=" WHERE 1=1  ";
        }else if("3".equals(level)){
            sql +=" WHERE LEFT(p.hospital,6) ='"+area+"' ";
        }else if("2".equals(level)){
            sql +=" WHERE p.hospital ='"+area+"' ";
        }
        if(StringUtils.isNotBlank(disease)){
            sql += " AND  d.health_problem ='"+disease+"'";
        }
        return sql;
    }
    public List<Map<String,Object>> getDatesRs(String sql,List<Map<String,Object>> rs){
        List<Map<String,Object>> dayList = jdbcTemplate.queryForList(sql);
        for(Map<String,Object> map :rs){
            String dateKey = (String)map.get("date");
            Iterator iterator = dayList.iterator();
            while (iterator.hasNext()){
                Map<String,Object> day = (Map<String,Object>)iterator.next();
                String dateKeyDb =(String)day.get("date");
                if(dateKey.equals(dateKeyDb)){
                    BigDecimal a =  (BigDecimal)day.get("avg");
                    map.put("avg",a.divide((new BigDecimal(100))).setScale(2,BigDecimal.ROUND_HALF_UP));
                }
            }
        }
        return rs;
    }
    /**
     * 获取下部部费用平均值或总数
     * @param level
     * @param lowlevel
     * @param area
     * @param disease
     * @param type 1.总量,2.平均值
     * @return
     */
    public List<Map<String,Object>> getPrescriptionCostLowLevel(String level,String lowlevel,String area,String disease,String type){
        //市级
        if("4".equals(level)){
            //区级
            if("3".equals(lowlevel)){
                if("1".equals(type)){
                    //总量
                    String sql = "SELECT  " +
                            " tw.`code`, " +
                            " tw.`name`, " +
                            " ifnull(c.sum/100,0) sum " +
                            " FROM dm_town tw LEFT JOIN ( " +
                            " SELECT " +
                            " sum(t.total_amount) sum, " +
                            " LEFT (p.hospital, 6) code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code ";
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " GROUP BY LEFT (p.hospital, 6) " +
                            " ) c ON c.code = tw.code  " +
                            " WHERE " +
                            " tw.city = '350200' " +
                            " ORDER BY sum DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    return rs;
                }else{
                    String sql = "SELECT  " +
                            " tw.`code`, " +
                            " tw.`name`, " +
                            " ifnull(FORMAT(c.avg/100,2),0) avg " +
                            " FROM dm_town tw LEFT JOIN ( " +
                            " SELECT " +
                            " avg(t.total_amount) avg, " +
                            " LEFT (p.hospital, 6) code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code ";
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " GROUP BY LEFT (p.hospital, 6) " +
                            " ) c ON c.code = tw.code  " +
                            " WHERE " +
                            " tw.city = '350200' " +
                            " ORDER BY avg DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    return rs;
                }
            //机构
            }else if("2".equals(lowlevel)){
                if("1".equals(type)){
                    //总量
                    String sql = "SELECT  " +
                            " tw.`code`, " +
                            " tw.`name`, " +
                            " ifnull(c.sum/100,0) sum " +
                            " FROM dm_hospital tw LEFT JOIN ( " +
                            " SELECT " +
                            " sum(t.total_amount) sum, " +
                            " p.hospital code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code ";
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " GROUP BY p.hospital " +
                            " ) c ON c.code = tw.code  " +
                            " WHERE " +
                            " tw.city = '350200' " +
                            " AND LENGTH(tw.code)=10 " +
                            " ORDER BY sum DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    return rs;
                }else{
                    String sql = " SELECT  " +
                            " tw.`code`, " +
                            " tw.`name`, " +
                            " ifnull(FORMAT(c.avg/100,2),0) avg " +
                            " FROM dm_hospital tw LEFT JOIN ( " +
                            " SELECT " +
                            " avg(t.total_amount) avg, " +
                            " p.hospital code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code ";
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " GROUP BY p.hospital " +
                            " ) c ON c.code = tw.code  " +
                            " WHERE " +
                            " tw.city = '350200' " +
                            " AND LENGTH(tw.code)=10 " +
                            " ORDER BY avg DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    return rs;
                }
            //团队
            }else if("1".equals(lowlevel)){
                if("1".equals(type)){
                    String sql = "SELECT  " +
                            " tw.`id` code, " +
                            " tw.`name`, " +
                            " ifnull(c.sum/100,0) sum " +
                            " FROM wlyy_admin_team tw LEFT JOIN ( " +
                            " SELECT " +
                            " sum(t.total_amount) sum, " +
                            " p.admin_team_id code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code " ;
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " GROUP BY p.admin_team_id " +
                            " ) c ON c.code = tw.id  " +
                            " ORDER BY sum DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    statisticsAllService.translateTeamLeaderName2(rs);
                    return rs;
                }else{
                    String sql = "SELECT  " +
                            " tw.`id` code, " +
                            " tw.`name`, " +
                            " ifnull(FORMAT(c.avg/100,2),0) avg " +
                            " FROM wlyy_admin_team tw LEFT JOIN ( " +
                            " SELECT " +
                            " avg(t.total_amount) avg, " +
                            " p.admin_team_id code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code " ;
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " GROUP BY p.hospital " +
                            " ) c ON c.code = tw.id  " +
                            " ORDER BY avg DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    statisticsAllService.translateTeamLeaderName2(rs);
                    return rs;
                }
            }
        //区级
        }else if("3".equals(level)){
            //机构
            if("2".equals(lowlevel)){
                if("1".equals(type)){
                    //总量
                    String sql = "SELECT  " +
                            " tw.`code`, " +
                            " tw.`name`, " +
                            " ifnull(c.sum/100,0) sum " +
                            " FROM dm_hospital tw LEFT JOIN ( " +
                            " SELECT " +
                            " sum(t.total_amount) sum, " +
                            " p.hospital code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code ";
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " AND LEFT(p.hospital,6)='"+area+"' " +
                            " GROUP BY p.hospital " +
                            " ) c ON c.code = tw.code  " +
                            " WHERE " +
                            " ADN tw.city = '350200' " +
                            " AND tw.town = '"+ area+"'" +
                            " AND LENGTH(tw.code)=10 " +
                            " ORDER BY sum DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    return rs;
                }else{
                    String sql = " SELECT  " +
                            " tw.`code`, " +
                            " tw.`name`, " +
                            " ifnull(FORMAT(c.avg/100,2),0) avg " +
                            " FROM dm_hospital tw LEFT JOIN ( " +
                            " SELECT " +
                            " avg(t.total_amount) avg, " +
                            " p.hospital code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code ";
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " AND LEFT(p.hospital,6)='"+area+"' " +
                            " GROUP BY p.hospital " +
                            " ) c ON c.code = tw.code  " +
                            " WHERE " +
                            " tw.city = '350200' " +
                            " AND tw.town = '"+ area+"'" +
                            " AND LENGTH(tw.code)=10 " +
                            " ORDER BY avg DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    return rs;
                }
            //团队
            }else if("1".equals(lowlevel)){
                if("1".equals(type)){
                    String sql = "SELECT  " +
                            " tw.`id` code, " +
                            " tw.`name`, " +
                            " ifnull(c.sum/100,0) sum " +
                            " FROM wlyy_admin_team tw LEFT JOIN ( " +
                            " SELECT " +
                            " sum(t.total_amount) sum, " +
                            " p.admin_team_id code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code " ;
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " AND LEFT(p.hospital,6) ='"+area+"' " +
                            " GROUP BY p.admin_team_id " +
                            " ) c ON c.code = tw.id  " +
                            " WHERE  LEFT(tw.org_code,6) ='"+area+"' " +
                            " ORDER BY sum DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    statisticsAllService.translateTeamLeaderName2(rs);
                    return rs;
                }else{
                    String sql = "SELECT  " +
                            " tw.`id` code, " +
                            " tw.`name`, " +
                            " ifnull(FORMAT(c.avg/100,2),0) avg " +
                            " FROM wlyy_admin_team tw LEFT JOIN ( " +
                            " SELECT " +
                            " avg(t.total_amount) avg, " +
                            " p.admin_team_id code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code " ;
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " AND LEFT(p.hospital,6) ='"+area+"' " +
                            " GROUP BY p.admin_team_id " +
                            " ) c ON c.code = tw.id  " +
                            " WHERE  LEFT(tw.org_code,6) ='"+area+"' " +
                            " ORDER BY avg DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    statisticsAllService.translateTeamLeaderName2(rs);
                    return rs;
                }
            }
        //机构
        }else if("2".equals(level)){
            //团队
            if("1".equals(lowlevel)){
                if("1".equals(type)){
                    String sql = "SELECT  " +
                            " tw.`id` code, " +
                            " tw.`name`, " +
                            " ifnull(c.sum/100,0) sum " +
                            " FROM wlyy_admin_team tw LEFT JOIN ( " +
                            " SELECT " +
                            " sum(t.total_amount) sum, " +
                            " p.admin_team_id code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code " ;
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " AND p.hospital,6 ='"+area+"' " +
                            " GROUP BY p.admin_team_id " +
                            " ) c ON c.code = tw.id  " +
                            " WHERE  tw.org_code ='"+area+"' " +
                            " ORDER BY sum DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    statisticsAllService.translateTeamLeaderName2(rs);
                    return rs;
                }else{
                    String sql = "SELECT  " +
                            " tw.`id` code, " +
                            " tw.`name`, " +
                            " ifnull(FORMAT(c.avg/100,2),0) avg " +
                            " FROM wlyy_admin_team tw LEFT JOIN ( " +
                            " SELECT " +
                            " avg(t.total_amount) avg, " +
                            " p.admin_team_id code " +
                            " FROM " +
                            " wlyy_prescription_pay t JOIN wlyy_prescription p ON p.code = t.prescription_code " ;
                    sql = setDisSql(sql,disease);
                    sql +=  " AND t.trade_status = 1 " +
                            " AND p.hospital ='"+area+"' " +
                            " GROUP BY p.admin_team_id " +
                            " ) c ON c.code = tw.id  " +
                            " WHERE  tw.org_code ='"+area+"' " +
                            " ORDER BY avg DESC ";
                    List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
                    statisticsAllService.translateTeamLeaderName2(rs);
                    return rs;
                }
            }
        }
        return null;
    }
    public String setDisSql(String sql,String disease){
        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 ";
        }
        return sql;
    }
    public List<Map<String,Object>> getPrescriptionDispatchingTotal(String level,String area,String disease){
        String sql = "SELECT " +
                " COUNT(1) total" +
                " FROM " +
                " wlyy_prescription p " ;
        sql = setLevelAndDisSql2(sql,disease, level, area);
        sql += " AND p.`status` > 50 " +
                " AND p.dispensary_type = ? ";
        List<Map<String,Object>> rs = new ArrayList();
        //自取数目
        List<Map<String,Object>> seltList = jdbcTemplate.queryForList(sql,new Object[]{1});
        if(seltList!=null&&seltList.size()>0){
            Map<String,Object> map = new HashedMap();
            map.put("seltTotal",seltList.get(0).get("total"));
            rs.add(map);
        }else{
            Map<String,Object> map = new HashedMap();
            map.put("seltTotal",0);
            rs.add(map);
        }
        //快递配送
        List<Map<String,Object>> deliveryList = jdbcTemplate.queryForList(sql,new Object[]{2});
        if(deliveryList!=null&&deliveryList.size()>0){
            Map<String,Object> map = new HashedMap();
            map.put("deliveryTotal",deliveryList.get(0).get("total"));
            rs.add(map);
        }else{
            Map<String,Object> map = new HashedMap();
            map.put("deliveryTotal",0);
            rs.add(map);
        }
        //健管师配送
        List<Map<String,Object>> healthDoctorList = jdbcTemplate.queryForList(sql,new Object[]{2});
        if(healthDoctorList!=null&&healthDoctorList.size()>0){
            Map<String,Object> map = new HashedMap();
            map.put("doctorTotal",healthDoctorList.get(0).get("total"));
            rs.add(map);
        }else{
            Map<String,Object> map = new HashedMap();
            map.put("doctorTotal",0);
            rs.add(map);
        }
        return rs;
    }
    /**
     *
     * @param level
     * @param area
     * @param disease
     * @param type 1.自取,2.快递配送,3.健管师配送
     * @return
     */
    public List<Map<String,Object>> getPrescriptionDispatchingHistogram(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 += "AND p.hospital = '"+area+"' ";
        }
        //类型1.自取,2.快递配送,3.健管师配送
        if("1".equals(type)){
            sql +=" AND p.dispensary_type ="+type;
        }else if("2".equals(type)){
            sql +=" AND p.dispensary_type ="+type;
        }else if("3".equals(type)){
            sql +=" AND p.dispensary_type ="+type;
        }
        sql += " AND p.`status` >="+PrescriptionLog.PrescriptionLogStatus.pay_success.getValue()+" 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);
        for(Map<String,Object> m:rs){
            Iterator iterator = list.iterator();
            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"));
                }
            }
        }
        return rs;
    }
    /**
     *
     * @param level
     * @param lowlevel
     * @param area
     * @param disease
     * @param type 1.自取,2.快递配送,3.健管师配送
     * @return
     */
    public List<Map<String,Object>> getPrescriptionDispatchingLowLevel(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 = setDiseaseTypeSql2(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 = setDiseaseTypeSql2(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 = setDiseaseTypeSql2(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 = setDiseaseTypeSql2(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 = setDiseaseTypeSql2(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 = setDiseaseTypeSql2(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);
        if("1".equals(level)){
            statisticsAllService.translateTeamLeaderName2(rs);
        }
        return rs;
    }
}
}

+ 128 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/DateUtil.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.util;
package com.yihu.wlyy.util;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.StringUtils;
import java.sql.Time;
import java.sql.Time;
@ -883,4 +884,131 @@ public class DateUtil {
		cal.set(Calendar.DATE, cal.get(Calendar.DATE) +(days));
		cal.set(Calendar.DATE, cal.get(Calendar.DATE) +(days));
		return  cal.getTime();
		return  cal.getTime();
	}
	}
	public static List<Map<String,Object>> findDates(Date dBegin, Date dEnd) {
		List<Map<String,Object>> lDate = new ArrayList();
		Map<String,Object> st = new HashedMap();
		st.put("date",DateUtil.dateToStr(dBegin,"yyyy-MM-dd"));
		st.put("avg",0);
		lDate.add(st);
		Calendar calBegin = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calBegin.setTime(dBegin);
		Calendar calEnd = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calEnd.setTime(dEnd);
		// 测试此日期是否在指定日期之后
		while (dEnd.after(calBegin.getTime())) {
			// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
			calBegin.add(Calendar.DAY_OF_MONTH, 1);
			Map<String,Object> stt = new HashedMap();
			stt.put("date",DateUtil.dateToStr(calBegin.getTime(),"yyyy-MM-dd"));
			stt.put("avg",0);
			lDate.add(stt);
		}
		return lDate;
	}
	public static List<Map<String,Object>> findDateASWeeks(Date dBegin, Date dEnd) {
		List<Map<String,Object>> lDate = new ArrayList();
		Calendar calBegin = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calBegin.setTime(dBegin);
		if(checkDateMonday(calBegin)){
			Map<String,Object> st = new HashedMap();
			st.put("date",DateUtil.dateToStr(dBegin,"yyyy-MM-dd"));
			st.put("avg",0);
			lDate.add(st);
		}
		Calendar calEnd = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calEnd.setTime(dEnd);
		// 测试此日期是否在指定日期之后
		while (dEnd.after(calBegin.getTime())) {
			// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
			calBegin.add(Calendar.DAY_OF_MONTH, 1);
			if(checkDateMonday(calBegin)){
				Map<String,Object> stt = new HashedMap();
				stt.put("date",DateUtil.dateToStr(calBegin.getTime(),"yyyy-MM-dd"));
				stt.put("avg",0);
				lDate.add(stt);
			}
		}
		return lDate;
	}
	public static List<Map<String,Object>> findDateASMonth(Date dBegin, Date dEnd) {
		List<Map<String,Object>> lDate = new ArrayList();
		Calendar calBegin = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calBegin.setTime(dBegin);
		if(checkFristDayOfDateMonth(calBegin)){
			Map<String,Object> st = new HashedMap();
			st.put("date",DateUtil.dateToStr(dBegin,"yyyy-MM"));
			st.put("avg",0);
			lDate.add(st);
		}
		Calendar calEnd = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calEnd.setTime(dEnd);
		// 测试此日期是否在指定日期之后
		while (dEnd.after(calBegin.getTime())) {
			// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
			calBegin.add(Calendar.DAY_OF_MONTH, 1);
			if(checkFristDayOfDateMonth(calBegin)){
				Map<String,Object> stt = new HashedMap();
				stt.put("date",DateUtil.dateToStr(calBegin.getTime(),"yyyy-MM"));
				stt.put("avg",0);
				lDate.add(stt);
			}
		}
		return lDate;
	}
	public static boolean checkDateMonday(Calendar cal){
		int week=cal.get(Calendar.DAY_OF_WEEK)-1;
		if(week ==1){
			return true;
		}else{
			return false;
		}
	}
	public static boolean checkFristDayOfDateMonth(Calendar cal){
		int today = cal.get(cal.DAY_OF_MONTH);
		if(today ==1){
			return true;
		}else{
			return false;
		}
	}
	public static List<Map<String,Object>> getLast6Month(){
		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);
		}
		return rs;
	}
}
}

+ 2 - 0
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.Constant;
import com.yihu.wlyy.util.ValueComparator;
import com.yihu.wlyy.util.ValueComparator;
import com.yihu.wlyy.web.BaseController;
import com.yihu.wlyy.web.BaseController;
import com.yihu.wlyy.web.quota.vo.SaveModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONObject;

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

@ -1725,6 +1725,81 @@ public class StatisticsController extends BaseController {
        }
        }
    }
    }
    @RequestMapping("/getPrescriptionCostAvgLine")
    @ResponseBody
    @ApiOperation("费用统计-中部折线图接口")
    public String getPrescriptionCostAvgLine(@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="startDate", value="开始时间") @RequestParam(required = false)String startDate,
                                             @ApiParam(name="endDate", value="结束时间") @RequestParam(required = false)String endDate,
                                             @ApiParam(name="type", value="1.按日,2.按周,3.按月") @RequestParam(required = false)String type){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionCostAvgLine(level,area,disease,startDate,endDate,type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionCostLowLevel")
    @ResponseBody
    @ApiOperation("费用统计-下部列表接口")
    public String getPrescriptionCostLowLevel(@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.平均值")@RequestParam(required =true)String type){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionCostLowLevel(level,lowlevel,area,disease,type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionDispatchingTotal")
    @ResponseBody
    @ApiOperation("配送统计-头部总数接口")
    public String getPrescriptionDispatchingTotal(@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.getPrescriptionDispatchingTotal(level,area,disease));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionDispatchingHistogram")
    @ResponseBody
    @ApiOperation("配送统计-中部条形图")
    public String getPrescriptionDispatchingHistogram(@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.健管师配送") @RequestParam(required = true)String type){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionDispatchingHistogram(level,area,disease,type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getPrescriptionDispatchingLowLevel")
    @ResponseBody
    @ApiOperation("配送统计-下部条形图")
    public String getPrescriptionDispatchingLowLevel(@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.健管师配送") @RequestParam(required = true)String type){
        try{
            return write(200, "查询成功", "data", statisticsService.getPrescriptionDispatchingLowLevel(level,lowlevel,area,disease,type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
}
}