Bladeren bron

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

yeshijie 7 jaren geleden
bovenliggende
commit
af7d662cd7

+ 25 - 0
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/Application.java

@ -2,7 +2,10 @@ package com.yihu.wlyy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.web.ErrorPageFilter;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
/**
@ -15,4 +18,26 @@ public class Application {
    public static void main(String[] args) {
        ctx = SpringApplication.run(Application.class, args);
    }
    /**
     * start 解决如下问题
     * Cannot forward to error page for
     * request [/strategy/list/] as the response has already been committed. As a
     * result, the response may have the wrong status code. If your application is
     * running on WebSphere Application Server you may be able to resolve this
     * problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
     */
    @Bean
    public ErrorPageFilter errorPageFilter() {
        return new ErrorPageFilter();
    }
    @Bean
    public FilterRegistrationBean disableSpringBootErrorFilter(ErrorPageFilter filter) {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(filter);
        filterRegistrationBean.setEnabled(false);
        return filterRegistrationBean;
    }
    //end
}

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

@ -177,8 +177,8 @@ public class SwaggerConfig {
                        regex("/idc10/.*"),
                        regex("/im_new/.*"),
                        regex("/version/.*"),
                        regex("/express/.*")
                        regex("/express/.*"),
                        regex("/esstatistics/.*")
                ))
                .build()
                .apiInfo(otherApiInfo());

+ 169 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/physicalExamination/PhysicalExaminationRemindService.java

@ -0,0 +1,169 @@
package com.yihu.wlyy.service.app.physicalExamination;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.common.SMSService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * Created by Reece on 2017/10/19/019.
 * <p>
 * 65岁以上居民体检提醒(微信模板+短信通知)
 */
@Service
public class PhysicalExaminationRemindService extends BaseService {
    private Logger logger = LoggerFactory.getLogger(PhysicalExaminationRemindService.class);
    @Autowired
    private SMSService smsService;
    @Autowired
    private PushMsgTask pushMsgTask;
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private WeiXinAccessTokenUtils accessTokenUtils;
    @Autowired
    private WeiXinOpenIdUtils openIdUtils;
    /**
     * 发送单条提醒
     *
     * @param userCode 居民code
     * @param doctName 医生姓名
     */
    public void sendSingleNotice(String userCode, String doctName) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
        String accessToken = accessTokenUtils.getAccessToken();
        Patient patient = patientDao.findByCode(userCode);
        String mobile = patient.getMobile();
        Boolean flag = true;
        // 推送消息给微信端
        JSONObject json = new org.json.JSONObject();
        json.put("first", "您的家庭医生" + doctName + "提醒,您可以到签约社区进行免费的健康体检啦~");
        json.put("keyword1", "健康体检");
        json.put("keyword2", format.format(new Date()));
        json.put("url", "");
        json.put("remark", "为了您和您的家庭医生了解您近期的健康状况,请及时到您签约的社区体检哟~");
        if (StringUtils.isNotBlank(patient.getOpenid())) {
            pushMsgTask.putWxMsg(accessToken, 11, patient.getOpenid(), patient.getName(), json);
            flag = false;
        }
        //发送代理人
        JSONArray jsonArray = openIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid());
        if (jsonArray != null && jsonArray.length() > 0) {
            for (int i = 0; i < jsonArray.length(); i++) {
                org.json.JSONObject j = jsonArray.getJSONObject(i);
                Patient member = (Patient) j.get("member");
                json.remove("toUser");
                json.put("toUser", member.getCode());
                json.remove("first");
                try {
                    json.put("first", openIdUtils.getTitleMes(patient, j.isNull("relation") ? 1 : j.getInt("relation"), patient.getName()));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (StringUtils.isNotBlank(member.getOpenid())) {
                    pushMsgTask.putWxMsg(accessToken, 11, member.getOpenid(), patient.getName(), json);
                    flag = false;
                }
            }
        }
//        微信发送失败发送短信
        if (flag&&StringUtils.isNotEmpty(mobile)){
            smsService.sendMsg(mobile,"您的家庭医生" + doctName + "提醒,您可以到签约社区进行免费的健康体检啦~");
        }
    }
    /**
     * 发送批量提醒
     *
     * @param teamId 团队ID
     * @param doctName 医生姓名
     * @return
     */
    public void sendBatchNotice(String teamId, String doctName) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
        String accessToken = accessTokenUtils.getAccessToken();
        // 推送消息给微信端
        JSONObject json = new org.json.JSONObject();
        json.put("first", "您的家庭医生" + doctName + "提醒,您可以到签约社区进行免费的健康体检啦~");
        json.put("keyword1", "健康体检");
        json.put("keyword2", format.format(new Date()));
        json.put("url", "");
        json.put("remark", "为了您和您的家庭医生了解您近期的健康状况,请及时到您签约的社区体检哟~");
        String sql = "SELECT DISTINCT\n" +
                "\tt1.*\n" +
                "FROM\n" +
                "\twlyy_sign_family t1\n" +
                "WHERE\n" +
                "\tt1. STATUS > 0\n" +
                "AND t1.admin_team_code = 485\n" +
                "AND (\n" +
                "\tYEAR (curdate()) -\n" +
                "\tIF (\n" +
                "\t\tlength(idcard) = 18,\n" +
                "\t\tsubstring(idcard, 7, 4),\n" +
                "\n" +
                "\tIF (\n" +
                "\t\tlength(idcard) = 15,\n" +
                "\t\tconcat('19', substring(idcard, 7, 2)),\n" +
                "\t\tNULL\n" +
                "\t)\n" +
                "\t)\n" +
                ") > 65\n" +
                "AND t1.idcard NOT IN (\n" +
                "\tSELECT DISTINCT\n" +
                "\t\ts.idcard\n" +
                "\tFROM\n" +
                "\t\twlyy_sign_family s,\n" +
                "\t\twlyy_old_people_physical_examination o\n" +
                "\tWHERE\n" +
                "\t\ts.admin_team_code =485\n" +
                "\tAND s.`status` > 0\n" +
                "\tAND s.idcard = o.id_card\n" +
                "\tAND o.medical_time >'2016-10-19 15:12:11'\n" +
                ")\n" +
                "ORDER BY\n" +
                "\tt1.openid DESC,\n" +
                "\tCONVERT (t1. NAME USING gbk)";
        Patient patient = patientDao.findByCode("");
        if (StringUtils.isNotBlank(patient.getOpenid())) {
            pushMsgTask.putWxMsg(accessToken, 11, patient.getOpenid(), patient.getName(), json);
        }
        //发送代理人
        JSONArray jsonArray = openIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid());
        if (jsonArray != null && jsonArray.length() > 0) {
            for (int i = 0; i < jsonArray.length(); i++) {
                org.json.JSONObject j = jsonArray.getJSONObject(i);
                Patient member = (Patient) j.get("member");
                json.remove("toUser");
                json.put("toUser", member.getCode());
                json.remove("first");
                try {
                    json.put("first", openIdUtils.getTitleMes(patient, j.isNull("relation") ? 1 : j.getInt("relation"), patient.getName()));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (StringUtils.isNotBlank(member.getOpenid())) {
                    pushMsgTask.putWxMsg(accessToken, 11, member.getOpenid(), patient.getName(), json);
                }
            }
        }
    }
}

+ 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;
    }
    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) {
        Map<Integer, Map<String, Object>> leaders = getAllTeamLeaders();
        if (rs != null) {
@ -3052,7 +3066,6 @@ public class StatisticsAllService extends BaseService {
    /**
     * 根据父级的quato_code,查找二级数据列表
     * @param date
     * @param level
     * @param index
     * @param area
     * @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+"' ";
        //机构
        }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();
@ -5062,7 +5062,8 @@ public class StatisticsService extends BaseService {
     * @return
     */
    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();//定义日期实例
        Date endDate = new Date();
@ -5093,7 +5094,7 @@ public class StatisticsService extends BaseService {
            sql += " AND LEFT(p.hospital, 6) = '"+area+"' ";
            //机构
        }else if("2".equals(level)){
            sql += " p.hospital = '"+area+"' ";
            sql += " AND p.hospital = '"+area+"' ";
        }
        //类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
        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) ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Iterator iterator = list.iterator();
        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"));
                    iterator.remove();
                }
            }
        }
@ -5274,6 +5275,9 @@ public class StatisticsService extends BaseService {
            }
        }
        rs = jdbcTemplate.queryForList(sql);
        if("1".equals(level)){
            statisticsAllService.translateTeamLeaderName2(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){
        Map<String,Object> rs = new HashedMap();
@ -5359,5 +5383,722 @@ public class StatisticsService extends BaseService {
        }
        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;
    }
}

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

@ -188,10 +188,6 @@ public class StatisticsESService {
     */
    public long getIntervalIncrement(String startDate, String endDate, String area, int level, String index) throws Exception {
        // 截止日期包含当天,则获取最新的更新时间
        if (endDate.compareTo(dateFormat.format(new Date())) >= 0) {
            endDate = elasticsearchUtil.getQuotaTime();
        }
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(startDate,endDate,area,level,index,"1");
        return saveModel.getResult2();
    }
@ -269,10 +265,6 @@ public class StatisticsESService {
    public long getTotalAmount(String startDate, String endDate, String area, int level, String index, String level2_type)  throws Exception {
        SaveModel saveModel = null;
        // 截止日期包含当天,则获取最新的更新时间
        if (endDate.compareTo(new SimpleDateFormat("yyyy-MM-dd").format(new Date())) >= 0) {
            endDate = elasticsearchUtil.getQuotaTime();
        }
        if(StringUtils.isNotEmpty(level2_type)){
            saveModel = elasticsearchUtil.findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type);
        }else{
@ -295,7 +287,7 @@ public class StatisticsESService {
        //如果year有值 就按照年度来查询 即2017年 就是大于2017-06-30
        if (!org.springframework.util.StringUtils.isEmpty(year)) {
            startDate = year + "-06-30' ";
            startDate = year + "-06-30";
        }
        String levelTemp = level+"";
        if(StringUtils.isNotEmpty(lowLevel)){

+ 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;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import java.sql.Time;
@ -884,6 +885,133 @@ public class DateUtil {
		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;
	}
	/**
	 * 获取去年日期
	 * @return

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

@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@ -270,16 +271,20 @@ public class ElasticsearchUtil {
            groupBy.append("  group by city,cityName");
        }
        if (SaveModel.teamLevel.equals(level + "")) {
            sql.append(" team='" + area + "'");
        } else if (SaveModel.OrgLevel.equals(level + "")) {
            sql.append(" hospital='" + area + "'");
        } else if (SaveModel.townLevel.equals(level + "")) {
            sql.append(" town='" + area + "'");
        } else if (SaveModel.cityLevel.equals(level + "")) {
            sql.append(" city='" + area + "'");
        if(StringUtils.isNotEmpty(area)){
            if (SaveModel.teamLevel.equals(level + "")) {
                sql.append(" team='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(level + "")) {
                sql.append(" hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(level + "")) {
                sql.append(" town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(level + "")) {
                sql.append(" city='" + area + "'");
            }
            sql.append(" and ");
        }
        sql.append(" and quotaCode='" + index + "'  ");
        sql.append(" quotaCode='" + index + "'  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='5'");
        if (StringUtils.isNotEmpty(startDate)) {
@ -293,11 +298,11 @@ public class ElasticsearchUtil {
        //根据时间维度分组
        if (StringUtils.isNotEmpty(interval)) {
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
            }
        }
        sql.append(groupBy);
@ -360,16 +365,20 @@ public class ElasticsearchUtil {
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name");
        }
        if (SaveModel.teamLevel.equals(lowLevel)) {
            sql.append(" team='" + area + "'");
        } else if (SaveModel.OrgLevel.equals(lowLevel)) {
            sql.append(" hospital='" + area + "'");
        } else if (SaveModel.townLevel.equals(lowLevel)) {
            sql.append(" town='" + area + "'");
        } else if (SaveModel.cityLevel.equals(lowLevel)) {
            sql.append(" city='" + area + "'");
        if(StringUtils.isNotEmpty(area)){
            if (SaveModel.teamLevel.equals(level + "")) {
                sql.append(" team='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(level + "")) {
                sql.append(" hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(level + "")) {
                sql.append(" town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(level + "")) {
                sql.append(" city='" + area + "'");
            }
            sql.append(" and ");
        }
        sql.append(" and quotaCode='" + index + "'  ");
        sql.append(" quotaCode='" + index + "'  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='5'");
        if (StringUtils.isNotEmpty(startDate)) {
@ -385,11 +394,11 @@ public class ElasticsearchUtil {
        //根据时间维度分组
        if (StringUtils.isNotEmpty(interval)) {
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
            }
        }
        sql.append(groupBy);
@ -450,18 +459,20 @@ public class ElasticsearchUtil {
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        }
        if(StringUtils.isNotEmpty(area)){
        if (SaveModel.teamLevel.equals(lowLevel)) {
            sql.append(" team='" + area + "'");
        } else if (SaveModel.OrgLevel.equals(lowLevel)) {
            sql.append(" hospital='" + area + "'");
        } else if (SaveModel.townLevel.equals(lowLevel)) {
            sql.append(" town='" + area + "'");
        } else if (SaveModel.cityLevel.equals(lowLevel)) {
            sql.append(" city='" + area + "'");
            if (SaveModel.teamLevel.equals(level + "")) {
                sql.append(" team='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(level + "")) {
                sql.append(" hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(level + "")) {
                sql.append(" town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(level + "")) {
                sql.append(" city='" + area + "'");
            }
            sql.append(" and ");
        }
        sql.append(" and quotaCode='" + index + "'  ");
        sql.append(" quotaCode='" + index + "'  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='5'");
        if (StringUtils.isNotEmpty(startDate)) {
@ -481,11 +492,11 @@ public class ElasticsearchUtil {
        //根据时间维度分组
        if (StringUtils.isNotEmpty(interval)) {
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
            }
        }
        sql.append(groupBy);
@ -497,12 +508,21 @@ public class ElasticsearchUtil {
     *
     * @param quotaDate
     */
    private String changeDate(String quotaDate) {
        return quotaDate + "T00:00:00+0800";
    private String changeDate(String quotaDate){
        try {
            quotaDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(quotaDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return quotaDate;
    }
    //获取最新更新的时间
    public String changeTime(String time) {
        time = time.replace(" ","T")+"+0800";
    public String changeTime(String time){
        try {
            time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

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

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