Browse Source

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

huangwenjie 7 years ago
parent
commit
1213798c62
24 changed files with 1330 additions and 629 deletions
  1. 1 1
      common/common-entity/src/main/java/com/yihu/wlyy/entity/call/CallRecord.java
  2. 2 2
      common/common-entity/src/main/java/com/yihu/wlyy/entity/message/Message.java
  3. 2 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/config/SwaggerConfig.java
  4. 18 17
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/controller/common/account/CustomerController.java
  5. 2 2
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/Message.java
  6. 6 3
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/account/CustomerService.java
  7. 23 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/feedback/AppealService.java
  8. 0 32
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java
  9. 0 14
      patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/service/JobService.java
  10. 2 3
      patient-co/patient-co-statistics-es/src/main/resources/application-dev.yml
  11. 8 4
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  12. 6 6
      patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/task/NoticeJobPushMsgTask.java
  13. 1 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/message/MessageDao.java
  14. 24 17
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthIndexService.java
  15. 8 4
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  16. 615 305
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statisticsES/StatisticsESService.java
  17. 48 18
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/call/CustomerService.java
  18. 407 183
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/ElasticsearchUtil.java
  19. 25 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/call/CallRecordController.java
  20. 41 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/consult/ConsultController.java
  21. 1 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/ehc/PatientEHCController.java
  22. 7 15
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/EsStatisticsController.java
  23. 1 1
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java
  24. 82 0
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/template/ThirdTemplateController.java

+ 1 - 1
common/common-entity/src/main/java/com/yihu/wlyy/entity/call/CallRecord.java

@ -33,7 +33,7 @@ public class CallRecord extends IdEntity {
    private String  ssc; //社保卡号
    private String  doctor; //签约医生code
    private String  doctorName; //签约医生姓名
    private String  adminTeamCode;
    private String  adminTeamCode; //签约医生团队
    public String getCode() {
        return code;

File diff suppressed because it is too large
+ 2 - 2
common/common-entity/src/main/java/com/yihu/wlyy/entity/message/Message.java


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

@ -7,6 +7,7 @@ import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
@ -28,6 +29,7 @@ public class SwaggerConfig extends WebMvcConfigurerAdapter {
                .forCodeGeneration(true)
                .pathMapping("/")
                .select()
                .paths(PathSelectors.regex("/customer/.*"))
                .build()
                .apiInfo(patientApiInfo());
    }

+ 18 - 17
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/controller/common/account/CustomerController.java

@ -35,7 +35,7 @@ import java.util.Map;
@RestController
@RequestMapping(value = "/customer")
@SessionAttributes("current_user")
@Api(description = "客服系统")
@Api
public class CustomerController extends BaseController {
    @Autowired
@ -241,11 +241,11 @@ public class CustomerController extends BaseController {
    @RequestMapping(value = "/getCallRecords", method = {RequestMethod.GET, RequestMethod.POST})
    @ApiOperation(value = "获取通讯记录列表")
    public String getCallRecords(@ApiParam(name="callerNumber",value="呼叫人电话")@RequestParam(required = true)String callerNumber,
                                 @ApiParam(name="answerStatus",value="接听状态: 1.接通,2. 队列中放弃,3.接通")@RequestParam(required = true)Integer answerStatus,
                                 @ApiParam(name="serviceType",value="服务类型:0.医生咨询,1.预约挂号")@RequestParam(required = true)Integer serviceType ,
                                 @ApiParam(name="startDate",value="开始时间")@RequestParam(required = true)String startDate,
                                 @ApiParam(name="endDate",value="结束时间")@RequestParam(required = true)String endDate,
    public String getCallRecords(@ApiParam(name="callerNumber",value="呼叫人电话")@RequestParam(required = false)String callerNumber,
                                 @ApiParam(name="answerStatus",value="接听状态: 1.接通,2. 队列中放弃,3.接通")@RequestParam(required = false)Integer answerStatus,
                                 @ApiParam(name="serviceType",value="服务类型:0.医生咨询,1.预约挂号")@RequestParam(required = false)Integer serviceType ,
                                 @ApiParam(name="startDate",value="开始时间")@RequestParam(required = false)String startDate,
                                 @ApiParam(name="endDate",value="结束时间")@RequestParam(required = false)String endDate,
                                 @ApiParam(name="page",value="第几页,从1开始")@RequestParam(required = true)Integer page,
                                 @ApiParam(name="size",value="页码大小")@RequestParam(required = true)Integer size){
        try {
@ -291,20 +291,21 @@ public class CustomerController extends BaseController {
    @RequestMapping(value = "/getCallServices", method = {RequestMethod.GET, RequestMethod.POST})
    @ApiOperation(value = "协同服务查询")
    public String getCallServices(@ApiParam(name="keyword",value="姓名或身份证或医保卡号")@RequestParam(required = true)String keyword,
                                  @ApiParam(name="serverType",value="服务类型:0.医生咨询,1.预约挂号")@RequestParam(required = true)Integer serverType,
                                  @ApiParam(name="state",value="订单状态:0.草稿,1.待处理,2.完成")@RequestParam(required = true)Integer state,
                                  @ApiParam(name="patientName",value="患者姓名")@RequestParam(required = true)String patientName,
                                  @ApiParam(name="ssc",value="医保卡号")@RequestParam(required = true)String ssc,
                                  @ApiParam(name="idCard",value="身份证号")@RequestParam(required = true)String idCard,
                                  @ApiParam(name="doctorName",value="医生姓名")@RequestParam(required = true)String doctorName,
                                  @ApiParam(name="code",value="服务编号")@RequestParam(required = true)String code,
                                  @ApiParam(name="startDate",value="开始时间")@RequestParam(required = true)String startDate,
                                  @ApiParam(name="endDate",value="结束时间")@RequestParam(required = true)String endDate,
    public String getCallServices(@ApiParam(name="keyword",value="姓名或身份证或医保卡号")@RequestParam(required = false)String keyword,
                                  @ApiParam(name="serverType",value="服务类型:0.医生咨询,1.预约挂号")@RequestParam(required = false)Integer serverType,
                                  @ApiParam(name="state",value="订单状态:0.草稿,1.待处理,2.完成")@RequestParam(required = false)Integer state,
                                  @ApiParam(name="patientName",value="患者姓名")@RequestParam(required = false)String patientName,
                                  @ApiParam(name="ssc",value="医保卡号")@RequestParam(required = false)String ssc,
                                  @ApiParam(name="idCard",value="身份证号")@RequestParam(required = false)String idCard,
                                  @ApiParam(name="doctorName",value="医生姓名")@RequestParam(required = false)String doctorName,
                                  @ApiParam(name="code",value="服务编号")@RequestParam(required = false)String code,
                                  @ApiParam(name="adminTeamCode",value="签约医生团队团队")@RequestParam(required = false)Integer adminTeamCode,
                                  @ApiParam(name="startDate",value="开始时间")@RequestParam(required = false)String startDate,
                                  @ApiParam(name="endDate",value="结束时间")@RequestParam(required = false)String endDate,
                                  @ApiParam(name="page",value="第几页,从1开始")@RequestParam(required = true)Integer page,
                                  @ApiParam(name="size",value="每页大小")@RequestParam(required = true)Integer size){
        try {
            return write(200,"保存成功","data",customerService.getCallServices(keyword, serverType,state,patientName,ssc,idCard,doctorName, code, startDate, endDate, page, size));
            return write(200,"保存成功","data",customerService.getCallServices(keyword, serverType,state,patientName,ssc,idCard,doctorName, code,adminTeamCode,startDate, endDate, page, size));
        }catch (Exception e){
            error(e);
            return error(-1,"保存失败");

File diff suppressed because it is too large
+ 2 - 2
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/Message.java


+ 6 - 3
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/account/CustomerService.java

@ -188,7 +188,7 @@ public class CustomerService extends BaseService{
		List<Patient> list =  patientDao.findByMobile(callerNumber);
		Map<String,Object> rs = new HashedMap();
		Patient p ;
		if(list!=null||list.size()==0){
		if(list==null||list.size()==0){
			rs.put("state",-1);
			rs.put("mes","未找到患者信息");
			rs.put("callRecord",null);
@ -353,7 +353,7 @@ public class CustomerService extends BaseService{
			message.setCode(getCode());
			message.setSenderPhoto(p.getPhoto());
			message.setTitle("协同服务消息");
			message.setType(11);//协同服务消息
			message.setType(12);//协同服务消息
			message.setReadonly(1);//是否只读消息
			message.setSex(p.getSex());
			message.setOver("1");//未处理
@ -364,7 +364,7 @@ public class CustomerService extends BaseService{
		return "1";
	}
	public List<Map<String,Object>> getCallServices(String keyword, Integer serverType,Integer state,String patientName,String ssc,String idCard,String doctorName,String code,String startDate,String endDate,Integer page,Integer size){
	public List<Map<String,Object>> getCallServices(String keyword, Integer serverType,Integer state,String patientName,String ssc,String idCard,String doctorName,String code,Integer adminTeamCode ,String startDate,String endDate,Integer page,Integer size){
		String sql = "SELECT " +
				" s.`code`, " +
				" s.patient, " +
@ -411,6 +411,9 @@ public class CustomerService extends BaseService{
		if(StringUtils.isNotBlank(endDate)){
			sql +=" AND s.create_time <='"+endDate+" 23:59:59'" ;
		}
		if(adminTeamCode!=null){
			sql +=" AND s.admin_team_code ="+adminTeamCode ;
		}
		sql += " LIMIT "+(page-1)*size+","+size +" ORDER BY r.create_time DESC";
		List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);

+ 23 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/feedback/AppealService.java

@ -2,6 +2,7 @@ package com.yihu.wlyy.service.manager.feedback;
import com.yihu.wlyy.entity.Doctor;
import com.yihu.wlyy.entity.Message;
import com.yihu.wlyy.entity.Patient;
import com.yihu.wlyy.entity.SMS;
import com.yihu.wlyy.entity.feedback.Appeal;
import com.yihu.wlyy.repository.DoctorDao;
@ -269,6 +270,28 @@ public class AppealService extends BaseService {
                HttpClientUtil.post(url, params, "UTF-8");
                messageDao.save(message);
            }else if(appeal.getIdentity() == 1){
                //wlyy给患者发送模板消息
                String creater = appeal.getCreater();
                Patient patient = patientDao.findByCode(creater);
                String patientName = patient.getName();
                String patientOpendID = patient.getOpenid();
                if (StringUtils.isNotEmpty(patientOpendID)) {
                    String url = wlyyService + "/third/template/sendTemplate";
                    List<NameValuePair> params = new ArrayList<>();
                    params.add(new BasicNameValuePair("type", "1"));
                    params.add(new BasicNameValuePair("toUser", patientOpendID));
                    params.add(new BasicNameValuePair("url", null));
                    params.add(new BasicNameValuePair("first", patientName+"您好!您提交的账号申诉已处理"));
                    params.add(new BasicNameValuePair("remark", "感谢你的意见"));
                    SimpleDateFormat formatDate = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
                    String newDate = formatDate.format(new Date());
                    String keywords = result + "," + newDate;
                    params.add(new BasicNameValuePair("keywords", keywords));
                    HttpClientUtil.post(url, params, "UTF-8");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();

+ 0 - 32
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java

@ -212,38 +212,6 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动判断的任务
     *
     * @return
     */
    @ApiOperation(value = "启动檢查的任务")
    @RequestMapping(value = "startCheckSignJob", method = RequestMethod.GET)
    public String startCheckSignJob() {
        try {
            jobService.startCheckSignJob();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止判断的任务
     *
     * @return
     */
    @ApiOperation(value = "停止檢查的任务")
    @RequestMapping(value = "stopCheckSignJob", method = RequestMethod.GET)
    public String stopCheckSignJob() {
        try {
            jobService.stopCheckSignJob();
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动所有任务

+ 0 - 14
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/service/JobService.java

@ -5,7 +5,6 @@ import com.yihu.wlyy.statistics.dao.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.statistics.dao.QuartzJobConfigDao;
import com.yihu.wlyy.statistics.dao.SignFamilyDao;
import com.yihu.wlyy.statistics.etl.cache.Cache;
import com.yihu.wlyy.statistics.job.check.CheckSignJob;
import com.yihu.wlyy.statistics.util.QuartzHelper;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import org.springframework.beans.BeanUtils;
@ -269,19 +268,6 @@ public class JobService {
            }
        }
    }
    public void startCheckSignJob() throws Exception {
        if (!quartzHelper.isExistJob(CheckSignJob.jobKey)) {
            quartzHelper.addJob(CheckSignJob.class, CheckSignJob.cron, CheckSignJob.jobKey, new HashMap<>());
        }
    }
    public void stopCheckSignJob() throws Exception {
        if (quartzHelper.isExistJob(CheckSignJob.jobKey)) {
            quartzHelper.removeJob(CheckSignJob.jobKey);
        }
    }
    public void productDataByDayToDay(String start, String end) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = sdf.parse(start);

+ 2 - 3
patient-co/patient-co-statistics-es/src/main/resources/application-dev.yml

@ -41,13 +41,12 @@ systemConfig:
  msg_push_server: http://172.19.103.76:3000
es:
  index: wlyy_quota_dev
  type: wlyy_quota_dev
  index: wlyy_quota_test
  type: wlyy_quota_test
  host:  http://172.19.103.68:9200
  tHost: 172.19.103.68:9300
  clusterName: jkzl
wlyy:
  im:
    databaseName: im_new

+ 8 - 4
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -1144,10 +1144,12 @@ public class FamilyContractService extends BaseService {
                    JSONObject j = jsonArray.getJSONObject(i);
                    Patient member = (Patient) j.get("member");
                    JSONObject data = json;
                    data.remove("toUser");
//                    data.remove("toUser");
                    data.remove("agent");
                    data.put("toUser", member.getCode());
//                    data.put("toUser", member.getCode());
                    data.put("agent", "1");
                    data.remove("represented");
                    data.put("represented", member.getCode());
                    String ms = sf.getName() + ",您好!祝贺您,成功签约" + sf.getDoctorName() + "医生团队,您已可以享受家庭医生所带来的无微不至的健康保健服务。" +
                            "为了给您提供更好的服务,请尽快完成缴费。您可登录签约居民的微信账号,进入签约管理,选择待缴费的签约记录进行缴费操作,如需线下缴费,请尽快到" + (hos != null ? hos.getName() : "") + "社区(地址:" +
@ -1489,10 +1491,12 @@ public class FamilyContractService extends BaseService {
                    JSONObject j = jsonArray.getJSONObject(i);
                    Patient member = (Patient) j.get("member");
                    JSONObject data = json;
                    data.remove("toUser");
//                    data.remove("toUser");
                    data.remove("agent");
                    data.put("toUser", member.getCode());
//                    data.put("toUser", member.getCode());
                    data.put("agent", "1");
                    data.remove("represented");
                    data.put("represented", member.getCode());
                    String ms = sf.getName() + ",您好!祝贺您,成功签约" + doc.getName() + "医生团队,您已可以享受家庭医生所带来的无微不至的健康保健服务。" +
                            "为了给您提供更好的服务,请尽快完成缴费。您可登录签约居民的微信账号,进入签约管理,选择待缴费的签约记录进行缴费操作,如需线下缴费,请尽快到" + (hos != null ? hos.getName() : "") + "社区(地址:" +
                            (hos != null ? hos.getAddress() : "") + ")缴费。";

+ 6 - 6
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/task/NoticeJobPushMsgTask.java

@ -83,7 +83,7 @@ public class NoticeJobPushMsgTask {
				while (true) {
					// 如果queue为空,则当前线程会堵塞,直到有新数据加入
					JSONObject json = queue.take();
					logger.info("发送前:"+json);
					//logger.info("发送前:"+json);
					// 推送平台消息
					String receiver = json.containsKey("receiver") ? json.getString("receiver") : "";
					String type = json.containsKey("type") ? json.getString("type") : "";
@ -91,11 +91,11 @@ public class NoticeJobPushMsgTask {
					String msg = json.containsKey("msg") ? json.getString("msg") : "";
					String data = json.containsKey("data") ? json.getString("data") : "";
					boolean res = pushMessage(receiver, type, title, msg, data);
					if (res) {
						logger.info("消息推送成功!");
					} else {
						logger.error("消息推送失败!");
					}
//					if (res) {
//						logger.info("消息推送成功!");
//					} else {
//						logger.error("消息推送失败!");
//					}
				}
			} catch (Exception ex) {
				ex.printStackTrace();

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/message/MessageDao.java

@ -98,6 +98,6 @@ public interface MessageDao extends PagingAndSortingRepository<Message, Long>, J
    @Query("from Message a where a.type = 8 and a.state=0 and a.del='1' and a.over='0' and relationCode = ?1  ")
    Message findByRelationCode(String relationCode);
    @Query("from Message a where a.type = 11 and a.state=0 and a.del='1' and a.over='0' and receiver = ?1  ")
    @Query("from Message a where a.type = 12 and a.state=0 and a.del='1' and a.over='0' and receiver = ?1  ")
    List<Message> findByReceiverCallService(String doctor);
}

+ 24 - 17
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthIndexService.java

@ -483,28 +483,35 @@ public class PatientHealthIndexService extends BaseService {
            json.put("msg", content);
            json.put("data", "");
            array.put(json);
        }
        // 批量保存消息
        messageDao.save(messages);
        for (String receiver : receivers) {
            if (StringUtils.isEmpty(receiver)) {
                continue;
            }
            //            新增发送医生助手模板消息 v1.4.0 by wujunjie
            if (StringUtils.isNotEmpty(doctorOpenID)) {
                List<Message> messagesList = messageDao.findUnreadHealthIndex(patientCode, receiver);
                String url = doctorAssistant + "/wlyy/feldsher/sendDoctorTemplates";
                List<NameValuePair> params = new ArrayList<>();
                params.add(new BasicNameValuePair("type", "3"));
                params.add(new BasicNameValuePair("openId", doctorOpenID));
                params.add(new BasicNameValuePair("url", targetUrl));
                params.add(new BasicNameValuePair("first", doctorName + "医生,您的签约居民" + patientName +
                        "有" + messagesList.size() + "条未读的体征异常消息"));
                params.add(new BasicNameValuePair("remark", "请进入手机APP查看"));
                SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
                String date = format.format(new Date());
                String keywords = date + "," + patientName;
                params.add(new BasicNameValuePair("keywords", keywords));
                httpClientUtil.post(url, params, "UTF-8");
                if (messagesList != null && messagesList.size()>0){
                    String url = doctorAssistant + "/wlyy/feldsher/sendDoctorTemplates";
                    List<NameValuePair> params = new ArrayList<>();
                    params.add(new BasicNameValuePair("type", "3"));
                    params.add(new BasicNameValuePair("openId", doctorOpenID));
                    params.add(new BasicNameValuePair("url", targetUrl));
                    params.add(new BasicNameValuePair("first", doctorName + "医生,您的签约居民" + patientName +
                            "有" + messagesList.size() + "条未读的体征异常消息"));
                    params.add(new BasicNameValuePair("remark", "请进入手机APP查看"));
                    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
                    String date = format.format(new Date());
                    String keywords = date + "," + patientName;
                    params.add(new BasicNameValuePair("keywords", keywords));
                    httpClientUtil.post(url, params, "UTF-8");
                }
            }
        }
        // 批量保存消息
        messageDao.save(messages);
        // 推送消息给医生
        pushMsgTask.put(array);
    }

+ 8 - 4
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -1215,9 +1215,11 @@ public class FamilyContractService extends BaseService {
                    JSONObject j = jsonArray.getJSONObject(i);
                    Patient member = (Patient) j.get("member");
                    JSONObject data = json;
                    data.remove("toUser");
//                    data.remove("toUser");
                    data.remove("represented");
                    data.remove("agent");
                    data.put("toUser", member.getCode());
//                    data.put("toUser", member.getCode());
                    data.put("represented", member.getCode());
                    data.put("agent", "1");
                    String ms = sf.getName() + ",您好!祝贺您,成功签约" + sf.getDoctorName() + "医生团队,您已可以享受家庭医生所带来的无微不至的健康保健服务。" +
@ -1566,10 +1568,12 @@ public class FamilyContractService extends BaseService {
                    JSONObject j = jsonArray.getJSONObject(i);
                    Patient member = (Patient) j.get("member");
                    JSONObject data = json;
                    data.remove("toUser");
//                    data.remove("toUser");
                    data.remove("agent");
                    data.put("toUser", member.getCode());
//                    data.put("toUser", member.getCode());
                    data.put("agent", "1");
                    data.remove("represented");
                    data.put("represented", member.getCode());
                    String ms = sf.getName() + ",您好!祝贺您,成功签约" + doc.getName() + "医生团队,您已可以享受家庭医生所带来的无微不至的健康保健服务。" +
                            "为了给您提供更好的服务,请尽快完成缴费。您可登录签约居民的微信账号,进入签约管理,选择待缴费的签约记录进行缴费操作,如需线下缴费,请尽快到" + (hos != null ? hos.getName() : "") + "社区(地址:" +
                            (hos != null ? hos.getAddress() : "") + ")缴费。";

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

@ -21,6 +21,7 @@ import io.searchbox.client.JestClient;
import io.searchbox.core.Bulk;
import io.searchbox.core.BulkResult;
import io.searchbox.core.Index;
import org.apache.commons.collections.ArrayStack;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
@ -92,69 +93,6 @@ public class StatisticsESService {
    }
//    /**
//     * 查询某一天父level下的子level 例如 查询市下面的团队,或者区下面的团队
//     *
//     * @param index      指标code
//     * @param area           机构code或者团队code或者town code或者city code
//     * @param timeLevel      1增量 2到达量
//     * @param level      父arealevel
//     * @param lowLevel 子arealevel
//     * @return
//     */
//    public List<SaveModel> findOneDateQuotaByChllevel(String startDate,
//                                                      String endDate,
//                                                      String index,
//                                                      String area,
//                                                      String timeLevel,
//                                                      String level,
//                                                      String lowLevel) {
//
//        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
//        startDate = changeDate(startDate);
//        endDate = changeDate(endDate);
//
//        StringBuffer sql = new StringBuffer();
//        StringBuffer groupBy = new StringBuffer();
//        //根据 childAreaLevel   group by
//        if (SaveModel.teamLevel.equals(level)) {
//            sql.append("select team,teamName,result1,result2 from wlyy_quota_test where  ");
//            groupBy.append(" group by team,teamName");
//        } else if (SaveModel.OrgLevel.equals(level)) {
//            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where  ");
//            groupBy.append(" group by hospital,hospitalName");
//        } else if (SaveModel.townLevel.equals(level)) {
//            sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
//            groupBy.append(" group by town,townName");
//        } else if (SaveModel.cityLevel.equals(level)) {
//            sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where  ");
//            groupBy.append(" group by city,cityName");
//        }
//
//        sql.append("  quotaCode='" + index + "'  ");
//        sql.append(" and timeLevel='" + timeLevel + "'  ");
//        sql.append(" and areaLevel='5'");
//        if(StringUtils.isNotEmpty(startDate)){
//            sql.append(" and quotaDate>='" + startDate + "'");
//        }
//        if(StringUtils.isNotEmpty(endDate)){
//            sql.append(" and quotaDate<='" + endDate + "'");
//        }
//        //查询code
//        if (SaveModel.teamLevel.equals(lowLevel)) {
//            sql.append(" and team='" + area + "'");
//        } else if (SaveModel.OrgLevel.equals(lowLevel)) {
//            sql.append(" and hospital='" + area + "'");
//        } else if (SaveModel.townLevel.equals(lowLevel)) {
//            sql.append(" and town='" + area + "'");
//        } else if (SaveModel.cityLevel.equals(lowLevel)) {
//            sql.append(" and city='" + area + "'");
//        }
//        sql.append(groupBy);
//        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
//    }
    /**
     * 获取时间范围内按间隔统计指标增量
     *
@ -500,42 +438,45 @@ public class StatisticsESService {
    /**
     * 缴费和未交费的人数
     *
     * @param endDate
     * @param area
     * @param level
     * @return
     * @throws Exception
     */
    public JSONArray getPayPremiums(String endDate, String area, int level)throws Exception{
    public JSONArray getPayPremiums(String endDate, String area, int level) throws Exception {
        //已缴费
        SaveModel paidSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate,endDate,area,level,"1","2");
        SaveModel paidSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, "1", "2");
        //未交费
        SaveModel noPaySaveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate,endDate,area,level,"14","2");
        SaveModel noPaySaveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, "14", "2");
        List<Map<String, Object>> resultList = new ArrayList<>();
        DecimalFormat df = new DecimalFormat("0.0000");
        long paidTotal = paidSaveModel.getResult2().longValue();
        Map<String,Object> map1 = new HashedMap();
        Map<String, Object> map1 = new HashedMap();
        long noPayTotal = noPaySaveModel.getResult2().longValue();
        Map<String,Object> map2 = new HashedMap();
        Map<String, Object> map2 = new HashedMap();
        //求签约总数
        long totalNum = paidTotal+noPayTotal;
        long totalNum = paidTotal + noPayTotal;
        map1.put("code","1");
        map1.put("amount",paidTotal);
        map1.put("name","已缴费人数");
        map1.put("code", "1");
        map1.put("amount", paidTotal);
        map1.put("name", "已缴费人数");
        double rateG = (paidTotal > 0 ? paidTotal * 1.0000 / totalNum * 100 : 0);
        map1.put("rate", df.format(rateG));;
        map1.put("rate", df.format(rateG));
        ;
        map1.put("rateString", paidTotal + "/" + totalNum);
        resultList.add(map1);
        map2.put("code","0");
        map2.put("amount",noPayTotal);
        map2.put("name","未缴费人数");
        map2.put("code", "0");
        map2.put("amount", noPayTotal);
        map2.put("name", "未缴费人数");
        double rateG2 = (noPayTotal > 0 ? noPayTotal * 1.0000 / totalNum * 100 : 0);
        map2.put("rate", df.format(rateG2));;
        map2.put("rate", df.format(rateG2));
        ;
        map2.put("rateString", noPayTotal + "/" + totalNum);
        resultList.add(map2);
@ -685,7 +626,7 @@ public class StatisticsESService {
     * @return
     */
    public JSONObject getGroupInfo(String endDate, String lowCode, String area, int level, String year) throws Exception {
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel1(endDate, endDate, area, level, "17", "2", 1,lowCode, null, null);
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel1(endDate, endDate, area, level, "17", "2", lowCode, null, null);
        long total = 0;
        if (list.size() > 0) {
            total = list.get(0).getResult2().longValue();
@ -815,11 +756,11 @@ public class StatisticsESService {
     * @return
     */
    public JSONObject getDateTotal(String startDate, String endDate, int interval, String area, int level, String index, String lowCode, String year) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        int taskNum = 0;
        JSONObject json = new JSONObject();
        if (level < 5 && org.springframework.util.StringUtils.isEmpty(lowCode)) {
        if (level < Integer.valueOf(SaveModel.townLevel) && org.springframework.util.StringUtils.isEmpty(lowCode)) {
            PopulationBase peopleNum = getPopulationBase(area, year);
            if (peopleNum != null) {
@ -840,23 +781,333 @@ public class StatisticsESService {
        }
        json.put("taskNum", taskNum);
        List<SaveModel> list = null;
        if (StringUtils.isNotEmpty(lowCode)) {
            //一级维度
            list = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, "2", interval + "", lowCode);
        } else {
            list = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, "2", interval + "");
        if (interval == 1) {
            JSONArray jsonArray = dateTotalStatistics(startDate, endDate, area, level, index, lowCode);
            json.put("data", jsonArray);
            return json;
        } else if (interval == 2) {
            JSONArray jsonArray = weekTotalStatistics(startDate, endDate, area, level, index, lowCode);
            json.put("data", jsonArray);
            return json;
        } else if (interval == 3) {
            JSONArray jsonArray = monthTotalStatistics(startDate, endDate, area, level, index, lowCode);
            json.put("data", jsonArray);
            return json;
        }
        return json;
    }
    /**
     * 总体分析 折线图 绑定微信 按日
     *
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @param lowCode
     * @return
     * @throws ParseException
     */
    public JSONArray dateTotalStatistics(String startDate, String endDate, String area, int level, String index, String lowCode) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        List<SaveModel> saveModels = new ArrayList<>();
        //startDate = DateUtil.getNextDay(startDate,-1);
        if (StringUtils.isNotBlank(lowCode)) {
            saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, SaveModel.interval_day, lowCode);
        } else {
            saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, SaveModel.interval_day);
        }
        List<JSONObject> result = new ArrayList<>();
        for (SaveModel saveModel : list) {
        if (saveModels != null) {
            // 计算结果
            for (SaveModel saveModel : saveModels) {
                JSONObject json = new JSONObject();
                String range = df.format(saveModel.getQuotaDate());
                long amount = saveModel.getResult2().longValue();
                json.put("range", range);
                json.put("amount", amount);
                result.add(json);
            }
            // 排序
            result.sort(new Comparator<JSONObject>() {
                @Override
                public int compare(JSONObject o1, JSONObject o2) {
                    if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
                        return 1;
                    } else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            });
            return new JSONArray(result);
        } else {
            return new JSONArray();
        }
    }
    /**
     * 按周统计 折线图
     *
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @param lowCode
     * @return
     * @throws Exception
     */
    private JSONArray weekTotalStatistics(String startDate, String endDate, String area, int level, String index, String lowCode) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        // 起始日期
        Calendar start = Calendar.getInstance();
        start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
        // 第一个统计周期结束日期
        String firstEnd = "";
        // 结束日期
        Calendar end = Calendar.getInstance();
        end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
        // 起始日期为周几
        int week = start.get(Calendar.DAY_OF_WEEK);
        int incre = 7 - week + 1;
        // 日期集合
        List<Calendar> days = new ArrayList<>();
        days.add(start);
        boolean flag = true;
        int i = 0;
        if (startDate.compareTo(endDate) == 0) {
            flag = false;
            days.add(end);
            firstEnd = df.format(end.getTime());
        }
        // 计算统计日期
        while (flag) {
            Calendar next = Calendar.getInstance();
            next.setTime(days.get(days.size() - 1).getTime());
            if (i == 0) {
                if (incre != 7) {
                    next.add(Calendar.DATE, incre);
                }
            } else {
                next.add(Calendar.DATE, 7);
            }
            if (next.getTime().before(DateUtil.strToDate(endDate, "yyyy-MM-dd"))) {
                days.add(next);
                if (i == 0) {
                    firstEnd = df.format(next.getTime());
                }
            } else {
                days.add(end);
                flag = false;
                if (i == 0) {
                    firstEnd = df.format(end.getTime());
                }
            }
            i++;
        }
        // 结果集
        Map<String, JSONObject> countResult = new HashMap<>();
        // 算出每个查询周期
        for (int j = 0; j < days.size() - 1; j++) {
            String startStr = "";
            String endStr = df.format(days.get(j + 1).getTime());
            // 起始、截止日期
            if (j == 0) {
                startStr = df.format(days.get(j).getTime());
            } else {
                Calendar cal = Calendar.getInstance();
                cal.setTime(days.get(j).getTime());
                cal.add(Calendar.DATE, 1);
                startStr = df.format(cal.getTime());
            }
            JSONObject range = new JSONObject();
            range.put("range", df.format(saveModel.getQuotaDate()));
            range.put("amount", saveModel.getResult2().longValue());
            result.add(range);
            range.put("range", endStr);
            range.put("amount", 0);
            countResult.put(endStr, range);
        }
        if (startDate.equals(df.format(new Date()))) {
            Calendar preDate = Calendar.getInstance();
            preDate.setTime(df.parse(endDate));
            preDate.add(Calendar.DATE, -1);
            startDate = df.format(preDate.getTime());
        }
        List<SaveModel> saveModels = new ArrayList<>();
        if (StringUtils.isNotBlank(lowCode)) {
            saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, SaveModel.interval_day, lowCode);
        } else {
            saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, SaveModel.interval_day);
        }
        if (saveModels != null) {
            // 计算结果
            for (SaveModel saveModel : saveModels) {
                String range = df.format(saveModel.getQuotaDate());
                JSONObject json = countResult.get(range);
                if (json != null) {
                    long amount = saveModel.getResult2().longValue();
                    json.put("amount", amount);
                }
            }
            List<JSONObject> result = new ArrayList<>(countResult.values());
            // 排序
            result.sort(new Comparator<JSONObject>() {
                @Override
                public int compare(JSONObject o1, JSONObject o2) {
                    if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
                        return 1;
                    } else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            });
            return new JSONArray(result);
        } else {
            return new JSONArray();
        }
    }
    /**
     * 按月统计 折线图
     *
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @param lowCode
     * @return
     * @throws Exception
     */
    private JSONArray monthTotalStatistics(String startDate, String endDate, String area, int level, String index, String lowCode) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        // 起始日期
        Calendar start = Calendar.getInstance();
        start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
        // 结束日期
        Calendar end = Calendar.getInstance();
        end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
        // 日期集合
        List<Calendar> days = new ArrayList<>();
        days.add(start);
        boolean flag = true;
        int k = 0;
        if (startDate.compareTo(endDate) == 0) {
            flag = false;
            days.add(end);
        }
        // 统计日期计算
        while (flag) {
            Calendar next = Calendar.getInstance();
            next.setTime(days.get(days.size() - 1).getTime());
            if (k == 0) {
                next.add(Calendar.MONTH, 1);
            } else {
                next.add(Calendar.MONTH, 2);
            }
            next.set(Calendar.DAY_OF_MONTH, 1);
            next.add(Calendar.DAY_OF_MONTH, -1);
            if (next.getTime().before(DateUtil.strToDate(endDate, "yyyy-MM-dd"))) {
                days.add(next);
            } else {
                days.add(end);
                flag = false;
            }
            k++;
        }
        // 统计结果
        Map<String, JSONObject> countResult = new HashMap<>();
        for (int i = 0; i < days.size() - 1; i++) {
            String endStr = df.format(days.get(i + 1).getTime());
            JSONObject range = new JSONObject();
            range.put("range", endStr);
            range.put("amount", 0);
            countResult.put(endStr, range);
        }
        if (startDate.equals(df.format(new Date()))) {
            Calendar preDate = Calendar.getInstance();
            preDate.setTime(df.parse(endDate));
            preDate.add(Calendar.DATE, -1);
            startDate = df.format(preDate.getTime());
        }
        List<SaveModel> saveModels = new ArrayList<>();
        if (StringUtils.isNotBlank(lowCode)) {
            saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, SaveModel.interval_day, lowCode);
        } else {
            saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, SaveModel.interval_day);
        }
        if (saveModels != null) {
            // 计算结果
            for (SaveModel saveModel : saveModels) {
                String range = df.format(saveModel.getQuotaDate());
                JSONObject json = countResult.get(range);
                if (json != null) {
                    long amount = saveModel.getResult2().longValue();
                    json.put("amount", amount);
                }
            }
            List<JSONObject> result = new ArrayList<>(countResult.values());
            // 排序
            result.sort(new Comparator<JSONObject>() {
                @Override
                public int compare(JSONObject o1, JSONObject o2) {
                    if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
                        return 1;
                    } else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            });
            return new JSONArray(result);
        } else {
            return new JSONArray();
        }
        json.put("data", new ArrayList<>(result));
        return json;
    }
@ -950,12 +1201,12 @@ public class StatisticsESService {
        if (date.compareTo(dateFormat.format(new Date())) >= 0) {
            date = elasticsearchUtil.getQuotaTime();
        }
        List<SaveModel> esModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel1(date, area, level, index, SaveModel.timeLevel_DDL, low_level, lowCode);
        List<SaveModel> esModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel1(date, area, level, index, SaveModel.timeLevel_DDL, low_level, low_level);
        //esModelList=elasticsearchUtil.findDateQuotaLevel1(date,date,area,level,index,SaveModel.timeLevel_DDL,1,lowCode,"",low_level);
        if (esModelList != null && esModelList.size() > 0) {
            for (SaveModel one : esModelList) {
                Map<String, Object> maps = new HashMap<String, Object>();
                maps.put("amount", one.getResult1().intValue());
                maps.put("amount", one.getResult2().intValue());
                if (low_level.equals("3")) {
                    maps.put("code", one.getTown());
                    maps.put("name", one.getTownName());
@ -1331,7 +1582,7 @@ public class StatisticsESService {
            //如果分母为0 分子为0 返回0%
            return 0;
        }
        Double size = first  / second;
        Double size = first / second;
        DecimalFormat df = new DecimalFormat("0.0");//格式化小数,不足的补0
        String filesize = df.format(size);
        return Double.valueOf(filesize);
@ -1556,7 +1807,7 @@ public class StatisticsESService {
        if (date.compareTo(dateFormat.format(new Date())) >= 0) {
            date = elasticsearchUtil.getQuotaTime();
        }
        List<SaveModel> esModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel0( date, area, level, index, SaveModel.timeLevel_DDL, low_level);
        List<SaveModel> esModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel0(date, area, level, index, SaveModel.timeLevel_DDL, low_level);
        if (esModelList != null && esModelList.size() > 0) {
            for (SaveModel one : esModelList) {
@ -1763,7 +2014,7 @@ public class StatisticsESService {
                timeKey = elasticsearchUtil.getQuotaTime();
            } else {
                Integer coutYear = Integer.parseInt(year);
                timeKey = coutYear+1 + "-06-30";
                timeKey = coutYear + 1 + "-06-30";
            }
        }
//        timeKey= "2017-11-01 00:00:00";
@ -1789,12 +2040,12 @@ public class StatisticsESService {
     * @param onRely
     * @return
     */
    public List<Map<String, Object>> getCoutList(Integer level, String lowLevel,List<SaveModel> rely, List<SaveModel> total, List<SaveModel> onRely) {
    public List<Map<String, Object>> getCoutList(Integer level, String lowLevel, List<SaveModel> rely, List<SaveModel> total, List<SaveModel> onRely) {
        Map<String, Object> relyMap = new HashMap<>();
        Map<String, Object> totalMap = new HashMap<>();
        Map<String, Object> onRelyMap = new HashMap<>();
        JSONObject result = new JSONObject();
        String low_level=StringUtils.isEmpty(lowLevel)?String.valueOf(level+1):lowLevel;
        String low_level = StringUtils.isEmpty(lowLevel) ? String.valueOf(level + 1) : lowLevel;
        //转换回复数
        for (SaveModel saveModel : rely) {
            if (SaveModel.teamLevel.equals(low_level)) {
@ -1918,7 +2169,7 @@ public class StatisticsESService {
            if (Constant.getNowYear().equals(year)) {
                quotaTime = elasticsearchUtil.getQuotaTime();
            } else {
                quotaTime = Integer.valueOf(year)+1 + "-6-30";
                quotaTime = Integer.valueOf(year) + 1 + "-6-30";
            }
        }
//        quotaTime = "2017-10-19 00:00:00";
@ -1946,8 +2197,8 @@ public class StatisticsESService {
    public JSONObject getConsultingTitle(int level, String area, String year) throws Exception {
        JSONObject result = new JSONObject();
        String quotaDate = elasticsearchUtil.getQuotaTime();
        if(!Constant.getNowYear().equals(year)){
            quotaDate = Integer.valueOf(year)+1 + "-06-30";
        if (!Constant.getNowYear().equals(year)) {
            quotaDate = Integer.valueOf(year) + 1 + "-06-30";
        }
        SaveModel relyVal = elasticsearchUtil.findOneDateQuotaLevel0(quotaDate, quotaDate, area, level, "23", "2");
@ -2203,13 +2454,13 @@ public class StatisticsESService {
//        Map<String, Object> expenseStatus1Sigjn = getByIndexSingle(date, area, level, "1",dateFormat);
        SaveModel expenseStatus1Sigjn = elasticsearchUtil.findOneDateQuotaLevel0(date, area, level, "1", "2");
        JSONObject jsonObject = new JSONObject();
        if (Integer.valueOf(SaveModel.teamLevel)==level) {
        if (Integer.valueOf(SaveModel.teamLevel) == level) {
            jsonObject.put("name", expenseStatus1Sigjn.getTeamName());
        } else if (Integer.valueOf(SaveModel.OrgLevel)==level) {
        } else if (Integer.valueOf(SaveModel.OrgLevel) == level) {
            jsonObject.put("name", expenseStatus1Sigjn.getHospitalName());
        } else if (Integer.valueOf(SaveModel.townLevel)==level) {
        } else if (Integer.valueOf(SaveModel.townLevel) == level) {
            jsonObject.put("name", expenseStatus1Sigjn.getTownName());
        } else if (Integer.valueOf(SaveModel.cityLevel)==level) {
        } else if (Integer.valueOf(SaveModel.cityLevel) == level) {
            jsonObject.put("name", expenseStatus1Sigjn.getCityName());
        }
        jsonObject.put("code", area);
@ -2298,10 +2549,10 @@ public class StatisticsESService {
        if (StringUtils.isEmpty(lowCode)) {
            //续签量
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, index, "2","", low_level);
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, index, "2", "", low_level);
        } else {
            //续签量
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel1(DateUtil.getNextDay(new Date(),-1), DateUtil.getNextDay(new Date(),-1), area, level, index, "2",1,lowCode,"",low_level);
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel1(DateUtil.getNextDay(new Date(), -1), DateUtil.getNextDay(new Date(), -1), area, level, index, "2", lowCode, "", low_level);
            //renewSaveModels = elasticsearchUtil.findDateQuotaLevel1(timeKey, timeKey, area, level, index, "2",1,lowCode,"",low_level);
        }
@ -2328,9 +2579,9 @@ public class StatisticsESService {
            //查询去年的签约转map
            List<SaveModel> yearsList = new ArrayList();
            if (StringUtils.isBlank(lowCode)) {
                yearsList = elasticsearchUtil.findDateQuotaLevel0(lastDate,lastDate, area, level, "1", "2", "",low_level);
                yearsList = elasticsearchUtil.findDateQuotaLevel0(lastDate, lastDate, area, level, "1", "2", "", low_level);
            } else {
                yearsList = elasticsearchUtil.findDateQuotaLevel1(lastDate, lastDate, area, level, "17", "2", 1, lowCode,"",low_level);
                yearsList = elasticsearchUtil.findDateQuotaLevel1(lastDate, lastDate, area, level, "17", "2", lowCode, "", low_level);
            }
            Map<String, SaveModel> resultMap = new HashMap<>();
@ -2357,8 +2608,8 @@ public class StatisticsESService {
                }
                if (renewMap != null && renewMap.size() > 0) {
                    renewNum = renewMap.get(reMap.get("code").toString());
                    if (renewNum==null){
                        renewNum=0;
                    if (renewNum == null) {
                        renewNum = 0;
                    }
                } else {
                }
@ -2755,52 +3006,52 @@ public class StatisticsESService {
        String index = "58";
        Map<String, Object> rs = new HashedMap();
        //总数
        List<SaveModel> totalList = elasticsearchUtil.findListDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", null);
        SaveModel total = elasticsearchUtil.findOneDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2");
        //进行中
        List<SaveModel> processingList = elasticsearchUtil.findListDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "1");
        SaveModel processing = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "1");
        //已完成
        List<SaveModel> finishedList = elasticsearchUtil.findListDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "2");
        SaveModel finished = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "2");
        //已经取消
        List<SaveModel> canceledList = elasticsearchUtil.findListDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "3");
        SaveModel canceled = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "3");
        //审核不通过
        List<SaveModel> unPassList = elasticsearchUtil.findListDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "4");
        SaveModel unPass = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "4");
        //其他原因取消
        List<SaveModel> otherList = elasticsearchUtil.findListDateQuotaLevel0(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "5");
        SaveModel other = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, String.valueOf(adminTeamId), Integer.valueOf(SaveModel.teamLevel), index, "2", "5");
        //总数
        if (totalList != null && totalList.size() > 0) {
            rs.put("total", totalList.get(0).getResult2());
        if (total != null) {
            rs.put("total", total.getResult2());
        } else {
            rs.put("total", 0);
        }
        //进行中
        if (processingList != null && processingList.size() > 0) {
            rs.put("processingCount", processingList.get(0).getResult2());
        if (processing != null) {
            rs.put("processingCount", processing.getResult2());
        } else {
            rs.put("processingCount", 0);
        }
        //已完成
        if (finishedList != null && finishedList.size() > 0) {
            rs.put("finishCount", finishedList.get(0).getResult2());
        if (finished != null) {
            rs.put("finishCount", finished.getResult2());
        } else {
            rs.put("finishCount", 0);
        }
        //已取消
        if (canceledList != null && canceledList.size() > 0) {
            rs.put("patientCancelCount", canceledList.get(0).getResult2());
        if (canceled != null) {
            rs.put("patientCancelCount", canceled.getResult2());
        } else {
            rs.put("patientCancelCount", 0);
        }
        //审核不通过
        if (unPassList != null && unPassList.size() > 0) {
            rs.put("noReviewedCount", unPassList.get(0).getResult2());
        if (unPass != null) {
            rs.put("noReviewedCount", unPass.getResult2());
        } else {
            rs.put("noReviewedCount", 0);
        }
        //其他原因取消
        if (otherList != null && otherList.size() > 0) {
            rs.put("payOuttimeCount", otherList.get(0).getResult2());
        if (other != null) {
            rs.put("payOuttimeCount", other.getResult2());
        } else {
            rs.put("payOuttimeCount", 0);
        }
@ -2808,7 +3059,9 @@ public class StatisticsESService {
    }
    public Map<String, Object> getPrescriptionCount(int level, String area, String disease) throws Exception {
        String index = "58";
        //因为一个处方可能有多个疾病状态 所以分开2个指标
        String index58 = "58";//统计长处方总数疾病和状态维度
        String index64 = "64";//统计长处方总数状态维度
        Map<String, Object> rs = new HashedMap();
        SaveModel total = null;
        SaveModel processing = null;
@ -2819,39 +3072,39 @@ public class StatisticsESService {
        String quotaDate = elasticsearchUtil.getQuotaTime();
        //总数
        if (StringUtils.isNotBlank(disease)) {
            total = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index, "2", disease);
            total = elasticsearchUtil.findOneDateQuotaLevel2NoSlaveKey1(quotaDate, area, level, index58, SaveModel.timeLevel_DDL, disease);
        } else {
            total = elasticsearchUtil.findOneDateQuotaLevel0(quotaDate, area, level, index, "2");
            total = elasticsearchUtil.findOneDateQuotaLevel1NoSlaveKey1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL);
        }
        //进行中
        if (StringUtils.isNotBlank(disease)) {
            processing = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index, "2",  disease, "1");
            processing = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index58, SaveModel.timeLevel_DDL, disease, "1");
        } else {
            processing = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index, "2", "1");
            processing = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, "1");
        }
        //已完成
        if (StringUtils.isNotBlank(disease)) {
            finished = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index, "2",  disease, "2");
            finished = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index58, SaveModel.timeLevel_DDL, disease, "2");
        } else {
            finished = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index, "2", "2");
            finished = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, "2");
        }
        //已经取消
        if (StringUtils.isNotBlank(disease)) {
            canceled = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index, "2",  disease, "3");
            canceled = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index58, SaveModel.timeLevel_DDL, disease, "3");
        } else {
            canceled = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index, "2", "3");
            canceled = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, "3");
        }
        //审核不通过
        if (StringUtils.isNotBlank(disease)) {
            unPass = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index, "2",  disease, "4");
            unPass = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index58, SaveModel.timeLevel_DDL, disease, "4");
        } else {
            unPass = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index, "2", "4");
            unPass = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, "4");
        }
        //其他原因取消
        if (StringUtils.isNotBlank(disease)) {
            other = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index, "2",  disease, "5");
            other = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, level, index58, SaveModel.timeLevel_DDL, disease, "5");
        } else {
            other = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index, "2", "5");
            other = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, "5");
        }
        //总数
@ -2966,8 +3219,16 @@ public class StatisticsESService {
    public List<Map<String, Object>> getPrescriptionAgeLowLevel(String level, String lowlevel, String area, String disease) throws Exception {
        String index63 = "63";  //统计长处方总数疾病和状态维度(去重相同患者)
        String index68 = "68";  //统计长处方年龄人数(按照患者去重)
        String quotaDate = elasticsearchUtil.getQuotaTime();
        List<SaveModel> list = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, Integer.parseInt(level), "63", "2", lowlevel, disease);
        List<SaveModel> list = null;
        if (org.springframework.util.StringUtils.isEmpty(disease)) {
            list = elasticsearchUtil.findListDateQuotaLevel1NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index68, SaveModel.timeLevel_DDL, lowlevel);
        } else {
            list = elasticsearchUtil.findListDateQuotaLevel2NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index63, SaveModel.timeLevel_DDL, lowlevel, disease);
        }
        Map<String, Object> map = null;
        List<Map<String, Object>> rs = new ArrayList<>();
        if (list.size() > 0) {
@ -2989,7 +3250,6 @@ public class StatisticsESService {
                map.put("val", one.getResult2().longValue());
            }
        } else {
            //统计数据为空时,自建结果集
            List<Town> townList = null;
            List<Hospital> hospitalList = null;
@ -3063,14 +3323,14 @@ public class StatisticsESService {
        Long num = (Long) count.get("num");
        Map<String, Object> map = new HashMap<>();
        DecimalFormat decimalFormat = new DecimalFormat("0.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
        if(num==0){
        if (num == 0) {
            map.put("0ageRate", 0.0);
            map.put("7ageRate", 0.0);
            map.put("19ageRate", 0.0);
            map.put("31ageRate", 0.0);
            map.put("51ageRate", 0.0);
            map.put("65ageRate", 0.0);
        }else{
        } else {
            Double ageRate = list.get(0).getResult2() / num;
            map.put("0ageRate", decimalFormat.format(ageRate));
@ -3096,13 +3356,15 @@ public class StatisticsESService {
     * @return
     */
    public List<Map<String, Object>> getPrescriptionTotalHistogram(int level, String area, String disease, String type) throws Exception {
        String index = "58";
        List<Map<String, Object>> rs = new ArrayList<>();
        //因为一个处方可能有多个疾病状态 所以分开2个指标
        String index58 = "58";//统计长处方总数疾病和状态维度
        String index64 = "64";//统计长处方总数状态维度
        Map<String, Map<String, Object>> rs = new LinkedHashMap<>();
        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");
@ -3110,7 +3372,7 @@ public class StatisticsESService {
            mc.put("month", date);
            mc.put("count", 0);
            dd.add(Calendar.MONTH, -1);
            rs.add(mc);
            rs.put(date, mc);
        }
        String startTime = DateUtil.dateToStr(dd.getTime(), "YYYY-MM-dd HH:mm:ss");
        String endTime = DateUtil.dateToStr(new Date(), "YYYY-MM-dd HH:mm:ss");
@ -3119,37 +3381,31 @@ public class StatisticsESService {
            //类型0.总量,1.进行中,2.已完成,3.居民取消,4.审核不通过,5.其他原因取消
            if ("0".equals(type)) {
                //总数
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel1(startTime, endTime, area, level, index, "1", "3", disease);
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel2NoSlaveKey2(startTime, endTime, area, level, index58, "1", "3", disease);
            } else {
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel2(startTime, endTime, area, level, index, "1", "3", disease, type);
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel2(startTime, endTime, area, level, index58, "1", "3", disease, type);
            }
        } else {
            if ("0".equals(type)) {
                //总数
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel0(startTime, endTime, area, level, index, "1", "3");
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel1NoSlaveKey1(startTime, endTime, area, level, index64, "1", "3");
            } else {
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel1Key2(startTime, endTime, area, level, index, "1", "3", type);
                resultList = elasticsearchUtil.findLineChartDateQuotaLevel1(startTime, endTime, area, level, index64, "1", "3", type);
            }
        }
        for (Map<String, Object> m : rs) {
            Iterator iterator = resultList.iterator();
            while (iterator.hasNext()) {
                SaveModel saveModel = (SaveModel) iterator.next();
                String monthKey = (String) m.get("month");
                String monthKeyEs = "";
                if (saveModel.getQuotaDate() != null) {
                    monthKeyEs = DateUtil.changeQuotaDate(saveModel.getQuotaDate());
                    m.put("month", monthKeyEs);
                }
                if (StringUtils.isNotBlank(monthKeyEs) && monthKey.equals(monthKeyEs)) {
                    m.put("count", saveModel.getResult2());
                } else {
                    m.put("count", 0);
                }
        //把数据设置到初始化的Map里面去
        for (SaveModel saveModel : resultList) {
            String monthKeyEs = "";
            if (saveModel.getQuotaDate() != null) {
                monthKeyEs = DateUtil.changeQuotaDate(saveModel.getQuotaDate());
            }
            if (StringUtils.isNotBlank(monthKeyEs) && rs.containsKey(monthKeyEs)) {
                Map<String, Object> oneMc = rs.get(monthKeyEs);
                oneMc.put("count", saveModel.getResult2());
            }
        }
        return rs;
        return new ArrayList<>(rs.values());
    }
    /**
@ -3163,51 +3419,33 @@ public class StatisticsESService {
     */
    public List<Map<String, Object>> getPrescriptionTotalLowLevel(int level, String lowlevel, String area, String disease, String type) throws Exception {
        String quotaDate = elasticsearchUtil.getQuotaTime();
        String index = "58";
        //因为一个处方可能有多个疾病状态 所以分开2个指标
        String index58 = "58";//统计长处方总数疾病和状态维度
        String index64 = "64";//统计长处方总数状态维度
        List<SaveModel> saveModels = new ArrayList<>();
        List<Map<String, Object>> rs = new ArrayList<>();
        //一级维度
        if (StringUtils.isEmpty(disease)) {
            //类型 1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
//            if ("1".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel0(quotaDate, area, level, index, "2", lowlevel);
//            } else if ("2".equals(type) || "3".equals(type) || "4".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index, "2", lowlevel, type);
//            } else if ("5".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index, "2", lowlevel, "1");
//            } else if ("6".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index, "2", lowlevel, "5");
//            }
            if ("1".equals(type)) {
                //总数
                saveModels = elasticsearchUtil.findListDateQuotaLevel0(quotaDate,area,level,index,"2",lowlevel);
            } else if("2".equals(type) || "3".equals(type) || "4".equals(type)){
                saveModels = elasticsearchUtil.findListDateQuotaLevel1Key2(quotaDate,area,level,index,"2",lowlevel,type);
            } else if("5".equals(type)){
                saveModels = elasticsearchUtil.findListDateQuotaLevel1Key2(quotaDate,area,level,index,"2",lowlevel,"1");
                saveModels = elasticsearchUtil.findListDateQuotaLevel1NoSlaveKey1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, lowlevel);
            } else if ("2".equals(type) || "3".equals(type) || "4".equals(type)) {
                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, lowlevel, type);
            } else if ("5".equals(type)) {
                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, lowlevel, "1");
            } else if ("6".equals(type)) {
                saveModels = elasticsearchUtil.findListDateQuotaLevel1Key2(quotaDate,area,level,index,"2",lowlevel,"5");
            }
        } else {
            //类型 1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消
//            if ("1".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index, "2", lowlevel, disease);
//            } else if ("2".equals(type) || "3".equals(type) || "4".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, type);
//            } else if ("5".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, "1");
//            } else if ("6".equals(type)) {
//                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, "5");
//            }
                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index64, SaveModel.timeLevel_DDL, lowlevel, "5");
            }
        } else {
            if ("1".equals(type)) {
                //总数String quotaDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey2
                saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate,area,level,index,"2",lowlevel,disease);
            } else if("2".equals(type) || "3".equals(type) || "4".equals(type)){
                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, type);
            } else if("5".equals(type)){
                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, "1");
            } else if("6".equals(type)){
                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, "5");
                saveModels = elasticsearchUtil.findListDateQuotaLevel2NoSlaveKey2(quotaDate, area, level, index58, "2", lowlevel, disease);
            } else if ("2".equals(type) || "3".equals(type) || "4".equals(type)) {
                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index58, "2", lowlevel, disease, type);
            } else if ("5".equals(type)) {
                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index58, "2", lowlevel, disease, "1");
            } else if ("6".equals(type)) {
                saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index58, "2", lowlevel, disease, "5");
            }
        }
        if ("5".equals(lowlevel)) {
@ -3217,9 +3455,9 @@ public class StatisticsESService {
        if (saveModels.size() > 0) {
            for (SaveModel one : saveModels) {
                map = new HashMap<>();
                if (Integer.parseInt(lowlevel) >= level) {
                    lowlevel = String.valueOf(level + 1);
                }
//                if (Integer.parseInt(lowlevel) >= level) {
//                    lowlevel = String.valueOf(level + 1);
//                }
                if (SaveModel.townLevel.equals(lowlevel)) {
                    map.put("code", one.getTown());
                    map.put("name", one.getTownName());
@ -3231,12 +3469,11 @@ public class StatisticsESService {
                    map.put("name", one.getTeamName());
                }
                map.put("val", one.getResult2().longValue());
                rs.add(map);
            }
        } else {
            //统计数据为空时,自建结果集
//            List<Map<String, Object>> resultList = new ArrayList<>();
//            resultList = getLowLevelMapKey(level, lowlevel, area);
            List<Town> townList = null;
            List<Hospital> hospitalList = null;
            List<AdminTeam> adminTeams = null;
@ -3269,8 +3506,9 @@ public class StatisticsESService {
                    map.put("val", 0);
                }
            }
            rs.add(map);
        }
        rs.add(map);
        return rs;
    }
@ -3299,17 +3537,24 @@ public class StatisticsESService {
     * @return
     */
    public Map<String, Object> getPrescriptionAgeTotal(String level, String area, String disease) throws Exception {
        //统计长处方总数疾病和状态维度(去重相同患者)
        String index ="63";
        String index63 = "63";  //统计长处方总数疾病和状态维度(去重相同患者)
        String index68 = "68";  //统计长处方年龄人数(按照患者去重)
        Map<String, Object> map = new HashMap<>();
        String quotaDate = elasticsearchUtil.getQuotaTime();
        //统计年龄分布
        List<SaveModel> list = elasticsearchUtil.findOneDateQuotaLevel2(quotaDate, area, Integer.parseInt(level), index, "2", disease);
        //总数量
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(quotaDate, area, Integer.parseInt(level), index, "2");
        List<SaveModel> list = null;
        SaveModel saveModel = null;
        if (org.springframework.util.StringUtils.isEmpty(disease)) {
            list = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, Integer.parseInt(level), index68, SaveModel.timeLevel_DDL, null, null);
            //总数量
            saveModel = elasticsearchUtil.findOneDateQuotaLevel1NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index68, SaveModel.timeLevel_DDL);
        } else {
            list = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, Integer.parseInt(level), index63, SaveModel.timeLevel_DDL, null, null, disease);
            //总数量
            saveModel = elasticsearchUtil.findOneDateQuotaLevel2NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index63, SaveModel.timeLevel_DDL, disease);
        }
        Double num = saveModel.getResult2();
        Map<String, Object> map = new HashMap<>();
        DecimalFormat decimalFormat = new DecimalFormat("0.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
        Double ageRate = list.get(0).getResult2() / num;
        map.put("0ageRate", decimalFormat.format(ageRate));
@ -3336,7 +3581,9 @@ public class StatisticsESService {
    }
    public Map<String, Object> getPrescriptionDispatchingTotal(int level, String area, String disease) throws Exception {
        String index = "62";
        String index62 = "62";//统计长处方配送方式和疾病维度
        String index67 = "67";//统计长处方配送方式维度
        SaveModel selt = null;//自取集合
        SaveModel delivery = null;//物流配送集合
        SaveModel healthDoctor = null;//健管师配送集合
@ -3344,18 +3591,19 @@ public class StatisticsESService {
        //type二级指标,disease一级指标
        if (StringUtils.isNotBlank(disease)) {
            //自取
            selt = elasticsearchUtil.findOneDateQuotaLevel2(quotaTime,area, level, index, "2", disease, "1");
            selt = elasticsearchUtil.findOneDateQuotaLevel2(quotaTime, area, level, index62, SaveModel.timeLevel_DDL, disease, "1");
            //物流配送
            delivery = elasticsearchUtil.findOneDateQuotaLevel2(quotaTime,area, level, index, "2", disease, "2");
            delivery = elasticsearchUtil.findOneDateQuotaLevel2(quotaTime, area, level, index62, SaveModel.timeLevel_DDL, disease, "2");
            //健管师配送
            healthDoctor = elasticsearchUtil.findOneDateQuotaLevel2(quotaTime,area, level, index, "2", disease, "3");
            healthDoctor = elasticsearchUtil.findOneDateQuotaLevel2(quotaTime, area, level, index62, SaveModel.timeLevel_DDL, disease, "3");
        } else {
            //自取
            selt = elasticsearchUtil.findOneDateQuotaLevel1Key2(quotaTime, area, level, index, "2", "1");
            selt = elasticsearchUtil.findOneDateQuotaLevel1(quotaTime, area, level, index67, SaveModel.timeLevel_DDL, "1");
            //物流配送
            delivery = elasticsearchUtil.findOneDateQuotaLevel1Key2(quotaTime, area, level, index, "2", "2");
            delivery = elasticsearchUtil.findOneDateQuotaLevel1(quotaTime, area, level, index67, SaveModel.timeLevel_DDL, "2");
            //健管师配送
            healthDoctor = elasticsearchUtil.findOneDateQuotaLevel1Key2(quotaTime, area, level, index, "2", "3");
            healthDoctor = elasticsearchUtil.findOneDateQuotaLevel1(quotaTime, area, level, index67, SaveModel.timeLevel_DDL, "3");
        }
        Map<String, Object> rs = new HashedMap();
@ -3390,6 +3638,8 @@ public class StatisticsESService {
     * @return
     */
    public List<Map<String, Object>> getPrescriptionDispatchingHistogram(int level, String area, String disease, String type) throws Exception {
        String index62 = "62";//统计长处方配送方式和疾病维度
        String index67 = "67";//统计长处方配送方式维度
        List<Map<String, Object>> rs = new ArrayList<>();
        Calendar dd = Calendar.getInstance();//定义日期实例
@ -3411,9 +3661,9 @@ public class StatisticsESService {
        List<SaveModel> resultList = new ArrayList<>();
        if (StringUtils.isNotBlank(disease)) {
            resultList = elasticsearchUtil.findLineChartDateQuotaLevel2(startTime, endTime, area, level, "62", "2", "3",disease , type);
            resultList = elasticsearchUtil.findLineChartDateQuotaLevel2(startTime, endTime, area, level, index62, SaveModel.timeLevel_DDL, SaveModel.interval_month, disease, type);
        } else {
            resultList = elasticsearchUtil.findLineChartDateQuotaLevel1Key2(startTime, endTime, area, level, "62", "2", "3", type);
            resultList = elasticsearchUtil.findLineChartDateQuotaLevel1(startTime, endTime, area, level, index67, SaveModel.timeLevel_DDL, SaveModel.interval_month, type);
        }
        for (Map<String, Object> m : rs) {
@ -3442,17 +3692,19 @@ public class StatisticsESService {
     */
    public List<Map<String, Object>> getPrescriptionDispatchingLowLevel(int level, String lowlevel, String area, String disease, String type) throws Exception {
        String index = "62";
        String index62 = "62";//统计长处方配送方式和疾病维度
        String index67 = "67";//统计长处方配送方式维度
        String quotaDate = elasticsearchUtil.getQuotaTime();
        List<SaveModel> saveModels = new ArrayList<>();
        List<Map<String, Object>> rs = new ArrayList<>();
        if (StringUtils.isNotBlank(disease)) {
            //类型 1.自取,2.快递配送,3.健管师配送
            saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index, "2", lowlevel, disease, type);
            saveModels = elasticsearchUtil.findListDateQuotaLevel2(quotaDate, area, level, index62, SaveModel.timeLevel_DDL, lowlevel, disease, type);
        } else {
            saveModels = elasticsearchUtil.findListDateQuotaLevel1Key2(quotaDate, area, level, index, "2", lowlevel, type);
            saveModels = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, level, index67, SaveModel.timeLevel_DDL, lowlevel, type);
        }
        if ("5".equals(lowlevel)) {
        if (SaveModel.teamLevel.equals(lowlevel)) {
            translateTeamLeaderName2(saveModels);
        }
        Map<String, Object> map = null;
@ -3473,12 +3725,10 @@ public class StatisticsESService {
                    map.put("name", one.getTeamName());
                }
                map.put("val", one.getResult2().longValue());
                rs.add(map);
            }
        } else {
            //统计数据为空时,自建结果集
//            List<Map<String, Object>> resultList = new ArrayList<>();
//            resultList = getLowLevelMapKey(level, lowlevel, area);
            List<Town> townList = null;
            List<Hospital> hospitalList = null;
            List<AdminTeam> adminTeams = null;
@ -3494,25 +3744,30 @@ public class StatisticsESService {
            }
            if (SaveModel.townLevel.equals(lowlevel)) {
                for (Town one : townList) {
                    map = new HashMap<>();
                    map.put("code", one.getCode());
                    map.put("name", one.getName());
                    map.put("val", 0);
                    rs.add(map);
                }
            } else if (SaveModel.OrgLevel.equals(lowlevel)) {
                for (Hospital one : hospitalList) {
                    map = new HashMap<>();
                    map.put("code", one.getCode());
                    map.put("name", one.getName());
                    map.put("val", 0);
                    rs.add(map);
                }
            } else if (SaveModel.teamLevel.equals(lowlevel)) {
                for (AdminTeam one : adminTeams) {
                    map = new HashMap<>();
                    map.put("code", one.getLeaderCode());
                    map.put("name", one.getName());
                    map.put("val", 0);
                    rs.add(map);
                }
            }
        }
        rs.add(map);
        return rs;
    }
@ -3528,14 +3783,24 @@ public class StatisticsESService {
     * @return
     */
    public List<Map<String, Object>> getPrescriptionCostLowLevel(String level, String lowlevel, String area, String disease, String type) throws Exception {
        String index61 = "61";//统计长处方费用总数疾病维度
        String index66 = "66";//费用的指标code
        String index63 = "63";//统计长处方年龄疾病人数(按照患者去重)
        String index68 = "68";//统计长处方年龄人数(按照患者去重)
        String quotaDate = elasticsearchUtil.getQuotaTime();
        //1.总量
        List<SaveModel> list = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, Integer.parseInt(level), "61", "2", lowlevel, disease);
        List<SaveModel> costList = null;
        Map<String, SaveModel> costMap = new HashedMap();
        List<SaveModel> numList = null;
        //获取费用
        if (org.springframework.util.StringUtils.isEmpty(disease)) {
            costList = elasticsearchUtil.findListDateQuotaLevel0(quotaDate, area, Integer.parseInt(level), index66, SaveModel.timeLevel_DDL, lowlevel);
        } else {
            costList = elasticsearchUtil.findListDateQuotaLevel1(quotaDate, area, Integer.parseInt(level), index61, SaveModel.timeLevel_DDL, lowlevel, disease);
        }
        Map<String, Object> map = null;
        List<Map<String, Object>> countList = new ArrayList<>();
        if ("1".equals(type)) {
            for (SaveModel one : list) {
            for (SaveModel one : costList) {
                map = new HashMap<>();
                if (SaveModel.townLevel.equals(lowlevel)) {
                    map.put("code", one.getTown());
@ -3552,30 +3817,50 @@ public class StatisticsESService {
            }
        } else {
            //2.平均值
            //去重获取总人数,计算人均费用
            String sql = "";
            for (SaveModel one : list) {
                sql = "  select count(DISTINCT(s.patient)) as num from wlyy_prescription_pay p left join wlyy_prescription s on p.prescription_code = s. CODE  ";
                sql += " and  p.trace_time <= " + one.getQuotaDate();
                Map<String, Object> count = jdbcTemplate.queryForMap(sql);
            //费用list转map
            for (SaveModel one : costList) {
                if (SaveModel.townLevel.equals(lowlevel)) {
                    costMap.put(one.getTown(), one);
                } else if (SaveModel.OrgLevel.equals(lowlevel)) {
                    costMap.put(one.getHospital(), one);
                } else if (SaveModel.teamLevel.equals(lowlevel)) {
                    costMap.put(one.getTeam(), one);
                }
            }
            //获取人数
            if (org.springframework.util.StringUtils.isEmpty(disease)) {
                numList = elasticsearchUtil.findListDateQuotaLevel1NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index68, SaveModel.timeLevel_DDL, lowlevel);
            } else {
                numList = elasticsearchUtil.findListDateQuotaLevel2NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index63, SaveModel.timeLevel_DDL, lowlevel, disease);
            }
            for (SaveModel one : numList) {
                String avg = "0.0";
                map = new HashMap<>();
                if (SaveModel.townLevel.equals(lowlevel)) {
                    map.put("code", one.getTown());
                    map.put("name", one.getTownName());
                    SaveModel costOne = costMap.get(one.getTown());
                    if (costOne != null) {
                        avg = decimalFormat.format(costOne.getResult1() / one.getResult1());
                    }
                    map.put("val", avg);
                } else if (SaveModel.OrgLevel.equals(lowlevel)) {
                    map.put("code", one.getHospital());
                    map.put("name", one.getHospitalName());
                    SaveModel costOne = costMap.get(one.getHospital());
                    if (costOne != null) {
                        avg = decimalFormat.format(costOne.getResult1() / one.getResult1());
                    }
                    map.put("val", avg);
                } else if (SaveModel.teamLevel.equals(lowlevel)) {
                    map.put("code", one.getTeam());
                    map.put("name", one.getTeamName());
                    SaveModel costOne = costMap.get(one.getTeam());
                    if (costOne != null) {
                        avg = decimalFormat.format(costOne.getResult1() / one.getResult1());
                    }
                    map.put("val", avg);
                }
                Long num = (Long) count.get("num");
                String avg = "0.0";
                if(num!=0){
                    avg = decimalFormat.format(one.getResult1() / num);
                }
                map.put("val", avg);
                countList.add(map);
            }
        }
@ -3593,75 +3878,100 @@ public class StatisticsESService {
     * @param type      1.按日,2.按周,3.按月
     */
    public List<Map<String, Object>> getPrescriptionCostAvgLine(String level, String area, String disease, String startDate, String endDate, String type) throws Exception {
        String index61 = "61";//统计长处方费用总数疾病维度
        String index66 = "66";//费用的指标code
        String index63 = "63";//统计长处方年龄疾病人数(按照患者去重)
        String index68 = "68";//统计长处方年龄人数(按照患者去重)
        List<SaveModel> costList = null;
        Map<String, SaveModel> costMap = new HashedMap();
        List<SaveModel> numList = null;
        startDate = elasticsearchUtil.changeTime(startDate += " 00:00:00");
        endDate = elasticsearchUtil.changeTime(endDate += " 23:59:59");
        List<SaveModel> list = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, Integer.parseInt(level), "61", "2", type, disease);
        String sql = "";
        Map<String, Object> map = null;
        List<Map<String, Object>> countList = new ArrayList<>();
        for (SaveModel one : list) {
            sql = "  select count(DISTINCT(s.patient)) as num from wlyy_prescription_pay p left join wlyy_prescription s on p.prescription_code = s. CODE  ";
            sql += " and  p.trace_time <= " + dateFormat3.format(one.getQuotaDate());
            if (SaveModel.townLevel.equals(level) || SaveModel.cityLevel.equals(level)) {
                sql += " and LEFT(s.hospital,6) ='" + area + "' ";
            } else if (SaveModel.OrgLevel.equals(level)) {
                sql += " and s.hospital ='" + area + "' ";
            } else if (SaveModel.teamLevel.equals(level)) {
                sql += " and s.admin_team_id ='" + area + "' ";
        //获取费用
        if (org.springframework.util.StringUtils.isEmpty(disease)) {
            costList = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, Integer.parseInt(level), index66, SaveModel.timeLevel_ZL, type);
        } else {
            costList = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, Integer.parseInt(level), index61, SaveModel.timeLevel_ZL, type, disease);
        }
        //获取人数
        if (org.springframework.util.StringUtils.isEmpty(disease)) {
            numList = elasticsearchUtil.findLineChartDateQuotaLevel1NoSlaveKey1(startDate, endDate, area, Integer.parseInt(level), index68, SaveModel.timeLevel_ZL, type);
        } else {
            numList = elasticsearchUtil.findLineChartDateQuotaLevel2NoSlaveKey1(startDate, endDate, area, Integer.parseInt(level), index63, SaveModel.timeLevel_ZL, type, disease);
        }
        //费用list转map
        for (SaveModel one : costList) {
            String key = null;
            if (SaveModel.interval_day.equals(type)) {
                key = dateFormat.format(one.getQuotaDate());
            } else if (SaveModel.interval_week.equals(type)) {
                key = dateFormat.format(one.getQuotaDate());
            } else {
                key = DateUtil.getMonth(dateFormat.format(one.getQuotaDate()));
            }
            Map<String, Object> count = jdbcTemplate.queryForMap(sql);
            Long num = (Long) count.get("num");
            costMap.put(key, one);
        }
        List<Map<String, Object>> countList = new ArrayList<>(); //map date avg
        for (SaveModel one : numList) {
            Map<String, Object> map = new HashMap<>();
            //获取key
            String key = null;
            if (SaveModel.interval_day.equals(type)) {
                key = dateFormat.format(one.getQuotaDate());
            } else if (SaveModel.interval_week.equals(type)) {
                key = dateFormat.format(one.getQuotaDate());
            } else {
                key = DateUtil.getMonth(dateFormat.format(one.getQuotaDate()));
            }
            SaveModel costOne = costMap.get(key);
            String avg = "0.0";
            if(num!=0){
                avg = decimalFormat.format(one.getResult1() / num);
            if (costOne != null) {
                avg = decimalFormat.format(one.getResult1() / costOne.getResult1());
            }
            map = new HashMap<>();
            map.put("avg", avg);
            if("1".equals(type)){
                map.put("date", dateFormat.format(one.getQuotaDate()));
            map.put("val", avg);
            map.put("date", key);
            }else if("2".equals(type)){
                map.put("date", DateUtil.getWeekOfMonth(dateFormat.format(one.getQuotaDate())));
            }else{
                map.put("date", DateUtil.getMonth(dateFormat.format(one.getQuotaDate())));
            }
            countList.add(map);
        }
        return countList;
    }
    public Map<String, Object> getPrescriptionCost(String level, String area, String disease) throws Exception {
        SaveModel saveModel = null;
        String index = "61";
        SaveModel costSaveModel = null;
        SaveModel numSaveModel = null;
        String index61 = "61";//统计长处方费用总数疾病维度
        String index66 = "66";//费用的指标code
        String index63 = "63";//统计长处方年龄疾病人数(按照患者去重)
        String index68 = "68";//统计长处方年龄人数(按照患者去重)
        String quotaDate = elasticsearchUtil.getQuotaTime();
        if (StringUtils.isNotEmpty(disease)) {
            saveModel = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, Integer.parseInt(level), index, "2", disease);
            costSaveModel = elasticsearchUtil.findOneDateQuotaLevel1(quotaDate, area, Integer.parseInt(level), index61, "2", disease);
        } else {
            saveModel = elasticsearchUtil.findOneDateQuotaLevel0(quotaDate, area, Integer.parseInt(level), index, "2");
            costSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(quotaDate, area, Integer.parseInt(level), index66, "2");
        }
        String sql = "  select count(DISTINCT(s.patient)) as num from wlyy_prescription_pay p left join wlyy_prescription s on p.prescription_code = s. CODE  ";
        sql += " and  p.create_time <= " + quotaDate;
        if (SaveModel.townLevel.equals(level) || SaveModel.cityLevel.equals(level)) {
            sql += " and LEFT(s.hospital,6) ='" + area + "' ";
        } else if (SaveModel.OrgLevel.equals(level)) {
            sql += " and s.hospital ='" + area + "' ";
        } else if (SaveModel.teamLevel.equals(level)) {
            sql += " and s.admin_team_id ='" + area + "' ";
        //获取人数
        if (StringUtils.isNotEmpty(disease)) {
            numSaveModel = elasticsearchUtil.findOneDateQuotaLevel2NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index63, "2", disease);
        } else {
            numSaveModel = elasticsearchUtil.findOneDateQuotaLevel1NoSlaveKey1(quotaDate, area, Integer.parseInt(level), index68, "2");
        }
        Map<String, Object> count = jdbcTemplate.queryForMap(sql);
        Long num = (Long) count.get("num");
        Long num = numSaveModel.getResult1().longValue();
        Map<String, Object> rs = new HashedMap();
        BigDecimal s = BigDecimal.valueOf(num);
        BigDecimal s = BigDecimal.valueOf(costSaveModel.getResult1());
        BigDecimal a = null;
        if(num==0){
            a = BigDecimal.valueOf(0.0);
        }else{
            a = BigDecimal.valueOf(saveModel.getResult2().longValue() / num);
        if (num == 0) {
            a = BigDecimal.valueOf(0.0);
        } else {
            a = BigDecimal.valueOf(costSaveModel.getResult1().longValue() / num);
        }
        rs.put("sum", s.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP));
        rs.put("avg", a.divide((new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP));
        rs.put("sum", s.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP));//费用总计  单位是分 所以除以100四舍五入
        rs.put("avg", a.divide((new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP));//人均费用  单位是分 所以除以100四舍五入
        return rs;
    }
@ -3674,7 +3984,7 @@ public class StatisticsESService {
        json.put("avgCount", getRangeDouuble(saveModel.getResult1(), saveModel.getResult2().intValue(), 2));
        resultJSON.put("rs",json);
        resultJSON.put("rs", json);
        return resultJSON;
    }
}

+ 48 - 18
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/call/CustomerService.java

@ -2,44 +2,29 @@ package com.yihu.wlyy.service.call;
import com.yihu.wlyy.entity.call.CallRecord;
import com.yihu.wlyy.entity.call.CallService;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.service.SignFamilyService;
import com.yihu.wlyy.repository.call.CallRecordDao;
import com.yihu.wlyy.repository.call.CallServiceDao;
import com.yihu.wlyy.repository.message.MessageDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.HttpClientUtil;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
public class CustomerService extends BaseService{
	@Autowired
	private CallRecordDao callRecordDao;
	@Autowired
	private CallServiceDao callServiceDao;
	@Autowired
	private PatientDao patientDao;
	@Autowired
	private SignFamilyService familyService;
	@Autowired
	private JdbcTemplate jdbcTemplate;
	@Autowired
@ -107,4 +92,49 @@ public class CustomerService extends BaseService{
		return mes;
	}
	public Map<String,Object> getCallServiceInfo(String code){
		CallService callService = callServiceDao.findByCode(code);
		CallRecord callRecord = callRecordDao.findByCode(callService.getCallCode());
		Map<String,Object> rs = new HashedMap();
		rs.put("callService",callService);
		rs.put("callRecord",callRecord);
		return rs;
	}
	public String dealConsultCallService(String code, Integer dealType, Integer dealState,String dealContent){
		 CallService callService =  callServiceDao.findByCode(code);
		 callService.setDealType(dealType);
		 callService.setDealState(dealState);
		 callService.setDealContent(dealContent);
		 callService.setDealTime(new Date());
		 callService.setState(2);
		 callServiceDao.save(callService);
		return "1";
	}
	/**
	 *     private Integer dealReason; // 处理取消原因:0.没有号源、1.病人取消
	 private String orderHospital; //预约医院code
	 private String orderHospitalName; //预约医院
	 private String orderDept; //预约科室code
	 private String orderDeptName; //预约科室名称
	 private String orderDoctor; //预约医生code
	 private String orderDoctorName; //预约医生名称
	 private String orderTime; //预约时间段
	 * @param type
	 * @param orderHospital
     * @return
     */
	public String dealAppointCallService(String type ,String code,String dealReason, String orderHospital,String orderHospitalName,String orderDept,String orderDeptName,String orderDoctor,String orderDoctorName,String orderTime){
		CallService callService = callServiceDao.findByCode(code);
		//预约成功
		if("1".equals(type)){
		//预约失败
		}else{
		}
		return null;
	}
}

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

@ -39,6 +39,8 @@ public class ElasticsearchUtil {
    private Logger logger = LoggerFactory.getLogger(ElasticsearchUtil.class);
    private final String commonParams="xmijk_quota";
    @Autowired
    private ElasticFactory elasticFactory;
    @Autowired
@ -53,8 +55,8 @@ public class ElasticsearchUtil {
        try {
            //解决 group by之后默认是200的问题
            if(sql.toLowerCase().contains("group by")){
                sql=sql+" limit 0,2000";
            if (sql.toLowerCase().contains("group by")) {
                sql = sql + " limit 0,2000";
            }
            SQLExprParser parser = new ElasticSqlExprParser(sql);
@ -249,16 +251,16 @@ public class ElasticsearchUtil {
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if(startDate.length()>10){
            if (startDate.length() > 10) {
                startDate = changeTime(startDate);
            }else{
            } else {
                startDate = changeDate(startDate);
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if(endDate.length()>10){
            if (endDate.length() > 10) {
                endDate = changeTime(endDate);
            }else{
            } else {
                endDate = changeDate(endDate);
            }
        }
@ -270,20 +272,20 @@ public class ElasticsearchUtil {
        }
        if (SaveModel.teamLevel.equals(low_level)) {
            sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from "+esIndex+" where ");
            sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by team,teamName");
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by hospital,hospitalName");
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by town,townName");
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by city,cityName");
        }
        if(StringUtils.isNotEmpty(area)){
        if (StringUtils.isNotEmpty(area)) {
            if (SaveModel.teamLevel.equals(level + "")) {
                sql.append(" team='" + area + "'");
@ -328,41 +330,32 @@ public class ElasticsearchUtil {
     * 获取一级指标的增量、到达量
     * 备注:原接口的二级指标对应现在的一级指标
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param area      区域code
     * @param level     等级
     * @param index     指标
     * @param timeLevel 1增量 2到达量
     * @param slaveKeyValue 一级维度
     * @param interval  1日 2周 3月
     * @param lowLevel  下个等级
     * @param startDate     开始时间
     * @param endDate       结束时间
     * @param area          区域code
     * @param level         等级
     * @param index         指标
     * @param timeLevel     1增量 2到达量
     * @param slaveKey1 一级维度
     * @param interval      1日 2周 3月
     * @param lowLevel      下个等级
     * @return
     * @throws Exception
     */
    public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel,int keyNum, String slaveKeyValue, String interval, String lowLevel) throws Exception {
    public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel,  String slaveKey1, String interval, String lowLevel) throws Exception {
        String slaveKey = "";
        String slaveKeyName = "";
        if(keyNum==1){
            slaveKey = "slaveKey1";
            slaveKeyName = "slaveKey1Name";
        }else if(keyNum==2){
            slaveKey = "slaveKey2";
            slaveKeyName = "slaveKey2Name";
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if(startDate.length()>10){
            if (startDate.length() > 10) {
                startDate = changeTime(startDate);
            }else{
            } else {
                startDate = changeDate(startDate);
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if(endDate.length()>10){
            if (endDate.length() > 10) {
                endDate = changeTime(endDate);
            }else{
            } else {
                endDate = changeDate(endDate);
            }
        }
@ -373,20 +366,32 @@ public class ElasticsearchUtil {
            low_level = lowLevel;
        }
        if (SaveModel.teamLevel.equals(low_level)) {
            sql.append("select team,teamName,"+slaveKey+","+slaveKeyName+",sum(result1) result1, sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by team,teamName,"+slaveKey+","+slaveKeyName);
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by team,teamName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,"+slaveKey+","+slaveKeyName+",sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by hospital,hospitalName,"+slaveKey+","+slaveKeyName);
            sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by hospital,hospitalName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,"+slaveKey+",slaveKey1Name,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by town,townName,"+slaveKey+","+slaveKeyName);
            sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by town,townName" );
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,"+slaveKey+","+slaveKeyName+",sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by city,cityName,"+slaveKey+","+slaveKeyName);
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by city,cityName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
        }
        if(StringUtils.isNotEmpty(area)){
        if (StringUtils.isNotEmpty(area)) {
            if (SaveModel.teamLevel.equals(level + "")) {
                sql.append(" team='" + area + "'");
@ -408,8 +413,8 @@ public class ElasticsearchUtil {
        if (StringUtils.isNotEmpty(endDate)) {
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        if (StringUtils.isNotEmpty(slaveKeyValue)) {
            sql.append(" and "+slaveKey+"='" + slaveKeyValue + "'  ");
        if (StringUtils.isNotEmpty(slaveKey1)&&!commonParams.equals(slaveKey1)) {
            sql.append(" and slaveKey1='" + slaveKey1 + "'  ");
        }
        //根据时间维度分组
@ -448,16 +453,16 @@ public class ElasticsearchUtil {
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if(startDate.length()>10){
            if (startDate.length() > 10) {
                startDate = changeTime(startDate);
            }else{
            } else {
                startDate = changeDate(startDate);
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if(endDate.length()>10){
            if (endDate.length() > 10) {
                endDate = changeTime(endDate);
            }else{
            } else {
                endDate = changeDate(endDate);
            }
        }
@ -468,19 +473,43 @@ public class ElasticsearchUtil {
            low_level = lowLevel;
        }
        if (SaveModel.teamLevel.equals(low_level)) {
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from "+esIndex+" where ");
            groupBy.append("  group by team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from " + esIndex + " where ");
            groupBy.append("  group by team,teamName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)||commonParams.equals(slaveKey2)) {
                groupBy.append(",slaveKey2,slaveKey2Name");
            }
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by hospital,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,hospitalName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by hospital,hospitalName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)||commonParams.equals(slaveKey2)) {
                groupBy.append(",slaveKey2,slaveKey2Name");
            }
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
            sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by town,townName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)||commonParams.equals(slaveKey2)) {
                groupBy.append(",slaveKey2,slaveKey2Name");
            }
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esIndex+" where ");
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
            groupBy.append("  group by city,cityName");
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)||commonParams.equals(slaveKey1)) {
                groupBy.append(",slaveKey1,slaveKey1Name");
            }
            if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)||commonParams.equals(slaveKey2)) {
                groupBy.append(",slaveKey2,slaveKey2Name");
            }
        }
        if(StringUtils.isNotEmpty(area)){
        if (StringUtils.isNotEmpty(area)) {
            if (SaveModel.teamLevel.equals(level + "")) {
                sql.append(" team='" + area + "'");
@ -502,10 +531,10 @@ public class ElasticsearchUtil {
        if (StringUtils.isNotEmpty(endDate)) {
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        if (StringUtils.isNotBlank(slaveKey1)) {
        if (StringUtils.isNotBlank(slaveKey1)&&(!commonParams.equals(slaveKey1))) {
            sql.append(" and slaveKey1='" + slaveKey1 + "'");
        }
        if (StringUtils.isNotBlank(slaveKey2)) {
        if (StringUtils.isNotBlank(slaveKey2)&&(!commonParams.equals(slaveKey2))) {
            sql.append(" and slaveKey2='" + slaveKey2 + "'");
        }
@ -520,7 +549,8 @@ public class ElasticsearchUtil {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
            }
        }
        sql.append(groupBy);
        String orderBy=" order by result1 desc " ;
        sql.append(groupBy).append(orderBy);
        return excute(sql.toString(), SaveModel.class, "", "");
    }
@ -529,7 +559,7 @@ public class ElasticsearchUtil {
     *
     * @param quotaDate
     */
    private String changeDate(String quotaDate){
    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) {
@ -538,11 +568,11 @@ public class ElasticsearchUtil {
        return quotaDate;
    }
    public String changeTime(String time){
    public String changeTime(String time) {
        try {
            if(time.length()==10){
            if (time.length() == 10) {
                time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(time));
            }else if(time.length()==19){
            } else if (time.length() == 19) {
                time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time));
            }
        } catch (ParseException e) {
@ -557,7 +587,7 @@ public class ElasticsearchUtil {
//        date = date.replace(" ","T")+"+0800";
        try {
            date = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date));
        }catch (ParseException e) {
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
@ -578,6 +608,7 @@ public class ElasticsearchUtil {
        List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 0级维度
     * 查询某个时间区间某一个0级维度的指标
@ -594,6 +625,7 @@ public class ElasticsearchUtil {
        List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 1级维度
     * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
@ -603,17 +635,32 @@ public class ElasticsearchUtil {
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key 不传返回全部
     * @param slaveKey1 一级维度的key 不传返回全部
     * @return
     */
    public SaveModel findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,1,slaveKey1, null, null);
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,  slaveKey1, null, null);
        return (SaveModel) list.get(0);
    }
    public SaveModel findOneDateQuotaLevel1Key2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,2,slaveKey1, null, null);
    /**
     * 1级维度
     * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
     *
     * @param quotaDate 时间 yyyy-mm-dd
     * @param area      code  厦门市 350200
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @return
     */
    public SaveModel findOneDateQuotaLevel1NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,  null, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 1级维度
     * 查询某个时间区间某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
@ -624,15 +671,14 @@ public class ElasticsearchUtil {
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key 不传返回全部
     * @param slaveKey1 一级维度的key 不传返回全部
     * @return
     */
    public SaveModel findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,slaveKey1, null, null);
        return (SaveModel) list.get(0);
    }
    public SaveModel findOneDateQuotaLevel1Key2(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,slaveKey1, null, null);
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,  slaveKey1, null, null);
        return (SaveModel) list.get(0);
    }
@ -648,13 +694,10 @@ public class ElasticsearchUtil {
     * @return
     */
    public List<SaveModel> findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,1,null, null, null);
        return list;
    }
    public List<SaveModel> findOneDateQuotaLevel1key2(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,2,null, null, null);
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, commonParams, null, null);
        return list;
    }
    /**
     * 1级维度
     * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表
@ -665,14 +708,11 @@ public class ElasticsearchUtil {
     * @param timelevel // 1日 2年
     * @return
     */
    public List<SaveModel> findOneDateQuotaLevel1(String startDate,String endDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,null, null, null);
        return list;
    }
    public List<SaveModel> findOneDateQuotaLevel1Key2(String startDate,String endDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,null, null, null);
    public List<SaveModel> findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,  commonParams, null, null);
        return list;
    }
    /**
     * 2级维度
     * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标  例如查询65岁以上的高血压患者
@ -682,14 +722,55 @@ public class ElasticsearchUtil {
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @param slaveKey1 一级维度的key
     * @param slaveKey2 二级维度的key
     * @return
     */
    public SaveModel findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, null);
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        if(org.springframework.util.StringUtils.isEmpty(slaveKey2)){
            slaveKey2=commonParams;
        }
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 根据2级维度的2级指标去聚合 没有一级维度
     * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标  例如查询65岁以上的高血压患者
     *
     * @param quotaDate 时间 yyyy-mm-dd
     * @param area      code  厦门市 350200
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey2 二级维度的key
     * @return
     */
    public SaveModel findOneDateQuotaLevel2NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, slaveKey2, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 根据2级维度的1级指标去聚合 没有2级维度
     * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标  例如查询65岁以上的高血压患者
     *
     * @param quotaDate 时间 yyyy-mm-dd
     * @param area      code  厦门市 350200
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1 二级维度的key
     * @return
     */
    public SaveModel findOneDateQuotaLevel2NoSlaveKey2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 2级维度
     * 查询某个时间区间某一个2级维度的某个1级维度和2级维度下的指标  例如查询65岁以上的高血压患者
@ -700,12 +781,18 @@ public class ElasticsearchUtil {
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @param slaveKey1 一级维度的key
     * @param slaveKey2 二级维度的key
     * @return
     */
    public SaveModel findOneDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, null);
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        if(org.springframework.util.StringUtils.isEmpty(slaveKey2)){
            slaveKey2=commonParams;
        }
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
        return (SaveModel) list.get(0);
    }
@ -718,53 +805,75 @@ public class ElasticsearchUtil {
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key
     * @param slaveKey1 一级维度的key
     * @return
     */
    public List<SaveModel> findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,null, null, null);
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, commonParams, null, null);
        return list;
    }
    /**
     * 折线图
     * 0级维度
     * 查询某个0级维度的指标折线图
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @return
     * @throws Exception
     */
    public List<SaveModel> findLineChartDateQuotaLevel0(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval) throws Exception {
        List list =  findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, interval, null);
    public List<SaveModel> findLineChartDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
        List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, interval, null);
        return list;
    }
    /**
     * 折线图
     * 1级维度
     * 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey1  一级维度的key
     * @param slaveKey1 一级维度的key
     * @return
     */
    public  List<SaveModel>  findLineChartDateQuotaLevel1(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,slaveKey1, interval, null);
    public List<SaveModel> findLineChartDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1) throws Exception {
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,  slaveKey1, interval, null);
        return list;
    }
    public  List<SaveModel>  findLineChartDateQuotaLevel1Key2(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,slaveKey2, interval, null);
    /**
     * 折线图
     * 1级维度
     * 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @return
     */
    public List<SaveModel> findLineChartDateQuotaLevel1NoSlaveKey1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,  null, interval, null);
        return list;
    }
    /**
@ -773,167 +882,282 @@ public class ElasticsearchUtil {
     * 查询某个2级维度的某个1级维度和2级维度下的折线图  例如查询65岁以上的高血压患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey1 一级维度的key
     * @param slaveKey2 二级维度的key
     * @return
     */
    public List<SaveModel> findLineChartDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1, String slaveKey2) throws Exception {
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        if(org.springframework.util.StringUtils.isEmpty(slaveKey2)){
            slaveKey2=commonParams;
        }
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, interval, null);
        return list;
    }
    /**
     * 折线图
     * 2级维度只根绝第二个指标聚合
     * 查询某个2级维度的某个1级维度和2级维度下的折线图  例如查询65岁以上的高血压患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey2 二级维度的key
     * @return
     */
    public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey2) throws Exception {
        List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, null, slaveKey2);
        return list;
    }
    /**
     * 折线图
     * 2级维度只根绝第一个指标聚合
     * 查询某个2级维度的某个1级维度和2级维度下的折线图  例如查询65岁以上的高血压患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey1 一级维度的key
     * @return
     */
    public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1) throws Exception {
        List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, slaveKey1, null);
        return list;
    }
    /**
     * 折线图
     * 2级维度只根绝第一个指标聚合
     * 查询某个2级维度的某个1级维度和2级维度下的折线图  例如查询65岁以上的高血压患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @return
     */
    public  List<SaveModel>  findLineChartDateQuotaLevel2(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, interval, null);
    public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey1NoSlaveKey2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
        List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, null, null);
        return list;
    }
    /**
     *  列表
     * 列表
     * 0级维度
     * 查询某一天某个0级维度的指标列表
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @return
     * @throws Exception
     */
    public  List<SaveModel>  findListDateQuotaLevel0(String quotaDate,  String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, lowLevel); return list;
    public List<SaveModel> findListDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, lowLevel);
        return list;
    }
    /**
     *  列表
     * 列表
     * 0级维度
     * 查询某个区间某个0级维度的指标列表
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队.
     * @return
     * @throws Exception
     */
    public  List<SaveModel>  findListDateQuotaLevel0(String startDate,String endDate,  String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, lowLevel); return list;
    public List<SaveModel> findListDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, lowLevel);
        return list;
    }
    /**
     * 列表
     * 1级维度
     * 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @param slaveKey1  一级维度的key
     * @param slaveKey1 一级维度的key
     * @return
     */
    public  List<SaveModel>  findListDateQuotaLevel1(String quotaDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,1,slaveKey1, null, lowLevel);
    public List<SaveModel> findListDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, lowLevel);
        return list;
    }
    public  List<SaveModel>  findListDateQuotaLevel1Key2(String quotaDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,2,slaveKey2, null, lowLevel);
    /**
     * 列表
     * 1级维度
     * 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @return
     */
    public List<SaveModel> findListDateQuotaLevel1NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, null, null, lowLevel);
        return list;
    }
    /**
     * 列表
     * 1级维度
     * 查询某个区间某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @param slaveKey1  一级维度的key
     * @param slaveKey1 一级维度的key
     * @return
     */
    public  List<SaveModel>  findListDateQuotaLevel1(String startDate,String endDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,slaveKey1, null, lowLevel);
        return list;
    }
    public  List<SaveModel>  findListDateQuotaLevel1Key2(String startDate,String endDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,slaveKey2, null, lowLevel);
    public List<SaveModel> findListDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, slaveKey1, null, lowLevel);
        return list;
    }
    /**
     * 列表
     * 2级维度
     * 查询某个2级维度的某个1级维度和2级维度下的列表  例如查询65岁以上的高血压患者
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @param slaveKey1 一级维度的key
     * @param slaveKey2 二级维度的key
     * @return
     */
    public  List<SaveModel>  findListDateQuotaLevel2(String quotaDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, lowLevel);
    public List<SaveModel> findListDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        if(org.springframework.util.StringUtils.isEmpty(slaveKey2)){
            slaveKey2=commonParams;
        }
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, lowLevel);
        return list;
    }
    public List<SaveModel> findListDateQuotaLevel2NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, slaveKey2, commonParams, lowLevel);
        return list;
    }
    public List<SaveModel> findListDateQuotaLevel2NoSlaveKey2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, commonParams, null, lowLevel);
        return list;
    }
    public List<SaveModel> findListDateQuotaLevel2NoSlaveKey1NoSlaveKey2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, null, null, lowLevel);
        return list;
    }
    /**
     * 列表
     * 2级维度
     * 查询某个区间某个2级维度的某个1级维度和2级维度下的列表  例如查询65岁以上的高血压患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param endDate   结束时间 yyyy-mm-dd  包含头
     * @param area      code  厦门市 350200 code 和level是对应的
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel 1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @param slaveKey1 一级维度的key
     * @param slaveKey2 二级维度的key
     * @return
     */
    public  List<SaveModel>  findListDateQuotaLevel2(String startDate,String endDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, lowLevel);
    public List<SaveModel> findListDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
        if(org.springframework.util.StringUtils.isEmpty(slaveKey1)){
            slaveKey1=commonParams;
        }
        if(org.springframework.util.StringUtils.isEmpty(slaveKey2)){
            slaveKey2=commonParams;
        }
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, lowLevel);
        return list;
    }
    /**
     * 将参数转换成需要的SaveModel里的标识
     *
     * @param level 等级  4 市  3区  2社区 1团队
     *  转换后的level  等级  2 市  3区  4社区 5团队
     *              转换后的level  等级  2 市  3区  4社区 5团队
     * @return
     * @author zhangdan
     * @time 2017-10-18
     */
    public int changeLevel(int level){
        int resultLevel =0;
        if (level==1){
    public int changeLevel(int level) {
        int resultLevel = 0;
        if (level == 1) {
            //团队转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.teamLevel);
        }else if(level==2){
        } else if (level == 2) {
            //社区转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.OrgLevel);
        }else if (level ==3){
        } else if (level == 3) {
            //区转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.townLevel);
        }else if (level==4){
        } else if (level == 4) {
            //市转成SaveModel里的标识
            resultLevel = Integer.valueOf(SaveModel.cityLevel);
        }
        if(resultLevel==0){
        if (resultLevel == 0) {
            resultLevel = level;
        }
        return  resultLevel;
        return resultLevel;
    }
}

+ 25 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/call/CallRecordController.java

@ -56,4 +56,29 @@ public class CallRecordController extends BaseController {
            return error(-1,"保存失败");
        }
    }
    @RequestMapping(value = "/getCallServiceInfo", method = {RequestMethod.GET, RequestMethod.POST})
    @ApiOperation(value = "获取协同服务详情")
    public String getCallServiceInfo(@ApiParam(name="code",value="协同服务code(Mes中relationCode)")@RequestParam(required = false)String code){
        try {
            return write(200,"保存成功","data",customerService.getCallServiceInfo(code));
        }catch (Exception e){
            error(e);
            return error(-1,"保存失败");
        }
    }
    @RequestMapping(value = "/dealConsultCallService", method = {RequestMethod.GET, RequestMethod.POST})
    @ApiOperation(value = "处理咨询协同服务")
    public String dealConsultCallService(@ApiParam(name="code",value="协同服务code(Mes中relationCode)")@RequestParam(required = true)String code,
                                         @ApiParam(name="dealType",value="处理方式:1.电话回复,2.客服回复")@RequestParam(required = true)Integer dealType,
                                         @ApiParam(name="dealState",value="处理结果:1.完成,2.无法联系居民")@RequestParam(required = true)Integer dealState,
                                         @ApiParam(name="dealContent",value="处理内容")@RequestParam(required = false)String dealContent){
        try {
            return write(200,"保存成功","data",customerService.dealConsultCallService(code,dealType,dealState,dealContent));
        }catch (Exception e){
            error(e);
            return error(-1,"保存失败");
        }
    }
}

+ 41 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/consult/ConsultController.java

@ -29,9 +29,12 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
@ -40,6 +43,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -88,6 +92,12 @@ public class ConsultController extends WeixinBaseController {
    private PrescriptionDao prescriptionDao;
    @Autowired
    private ConsultDao consultDao;
    @Value("${doctorAssistant.api}")
    private String doctorAssistant;
    @Value("${doctorAssistant.target_url}")
    private String targetUrl;
    @Autowired
    private HttpClientUtil httpClientUtil;
    /**
@ -382,10 +392,40 @@ public class ConsultController extends WeixinBaseController {
            // 推送消息给医生
            if(dts==null||dts.length()==0){
                pushMsgTask.put(consult.getDoctor(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.D_CT_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.您有新的指定咨询.name(), consult.getConsult());
                Doctor doctor = doctorDao.findByCode(consult.getDoctor());
                if (doctor!=null && StringUtils.isNotEmpty(doctor.getOpenid())){
                    String url = doctorAssistant + "/wlyy/feldsher/sendDoctorTemplates";
                    List<NameValuePair> params = new ArrayList<>();
                    params.add(new BasicNameValuePair("type", "4"));
                    params.add(new BasicNameValuePair("openId", doctor.getOpenid()));
                    params.add(new BasicNameValuePair("url", targetUrl));
                    params.add(new BasicNameValuePair("first", doctor.getName() + "医生您好,有患者向您发起咨询"));
                    params.add(new BasicNameValuePair("remark", "请进入手机APP查看"));
                    String sex = consult.getSex()==1? "男" : "女";
                    String keywords = consult.getName() + "," + sex;
                    params.add(new BasicNameValuePair("keywords", keywords));
                    httpClientUtil.post(url, params, "UTF-8");
                }
            }else {
                for (int i=0;i<dts.length();i++){
                    String doctorCode = dts.getString(i);
                    pushMsgTask.put(doctorCode, MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.D_CT_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.您有新的指定咨询.name(), consult.getConsult());
                    Doctor doctor = doctorDao.findByCode(doctorCode);
                    if (doctor!=null && StringUtils.isNotEmpty(doctor.getOpenid())){
                        String url = doctorAssistant + "/wlyy/feldsher/sendDoctorTemplates";
                        List<NameValuePair> params = new ArrayList<>();
                        params.add(new BasicNameValuePair("type", "4"));
                        params.add(new BasicNameValuePair("openId", doctor.getOpenid()));
                        params.add(new BasicNameValuePair("url", targetUrl));
                        params.add(new BasicNameValuePair("first", doctor.getName() + "医生您好,有患者向您发起咨询"));
                        params.add(new BasicNameValuePair("remark", "请进入手机APP查看"));
                        String sex = consult.getSex()==1? "男" : "女";
                        String keywords = consult.getName() + "," + sex;
                        params.add(new BasicNameValuePair("keywords", keywords));
                        httpClientUtil.post(url, params, "UTF-8");
                    }
                }
            }
@ -756,6 +796,7 @@ public class ConsultController extends WeixinBaseController {
            for (ConsultTeamLog log : logs) {
//                String response = ImUtill.sendTopicIM(getUID(), patient.getName(), consult, String.valueOf(log.getType()), log.getContent());
                String response = ImUtill.sendTopicIM(getRepUID(), patient.getName(), consult, String.valueOf(log.getType()), log.getContent(),agent);
                if (StringUtils.isNotEmpty(response)) {
                    JSONObject resObj = new JSONObject(response);
                    if (resObj.getInt("status") == -1) {

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/ehc/PatientEHCController.java

@ -36,7 +36,7 @@ public class PatientEHCController extends WeixinBaseController {
        try {
            String msg = null;
            int code = 0;
            String patient = getUID();
            String patient = getRepUID();
            String result = ehcService.EHCRedirecturl(patient);
            switch (result) {
                case "0":

+ 7 - 15
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/EsStatisticsController.java

@ -32,7 +32,7 @@ import java.util.TreeMap;
 * Created by chenweida on 2017/10/13.
 */
@Controller
@RequestMapping(value = "/esstatistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = {RequestMethod.GET, RequestMethod.POST})
@RequestMapping(value = "/statistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = {RequestMethod.GET, RequestMethod.POST})
@Api(description = "ES统计查询")
public class EsStatisticsController extends BaseController {
@ -1622,19 +1622,6 @@ public class EsStatisticsController extends BaseController {
    //=================================长处方分析===============================================
//    @RequestMapping("/getPrescriptionCount")
//    @ResponseBody
//    @ApiOperation("订单统计-顶部总数获取")
//    public String getPrescriptionCount(@ApiParam(name="level", value="级别") @RequestParam(required = true)String level,
//                                       @ApiParam(name="area", value="级别对应编码") @RequestParam(required = true)String area,
//                                       @ApiParam(name="disease", value="疾病类型") @RequestParam(required = false)String disease){
//        try{
//            return write(200, "查询成功", "data", statisticsESService.getPrescriptionCount(elasticsearchUtil.changeLevel(Integer.valueOf(level)),area,disease));
//        } catch (Exception e) {
//            error(e);
//            return error(-1, "查询失败");
//        }
//    }
    /**
     *年龄统计-下部列表(疾病维度)
@ -1737,7 +1724,12 @@ public class EsStatisticsController extends BaseController {
                                               @ApiParam(name="disease", value="疾病") @RequestParam(required = false)String disease,
                                               @ApiParam(name="type", value="类型1.总量,2.已完成,3.居民取消,4.审核不通过,5.进行中,6.其他原因取消") @RequestParam(required = true)String type){
        try{
            return write(200, "查询成功", "data", statisticsESService.getPrescriptionTotalLowLevel(elasticsearchUtil.changeLevel(level),String.valueOf(elasticsearchUtil.changeLevel(lowlevel)),area,disease,type));
            return write(200, "查询成功", "data", statisticsESService.getPrescriptionTotalLowLevel(
                    elasticsearchUtil.changeLevel(level),
                    String.valueOf(elasticsearchUtil.changeLevel(lowlevel)),
                    area,
                    disease,
                    type));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");

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

@ -29,7 +29,7 @@ import java.util.*;
 * Created by lyr on 2016/08/16.
 */
@Controller
@RequestMapping(value = "/statistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE,method = {RequestMethod.GET,RequestMethod.POST})
@RequestMapping(value = "/oldstatistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE,method = {RequestMethod.GET,RequestMethod.POST})
@Api(description = "统计")
public class StatisticsController extends BaseController {

+ 82 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/template/ThirdTemplateController.java

@ -0,0 +1,82 @@
package com.yihu.wlyy.web.third.template;
import com.yihu.wlyy.aop.ObserverRequired;
import com.yihu.wlyy.web.BaseController;
import com.yihu.wlyy.wechat.util.WeiXinTempMsgSendUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
 * 第三方推往健康模板消息
 * Created by Reece on 2017/11/14.
 */
@Controller
@RestController
@RequestMapping(value = "/third/template")
@Api(description = "第三方推往健康模板消息")
public class ThirdTemplateController extends BaseController {
    @Autowired
    private WeiXinTempMsgSendUtils tempMsgSendUtils;
    @Value("${wechat.message.template_doctor_survey}")
    private String template_doctor_survey;
    /**
     * 发送模板消息
     *
     * @param type     消息类别
     * @param toUser   接受者openID
     * @param url      跳转路径(带参数)
     * @param first
     * @param remark
     * @param keywords
     * @return
     */
    @RequestMapping(value = "/sendTemplate", method = RequestMethod.POST)
    @ApiOperation(value = "发送模板消息")
    @ResponseBody
    @ObserverRequired
    public String sendTemplate(
            @RequestParam(required = true) String type,
            @RequestParam(required = true) String toUser,
            @RequestParam(required = false) String url,
            @RequestParam(required = true) String first,
            @RequestParam(required = true) String remark,
            @RequestParam(required = true) String... keywords) {
        try {
            JSONObject data = tempMsgSendUtils.packageTemplate(first, remark, keywords);
            String templateId = getTemplateId(type);
            tempMsgSendUtils.sendTemplateMessage(templateId, toUser, url, data);
            return write(200, "发送成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "发送失败!");
        }
    }
    /**
     * 根据第三方type 匹配对应模板ID
     *
     * @param type 1.代办事项
     * @return
     */
    private String getTemplateId(String type) throws Exception {
        String templateId = null;
        switch (type) {
            case "1":
                templateId = template_doctor_survey;
                break;
            default:
                templateId = template_doctor_survey;
                break;
        }
        return templateId;
    }
}