esb преди 8 години
родител
ревизия
82a2fee6ec
променени са 49 файла, в които са добавени 2427 реда и са изтрити 1611 реда
  1. 26 6
      pom.xml
  2. 21 49
      src/main/java/com/yihu/wlyy/entity/consult/ConsultTeam.java
  3. 8 0
      src/main/java/com/yihu/wlyy/entity/patient/SignFamily.java
  4. 3 0
      src/main/java/com/yihu/wlyy/interceptors/PatientInterceptor.java
  5. 3 0
      src/main/java/com/yihu/wlyy/job/ChangeSignJob.java
  6. 3 0
      src/main/java/com/yihu/wlyy/job/ConsultJob.java
  7. 62 25
      src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java
  8. 3 0
      src/main/java/com/yihu/wlyy/job/FollowUpJob.java
  9. 3 0
      src/main/java/com/yihu/wlyy/job/HealthGuideJob.java
  10. 35 18
      src/main/java/com/yihu/wlyy/job/QuartzHelper.java
  11. 1 0
      src/main/java/com/yihu/wlyy/job/SignAgeGroupDiseaseJob.java
  12. 10 1
      src/main/java/com/yihu/wlyy/job/SignJob.java
  13. 3 0
      src/main/java/com/yihu/wlyy/job/UnSignJob.java
  14. 3 0
      src/main/java/com/yihu/wlyy/job/WaitSignJob.java
  15. 72 0
      src/main/java/com/yihu/wlyy/job/consult/ConsultCleaner.java
  16. 25 0
      src/main/java/com/yihu/wlyy/job/consult/ConsultCleanerJob.java
  17. 63 1
      src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java
  18. 8 2
      src/main/java/com/yihu/wlyy/repository/doctor/DoctorDao.java
  19. 1 1
      src/main/java/com/yihu/wlyy/repository/doctor/DoctorTeamMemberDao.java
  20. 9 0
      src/main/java/com/yihu/wlyy/repository/message/MessageDao.java
  21. 2 0
      src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java
  22. 810 722
      src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java
  23. 107 0
      src/main/java/com/yihu/wlyy/service/app/message/MessageService.java
  24. 116 0
      src/main/java/com/yihu/wlyy/service/app/scheduling/DoctorWorkTimeService.java
  25. 28 6
      src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  26. 82 17
      src/main/java/com/yihu/wlyy/service/app/talk/TalkGroupService.java
  27. 14 0
      src/main/java/com/yihu/wlyy/service/common/account/DoctorService.java
  28. 17 47
      src/main/java/com/yihu/wlyy/service/quota/JobService.java
  29. 99 0
      src/main/java/com/yihu/wlyy/service/third/sign/SignJwService.java
  30. 44 0
      src/main/java/com/yihu/wlyy/task/SignUploadTask.java
  31. 12 4
      src/main/java/com/yihu/wlyy/util/IdCardUtil.java
  32. 0 14
      src/main/java/com/yihu/wlyy/util/SystemConf.java
  33. 108 0
      src/main/java/com/yihu/wlyy/web/common/util/CaptchaController.java
  34. 0 603
      src/main/java/com/yihu/wlyy/web/common/util/ImportDataController.java
  35. 1 0
      src/main/java/com/yihu/wlyy/web/common/util/ManagerUtilController.java
  36. 182 0
      src/main/java/com/yihu/wlyy/web/common/util/WlyySerivceController.java
  37. 71 1
      src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java
  38. 36 1
      src/main/java/com/yihu/wlyy/web/doctor/discussion/DoctorDiscussionGroupController.java
  39. 20 0
      src/main/java/com/yihu/wlyy/web/doctor/message/DoctorMessageController.java
  40. 3 0
      src/main/java/com/yihu/wlyy/web/doctor/patient/DoctorPatientGroupController.java
  41. 1 33
      src/main/java/com/yihu/wlyy/web/doctor/patient/PatientDiseaseController.java
  42. 18 0
      src/main/java/com/yihu/wlyy/web/doctor/scheduling/DoctorWorkTimeController.java
  43. 77 6
      src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java
  44. 4 0
      src/main/java/com/yihu/wlyy/web/doctor/team/SignTeamController.java
  45. 26 1
      src/main/java/com/yihu/wlyy/web/patient/consult/ConsultController.java
  46. 174 36
      src/main/java/com/yihu/wlyy/web/quota/JobController.java
  47. 0 17
      src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java
  48. BIN
      src/main/resources/kaptcha-2.3.2.jar
  49. 13 0
      src/main/resources/system.properties

+ 26 - 6
pom.xml

@ -13,7 +13,7 @@
        <springside.version>4.2.3-GA</springside.version>
        <spring.version>4.2.6.RELEASE</spring.version>
        <hibernate.version>4.3.5.Final</hibernate.version>
        <spring-data-jpa.version>1.7.2.RELEASE</spring-data-jpa.version>
        <spring-data-jpa.version>1.6.0.RELEASE</spring-data-jpa.version>
        <tomcat-jdbc.version>7.0.53</tomcat-jdbc.version>
        <sitemesh.version>2.4.2</sitemesh.version>
        <shiro.version>1.2.3</shiro.version>
@ -82,11 +82,6 @@
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
@ -148,6 +143,11 @@
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.kaptcha</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3</version>
        </dependency>
        <!-- spring data access -->
        <dependency>
            <groupId>org.springframework.data</groupId>
@ -624,6 +624,26 @@
            <!--<artifactId>maven-antrun-plugin</artifactId>-->
            <!--<version>1.7</version>-->
            <!--</plugin>-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <groupId>com.google.code.kaptcha</groupId>
                            <artifactId>kaptcha</artifactId>
                            <version>2.3</version>
                            <packaging>jar</packaging>
                            <file>${basedir}/src/main/resources/kaptcha-2.3.2.jar</file>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <!--<pluginManagement>-->
        <!--<plugins>-->

+ 21 - 49
src/main/java/com/yihu/wlyy/entity/consult/ConsultTeam.java

@ -12,60 +12,33 @@ import com.yihu.wlyy.entity.IdEntity;
/**
 * 三师咨询
 * @author George
 *
 */
@Entity
@Table(name = "wlyy_consult_team")
public class ConsultTeam extends IdEntity {
	/**
	 * 
	 */
	private static final long serialVersionUID = -7644448339473861513L;
	// 咨询标识
	private String consult;
	// 医生标识
	private String doctor;
	// 三师团队标识
	private String team;
	//1 三师咨询,2家庭医生咨询 6.名医咨询
	private Integer type;
	// 提问者标识
	private String patient;
	// 患者姓名
	private String name;
	// 患者性别
	private Integer sex;
	// 患者生日
	private Date birthday;
	// 患者头像
	private String photo;
	// 发病日期
	private String when;
	// 主要症状
	private String symptoms;
	// 咨询状态(0进行中,1已完成,-1患者取消)
	private Integer status;
	// 咨询图片URL,多图以逗号分隔
	private String images;
	// 咨询语音URL
	private String voice;
	// 用户评价标识
	private String comment;
	// 用户评价内容
	private String commentContent;
	// 用户评价星级
	private Integer commentStar;
	// 医生未读数量
	private Integer doctorRead;
	// 患者未读数量
	private Integer patientRead;
	// 咨询时间
	private Date czrq;
	// 作废标识,1正常,0作废
	private String del;
	private String consult;         // 咨询标识
	private String doctor;          // 医生标识
	private String team;            // 三师团队标识
	private Integer type;           //  1、三师咨询,2、家庭医生咨询,6、名医咨询
	private String patient;         // 提问者标识
	private String name;            // 患者姓名
	private Integer sex;            // 患者性别
	private Date birthday;          // 患者生日
	private String photo;           // 患者头像
	private String when;            // 发病日期
	private String symptoms;        // 主要症状
	private Integer status;         // 咨询状态(0进行中,1已完成,-1患者取消,-2超时未响应自动关闭)
	private String images;          // 咨询图片URL,多图以逗号分隔
	private String voice;           // 咨询语音URL
	private String comment;         // 用户评价标识
	private String commentContent;  // 用户评价内容
	private Integer commentStar;    // 用户评价星级
	private Integer doctorRead;     // 医生未读数量
	private Integer patientRead;    // 患者未读数量
	private Date czrq;              // 咨询时间
	private String del;             // 作废标识,1正常,0作废
	public String getConsult() {
		return consult;
@ -76,7 +49,6 @@ public class ConsultTeam extends IdEntity {
	}
	public ConsultTeam() {
	}
	public String getDoctor() {

+ 8 - 0
src/main/java/com/yihu/wlyy/entity/patient/SignFamily.java

@ -61,6 +61,7 @@ public class SignFamily extends IdEntity {
	private String agentDoctorName;//代理簽約人銘
	private String agentDoctorLevel;//代理簽約人等级
	private Long adminTeamId;//行政团队ID
	private Date expensesTime;//缴费时间
	public String getCode() {
		return code;
@ -457,4 +458,11 @@ public class SignFamily extends IdEntity {
				", familyCode='" + familyCode + '\'' +
				'}';
	}
	public Date getExpensesTime() {
		return expensesTime;
	}
	public void setExpensesTime(Date expensesTime) {
		this.expensesTime = expensesTime;
	}
}

+ 3 - 0
src/main/java/com/yihu/wlyy/interceptors/PatientInterceptor.java

@ -25,6 +25,9 @@ public class PatientInterceptor extends BaseInterceptor {
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		boolean flag = true;
		try {
			if(request.getRequestURI().contains("/patient/hosptail/getHositalByTownCode")){
				return true;
			}
			response.setCharacterEncoding("UTF-8");
			JSONObject json = getAgent(request);
			if (json == null) {

+ 3 - 0
src/main/java/com/yihu/wlyy/job/ChangeSignJob.java

@ -126,6 +126,7 @@ public class ChangeSignJob implements Job {
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
@ -139,6 +140,7 @@ public class ChangeSignJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -159,6 +161,7 @@ public class ChangeSignJob implements Job {
        //保存机构的改签统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();

+ 3 - 0
src/main/java/com/yihu/wlyy/job/ConsultJob.java

@ -126,6 +126,7 @@ public class ConsultJob implements Job {
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
@ -138,6 +139,7 @@ public class ConsultJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -158,6 +160,7 @@ public class ConsultJob implements Job {
        //保存机构的咨询统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();

+ 62 - 25
src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java

@ -163,6 +163,7 @@ public class CurrentDayAllQuotaJob implements Job {
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital == null) continue;
            String town = hospital.getTown();
            int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
            String ageCode = getAgeCode(age);//得到年龄的code
@ -350,17 +351,25 @@ public class CurrentDayAllQuotaJob implements Job {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(hospital == null) continue;
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            if(orgjo==null){
                System.out.println(new JSONObject(hospital).toString());
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
@ -446,16 +455,20 @@ public class CurrentDayAllQuotaJob implements Job {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            if(qkjo!=null){
@ -501,15 +514,19 @@ public class CurrentDayAllQuotaJob implements Job {
            if(doctor==null){
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjJkdoctorMap.get(doctor.getCode());
            if(qkjo!=null){
@ -552,15 +569,19 @@ public class CurrentDayAllQuotaJob implements Job {
            if(doctor==null){
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjJkdoctorMap.get(doctor.getCode());
            if(qkjo!=null){
@ -608,14 +629,18 @@ public class CurrentDayAllQuotaJob implements Job {
                    continue;
                }
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            if(orgjo==null){
                continue;
            }
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(doctor.getCode());
@ -1088,6 +1113,7 @@ public class CurrentDayAllQuotaJob implements Job {
        for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
            //保存健康人群
            Hospital hospital=hospitalsMap.get(hospitalEntry.getKey());
            if(hospital == null) continue;
            JSONObject jsonObject=new JSONObject();
            Map<String, Long> oneOrg= orgGroupMap.get(hospitalEntry.getKey());
@ -1431,16 +1457,21 @@ public class CurrentDayAllQuotaJob implements Job {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            if(qkjo!=null){
@ -1481,15 +1512,20 @@ public class CurrentDayAllQuotaJob implements Job {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            //统计机构
            JSONObject orgjo=tjOrgMap.get(hospital.getCode());
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(hospital.getCode());
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            if(qkjo!=null){
@ -1577,7 +1613,8 @@ public class CurrentDayAllQuotaJob implements Job {
        }
    }
    private String getOrg(String org){
        if(!"00".equals(org.substring(org.length()-2,org.length()))){
        //if(!"00".equals(org.substring(org.length()-2,org.length()))){
        if(org.length() == 10 && !org.endsWith("00")){
            return org.substring(0,org.length()-2)+"00";
        }else{
            return org;

+ 3 - 0
src/main/java/com/yihu/wlyy/job/FollowUpJob.java

@ -134,6 +134,7 @@ public class FollowUpJob implements Job {
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
@ -146,6 +147,7 @@ public class FollowUpJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -166,6 +168,7 @@ public class FollowUpJob implements Job {
        //保存机构的随访统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();

+ 3 - 0
src/main/java/com/yihu/wlyy/job/HealthGuideJob.java

@ -125,6 +125,7 @@ public class HealthGuideJob implements Job {
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
@ -138,6 +139,7 @@ public class HealthGuideJob implements Job {
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -154,6 +156,7 @@ public class HealthGuideJob implements Job {
        //保存机构的咨询统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();

+ 35 - 18
src/main/java/com/yihu/wlyy/job/QuartzHelper.java

@ -1,17 +1,14 @@
package com.yihu.wlyy.job;
import java.util.Date;
import java.util.Map;
import javax.annotation.PostConstruct;
import com.yihu.wlyy.repository.*;
import org.quartz.*;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.Map;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
@Component("quartzHelper")
@ -66,25 +63,45 @@ public class QuartzHelper {
    }
    public boolean isExistJob(String jobKey) throws SchedulerException {
        JobKey jk = new JobKey("job-id:" + jobKey,"job-group:" + jobKey);
        if(scheduler.checkExists(jk)){
        JobKey jk = new JobKey("job-id:" + jobKey, "job-group:" + jobKey);
        if (scheduler.checkExists(jk)) {
            return true;
        }else{
        } else {
            return false;
        }
    }
    public void startNow(Class jobClass,  String id, Map<String, Object> params) throws Exception {
    /**
     * 立即执行任务。
     *
     * @param jobClass
     * @param id
     * @param params
     * @throws Exception
     */
    public void startNow(Class jobClass, String id, Map<String, Object> params) throws Exception {
        startAt(new Date(), jobClass, id, params);
    }
    /**
     * 在指定时间点执行。
     *
     * @param time
     * @param jobClass
     * @param id
     * @param params
     * @throws Exception
     */
    public void startAt(Date time, Class jobClass, String id, Map<String, Object> params) throws Exception {
        JobDetail job = JobBuilder.newJob(jobClass).
                withIdentity("job-simple-id:" + id, "job-simple-group:" + id)
                withIdentity("job-id:" + id, "job-group:" + id)
                .build();
        JobDataMap jobDataMap = job.getJobDataMap();
        jobDataMap.putAll(params);
        SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger1-simple-id:" + id, "group1-simple-group:" + id)
                .startAt(new Date()).withSchedule(simpleSchedule()//new Date() 是执行时间
                        .withIntervalInSeconds(10)//如果有重复次数 那么间隔10秒执行一次
                        .withRepeatCount(0) //重复的次数
                )
        if(null != params) jobDataMap.putAll(params);
        SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-id:" + id, "group-group:" + id)
                .startAt(time)
                .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(0))
                .build();
        scheduler.scheduleJob(job, trigger);

+ 1 - 0
src/main/java/com/yihu/wlyy/job/SignAgeGroupDiseaseJob.java

@ -111,6 +111,7 @@ public class SignAgeGroupDiseaseJob implements Job {
                }
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null) continue;
                String town = hospital.getTown();
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code

+ 10 - 1
src/main/java/com/yihu/wlyy/job/SignJob.java

@ -142,7 +142,11 @@ public class SignJob implements Job {
                String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
                String orgCodeTemp=getOrg(signFamily.getHospital());
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null)continue;
                String town = hospital.getTown();//得到患者签约的机构的区号
                String hospitalCode = hospital.getCode();//得到患者签约的机构号
                String sex = IdCardUtil.getSexForIdcard(idcard);//根据身份证得到性别
                //统计市 目前只统计厦门市 所以先写死 后期再改造
@ -898,6 +902,7 @@ public class SignJob implements Job {
               String orgCodeTemp=getOrg(signFamily.getHospital());
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null) continue;
                String town = hospital.getTown();
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
@ -1401,6 +1406,7 @@ public class SignJob implements Job {
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute_level1(tjTownMap, townCode);
@ -1413,6 +1419,7 @@ public class SignJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -1433,6 +1440,7 @@ public class SignJob implements Job {
        //保存机构的签约统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -1569,7 +1577,8 @@ public class SignJob implements Job {
        return dateString;
    }
    private String getOrg(String org){
        if(!"00".equals(org.substring(org.length()-2,org.length()))){
        //if(!"00".equals(org.substring(org.length()-2,org.length()))){
        if(org.length() == 10 && !org.endsWith("00")){
            return org.substring(0,org.length()-2)+"00";
        }else{
            return org;

+ 3 - 0
src/main/java/com/yihu/wlyy/job/UnSignJob.java

@ -124,6 +124,7 @@ public class UnSignJob implements Job {
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
@ -136,6 +137,7 @@ public class UnSignJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -156,6 +158,7 @@ public class UnSignJob implements Job {
        //保存机构的解约统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();

+ 3 - 0
src/main/java/com/yihu/wlyy/job/WaitSignJob.java

@ -126,6 +126,7 @@ public class WaitSignJob implements Job {
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
@ -138,6 +139,7 @@ public class WaitSignJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
@ -158,6 +160,7 @@ public class WaitSignJob implements Job {
        //保存机构的待签约统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String town=hospital.getTown();

+ 72 - 0
src/main/java/com/yihu/wlyy/job/consult/ConsultCleaner.java

@ -0,0 +1,72 @@
package com.yihu.wlyy.job.consult;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.job.QuartzHelper;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.service.quota.JobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import static com.yihu.wlyy.job.consult.ConsultCleanerJob.ConsultTerminatorJobKey;
/**
 * @author Sand
 * @since 2016/9/26
 */
@Service
public class ConsultCleaner {
    private final ConsultTeamDao consultTeamDao;
    private final JobService jobService;
    private final QuartzHelper quartzHelper;
    @Autowired
    public ConsultCleaner(QuartzHelper quartzHelper, JobService jobService, ConsultTeamDao consultTeamDao) {
        this.quartzHelper = quartzHelper;
        this.jobService = jobService;
        this.consultTeamDao = consultTeamDao;
    }
    @Transactional
    public void doClean() {
        try {
            System.out.println("开始清除未响应咨询......");
            // 先关闭超过24小时未回应的咨询
            consultTeamDao.updateUnresponsedConsultOver24Hours();
            // 计算下一次执行此任务的时间,若无下次计算时间为半个小时后
            Date nextTriggerTime;
            Page<ConsultTeam> consultTeams = consultTeamDao.getUnresponsedConsultIn24Hours(new PageRequest(0, 1));
            if (consultTeams.getContent().size() > 0) {
                ConsultTeam consultTeam = consultTeams.getContent().get(0);
                Calendar calendar =  new GregorianCalendar();
                calendar.setTime(consultTeam.getCzrq());
                calendar.add(Calendar.HOUR, 24);
                nextTriggerTime = calendar.getTime();
            } else {
                Calendar calendar = GregorianCalendar.getInstance();
                calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + 30);
                nextTriggerTime = calendar.getTime();
            }
            if (quartzHelper.isExistJob(ConsultTerminatorJobKey)) {
                quartzHelper.removeJob(ConsultTerminatorJobKey);
            }
            System.out.println("计算下次任务执行时间,下次执行在" + nextTriggerTime.toString());
            //quartzHelper.startAt(nextTriggerTime, ConsultCleanerJob.class, ConsultTerminatorJobKey, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 25 - 0
src/main/java/com/yihu/wlyy/job/consult/ConsultCleanerJob.java

@ -0,0 +1,25 @@
package com.yihu.wlyy.job.consult;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
/**
 * @author Sand
 * @since 2016/9/23
 */
public class ConsultCleanerJob implements Job {
    @Autowired
    ConsultCleaner cleaner;
    public final static String ConsultTerminatorJobKey = "consult-terminator";
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        cleaner.doClean();
    }
}

+ 63 - 1
src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java

@ -8,6 +8,7 @@ package com.yihu.wlyy.repository.consult;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.jaxb.PageAdapter;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
@ -44,6 +45,14 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and b.to = ?1 and a.id < ?2 and a.status = 0 and a.del = '1' and b.del = '1' and a.type<3 ")
	Page<ConsultTeam> findDoctorPointList(String doctor, long id, Pageable pageRequest);
	// 被指定且未结束列表
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and b.to = ?1 and a.id < ?2 and a.status = 0 and a.del = '1' and b.del = '1' and (a.type = 1 or a.type = 2 or a.type = 6) ")
	Page<ConsultTeam> findDoctorAllList(String doctor, long id, Pageable pageRequest);
	// 被指定且未结束列表
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and b.to = ?1 and a.status = 0 and a.del = '1' and b.del = '1' and (a.type = 1 or a.type = 2 or a.type = 6) ")
	Page<ConsultTeam> findDoctorAllList(String doctor, Pageable pageRequest);
	// 医生参与且未结束列表
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and b.to = ?1 and a.status = 0 and b.reply = 1 and a.del = '1' and b.del = '1' and a.type<3")
	Page<ConsultTeam> findDoctorJoinList(String doctor, Pageable pageRequest);
@ -129,9 +138,21 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	int updateComment(String commentContent, double commentStar, String consult);
	// 查询医生所有未读的消息总数
	@Query("SELECT SUM(a.doctorRead) FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0")
	@Query("SELECT SUM(a.doctorRead) FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type <> 6")
	int amountAllDoctorUnread(String doctor);
	// 查询医生所有未读的消息总数
	@Query("SELECT SUM(a.doctorRead) FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type = 6")
	int amountAlFamouslDoctorUnread(String doctor);
	// 查询医生所有未读的消息总数
	@Query("SELECT a.name,b.czrq FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type <> 6 order by b.czrq desc")
	Page<Object> AllDoctorUnreadLast(String doctor,Pageable pageRequest);
	// 查询医生所有未读的消息总数
	@Query("SELECT a.name,b.czrq FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type = 6 order by b.czrq desc")
	Page<Object> AllDoctorFamousUnreadLast(String doctor,Pageable pageRequest);
	// 查询带未读数量的所有健康咨询列表
	@Query("SELECT a FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.status = 0 and a.type< 3")
	Page<ConsultTeam> findListByUnreadDoctor(String doctor, Pageable pageRequest);
@ -172,4 +193,45 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	Page<ConsultTeam> findFamousDoctorDoingList(String uid,String title,Integer type, Pageable pageRequest);
	@Query("select a from ConsultTeam a where  a.type=?3  and a.del = '1' and a.patient=?1 and a.doctor=?2 and  a.status=0 ")
	ConsultTeam findByParientCodeAndSignTypeAndDoctor(String patientCode, String doctor, int s);
	//名医咨询 -全部 带symptoms 未处理、未回复
	@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.symptoms like ?3 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadList(String uid, long id,String title, Pageable pageRequest);
	//名医咨询 -全部 带symptoms 处理、未回复
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.symptoms like ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadList(String uid,String title, 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.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);
	//名医咨询 -全部
	@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);
	//名医咨询 -全部 带symptoms 进行中
	@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.symptoms like ?3 and a.status = 0 and b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorIngList(String uid, long id,String title, Pageable pageRequest);
	//名医咨询 -全部 带symptoms 进行中
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.symptoms like ?2 and a.status = 0 and  b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorIngList(String uid,String title, 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.id < ?2 and a.status = 0 and  b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorIngNoTitleList(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 b.reply = 1 and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorIngNoTitleList(String uid, Pageable pageRequest);
    // 最近24小时内未回复的项目
    @Query("FROM ConsultTeam a where CURRENT_TIME - a.czrq < 86400 and a.status = 0 order by a.czrq desc")
    Page<ConsultTeam> getUnresponsedConsultIn24Hours(Pageable pageable);
    // 更新超过24小时未回复的项目,多加一分钟,防止过于频繁更新
    @Modifying
    @Query("UPDATE ConsultTeam a set a.status = -2 where CURRENT_TIME - a.czrq > 87840")
    void updateUnresponsedConsultOver24Hours();
}

+ 8 - 2
src/main/java/com/yihu/wlyy/repository/doctor/DoctorDao.java

@ -120,9 +120,15 @@ public interface DoctorDao extends PagingAndSortingRepository<Doctor, Long>, Jpa
    List<Doctor> findByIsFamous(Integer isFamous);
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1 and p.name like ?2 order by w.timesRemain desc")
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1 and p.name like ?2 and w.timesRemain > 0 order by w.timesRemain desc")
    Page<Doctor> famousDoctorList(String date, String name, Pageable pageRequest);
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1 order by w.timesRemain desc")
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1  and w.timesRemain > 0  order by w.timesRemain desc")
    Page<Doctor> famousDoctorList(String date, Pageable pageRequest);
    @Query("select p from Doctor p where p.isFamous=1 and p.name like ?1 ")
    Page<Doctor> doctorFamousDoctorList(String name, Pageable pageRequest);
    @Query("select p from Doctor p where p.isFamous=1 ")
    Page<Doctor> doctorFamousDoctorList(Pageable pageRequest);
}

+ 1 - 1
src/main/java/com/yihu/wlyy/repository/doctor/DoctorTeamMemberDao.java

@ -57,5 +57,5 @@ public interface DoctorTeamMemberDao extends PagingAndSortingRepository<DoctorTe
     */
    @Query("SELECT case when count(a) > 0 THEN true else false END FROM DoctorTeamMember a WHERE a.signType = 1 AND a" +
            ".memberCode = :memberCode")
    Boolean isSanShiSigning(@Param(":memberCode") String doctorCode);
    Boolean isSanShiSigning(@Param("memberCode") String doctorCode);
}

+ 9 - 0
src/main/java/com/yihu/wlyy/repository/message/MessageDao.java

@ -6,6 +6,9 @@
package com.yihu.wlyy.repository.message;
import com.yihu.wlyy.entity.message.Message;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
@ -16,9 +19,15 @@ public interface MessageDao extends PagingAndSortingRepository<Message, Long>, J
    @Query("select count(a) from Message a where a.type =1 and a.read= 1 and a.receiver=?1 ")
    int amountUnreadByReceiver(String doctor);
    @Query("select a from Message a where a.type =1 and a.read= 1 and a.receiver=?1 order by a.czrq desc")
    Page<Message> amountUnreadLastByReceiver(String doctor, Pageable pageRequest);
    @Query("select count(a) from Message a where (a.type =2 or a.type =3) and a.read= 1 and a.receiver=?1 ")
    int amountUnreadHealthByReceiver(String doctor);
    @Query("select a from Message a where (a.type =2 or a.type =3) and a.read= 1 and a.receiver=?1 order by a.czrq desc")
    Page<Message> amountUnreadHealthLastByReceiver(String doctor,Pageable pageRequest);
    @Modifying
    @Query("update Message a set a.read = 0,a.over='0' where a.id = ?1")
    int read(long msgid);

+ 2 - 0
src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java

@ -32,6 +32,8 @@ public interface SignFamilyDao extends PagingAndSortingRepository<SignFamily, Lo
	SignFamily findByCode(String code);
	SignFamily findByCodeAndType(String code,Integer type);
	SignFamily findByFamilyCode(String familyCode);
	@Query("select a from SignFamily a where a.doctor = ?1 and a.patient = ?2 and a.type = 2 and a.status >= 0")

+ 810 - 722
src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java

@ -45,7 +45,7 @@ import com.yihu.wlyy.util.MessageType;
/**
 * 網絡諮詢类.
 * 
 *
 * @author George
 */
// Spring Service Bean的标识.
@ -53,729 +53,817 @@ import com.yihu.wlyy.util.MessageType;
@Transactional(rollbackFor = Exception.class)
public class ConsultTeamService extends ConsultService {
	private Clock clock = Clock.DEFAULT;
	// 咨询详细记录
	@Autowired
	private ConsultTeamLogDao consultTeamLogDao;
	@Autowired
	private ConsultTeamDoctorDao consultTeamDoctorDao;
	@Autowired
	private SignFamilyDao signFamilyDao;
	@Autowired
	private DoctorPatientDao doctorPatientDao;
	@Autowired
	private DoctorTeamDao doctorTeamDao;
	@Autowired
    private Clock clock = Clock.DEFAULT;
    // 咨询详细记录
    @Autowired
    private ConsultTeamLogDao consultTeamLogDao;
    @Autowired
    private ConsultTeamDoctorDao consultTeamDoctorDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorPatientDao doctorPatientDao;
    @Autowired
    private DoctorTeamDao doctorTeamDao;
    @Autowired
    private ConsultTeamDao consultTeamDao;
	@Autowired
	private DoctorTeamMemberDao doctorTeamDoctor;
	@Autowired
	private JdbcTemplate jdbcTemplate;
	/**
	 * 查询患者是否还有未结束的三师咨询
	 * @param patient
	 * @return
	 */
	public boolean exist(String patient,Integer type) {
		int count = consultTeamDao.countByPatient(patient, type);
		return count > 0;
	}
	/**
	 * 查詢醫生網絡諮詢列表
	 * @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的 5 名医咨询 全部  6 名医咨询 进行中 7 名医咨询 已结束
	 * @param id
	 * @param pagesize 每页显示数,默认为10
	 * @return
	 */
	public Page<ConsultTeam> findByDoctor(String uid, int type, long id, int pagesize,String title) {
		if (id < 0) {
			id = 0;
		}
		if (pagesize <= 0) {
			pagesize = 10;
		}
		switch (type) {
		case 0:
			// 全部
			return findByDoctorType0(uid, id, pagesize);
		case 1:
			// 咨询我的
			return findByDoctorType1(uid, type, id, pagesize);
		case 2:
			// 我感兴趣的
			return findByDoctorType2(uid, type, id, pagesize);
		case 3:
			// 我回复的
			return findByDoctorType3(uid, id, pagesize);
		case 4:
			// 已完成的
			return findByDoctorType4(uid, id, pagesize);
		case 5:
			// 5 名医咨询 全部
			return findByDoctorType5(uid, id, pagesize,title);
		case 6:
			//6 名医咨询 进行中
			return findByDoctorType6(uid, 0, id, pagesize,title);
		case 7:
			//7 名医咨询 已结束
			return findByDoctorType6(uid, 1, id, pagesize,title);
		}
		return null;
	}
	private Page<ConsultTeam> findByDoctorType5(String uid,  long id, int pagesize,String title) {
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		if(StringUtils.isNoneEmpty(title)){
			title="%"+title+"%";
			if (id > 0) {
				return consultTeamDao.findFamousDoctorAllList(uid, id,title, pageRequest);
			} else {
				return consultTeamDao.findFamousDoctorAllList(uid,title, pageRequest);
			}
		}else{
			if (id > 0) {
				return consultTeamDao.findFamousDoctorAllList(uid, id, pageRequest);
			} else {
				return consultTeamDao.findFamousDoctorAllList(uid, pageRequest);
			}
		}
	}
	private Page<ConsultTeam> findByDoctorType6(String uid, int type, long id, int pagesize,String title) {
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		if(StringUtils.isNoneEmpty(title)){
			title="%"+title+"%";
			if (id > 0) {
				return consultTeamDao.findFamousDoctorDoingList(uid, id,title,type, pageRequest);
			} else {
				return consultTeamDao.findFamousDoctorDoingList(uid, title,type,pageRequest);
			}
		}else{
			if (id > 0) {
				return consultTeamDao.findFamousDoctorDoingList(uid, id,type, pageRequest);
			} else {
				return consultTeamDao.findFamousDoctorDoingList(uid,type, pageRequest);
			}
		}
	}
	/**
	 * 查询全部咨询记录
	 * @param uid
	 * @param id
	 * @param pagesize
	 * @return
	 */
	public Page<ConsultTeam> findByDoctorType0(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.findDoctorList(uid, id, pageRequest);
		} else {
			return consultTeamDao.findDoctorList(uid, pageRequest);
		}
	}
	/**
	 * 指定医生三师咨询列表查询
	 * @param uid 医生标识
	 * @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
	 * @param pagesize
	 * @return
	 */
	public Page<ConsultTeam> findByDoctorType1(String uid, int type, long id, int pagesize) {
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		if (id > 0) {
			return consultTeamDao.findDoctorPointList(uid, id, pageRequest);
		} else {
			return consultTeamDao.findDoctorPointList(uid, pageRequest);
		}
	}
	/**
	 * 公共三师咨询列表查询
	 * @param uid 医生标识
	 * @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
	 * @param pagesize
	 * @return
	 */
	public Page<ConsultTeam> findByDoctorType2(String uid, int type, long id, int pagesize) {
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		// 设置查询条件
		Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
		// 未指定医生
		filters.put("type", new SearchFilter("type", Operator.EQ, 0));
		if (id > 0) {
			filters.put("id", new SearchFilter("id", Operator.LT, id));
		}
		// 未回复
		filters.put("status", new SearchFilter("status", Operator.EQ, 0));
		// 未作废
		filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
		Specification<ConsultTeam> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeam.class);
		return consultTeamDao.findAll(spec, pageRequest);
	}
	/**
	 * 医生参与过的未结束的三师咨询列表查询
	 * @param uid
	 * @param pagesize
	 * @return
	 */
	public Page<ConsultTeam> findByDoctorType3(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.findDoctorJoinList(uid, id, pageRequest);
		} else {
			return consultTeamDao.findDoctorJoinList(uid, pageRequest);
		}
	}
	/**
	 * 医生参与过的已结束的三师咨询列表查询
	 * @param uid
	 * @param pagesize
	 * @return
	 */
	public Page<ConsultTeam> findByDoctorType4(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.findDoctorFinishList(uid, id, pageRequest);
		} else {
			return consultTeamDao.findDoctorFinishList(uid, pageRequest);
		}
	}
	/**
	 * 网络咨询咨询日志查询
	 * @param consult 咨询标识
	 * @param pagesize 每页显示数,默认为10
	 * @return
	 */
	public Page<ConsultTeamLog> findLogByConsult(String consult, long id, int pagesize) {
		if (id < 0) {
			id = 0;
		}
		// 设置查询条件
		Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
		filters.put("consult", new SearchFilter("consult", Operator.EQ, consult));
		if (id > 0) {
			if(pagesize>0)
				filters.put("id", new SearchFilter("id", Operator.LT, id));
			else
				filters.put("id", new SearchFilter("id", Operator.GT, id));
		}
		filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
		Specification<ConsultTeamLog> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeamLog.class);
		if(pagesize <= 0){
			Page<ConsultTeamLog> p = new PageImpl<>(consultTeamLogDao.findAll(spec));
			return p;
		}
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		return consultTeamLogDao.findAll(spec, pageRequest);
	}
	/**
	 * 批量回复
	 * @param logs
	 * @return
	 */
	public void reply(List<ConsultTeamLog> logs, String patient) {
		for (ConsultTeamLog log : logs) {
			reply(log, patient, null, log.getType());
		}
	}
	/**
	 * 添加咨询记录
	 * @param log 日志对象
	 * @param type 类型,0问,1回复,2追问,3评价
	 * @return
	 */
	public ConsultTeamLog reply(ConsultTeamLog log, String patient, String teamOrDoctor, int type) {
		log.setCzrq(clock.getCurrentDate());
		// 保存咨询记录
		ConsultTeamLog temp = consultTeamLogDao.save(log);
		if (temp != null) {
			// 发送消息
			if (type == 1) {
				// 医生回复,给患者发消息
				// sendMessage(patient, teamOrDoctor, "三师咨询", log.getDoctorName() + "回复了您的咨询", log.getConsult(), 214, 1, 0, 0);
				// 患者未读数量+1
				consultTeamDao.increasePatientRead(log.getConsult());
				// 医生有回复
				consultTeamDoctorDao.updateReply(log.getConsult(), teamOrDoctor);
				//shenzaixin v1.2.0 推送消息给患者
				HttpUtil.sendWeixinWebsocketMsg(patient,"{busiType:'qianyuezixun',msgid:'"+log.getId()+"'}");
			} else if (type == 0 || type == 2) {
				// 查询相关联的医生
				Iterable<ConsultTeamDoctor> iterable = consultTeamDoctorDao.findByConsult(log.getConsult());
				if (iterable != null && iterable.iterator() != null && iterable.iterator().hasNext()) {
					Iterator<ConsultTeamDoctor> iterator = iterable.iterator();
					while (iterator.hasNext()) {
						// 患者提问或追问,给医生发消息
						ConsultTeamDoctor ctd = iterator.next();
						if (ctd == null) {
							continue;
						}
						// 推送消息给医生
						PushMsgTask.getInstance().put(ctd.getTo(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.D_CT_02.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.您有新的消息.name(), temp.getConsult());
					}
				}
				// 医生未读数量+1
				consultTeamDao.increaseDoctorRead(log.getConsult());
			}
		}
		return temp;
	}
	/**
	 * 添加三师咨询
	 * @param ct 三师咨询对象
	 * @param patient 患者标识
	 * @return
	 * @throws Exception
	 */
	public int addTeamConsult(ConsultTeam ct, String patient) throws Exception {
		// 咨询三师
		if (ct.getType() == 1) {
			// 查询三师签约信息
			SignFamily sc = signFamilyDao.findBySanshiPatientYes(patient);
			if (sc == null) {
				// 不存在三师签约
				return -2;
			}
			ct.setTeam(sc.getTeamCode());
			// 设置健康管理师,三师咨询默认给健康管理师处理
			//查找病人所在的团队
			DoctorTeam doctorTeam=doctorTeamDao.findBySanshiParientCode(patient);
			//得到团队的健康管理师
			DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(),3);
			// 设置家庭医生
			ct.setDoctor( doctorTeamMember.getMemberCode());
		} else if (ct.getType() == 2) {
			// 咨询家庭医生
			SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
			if (sf == null) {
				// 不存在家庭签约
				return -1;
			}
			// 设置健康管理师,家庭医生咨询默认给健康管理师处理
			//查找病人所在的团队
			DoctorTeam doctorTeam=doctorTeamDao.findByParientCode(patient);
			//得到团队的健康管理师
			DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(),3);
			// 设置家庭医生
			ct.setDoctor( doctorTeamMember.getMemberCode());
		}
		// 设置患者信息
		ct.setPatient(patient);
		// 查询患者信息
		Patient tempPatient = patientDao.findByCode(patient);
		// 设置患者姓名
		ct.setName(tempPatient.getName());
		// 设置患者生日
		ct.setBirthday(tempPatient.getBirthday());
		//新增性别
		ct.setSex(tempPatient.getSex());
		// 设置患者头像
		ct.setPhoto(tempPatient.getPhoto());
		// 设置操作日期
		ct.setCzrq(new Date());
		ct.setDel("1");
		ct.setStatus(0);
		// 医生未读数量为1
		ct.setDoctorRead(1);
		// 添加咨询记录
		Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
		// 设置咨询标识
		ct.setConsult(consult.getCode());
		// 保存医生咨询信息
		if (consultTeamDao.save(ct) == null) {
			throw new Exception("保存失败!");
		}
		// 添加咨询转发记录
		ConsultTeamDoctor cd = new ConsultTeamDoctor();
		cd.setConsult(consult.getCode());
		cd.setDel("1");
		cd.setCzrq(new Date());
		cd.setTo(ct.getDoctor());
		consultTeamDoctorDao.save(cd);
		// 添加医生咨询日志
		addLogs(ct);
		return 1;
	}
	/**
	 * 添加三师咨询日志
	 * @param ct
	 * @throws Exception
	 */
	private void addLogs(ConsultTeam ct) throws Exception {
		List<ConsultTeamLog> logs = new ArrayList<ConsultTeamLog>();
		// 添加问题咨询日志
		String content ="";
			content = "咨询问题:" + (StringUtils.isEmpty(ct.getSymptoms()) ? "无" : ct.getSymptoms());
		// 生成提问日志,并推送相关消息
		ConsultTeamLog infoLog = new ConsultTeamLog();
		infoLog.setConsult(ct.getConsult());
		infoLog.setContent(content);
		infoLog.setDel("1");
		infoLog.setType(0);
		infoLog.setChatType(1);
		infoLog.setCzrq(new Date());
		logs.add(infoLog);
		// 图片日志
		if (StringUtils.isNotEmpty(ct.getImages())) {
			String[] images = ct.getImages().split(",");
			for (String image : images) {
				if (StringUtils.isNoneEmpty(image)) {
					ConsultTeamLog imgLog = new ConsultTeamLog();
					// 设置咨询标识
					imgLog.setConsult(ct.getConsult());
					// 设置图片URL
					imgLog.setContent(image);
					imgLog.setDel("1");
					infoLog.setType(0);
					imgLog.setCzrq(new Date());
					// 图片类型
					imgLog.setChatType(2);
					// 添加到待保存队列
					logs.add(imgLog);
				}
			}
		}
		// 语音日志
		if (StringUtils.isNotEmpty(ct.getVoice())) {
			ConsultTeamLog voiceLog = new ConsultTeamLog();
			// 设置咨询标识
			voiceLog.setConsult(ct.getConsult());
			// 设置语音URL
			voiceLog.setContent(ct.getVoice());
			voiceLog.setDel("1");
			infoLog.setType(0);
			// 语音类型
			voiceLog.setChatType(3);
			voiceLog.setCzrq(new Date());
			// 添加到待保存队列
			logs.add(voiceLog);
		}
		if (!logs.isEmpty()) {
			Iterable<ConsultTeamLog> iterable = consultTeamLogDao.save(logs);
			if (iterable == null || iterable.iterator() == null || !iterable.iterator().hasNext()) {
				// 日志保存失败
				throw new Exception("consult team log save failed!");
			}
		}
		// 患者提问或追问,给医生发消息
		// sendMessage(ct.getDoctor(), ct.getPatient(), "三师咨询", "您有新的三师咨询消息", ct.getConsult(), 116, 1, 0, 0);
	}
	/**
	 * 查询咨询列表
	 * @param patientCode 患者标志
	 * @param status 咨询状态(0未结束,1已结束,-1 已取消)
	 * @param pageSize 页数
	 * @return
	 */
	public Page<ConsultTeam> findByPatient(String patientCode, int status, long id, int pageSize) {
		if (id < 0) {
			id = 0;
		}
		if (pageSize <= 0) {
			pageSize = 10;
		}
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pageSize, sort);
		Page<ConsultTeam> list = null;
		switch (status) {
		case 0:
			// 未结束
			if (id > 0) {
				list = consultTeamDao.findNotFinishedBypatient(patientCode, id, pageRequest);
			} else {
				list = consultTeamDao.findNotFinishedBypatient(patientCode, pageRequest);
			}
			break;
		case 1:
			// 已结束
			if (id > 0) {
				list = consultTeamDao.findFinishedBypatient(patientCode, id, pageRequest);
			} else {
				list = consultTeamDao.findFinishedBypatient(patientCode, pageRequest);
			}
			break;
		case -1:
			// 已取消
			if (id > 0) {
				list = consultTeamDao.findCancelBypatient(patientCode, id, pageRequest);
			} else {
				list = consultTeamDao.findCancelBypatient(patientCode, pageRequest);
			}
			break;
		}
		return list;
	}
	/**
	 * 医生关闭三师咨询
	 * @param consult 三师咨询标识
	 * @return
	 */
	public int finish(String consult) {
		return consultTeamDao.updateStatusByConsult(consult);
	}
	/**
	 * 设置咨询已读
	 *
	 * @param consult
	 * @return
	 */
	public int readMessage(String consult){
    @Autowired
    private DoctorTeamMemberDao doctorTeamDoctor;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 查询患者是否还有未结束的三师咨询
     *
     * @param patient
     * @return
     */
    public boolean exist(String patient, Integer type) {
        int count = consultTeamDao.countByPatient(patient, type);
        return count > 0;
    }
    /**
     * 查詢醫生網絡諮詢列表
     *
     * @param type     咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的 5 名医咨询 全部  6 名医咨询 进行中 7 名医咨询 已结束 8名医咨询 待处理 9咨询我的三师 + 家庭 + 名医
     * @param id
     * @param pagesize 每页显示数,默认为10
     * @return
     */
    public Page<ConsultTeam> findByDoctor(String uid, int type, long id, int pagesize, String title) {
        if (id < 0) {
            id = 0;
        }
        if (pagesize <= 0) {
            pagesize = 10;
        }
        switch (type) {
            case 0:
                // 全部
                return findByDoctorType0(uid, id, pagesize);
            case 1:
                // 咨询我的
                return findByDoctorType1(uid, type, id, pagesize);
            case 2:
                // 我感兴趣的
                return findByDoctorType2(uid, type, id, pagesize);
            case 3:
                // 我回复的
                return findByDoctorType3(uid, id, pagesize);
            case 4:
                // 已完成的
                return findByDoctorType4(uid, id, pagesize);
            case 5:
                // 5 名医咨询 全部
                return findByDoctorType5(uid, id, pagesize, title);
            case 6:
                //6 名医咨询 进行中
                return findByDoctorTypeSix(uid, id, pagesize, title);
            case 7:
                //7 名医咨询 已结束
                return findByDoctorType6(uid, 1, id, pagesize, title);
            case 8:
                return findByDoctorType8(uid, id, pagesize, title);
            case 9:
                return findByDoctorType9(uid, id, pagesize);
        }
        return null;
    }
    private Page<ConsultTeam> findByDoctorTypeSix(String uid,long id,int pagesize,String title){
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (StringUtils.isNoneEmpty(title)) {
            title = "%" + title + "%";
            if (id > 0) {
                return consultTeamDao.findFamousDoctorIngList(uid, id, title, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorIngList(uid, title, pageRequest);
            }
        } else {
            if (id > 0) {
                return consultTeamDao.findFamousDoctorIngNoTitleList(uid, id, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorIngNoTitleList(uid, pageRequest);
            }
        }
    }
    private Page<ConsultTeam> findByDoctorType8(String uid,long id,int pagesize,String title){
        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 (StringUtils.isNoneEmpty(title)) {
            title = "%" + title + "%";
            if (id > 0) {
                return consultTeamDao.findFamousDoctorUnReplyReadList(uid, id, title, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorUnReplyReadList(uid, title, pageRequest);
            }
        } else {
            if (id > 0) {
                return consultTeamDao.findFamousDoctorUnReplyReadNoTitleList(uid, id, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorUnReplyReadNoTitleList(uid, pageRequest);
            }
        }
    }
    private Page<ConsultTeam> findByDoctorType5(String uid, long id, int pagesize, String title) {
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (StringUtils.isNoneEmpty(title)) {
            title = "%" + title + "%";
            if (id > 0) {
                return consultTeamDao.findFamousDoctorAllList(uid, id, title, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorAllList(uid, title, pageRequest);
            }
        } else {
            if (id > 0) {
                return consultTeamDao.findFamousDoctorAllList(uid, id, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorAllList(uid, pageRequest);
            }
        }
    }
    private Page<ConsultTeam> findByDoctorType6(String uid, int type, long id, int pagesize, String title) {
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (StringUtils.isNoneEmpty(title)) {
            title = "%" + title + "%";
            if (id > 0) {
                return consultTeamDao.findFamousDoctorDoingList(uid, id, title, type, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorDoingList(uid, title, type, pageRequest);
            }
        } else {
            if (id > 0) {
                return consultTeamDao.findFamousDoctorDoingList(uid, id, type, pageRequest);
            } else {
                return consultTeamDao.findFamousDoctorDoingList(uid, type, pageRequest);
            }
        }
    }
    /**
     * 查询全部咨询记录
     *
     * @param uid
     * @param id
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findByDoctorType0(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.findDoctorList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorList(uid, pageRequest);
        }
    }
    /**
     * 指定医生三师咨询列表查询
     *
     * @param uid      医生标识
     * @param type     咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findByDoctorType1(String uid, int type, long id, int pagesize) {
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (id > 0) {
            return consultTeamDao.findDoctorPointList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorPointList(uid, pageRequest);
        }
    }
    /**
     * 指定医生三师咨询列表查询
     *
     * @param uid      医生标识
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findByDoctorType9(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.findDoctorAllList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorAllList(uid, pageRequest);
        }
    }
    /**
     * 公共三师咨询列表查询
     *
     * @param uid      医生标识
     * @param type     咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findByDoctorType2(String uid, int type, long id, int pagesize) {
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        // 设置查询条件
        Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
        // 未指定医生
        filters.put("type", new SearchFilter("type", Operator.EQ, 0));
        if (id > 0) {
            filters.put("id", new SearchFilter("id", Operator.LT, id));
        }
        // 未回复
        filters.put("status", new SearchFilter("status", Operator.EQ, 0));
        // 未作废
        filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
        Specification<ConsultTeam> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeam.class);
        return consultTeamDao.findAll(spec, pageRequest);
    }
    /**
     * 医生参与过的未结束的三师咨询列表查询
     *
     * @param uid
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findByDoctorType3(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.findDoctorJoinList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorJoinList(uid, pageRequest);
        }
    }
    /**
     * 医生参与过的已结束的三师咨询列表查询
     *
     * @param uid
     * @param pagesize
     * @return
     */
    public Page<ConsultTeam> findByDoctorType4(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.findDoctorFinishList(uid, id, pageRequest);
        } else {
            return consultTeamDao.findDoctorFinishList(uid, pageRequest);
        }
    }
    /**
     * 网络咨询咨询日志查询
     *
     * @param consult  咨询标识
     * @param pagesize 每页显示数,默认为10
     * @return
     */
    public Page<ConsultTeamLog> findLogByConsult(String consult, long id, int pagesize) {
        if (id < 0) {
            id = 0;
        }
        // 设置查询条件
        Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
        filters.put("consult", new SearchFilter("consult", Operator.EQ, consult));
        if (id > 0) {
            if (pagesize > 0)
                filters.put("id", new SearchFilter("id", Operator.LT, id));
            else
                filters.put("id", new SearchFilter("id", Operator.GT, id));
        }
        filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
        Specification<ConsultTeamLog> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeamLog.class);
        if (pagesize <= 0) {
            Page<ConsultTeamLog> p = new PageImpl<>(consultTeamLogDao.findAll(spec));
            return p;
        }
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        return consultTeamLogDao.findAll(spec, pageRequest);
    }
    /**
     * 批量回复
     *
     * @param logs
     * @return
     */
    public void reply(List<ConsultTeamLog> logs, String patient) {
        for (ConsultTeamLog log : logs) {
            reply(log, patient, null, log.getType());
        }
    }
    /**
     * 添加咨询记录
     *
     * @param log  日志对象
     * @param type 类型,0问,1回复,2追问,3评价
     * @return
     */
    public ConsultTeamLog reply(ConsultTeamLog log, String patient, String teamOrDoctor, int type) {
        log.setCzrq(clock.getCurrentDate());
        // 保存咨询记录
        ConsultTeamLog temp = consultTeamLogDao.save(log);
        if (temp != null) {
            // 发送消息
            if (type == 1) {
                // 医生回复,给患者发消息
                // sendMessage(patient, teamOrDoctor, "三师咨询", log.getDoctorName() + "回复了您的咨询", log.getConsult(), 214, 1, 0, 0);
                // 患者未读数量+1
                consultTeamDao.increasePatientRead(log.getConsult());
                // 医生有回复
                consultTeamDoctorDao.updateReply(log.getConsult(), teamOrDoctor);
                //shenzaixin v1.2.0 推送消息给患者
                HttpUtil.sendWeixinWebsocketMsg(patient, "{busiType:'qianyuezixun',msgid:'" + log.getId() + "'}");
            } else if (type == 0 || type == 2) {
                // 查询相关联的医生
                Iterable<ConsultTeamDoctor> iterable = consultTeamDoctorDao.findByConsult(log.getConsult());
                if (iterable != null && iterable.iterator() != null && iterable.iterator().hasNext()) {
                    Iterator<ConsultTeamDoctor> iterator = iterable.iterator();
                    while (iterator.hasNext()) {
                        // 患者提问或追问,给医生发消息
                        ConsultTeamDoctor ctd = iterator.next();
                        if (ctd == null) {
                            continue;
                        }
                        // 推送消息给医生
                        PushMsgTask.getInstance().put(ctd.getTo(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.D_CT_02.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.您有新的消息.name(), temp.getConsult());
                    }
                }
                // 医生未读数量+1
                consultTeamDao.increaseDoctorRead(log.getConsult());
            }
        }
        return temp;
    }
    /**
     * 添加三师咨询
     *
     * @param ct      三师咨询对象
     * @param patient 患者标识
     * @return
     * @throws Exception
     */
    public int addTeamConsult(ConsultTeam ct, String patient) throws Exception {
        // 咨询三师
        if (ct.getType() == 1) {
            // 查询三师签约信息
            SignFamily sc = signFamilyDao.findBySanshiPatientYes(patient);
            if (sc == null) {
                // 不存在三师签约
                return -2;
            }
            ct.setTeam(sc.getTeamCode());
            // 设置健康管理师,三师咨询默认给健康管理师处理
            //查找病人所在的团队
            DoctorTeam doctorTeam = doctorTeamDao.findBySanshiParientCode(patient);
            //得到团队的健康管理师
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
        } else if (ct.getType() == 2) {
            // 咨询家庭医生
            SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
            if (sf == null) {
                // 不存在家庭签约
                return -1;
            }
            // 设置健康管理师,家庭医生咨询默认给健康管理师处理
            //查找病人所在的团队
            DoctorTeam doctorTeam = doctorTeamDao.findByParientCode(patient);
            //得到团队的健康管理师
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
        }
        // 设置患者信息
        ct.setPatient(patient);
        // 查询患者信息
        Patient tempPatient = patientDao.findByCode(patient);
        // 设置患者姓名
        ct.setName(tempPatient.getName());
        // 设置患者生日
        ct.setBirthday(tempPatient.getBirthday());
        //新增性别
        ct.setSex(tempPatient.getSex());
        // 设置患者头像
        ct.setPhoto(tempPatient.getPhoto());
        // 设置操作日期
        ct.setCzrq(new Date());
        ct.setDel("1");
        ct.setStatus(0);
        // 医生未读数量为1
        ct.setDoctorRead(1);
        // 添加咨询记录
        Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
        // 设置咨询标识
        ct.setConsult(consult.getCode());
        // 保存医生咨询信息
        if (consultTeamDao.save(ct) == null) {
            throw new Exception("保存失败!");
        }
        // 添加咨询转发记录
        ConsultTeamDoctor cd = new ConsultTeamDoctor();
        cd.setConsult(consult.getCode());
        cd.setDel("1");
        cd.setCzrq(new Date());
        cd.setTo(ct.getDoctor());
        consultTeamDoctorDao.save(cd);
        // 添加医生咨询日志
        addLogs(ct);
        return 1;
    }
    /**
     * 添加三师咨询日志
     *
     * @param ct
     * @throws Exception
     */
    private void addLogs(ConsultTeam ct) throws Exception {
        List<ConsultTeamLog> logs = new ArrayList<ConsultTeamLog>();
        // 添加问题咨询日志
        String content = "";
        content = "咨询问题:" + (StringUtils.isEmpty(ct.getSymptoms()) ? "无" : ct.getSymptoms());
        // 生成提问日志,并推送相关消息
        ConsultTeamLog infoLog = new ConsultTeamLog();
        infoLog.setConsult(ct.getConsult());
        infoLog.setContent(content);
        infoLog.setDel("1");
        infoLog.setType(0);
        infoLog.setChatType(1);
        infoLog.setCzrq(new Date());
        logs.add(infoLog);
        // 图片日志
        if (StringUtils.isNotEmpty(ct.getImages())) {
            String[] images = ct.getImages().split(",");
            for (String image : images) {
                if (StringUtils.isNoneEmpty(image)) {
                    ConsultTeamLog imgLog = new ConsultTeamLog();
                    // 设置咨询标识
                    imgLog.setConsult(ct.getConsult());
                    // 设置图片URL
                    imgLog.setContent(image);
                    imgLog.setDel("1");
                    infoLog.setType(0);
                    imgLog.setCzrq(new Date());
                    // 图片类型
                    imgLog.setChatType(2);
                    // 添加到待保存队列
                    logs.add(imgLog);
                }
            }
        }
        // 语音日志
        if (StringUtils.isNotEmpty(ct.getVoice())) {
            ConsultTeamLog voiceLog = new ConsultTeamLog();
            // 设置咨询标识
            voiceLog.setConsult(ct.getConsult());
            // 设置语音URL
            voiceLog.setContent(ct.getVoice());
            voiceLog.setDel("1");
            infoLog.setType(0);
            // 语音类型
            voiceLog.setChatType(3);
            voiceLog.setCzrq(new Date());
            // 添加到待保存队列
            logs.add(voiceLog);
        }
        if (!logs.isEmpty()) {
            Iterable<ConsultTeamLog> iterable = consultTeamLogDao.save(logs);
            if (iterable == null || iterable.iterator() == null || !iterable.iterator().hasNext()) {
                // 日志保存失败
                throw new Exception("consult team log save failed!");
            }
        }
        // 患者提问或追问,给医生发消息
        // sendMessage(ct.getDoctor(), ct.getPatient(), "三师咨询", "您有新的三师咨询消息", ct.getConsult(), 116, 1, 0, 0);
    }
    /**
     * 查询咨询列表
     *
     * @param patientCode 患者标志
     * @param status      咨询状态(0未结束,1已结束,-1 已取消)
     * @param pageSize    页数
     * @return
     */
    public Page<ConsultTeam> findByPatient(String patientCode, int status, long id, int pageSize) {
        if (id < 0) {
            id = 0;
        }
        if (pageSize <= 0) {
            pageSize = 10;
        }
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pageSize, sort);
        Page<ConsultTeam> list = null;
        switch (status) {
            case 0:
                // 未结束
                if (id > 0) {
                    list = consultTeamDao.findNotFinishedBypatient(patientCode, id, pageRequest);
                } else {
                    list = consultTeamDao.findNotFinishedBypatient(patientCode, pageRequest);
                }
                break;
            case 1:
                // 已结束
                if (id > 0) {
                    list = consultTeamDao.findFinishedBypatient(patientCode, id, pageRequest);
                } else {
                    list = consultTeamDao.findFinishedBypatient(patientCode, pageRequest);
                }
                break;
            case -1:
                // 已取消
                if (id > 0) {
                    list = consultTeamDao.findCancelBypatient(patientCode, id, pageRequest);
                } else {
                    list = consultTeamDao.findCancelBypatient(patientCode, pageRequest);
                }
                break;
        }
        return list;
    }
    /**
     * 医生关闭三师咨询
     *
     * @param consult 三师咨询标识
     * @return
     */
    public int finish(String consult) {
        return consultTeamDao.updateStatusByConsult(consult);
    }
    /**
     * 设置咨询已读
     *
     * @param consult
     * @return
     */
    public int readMessage(String consult) {
        return consultTeamDao.updateReadedByConsult(consult);
	}
	/**
	 * 取消三师咨询
	 * @param consult
	 * @return
	 */
	public int cancel(String consult) {
		return consultTeamDao.cancel(consult);
	}
	public ConsultTeam findByCode(String code) {
		return consultTeamDao.findByConsult(code);
	}
	/**
	 * 三师咨询转接医生
	 * @param from 转出医生标识
	 * @param to 转入医生标识
	 * @param consult 三师咨询标识
	 * @return
	 */
	public void transfer(String from, String to, String consult) {
		// 检查是否存在
		if (consultTeamDoctorDao.isExist(consult, to) == 0) {
			// 查询医生信息
			Doctor d = doctorDao.findByCode(from);
			// 再保存
			ConsultTeamDoctor cd = new ConsultTeamDoctor();
			cd.setConsult(consult);
			cd.setDel("1");
			cd.setCzrq(new Date());
			cd.setFrom(d.getCode());
			cd.setFromName(d.getName());
			cd.setTo(to);
			consultTeamDoctorDao.save(cd);
		}
	}
	/**
	 * 查询患者视频和三师咨询记录
	 * @param patient 患者标识
	 * @param id
	 * @param pagesize
	 * @return
	 */
	public Page<Consult> findConsultRecordByPatientType(String patient, long id, int pagesize) {
		if (pagesize <= 0) {
			pagesize = 10;
		}
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		// 设置查询条件
		Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
		filters.put("patient", new SearchFilter("patient", Operator.EQ, patient));
		filters.put("type", new SearchFilter("type", Operator.LT, 3));
		if (id > 0) {
			filters.put("id", new SearchFilter("id", Operator.LT, id));
		}
		// 未作废
		filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
		Specification<Consult> spec = DynamicSpecifications.bySearchFilter(filters.values(), Consult.class);
		return consultDao.findAll(spec, pageRequest);
	}
	/**
	 * 清空医生未读数量
	 * @param consult
	 */
	public void clearDoctorRead(String consult) {
		consultTeamDao.clearDoctorRead(consult);
	}
	/**
	 * 清空患者未读数量
	 * @param consult
	 */
	public void clearPatientRead(String consult) {
		consultTeamDao.clearPatientRead(consult);
	}
	/**
	 * 查询医生的咨询统计
	 *
	 * @param doctorCode
	 * @return
	 */
	public Map<String,Long> getAllCount(String doctorCode) {
		Map<String,Long> result = new HashMap<>();
		//根据医生code查询总咨询数  
		 long allCount=consultTeamDoctorDao.getAllCountByDoctorCode(doctorCode);
		
		//根据医生code查询今日咨询数
		 long todayCount=consultTeamDoctorDao.getTodayCountByDoctorCode(doctorCode);
		result.put("all",allCount);
		result.put("today",todayCount);
		return result;
	}
	/**
	 * 查找未完成咨询
	 *
	 * @param patient
	 * @return
	 */
	public List<ConsultTeam> getUnfinishedConsult(String patient){
		return consultTeamDao.findUnfinishedConsult(patient);
	}
	/**
	 * 查询患者全部的咨询数目
	 * @param patientCode
	 * @return
    }
    /**
     * 取消三师咨询
     *
     * @param consult
     * @return
     */
    public int cancel(String consult) {
        return consultTeamDao.cancel(consult);
    }
    public ConsultTeam findByCode(String code) {
        return consultTeamDao.findByConsult(code);
    }
    /**
     * 三师咨询转接医生
     *
     * @param from    转出医生标识
     * @param to      转入医生标识
     * @param consult 三师咨询标识
     * @return
     */
    public void transfer(String from, String to, String consult) {
        // 检查是否存在
        if (consultTeamDoctorDao.isExist(consult, to) == 0) {
            // 查询医生信息
            Doctor d = doctorDao.findByCode(from);
            // 再保存
            ConsultTeamDoctor cd = new ConsultTeamDoctor();
            cd.setConsult(consult);
            cd.setDel("1");
            cd.setCzrq(new Date());
            cd.setFrom(d.getCode());
            cd.setFromName(d.getName());
            cd.setTo(to);
            consultTeamDoctorDao.save(cd);
        }
    }
    /**
     * 查询患者视频和三师咨询记录
     *
     * @param patient  患者标识
     * @param id
     * @param pagesize
     * @return
     */
    public Page<Consult> findConsultRecordByPatientType(String patient, long id, int pagesize) {
        if (pagesize <= 0) {
            pagesize = 10;
        }
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        // 设置查询条件
        Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
        filters.put("patient", new SearchFilter("patient", Operator.EQ, patient));
        filters.put("type", new SearchFilter("type", Operator.LT, 3));
        if (id > 0) {
            filters.put("id", new SearchFilter("id", Operator.LT, id));
        }
        // 未作废
        filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
        Specification<Consult> spec = DynamicSpecifications.bySearchFilter(filters.values(), Consult.class);
        return consultDao.findAll(spec, pageRequest);
    }
    /**
     * 清空医生未读数量
     *
     * @param consult
     */
    public void clearDoctorRead(String consult) {
        consultTeamDao.clearDoctorRead(consult);
    }
    /**
     * 清空患者未读数量
     *
     * @param consult
     */
    public void clearPatientRead(String consult) {
        consultTeamDao.clearPatientRead(consult);
    }
    /**
     * 查询医生的咨询统计
     *
     * @param doctorCode
     * @return
     */
    public Map<String, Long> getAllCount(String doctorCode) {
        Map<String, Long> result = new HashMap<>();
        //根据医生code查询总咨询数
        long allCount = consultTeamDoctorDao.getAllCountByDoctorCode(doctorCode);
        //根据医生code查询今日咨询数
        long todayCount = consultTeamDoctorDao.getTodayCountByDoctorCode(doctorCode);
        result.put("all", allCount);
        result.put("today", todayCount);
        return result;
    }
    /**
     * 查找未完成咨询
     *
     * @param patient
     * @return
     */
    public List<ConsultTeam> getUnfinishedConsult(String patient) {
        return consultTeamDao.findUnfinishedConsult(patient);
    }
    /**
     * 查询患者全部的咨询数目
     *
     * @param patientCode
     * @return
     */
	public Integer findByDoctorSize(String patientCode,String doctorCode) {
		return consultDao.findByPatient(patientCode,doctorCode);
	}
	public List<Map<String,Object>> getConsultSign(String[] consults){
		String params =  "";
		List<String> paramList = new ArrayList<>();
		for(int i = 0; i < consults.length ; i++){
			params += (i == 0?"?":",?");
		}
		paramList.addAll(Arrays.asList(consults));
		paramList.addAll(Arrays.asList(consults));
		String sqlgp = "select DISTINCT consult,to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
		String sqlgpm = "select DISTINCT to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
		String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm+ ") and quato_code = '1' and level1_type = '1'";
		String sqlQuSum = "select a.consult,sum(ifnull(b.result,0)) sign from ("+ sqlgp +") a left join (" + sqlQu+ ") b on a.to_doctor = b.qkdoctor_code group by a.consult ";
		return jdbcTemplate.queryForList(sqlQuSum,paramList.toArray());
	}
	public ConsultTeamLog oneLog(Long logId) {
		return consultTeamLogDao.findOne(logId);
	}
	public boolean isExistFamousConsult(String uid) {
		ConsultTeam consultTeam= consultTeamDao.findFamousConsultByPatient(uid);
		if(consultTeam!=null){
			return true;
		}else{
			return false;
		}
	}
	public void addFamousTeamConsult(ConsultTeam ct, String uid) throws Exception{
		// 设置患者信息
		ct.setPatient(uid);
		// 查询患者信息
		Patient tempPatient = patientDao.findByCode(uid);
		// 设置患者姓名
		ct.setName(tempPatient.getName());
		// 设置患者生日
		ct.setBirthday(tempPatient.getBirthday());
		//新增性别
		ct.setSex(tempPatient.getSex());
		// 设置患者头像
		ct.setPhoto(tempPatient.getPhoto());
		// 设置操作日期
		ct.setCzrq(new Date());
		ct.setDel("1");
		ct.setStatus(0);
		// 医生未读数量为1
		ct.setDoctorRead(1);
		// 患者未读数量为0
		ct.setPatientRead(0);
		// 添加咨询记录
		Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
		// 设置咨询标识
		ct.setConsult(consult.getCode());
		// 保存医生咨询信息
		if (consultTeamDao.save(ct) == null) {
			throw new Exception("保存失败!");
		}
		// 添加咨询转发记录
		ConsultTeamDoctor cd = new ConsultTeamDoctor();
		cd.setConsult(consult.getCode());
		cd.setDel("1");
		cd.setCzrq(new Date());
		cd.setTo(ct.getDoctor());
		consultTeamDoctorDao.save(cd);
		// 添加医生咨询日志
		addLogs(ct);
	}
	/**
	 * 根据健康管理师和患者 找到正在进行中的咨询
	 * @param patientCode
	 * @param doctor
    public Integer findByDoctorSize(String patientCode, String doctorCode) {
        return consultDao.findByPatient(patientCode, doctorCode);
    }
    public List<Map<String, Object>> getConsultSign(String[] consults) {
        String params = "";
        List<String> paramList = new ArrayList<>();
        for (int i = 0; i < consults.length; i++) {
            params += (i == 0 ? "?" : ",?");
        }
        paramList.addAll(Arrays.asList(consults));
        paramList.addAll(Arrays.asList(consults));
        String sqlgp = "select DISTINCT consult,to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
        String sqlgpm = "select DISTINCT to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
        String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm + ") and quato_code = '1' and level1_type = '1'";
        String sqlQuSum = "select a.consult,sum(ifnull(b.result,0)) sign from (" + sqlgp + ") a left join (" + sqlQu + ") b on a.to_doctor = b.qkdoctor_code group by a.consult ";
        return jdbcTemplate.queryForList(sqlQuSum, paramList.toArray());
    }
    public ConsultTeamLog oneLog(Long logId) {
        return consultTeamLogDao.findOne(logId);
    }
    public boolean isExistFamousConsult(String uid) {
        ConsultTeam consultTeam = consultTeamDao.findFamousConsultByPatient(uid);
        if (consultTeam != null) {
            return true;
        } else {
            return false;
        }
    }
    public void addFamousTeamConsult(ConsultTeam ct, String uid) throws Exception {
        // 设置患者信息
        ct.setPatient(uid);
        // 查询患者信息
        Patient tempPatient = patientDao.findByCode(uid);
        // 设置患者姓名
        ct.setName(tempPatient.getName());
        // 设置患者生日
        ct.setBirthday(tempPatient.getBirthday());
        //新增性别
        ct.setSex(tempPatient.getSex());
        // 设置患者头像
        ct.setPhoto(tempPatient.getPhoto());
        // 设置操作日期
        ct.setCzrq(new Date());
        ct.setDel("1");
        ct.setStatus(0);
        // 医生未读数量为1
        ct.setDoctorRead(1);
        // 患者未读数量为0
        ct.setPatientRead(0);
        // 添加咨询记录
        Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
        // 设置咨询标识
        ct.setConsult(consult.getCode());
        // 保存医生咨询信息
        if (consultTeamDao.save(ct) == null) {
            throw new Exception("保存失败!");
        }
        // 添加咨询转发记录
        ConsultTeamDoctor cd = new ConsultTeamDoctor();
        cd.setConsult(consult.getCode());
        cd.setDel("1");
        cd.setCzrq(new Date());
        cd.setTo(ct.getDoctor());
        consultTeamDoctorDao.save(cd);
        // 添加医生咨询日志
        addLogs(ct);
    }
    /**
     * 根据健康管理师和患者 找到正在进行中的咨询
     *
     * @param patientCode
     * @param doctor
     */
	public ConsultTeam getConsultByPatientAndDoctor(String patientCode, String doctor) {
		ConsultTeam consultTeam= consultTeamDao.findByParientCodeAndSignTypeAndDoctor(patientCode,doctor,2);
		return consultTeam;
	}
	public void transfers(String uid, String doctor, String consult) {
		String[] doctors=doctor.split(",");
		for(int i=0;i<doctors.length;i++){
			transfer(uid,doctors[i],consult);
		}
	}
    public ConsultTeam getConsultByPatientAndDoctor(String patientCode, String doctor) {
        ConsultTeam consultTeam = consultTeamDao.findByParientCodeAndSignTypeAndDoctor(patientCode, doctor, 2);
        return consultTeam;
    }
    public void transfers(String uid, String doctor, String consult) {
        String[] doctors = doctor.split(",");
        for (int i = 0; i < doctors.length; i++) {
            transfer(uid, doctors[i], consult);
        }
    }
}

+ 107 - 0
src/main/java/com/yihu/wlyy/service/app/message/MessageService.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.service.app.message;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ -7,6 +8,7 @@ import javax.transaction.Transactional;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.repository.message.MessageDao;
import com.yihu.wlyy.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
@ -61,6 +63,111 @@ public class MessageService extends BaseService {
		return json;
	}
	/**
	 * 查询医生未读消息和最后消息
	 *
	 * @param doctor
	 * @return
	 */
	public JSONObject findDoctorAllMessage(String doctor){
		// 三师咨询未读消息总数
		int consult = 0;
		JSONObject consultJson =  new JSONObject();
		try {
			consult = consultTeamDao.amountAllDoctorUnread(doctor);
		} catch (Exception e) {
		}
		consultJson.put("amount",consult);
		if(consult > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Object> msgs = consultTeamDao.AllDoctorUnreadLast(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Object msg : msgs){
					Object[] msgArray = (Object[])msg;
					JSONObject msgJson = new JSONObject();
					msgJson.put("msg",msgArray[0].toString() + "向您发来一个咨询");
					msgJson.put("msgTime",msgArray[1] != null? DateUtil.dateToStr((Date) msgArray[1],DateUtil.YYYY_MM_DD):"");
					consultJson.put("lastMessage",msgJson);
				}
			}
		}
		int famousConsult = 0;
		JSONObject famousJson = new JSONObject();
		try {
			famousConsult = consultTeamDao.amountAlFamouslDoctorUnread(doctor);
		} catch (Exception e) {
		}
		famousJson.put("amount",famousConsult);
		if(famousConsult > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Object> msgs = consultTeamDao.AllDoctorFamousUnreadLast(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Object msg : msgs){
					Object[] msgArray = (Object[])msg;
					JSONObject msgJson = new JSONObject();
					msgJson.put("msg",msgArray[0].toString() + "向您发来一个咨询");
					msgJson.put("msgTime",msgArray[1] != null? DateUtil.dateToStr((Date) msgArray[1],DateUtil.YYYY_MM_DD):"");
					famousJson.put("lastMessage",msgJson);
				}
			}
		}
		// 签约未读消息总数
		int sign = messageDao.amountUnreadByReceiver(doctor);
		JSONObject signJson =  new JSONObject();
		signJson.put("amount",sign);
		if(sign > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Message> msgs = messageDao.amountUnreadLastByReceiver(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Message msg : msgs){
					JSONObject msgJson = new JSONObject();
					if(msg.getSignStatus().equals("4")){
						msgJson.put("msg", msg.getSenderName() + "申请与您解除家庭签约");
					}else{
						msgJson.put("msg", msg.getSenderName() + "申请与您签约家庭医生");
					}
					msgJson.put("msgTime",msg.getCzrq() != null? DateUtil.dateToStr(msg.getCzrq(),DateUtil.YYYY_MM_DD):"");
					signJson.put("lastMessage",msgJson);
				}
			}
		}
		// 体征指标未读消息总数
		int healthIndex = messageDao.amountUnreadHealthByReceiver(doctor);
		JSONObject indexJson =  new JSONObject();
		indexJson.put("amount",healthIndex);
		if(sign > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Message> msgs = messageDao.amountUnreadHealthLastByReceiver(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Message msg : msgs){
					JSONObject msgJson = new JSONObject();
					msgJson.put("msg",msg.getContent());
					msgJson.put("msgTime",msg.getCzrq() != null? DateUtil.dateToStr(msg.getCzrq(),DateUtil.YYYY_MM_DD):"");
					indexJson.put("lastMessage",msgJson);
				}
			}
		}
		JSONObject json = new JSONObject();
		json.put("consult", consultJson);
		json.put("famousConsult", famousJson);
		json.put("sign", signJson);
		json.put("healthIndex", indexJson);
		return json;
	}
	/**
	 * 查询健康咨询列表
	 * @param doctor 医生标识

+ 116 - 0
src/main/java/com/yihu/wlyy/service/app/scheduling/DoctorWorkTimeService.java

@ -361,6 +361,122 @@ public class DoctorWorkTimeService extends BaseService {
        return json;
    }
    /**
     * 名医是否在工作查询
     *
     * @param doctor
     * @return
     * @throws Exception
     */
    public JSONObject isFamousDoctorWorking(String doctor) throws Exception{
        JSONObject json = new JSONObject();
        Calendar calendar = Calendar.getInstance();
        int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        if (week == 0) {
            week = 7;
        }
        // 医生工作时间设置
        Map<String, Object> result = findDoctorWeekWork(doctor, String.valueOf(week));
        if (result.get("workTime") == null) {
            // 医生未设置时,默认7*24小时工作
            json.put("status", "1");
            json.put("msg", "医生当前接受咨询");
        } else {
            WlyyDoctorWorkTime doctorWorkTime = (WlyyDoctorWorkTime) result.get("workTime");
            if (doctorWorkTime.getReceiveConsult().equals("0")) {
                // 医生设置不接受咨询
                json.put("status", "0");
                json.put("msg", "医生不接受咨询");
            } else {
                if (StringUtils.isEmpty(doctorWorkTime.getMorningBegin()) && StringUtils.isEmpty(doctorWorkTime.getMorningEnd())
                        && StringUtils.isEmpty(doctorWorkTime.getAfternoonBegin()) && StringUtils.isEmpty(doctorWorkTime.getAfternoonEnd())
                        && StringUtils.isEmpty(doctorWorkTime.getNightBegin()) && StringUtils.isEmpty(doctorWorkTime.getNightEnd())) {
                    // 医生未设置工作时间,默认7*24小时工作
                    json.put("status", "1");
                    json.put("msg", "医生当前接受咨询");
                } else {
                    if (result.get("workWeek") != null) {
                        // 当前工作日已设置工作时间
                        int flag = 0;
                        WlyyDoctorWorkTime workTime = (WlyyDoctorWorkTime) result.get("workTime");
                        WlyyDoctorWorkWeek workWeek = (WlyyDoctorWorkWeek) result.get("workWeek");
                        int hour = calendar.get(Calendar.HOUR_OF_DAY);
                        int minute = calendar.get(Calendar.MINUTE);
                        String start = "";
                        String end ="";
                        String current = (hour < 10 ? ("0" + hour) : hour) + ":" + (hour < 10 ? ("0" + minute) : minute);
                        // 早上
                        if (workWeek.getMorning().equals("1")) {
                            String currentStart = workTime.getMorningBegin();
                            String currentEnd = workTime.getMorningEnd();
                            if (currentStart.length() == 4) {
                                currentStart = "0" + currentStart;
                            }
                            if (currentEnd.length() == 4) {
                                currentEnd = "0" + currentEnd;
                            }
                            start = currentStart;
                            end = currentEnd;
                        }
                        // 下午
                        if (workWeek.getAfternoon().equals("1")) {
                            String currentStart = workTime.getAfternoonBegin();
                            String currentEnd = workTime.getAfternoonEnd();
                            if (currentStart.length() == 4) {
                                currentStart = "0" + currentStart;
                            }
                            if (currentEnd.length() == 4) {
                                currentEnd = "0" + currentEnd;
                            }
                            if(StringUtils.isEmpty(start)) {
                                start = currentStart;
                            }
                            end = currentEnd;
                        }
                        // 晚上
                        if (workWeek.getNight().equals("1")) {
                            String currentStart = workTime.getNightBegin();
                            String currentEnd = workTime.getNightEnd();
                            if (currentStart.length() == 4) {
                                currentStart = "0" + currentStart;
                            }
                            if (currentEnd.length() == 4) {
                                currentEnd = "0" + currentEnd;
                            }
                            if(StringUtils.isEmpty(start)) {
                                start = currentStart;
                            }
                            end = currentEnd;
                        }
                        if(current.compareTo(start) >= 0 && current.compareTo(end) < 0){
                            flag = 1;
                        }
                        if (flag == 1) {
                            json.put("status", "1");
                            json.put("msg", "医生当前接受咨询");
                        } else {
                            json.put("status", "2");
                            json.put("msg", "医生当前不在工作时间");
                        }
                    } else {
                        json.put("status", "2");
                        json.put("msg", "医生当前不在工作时间");
                    }
                }
            }
        }
        return json;
    }
    /**
     * 查询名医当天是否接受咨询
     *

+ 28 - 6
src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -24,6 +24,7 @@ import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.patient.SocialSecurityInfoDao;
import com.yihu.wlyy.repository.statistics.WlyySignFamilyCodeDao;
import com.yihu.wlyy.service.app.disease.PatientDiseaseService;
import com.yihu.wlyy.task.SignUploadTask;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -96,6 +97,10 @@ public class FamilyContractService extends BaseService {
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    public SignFamily findSignFamilyByCode(String code){
       return signFamilyDao.findByCodeAndType(code,2);
    }
    public SignFamily findByPatientByType(String patient, int type) {
        return signFamilyDao.findByPatientAndType(patient, type);
    }
@ -451,6 +456,7 @@ public class FamilyContractService extends BaseService {
            message.setSignStatus("1");//新的签约
            message.setSex(p.getSex());
            message.setOver("1");//未处理
            message.setData(temp.getCode());
            messageDao.save(message);
            // 发送消息给医生
            PushMsgTask.getInstance().put(doctor, MessageType.MESSAGE_TYPE_DOCTOR_NEW_SIGN_WEB.D_SW_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_SIGN_WEB.家庭签约.name(), "您有一条新的家庭签约申请!", patient);
@ -510,7 +516,7 @@ public class FamilyContractService extends BaseService {
        // 消息时间
        message.setCzrq(new Date());
        // 消息内容
        message.setContent("[" + patientName + "]申请解除与您的签约关系");
        message.setContent("申请解除与您的签约关系");
        // 未读
        message.setRead(1);
        message.setReceiverName(doctorName);
@ -530,6 +536,7 @@ public class FamilyContractService extends BaseService {
        message.setOver("1");
        // 设置解约理由
        message.setReason(reason);
        message.setData(signFamily.getCode());
        messageDao.save(message);
        // 发送消息给医生
        PushMsgTask.getInstance().put(doctor, MessageType.MESSAGE_TYPE_DOCTOR_SIGN_WEB_RELIEVE.D_SW_02.name(), MessageType.MESSAGE_TYPE_DOCTOR_SIGN_WEB_RELIEVE.家庭签约.name(), patientName + " 申请解除与您的家庭签约!", patient);
@ -658,7 +665,7 @@ public class FamilyContractService extends BaseService {
        sf.setDoctor(doctor);
        sf.setDoctorName(doctorName);
        sf.setDoctorHealth(doctorHealth);
        sf.setExpensesType(expenses);
        sf.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);
        sf.setFamilyCode(createSignCode(doctor, hospital));
        sf.setDoctorHealthName(doctorHealthName);
        sf.setEmerMobile(emerMobile);
@ -919,6 +926,7 @@ public class FamilyContractService extends BaseService {
            json.put("remark", ""); //您好,您成功签约家庭医生
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 1, sf.getOpenid(), sf.getName(), json);
            new Thread(new SignUploadTask(sf.getCode())).start();
        }
        return temp;
    }
@ -973,7 +981,7 @@ public class FamilyContractService extends BaseService {
            // 更新签约日期
            sf.setBegin(DateUtil.getNowDateShort());
            sf.setSignType("1");//患者发起签约
            sf.setExpensesType(expenses);//收费类别
            sf.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);//收费类别
            sf.setEnd(DateUtil.strToDateShort(DateUtil.getNextYear(DateUtil.getNowDateShort(), 1)));
            //设置签约人  患者发起的签约 默认签约人是全科医生
            sf.setSignDoctorCode(sf.getDoctor());
@ -1050,6 +1058,7 @@ public class FamilyContractService extends BaseService {
        } else {
            // 医生拒绝
            sf.setStatus(-2);
            sf.setCzrq(new Date());
            // 拒绝签约
            JSONObject json = new JSONObject();
            json.put("first", "签约失败通知");
@ -1201,6 +1210,7 @@ public class FamilyContractService extends BaseService {
            json.put("remark", ""); //您好,您成功签约家庭医生
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 1, sf.getOpenid(), sf.getName(), json);
            new Thread(new SignUploadTask(sf.getCode())).start();
        } else if (type == 2) {
            System.out.println(" ---------- fail send weixin-------------");
            // 拒绝签约
@ -1298,7 +1308,10 @@ public class FamilyContractService extends BaseService {
            pagesize = 10;
        }
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        Sort sort = new Sort(Direction.DESC, "czrq");
//        sort.and(new Sort(Direction.DESC,"read"));
//        sort.and(new Sort(Direction.DESC,"czrq"));
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        // 设置查询条件
@ -1309,8 +1322,8 @@ public class FamilyContractService extends BaseService {
        }
        // 只查询未处理的消息
        filters.put("type", new SearchFilter("type", Operator.EQ, 1));
        filters.put("over", new SearchFilter("over", Operator.EQ, 1));
        filters.put("read", new SearchFilter("read", Operator.EQ, 1));
//        filters.put("over", new SearchFilter("over", Operator.EQ, 1));
//        filters.put("read", new SearchFilter("read", Operator.EQ, 1));
        Specification<Message> spec = DynamicSpecifications.bySearchFilter(filters.values(), Message.class);
        return messageDao.findAll(spec, pageRequest);
    }
@ -1627,4 +1640,13 @@ public class FamilyContractService extends BaseService {
            return false;
        }
    }
    public boolean updateSignStatus(String patientCard) {
        // 判断患者有没有家庭签约
        SignFamily sf = signFamilyDao.findByPatientStatus(patientCard, 0);
        if (sf != null) {
            sf.setStatus(-5);
        }
        return true;
    }
}

+ 82 - 17
src/main/java/com/yihu/wlyy/service/app/talk/TalkGroupService.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.service.app.talk;
import java.io.UnsupportedEncodingException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
@ -7,6 +8,11 @@ import java.util.*;
import javax.transaction.Transactional;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.SystemConf;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
@ -19,6 +25,7 @@ import com.yihu.wlyy.entity.discussion.WlyyTalkGroupMember;
import com.yihu.wlyy.repository.discussion.DiscussionGroupDao;
import com.yihu.wlyy.repository.discussion.DiscussionGroupMemberDao;
import com.yihu.wlyy.service.BaseService;
import org.springframework.util.StringUtils;
@Service
@Transactional
@ -29,9 +36,11 @@ public class TalkGroupService extends BaseService {
    DiscussionGroupDao discussionGroupDao;
    @Autowired
    // 讨论组成员DAO
            DiscussionGroupMemberDao discussionGroupMemberDao;
    DiscussionGroupMemberDao discussionGroupMemberDao;
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Autowired
    DoctorDao doctorDao;
    /**
     * 讨论组保存
@ -49,7 +58,7 @@ public class TalkGroupService extends BaseService {
     *
     * @param members
     */
    public void saveMembers(List<WlyyTalkGroupMember> members){
    public void saveMembers(List<WlyyTalkGroupMember> members) {
        discussionGroupMemberDao.save(members);
    }
@ -191,22 +200,22 @@ public class TalkGroupService extends BaseService {
     * @param groups
     * @return
     */
    public List<Map<String,Object>> getTalkGroupsSing(String[] groups){
        String params =  "";
    public List<Map<String, Object>> getTalkGroupsSing(String[] groups) {
        String params = "";
        List<String> paramList = new ArrayList<>();
        for(int i = 0; i < groups.length ; i++){
            params += (i == 0?"?":",?");
        for (int i = 0; i < groups.length; i++) {
            params += (i == 0 ? "?" : ",?");
        }
        paramList.addAll(Arrays.asList(groups));
        paramList.addAll(Arrays.asList(groups));
        String sqlgp = "select group_code,member_code from wlyy_talk_group_member where group_code in (" + params + ") and type = 2";
        String sqlgpm = "select member_code from wlyy_talk_group_member where group_code in (" + params + ") and type = 2";
        String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm+ ") and quato_code = '1' and level1_type = '1'";
        String sqlQuSum = "select a.group_code,sum(ifnull(b.result,0)) sign from ("+ sqlgp +") a left join (" + sqlQu+ ") b on a.member_code = b.qkdoctor_code group by a.group_code ";
        String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm + ") and quato_code = '1' and level1_type = '1'";
        String sqlQuSum = "select a.group_code,sum(ifnull(b.result,0)) sign from (" + sqlgp + ") a left join (" + sqlQu + ") b on a.member_code = b.qkdoctor_code group by a.group_code ";
        return jdbcTemplate.queryForList(sqlQuSum,paramList.toArray());
        return jdbcTemplate.queryForList(sqlQuSum, paramList.toArray());
    }
    /**
@ -225,7 +234,7 @@ public class TalkGroupService extends BaseService {
     * @param groupCode
     * @return
     */
    public WlyyTalkGroup findTalkGroup(String groupCode){
    public WlyyTalkGroup findTalkGroup(String groupCode) {
        return discussionGroupDao.findByCode(groupCode);
    }
@ -279,12 +288,12 @@ public class TalkGroupService extends BaseService {
        List<WlyyTalkGroup> result = new ArrayList<>();
        //查询语句
        String sqlIn = " select tg.* from wlyy_talk_group tg where tg.code in ("
                     + " select tgm.group_code "
                     + " from "
                     + "     (select * from wlyy_talk_group_member where member_code = ?) tgm "
                     + "  inner join "
                     + "     (select * from wlyy_talk_group_member where member_code = ?) tgmm "
                     + "  on tgm.group_code = tgmm.group_code )";
                + " select tgm.group_code "
                + " from "
                + "     (select * from wlyy_talk_group_member where member_code = ?) tgm "
                + "  inner join "
                + "     (select * from wlyy_talk_group_member where member_code = ?) tgmm "
                + "  on tgm.group_code = tgmm.group_code )";
        //查询
        result = jdbcTemplate.query(sqlIn, new Object[]{memberFirst, memberSencond}, new RowMapper<WlyyTalkGroup>() {
            @Override
@ -316,8 +325,64 @@ public class TalkGroupService extends BaseService {
     * @param doctor
     * @return
     */
    public long getDoctorTalkGroupCount(String doctor){
    public long getDoctorTalkGroupCount(String doctor) {
        return discussionGroupMemberDao.countByMemberCode(doctor);
    }
    /**
     * 获取以上一对一聊天
     *
     * @param doctor
     * @param doctorName
     * @return
     */
    public JSONArray getOneToOneIm(String doctor,String doctorName) throws UnsupportedEncodingException {
        JSONArray result = null;
        JSONArray resultArray = new JSONArray();
        String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
                + "statistic/getchatlist.im";
        String json = HttpUtil.sendGet(url, "uid=" + doctor);
        if(!StringUtils.isEmpty(json)) {
            System.out.println("one-to-one:" + json);
            result = new JSONArray(json);
        }
        if (result != null && result.length() > 0) {
            for (int i = 0; i < result.length(); i++) {
                JSONObject obj = result.getJSONObject(i);
                if (obj.getInt("msg_type") == 1 && obj.get("peer_uid") != null) {
                    JSONObject objRe = new JSONObject();
                    Doctor fromDoctor = doctorDao.findByCode(obj.get("peer_uid").toString());
                    if(fromDoctor == null){
                        continue;
                    }
                    if(!StringUtils.isEmpty(doctorName)){
                        if(!fromDoctor.getName().contains(doctorName)){
                            continue;
                        }
                    }
                    objRe.put("uid",obj.get("uid") != null ? obj.getString("uid") :"");
                    objRe.put("fromUid",obj.get("peer_uid") != null ? obj.get("peer_uid").toString() : "");
                    objRe.put("fromName",fromDoctor.getName());
                    objRe.put("fromLevel",fromDoctor.getLevel());
                    objRe.put("photo",StringUtils.isEmpty(fromDoctor.getPhoto())?"":fromDoctor.getPhoto());
                    objRe.put("sex",fromDoctor.getSex());
                    objRe.put("lastContentType",obj.getInt("last_content_type"));
                    objRe.put("lastContent",obj.get("last_content") != null?new String(obj.getString("last_content").getBytes(),"utf-8"):"");
                    objRe.put("newMsgCount",obj.getInt("new_msg_count"));
                    objRe.put("lastMsgTime",obj.get("timestamp") != null ? DateUtil.dateToStr(new Date(obj.getLong("timestamp")),DateUtil.YYYY_MM_DD_HH_MM):"");
                    resultArray.put(objRe);
                }
            }
        }
        return resultArray;
    }
}

+ 14 - 0
src/main/java/com/yihu/wlyy/service/common/account/DoctorService.java

@ -90,4 +90,18 @@ public class DoctorService extends TokenService {
			return doctorDao.famousDoctorList(sdf.format(new Date()), pageRequest);
		}
	}
	public Page<Doctor> getDoctorFamousDoctorList(String name, int page, int pagesize) {
		// 分页信息
		Pageable pageRequest = new PageRequest(page-1, pagesize);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		if (StringUtils.isNoneEmpty(name)) {
			name="%"+name+"%";
			return doctorDao.doctorFamousDoctorList(name, pageRequest);
		}else{
			return doctorDao.doctorFamousDoctorList(pageRequest);
		}
	}
}

+ 17 - 47
src/main/java/com/yihu/wlyy/service/quota/JobService.java

@ -1,9 +1,9 @@
package com.yihu.wlyy.service.quota;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.entity.job.QuartzJobConfig;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuota;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.job.QuartzHelper;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobConfigDao;
@ -21,19 +21,22 @@ import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by Administrator on 2016/8/16.
 * @author chenweida
 */
@Service
public class JobService {
    @Autowired
    private QuartzHelper quartzHelper;
    @Autowired
    private QuartzJobConfigDao wlyyJobConfigDao;
    @Autowired
    private QuotaDao quotaDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao;
@ -120,8 +123,8 @@ public class JobService {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("quota", wlyyQuotaVO);
        params.put("jobConfig", wlyyJobConfigVO);
        //往quartz框架添加任务
        //往quartz框架添加任务
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId(), params);
        }
@ -196,7 +199,6 @@ public class JobService {
    }
    public void productDataByOneDayWithId(String yesterday, String id) throws Exception {
        SimpleDateFormat dataSimple = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dataSimple.parse(yesterday);
        if (date == null) {
@ -221,6 +223,7 @@ public class JobService {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("quota", wlyyQuotaVO);
        params.put("jobConfig", wlyyJobConfigVO);
        //往quartz框架添加任务
        params.put("now", now);
        params.put("yesterday", yesterday);
@ -228,38 +231,36 @@ public class JobService {
            quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId() + UUID.randomUUID(), params);
            Thread.sleep(15000L);
        }
    }
    @Transactional
    public void startaaaa() {
        List<SignFamily> s = signFamilyDao.findByDate("2016-08-05 15:40:00");
        for (SignFamily ss : s) {
            List<DoctorPatientGroupInfo> DoctorPatientGroupInfos=doctorPatientGroupInfoDao.findByPatient(ss.getPatient());
            if(DoctorPatientGroupInfos!=null&&DoctorPatientGroupInfos.size()==0){
                DoctorPatientGroupInfo qkDoctorPatientGroupInfo=new DoctorPatientGroupInfo();
            List<DoctorPatientGroupInfo> DoctorPatientGroupInfos = doctorPatientGroupInfoDao.findByPatient(ss.getPatient());
            if (DoctorPatientGroupInfos != null && DoctorPatientGroupInfos.size() == 0) {
                DoctorPatientGroupInfo qkDoctorPatientGroupInfo = new DoctorPatientGroupInfo();
                qkDoctorPatientGroupInfo.setCzrq(new Date());
                qkDoctorPatientGroupInfo.setQyrq(ss.getApplyDate());
                qkDoctorPatientGroupInfo.setGroup("2");
                qkDoctorPatientGroupInfo.setPatient(ss.getPatient());
                qkDoctorPatientGroupInfo.setPartAmount(0);
                qkDoctorPatientGroupInfo.setStatus(ss.getStatus()>0?1:0);
                if(ss.getStatus()<0){
                qkDoctorPatientGroupInfo.setStatus(ss.getStatus() > 0 ? 1 : 0);
                if (ss.getStatus() < 0) {
                    qkDoctorPatientGroupInfo.setDqrq(ss.getApplyUnsignDate());
                }
                qkDoctorPatientGroupInfo.setSignType("1");
                qkDoctorPatientGroupInfo.setDoctor(ss.getDoctor());
                doctorPatientGroupInfoDao.save(qkDoctorPatientGroupInfo);
                qkDoctorPatientGroupInfo=new DoctorPatientGroupInfo();
                qkDoctorPatientGroupInfo = new DoctorPatientGroupInfo();
                qkDoctorPatientGroupInfo.setCzrq(new Date());
                qkDoctorPatientGroupInfo.setQyrq(ss.getApplyDate());
                qkDoctorPatientGroupInfo.setGroup("2");
                qkDoctorPatientGroupInfo.setPatient(ss.getPatient());
                qkDoctorPatientGroupInfo.setPartAmount(0);
                qkDoctorPatientGroupInfo.setStatus(ss.getStatus()>0?1:0);
                if(ss.getStatus()<0){
                qkDoctorPatientGroupInfo.setStatus(ss.getStatus() > 0 ? 1 : 0);
                if (ss.getStatus() < 0) {
                    qkDoctorPatientGroupInfo.setDqrq(ss.getApplyUnsignDate());
                }
                qkDoctorPatientGroupInfo.setSignType("1");
@ -267,38 +268,7 @@ public class JobService {
                doctorPatientGroupInfoDao.save(qkDoctorPatientGroupInfo);
            }
        }
        s = signFamilyDao.findByDate("2016-08-16 00:00:00");
        for (SignFamily ss : s) {
            List<DoctorPatientGroupInfo> DoctorPatientGroupInfos=doctorPatientGroupInfoDao.findByPatient(ss.getPatient());
            if(DoctorPatientGroupInfos!=null&&DoctorPatientGroupInfos.size()==0){
                DoctorPatientGroupInfo qkDoctorPatientGroupInfo=new DoctorPatientGroupInfo();
                qkDoctorPatientGroupInfo.setCzrq(new Date());
                qkDoctorPatientGroupInfo.setQyrq(ss.getApplyDate());
                qkDoctorPatientGroupInfo.setGroup("2");
                qkDoctorPatientGroupInfo.setPatient(ss.getPatient());
                qkDoctorPatientGroupInfo.setPartAmount(0);
                qkDoctorPatientGroupInfo.setStatus(ss.getStatus()>0?1:0);
                if(ss.getStatus()<0){
                    qkDoctorPatientGroupInfo.setDqrq(ss.getApplyUnsignDate());
                }
                qkDoctorPatientGroupInfo.setSignType("1");
                qkDoctorPatientGroupInfo.setDoctor(ss.getDoctor());
                doctorPatientGroupInfoDao.save(qkDoctorPatientGroupInfo);
                qkDoctorPatientGroupInfo=new DoctorPatientGroupInfo();
                qkDoctorPatientGroupInfo.setCzrq(new Date());
                qkDoctorPatientGroupInfo.setQyrq(ss.getApplyDate());
                qkDoctorPatientGroupInfo.setGroup("2");
                qkDoctorPatientGroupInfo.setPatient(ss.getPatient());
                qkDoctorPatientGroupInfo.setPartAmount(0);
                qkDoctorPatientGroupInfo.setStatus(ss.getStatus()>0?1:0);
                if(ss.getStatus()<0){
                    qkDoctorPatientGroupInfo.setDqrq(ss.getApplyUnsignDate());
                }
                qkDoctorPatientGroupInfo.setSignType("1");
                qkDoctorPatientGroupInfo.setDoctor(ss.getDoctorHealth());
                doctorPatientGroupInfoDao.save(qkDoctorPatientGroupInfo);
            }
        }
        s = signFamilyDao.findByDate("2016-08-16 00:00:00");
    }
}

+ 99 - 0
src/main/java/com/yihu/wlyy/service/third/sign/SignJwService.java

@ -0,0 +1,99 @@
package com.yihu.wlyy.service.third.sign;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.PatientReservation;
import com.yihu.wlyy.repository.organization.HospitalMappingDao;
import com.yihu.wlyy.repository.patient.PatientReservationDao;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.service.third.guahao.GuahaoDoctor;
import com.yihu.wlyy.service.third.guahao.IGuahaoService;
import com.yihu.wlyy.util.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionContext;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
 * Created by hzp on 2016/9/26.
 * 基卫签约服务
 */
@Service
public class SignJwService {
    //基卫服务地址
    private String jwUrl = SystemConf.getInstance().getJwUrl();
    @Autowired
    private ObjectMapper objectMapper = new ObjectMapper();
    /**
     * 查询是否已签约
     * true 已签约 false 未签约
     */
    public Boolean CheckSignFamily(String idcard) throws Exception
    {
        boolean re = true;
        String url = jwUrl+"third/sign/CheckSignFamily";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("idcard", idcard));
        String response = HttpClientUtil.post(url,params,"UTF-8");
        Map<String,Object> map = objectMapper.readValue(response,Map.class);
        if(map.get("status").equals(200))
        {
            Map<String,String> data = (Map<String,String>)map.get("data");
            if(data.get("status").equals("1"))
            {
                System.out.print("已签约ID:"+data.get("code"));
            }
            else{
                re = false;
            }
        }
        else{
            throw new Exception(map.get("msg").toString());
        }
        return re;
    }
    /**
     * 推送签约接口
     */
    public Boolean UploadSignFamily(String code)
    {
        try{
            String url = jwUrl+"third/sign/UploadSignFamily";
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("code", code));
            String response = HttpClientUtil.post(url,params,"UTF-8");
            Map<String,Object> map = objectMapper.readValue(response,Map.class);
            if(map.get("status").equals(200))
            {
                return true;
            }
            else{
                System.out.print(map.get("msg"));
                return false;
            }
        }
        catch (Exception ex)
        {
            System.out.print(ex.getMessage());
            return false;
        }
    }
    public static void main(String args[]) throws Exception {
        System.out.print(new SignJwService().UploadSignFamily("66ae08fd897643048ed8feba09549554")+"\r\n");
         System.out.print(new SignJwService().CheckSignFamily("1")+"\r\n");
    }
}

+ 44 - 0
src/main/java/com/yihu/wlyy/task/SignUploadTask.java

@ -0,0 +1,44 @@
package com.yihu.wlyy.task;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.SystemConf;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
 * 签约推送
 * <p>
 * Created by lyr-pc on 2016/9/26.
 */
public class SignUploadTask implements Runnable {
    private static Logger logger = LoggerFactory.getLogger(SignUploadTask.class);
    String code = "";
    public SignUploadTask(String code) {
        this.code = code;
    }
    @Override
    public void run() {
        try {
            String url = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String resultStr = HttpUtil.sendPost(url + "/third/sign/UploadSignFamily?code=" + code, "");
            JSONObject json = new JSONObject(resultStr);
            if (json.getInt("status") == 200) {
                logger.info("sign-info-upload-success:" + code);
            } else {
                logger.error("sign-info-upload-failed:" + code);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 12 - 4
src/main/java/com/yihu/wlyy/util/IdCardUtil.java

@ -25,16 +25,24 @@ public class IdCardUtil {
        String sex = Constant.level_sex_3;
        if (CardCode.length() == 18) {
            if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                sex =  Constant.level_sex_2;
            } else {
                // modifid by lyr 2016-09-29
               // sex =  Constant.level_sex_2;
                sex =  Constant.level_sex_1;
                // modifid by lyr 2016-09-29
            } else {
                // modifid by lyr 2016-09-29
               // sex =  Constant.level_sex_1;
                sex =  Constant.level_sex_2;
                // modifid by lyr 2016-09-29
            }
        } else if (CardCode.length() == 15) {
            String usex = CardCode.substring(14, 15);// 用户的性别
            if (Integer.parseInt(usex) % 2 == 0) {
                sex = Constant.level_sex_2;
            } else {
                // sex =  Constant.level_sex_2;
                sex =  Constant.level_sex_1;
            } else {
                // sex =  Constant.level_sex_1;
                sex =  Constant.level_sex_2;
            }
        }
        return sex;

+ 0 - 14
src/main/java/com/yihu/wlyy/util/SystemConf.java

@ -318,19 +318,5 @@ public class SystemConf {
		return getSystemProperties().getProperty("jw_url");
	}
	/**
	 * 获取基卫授权机构
	 */
	public String getJwOrgCode() {
		return getSystemProperties().getProperty("jw_org_code");
	}
	/**
	 * 获取基卫授权码
	 */
	public String getJwLicence() {
		return getSystemProperties().getProperty("jw_licence");
	}
	/**************************************************************************************/
}

+ 108 - 0
src/main/java/com/yihu/wlyy/web/common/util/CaptchaController.java

@ -0,0 +1,108 @@
package com.yihu.wlyy.web.common.util;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
/**
 * 患者端验证码生成控制器。验证码生成后保存到Redis中,并将Redis的Key与图片路径返回。
 * 客户端获取图片,并由用户输入后,与redis的key一块返回,用于验证是否出错。
 *
 * @author Sand
 * @created 2016/09/28
 */
@Api(description = "验证码")
@RestController
@RequestMapping(value = "/patient/captcha", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class CaptchaController extends BaseController {
    private Map<String, String> captchaCache = new ConcurrentHashMap<>();
    private DefaultKaptcha captchaProducer = new DefaultKaptcha();
    public CaptchaController() {
        Properties properties = new Properties();
        properties.put("kaptcha.textproducer.font.color", "blue");
        properties.put("kaptcha.textproducer.font.size", "45");
        properties.put("kaptcha.textproducer.char.length", "4");
        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        captchaProducer.setConfig(config);
    }
    @RequestMapping(method = RequestMethod.GET)
    @ApiOperation("生成验证码,用于第一次请求")
    public String createCaptcha(){
        try{
            return generateCaptcha();
        } catch (Exception e){
            return error(500, e.getMessage());
        }
    }
    @RequestMapping(value = "/{legacy_key}", method = RequestMethod.POST)
    @ApiOperation("刷新验证码,需提供第一次生成验证码返回的key")
    public String refreshCaptcha(@PathVariable("legacy_key") String legacyKey){
        try{
            cleanCaptcha(legacyKey);
            return generateCaptcha();
        } catch (Exception e){
            return error(500, e.getMessage());
        }
    }
    @RequestMapping(value = "/{key}", method = RequestMethod.GET)
    @ApiOperation("校验证码,提供key及用户输入的验证码")
    public String verifyCaptcha(@PathVariable("key") String key,
                                @RequestParam("text") String text){
        try{
            boolean pass = false;
            String captcha = captchaCache.get(key);
            if (captcha != null && captcha.equals(text.toLowerCase())){
                pass = true;
                cleanCaptcha(key);
            }
            return write(200, "ok", "pass", pass);
        } catch (Exception e){
            return error(500, e.getMessage());
        }
    }
    private String generateCaptcha() throws IOException {
        String captchaText = captchaProducer.createText();
        BufferedImage image = captchaProducer.createImage(captchaText);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "png", outputStream);
        String base64Img = new BASE64Encoder().encode(outputStream.toByteArray());
        String key = "captcha:" + UUID.randomUUID().toString() + ":text";
        Map<String, String> data = new HashMap<>();
        data.put("key", key);
        data.put("image", base64Img);
        data.put("format", "png");
        captchaCache.put(key, captchaText.toLowerCase());
        return write(200, "ok", "data", data);
    }
    private void cleanCaptcha(String key){
        captchaCache.remove(key);
    }
}

+ 0 - 603
src/main/java/com/yihu/wlyy/web/common/util/ImportDataController.java

@ -1,603 +0,0 @@
package com.yihu.wlyy.web.common.util;
import com.yihu.wlyy.web.BaseController;
//@Controller
//@RequestMapping(value = "/util/data")
public class ImportDataController extends BaseController {
//
//	@Autowired
//	private PatientService patientService;
//	@Autowired
//	private ImportDataService importDataService;
//	// @Autowired
//	// private DoctorService doctorService;
//
//	/**
//	 *
//	 * @param data
//	 * @param type 1高,2糖
//	 * @return
//	 */
//	@RequestMapping(value = "id")
//	@ResponseBody
//	public String importData(String data, int type) {
//		try {
//			String[] datas = data.split(";");
//			List<Patient> patients = new ArrayList<Patient>();
//			List<Family> scs = new ArrayList<SignContract>();
//			for (String temp : datas) {
//				String[] temps = temp.split(",");
//				String name = temps[0];
//				String ssc = temps[1];
//				String idcard = temps[2];
//				String phone = temps[3];
//				String province = temps[4];
//				String city = temps[5];
//				String town = temps[6];
//				String address = temps[7];
//				String zk = temps[9];
//				String qk = temps[10];
//				String jk = temps[11];
//				String qyrq = temps[12].replace("/", "-");
//
//				IdcardInfoExtractor ie = new IdcardInfoExtractor(idcard);
//
//				Patient patient = new Patient();
//				patient.setAddress(address);
//				patient.setBirthday(ie.getBirthday());
//				patient.setCityName(city);
//				patient.setCode(patientService.getCode());
//				patient.setCzrq(new Date());
//				patient.setDisease(type);
//				patient.setIdcard(idcard);
//				patient.setName(name);
//				patient.setPhone(phone);
//				patient.setProvinceName(province);
//				patient.setSex(ie.getGender());
//				patient.setSsc(ssc);
//				patient.setTownName(town);
//				patients.add(patient);
//
//				SignContract sc = new SignContract();
//				sc.setBegin(DateUtil.strToDateShort(qyrq));
//				sc.setCode(patientService.getCode());
//				sc.setEnd(DateUtil.strToDateShort(DateUtil.getNextYear(sc.getBegin(), 1)));
//				sc.setMonths(12);
//				sc.setTeam("-1");
//				sc.setUname(name);
//				sc.setUser(patient.getCode());
//				sc.setGp(qk);
//				sc.setSpec(zk);
//				sc.setHealthManager(jk);
//				sc.setStatus(200);
//				scs.add(sc);
//			}
//			importDataService.importData(patients, scs);
//			return success("导入成功!");
//		} catch (Exception e) {
//			error(e);
//			return error(-1, "导入失败!");
//		}
//	}
//
//	/**
//	 * 创建医生分组数据
//	 * @return
//	 */
//	@RequestMapping(value = "cd")
//	@ResponseBody
//	public String createDPGData() {
//		try {
//			importDataService.createDPGData();
//			return success("创建成功!");
//		} catch (Exception e) {
//			error(e);
//			return error(-1, "创建失败!");
//		}
//	}
//
//	@RequestMapping(value = "excel")
//	@ResponseBody
//	public String loadExcel() {
//		try {
//			List<String> sqls = new ArrayList<String>();
//
//			JSONObject hosMaps = new JSONObject();
//			hosMaps.put("厦门市同安区新民卫生院", "新民卫生院");
//			hosMaps.put("厦门市集美区侨英街道社区卫生服务中心", "侨英街道社区卫生服务中心");
//			hosMaps.put("厦门市同安区莲花卫生院", "莲花卫生院");
//			hosMaps.put("厦门市同安区西柯中心卫生院", "同安区西柯中心卫生院");
//			hosMaps.put("鹭江社区卫生服务中心", "鹭江社区医疗服务中心");
//			hosMaps.put("厦门市湖里区金山街道社区卫生服务中心", "金山社区医疗服务中心");
//			hosMaps.put("厦门市思明区梧村街道社区卫生服务中心", "梧村社区医疗服务中心");
//			hosMaps.put("后溪镇卫生院", "集美区后溪卫生院");
//			hosMaps.put("禾山街道社区卫生服务中心", "禾山社区医疗服务中心");
//			hosMaps.put("厦门市同安区洪塘卫生院", "洪塘卫生院");
//			hosMaps.put("同安区大同街道社区卫生服务中心", "大同街道社区卫生服务中心");
//			hosMaps.put("厦门市思明区筼筜街道社区卫生服务中心", "筼筜街道社区卫生服务中心");
//			hosMaps.put("厦门市同安区祥平街道社区卫生服务中心", "祥平街道社区卫生服务中心");
//			hosMaps.put("集美区杏滨街道社区卫生服务中心", "杏滨街道社区卫生服务中心");
//			hosMaps.put("厦门市同安区五显卫生院", "五显卫生院");
//			hosMaps.put("厦门市集美区集美街道社区卫生服务中心", "集美街道社区卫生服务中心");
//			hosMaps.put("厦门市集美区灌口镇中心卫生院", "集美区灌口医院");
//			hosMaps.put("莲前街道社区卫生服务中心", "莲前第一社区医疗服务中心");
//			hosMaps.put("思明区鹭江街道社区卫生服务中心", "鹭江社区医疗服务中心");
//			hosMaps.put("厦门市思明区滨海街道社区卫生服务中心", "滨海社区医疗服务中心");
//			hosMaps.put("嘉莲街道社区卫生服务中心", "嘉莲社区医疗服务中心");
//			hosMaps.put("同安区汀溪卫生院", "汀溪卫生院");
//			hosMaps.put("厦门市思明区开元街道社区卫生服务中心", "开元社区医疗服务中心");
//			hosMaps.put("嘉莲社区卫生服务中心", "嘉莲社区医疗服务中心");
//			hosMaps.put("厦门市思明区鹭江街道社区卫生服务中心", "鹭江社区医疗服务中心");
//			hosMaps.put("厦门市湖里区湖里街道社区卫生服务中心", "湖里社区医疗服务中心");
//			hosMaps.put("江头街道社区卫生服务中心", "江头社区医疗服务中心");
//			hosMaps.put("厦门市思明区嘉莲街道社区卫生服务中心", "嘉莲社区医疗服务中心");
//			hosMaps.put("湖里区殿前街道社区卫生服务中心", "殿前社区医疗服务中心");
//			hosMaps.put("厦门市集美区杏林街道社区卫生服务中心", "杏林街道社区卫生服务中心");
//
//			Map<String, String> hospitals = new HashMap<String, String>();
//			File file = new File("D:\\doctors");
//			if (file.exists()) {
//				File[] files = file.listFiles();
//				for (File temp : files) {
//					InputStream is = null;
//					HSSFWorkbook hssfWorkbook = null;
//					try {
//						// System.out.println(temp.getAbsolutePath());
//						is = new FileInputStream(temp);
//						hssfWorkbook = new HSSFWorkbook(is);
//						// 获取第一个sheet
//						HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
//						if (hssfSheet == null) {
//							continue;
//						}
//						for (int row = 1; row < hssfSheet.getLastRowNum() + 1; row++) {
//							HSSFRow hssfRow = hssfSheet.getRow(row);
//							// 姓名
//							String name = getStringValue(hssfRow.getCell(0));
//							// 性别
//							String sex = getStringValue(hssfRow.getCell(1));
//							// 人员类型
//							// String userType = getStringValue(hssfRow.getCell(2));
//							// 临床职称
//							String job = getStringValue(hssfRow.getCell(4));
//							// //教学职称
//							// String name = getStringValue(hssfRow.getCell(5));
//							// //行政职称
//							// String name = getStringValue(hssfRow.getCell(6));
//							// 人员专长
//							String expertise = getStringValue(hssfRow.getCell(7));
//							// //机构所在省
//							// String province = getStringValue(hssfRow.getCell(8));
//							// //机构所在市
//							// String city = getStringValue(hssfRow.getCell(9));
//							// //机构详细地址
//							// String address = getStringValue(hssfRow.getCell(10));
//							// 机构名称
//							String hospitalName = getStringValue(hssfRow.getCell(11));
//							if (StringUtils.isNotEmpty(hospitalName)) {
//								if (hosMaps.has(hospitalName)) {
//									hospitalName = hosMaps.getString(hospitalName);
//								} else {
//									hospitalName = "===" + hospitalName + "===";
//									continue;
//								}
//							}
//							// 科室
//							String dept = getStringValue(hssfRow.getCell(12));
//							// 医生简介
//							String intro = getStringValue(hssfRow.getCell(13));
//							// 三师类型
//							String doctorType = getStringValue(hssfRow.getCell(14));
//							// 手机号码
//							String mobile = getStringValue(hssfRow.getCell(15));
//							// 邮箱
//							// String email = getStringValue(hssfRow.getCell(16));
//							// 医生荣誉
//							// String ysry = getStringValue(hssfRow.getCell(17));
//
//							// System.out.println(name);
//							// System.out.println(sex);
//							// System.out.println(job);
//							// System.out.println(expertise);
//							// System.out.println(hospitalName);
//							// System.out.println(dept);
//							// System.out.println(intro);
//							// System.out.println(doctorType);
//							// System.out.println(mobile);
//							if (StringUtils.isEmpty(hospitalName)) {
//								// System.out.println(temp.getAbsolutePath() + " 第" + (row + 1) + "行,机构名称不允许为空!");
//								continue;
//							} else if (StringUtils.isEmpty(mobile) || mobile.length() != 11) {
//								// System.out.println(temp.getAbsolutePath() + " 第" + (row + 1) + "行,手机号码为允许为空且必须为11位!");
//								continue;
//							} else if (StringUtils.isEmpty(doctorType)) {
//								// System.out.println(temp.getAbsolutePath() + " 第" + (row + 1) + "行,三师类型不允许为空!");
//								continue;
//							} else if (StringUtils.isEmpty(name)) {
//								// System.out.println(temp.getAbsolutePath() + " 第" + (row + 1) + "行,姓名不允许为空!");
//								continue;
//							} else if (StringUtils.isEmpty(sex)) {
//								// System.out.println(temp.getAbsolutePath() + " 第" + (row + 1) + "行,性别不允许为空!");
//								continue;
//							}
//							// else if (StringUtils.isEmpty(job)) {
//							// System.out.println(temp.getAbsolutePath() + " 第" + (row+1) + "行,临床职称不允许为空!");
//							// }
//							else if (StringUtils.isEmpty(dept)) {
//								// System.out.println(temp.getAbsolutePath() + " 第" + (row + 1) + "行,科室不允许为空!");
//								continue;
//							}
//							if (hospitalName != null) {
//								hospitals.put(hospitalName, hospitalName);
//							}
//							String photo = "";
//							// 类型:1专科医生,2全科医生,3健康管理师
//							int level = 0;
//							if (doctorType.contains("专")) {
//								level = 1;
//							} else if (doctorType.contains("全")) {
//								level = 2;
//							} else if (doctorType.contains("健")) {
//								level = 3;
//							}
//							if (sex.contains("男")) {
//								sex = "1";
//							} else if (sex.contains("女")) {
//								sex = "2";
//							} else {
//								sex = "0";
//							}
//							StringBuffer sql = new StringBuffer();
//							sql.append("INSERT INTO `wlyy_doctor` (`code`,`name`,`sex`,`photo`,`mobile`,`status`,`province`,`city`,`hospital`,`dept`,`job`,`expertise`,`introduce`,`level`,`czrq`,`province_name`,`city_name`,`hospital_name`,`dept_name`,`job_name`) VALUES (");
//							sql.append("REPLACE(UUID(), '-', ''),'" + name + "','" + sex + "','" + photo + "','" + mobile + "','1','350000','350200','','','','" + expertise + "','" + intro + "','" + level + "','now()','福建省','厦门市','" + hospitalName + "','" + dept + "','" + job + "');");
//							sqls.add(sql.toString());
//						}
//					} catch (Exception e) {
//						e.printStackTrace();
//					} finally {
//						if (is != null) {
//							is.close();
//						}
//						if (hssfWorkbook != null) {
//							hssfWorkbook.close();
//						}
//					}
//				}
//			}
//			System.out.println("===========================");
//			Iterator<String> temps = hospitals.keySet().iterator();
//			while (temps.hasNext()) {
//				System.out.println(temps.next());
//			}
//			// System.out.println("===========================");
//			// for(String sql : sqls){
//			// System.out.println(sql);
//			// }
//			writeFile("D:\\tmp\\doctors.txt", sqls);
//			return success("导入成功!");
//		} catch (Exception e) {
//			error(e);
//			return error(-1, "导入失败!");
//		}
//	}
//
//	private static String getStringValue(HSSFCell cell) {
//		if (cell == null) {
//			return "";
//		}
//		String value = null;
//		switch (cell.getCellType()) {
//		case Cell.CELL_TYPE_BOOLEAN:
//			value = cell.getBooleanCellValue() ? "true" : "false";
//			break;
//		case Cell.CELL_TYPE_FORMULA:
//			value = cell.getCellFormula();
//			break;
//		case Cell.CELL_TYPE_NUMERIC:
//			cell.setCellType(Cell.CELL_TYPE_STRING);
//			value = cell.getStringCellValue();
//			break;
//		case Cell.CELL_TYPE_STRING:
//			value = cell.getStringCellValue();
//			break;
//		}
//		if (StringUtils.isNotEmpty(value)) {
//			value = value.replace("无", "");
//			value = value.replace("-", "");
//			value = value.replace("——", "");
//		}
//		return value;
//	}
//
//	private static void writeFile(String targetFile, List<String> list) throws IOException {
//		FileWriter fw = null;
//		try {
//			fw = new FileWriter(targetFile);
//			for (String temp : list) {
//				fw.write(temp);
//				fw.write("\n");
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		} finally {
//			if (fw != null) {
//				fw.close();
//			}
//		}
//	}
//
//	@RequestMapping(value = "sign")
//	@ResponseBody
//	public String importSignData() throws IOException {
//
////		Map<String, String> teams = new HashMap<String, String>();
////		List<String> idcards = new ArrayList<String>();
////
////		List<String> errors = new ArrayList<String>();
////
////		List<Patient> patients = new ArrayList<Patient>();
////		List<SignContract> scs = new ArrayList<SignContract>();
////		List<DoctorTeam> dts = new ArrayList<DoctorTeam>();
////		List<DoctorTeamInfo> dtis = new ArrayList<DoctorTeamInfo>();
////		List<DoctorPatientGroupInfo> dptis = new ArrayList<DoctorPatientGroupInfo>();
////		InputStream is = null;
////		HSSFWorkbook hssfWorkbook = null;
////		try {
////			is = new FileInputStream(new File("D:\\tmp\\sign_data.xls"));
////			hssfWorkbook = new HSSFWorkbook(is);
////			// 获取第一个sheet
////			HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
////			for (int row = 1; row < hssfSheet.getLastRowNum() + 1; row++) {
////				HSSFRow hssfRow = hssfSheet.getRow(row);
////				// 患者姓名
////				String name = getStringValue(hssfRow.getCell(0));
////				// 身份证号
////				String idcard = getStringValue(hssfRow.getCell(1));
////				// 社保卡号
////				String ssc = getStringValue(hssfRow.getCell(2));
////				// 手机号
////				String mobile = getStringValue(hssfRow.getCell(3));
////				// 性别
////				String sex = getStringValue(hssfRow.getCell(4));
////				// 生日
////				String birthday = getStringValue(hssfRow.getCell(5));
////				// 省
////				String province = getStringValue(hssfRow.getCell(6));
////				// 市
////				String city = getStringValue(hssfRow.getCell(7));
////				// 区县
////				String town = getStringValue(hssfRow.getCell(8));
////				// 家庭地址
////				String address = getStringValue(hssfRow.getCell(9));
////				// 疾病类型:1高血压,2糖尿病
////				String disease = getStringValue(hssfRow.getCell(10));
////				// 签约机构
////				// String organization = getStringValue(hssfRow.getCell(11));
////				// 签约开始时间
////				String begin = getStringValue(hssfRow.getCell(12));
////				// 签约到期时间
////				String end = getStringValue(hssfRow.getCell(13));
////				// 专科医生
////				String doctor_1 = getStringValue(hssfRow.getCell(14));
////				// 专科医生手机
////				String d_mobile_1 = getStringValue(hssfRow.getCell(16));
////				// 专科医生所在医院
////				// String d_org_1 = getStringValue(hssfRow.getCell(17));
////				// 全科医生
////				String doctor_2 = getStringValue(hssfRow.getCell(18));
////				// 全科医生手机
////				String d_mobile_2 = getStringValue(hssfRow.getCell(19));
////				// 全科医生所在医院
////				// String d_org_2 = getStringValue(hssfRow.getCell(20));
////				// 健康管理师
////				String doctor_3 = getStringValue(hssfRow.getCell(21));
////				// 健康管理师手机
////				String d_mobile_3 = getStringValue(hssfRow.getCell(22));
////				// 健康管理师所在医院
////				// String d_org_3 = getStringValue(hssfRow.getCell(23));
////				if (StringUtils.isEmpty(idcard)) {
////					errors.add("无效身份证号:" + name);
////					continue;
////				}
////				if (idcards.contains(idcard)) {
////					errors.add("重复的身份证号:" + idcard + "  姓名:" + name);
////					continue;
////				}
////				if (StringUtils.isEmpty(ssc)) {
////					errors.add("无效的社保卡号:" + ssc);
////					continue;
////				}
////				idcards.add(idcard);
////				if (StringUtils.isEmpty(mobile)) {
////					errors.add("无效手机号:" + idcard);
////					continue;
////				}
////				if (mobile.length() != 11) {
////					errors.add("错误手机号:" + mobile);
////					continue;
////				}
////				if (d_mobile_1 == null || d_mobile_1.length() != 11) {
////					errors.add("专科医生手机号码为空:" + mobile);
////					continue;
////				}
////				if (d_mobile_2 == null || d_mobile_2.length() != 11) {
////					errors.add("全科医生手机号码为空:" + mobile);
////					continue;
////				}
////				if (d_mobile_3 == null || d_mobile_3.length() != 11) {
////					errors.add("健康管理师手机号码为空:" + mobile);
////					continue;
////				}
////				IdcardInfoExtractor ie = new IdcardInfoExtractor(idcard);
////				if (ie == null || ie.getGender() == 0) {
////					errors.add("错误的身份证号:" + idcard);
////					continue;
////				}
////
////				Patient patient = new Patient();
////				patient.setAddress(address);
////				patient.setBirthday(DateUtil.strToDateShort(birthday));
////				patient.setCityName(city);
////				patient.setCode(patientService.getCode());
////				patient.setCzrq(new Date());
////				patient.setDisease(NumberUtils.toInt(disease, 0));
////				patient.setDiseaseCondition(0);
////				patient.setIdcard(idcard);
////				patient.setName(name);
////				patient.setMobile(mobile);
////				patient.setProvinceName(province);
////				patient.setSex(NumberUtils.toInt(sex));
////				patient.setSsc(ssc);
////				patient.setTownName(town);
////				patient.setStatus(1);
////				patients.add(patient);
////
////				String team = teams.get(d_mobile_1 + "," + d_mobile_2 + "," + d_mobile_2);
////
////				if (StringUtils.isEmpty(team)) {
////					DoctorTeam dt = new DoctorTeam();
////					dt.setCode(patientService.getCode());
////					dt.setCzrq(new Date());
////					dt.setStatus(1);
////					dt.setDoctor(d_mobile_2);
////					dt.setDoctorName(doctor_2);
////					dt.setDoctors(d_mobile_1 + "," + d_mobile_2 + "," + d_mobile_2);
////					dt.setMembers("3");
////					dt.setName(name);
////					dts.add(dt);
////
////					DoctorTeamInfo dti1 = new DoctorTeamInfo();
////					dti1.setCzrq(new Date());
////					dti1.setDoctor(d_mobile_1);
////					dti1.setName(doctor_1);
////					dti1.setTeam(dt.getCode());
////					dti1.setType(1);
////					dtis.add(dti1);
////
////					DoctorTeamInfo dti2 = new DoctorTeamInfo();
////					dti2.setCzrq(new Date());
////					dti2.setDoctor(d_mobile_2);
////					dti2.setName(doctor_2);
////					dti2.setTeam(dt.getCode());
////					dti2.setType(2);
////					dtis.add(dti2);
////
////					DoctorTeamInfo dti3 = new DoctorTeamInfo();
////					dti3.setCzrq(new Date());
////					dti3.setDoctor(d_mobile_3);
////					dti3.setName(doctor_3);
////					dti3.setTeam(dt.getCode());
////					dti3.setType(3);
////					dtis.add(dti3);
////
////					team = dt.getCode();
////					teams.put(d_mobile_1 + "," + d_mobile_2 + "," + d_mobile_2, dt.getCode());
////				}
////				System.out.println(begin + "=====" + end);
////				System.out.println();
////				SignContract sc = new SignContract();
////				sc.setBegin(DateUtil.strToDateShort(begin));
////				sc.setCode(patientService.getCode());
////				sc.setEnd(DateUtil.strToDateShort(end));
////				sc.setIdcard(idcard);
////				sc.setSsc(ssc);
////				sc.setMobile(mobile);
////				sc.setBirthday(patient.getBirthday());
////				sc.setSex(patient.getSex());
////				sc.setDisease(patient.getDisease());
////				sc.setDiseaseCondition(patient.getDiseaseCondition());
////				sc.setMonths(12);
////				sc.setTeam(team);
////				sc.setUname(name);
////				sc.setUser(patient.getCode());
////				sc.setGp(d_mobile_2);
////				sc.setSpec(d_mobile_1);
////				sc.setHealthManager(d_mobile_3);
////				sc.setStatus(1);
////				scs.add(sc);
////
////				DoctorPatientGroupInfo dpgi1 = new DoctorPatientGroupInfo();
////				dpgi1.setCzrq(new Date());
////				dpgi1.setDoctor(d_mobile_1);
////				dpgi1.setDqrq(sc.getEnd());
////				if (patient.getDisease() == 1) {
////					// 高友
////					dpgi1.setGroup("1");
////				} else if (patient.getDisease() == 2) {
////					// 糖友
////					dpgi1.setGroup("2");
////				} else {
////					// 我的患者
////					dpgi1.setGroup("3");
////				}
////				dpgi1.setPartAmount(0);
////				dpgi1.setPatient(patient.getCode());
////				dpgi1.setPname(patient.getName());
////				dpgi1.setQyrq(sc.getBegin());
////				dpgi1.setSignType("1");
////				dpgi1.setStatus(1);
////				dptis.add(dpgi1);
////
////				DoctorPatientGroupInfo dpgi2 = new DoctorPatientGroupInfo();
////				dpgi2.setCzrq(new Date());
////				dpgi2.setDoctor(d_mobile_2);
////				dpgi2.setDqrq(sc.getEnd());
////				if (patient.getDisease() == 1) {
////					// 高友
////					dpgi2.setGroup("1");
////				} else if (patient.getDisease() == 2) {
////					// 糖友
////					dpgi2.setGroup("2");
////				} else {
////					// 我的患者
////					dpgi2.setGroup("3");
////				}
////				dpgi2.setPartAmount(0);
////				dpgi2.setPatient(patient.getCode());
////				dpgi2.setPname(patient.getName());
////				dpgi2.setQyrq(sc.getBegin());
////				dpgi2.setSignType("1");
////				dpgi2.setStatus(1);
////				dptis.add(dpgi2);
////
////				DoctorPatientGroupInfo dpgi3 = new DoctorPatientGroupInfo();
////				dpgi3.setCzrq(new Date());
////				dpgi3.setDoctor(d_mobile_3);
////				dpgi3.setDqrq(sc.getEnd());
////				if (patient.getDisease() == 1) {
////					// 高友
////					dpgi3.setGroup("1");
////				} else if (patient.getDisease() == 2) {
////					// 糖友
////					dpgi3.setGroup("2");
////				} else {
////					// 我的患者
////					dpgi3.setGroup("3");
////				}
////				dpgi3.setPartAmount(0);
////				dpgi3.setPatient(patient.getCode());
////				dpgi3.setPname(patient.getName());
////				dpgi3.setQyrq(sc.getBegin());
////				dpgi3.setSignType("1");
////				dpgi3.setStatus(1);
////				dptis.add(dpgi3);
////			}
////			importDataService.importSignData(patients, scs, dts, dtis, dptis);
////			writeFile("D:\\tmp\\error.txt", errors);
////			return success("导入成功!");
////		} catch (Exception e) {
////			error(e);
////			return error(-1, "导入失败!");
////		} finally {
////			if (is != null) {
////				is.close();
////			}
////			if (hssfWorkbook != null) {
////				hssfWorkbook.close();
////			}
////		}
//		return null;
//	}
}

+ 1 - 0
src/main/java/com/yihu/wlyy/web/common/util/ManagerUtilController.java

@ -127,6 +127,7 @@ public class ManagerUtilController extends BaseController {
     *
     * @return
     */
    @RequestMapping(value = "/people_num_to_redis")
    public String peopleNumToRedis() {
        try {
            statisticsService.peopleNumToRedis();

+ 182 - 0
src/main/java/com/yihu/wlyy/web/common/util/WlyySerivceController.java

@ -0,0 +1,182 @@
package com.yihu.wlyy.web.common.util;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by lyr on 2016/9/29.
 */
@RestController
@RequestMapping(value = "/wlyy_service")
@Api(description = "卫计委签约接口调试")
public class WlyySerivceController extends BaseController{
    /**
     * 检查是否签约
     *
     * @param idcard
     * @return
     */
    @RequestMapping(value = "/third/sign/CheckSignFamily",method = RequestMethod.POST)
    @ApiOperation("检查是否签约")
    public String checkSignFamily(@RequestParam("idcard") String idcard){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/CheckSignFamily?idcard=" + idcard, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 上传签约数据
     *
     * @param code
     * @return
     */
    @RequestMapping(value = "/third/sign/UploadSignFamily",method = RequestMethod.POST)
    @ApiOperation("上传签约数据")
    public String uploadSignFamily(@RequestParam("code")String code){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/UploadSignFamily?code=" + code, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 初次采集签约接口
     *
     * @param start_time
     * @return
     */
    @RequestMapping(value = "/third/sign/LoadAllSignFamily",method = RequestMethod.POST)
    @ApiOperation("初次采集签约接口")
    public String loadAllSignFamily(@RequestParam("start_time")String start_time){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/LoadAllSignFamily?start_time=" + start_time, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 单条采集签约接口
     *
     * @param idcard
     * @return
     */
    @RequestMapping(value = "/third/sign/LoadSignFamily",method = RequestMethod.POST)
    @ApiOperation("单条采集签约接口")
    public String loadSingleSignFamily(@RequestParam("idcard")String idcard){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/LoadSignFamily?idcard=" + idcard, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 时间范围采集签约接口
     *
     * @param start_time
     * @param end_time
     * @return
     */
    @RequestMapping(value = "/third/sign/LoadSignFamilyBatch",method = RequestMethod.POST)
    @ApiOperation("时间范围采集签约接口")
    public String loadSignFamilyBatch(@RequestParam("start_time")String start_time,@RequestParam("end_time")String end_time){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/LoadSignFamilyBatch?start_time=" + start_time + "&end_time=" + end_time, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 补上传签约接口
     *
     * @return
     */
    @RequestMapping(value = "/third/sign/ReUploadSignFamily",method = RequestMethod.POST)
    public String reuploadSignFamily(){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/ReUploadSignFamily", "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 补更新签约接口
     *
     * @return
     */
    @RequestMapping(value = "/third/sign/ReUpdateSignFamily",method = RequestMethod.POST)
    public String reupdateSignFamily(){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/ReUpdateSignFamily", "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
}

+ 71 - 1
src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java

@ -4,6 +4,8 @@ import java.util.List;
import java.util.Map;
import com.yihu.wlyy.service.app.health.PatientHealthGuidanceService;
import com.yihu.wlyy.service.app.scheduling.DoctorWorkTimeService;
import com.yihu.wlyy.service.common.account.DoctorService;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
@ -45,10 +47,14 @@ public class DoctorConsultController extends WeixinBaseController {
	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 名医咨询 已结束
	 * @param type 咨询类型:0、全部,1、咨询我的,2、公共的, 3、参与过的,4、已结束的  5 名医咨询 全部  6 名医咨询 进行中 7 名医咨询 已结束 8名医咨询 待处理 9咨询我的三师 + 家庭 + 名医
	 * @param id
	 * @param pagesize 每页显示数,默认为10
	 * @return
@ -106,6 +112,70 @@ public class DoctorConsultController extends WeixinBaseController {
		}
	}
	/**
	 * 名医列表
	 * @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;
					}
					// 判断名医是否在工作
					JSONObject isWorking = doctorWorkTimeService.isDoctorWorking(doctor.getCode());
					if(isWorking == null || !isWorking.getString("status").equals("1")){
						continue;
					}
					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, "获取医院医生列表失败!");
		}
	}
	/**
	 * 获取咨询全科医生签约量
	 *

+ 36 - 1
src/main/java/com/yihu/wlyy/web/doctor/discussion/DoctorDiscussionGroupController.java

@ -521,7 +521,7 @@ public class DoctorDiscussionGroupController extends BaseController {
					}
				}
			}else if(groups != null){
				jsonArray.put(new JSONArray(groups));
				jsonArray = new JSONArray(groups);
			}
			return write(200, "获取医生讨论组成功!","data",jsonArray);
@ -662,4 +662,39 @@ public class DoctorDiscussionGroupController extends BaseController {
		}
	}
	/**
	 * 获取医生一对一聊天
	 *
	 * @param doctorName
	 * @return
	 */
	@RequestMapping(value = "/one_to_one_im")
	@ResponseBody
	public String getOneToOneIm(@RequestParam(required = false) String doctorName
			,@RequestParam(required = false) Integer page
			,@RequestParam(required = false) Integer pagesize){
		try{
			JSONArray result = talkGroupService.getOneToOneIm(getUID(),doctorName);
			if(page != null && pagesize != null){
				int from = (page - 1)*pagesize;
				int end = from + pagesize;
				JSONArray pageResult = new JSONArray();
				if(result != null){
					for(int i = from; i < result.length(); i++){
						if(i < end){
							pageResult.put(result.getJSONObject(i));
						}
					}
				}
				return write(200,"查询成功","data",pageResult);
			}else{
				return write(200,"查询成功","data",result);
			}
		}catch (Exception e){
			e.printStackTrace();
			return error(-1,"查询失败");
		}
	}
}

+ 20 - 0
src/main/java/com/yihu/wlyy/web/doctor/message/DoctorMessageController.java

@ -44,6 +44,26 @@ public class DoctorMessageController extends BaseController {
		}
	}
	/**
	 * 医生消息总数统计接口
	 * @return
	 */
	@RequestMapping(value = "messages")
	@ResponseBody
	public String messages() {
		try {
			JSONObject json = messageService.findDoctorAllMessage(getUID());
			if (json == null) {
				return error(-1, "获取消息总数失败!");
			} else {
				return write(200, "获取消息总数成功!", "data", json);
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "获取消息总数失败!");
		}
	}
	/**
	 * 健康咨询消息列表查询接口
	 * @param id

+ 3 - 0
src/main/java/com/yihu/wlyy/web/doctor/patient/DoctorPatientGroupController.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.web.doctor.patient;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -654,6 +655,8 @@ public class DoctorPatientGroupController extends BaseController {
                    jtJson.put("beginDate",DateUtil.dateToStr(jtSign.getBegin(), DateUtil.YYYY_MM_DD));
                    jtJson.put("endDate",DateUtil.dateToStr(jtSign.getEnd(), DateUtil.YYYY_MM_DD));
                    jtJson.put("expensesType",jtSign.getExpensesType());
                    jtJson.put("expensesStatus",jtSign.getExpensesStatus());
                    jtJson.put("expensesTime",jtSign.getExpensesTime() == null?"":new SimpleDateFormat("yyyy-MM-dd HH:mm").format(jtSign.getExpensesTime()));
                    jtJson.put("jyDate", DateUtil.dateToStr(jtSign.getApplyUnsignDate(), DateUtil.YYYY_MM_DD));
                    jtJson.put("status",jtSign.getStatus());
                    json.put("jtSign",jtJson);

+ 1 - 33
src/main/java/com/yihu/wlyy/web/doctor/patient/PatientDiseaseController.java

@ -18,7 +18,7 @@ import java.util.List;
/**
 * 患者疾病控制器
 * <p>
 *
 * Created by lyr on 2016/09/09.
 */
@RestController
@ -95,36 +95,4 @@ public class PatientDiseaseController extends BaseController {
            return error(-1, "更新失败");
        }
    }
    /**
     * 更新到redis
     *
     * @return
     */
    @RequestMapping(value = "/to_redis")
    public String updateToRedid() {
        try {
            patientDiseaseService.updateToRedis();
            return write(200, "更新成功");
        } catch (Exception e) {
            return error(-1, "更新失败");
        }
    }
    /**
     * 更新到疾病表
     *
     * @return
     */
    @RequestMapping(value = "/to_disease")
    public String updateToDisease() {
        try {
            patientDiseaseService.updateToDisease();
            return write(200, "更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "更新失败");
        }
    }
}

+ 18 - 0
src/main/java/com/yihu/wlyy/web/doctor/scheduling/DoctorWorkTimeController.java

@ -191,6 +191,24 @@ public class DoctorWorkTimeController extends BaseController {
        }
    }
    /**
     * 名医是否在工作
     *
     * @param doctor
     * @return
     */
    @RequestMapping(value = "is_famous_doctor_working")
    @ResponseBody
    public String isFamousDoctorAtWorking(String doctor){
        try{
            JSONObject result = doctorWorkTimeService.isFamousDoctorWorking(doctor);
            return write(200,result.getString("msg"),"data",result.getString("status"));
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"查询失败");
        }
    }
    /**
     * 查询某个医生的工作时间
     *

+ 77 - 6
src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java

@ -5,6 +5,8 @@ import java.util.Map;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.message.MessageService;
import com.yihu.wlyy.util.*;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
@ -23,11 +25,6 @@ import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.util.CommonUtil;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.IdcardInfoExtractor;
import com.yihu.wlyy.util.IdcardValidator;
import com.yihu.wlyy.util.RSAUtils;
import com.yihu.wlyy.web.WeixinBaseController;
/**
@ -50,6 +47,8 @@ public class DoctorFamilyContractController extends WeixinBaseController {
    PatientInfoService patientInfoService;
    @Autowired
    StringRedisTemplate redisTemplate;
    @Autowired
    MessageService messageService;
    /**
     * 医生签约患者列表查询接口
@ -277,6 +276,28 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            int type, String group,
            @RequestParam(required = false, defaultValue = "0") String expenses) {
        try {
            try {
                String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
                String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/CheckSignFamily?idcard=" + patientIDcard, "");
                if (!StringUtils.isEmpty(jsonString)) {
                    JSONObject checkJson = new JSONObject(jsonString);
                    if (checkJson.getInt("status") == 200) {
                        JSONObject jsonData = checkJson.getJSONObject("data");
                        if (jsonData.getString("status").equals("1")) {
                            messageService.readHealth(msgid);
                            familyContractService.updateSignStatus(patientIDcard);
                            return error(-1, "该居民已在基卫平台签约,无需重复在移动端申请");
                        }
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            int res = familyContractService.handleSign(signType, getAccessToken(), healthDoctor, healthDoctorName, msgid, patientIDcard, type, disease, majorDoctor, majorDoctorName, group, expenses);
            if (res == -1) {
                return error(-1, "未知的处理类型!");
@ -374,6 +395,8 @@ public class DoctorFamilyContractController extends WeixinBaseController {
                    json.put("title", msg.getTitle());
                    // 消息内容
                    json.put("message", msg.getContent());
                    // 签约code
                    json.put("signCode", StringUtils.isEmpty(msg.getData())?"":msg.getData());
                    // 消息类型
                    json.put("type", msg.getType());
                    // 发送人标识
@ -459,7 +482,29 @@ public class DoctorFamilyContractController extends WeixinBaseController {
                return error(-1, "请输入身份证号!");
            }
            JSONObject result = familyContractService.getSanshiSingInfoByPatientIdCard(idCard);
            JSONObject result = new JSONObject();
            try {
                String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
                String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/CheckSignFamily?idcard=" + idCard, "");
                if (!StringUtils.isEmpty(jsonString)) {
                    JSONObject checkJson = new JSONObject(jsonString);
                    if (checkJson.getInt("status") == 200) {
                        JSONObject jsonData = checkJson.getJSONObject("data");
                        if (jsonData.getString("status").equals("1")) {
                            result.put("signStatus", "2");
                            result.put("msg", "该居民已在基卫平台签约,无需重复在移动端申请!");
                            return write(200, "查询成功!", "data", result);
                        }
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            result = familyContractService.getSanshiSingInfoByPatientIdCard(idCard);
            return write(200, "查询成功!", "data", result);
        } catch (Exception e) {
@ -609,4 +654,30 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取签约数据
     *
     * @param code 签约code
     * @return
     */
    @RequestMapping(value = "/family_sign")
    @ResponseBody
    public String getSignFamily(String code){
        try{
            if(StringUtils.isEmpty(code)){
                return error(-1,"参数不能为空");
            }
            SignFamily signFamily = familyContractService.findSignFamilyByCode(code);
            if(signFamily == null){
                return error(-1,"签约数据不存在");
            }
            return write(200,"查询成功","data",new JSONObject(signFamily));
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"查询失败");
        }
    }
}

+ 4 - 0
src/main/java/com/yihu/wlyy/web/doctor/team/SignTeamController.java

@ -102,6 +102,10 @@ public class SignTeamController extends BaseController {
                json.put("introduce", temp.getIntroduce());
                // 二维码地址
                json.put("qrcode", temp.getQrcode());
                // 手机号
                json.put("mobile", temp.getMobile());
                // 级别
                json.put("level", temp.getLevel());
                return write(200, "医生信息查询成功!", "data", json);
            } else {
                return error(-1, "医生信息查询失败!");

+ 26 - 1
src/main/java/com/yihu/wlyy/web/patient/consult/ConsultController.java

@ -157,6 +157,23 @@ public class ConsultController extends WeixinBaseController {
		}
	}
	/**
	 * 名医是否在工作
	 *
	 * @param doctor
	 * @return
	 */
	@RequestMapping(value = "is_famous_doctor_working")
	@ResponseBody
	public String isFamousDoctorAtWorking(String doctor){
		try{
			JSONObject result = doctorWorkTimeService.isFamousDoctorWorking(doctor);
			return write(200,result.getString("msg"),"data",result.getString("status"));
		}catch (Exception e){
			e.printStackTrace();
			return error(-1,"查询失败");
		}
	}
	/**
	 * 名医咨询剩余次数查询
@ -290,7 +307,7 @@ public class ConsultController extends WeixinBaseController {
					  @RequestParam(required = false) String voice) {
		try {
			//判断医生是否是在工作时间
			JSONObject jo=doctorWorkTimeService.isDoctorWorking(doctorCode);
			JSONObject jo=doctorWorkTimeService.isFamousDoctorWorking(doctorCode);
			if(!jo.get("status").equals("1")){
				return error(-1, jo.get("msg").toString());
			}
@ -359,6 +376,14 @@ public class ConsultController extends WeixinBaseController {
					if (doctor == null) {
						continue;
					}
					// 判断名医是否在工作
					JSONObject isWorking = doctorWorkTimeService.isFamousDoctorWorking(doctor.getCode());
					if(isWorking == null || !isWorking.getString("status").equals("1")){
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("id", doctor.getId());
					// 医生标识

+ 174 - 36
src/main/java/com/yihu/wlyy/web/quota/JobController.java

@ -1,90 +1,119 @@
package com.yihu.wlyy.web.quota;
import com.yihu.wlyy.job.*;
import com.yihu.wlyy.job.QuartzHelper;
import com.yihu.wlyy.job.consult.ConsultCleanerJob;
import com.yihu.wlyy.job.consult.FamousConsultTimesJob;
import com.yihu.wlyy.service.app.disease.PatientDiseaseService;
import com.yihu.wlyy.service.app.scheduling.DoctorWorkTimeService;
import com.yihu.wlyy.service.app.statistics.StatisticsService;
import com.yihu.wlyy.service.quota.JobService;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import static com.yihu.wlyy.job.consult.ConsultCleanerJob.ConsultTerminatorJobKey;
/**
 * Created by Administrator on 2016/8/15.
 * 任务启动
 *
 * @author chenweida
 */
@Controller
@RequestMapping("/job")
@RestController
@RequestMapping(value = "/job", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "后台-任务控制")
public class JobController extends BaseController {
    private final JobService jobService;
    private final PatientDiseaseService diseaseService;
    private final StringRedisTemplate redisTemplate;
    private final QuartzHelper quartzHelper;
    private final DoctorWorkTimeService workTimeService;
    private final StatisticsService statisticsService;
    @Autowired
    private JobService jobService;
    public JobController(StatisticsService statisticsService, JobService jobService, StringRedisTemplate redisTemplate, DoctorWorkTimeService workTimeService, PatientDiseaseService diseaseService, QuartzHelper quartzHelper) {
        this.statisticsService = statisticsService;
        this.jobService = jobService;
        this.redisTemplate = redisTemplate;
        this.workTimeService = workTimeService;
        this.diseaseService = diseaseService;
        this.quartzHelper = quartzHelper;
    }
    /**
     * 启动任务
     *
     * @param id id
     * @return
     */
    @RequestMapping(value = "startNowById")
    @ResponseBody
    @RequestMapping(value = "startNowById", method = RequestMethod.GET)
    public String startNowById(String id) {
        try {
            jobService.startNowById(id);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去几天的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByDay")
    @ResponseBody
    @RequestMapping(value = "productDataByDay", method = RequestMethod.GET)
    public String productDataByDay(Integer day) {
        try {
            jobService.productDataByDay(day);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去某一天的全部的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByOneDay")
    @ResponseBody
    @RequestMapping(value = "productDataByOneDay", method = RequestMethod.GET)
    public String productDataByOneDay(String day) {
        try {
            jobService.productDataByOneDay(day);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去某一天的某一个指标的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByOneDayWithId")
    @ResponseBody
    public String productDataByOneDayWithId(String day,String id) {
    @RequestMapping(value = "productDataByOneDayWithId", method = RequestMethod.GET)
    public String productDataByOneDayWithId(String day, String id) {
        try {
            jobService.productDataByOneDayWithId(day,id);
            jobService.productDataByOneDayWithId(day, id);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
@ -94,8 +123,7 @@ public class JobController extends BaseController {
     * @param id id
     * @return
     */
    @RequestMapping(value = "startById")
    @ResponseBody
    @RequestMapping(value = "startById", method = RequestMethod.GET)
    public String startById(String id) {
        try {
@ -103,24 +131,24 @@ public class JobController extends BaseController {
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止任务
     *
     * @param id id
     * @return
     */
    @RequestMapping(value = "stopById")
    @ResponseBody
    @RequestMapping(value = "stopById", method = RequestMethod.GET)
    public String stopById(String id) {
        try {
            jobService.stopById(id);
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
@ -129,15 +157,14 @@ public class JobController extends BaseController {
     *
     * @return
     */
    @RequestMapping(value = "stopAll")
    @ResponseBody
    @RequestMapping(value = "stopAll", method = RequestMethod.GET)
    public String stopAll() {
        try {
            jobService.stopAll();
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
@ -146,27 +173,138 @@ public class JobController extends BaseController {
     *
     * @return
     */
    @RequestMapping(value = "startAll")
    @ResponseBody
    @RequestMapping(value = "startAll", method = RequestMethod.GET)
    public String startAll() {
        try {
            jobService.startAll();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    @RequestMapping(value = "startaaaa")
    @ResponseBody
    @RequestMapping(value = "startaaaa", method = RequestMethod.GET)
    public String startaaaa() {
        try {
            jobService.startaaaa();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:"+e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 将患者疾病推送到redis
     *
     * @return
     */
    @RequestMapping(value = "/disease/to_redis", method = RequestMethod.GET)
    public String updateToRedid() {
        try {
            diseaseService.updateToRedis();
            return write(200, "更新成功");
        } catch (Exception e) {
            return error(-1, "更新失败");
        }
    }
    /**
     * 将患者疾病到数据库
     *
     * @return
     */
    @RequestMapping(value = "/disease/to_disease", method = RequestMethod.GET)
    public String updateToDisease() {
        try {
            diseaseService.updateToDisease();
            return write(200, "更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "更新失败");
        }
    }
    /**
     * 从Redis查询患者疾病
     *
     * @param patient
     * @return
     */
    @RequestMapping(value = "/disease/patient", method = RequestMethod.GET)
    public String getDiseaseFromRedis(String patient) {
        try {
            return write(200, "查询成功", "data", redisTemplate.opsForValue().get("disease:" + patient));
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 开始名医咨询剩余次数统计任务
     *
     * @return
     */
    @RequestMapping(value = "/famous_doctor/start_job", method = RequestMethod.GET)
    public String startConsultTimesJob() {
        try {
            if (!quartzHelper.isExistJob("famous-doctor-times")) {
                quartzHelper.addJob(FamousConsultTimesJob.class, "0 0 0 * * ?", "famous-doctor-times", new HashMap<String, Object>());
                return write(200, "启动成功");
            } else {
                return write(200, "任务已存在");
            }
        } catch (Exception e) {
            error(e);
            return error(-1, "启动失败");
        }
    }
    /**
     * 名医咨询剩余次数手动更新
     *
     * @return
     */
    @RequestMapping(value = "/famous_doctor/times_update", method = RequestMethod.GET)
    public String famousConsultTimeUpdate() {
        try {
            workTimeService.consultTimesRemain(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
            return write(200, "更新成功");
        } catch (Exception e) {
            error(e);
            return error(-1, "更新失败");
        }
    }
    /**
     * 更新人口数据到redis
     *
     * @return
     */
    public String peopleNumToRedis() {
        try {
            statisticsService.peopleNumToRedis();
            return write(200, "更新成功");
        } catch (Exception e) {
            error(e);
            return error(-1, "更新失败");
        }
    }
    /**
     * 添加患者咨询超时未响应关闭任务。
     */
    @RequestMapping(value = "/consult_auto_termination", method = RequestMethod.POST)
    @ApiOperation("添加超时咨询自动关闭任务")
    public String addConsultJob() {
        try {
            quartzHelper.startNow(ConsultCleanerJob.class, ConsultTerminatorJobKey, null);
            return write(200, "");
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
}

+ 0 - 17
src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -23,23 +23,6 @@ public class StatisticsController extends BaseController {
    @Autowired
    StatisticsService statisticsService;
    /**
     * 缓存人口数据到redis
     *
     * @return
     */
    @RequestMapping(value = "/people_num_to_redis")
    @ResponseBody
    public String peopleNumToRedis(){
        try{
            statisticsService.peopleNumToRedis();
            return write(200,"更新成功");
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"更新失败");
        }
    }
    /**
     * 指标按间隔统计
     *

BIN
src/main/resources/kaptcha-2.3.2.jar


+ 13 - 0
src/main/resources/system.properties

@ -61,6 +61,10 @@ appId=wxd03f859efdf0873d
appSecret=2935b54b53a957d9516c920a544f2537
wechat_base_url=http%3a%2f%2fweixin.xmtyw.cn%2fwlyy
wechat_token=27eb3bb24f149a7760cf1bb154b08040
#是否签约检查和签约数据上传
sign_check_upload=http://172.19.103.87:8011/wlyy_service
#im一对一列表获取
im_list_get=http://172.19.103.76:3000/
#-------------测试------------#
#server_ip=ehr.yihu.com
@ -71,6 +75,13 @@ wechat_token=27eb3bb24f149a7760cf1bb154b08040
#appSecret=988f005d8309ed1795939e0f042431fb
#wechat_base_url=http%3a%2f%2fehr.yihu.com%2fwlyy
#wechat_token=27eb3bb24f149a7760cf1bb154b08040
##是否签约检查和签约数据上传
#sign_check_upload=http://172.19.103.85:8011/wlyy_service
##im一对一列表获取
#im_list_get=http://172.19.103.88:3000/
#----------------正式环境卫计委签约调用接口地址-------------------#
#sign_check_upload=http://59.61.92.90:8072/wlyy_service
im_group_server=http://120.41.252.108:3031/group/sendgroupmsg.im
msg_push_server=http://120.41.252.108:3031/push/sendmsg.im
@ -164,3 +175,5 @@ template_appoint_failed=tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s
guahao_url = http://www.xmsmjk.com/UrpNetService/ReservationNet.asmx
guahao_namespace = http://www.zysoft.com.cn/
# 基卫对接服务地址
jw_url = http://localhost:8011/