浏览代码

咨询接口添加

lyr 8 年之前
父节点
当前提交
286c216710

+ 16 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java

@ -206,6 +206,14 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.id < ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.id < ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, long id, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, long id, Pageable pageRequest);
	//三师家庭咨询 -全部
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and (a.type= 1 or a.type = 2) and b.to = ?1 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findDoctorUnReplyReadNoTitleList(String uid, Pageable pageRequest);
	//三师家庭咨询 -全部 处理、未回复
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and (a.type= 1 or a.type = 2) and b.to = ?1 and a.id < ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findDoctorUnReplyReadNoTitleList(String uid, long id, Pageable pageRequest);
	//名医咨询 -全部
	//名医咨询 -全部
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, Pageable pageRequest);
@ -226,6 +234,14 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.status = 0 and b.reply = 1 and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.status = 0 and b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorIngNoTitleList(String uid, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorIngNoTitleList(String uid, Pageable pageRequest);
	//三师家庭咨询 -全部 进行中
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and (a.type= 1 or a.type = 2) and b.to = ?1 and a.id < ?2 and a.status = 0 and  b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findDoctorIngNoTitleList(String uid, long id, Pageable pageRequest);
	//三师家庭咨询 -全部 进行中
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and (a.type= 1 or a.type = 2) and b.to = ?1 and a.status = 0 and b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findDoctorIngNoTitleList(String uid, Pageable pageRequest);
    // 更新超过24小时未回复的项目,多加一分钟,防止过于频繁更新
    // 更新超过24小时未回复的项目,多加一分钟,防止过于频繁更新
    @Modifying
    @Modifying
    @Query("UPDATE ConsultTeam a set a.status = -2 where TIMESTAMPDIFF(SECOND, a.czrq, CURRENT_TIME) > 87840 and status = 0")
    @Query("UPDATE ConsultTeam a set a.status = -2 where TIMESTAMPDIFF(SECOND, a.czrq, CURRENT_TIME) > 87840 and status = 0")

+ 82 - 14
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java

@ -132,7 +132,7 @@ public class ConsultTeamService extends ConsultService {
        return null;
        return null;
    }
    }
    private Page<ConsultTeam> findByDoctorTypeSix(String uid,long id,int pagesize,String title){
    private Page<ConsultTeam> findByDoctorTypeSix(String uid, long id, int pagesize, String title) {
        Sort sort = new Sort(Direction.DESC, "id");
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
@ -152,7 +152,7 @@ public class ConsultTeamService extends ConsultService {
        }
        }
    }
    }
    private Page<ConsultTeam> findByDoctorType8(String uid,long id,int pagesize,String title){
    private Page<ConsultTeam> findByDoctorType8(String uid, long id, int pagesize, String title) {
        Sort sort = new Sort(Direction.DESC, "id");
        Sort sort = new Sort(Direction.DESC, "id");
        sort.and(new Sort(Direction.DESC, "czrq"));
        sort.and(new Sort(Direction.DESC, "czrq"));
        sort.and(new Sort(Direction.DESC, "doctorRead"));
        sort.and(new Sort(Direction.DESC, "doctorRead"));
@ -215,6 +215,74 @@ public class ConsultTeamService extends ConsultService {
        }
        }
    }
    }
    /**
     * 根据状态获取三师家庭咨询
     *
     * @param doctor
     * @param status 0未处理或未回复 1已回复 2已结束
     * @param id
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findConsultByDoctor(String doctor, int status, long id, int pagesize) {
        if (id < 0) {
            id = 0;
        }
        if (pagesize <= 0) {
            pagesize = 10;
        }
        if (status == 0) {
            return findConsultByDoctorWcl(doctor, id, pagesize);
        } else if (status == 1) {
            return findConsultByDoctorIng(doctor, id, pagesize);
        } else {
            return findByDoctorType4(doctor,id,pagesize);
        }
    }
    /**
     * 获取三师家庭未处理咨询
     *
     * @param uid
     * @param id
     * @param pagesize
     * @return
     */
    private Page<ConsultTeam> findConsultByDoctorWcl(String uid, long id, int pagesize) {
        Sort sort = new Sort(Direction.DESC, "id");
        sort.and(new Sort(Direction.DESC, "czrq"));
        sort.and(new Sort(Direction.DESC, "doctorRead"));
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (id > 0) {
            return consultTeamDao.findDoctorUnReplyReadNoTitleList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorUnReplyReadNoTitleList(uid, pageRequest);
        }
    }
    /**
     * 获取三师家庭已回复咨询
     *
     * @param uid
     * @param id
     * @param pagesize
     * @return
     */
    private Page<ConsultTeam> findConsultByDoctorIng(String uid, long id, int pagesize) {
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (id > 0) {
            return consultTeamDao.findDoctorIngNoTitleList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorIngNoTitleList(uid, pageRequest);
        }
    }
    /**
    /**
     * 查询全部咨询记录
     * 查询全部咨询记录
     *
     *
@ -870,25 +938,25 @@ public class ConsultTeamService extends ConsultService {
    }
    }
    public String produceConsultAdminTeamCode() {
    public String produceConsultAdminTeamCode() {
        StringBuffer sf=new StringBuffer();
        StringBuffer sf1=new StringBuffer();
        Long size=0L;
        StringBuffer sf = new StringBuffer();
        StringBuffer sf1 = new StringBuffer();
        Long size = 0L;
        //找出家庭签约中团队code是空的
        //找出家庭签约中团队code是空的
        List<ConsultTeam> consultTeams= consultTeamDao.findByTypeAndAdminTeamIdIsNull(2);
        sf.append("家庭签约咨询中团队code是空的数据数:"+consultTeams.size());
        for(ConsultTeam consultTeam:consultTeams){
        List<ConsultTeam> consultTeams = consultTeamDao.findByTypeAndAdminTeamIdIsNull(2);
        sf.append("家庭签约咨询中团队code是空的数据数:" + consultTeams.size());
        for (ConsultTeam consultTeam : consultTeams) {
            //得到签约中的全科医生的团队
            //得到签约中的全科医生的团队
            SignFamily signfamily= signFamilyDao.findByjiatingPatient(consultTeam.getPatient());
            if(signfamily!=null){
                if(signfamily.getAdminTeamId()!=null&&signfamily.getAdminTeamId()>0){
            SignFamily signfamily = signFamilyDao.findByjiatingPatient(consultTeam.getPatient());
            if (signfamily != null) {
                if (signfamily.getAdminTeamId() != null && signfamily.getAdminTeamId() > 0) {
                    consultTeam.setAdminTeamId(signfamily.getAdminTeamId());
                    consultTeam.setAdminTeamId(signfamily.getAdminTeamId());
                    size++;
                    size++;
                }
                }
            }else{
                sf1.append(",找不到医生所属的团队,家庭签约咨询的Id:"+consultTeam.getId());
            } else {
                sf1.append(",找不到医生所属的团队,家庭签约咨询的Id:" + consultTeam.getId());
            }
            }
        }
        }
        sf.append(",填充团队的签约数据数:"+size);
        sf.append(",填充团队的签约数据数:" + size);
        sf.append(sf1);
        sf.append(sf1);
        return sf.toString();
        return sf.toString();
    }
    }

+ 483 - 411
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java

@ -33,442 +33,514 @@ import com.yihu.wlyy.web.WeixinBaseController;
/**
/**
 * 医生端:三师咨询控制类
 * 医生端:三师咨询控制类
 * @author George
 *
 *
 * @author George
 */
 */
@Controller
@Controller
@RequestMapping(value = "/doctor/consult", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RequestMapping(value = "/doctor/consult", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "三师咨询")
@Api(description = "三师咨询")
public class DoctorConsultController extends WeixinBaseController {
public class DoctorConsultController extends WeixinBaseController {
	@Autowired
	private ConsultTeamService consultTeamService;
	@Autowired
	private PatientInfoService patientService;
	@Autowired
	private DoctorInfoService doctorInfoService;
	@Autowired
	private PatientHealthGuidanceService patientHealthGuidanceService;
	@Autowired
	private DoctorService doctorService;
	@Autowired
	private DoctorWorkTimeService doctorWorkTimeService;
    @Autowired
    private ConsultTeamService consultTeamService;
    @Autowired
    private PatientInfoService patientService;
    @Autowired
    private DoctorInfoService doctorInfoService;
    @Autowired
    private PatientHealthGuidanceService patientHealthGuidanceService;
    @Autowired
    private DoctorService doctorService;
    @Autowired
    private DoctorWorkTimeService doctorWorkTimeService;
	/**
	 * 三师咨询列表查询
	 * @param type 咨询类型:0、全部,1、咨询我的,2、公共的, 3、参与过的,4、已结束的  5 名医咨询 全部  6 名医咨询 进行中 7 名医咨询 已结束 8名医咨询 待处理 9咨询我的三师 + 家庭 + 名医
	 * @param id
	 * @param pagesize 每页显示数,默认为10
	 * @return
	 */
	@RequestMapping(value = "list")
	@ResponseBody
	public String list(int type, int id, int pagesize, @RequestParam(required = false) String patient, @RequestParam(required = false) String title) {
		try {
			Page<ConsultTeam> list = consultTeamService.findByDoctor(getUID(), type, id, pagesize,title);
			JSONArray jsonArray = new JSONArray();
			for (ConsultTeam consult : list) {
				if (consult == null) {
					continue;
				}
    /**
     * 三师咨询列表查询
     *
     * @param type     咨询类型:0、全部,1、咨询我的,2、公共的, 3、参与过的,4、已结束的  5 名医咨询 全部  6 名医咨询 进行中 7 名医咨询 已结束 8名医咨询 待处理 9咨询我的三师 + 家庭 + 名医
     * @param id
     * @param pagesize 每页显示数,默认为10
     * @return
     */
    @RequestMapping(value = "list")
    @ResponseBody
    public String list(int type, int id, int pagesize, @RequestParam(required = false) String patient, @RequestParam(required = false) String title) {
        try {
            Page<ConsultTeam> list = consultTeamService.findByDoctor(getUID(), type, id, pagesize, title);
            JSONArray jsonArray = new JSONArray();
            for (ConsultTeam consult : list) {
                if (consult == null) {
                    continue;
                }
				if (StringUtils.isNotBlank(patient) && !StringUtils.equals(patient, consult.getPatient())) {
					continue;
				}
                if (StringUtils.isNotBlank(patient) && !StringUtils.equals(patient, consult.getPatient())) {
                    continue;
                }
				JSONObject json = new JSONObject();
				json.put("id", consult.getId());
				// 设置咨询标识
				json.put("consult", consult.getConsult());
				// 设置患者标识
				json.put("patient", consult.getPatient());
				// 设置患者头像
				json.put("photo", consult.getPhoto());
				// 设置咨询标识
				json.put("title", consult.getSymptoms());
				// 设置患者姓名
				json.put("name", consult.getName());
				// 设置患者年龄
				json.put("age", DateUtil.getAgeByBirthday(consult.getBirthday()));
				// 设置评价内容
				json.put("comment", consult.getCommentContent());
				// 设置评价星级
				json.put("star", consult.getCommentStar());
				// 设置咨询类型:1三师咨询,2家庭医生咨询 6名医咨询
				json.put("type", consult.getType());
				// 设置咨询时间
				json.put("time", DateUtil.dateToStr(consult.getCzrq(), DateUtil.YYYY_MM_DD_HH_MM_SS));
				// 咨询状态
				json.put("status", consult.getStatus());
				// 设置性别
				json.put("sex", consult.getSex());
				// 未读消息
				json.put("doctorRead", consult.getDoctorRead());
                JSONObject json = new JSONObject();
                json.put("id", consult.getId());
                // 设置咨询标识
                json.put("consult", consult.getConsult());
                // 设置患者标识
                json.put("patient", consult.getPatient());
                // 设置患者头像
                json.put("photo", consult.getPhoto());
                // 设置咨询标识
                json.put("title", consult.getSymptoms());
                // 设置患者姓名
                json.put("name", consult.getName());
                // 设置患者年龄
                json.put("age", DateUtil.getAgeByBirthday(consult.getBirthday()));
                // 设置评价内容
                json.put("comment", consult.getCommentContent());
                // 设置评价星级
                json.put("star", consult.getCommentStar());
                // 设置咨询类型:1三师咨询,2家庭医生咨询 6名医咨询
                json.put("type", consult.getType());
                // 设置咨询时间
                json.put("time", DateUtil.dateToStr(consult.getCzrq(), DateUtil.YYYY_MM_DD_HH_MM_SS));
                // 咨询状态
                json.put("status", consult.getStatus());
                // 设置性别
                json.put("sex", consult.getSex());
                // 未读消息
                json.put("doctorRead", consult.getDoctorRead());
				jsonArray.put(json);
			}
			return write(200, "查询成功", "list", jsonArray);
		} catch (Exception e) {
			error(e);
			return invalidUserException(e, -1, "查询失败!");
		}
	}
                jsonArray.put(json);
            }
            return write(200, "查询成功", "list", jsonArray);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "查询失败!");
        }
    }
	/**
	 * 名医列表
	 * @return
	 */
	@RequestMapping(value = "famousDoctorList")
	@ResponseBody
	public String famousDoctorList(
			@RequestParam(required = false) String name,
			int page,
			int pagesize) {
		try {
			JSONArray array = new JSONArray();
			Page<Doctor> list = doctorService.getDoctorFamousDoctorList(name, page, pagesize);
			if (list != null) {
				for (Doctor doctor : list) {
					if (doctor == null) {
						continue;
					}
					// 过滤掉自己
					if(doctor.getCode().equals(getUID())){
						continue;
					}
    /**
     * 获取三师家庭咨询
     *
     * @param status 0未处理或未回复 1已回复 2已结束
     * @param id
     * @param pagesize
     * @param patient
     * @return
     */
    @RequestMapping(value = "/list_by_status")
    @ResponseBody
    public String listByStatus(int status, int id, int pagesize,
                                      @RequestParam(required = false) String patient) {
        try {
            Page<ConsultTeam> list = consultTeamService.findConsultByDoctor(getUID(),status,id, pagesize);
            JSONArray jsonArray = new JSONArray();
            for (ConsultTeam consult : list) {
                if (consult == null) {
                    continue;
                }
					// 判断名医是否在工作
					JSONObject isWorking = doctorWorkTimeService.isDoctorWorking(doctor.getCode());
                if (StringUtils.isNotBlank(patient) && !StringUtils.equals(patient, consult.getPatient())) {
                    continue;
                }
					if(isWorking == null || !isWorking.getString("status").equals("1")){
						continue;
					}
                JSONObject json = new JSONObject();
                json.put("id", consult.getId());
                // 设置咨询标识
                json.put("consult", consult.getConsult());
                // 设置患者标识
                json.put("patient", consult.getPatient());
                // 设置患者头像
                json.put("photo", consult.getPhoto());
                // 设置咨询标识
                json.put("title", consult.getSymptoms());
                // 设置患者姓名
                json.put("name", consult.getName());
                // 设置患者年龄
                json.put("age", DateUtil.getAgeByBirthday(consult.getBirthday()));
                // 设置评价内容
                json.put("comment", consult.getCommentContent());
                // 设置评价星级
                json.put("star", consult.getCommentStar());
                // 设置咨询类型:1三师咨询,2家庭医生咨询 6名医咨询
                json.put("type", consult.getType());
                // 设置咨询时间
                json.put("time", DateUtil.dateToStr(consult.getCzrq(), DateUtil.YYYY_MM_DD_HH_MM_SS));
                // 咨询状态
                json.put("status", consult.getStatus());
                // 设置性别
                json.put("sex", consult.getSex());
                // 未读消息
                json.put("doctorRead", consult.getDoctorRead());
					JSONObject json = new JSONObject();
					json.put("id", doctor.getId());
					// 医生标识
					json.put("code", doctor.getCode());
					// 医生性别
					json.put("sex", doctor.getSex());
					// 医生姓名
					json.put("name", doctor.getName());
					// 所在医院名称
					json.put("hospital", doctor.getHospital());
					// 所在医院名称
					json.put("hospital_name", doctor.getHosptialName());
					// 科室名称
					json.put("dept_name", (doctor.getDeptName() == null ||
							StringUtils.isEmpty(doctor.getDeptName().toString())) ? " " : doctor.getDeptName());
					// 职称名称
					json.put("job_name", (doctor.getJobName() == null ||
							StringUtils.isEmpty(doctor.getJobName().toString())) ? " " : doctor.getJobName());
					// 头像
					json.put("photo", doctor.getPhoto());
					// 简介
					json.put("introduce", doctor.getIntroduce());
					// 专长
					json.put("expertise", doctor.getExpertise());
					array.put(json);
				}
			}
			return write(200, "获取医院医生列表成功!", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取医院医生列表失败!");
		}
	}
                jsonArray.put(json);
            }
            return write(200, "查询成功", "list", jsonArray);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "查询失败!");
        }
    }
	/**
	 * 获取咨询全科医生签约量
	 *
	 * @param consults
	 * @return
	 */
	@RequestMapping(value = "/consult_sign")
	@ResponseBody
	public String consultSign(String consults){
		try{
            List<Map<String,Object>>  list = consultTeamService.getConsultSign(consults.split(","));
			return write(200,"查询成功","data",new JSONArray(list));
		}catch (Exception e){
			e.printStackTrace();
			return error(-1,"查询失败");
		}
	}
    /**
     * 名医列表
     *
     * @return
     */
    @RequestMapping(value = "famousDoctorList")
    @ResponseBody
    public String famousDoctorList(
            @RequestParam(required = false) String name,
            int page,
            int pagesize) {
        try {
            JSONArray array = new JSONArray();
            Page<Doctor> list = doctorService.getDoctorFamousDoctorList(name, page, pagesize);
            if (list != null) {
                for (Doctor doctor : list) {
                    if (doctor == null) {
                        continue;
                    }
                    // 过滤掉自己
                    if (doctor.getCode().equals(getUID())) {
                        continue;
                    }
	/**
	 * 三师咨询转接接口
	 * @param consult 图咨询标识
	 * @param doctor 转接对象标识 健康管理师转全科是 1个    全科转专科是多个  传多个doctor逗号分隔
	 * @param type 转接对象类型,1三师团队,2指定医生,3工作组团队  
	 * @return
	 */
	@RequestMapping(value = "transfer")
	@ResponseBody
	public String transfer(
			String consult, 
			String doctor, 
			@RequestParam(required = false)int type) {
		try {
			consultTeamService.transfers(getUID(), doctor, consult);
			return success("转接成功");
		} catch (Exception e) {
			error(e);
			return error(-1, "转接失败!");
		}
	}
                    // 判断名医是否在工作
                    JSONObject isWorking = doctorWorkTimeService.isDoctorWorking(doctor.getCode());
	/**
	 * 结束三师咨询接口
	 * @param consult 三师咨询标识
	 * @return
	 */
	@RequestMapping(value = "finish")
	@ResponseBody
	public String finish(String consult) {
		try {
			int flag = consultTeamService.finish(consult);
			if (flag > 0) {
				return success("咨询已关闭");
			} else {
				return error(-1, "关闭失败!");
			}
		} catch (Exception e) {
			error(e);
			return invalidUserException(e, -1, "关闭失败!");
		}
	}
                    if (isWorking == null || !isWorking.getString("status").equals("1")) {
                        continue;
                    }
	/**
	 * 设置消息已读
	 *
	 * @param consult
	 * @return
	 */
	@RequestMapping(value = "/readed")
	@ResponseBody
	public String readMessage(String consult){
		try{
			int result = consultTeamService.readMessage(consult);
			return write(200,"设置成功!");
		}catch (Exception e){
			e.printStackTrace();
			return error(-1,"设置失败");
		}
	}
                    JSONObject json = new JSONObject();
                    json.put("id", doctor.getId());
                    // 医生标识
                    json.put("code", doctor.getCode());
                    // 医生性别
                    json.put("sex", doctor.getSex());
                    // 医生姓名
                    json.put("name", doctor.getName());
                    // 所在医院名称
                    json.put("hospital", doctor.getHospital());
                    // 所在医院名称
                    json.put("hospital_name", doctor.getHosptialName());
                    // 科室名称
                    json.put("dept_name", (doctor.getDeptName() == null ||
                            StringUtils.isEmpty(doctor.getDeptName().toString())) ? " " : doctor.getDeptName());
                    // 职称名称
                    json.put("job_name", (doctor.getJobName() == null ||
                            StringUtils.isEmpty(doctor.getJobName().toString())) ? " " : doctor.getJobName());
                    // 头像
                    json.put("photo", doctor.getPhoto());
                    // 简介
                    json.put("introduce", doctor.getIntroduce());
                    // 专长
                    json.put("expertise", doctor.getExpertise());
                    array.put(json);
                }
            }
            return write(200, "获取医院医生列表成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "获取医院医生列表失败!");
        }
    }
	/**
	 * 医生咨询咨询日志查询
	 * @param consult 咨询标识
	 * @param patient 患者标识
	 * @param pagesize 每页显示数,默认为10
	 * @return
	 */
	@RequestMapping(value = "record")
	@ResponseBody
	public String record(String consult, String patient, long id, int pagesize) {
		try {
			Patient patientTemp = null;
			if (id <= 0) {
				// 只有第一页才会查询患者信息
				patientTemp = patientService.findByCode(patient);
				// 更新医生未读数量为0
				consultTeamService.clearDoctorRead(consult);
			}
			// 查询日志列表
			JSONArray jsonArray = new JSONArray();
			Page<ConsultTeamLog> list = consultTeamService.findLogByConsult(consult, id, pagesize);
			if (list != null) {
				for (ConsultTeamLog log : list) {
					if (consult == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("id", log.getId());
					// 设置回复内容
					json.put("content", log.getContent());
					// 设置回复医生姓名
					json.put("doctorName", log.getDoctorName());
					// 设置回复人头像
					json.put("photo", log.getPhoto());
					// 设置日志类型
					json.put("type", log.getType());
					// 设置记录类型
					json.put("chatType", log.getChatType());
					// 设置咨询或回复时间
					json.put("time", DateUtil.dateToStr(log.getCzrq(), DateUtil.YYYY_MM_DD_HH_MM_SS));
					jsonArray.put(json);
				}
			}
			// 设置返回结果
			JSONObject values = new JSONObject();
			if (patientTemp != null) {
				JSONObject patientJson = new JSONObject();
				// 设置患者标识
				patientJson.put("patient", patientTemp.getCode());
				// 设置姓名
				patientJson.put("name", patientTemp.getName());
				// 设置头像
				patientJson.put("photo", patientTemp.getPhoto());
				values.put("patient", patientJson);
			}
			values.put("list", jsonArray);
			// 返回结果
			return write(200, "查询成功", "data", values);
		} catch (Exception e) {
			error(e);
			return invalidUserException(e, -1, "查询失败!");
		}
	}
    /**
     * 获取咨询全科医生签约量
     *
     * @param consults
     * @return
     */
    @RequestMapping(value = "/consult_sign")
    @ResponseBody
    public String consultSign(String consults) {
        try {
            List<Map<String, Object>> list = consultTeamService.getConsultSign(consults.split(","));
            return write(200, "查询成功", "data", new JSONArray(list));
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 三师咨询转接接口
     *
     * @param consult 图咨询标识
     * @param doctor  转接对象标识 健康管理师转全科是 1个    全科转专科是多个  传多个doctor逗号分隔
     * @param type    转接对象类型,1三师团队,2指定医生,3工作组团队
     * @return
     */
    @RequestMapping(value = "transfer")
    @ResponseBody
    public String transfer(
            String consult,
            String doctor,
            @RequestParam(required = false) int type) {
        try {
            consultTeamService.transfers(getUID(), doctor, consult);
            return success("转接成功");
        } catch (Exception e) {
            error(e);
            return error(-1, "转接失败!");
        }
    }
	/**
	 * 医生回复网络咨询
	 * @param patient 患者标识
	 * @param consult 咨询标识
	 * @param content 回复内容
	 * @param type	回复类型,1文字,2图片,3语音
	 * @return
	 */
	@RequestMapping(value = "reply")
	@ResponseBody
	public String reply(String patient, String consult, String content, int type) {
		try {
			// 查询医生基本信息
			Doctor doctor = doctorInfoService.findDoctorByCode(getUID());
			if (doctor == null) {
				return error(-1, "回复失败!");
			} else {
				ConsultTeamLog log = new ConsultTeamLog();
				// 设置咨询标识
				log.setConsult(consult);
				// 拷贝图片
				if (StringUtils.isNotEmpty(content)) {
					if (type == 3) {
						// 语音
						content = CommonUtil.copyTempVoice(content);
					} else if (type == 2) {
						// 图片
						content = CommonUtil.copyTempImage(content);
					}
				}
				// 设置回复内容
				log.setContent(content);
				log.setDel("1");
				// 设置回复医生标识
				log.setDoctor(doctor.getCode());
				// 设置医生姓名
				log.setDoctorName(doctor.getName());
				// 设置医生头像
				log.setPhoto(doctor.getPhoto());
				// 设置咨询类型为医生回复
				log.setType(1);
				// 设置记录类型
				log.setChatType(type);
				// 保存医生回复内容
				log = consultTeamService.reply(log, patient, getUID(), log.getType());
				if (log == null) {
					return error(-1, "回复失败!");
				} else {
					// 推送消息给患者
					// PushMsgTask.getInstance().put(patient, MessageType.MESSAGE_TYPE_PATIENT_CONSULT_TEAM_REPLY.P_CT_01.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_TEAM_REPLY.三师咨询.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_TEAM_REPLY.医生回复了您.name(), consult);
					// 推送消息给微信端
					ConsultTeam ct = consultTeamService.findByCode(consult);
					Patient p = patientService.findByCode(patient);
					if (ct != null && p != null && StringUtils.isNotEmpty(p.getOpenid())) {
						JSONObject json = new JSONObject();
						json.put("first", "问诊回复提醒");
						json.put("consultcontent", ct.getSymptoms());
						String replycontent = content.length() > 15 ? content.substring(0, 15) + "..." : content;
						if (type == 2) {
							replycontent = "[图片]";
						} else if (type == 3) {
							replycontent = "[语音]";
						}
						json.put("consult", consult);
						json.put("replycontent", replycontent);
						json.put("doctorName", doctor.getName());
						json.put("remark", "医生已为您提供问诊方案");
						PushMsgTask.getInstance().putWxMsg(getAccessToken(), 3, p.getOpenid(), p.getName(), json);
					}
					if (type == 2) {
						return write(200, "回复成功!", "data", content);
					}
					return success("回复成功!");
				}
			}
		} catch (Exception e) {
			error(e);
			return invalidUserException(e, -1, "回复失败!");
		}
	}
    /**
     * 结束三师咨询接口
     *
     * @param consult 三师咨询标识
     * @return
     */
    @RequestMapping(value = "finish")
    @ResponseBody
    public String finish(String consult) {
        try {
            int flag = consultTeamService.finish(consult);
            if (flag > 0) {
                return success("咨询已关闭");
            } else {
                return error(-1, "关闭失败!");
            }
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "关闭失败!");
        }
    }
    /**
     * 设置消息已读
     *
     * @param consult
     * @return
     */
    @RequestMapping(value = "/readed")
    @ResponseBody
    public String readMessage(String consult) {
        try {
            int result = consultTeamService.readMessage(consult);
            return write(200, "设置成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "设置失败");
        }
    }
    /**
     * 医生咨询咨询日志查询
     *
     * @param consult  咨询标识
     * @param patient  患者标识
     * @param pagesize 每页显示数,默认为10
     * @return
     */
    @RequestMapping(value = "record")
    @ResponseBody
    public String record(String consult, String patient, long id, int pagesize) {
        try {
            Patient patientTemp = null;
            if (id <= 0) {
                // 只有第一页才会查询患者信息
                patientTemp = patientService.findByCode(patient);
                // 更新医生未读数量为0
                consultTeamService.clearDoctorRead(consult);
            }
            // 查询日志列表
            JSONArray jsonArray = new JSONArray();
            Page<ConsultTeamLog> list = consultTeamService.findLogByConsult(consult, id, pagesize);
            if (list != null) {
                for (ConsultTeamLog log : list) {
                    if (consult == null) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    json.put("id", log.getId());
                    // 设置回复内容
                    json.put("content", log.getContent());
                    // 设置回复医生姓名
                    json.put("doctorName", log.getDoctorName());
                    // 设置回复人头像
                    json.put("photo", log.getPhoto());
                    // 设置日志类型
                    json.put("type", log.getType());
                    // 设置记录类型
                    json.put("chatType", log.getChatType());
                    // 设置咨询或回复时间
                    json.put("time", DateUtil.dateToStr(log.getCzrq(), DateUtil.YYYY_MM_DD_HH_MM_SS));
                    jsonArray.put(json);
                }
            }
            // 设置返回结果
            JSONObject values = new JSONObject();
            if (patientTemp != null) {
                JSONObject patientJson = new JSONObject();
                // 设置患者标识
                patientJson.put("patient", patientTemp.getCode());
                // 设置姓名
                patientJson.put("name", patientTemp.getName());
                // 设置头像
                patientJson.put("photo", patientTemp.getPhoto());
                values.put("patient", patientJson);
            }
            values.put("list", jsonArray);
            // 返回结果
            return write(200, "查询成功", "data", values);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "查询失败!");
        }
    }
    /**
     * 医生回复网络咨询
     *
     * @param patient 患者标识
     * @param consult 咨询标识
     * @param content 回复内容
     * @param type    回复类型,1文字,2图片,3语音
     * @return
     */
    @RequestMapping(value = "reply")
    @ResponseBody
    public String reply(String patient, String consult, String content, int type) {
        try {
            // 查询医生基本信息
            Doctor doctor = doctorInfoService.findDoctorByCode(getUID());
            if (doctor == null) {
                return error(-1, "回复失败!");
            } else {
                ConsultTeamLog log = new ConsultTeamLog();
                // 设置咨询标识
                log.setConsult(consult);
                // 拷贝图片
                if (StringUtils.isNotEmpty(content)) {
                    if (type == 3) {
                        // 语音
                        content = CommonUtil.copyTempVoice(content);
                    } else if (type == 2) {
                        // 图片
                        content = CommonUtil.copyTempImage(content);
                    }
                }
                // 设置回复内容
                log.setContent(content);
                log.setDel("1");
                // 设置回复医生标识
                log.setDoctor(doctor.getCode());
                // 设置医生姓名
                log.setDoctorName(doctor.getName());
                // 设置医生头像
                log.setPhoto(doctor.getPhoto());
                // 设置咨询类型为医生回复
                log.setType(1);
                // 设置记录类型
                log.setChatType(type);
                // 保存医生回复内容
                log = consultTeamService.reply(log, patient, getUID(), log.getType());
                if (log == null) {
                    return error(-1, "回复失败!");
                } else {
                    // 推送消息给患者
                    // PushMsgTask.getInstance().put(patient, MessageType.MESSAGE_TYPE_PATIENT_CONSULT_TEAM_REPLY.P_CT_01.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_TEAM_REPLY.三师咨询.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_TEAM_REPLY.医生回复了您.name(), consult);
                    // 推送消息给微信端
                    ConsultTeam ct = consultTeamService.findByCode(consult);
                    Patient p = patientService.findByCode(patient);
                    if (ct != null && p != null && StringUtils.isNotEmpty(p.getOpenid())) {
                        JSONObject json = new JSONObject();
                        json.put("first", "问诊回复提醒");
                        json.put("consultcontent", ct.getSymptoms());
                        String replycontent = content.length() > 15 ? content.substring(0, 15) + "..." : content;
                        if (type == 2) {
                            replycontent = "[图片]";
                        } else if (type == 3) {
                            replycontent = "[语音]";
                        }
                        json.put("consult", consult);
                        json.put("replycontent", replycontent);
                        json.put("doctorName", doctor.getName());
                        json.put("remark", "医生已为您提供问诊方案");
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 3, p.getOpenid(), p.getName(), json);
                    }
                    if (type == 2) {
                        return write(200, "回复成功!", "data", content);
                    }
                    return success("回复成功!");
                }
            }
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "回复失败!");
        }
    }
    /**
     * 查询医生的总咨询次数和今日咨询次数
     *
     * @param doctorCode
     * @return
     */
    @RequestMapping(value = "getConsultCount")
    @ResponseBody
    public String getAllCount(@RequestParam(required = true) String doctorCode) {
        try {
            JSONObject json = new JSONObject();
            Map<String, Long> counts = consultTeamService.getAllCount(doctorCode);
	/**
	 * 查询医生的总咨询次数和今日咨询次数
	 * @param doctorCode
	 * @return
	 */
	@RequestMapping(value = "getConsultCount")
	@ResponseBody
	public String getAllCount(@RequestParam(required = true) String doctorCode) {
		try {
			JSONObject json = new JSONObject();
			Map<String,Long> counts=consultTeamService.getAllCount(doctorCode);
			
			json.put("all", counts.get("all"));
			json.put("today", counts.get("today"));
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "回复失败!");
		}
	}
            json.put("all", counts.get("all"));
            json.put("today", counts.get("today"));
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "回复失败!");
        }
    }
	/**
	 * 查询患者的服务数目
	 * @return
    /**
     * 查询患者的服务数目
     *
     * @return
     */
     */
	@RequestMapping(value = "getPatientServicNum")
	@ResponseBody
	public String getPatientServicNum(String patientCode) {
		try {
			JSONObject json = new JSONObject();
			//统计咨询数目
			Integer allSize1=consultTeamService.findByDoctorSize(patientCode,getUID());
			//查询健康指导
			Integer allSize2=patientHealthGuidanceService.findGuidanceByPatient(patientCode,getUID());
			json.put("consult", allSize1);
			json.put("guide", allSize2);
			//json.put("today", counts.get("today"));
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "回复失败!");
		}
	}
    @RequestMapping(value = "getPatientServicNum")
    @ResponseBody
    public String getPatientServicNum(String patientCode) {
        try {
            JSONObject json = new JSONObject();
            //统计咨询数目
            Integer allSize1 = consultTeamService.findByDoctorSize(patientCode, getUID());
            //查询健康指导
            Integer allSize2 = patientHealthGuidanceService.findGuidanceByPatient(patientCode, getUID());
            json.put("consult", allSize1);
            json.put("guide", allSize2);
            //json.put("today", counts.get("today"));
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "回复失败!");
        }
    }
	/**
	 * 根据医生code和和患者code判断是否有存在进行中的咨询
	 * @param patientCode 多个患者 逗号分隔
	 * @param doctor
	 * @return 只返回存在咨询的患者的code
    /**
     * 根据医生code和和患者code判断是否有存在进行中的咨询
     *
     * @param patientCode 多个患者 逗号分隔
     * @param doctor
     * @return 只返回存在咨询的患者的code
     */
     */
	@RequestMapping(value = "getConsultByPatientAndDoctor")
	@ResponseBody
	public String getConsultByPatientAndDoctor(String patientCode,String doctor) {
		try {
			JSONArray json = new JSONArray();
			String []patients=patientCode.split(",");
			for(int i=0 ;i<patients.length;i++){
				ConsultTeam consultTeam= consultTeamService.getConsultByPatientAndDoctor(patients[i],doctor);
				if(consultTeam!=null){
					json.put(patients[i]);
				}
			}
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "回复失败!");
		}
	}
    @RequestMapping(value = "getConsultByPatientAndDoctor")
    @ResponseBody
    public String getConsultByPatientAndDoctor(String patientCode, String doctor) {
        try {
            JSONArray json = new JSONArray();
            String[] patients = patientCode.split(",");
            for (int i = 0; i < patients.length; i++) {
                ConsultTeam consultTeam = consultTeamService.getConsultByPatientAndDoctor(patients[i], doctor);
                if (consultTeam != null) {
                    json.put(patients[i]);
                }
            }
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "回复失败!");
        }
    }
}
}