Переглянути джерело

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

hzp 8 роки тому
батько
коміт
67e29fda69
22 змінених файлів з 1744 додано та 970 видалено
  1. 34 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java
  2. 20 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/MessageDao.java
  3. 97 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/message/HealthMessageJob.java
  4. 245 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/Message.java
  5. 19 36
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java
  6. 1 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamDao.java
  7. 3 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientReservationDao.java
  8. 1 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/account/PatientInfoService.java
  9. 1 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthGuidanceService.java
  10. 67 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/label/SignPatientLabelInfoService.java
  11. 4 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/reservation/PatientReservationService.java
  12. 8 5
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/ExpensesRemindService.java
  13. 184 88
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  14. 34 10
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/team/AdminTeamService.java
  15. 344 320
      patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java
  16. 48 9
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/account/DoctorController.java
  17. 1 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java
  18. 72 29
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java
  19. 16 2
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/account/PatientController.java
  20. 517 468
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/FamilyContractController.java
  21. 22 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/BookingController.java
  22. 6 0
      patient-co-wlyy/src/main/resources/system.properties

+ 34 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java

@ -321,7 +321,40 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    //@RequestMapping(value = "startaaaa", method = RequestMethod.GET)
    /**
     * 启动健康信息生成的任务
     *
     * @return
     */
    @ApiOperation(value = "启动健康信息生成的任务")
    @RequestMapping(value = "startHealthMessageJob", method = RequestMethod.GET)
    public String startHealthMessageJob() {
        try {
            jobService.startHealthMessageJob();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止判断的任务
     *
     * @return
     */
    @ApiOperation(value = "停止健康信息生成的任务")
    @RequestMapping(value = "stopHealthMessageJob", method = RequestMethod.GET)
    public String stopHealthMessageJob() {
        try {
            jobService.stopHealthMessageJob();
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
  @RequestMapping(value = "startaaaa", method = RequestMethod.GET)
    public String startaaaa() {
        try {
            jobService.startaaaa();

+ 20 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/MessageDao.java

@ -0,0 +1,20 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.statistics.dao;
import com.yihu.wlyy.statistics.model.signfamily.Message;
import org.springframework.data.domain.Page;
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;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface MessageDao extends PagingAndSortingRepository<Message, Long>, JpaSpecificationExecutor<Message> {
}

+ 97 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/message/HealthMessageJob.java

@ -0,0 +1,97 @@
package com.yihu.wlyy.statistics.job.message;
import com.yihu.wlyy.statistics.dao.MessageDao;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.model.signfamily.Message;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by Administrator on 2016.10.25.
 */
@Component
@Scope("prototype")
public class HealthMessageJob implements Job {
    public static String jobKey="Health_Message_JOB";
    public static String cron="0 0 17 * * ?";
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private MessageDao messageDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Transactional
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            String sql="select doctor,doctor_name from wlyy_sign_family " +
                    " where  status >0 and type='2' and expenses_status='1'  " +
                    " and expenses_time >='"+getYesterday(-1,new Date())+" 17:00:00' and expenses_time<'"+getYesterday(0,new Date())+" 17:00:00' and  (doctor_health is null or doctor_health = '')" ;
            String countSql="select count(id) from wlyy_sign_family " +
                    " where  status >0 and type='2' and expenses_status='1'  " +
                    " and expenses_time >='"+getYesterday(-1,new Date())+" 17:00:00' and expenses_time<'"+getYesterday(0,new Date())+" 17:00:00' and  (doctor_health is null or doctor_health = '')" ;
            List<SignFamily> signFamilyList=dbExtract.extractByPage(SignFamily.class,sql,countSql,true);
            Map<String,List<SignFamily>> signFamilyMap=new HashMap<String,List<SignFamily>>();
            for(int i=0;i<signFamilyList.size();i++){
                SignFamily signFamilyTemp=signFamilyList.get(i);
                if (signFamilyMap.containsKey(signFamilyTemp.getDoctor())){
                    signFamilyMap.get(signFamilyTemp.getDoctor()).add(signFamilyTemp);
                }else{
                    List<SignFamily> signFamilies=new ArrayList<>();
                    signFamilies.add(signFamilyTemp);
                    signFamilyMap.put(signFamilyTemp.getDoctor(),signFamilies);
                }
            }
            for(Map.Entry<String,List<SignFamily>> entry:signFamilyMap.entrySet()){
                 countSql="select count(id) from wlyy_sign_family " +
                        " where  status >0 and type='2' and expenses_status='1'  " +
                        "  and expenses_time<'"+getYesterday(0,new Date())+" 17:00:00' and  (doctor_health is null or doctor_health = '') and doctor='"+entry.getKey()+"'" ;
                Integer allCount=jdbcTemplate.queryForObject(countSql,Integer.class);
                Message message=new Message();
                message.setType(3);
                message.setRead(0);
                message.setOver("0");
                message.setDel("1");
                message.setSender("system");
                message.setCzrq(new Date());
                message.setState(1);
                message.setTitle("新增系统消息");
                SimpleDateFormat dateFormat=new SimpleDateFormat("MM月dd日");
                String date=  dateFormat.format(new Date());
                message.setContent(date+",新增"+entry.getValue().size()+"个签约居民待分配健管师,目前共"+allCount+"人待处理");
                message.setCode(UUID.randomUUID().toString());
                message.setReceiver(entry.getKey());
                messageDao.save(message);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static String getYesterday(Integer day,Date startDate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        cal.add(Calendar.DAY_OF_MONTH, day);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
    public static void main(String[] args) {
    }
}

Різницю між файлами не показано, бо вона завелика
+ 245 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/Message.java


+ 19 - 36
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java

@ -9,14 +9,17 @@ import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.job.business.QuartzHelper;
import com.yihu.wlyy.statistics.job.cache.CacheCleanJob;
import com.yihu.wlyy.statistics.job.check.CheckSignJob;
import com.yihu.wlyy.statistics.job.message.HealthMessageJob;
import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo;
import com.yihu.wlyy.statistics.model.job.QuartzJobConfig;
import com.yihu.wlyy.statistics.model.job.WlyyQuota;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.SchedulerException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -250,42 +253,9 @@ public class JobService {
    }
    @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();
                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");
    @Async("dbExtractExecutor")
    public void startaaaa() throws  Exception{
        quartzHelper.startNow(HealthMessageJob.class,UUID.randomUUID().toString().replace("-",""),new HashMap<>());
    }
    public void productDataByDayAndId(Integer day, String id) throws Exception{
@ -345,6 +315,7 @@ public class JobService {
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
    public static int daysBetween(Date smdate,Date bdate) throws ParseException
    {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
@ -407,4 +378,16 @@ public class JobService {
        returnMessage+="diseaseGroupCache"+(diseaseGroupCache.size()>0?"有缓存":"没有缓存");
        return returnMessage;
    }
    public void startHealthMessageJob() throws Exception {
        if(!quartzHelper.isExistJob(HealthMessageJob.jobKey)){
            quartzHelper.addJob(HealthMessageJob.class,HealthMessageJob.cron,HealthMessageJob.jobKey,new HashMap<>());
        }
    }
    public void stopHealthMessageJob()throws Exception  {
        if(quartzHelper.isExistJob(HealthMessageJob.jobKey)){
            quartzHelper.removeJob(HealthMessageJob.jobKey);
        }
    }
}

+ 1 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamDao.java

@ -75,4 +75,5 @@ public interface DoctorAdminTeamDao extends
    AdminTeam findByLeaderCode(@Param("leaderCode") String leaderCode);
    List<AdminTeam> findByOrgCode(String orgCode);
}

+ 3 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/patient/PatientReservationDao.java

@ -26,4 +26,7 @@ public interface PatientReservationDao extends PagingAndSortingRepository<Patien
	List<PatientReservation> findByPatientAndDoctor(String patient,String doctor,Pageable page);
	List<PatientReservation> findByDoctor(String doctor,Pageable page);
	@Query("select count(1) from PatientReservation a where a.doctor = ?1 and a.patient=?2 ")
	Long  countReservationByDoctorForPatient(String doctor,String patient);
}

+ 1 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/account/PatientInfoService.java

@ -166,7 +166,7 @@ public class PatientInfoService extends BaseService {
        // 用户校验通过,生成token
        Token token = tokenService.newTxToken(fp.getCode(), openid);
        Map<Object, Object> map = new HashMap<Object, Object>();
        JSONObject map = new JSONObject();
        map.put("id", fp.getId());
        map.put("uid", fp.getCode());

+ 1 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthGuidanceService.java

@ -71,6 +71,7 @@ public class PatientHealthGuidanceService extends BaseService {
			// 推送消息到微信端
			JSONObject json = new JSONObject();
			json.put("first", "健康指导提醒");
			json.put("toUser", patient.getCode());
			json.put("date", DateUtil.getStringDate());
			json.put("orgName", doctor.getHosptialName());
			json.put("doctorName", doctor.getName());

+ 67 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/label/SignPatientLabelInfoService.java

@ -21,6 +21,7 @@ import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -53,7 +54,8 @@ public class SignPatientLabelInfoService extends BaseService {
    JdbcTemplate jdbcTemplate;
    @Autowired
    SignFamilyDao signFamilyDao;
    @Autowired
    StringRedisTemplate redisTemplate;
    /**
     * 根据标签查询患者信息
     *
@ -175,6 +177,12 @@ public class SignPatientLabelInfoService extends BaseService {
                json.put("code", p.getCode());
                // 设置患者姓名
                json.put("name", p.getName());
                // 设置患者手机号
                json.put("mobile", p.getMobile());
                // 设置患者联系电话
                json.put("phone", p.getPhone());
                // 设置患者紧急联系人
                json.put("emerMobile", sign.get("emer_mobile") == null ? "" : String.valueOf(sign.get("emer_mobile")));
                // 设置患者头像
                json.put("photo", p.getPhoto());
                // 设置患者年龄
@ -189,6 +197,22 @@ public class SignPatientLabelInfoService extends BaseService {
                json.put("idcard", p.getIdcard());
                // 社保号
                json.put("ssc", p.getSsc());
                // 缴费情况
                json.put("expensesStatus", sign.get("expenses_status") != null ? String.valueOf(sign.get("expenses_status")): "0");
                // 缴费时间
                json.put("expensesTime", sign.get("expenses_time") != null ? DateUtil.dateToStr((Date) sign.get("expenses_time"), DateUtil.YYYY_MM_DD_HH_MM) : "");
                // 缴费类型
                json.put("expensesType", sign.get("expenses_type") != null ? String.valueOf(sign.get("expenses_type")): "");
                if (StringUtils.isEmpty(String.valueOf(json.get("expensesStatus"))) || String.valueOf(json.get("expensesStatus")).equals("0")) {
                    String epTime = redisTemplate.opsForValue().get("expenses:remind:" + p.getCode());
                    if (StringUtils.isEmpty(epTime)) {
                        json.put("expensesRemindStatus", 0);
                    } else {
                        json.put("expensesRemindStatus", new SimpleDateFormat("yyyy-MM-dd").format(new Date()).equals(epTime) ? 1 : 0);
                    }
                }
                // 患者标签
                //json.put("labels", labels == null ? "" : labels);
@ -270,6 +294,12 @@ public class SignPatientLabelInfoService extends BaseService {
                json.put("code", p.getCode());
                // 设置患者姓名
                json.put("name", p.getName());
                // 设置患者手机号
                json.put("mobile", p.getMobile());
                // 设置患者联系电话
                json.put("phone", p.getPhone());
                // 设置患者紧急联系人
                json.put("emerMobile", sign.get("emer_mobile") == null ? "" : String.valueOf(sign.get("emer_mobile")));
                // 设置患者头像
                json.put("photo", p.getPhoto());
                // 设置患者年龄
@ -284,6 +314,21 @@ public class SignPatientLabelInfoService extends BaseService {
                json.put("idcard", p.getIdcard());
                // 社保号
                json.put("ssc", p.getSsc());
                // 缴费情况
                json.put("expensesStatus", sign.get("expenses_status") != null ? String.valueOf(sign.get("expenses_status")): "0");
                // 缴费时间
                json.put("expensesTime", sign.get("expenses_time") != null ? DateUtil.dateToStr((Date) sign.get("expenses_time"), DateUtil.YYYY_MM_DD_HH_MM) : "");
                // 缴费类型
                json.put("expensesType", sign.get("expenses_type") != null ? String.valueOf(sign.get("expenses_type")): "");
                if (StringUtils.isEmpty(String.valueOf(json.get("expensesStatus"))) || String.valueOf(json.get("expensesStatus")).equals("0")) {
                    String epTime = redisTemplate.opsForValue().get("expenses:remind:" + p.getCode());
                    if (StringUtils.isEmpty(epTime)) {
                        json.put("expensesRemindStatus", 0);
                    } else {
                        json.put("expensesRemindStatus", new SimpleDateFormat("yyyy-MM-dd").format(new Date()).equals(epTime) ? 1 : 0);
                    }
                }
                // 患者标签
                json.put("labels", labels == null ? "" : labels);
@ -711,6 +756,12 @@ public class SignPatientLabelInfoService extends BaseService {
                json.put("code", p.getCode());
                // 设置患者姓名
                json.put("name", p.getName());
                // 设置患者手机号
                json.put("mobile", p.getMobile());
                // 设置患者联系电话
                json.put("phone", p.getPhone());
                // 设置患者紧急联系人
                json.put("emerMobile", sign.get("emer_mobile") == null ? "" : String.valueOf(sign.get("emer_mobile")));
                // 设置患者头像
                json.put("photo", p.getPhoto());
                // 设置患者年龄
@ -725,6 +776,21 @@ public class SignPatientLabelInfoService extends BaseService {
                json.put("idcard", p.getIdcard());
                // 社保号
                json.put("ssc", p.getSsc());
                // 缴费情况
                json.put("expensesStatus", sign.get("expenses_status") != null ? String.valueOf(sign.get("expenses_status")): "0");
                // 缴费时间
                json.put("expensesTime", sign.get("expenses_time") != null ? DateUtil.dateToStr((Date) sign.get("expenses_time"), DateUtil.YYYY_MM_DD_HH_MM) : "");
                // 缴费类型
                json.put("expensesType", sign.get("expenses_type") != null ? String.valueOf(sign.get("expenses_type")): "");
                if (StringUtils.isEmpty(String.valueOf(json.get("expensesStatus"))) || String.valueOf(json.get("expensesStatus")).equals("0")) {
                    String epTime = redisTemplate.opsForValue().get("expenses:remind:" + p.getCode());
                    if (StringUtils.isEmpty(epTime)) {
                        json.put("expensesRemindStatus", 0);
                    } else {
                        json.put("expensesRemindStatus", new SimpleDateFormat("yyyy-MM-dd").format(new Date()).equals(epTime) ? 1 : 0);
                    }
                }
                // 患者标签
                json.put("labels", labels == null ? "" : labels);

+ 4 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/reservation/PatientReservationService.java

@ -174,4 +174,8 @@ public class PatientReservationService extends BaseService {
		PageRequest pageRequest = new PageRequest(page-1, pagesize, sort);
		return patientReservationDao.findByDoctor(doctor, pageRequest);
	}
	public Long countReservationByDoctorForPatient(String doctor,String patient){
		return patientReservationDao.countReservationByDoctorForPatient(doctor,patient);
	}
}

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

@ -158,21 +158,24 @@ public class ExpensesRemindService extends BaseService {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            if (StringUtils.isNotEmpty(p.getMobile())) {
            if (StringUtils.isNotEmpty(p.getMobile()) ) {
                smsService.sendMsg(p.getMobile(), "厦门市民健康系统】" + doc.getName() + "医生提醒您:为完成家庭医生签约," +
                        "尽早为您提供家庭医生服务,请尽快到" + hos.getName() + "(地址:" + hos.getAddress() + ")缴费");
            }
            if(StringUtils.isNotEmpty(p.getOpenid())){
                // 微信提醒
                JSONObject json = new JSONObject();
                json.put("first", "缴费提醒");
                json.put("toUser", p.getCode());
                json.put("doctor", doc.getCode());
                json.put("doctorName", doc.getName());
                json.put("date", DateUtil.dateToStrShort(new Date()));
                json.put("content", "为完成家庭医生签约,尽早为您提供家庭医生服务,请尽快到" + hos.getName() + "(地址:" + hos.getAddress() + ")缴费");
                json.put("remark", "");
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(tokenUtils.getAccessToken(), 1, p.getOpenid(), p.getName(), json);
                int result = smsService.sendMsg(p.getMobile(), "厦门市民健康系统】" + doc.getName() + "医生提醒您:为完成家庭医生签约," +
                        "尽早为您提供家庭医生服务,请尽快到" + hos.getName() + "(地址:" + hos.getAddress() + ")缴费");
                redisTemplate.opsForValue().set("expenses:remind:" + p.getCode(), df.format(new Date()));
                PushMsgTask.getInstance().putWxMsg(tokenUtils.getAccessToken(), 8, p.getOpenid(), p.getName(), json);
            }
            redisTemplate.opsForValue().set("expenses:remind:" + p.getCode(), df.format(new Date()));
        } catch (Exception e) {
            e.printStackTrace();
        }

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

@ -2,6 +2,7 @@ package com.yihu.wlyy.service.app.sign;
import java.util.*;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.dict.SystemDict;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -97,8 +98,6 @@ public class FamilyContractService extends BaseService {
    private SocialSecurityInfoDao socialSecurityInfoDao;
    @Autowired
    private SignPatientLabelInfoService labelInfoService;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
@ -231,6 +230,7 @@ public class FamilyContractService extends BaseService {
        json.put("dept", d.getDeptName());
        json.put("intro", d.getIntroduce());
        json.put("expertise", d.getExpertise());
        json.put("level", d.getLevel());
        // 查询与当前医生的签约状态
        SignFamily sf = signFamilyDao.findByDoctorPatient(doctor, patient);
        if (sf == null) {
@ -472,6 +472,91 @@ public class FamilyContractService extends BaseService {
        return json;
    }
    /**
     * 申请签约
     *
     * @param doctor     签约医生
     * @param patient    居民code
     * @param doctorType 医生类型
     * @return
     */
    public int sign(String doctor, String patient, int doctorType) {
        Patient p = patientDao.findByCode(patient);
        if (p == null) {
            return -1;
        }
        SignFamily sc = signFamilyDao.findByIdcard(p.getIdcard());
        //判断身份证号是否已签约
        if (sc != null) {
            return -2;
        }
        Doctor d = doctorDao.findByCode(doctor);
        if (d == null) {
            return -3;
        }
        SignFamily sf = new SignFamily();
        sf.setCode(getCode());
        // 设置两网编码
        sf.setLwCode(sc != null ? sc.getCode() : null);
        sf.setCzrq(new Date());
        sf.setPatientApplyDate(new Date());
        if (doctorType == 2) {
            sf.setDoctor(doctor);
            sf.setDoctorName(d.getName());
        } else {
            sf.setDoctorHealth(doctor);
            sf.setDoctorHealthName(d.getName());
        }
        sf.setMobile(p.getMobile());
        sf.setName(p.getName());
        sf.setIdcard(p.getIdcard());
        sf.setOpenid(p.getOpenid());
        sf.setPatient(patient);
        sf.setHospital(d.getHospital());
        sf.setHospitalName(d.getHosptialName());
        sf.setSsc(p.getSsc());
        sf.setStatus(0);//0为初始状态
        sf.setType(2);// 设置为家庭签约
        sf.setSignType("1");//用户申请
        sf.setSignSource("2");//签约来源【1 社区签约 2 移动签约】
        //******************扣费接口**********************/
        sf.setExpensesStatus("0");   //扣费状态 【0未扣费 1已扣费 2已退费】
        SignFamily temp = signFamilyDao.save(sf);
        if (temp != null) {
            // 添加签约消息
            Message message = new Message();
            message.setCzrq(new Date());
            message.setContent("您有一条新的家庭签约申请!");
            message.setRead(1);//设置未读
            message.setReceiver(doctor);//设置接受医生的code
            message.setSender(patient);//设置发送的用户
            message.setSenderName(p.getName());
            message.setCode(getCode());
            message.setSenderPhoto(p.getPhoto());
            message.setTitle("家庭签约申请");
            message.setType(1);//家庭签约信息
            message.setReadonly(1);//是否只读消息
            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);
        }
        return 1;
    }
    /**
     * 取消签约申请
     *
@ -639,15 +724,13 @@ public class FamilyContractService extends BaseService {
    synchronized public SignFamily agent(String access_token, String name,
                                         String doctor, String doctorName,
                                         String doctorHealth, String doctorHealthName,
                                         String majorDoctor,
                                         String majorDoctorName,
                                         String hospital, String hospitalName,
                                         String idcard, String ssc,
                                         String mobile,
                                         String emerMobile, String images,
                                         String healthLabel, String customLabel, String disease,
                                         String expenses, String signDoctorCode,
                                         String signDoctorName, String signDoctorLevel, String customGroup) throws Exception {
                                         String signDoctorName, String signDoctorLevel, long adminTeamCode) throws Exception {
        // 查询是否有家庭签约
        SignFamily sc = signFamilyDao.findByIdcard(idcard);
        if (sc != null) {
@ -669,13 +752,22 @@ public class FamilyContractService extends BaseService {
        sf.setCzrq(new Date());
        //设置全科医生的行政团队
        sf.setAdminTeamId(doctorAdminTeamDao.findIdByLeaderCode(doctor));
        sf.setAdminTeamId(adminTeamCode);
        AdminTeam team = doctorAdminTeamDao.findOne(adminTeamCode);
        Doctor docLeader = doctorDao.findByCode(team.getLeaderCode());
        //设置签约医生
        sf.setSignDoctorCode(docLeader.getCode());
        sf.setSignDoctorName(docLeader.getName());
        sf.setSignDoctorLevel(String.valueOf(docLeader.getLevel()));
        sf.setDoctor(doctor);
        sf.setDoctorName(doctorName);
        sf.setDoctorHealth(doctorHealth);
        sf.setDoctorHealthName(doctorHealthName);
        sf.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);
        sf.setFamilyCode(createSignCode(doctor, hospital));
        sf.setDoctorHealthName(doctorHealthName);
        sf.setEmerMobile(emerMobile);
        sf.setEnd(DateUtil.strToDateShort(DateUtil.getNextYear(DateUtil.getNowDateShort(), 1)));
        sf.setName(name);
@ -696,9 +788,6 @@ public class FamilyContractService extends BaseService {
        sf.setApplyDate(new Date());
        sf.setType(2);// 设置为家庭签约
        sf.setSignType("2");//手工带签
        sf.setSignDoctorCode(doctor);
        sf.setSignDoctorLevel("2");
        sf.setSignDoctorName(doctorName);
        sf.setAgentDoctorCode(signDoctorCode);
        sf.setAgentDoctorLevel(signDoctorLevel);
        sf.setAgentDoctorName(signDoctorName);
@ -718,17 +807,14 @@ public class FamilyContractService extends BaseService {
            patient.setMobile(mobile);
            patient.setBirthday(ie.getBirthday());
            patient.setSex(ie.getGender());
            String password=idcard.substring(idcard.length()-6);
            String salt= UUID.randomUUID().toString().replace("-","");
            String password = idcard.substring(idcard.length() - 6);
            String salt = UUID.randomUUID().toString().replace("-", "");
            patient.setSalt(salt);
            patient.setPassword(MD5.GetMD5Code(password+salt));
            patient.setPassword(MD5.GetMD5Code(password + salt));
            patient.setStatus(1);
            patient.setDisease(0);
        }
        //病人疾病更新
//        if (!StringUtils.isEmpty(disease)) {
//            patient.setDisease(Integer.valueOf(disease));
//        }
        // 保存用户信息
        patientDao.save(patient);
@ -774,22 +860,6 @@ public class FamilyContractService extends BaseService {
        wlyyDoctorTeamDoctor.setCzrq(new Date());
        doctorTeamDoctor.save(wlyyDoctorTeamDoctor);
//        if (StringUtils.isNotEmpty(disease) && !disease.equals("0")) {
//            //如果有选择病种
//            //添加专科医生
//            wlyyDoctorTeamDoctor = new DoctorTeamMember();
//            wlyyDoctorTeamDoctor.setTeam(doctorTeamCode);
//            wlyyDoctorTeamDoctor.setMemberCode(majorDoctor);
//            wlyyDoctorTeamDoctor.setSignType("2");//家庭签约
//            wlyyDoctorTeamDoctor.setName(majorDoctorName);
//            wlyyDoctorTeamDoctor.setDel("1");
//            wlyyDoctorTeamDoctor.setType(1);
//            wlyyDoctorTeamDoctor.setCode(getCode());
//            wlyyDoctorTeamDoctor.setCzrq(new Date());
//
//            doctorTeamDoctor.save(wlyyDoctorTeamDoctor);
//        }
        //添加患者和团队的关系
        DoctorTeamMember wlyyDoctorTeamPatient = new DoctorTeamMember();
        wlyyDoctorTeamPatient.setTeam(doctorTeamCode);
@ -818,6 +888,7 @@ public class FamilyContractService extends BaseService {
                    (hos != null ? hos.getAddress() : "") + ")缴费。";
            JSONObject json = new JSONObject();
            json.put("first", "签约成功通知");
            json.put("toUser", sf.getPatient());
            json.put("doctor", sf.getDoctor());
            json.put("doctorName", sf.getDoctorName());
            json.put("date", DateUtil.dateToStrShort(sf.getBegin()));
@ -843,12 +914,14 @@ public class FamilyContractService extends BaseService {
    public int handleSign(String signType,
                          String access_token,
                          String doctor,
                          String doctorName,
                          String healthDoctor,
                          String healthDoctorName,
                          long msgid,
                          String patientCard, int type,
                          String healthLabel, String customLabel, String disease,
                          String majorDoctor, String majorhDoctorName, String customGroup, String expenses) throws Exception {
                          String expenses, long adminTeamCode) throws Exception {
        if (type != 1 && type != 2) {
            return -1;
        }
@ -871,10 +944,6 @@ public class FamilyContractService extends BaseService {
        if (type == 1) {
            List<SystemDict> systemDicts = systemDictDao.findByDictName("SIGN_YEAR");
            String year = systemDicts.get(0).getCode();
            //病人疾病更新
//            if (!StringUtils.isEmpty(disease)) {
//                p.setDisease(Integer.valueOf(disease));
//            }
            //签约类型:1三师签约,2家庭签约
            // 改为签约生效
@ -884,18 +953,30 @@ public class FamilyContractService extends BaseService {
            sf.setSignType("1");//患者发起签约
            sf.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);//收费类别
            sf.setEnd(DateUtil.strToDateShort(DateUtil.getNextYear(DateUtil.getNowDateShort(), 1)));
            //设置签约人  患者发起的签约 默认签约人是全科医生
            sf.setSignDoctorCode(sf.getDoctor());
            sf.setSignDoctorName(sf.getDoctorName());
            sf.setSignDoctorLevel("2");
            // 更新健康管理师
            sf.setDoctorHealth(healthDoctor);
            sf.setDoctorHealthName(healthDoctorName);
            sf.setAdminTeamId(adminTeamCode);
            if (StringUtils.isNotEmpty(doctor)) {
                //设置全科医生
                sf.setDoctor(doctor);
                sf.setDoctorName(doctorName);
            } else {
                // 更新健康管理师
                sf.setDoctorHealth(healthDoctor);
                sf.setDoctorHealthName(healthDoctorName);
            }
            AdminTeam team = doctorAdminTeamDao.findOne(adminTeamCode);
            Doctor docLeader = doctorDao.findByCode(team.getLeaderCode());
            //设置签约医生
            sf.setSignDoctorCode(docLeader.getCode());
            sf.setSignDoctorName(docLeader.getName());
            sf.setSignDoctorLevel(String.valueOf(docLeader.getLevel()));
            sf.setCzrq(new Date());
            sf.setSignYear(year);//设置签约年度
            sf.setApplyDate(new Date());
            Doctor doctor = doctorDao.findByCode(sf.getDoctor());
            sf.setFamilyCode(createSignCode(sf.getDoctor(), doctor.getHospital()));
            Doctor doc = doctorDao.findByCode(sf.getDoctor());
            sf.setFamilyCode(createSignCode(sf.getDoctor(), doc.getHospital()));
            //建立团队
            DoctorTeam doctorTeam = new DoctorTeam();
            String doctorTeamCode = getCode();
@ -942,20 +1023,6 @@ public class FamilyContractService extends BaseService {
            wlyyDoctorTeamPatient.setCzrq(new Date());
            doctorTeamDoctor.save(wlyyDoctorTeamPatient);
//            if (StringUtils.isNotEmpty(disease) && !disease.equals("0")) {
//                //如果有选择病种
//                //添加专科医生
//                wlyyDoctorTeamDoctor = new DoctorTeamMember();
//                wlyyDoctorTeamDoctor.setTeam(doctorTeamCode);
//                wlyyDoctorTeamDoctor.setMemberCode(majorDoctor);
//                wlyyDoctorTeamDoctor.setSignType("2");//家庭签约
//                wlyyDoctorTeamDoctor.setName(majorhDoctorName);
//                wlyyDoctorTeamDoctor.setDel("1");
//                wlyyDoctorTeamDoctor.setType(1);
//                wlyyDoctorTeamDoctor.setCode(getCode());
//                wlyyDoctorTeamDoctor.setCzrq(new Date());
//                doctorTeamDoctor.save(wlyyDoctorTeamDoctor);
//            }
        } else {
            // 医生拒绝
            sf.setStatus(-2);
@ -963,10 +1030,11 @@ public class FamilyContractService extends BaseService {
            // 拒绝签约
            JSONObject json = new JSONObject();
            json.put("first", "签约失败通知");
            json.put("doctor", sf.getDoctor());
            json.put("doctorName", sf.getDoctorName());
            json.put("toUser", sf.getPatient());
            json.put("doctor", StringUtils.isEmpty(sf.getDoctor()) ? sf.getDoctorHealth() : sf.getDoctor());
            json.put("doctorName", StringUtils.isEmpty(sf.getDoctor()) ? sf.getDoctorHealthName() : sf.getDoctorHealth());
            json.put("date", DateUtil.dateToStrShort(new Date()));
            json.put("content", "您与 " + sf.getDoctorName() + " 医生建立家庭医生签约关系失败,请查看!");
            json.put("content", "您与 " + (StringUtils.isEmpty(sf.getDoctor()) ? sf.getDoctorHealthName() : sf.getDoctorHealth()) + " 医生建立家庭医生签约关系失败,请查看!");
            json.put("remark", "您好,签约家庭医生失败通知");
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 2, sf.getOpenid(), sf.getName(), json);
@ -981,35 +1049,24 @@ public class FamilyContractService extends BaseService {
        // 推送消息消息给微信端
        if (type == 1) {
            Doctor doc = doctorDao.findByCode(sf.getDoctor());
            Doctor doc = doctorDao.findByCode(StringUtils.isNotEmpty(doctor) ? sf.getDoctorHealth() : sf.getDoctor());
            Hospital hos = hospitalDao.findByCode(doc.getHospital());
            String content = "祝贺您,成功签约" + sf.getDoctorName() + "医生团队,您已可以享受家庭医生所带来的无微不至的健康保健服务。" +
            String content = "祝贺您,成功签约" + doc.getName() + "医生团队,您已可以享受家庭医生所带来的无微不至的健康保健服务。" +
                    "为了给您提供更好的服务,请尽快到" + (hos != null ? hos.getName() : "") + "社区(地址:" +
                    (hos != null ? hos.getAddress() : "") + ")缴费。";
            // 同意签约
            JSONObject json = new JSONObject();
            json.put("first", "签约成功通知");
            json.put("doctor", sf.getDoctor());
            json.put("doctorName", sf.getDoctorName());
            json.put("toUser", sf.getPatient());
            json.put("doctor", doc.getCode());
            json.put("doctorName", doc.getName());
            json.put("date", DateUtil.dateToStrShort(sf.getBegin()));
            json.put("content", content);
            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-------------");
            // 拒绝签约
            JSONObject json = new JSONObject();
            json.put("first", "签约失败通知");
            json.put("doctor", sf.getDoctor());
            json.put("doctorName", sf.getDoctorName());
            json.put("date", DateUtil.dateToStrShort(sf.getBegin()));
            json.put("content", "您与 " + sf.getDoctorName() + " 医生建立家庭医生签约关系失败,请查看!");
            json.put("remark", "您好,签约家庭医生失败通知");
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 2, sf.getOpenid(), sf.getName(), json);
        }
        return 1;
    }
@ -1058,6 +1115,7 @@ public class FamilyContractService extends BaseService {
            // 推送消息消息给微信端
            JSONObject json = new JSONObject();
            json.put("first", "解约申请通知");
            json.put("toUser", sf.getPatient());
            json.put("date", DateUtil.getStringDateShort());
            json.put("doctor", sf.getDoctor());
            json.put("doctorName", sf.getDoctorName());
@ -1071,6 +1129,7 @@ public class FamilyContractService extends BaseService {
            // 拒绝解约,推送消息消息给微信端
            JSONObject json = new JSONObject();
            json.put("first", "解约申请通知");
            json.put("toUser", sf.getPatient());
            json.put("date", DateUtil.getStringDateShort());
            json.put("doctor", sf.getDoctor());
            json.put("doctorName", sf.getDoctorName());
@ -1434,7 +1493,7 @@ public class FamilyContractService extends BaseService {
        // 判断患者有没有家庭签约
        SignFamily sf = signFamilyDao.findByPatientStatus(patientCard, 0);
        if (sf != null) {
            sf.setStatus(-5);
            sf.setStatus(-1);
        }
        return true;
    }
@ -1469,7 +1528,7 @@ public class FamilyContractService extends BaseService {
     * @param healthDoctor 健康管理师code
     * @return
     */
    public JSONObject updateSignInfo(String patient, String healthDoctor, String expensesType) {
    public JSONObject updateSignInfo(String patient, String healthDoctor,String doctor, String expensesType) {
        JSONObject result = new JSONObject();
        SignFamily signFamily = signFamilyDao.findByjiatingPatientYes(patient);
@ -1480,8 +1539,8 @@ public class FamilyContractService extends BaseService {
        }
        if (StringUtils.isNotEmpty(healthDoctor)) {
            Doctor doctor = doctorDao.findByCode(healthDoctor);
            if (doctor == null) {
            Doctor docHealth = doctorDao.findByCode(healthDoctor);
            if (docHealth == null) {
                result.put("status", -2);
                result.put("msg", "医生不存在");
            }
@ -1499,8 +1558,8 @@ public class FamilyContractService extends BaseService {
                DoctorTeamMember newTeamMember = new DoctorTeamMember();
                newTeamMember.setCode(getCode());
                newTeamMember.setMemberCode(doctor.getCode());
                newTeamMember.setName(doctor.getName());
                newTeamMember.setMemberCode(docHealth.getCode());
                newTeamMember.setName(docHealth.getName());
                newTeamMember.setTeam(signFamily.getTeamCode());
                newTeamMember.setDel("1");
                newTeamMember.setSignType("2");
@ -1510,8 +1569,44 @@ public class FamilyContractService extends BaseService {
                doctorTeamDoctor.save(newTeamMember);
            }
            signFamily.setDoctorHealth(doctor.getCode());
            signFamily.setDoctorHealthName(doctor.getName());
            signFamily.setDoctorHealth(docHealth.getCode());
            signFamily.setDoctorHealthName(docHealth.getName());
            signFamily.setCzrq(new Date());
        }
        if (StringUtils.isNotEmpty(doctor)) {
            Doctor docQk = doctorDao.findByCode(doctor);
            if (docQk == null) {
                result.put("status", -2);
                result.put("msg", "医生不存在");
            }
            if (StringUtils.isNotEmpty(signFamily.getDoctor())) {
                DoctorTeamMember teamMember = doctorTeamDoctor.findMemberByTeamAndCode(signFamily.getTeamCode(), signFamily.getDoctor());
                if (teamMember != null) {
                    teamMember.setDel("0");
                    teamMember.setCzrq(new Date());
                    doctorTeamDoctor.save(teamMember);
                }
            }
            // 新增团队信息
            if (StringUtils.isNotEmpty(signFamily.getTeamCode())) {
                DoctorTeamMember newTeamMember = new DoctorTeamMember();
                newTeamMember.setCode(getCode());
                newTeamMember.setMemberCode(docQk.getCode());
                newTeamMember.setName(docQk.getName());
                newTeamMember.setTeam(signFamily.getTeamCode());
                newTeamMember.setDel("1");
                newTeamMember.setSignType("2");
                newTeamMember.setType(2);
                newTeamMember.setCzrq(new Date());
                doctorTeamDoctor.save(newTeamMember);
            }
            signFamily.setDoctor(docQk.getCode());
            signFamily.setDoctorName(docQk.getName());
            signFamily.setCzrq(new Date());
        }
@ -1546,6 +1641,7 @@ public class FamilyContractService extends BaseService {
        return signFamilyDao.findNoHealthSignFamilyHealth(doctor, pageRequest);
    }
    /**
     * 查询居民的所有签约
     *

+ 34 - 10
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/team/AdminTeamService.java

@ -11,6 +11,7 @@ import com.yihu.wlyy.repository.doctor.DoctorTeamMemberDao;
import com.yihu.wlyy.service.BaseService;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@ -81,7 +82,7 @@ public class AdminTeamService extends BaseService {
        return team;
    }
    public Map<String, Object> getPatientSigningTeam(String patientCode, String currentDoctor){
    public Map<String, Object> getPatientSigningTeam(String patientCode, String currentDoctor) {
        List<Object> results = teamDao.findAdminTeamByPatientSignTeam(patientCode, new PageRequest(0, 1));
        if (results == null || results.size() == 0) return null;
@ -171,21 +172,21 @@ public class AdminTeamService extends BaseService {
     * @param doctorCode
     */
    public Pair<Integer, String> removeMember(long teamId, String doctorCode) {
        if(signingTeamMemberDao.isSanShiSigning(doctorCode)){
        if (signingTeamMemberDao.isSanShiSigning(doctorCode)) {
            return new ImmutablePair<>(403, "三师签约医生,不能删除");
        }
        Doctor doctor = doctorDao.findByCode(doctorCode);
        if (!doctor.isProfessionalDoctor()){
            if (doctor.isGeneralDoctor()){
        if (!doctor.isProfessionalDoctor()) {
            if (doctor.isGeneralDoctor()) {
                List<Doctor> doctorList = new ArrayList<>();
                doctorList.add(doctor);
                Integer count = getMemberSigningCount(teamId, doctorList).get(doctorCode);
                if (count != null || count > 0){
                    if (doctor.isGeneralDoctor()){
                if (count != null || count > 0) {
                    if (doctor.isGeneralDoctor()) {
                        return new ImmutablePair<>(403, "全科医生有签约关系,不可删除");
                    } else if (doctor.isHealthDoctor()){
                    } else if (doctor.isHealthDoctor()) {
                        return new ImmutablePair<>(403, "健康管理师仍有签约居民,请先转移签约居民");
                    }
                }
@ -202,8 +203,8 @@ public class AdminTeamService extends BaseService {
        return memberDao.findAllMembers(teamId);
    }
    public List<Doctor> getMembers(long teamId,String doctorCode) {
        return memberDao.findAllHeathExcludeThis(teamId,doctorCode);
    public List<Doctor> getMembers(long teamId, String doctorCode) {
        return memberDao.findAllHeathExcludeThis(teamId, doctorCode);
    }
    /**
@ -287,7 +288,30 @@ public class AdminTeamService extends BaseService {
        memberDao.save(member);
    }
    public AdminTeam findByLeaderCode(String leaderCode){
    public AdminTeam findByLeaderCode(String leaderCode) {
        return teamDao.findByLeaderCode(leaderCode);
    }
    /**
     * 查询两个医生的共同团队
     *
     * @param doctorOne
     * @param doctorTwo
     * @return
     */
    public List<AdminTeam> findDoctorsTeams(String doctorOne, String doctorTwo) {
        List<AdminTeam> teams = memberDao.findDoctorTeams(doctorOne);
        List<AdminTeam> teamsTogether = new ArrayList<>();
        if (teams != null && teams.size() > 0) {
            for (AdminTeam team : teams) {
                if (memberDao.findByTeamIdAndDoctorCodeOrderByDoctorCodeAsc(team.getId(), doctorTwo) != null) {
                    teamsTogether.add(team);
                }
            }
        }
        return teamsTogether;
    }
}

+ 344 - 320
patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -26,140 +26,142 @@ import com.yihu.wlyy.util.HttpUtil;
@Api(description = "消息推送")
public class PushMsgTask {
	private static Logger logger = LoggerFactory.getLogger(PushMsgTask.class);
	// 最大容量为50的数组堵塞队列
	private static LinkedBlockingQueue<JSONObject> queue = new LinkedBlockingQueue<JSONObject>();
    private static Logger logger = LoggerFactory.getLogger(PushMsgTask.class);
    // 最大容量为50的数组堵塞队列
    private static LinkedBlockingQueue<JSONObject> queue = new LinkedBlockingQueue<JSONObject>();
	private static PushMsgTask instance;
    private static PushMsgTask instance;
	private static Object lock = new Object();
    private static Object lock = new Object();
	public static PushMsgTask getInstance() {
		synchronized (lock) {
			if (instance == null) {
				instance = new PushMsgTask();
				instance.run();
			}
		}
		return instance;
	}
    public static PushMsgTask getInstance() {
        synchronized (lock) {
            if (instance == null) {
                instance = new PushMsgTask();
                instance.run();
            }
        }
        return instance;
    }
	@RequestMapping(value = "aa")
	@ResponseBody
	public String test() {
		return "1111";
	}
    @RequestMapping(value = "aa")
    @ResponseBody
    public String test() {
        return "1111";
    }
	/**
	 * 添加一条推送消息
	 * @param receiver 接收人
	 * @param type 消息类型
	 * @param title 消息标题
	 * @param msg 消息内容
	 * @param data 消息数据
	 */
	public void put(String receiver, String type, String title, String msg, String data) {
		try {
			JSONObject json = new JSONObject();
			json.put("receiver", receiver);
			json.put("type", type);
			json.put("title", title);
			json.put("msg", msg);
			json.put("data", data);
			queue.put(json);
		} catch (Exception e) {
			logger.error("添加到消息队列失败!", e);
			e.printStackTrace();
		}
	}
    /**
     * 添加一条推送消息
     *
     * @param receiver 接收人
     * @param type     消息类型
     * @param title    消息标题
     * @param msg      消息内容
     * @param data     消息数据
     */
    public void put(String receiver, String type, String title, String msg, String data) {
        try {
            JSONObject json = new JSONObject();
            json.put("receiver", receiver);
            json.put("type", type);
            json.put("title", title);
            json.put("msg", msg);
            json.put("data", data);
            queue.put(json);
        } catch (Exception e) {
            logger.error("添加到消息队列失败!", e);
            e.printStackTrace();
        }
    }
	/**
	 * 添加微信消息
	 * @param type
	 * @param data
	 */
	public void putWxMsg(String access_token, int type, String openid, String name, JSONObject data) {
		try {
			JSONObject json = new JSONObject();
			json.put("wx", true);
			json.put("access_token", access_token);
			json.put("type", type);
			json.put("openid", openid);
			json.put("name", name);
			json.put("data", data);
			queue.put(json);
		} catch (Exception e) {
			logger.error("添加到微信消息列队列失败!", e);
			e.printStackTrace();
		}
	}
    /**
     * 添加微信消息
     *
     * @param type
     * @param data
     */
    public void putWxMsg(String access_token, int type, String openid, String name, JSONObject data) {
        try {
            JSONObject json = new JSONObject();
            json.put("wx", true);
            json.put("access_token", access_token);
            json.put("type", type);
            json.put("openid", openid);
            json.put("name", name);
            json.put("data", data);
            queue.put(json);
        } catch (Exception e) {
            logger.error("添加到微信消息列队列失败!", e);
            e.printStackTrace();
        }
    }
	public void put(JSONArray array) {
		if (array == null || array.length() == 0) {
			return;
		}
		for (int i = 0; i < array.length(); i++) {
			JSONObject json = array.getJSONObject(i);
			if (json == null) {
				continue;
			}
			try {
				queue.put(json);
			} catch (Exception e) {
				logger.error("批量添加到消息队列失败!", e);
			}
		}
	}
    public void put(JSONArray array) {
        if (array == null || array.length() == 0) {
            return;
        }
        for (int i = 0; i < array.length(); i++) {
            JSONObject json = array.getJSONObject(i);
            if (json == null) {
                continue;
            }
            try {
                queue.put(json);
            } catch (Exception e) {
                logger.error("批量添加到消息队列失败!", e);
            }
        }
    }
	private void run() {
		new Thread(new ConsumerTask()).start();
	}
    private void run() {
        new Thread(new ConsumerTask()).start();
    }
	// 消费者
	class ConsumerTask implements Runnable {
		@Override
		public void run() {
			try {
				while (true) {
					// 如果queue为空,则当前线程会堵塞,直到有新数据加入
					JSONObject json = queue.take();
					boolean wx = json.has("wx") ? json.getBoolean("wx") : false;
					if (wx) {
						// 推送微信消息
						JSONObject data = json.has("data") ? json.getJSONObject("data") : null;
						if (data == null) {
							continue;
						}
						// 消息类型:1:签约成功 2:签约失败 3:咨询回复通知 4:健康指导提醒
						int type = json.has("type") ? json.getInt("type") : -1;
						if (type == -1) {
							continue;
						}
						String access_token = json.has("access_token") ? json.getString("access_token") : "";
						String openid = json.has("openid") ? json.getString("openid") : "";
						String name = json.has("name") ? json.getString("name") : "";
						// 发送消息到微信端
						sendWeixinMessage(access_token, type, openid, name, data);
					} else {
						// 推送平台消息
						String receiver = json.has("receiver") ? json.getString("receiver") : "";
						String type = json.has("type") ? json.getString("type") : "";
						String title = json.has("title") ? json.getString("title") : "";
						String msg = json.has("msg") ? json.getString("msg") : "";
						String data = json.has("data") ? json.getString("data") : "";
						boolean res = HttpUtil.pushMessage(receiver, type, title, msg, data);
						if (res) {
							logger.info("消息推送成功!");
						} else {
							logger.error("消息推送失败!");
						}
					}
				}
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
	}
    // 消费者
    class ConsumerTask implements Runnable {
        @Override
        public void run() {
            try {
                while (true) {
                    // 如果queue为空,则当前线程会堵塞,直到有新数据加入
                    JSONObject json = queue.take();
                    boolean wx = json.has("wx") ? json.getBoolean("wx") : false;
                    if (wx) {
                        // 推送微信消息
                        JSONObject data = json.has("data") ? json.getJSONObject("data") : null;
                        if (data == null) {
                            continue;
                        }
                        // 消息类型:1:签约成功 2:签约失败 3:咨询回复通知 4:健康指导提醒
                        int type = json.has("type") ? json.getInt("type") : -1;
                        if (type == -1) {
                            continue;
                        }
                        String access_token = json.has("access_token") ? json.getString("access_token") : "";
                        String openid = json.has("openid") ? json.getString("openid") : "";
                        String name = json.has("name") ? json.getString("name") : "";
                        // 发送消息到微信端
                        sendWeixinMessage(access_token, type, openid, name, data);
                    } else {
                        // 推送平台消息
                        String receiver = json.has("receiver") ? json.getString("receiver") : "";
                        String type = json.has("type") ? json.getString("type") : "";
                        String title = json.has("title") ? json.getString("title") : "";
                        String msg = json.has("msg") ? json.getString("msg") : "";
                        String data = json.has("data") ? json.getString("data") : "";
                        boolean res = HttpUtil.pushMessage(receiver, type, title, msg, data);
                        if (res) {
                            logger.info("消息推送成功!");
                        } else {
                            logger.error("消息推送失败!");
                        }
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
//	private static final String signSuccess = "0D2vYZVRzFz15p9Y_pkZ1DKutDq8UOsks79FXUKS0tA";
//	private static final String signFalied = "My2VNERjJt4NXR4Ibh42pdrP6B6ka8rQxZeWinQh99s";
@ -170,201 +172,223 @@ public class PushMsgTask {
//	private static final String appointmentCancel = "tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s";
//	private static final String url = "http://www.xmtyw.cn/wlyy/wx/html/";
	/**
	 * 发送微信模板消息
	 * @param type 1:签约成功  2:签约失败  3:咨询回复通知  4:健康指导提醒  5:解约申请通知  6:预约挂号成功通知  7:预约取消通知
	 * @param json 当type==1||type==2时:{"first":"消息主题",”doctor":"医生code","doctorName":"医生名","date":"签约时间","content":"签约内容","remark":"消息备注"}
	 *        type==3时:{"first":"消息主题","consult":"医生咨询编号","consultcontent":"咨询内容","replycontent":"回复内容","doctorName":"医生名","remark":"消息备注"}
	 *        type==4时:{"first":"消息主题","date":"指导时间","orgName":"指导机构","doctorName":"指导医生名","content":"指导内容","remark":"消息备注"}
	 *        type==5时:{"first":"消息主题","date":"解约时间",”doctor":"医生code","doctorName":"医生名","orgName":"解约机构","remark":"消息备注"}
	 *        type==6时:{"first":"消息主题","date":"预约时间",”id":"预约ID","doctorName":"医生名","orgName":"预约医院","deptName":"预约科室","remark":"消息备注"}
	 *        type==7时:{"first":"消息主题","name":"就诊人名","date":"预约时间","doctorName":"医生名","orgName":"预约医院","remark":"消息备注"}
	 * @return
	 */
	private boolean sendWeixinMessage(String access_token, int type, String openid, String name, JSONObject json) {
		try {
			if (access_token != null) {
				String token_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
				String params = typeMsg(type, openid, name, json);
				if (params == "") {
					logger.error("参数错误!");
					return false;
				}
				String result = HttpUtil.sendPost(token_url, params);
				JSONObject jsonResult = new JSONObject(result);
				if (Integer.parseInt(jsonResult.get("errcode").toString()) == 0) {
					logger.info("微信信息推送成功!");
					return true;
				} else {
					logger.error("错误编码:" + jsonResult.get("errcode").toString() + "  错误提示:" + jsonResult.get("errmsg").toString());
					return false;
				}
			} else {
				logger.error("获取access_token失败!");
				return false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("微信信息推送失败!");
			return false;
		}
	}
    /**
     * 发送微信模板消息
     *
     * @param type 1:签约成功  2:签约失败  3:咨询回复通知  4:健康指导提醒  5:解约申请通知  6:预约挂号成功通知  7:预约取消通知 8 缴费提醒
     * @param json 当type==1||type==2时:{"first":"消息主题",”doctor":"医生code","doctorName":"医生名","date":"签约时间","content":"签约内容","remark":"消息备注"}
     *             type==3时:{"first":"消息主题","consult":"医生咨询编号","consultcontent":"咨询内容","replycontent":"回复内容","doctorName":"医生名","remark":"消息备注"}
     *             type==4时:{"first":"消息主题","date":"指导时间","orgName":"指导机构","doctorName":"指导医生名","content":"指导内容","remark":"消息备注"}
     *             type==5时:{"first":"消息主题","date":"解约时间",”doctor":"医生code","doctorName":"医生名","orgName":"解约机构","remark":"消息备注"}
     *             type==6时:{"first":"消息主题","date":"预约时间",”id":"预约ID","doctorName":"医生名","orgName":"预约医院","deptName":"预约科室","remark":"消息备注"}
     *             type==7时:{"first":"消息主题","name":"就诊人名","date":"预约时间","doctorName":"医生名","orgName":"预约医院","remark":"消息备注"}
     * @return
     */
    private boolean sendWeixinMessage(String access_token, int type, String openid, String name, JSONObject json) {
        try {
            if (access_token != null) {
                String token_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
                String params = typeMsg(type, openid, name, json);
                if (params == "") {
                    logger.error("参数错误!");
                    return false;
                }
                String result = HttpUtil.sendPost(token_url, params);
                JSONObject jsonResult = new JSONObject(result);
                if (Integer.parseInt(jsonResult.get("errcode").toString()) == 0) {
                    logger.info("微信信息推送成功!");
                    return true;
                } else {
                    logger.error("错误编码:" + jsonResult.get("errcode").toString() + "  错误提示:" + jsonResult.get("errmsg").toString());
                    return false;
                }
            } else {
                logger.error("获取access_token失败!");
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("微信信息推送失败!");
            return false;
        }
    }
	/**
	 * 拼接参数
	 * @param type
	 * @return
	 */
	public String typeMsg(int type, String openid, String name, JSONObject json) {
		try {
			String url = SystemConf.getInstance().getSystemProperties().getProperty("server_url") + "wx/html/";
			WechatTemplate temp = new WechatTemplate();
			temp.setTouser(openid);
			temp.setTopcolor("#000000");
			Map<String, WechatTemplateData> m = new HashMap<String, WechatTemplateData>();
			WechatTemplateData first = new WechatTemplateData();
			first.setColor("#000000");
			first.setValue(json.getString("first"));
			m.put("first", first);
			WechatTemplateData remark = new WechatTemplateData();
			remark.setColor("#000000");
			remark.setValue(json.getString("remark"));
			m.put("remark", remark);
			String temp_id = "";
			if (type == 3) {
				temp.setUrl(url + "yszx/html/consulting-doctor.html?openid=" + openid + "&consult=" + json.getString("consult"));
				temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_consult_notice");
				temp.setTemplate_id(temp_id);
				WechatTemplateData keyword1 = new WechatTemplateData();
				keyword1.setColor("#000000");
				keyword1.setValue(json.getString("consultcontent"));
				m.put("keyword1", keyword1);
				WechatTemplateData keyword2 = new WechatTemplateData();
				keyword2.setColor("#000000");
				keyword2.setValue(json.getString("replycontent"));
				m.put("keyword2", keyword2);
				WechatTemplateData keyword3 = new WechatTemplateData();
				keyword3.setColor("#000000");
				keyword3.setValue(json.getString("doctorName"));
				m.put("keyword3", keyword3);
			} else if (type == 1 || type == 2) {				
				if (type == 1)				
					temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_sign_success");
				else
					temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_sign_failed");
				temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid  + "&state=" + json.getString("doctor"));
				temp.setTouser(openid);
				temp.setTopcolor("#000000");
				temp.setTemplate_id(temp_id);
				WechatTemplateData keyword1 = new WechatTemplateData();
				keyword1.setColor("#000000");
				keyword1.setValue(json.getString("doctorName"));
				m.put("keyword1", keyword1);
				WechatTemplateData keyword2 = new WechatTemplateData();
				keyword2.setColor("#000000");
				keyword2.setValue(name);
				m.put("keyword2", keyword2);
				WechatTemplateData keyword3 = new WechatTemplateData();
				keyword3.setColor("#000000");
				keyword3.setValue(json.getString("date"));
				m.put("keyword3", keyword3);
				WechatTemplateData keyword4 = new WechatTemplateData();
				keyword4.setColor("#000000");
				keyword4.setValue(json.getString("content"));
				m.put("keyword4", keyword4);
			} else if (type == 4) {
				temp.setUrl(url + "yszd/html/doctor-guidance.html?openid=" + openid);
				temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_health_notice");
				temp.setTemplate_id(temp_id);
				WechatTemplateData keyword1 = new WechatTemplateData();
				keyword1.setColor("#000000");
				keyword1.setValue(json.getString("date"));
				m.put("keyword1", keyword1);
				WechatTemplateData keyword2 = new WechatTemplateData();
				keyword2.setColor("#000000");
				keyword2.setValue(json.getString("orgName"));
				m.put("keyword2", keyword2);
				WechatTemplateData keyword3 = new WechatTemplateData();
				keyword3.setColor("#000000");
				keyword3.setValue(json.getString("doctorName"));
				m.put("keyword3", keyword3);
				WechatTemplateData keyword4 = new WechatTemplateData();
				keyword4.setColor("#000000");
				keyword4.setValue(name);
				m.put("keyword4", keyword4);
				WechatTemplateData keyword5 = new WechatTemplateData();
				keyword5.setColor("#000000");
				keyword5.setValue(json.getString("content"));
				m.put("keyword5", keyword5);
			} else if (type == 5) {
				temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid  + "&state=" + json.getString("doctor"));
				temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_termination");
				temp.setTemplate_id(temp_id);
				WechatTemplateData keyword1 = new WechatTemplateData();
				keyword1.setColor("#000000");
				keyword1.setValue(json.getString("doctorName"));
				m.put("keyword1", keyword1);
				WechatTemplateData keyword2 = new WechatTemplateData();
				keyword2.setColor("#000000");
				keyword2.setValue(name);
				m.put("keyword2", keyword2);
				WechatTemplateData keyword3 = new WechatTemplateData();
				keyword3.setColor("#000000");
				keyword3.setValue(json.getString("orgName"));
				m.put("keyword3", keyword3);
				WechatTemplateData keyword4 = new WechatTemplateData();
				keyword4.setColor("#000000");
				keyword4.setValue(json.getString("date"));
				m.put("keyword4", keyword4);
			} else if (type == 6) {
				temp.setUrl(url + "wdyy/html/detail-appointment.html?openid=" + openid +"&id=" + json.getLong("id"));
				temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_appoint_success");
				temp.setTemplate_id(temp_id);
				WechatTemplateData keyword1 = new WechatTemplateData();
				keyword1.setColor("#000000");
				keyword1.setValue(json.getString("orgName"));
				m.put("hospitalname", keyword1);
				WechatTemplateData keyword2 = new WechatTemplateData();
				keyword2.setColor("#000000");
				keyword2.setValue(json.getString("deptName"));
				m.put("deptname", keyword2);
				WechatTemplateData keyword3 = new WechatTemplateData();
				keyword3.setColor("#000000");
				keyword3.setValue(json.getString("doctorName"));
				m.put("doctorname", keyword3);
				WechatTemplateData keyword4 = new WechatTemplateData();
				keyword4.setColor("#000000");
				keyword4.setValue(json.getString("date"));
				m.put("planstarttime", keyword4);
			} else if (type == 7) {
				temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid);
				temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_appoint_failed");
				temp.setTemplate_id(temp_id);
				WechatTemplateData keyword1 = new WechatTemplateData();
				keyword1.setColor("#000000");
				keyword1.setValue(json.getString("name"));
				m.put("keynote1", keyword1);
				WechatTemplateData keyword2 = new WechatTemplateData();
				keyword2.setColor("#000000");
				keyword2.setValue(json.getString("date"));
				m.put("keynote2", keyword2);
				WechatTemplateData keyword3 = new WechatTemplateData();
				keyword3.setColor("#000000");
				keyword3.setValue(json.getString("doctorName"));
				m.put("keynote3", keyword3);
				WechatTemplateData keyword4 = new WechatTemplateData();
				keyword4.setColor("#000000");
				keyword4.setValue(json.getString("orgName"));
				m.put("keynote4", keyword4);
			}
			temp.setData(m);
			ObjectMapper mapper = new ObjectMapper();
			String strJson = mapper.writeValueAsString(temp);
			return strJson;
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}
    /**
     * 拼接参数
     *
     * @param type
     * @return
     */
    public String typeMsg(int type, String openid, String name, JSONObject json) {
        try {
            String url = SystemConf.getInstance().getSystemProperties().getProperty("server_url") + "wx/html/";
            WechatTemplate temp = new WechatTemplate();
            temp.setTouser(openid);
            temp.setTopcolor("#000000");
            Map<String, WechatTemplateData> m = new HashMap<String, WechatTemplateData>();
            WechatTemplateData first = new WechatTemplateData();
            first.setColor("#000000");
            first.setValue(json.getString("first"));
            m.put("first", first);
            WechatTemplateData remark = new WechatTemplateData();
            remark.setColor("#000000");
            remark.setValue(json.getString("remark"));
            m.put("remark", remark);
            String temp_id = "";
            if (type == 3) {
                temp.setUrl(url + "yszx/html/consulting-doctor.html?openid=" + openid + "&consult=" + json.getString("consult") + "&toUser=" + json.getString("toUser"));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_consult_notice");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("consultcontent"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("replycontent"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword3", keyword3);
            } else if (type == 1 || type == 2) {
                if (type == 1)
                    temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_sign_success");
                else
                    temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_sign_failed");
                temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser"));
                temp.setTouser(openid);
                temp.setTopcolor("#000000");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(name);
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("date"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("content"));
                m.put("keyword4", keyword4);
            } else if (type == 4) {
                temp.setUrl(url + "yszd/html/doctor-guidance.html?openid=" + openid + "&toUser=" + json.getString("toUser"));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_health_notice");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("date"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("orgName"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(name);
                m.put("keyword4", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("content"));
                m.put("keyword5", keyword5);
            } else if (type == 5) {
                temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser"));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_termination");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(name);
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("orgName"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("keyword4", keyword4);
            } else if (type == 6) {
                temp.setUrl(url + "wdyy/html/detail-appointment.html?openid=" + openid + "&id=" + json.getLong("id") + "&toUser=" + json.getString("toUser"));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_appoint_success");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("orgName"));
                m.put("hospitalname", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("deptName"));
                m.put("deptname", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("doctorname", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("planstarttime", keyword4);
            } else if (type == 7) {
                temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid + "&toUser=" + json.getString("toUser"));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_appoint_failed");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("name"));
                m.put("keynote1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("date"));
                m.put("keynote2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keynote3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("orgName"));
                m.put("keynote4", keyword4);
            } else if (type == 8) {
                //temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid + "&toUser=" + json.getString("toUser"));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_expenses_remind");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("name"));
                m.put("keynote1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("date"));
                m.put("keynote2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keynote3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("orgName"));
                m.put("keynote4", keyword4);
            }
            temp.setData(m);
            ObjectMapper mapper = new ObjectMapper();
            String strJson = mapper.writeValueAsString(temp);
            return strJson;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

+ 48 - 9
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/account/DoctorController.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.web.doctor.account;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -15,6 +16,7 @@ import com.yihu.wlyy.repository.demographic.TblBasicDao;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.consult.ConsultTeamService;
import com.yihu.wlyy.service.app.hospital.HospitalDeptService;
import com.yihu.wlyy.service.app.scheduling.DoctorWorkTimeService;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.util.*;
import io.swagger.annotations.Api;
@ -77,6 +79,8 @@ public class DoctorController extends BaseController {
    private TblBasicDao tblBasicDao;
    @Autowired
    private HospitalDeptService hospitalDeptService;
    @Autowired
    private DoctorWorkTimeService workTimeService;
    /**
     * 社区医院下医生列表查询接口 没分页
@ -1145,6 +1149,13 @@ public class DoctorController extends BaseController {
                json.put("id", doctor.getId());
                json.put("hospital", doctor.getHospital());
                json.put("hosptialName", doctor.getHosptialName());
                JSONObject iswork = workTimeService.isDoctorWorking(doctor.getCode());
                if (iswork.getString("status").equals("1")) {
                    json.put("isworking", 1);
                } else {
                    json.put("isworking", 0);
                }
            }
            return write(200, "查询成功!", "doctor", json);
        } catch (Exception ex) {
@ -1170,8 +1181,20 @@ public class DoctorController extends BaseController {
        try {
            Map<String, Object> doctorList = doctorInfoService.getDoctor1ByParient(consultCode, parientCode, page, pageSize);
            JSONObject jo = new JSONObject();
            List<JSONObject> doctors = doctorList.get("doctors") != null ? (List<JSONObject>) doctorList.get("doctors") : new ArrayList<>();
            for (JSONObject obj : doctors) {
                JSONObject iswork = workTimeService.isDoctorWorking(obj.getString("code"));
                if (iswork.getString("status").equals("1")) {
                    obj.put("isworking", 1);
                } else {
                    obj.put("isworking", 0);
                }
            }
            jo.put("totalPage", doctorList.get("totalPage"));
            jo.put("doctors", doctorList.get("doctors"));
            jo.put("doctors", doctors);
            return write(200, "查询成功!", "data", jo);
        } catch (Exception ex) {
            error(ex);
@ -1505,7 +1528,7 @@ public class DoctorController extends BaseController {
     */
    @RequestMapping("/is_mobile_register")
    @ResponseBody
    public String isMobileRegister(String mobile){
    public String isMobileRegister(String mobile) {
        try {
            if (StringUtils.isEmpty(mobile)) {
                return error(-1, "手机号码不能为空");
@ -1514,7 +1537,7 @@ public class DoctorController extends BaseController {
            int result = doctorInfoService.isMobileRegister(mobile);
            return write(200, "查询成功","data",result);
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
@ -1537,12 +1560,12 @@ public class DoctorController extends BaseController {
                                 String oldPassword,
                                 String doctorCode) {
        try {
            newPassword1=RSAUtils.getInstance(doctorInfoService).decryptString(newPassword1);
            newPassword2=RSAUtils.getInstance(doctorInfoService).decryptString(newPassword2);
            oldPassword=RSAUtils.getInstance(doctorInfoService).decryptString(oldPassword);
            newPassword1=StringUtils.reverse(newPassword1);
            newPassword2=StringUtils.reverse(newPassword2);
            oldPassword=StringUtils.reverse(oldPassword);
            newPassword1 = RSAUtils.getInstance(doctorInfoService).decryptString(newPassword1);
            newPassword2 = RSAUtils.getInstance(doctorInfoService).decryptString(newPassword2);
            oldPassword = RSAUtils.getInstance(doctorInfoService).decryptString(oldPassword);
            newPassword1 = StringUtils.reverse(newPassword1);
            newPassword2 = StringUtils.reverse(newPassword2);
            oldPassword = StringUtils.reverse(oldPassword);
            doctorInfoService.updatePassword(newPassword1, newPassword2, oldPassword, doctorCode);
            return write(200, "更新成功");
@ -1574,4 +1597,20 @@ public class DoctorController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 心跳接口
     *
     * @return
     */
    @RequestMapping(value = "/islive")
    @ResponseBody
    public String islive() {
        try {
            return write(200, "成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
}

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

@ -450,6 +450,7 @@ public class DoctorConsultController extends WeixinBaseController {
                    if (ct != null && p != null && StringUtils.isNotEmpty(p.getOpenid())) {
                        JSONObject json = new JSONObject();
                        json.put("first", "问诊回复提醒");
                        json.put("toUser", p.getCode());
                        json.put("consultcontent", ct.getSymptoms());
                        String replycontent = content.length() > 15 ? content.substring(0, 15) + "..." : content;
                        if (type == 2) {

+ 72 - 29
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java

@ -2,13 +2,17 @@ package com.yihu.wlyy.web.doctor.sign;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
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.service.app.sign.ExpensesRemindService;
import com.yihu.wlyy.service.app.team.AdminTeamService;
import com.yihu.wlyy.util.*;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
@ -56,6 +60,8 @@ public class DoctorFamilyContractController extends WeixinBaseController {
    MessageService messageService;
    @Autowired
    ExpensesRemindService expensesRemindService;
    @Autowired
    AdminTeamService teamService;
    /**
     * 医生签约患者列表查询接口
@ -158,7 +164,6 @@ public class DoctorFamilyContractController extends WeixinBaseController {
     * @param idcard     身份证号
     * @param ssc        社保卡号
     * @param mobile     手机号
     * @param group      患者组 1是健康人群组 2是慢病  3是65岁以上人群
     * @param emerMobile 应急人手机号
     * @param images     图片URL,多图以逗号分隔
     * @param expenses   签约费用
@ -175,8 +180,6 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            @RequestParam(required = false, defaultValue = "") String customLabel,
            @RequestParam(required = false, defaultValue = "") String disease,
            @RequestParam(required = false) String emerMobile,
            @RequestParam(required = false) String majorDoctor,
            @RequestParam(required = false) String majorDoctorName,
            String healthDoctor,
            String healthDoctorName,
            String images,
@ -186,15 +189,9 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            String signDoctorCode,//簽約人code
            String signDoctorName,//簽約人銘
            String signDoctorLevel,//簽約人等级
            @RequestParam(required = false) String group //分组
            long adminTeamCode //行政团队
    ) {
        try {
            //选择病种时需指定专科医生
//            if (StringUtils.isNotEmpty(disease)) {
//                if (!disease.equals("0") && (StringUtils.isEmpty(majorDoctor) || StringUtils.isEmpty(majorDoctorName))) {
//                    return error(-1, "请输入专科医生!");
//                }
//            }
            if (StringUtils.isEmpty(idcard)) {
                return error(-1, "请输入身份证号!");
            }
@ -230,6 +227,9 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            if (StringUtils.isEmpty(healthLabel)) {
                return error(-1, "健康情况标签不能为空!");
            }
            if (adminTeamCode < 1) {
                return error(-1, "行政团队不能为空!");
            }
            int amount = familyContractService.hasSingStatus(idcard);
            if (amount > 0) {
                return error(-1, "该居民已签约了家庭医生!");
@ -245,8 +245,8 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            }
            Doctor cDoctor = doctorService.findDoctorByCode(getUID());
            SignFamily sf = familyContractService.agent(getAccessToken(), name, doctor, doctorName,
                    healthDoctor, healthDoctorName, majorDoctor, majorDoctorName, cDoctor.getHospital(), cDoctor.getHosptialName(),
                    idcard, ssc, mobile, emerMobile, images, healthLabel, customLabel, disease, expenses, signDoctorCode, signDoctorName, signDoctorLevel, group);
                    healthDoctor, healthDoctorName, cDoctor.getHospital(), cDoctor.getHosptialName(),
                    idcard, ssc, mobile, emerMobile, images, healthLabel, customLabel, disease, expenses, signDoctorCode, signDoctorName, signDoctorLevel, adminTeamCode);
            if (sf == null) {
                return error(-1, "代理签约失败!");
@ -265,28 +265,28 @@ public class DoctorFamilyContractController extends WeixinBaseController {
     * @param signType         是否有三师签约 1 否 2是
     * @param healthDoctor     健康管理师标识
     * @param healthDoctorName 健康管理师姓名
     * @param majorDoctor      专科医生标识
     * @param disease          疾病code
     * @param msgid            消息id
     * @param patientIDcard    患者身份证
     * @param type             处理类型:1同意,2拒绝
     * @param group
     * @param adminTeamCode    行政团队code
     * @return
     */
    @RequestMapping(value = "sign")
    @ResponseBody
    public String sign(
            @RequestParam(required = true, defaultValue = "1") String signType,
            String healthDoctor,
            @RequestParam(required = false, defaultValue = "") String healthDoctor,
            @RequestParam(required = false, defaultValue = "") String healthDoctorName,
            @RequestParam(required = false, defaultValue = "") String doctor,
            @RequestParam(required = false, defaultValue = "") String doctorName,
            String healthLabel,
            @RequestParam(required = false, defaultValue = "") String customLabel,
            @RequestParam(required = false, defaultValue = "") String disease,
            String healthDoctorName,
            @RequestParam(required = false) String majorDoctor,
            @RequestParam(required = false) String majorDoctorName,
            long msgid,
            String patientIDcard,
            int type, String group,
            int type,
            long adminTeamCode,
            @RequestParam(required = false, defaultValue = "0") String expenses) {
        try {
            if (type != 2) {
@ -312,11 +312,15 @@ public class DoctorFamilyContractController extends WeixinBaseController {
                }
            }
            if (StringUtils.isEmpty(doctor) && StringUtils.isEmpty(healthDoctor)) {
                return error(-1, "全科医生或健管师不能为空!");
            }
            if (StringUtils.isEmpty(healthLabel) && type != 2) {
                return error(-1, "健康情况标签不能为空!");
            }
            int res = familyContractService.handleSign(signType, getAccessToken(), healthDoctor, healthDoctorName, msgid, patientIDcard, type, healthLabel, customLabel, disease, majorDoctor, majorDoctorName, group, expenses);
            int res = familyContractService.handleSign(signType, getAccessToken(), doctor, doctorName, healthDoctor, healthDoctorName, msgid, patientIDcard, type, healthLabel, customLabel, disease, expenses, adminTeamCode);
            if (res == -1) {
                return error(-1, "未知的处理类型!");
            } else if (res == 0) {
@ -343,10 +347,15 @@ public class DoctorFamilyContractController extends WeixinBaseController {
    @RequestMapping(value = "getSanshiSign")
    @ResponseBody
    public String getSanshiSign(
            String patientCode) {
            String patientCode, @RequestParam(required = false) String signDoctor) {
        try {
            Map<String, Object> res = familyContractService.getSanshiSignByPatientCode(patientCode);
            if (String.valueOf(res.get("hasSanshi")).equals("true") && StringUtils.isNotEmpty(signDoctor)) {
                List<AdminTeam> teams = teamService.findDoctorsTeams(signDoctor, String.valueOf(res.get("qkCode")));
                res.put("team", teams != null ? teams : new ArrayList<AdminTeam>());
            }
            return write(200, "获取消息列表成功!", "data", res);
        } catch (Exception e) {
            error(e);
@ -494,7 +503,7 @@ public class DoctorFamilyContractController extends WeixinBaseController {
     */
    @RequestMapping(value = "patient_sanshi_signinfo")
    @ResponseBody
    public String getPatientSanshiSignByIdCard(String idCard) {
    public String getPatientSanshiSignByIdCard(String idCard, @RequestParam(required = false) String signDoctor) {
        try {
            if (StringUtils.isEmpty(idCard)) {
                return error(-1, "请输入身份证号!");
@ -532,6 +541,11 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            result = familyContractService.getSanshiSingInfoByPatientIdCard(idCard);
            if (result.getString("signStatus").equals("1") && StringUtils.isNotEmpty(signDoctor)) {
                List<AdminTeam> teams = teamService.findDoctorsTeams(signDoctor, result.getString("doctor"));
                result.put("team", teams != null ? new JSONArray(teams) : new JSONArray());
            }
            return write(200, "查询成功!", "data", result);
        } catch (Exception e) {
            return error(-1, "查询失败!");
@ -717,18 +731,19 @@ public class DoctorFamilyContractController extends WeixinBaseController {
     */
    @RequestMapping(value = "/sign_info_update")
    @ResponseBody
    public String updateSignInfo(String patient, @RequestParam(required = false) String healthDoctor
            , @RequestParam(required = false) String expensesType) {
    public String updateSignInfo(String patient, @RequestParam(required = false) String healthDoctor,
                                 @RequestParam(required = false) String doctor,
                                 @RequestParam(required = false) String expensesType) {
        try {
            if (StringUtils.isEmpty(patient)) {
                return error(-1, "患者不能为空");
            }
            if (StringUtils.isEmpty(healthDoctor) && StringUtils.isEmpty(expensesType)) {
                return error(-1, "参数healthDoctor和expensesType不能同时为空");
            if (StringUtils.isEmpty(healthDoctor) && StringUtils.isEmpty(expensesType) && StringUtils.isEmpty(doctor)) {
                return error(-1, "参数不能同时为空");
            }
            JSONObject result = familyContractService.updateSignInfo(patient, healthDoctor, expensesType);
            JSONObject result = familyContractService.updateSignInfo(patient, healthDoctor, doctor, expensesType);
            if (result.getInt("status") != 1) {
                return error(-1, result.getString("msg"));
@ -823,10 +838,10 @@ public class DoctorFamilyContractController extends WeixinBaseController {
    @RequestMapping(value = "/expenses_remind")
    @ResponseBody
    public String remindPatientExpenses(@RequestParam(required = false) String patient
            ,@RequestParam(required = false)  String isAll) {
            , @RequestParam(required = false) String isAll) {
        try {
            if (StringUtils.isEmpty(patient) && StringUtils.isEmpty(isAll)) {
                return error(-1,"参数不能都为空");
                return error(-1, "参数不能都为空");
            }
            if (StringUtils.isNotEmpty(patient)) {
@ -847,4 +862,32 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            return error(-1, "提醒失败");
        }
    }
    /**
     * 患者今天是否已提醒缴费
     *
     * @param patient 患者code
     * @return
     */
    @RequestMapping(value = "/is_patient_remind_expenses")
    @ResponseBody
    public String isPatientExpensesRemindToday(String patient) {
        try {
            if (StringUtils.isEmpty(patient)) {
                return error(-1, "患者不能为空");
            }
            int result = 0;
            String epTime = redisTemplate.opsForValue().get("expenses:remind:" + patient);
            if (StringUtils.isEmpty(epTime)) {
                result = 0;
            } else {
                result = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).equals(epTime) ? 1 : 0;
            }
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
}

+ 16 - 2
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/account/PatientController.java

@ -1,10 +1,12 @@
package com.yihu.wlyy.web.patient.account;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.service.app.team.AdminTeamService;
import com.yihu.wlyy.service.app.team.DrHealthTeamService;
import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.service.common.account.TokenService;
@ -15,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
@ -24,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springside.modules.utils.Encodes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -48,6 +52,8 @@ public class PatientController extends WeixinBaseController {
    private DrHealthTeamService doctorTeamService;
    @Autowired
    private DoctorService doctorService;
    @Autowired
    AdminTeamService teamService;
    /**
     * 患者基本信息查询接口
@ -324,7 +330,7 @@ public class PatientController extends WeixinBaseController {
     */
    @RequestMapping(value = "teachers")
    @ResponseBody
    public String teachers() {
    public String teachers(@RequestParam(required = false,defaultValue = "") String signDoctor) {
        try {
            String code = getUID();//getUID();
            // 查询签约信息
@ -338,6 +344,7 @@ public class PatientController extends WeixinBaseController {
            // 查询三师医生信息
            List<Doctor> doctors = doctorTeamService.findSanshiTeamDoctors(code);
            JSONArray jsonArray = new JSONArray();
            String qkDoctor = "";
            if (doctors != null) {
                for (Doctor doctor : doctors) {
                    if (doctor == null) {
@ -356,6 +363,7 @@ public class PatientController extends WeixinBaseController {
                        json.put("typename", "专科医生");
                    } else if (type == 2) {
                        json.put("typename", "全科医生");
                        qkDoctor = doctor.getCode();
                    } else if (type == 3) {
                        json.put("typename", "健康管理师");
                    } else {
@ -365,6 +373,12 @@ public class PatientController extends WeixinBaseController {
                    jsonArray.put(json);
                }
            }
            if(StringUtils.isNotEmpty(signDoctor)){
                List<AdminTeam> teams = teamService.findDoctorsTeams(signDoctor,qkDoctor);
                doctorJson.put("team",teams != null ? new JSONArray(teams) : new ArrayList<AdminTeam>());
            }
            doctorJson.put("list", jsonArray);
            return write(200, "查询成功!", "data", doctorJson);
        } catch (Exception e) {
@ -757,7 +771,7 @@ public class PatientController extends WeixinBaseController {
            } else if (status == -2) {
                return error(-1, "家庭成员不存在该人");
            } else {
                return write(200, "切换账号成功", "data", result.get("data"));
                return write(200, "切换账号成功", "data", result.getJSONObject("data"));
            }
        } catch (Exception e) {
            e.printStackTrace();

+ 517 - 468
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/FamilyContractController.java

@ -34,498 +34,547 @@ import java.util.List;
/**
 * 患者端:家庭签约控制类
 * @author George
 *
 * @author George
 */
@Controller
@RequestMapping(value = "/patient/family_contract", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "患者端-家庭签约")
public class FamilyContractController extends BaseController {
	@Autowired
	private FamilyContractService familyContractService;
	@Autowired
	private PatientService patientService;
	@Autowired
	private DoctorService doctorService;
	@Autowired
	private FamilyService familyService;
	@Autowired
	private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao;
    @Autowired
    private FamilyContractService familyContractService;
    @Autowired
    private PatientService patientService;
    @Autowired
    private DoctorService doctorService;
    @Autowired
    private FamilyService familyService;
    @Autowired
    private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao;
    /**
     * 得到患者的签约的医生的信息
     *
     * @param patientCode 患者标识
     * @return
     */
    @RequestMapping(value = "getSignMessage")
    @ResponseBody
    public String getSignDoctorMessage(String patientCode) {
        try {
            JSONArray array = familyContractService.getSignDoctorMessage(patientCode);
            return write(200, "获取列表成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "获取列表失败!");
        }
    }
    /**
     * 社区医院列表查询接口
     *
     * @param type     医院类型:0全部,1大医院,2社区医院
     * @param province 患标识
     * @param city     城市标识
     * @param key      搜索关键字,用于搜索医院名称
     * @return
     */
    @RequestMapping(value = "hospitals")
    @ResponseBody
    public String hospitals(
            int type,
            @RequestParam(required = false) String province,
            @RequestParam(required = false) String city,
            @RequestParam(required = false) String town,
            @RequestParam(required = false) String key,
            long id,
            int pagesize) {
        try {
            JSONArray array = new JSONArray();
            Page<Hospital> list = familyContractService.findHospitals(type, province, city, town, key, id, pagesize);
            if (list != null) {
                for (Hospital hospital : list) {
                    if (hospital == null) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    json.put("id", hospital.getId());
                    // 医院标识
                    json.put("code", hospital.getCode());
                    // 医院名称
                    json.put("name", hospital.getName());
                    // 省名
                    json.put("province_name", hospital.getProvinceName());
                    // 城市名
                    json.put("city_name", hospital.getCityName());
                    // 区县名
                    json.put("town_name", hospital.getTownName());
                    // 详细地址
                    json.put("address", hospital.getAddress());
                    // 简介
                    json.put("intro", hospital.getIntro());
                    // 医院图片
                    json.put("photo", hospital.getPhoto());
                    array.put(json);
                }
            }
            return write(200, "获取医院列表成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "获取医院列表失败!");
        }
    }
	/**
	 * 得到患者的签约的医生的信息
	 * @param patientCode 患者标识
	 * @return
    /**
     * 社区医院下医生列表查询接口
     *
     * @param hospital 医院标识
     * @return
     */
	@RequestMapping(value = "getSignMessage")
	@ResponseBody
	public String getSignDoctorMessage(String patientCode){
		try {
    @RequestMapping(value = "doctors")
    @ResponseBody
    public String hospitalList(String hospital, long id, int pagesize) {
        try {
            JSONArray array = new JSONArray();
            Page<Doctor> list = familyContractService.findDoctors(hospital, 2, id, pagesize);
            if (list != null) {
                for (Doctor doctor : list) {
                    if (doctor == null) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    json.put("id", doctor.getId());
                    // 医生标识
                    json.put("code", doctor.getCode());
                    // 医生姓名
                    json.put("name", doctor.getName());
                    // 所在医院名称
                    json.put("hospital_name", doctor.getHosptialName());
                    // 科室名称
                    json.put("dept_name", doctor.getDeptName());
                    // 职称名称
                    json.put("job_name", doctor.getJobName());
                    // 头像
                    json.put("photo", doctor.getPhoto());
                    // 简介
                    json.put("introduce", doctor.getIntroduce());
                    // 专长
                    json.put("expertise", doctor.getExpertise());
                    array.put(json);
                }
            }
            return write(200, "获取医院医生列表成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "获取医院医生列表失败!");
        }
    }
			JSONArray array =familyContractService.getSignDoctorMessage(patientCode);
    /**
     * 医生主页信息查询接口
     *
     * @param doctor 医生标识
     * @return
     */
    @RequestMapping(value = "homepage")
    @ResponseBody
    public String homepage(String doctor) {
        try {
            JSONObject json = familyContractService.findDoctorMainPage(getUID(), doctor);
			return write(200, "获取列表成功!", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取列表失败!");
		}
	}
            if (json == null) {
                return error(-1, "医生主页查询失败!");
            }
            return write(200, "医生主页查询成功!", "data", json);
        } catch (Exception e) {
            error(e);
            return error(-1, "医生主页查询失败!");
        }
    }
    /**
     * 与指定医生的签约状态查询接口
     *
     * @param doctor
     * @return
     */
    @RequestMapping(value = "status")
    @ResponseBody
    public String signStatus(String doctor) {
        try {
            // -1未签约,0待签约,1已签约,2患者申请取消签约,3医生申请取消签约
            int status = familyContractService.findSignStatus(getUID(), doctor);
            return write(200, "数据加载成功!", "data", status);
        } catch (Exception e) {
            error(e);
            return error(-1, "数据加载失败!");
        }
    }
	/**
	 * 社区医院列表查询接口
	 * @param type 医院类型:0全部,1大医院,2社区医院
	 * @param province 患标识
	 * @param city 城市标识
	 * @param key 搜索关键字,用于搜索医院名称
	 * @return
	 */
	@RequestMapping(value = "hospitals")
	@ResponseBody
	public String hospitals(
			int type,
			@RequestParam(required = false) String province,
			@RequestParam(required = false) String city,
			@RequestParam(required = false) String town,
			@RequestParam(required = false) String key,
			long id,
			int pagesize) {
		try {
			JSONArray array = new JSONArray();
			Page<Hospital> list = familyContractService.findHospitals(type, province, city, town, key, id, pagesize);
			if (list != null) {
				for (Hospital hospital : list) {
					if (hospital == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("id", hospital.getId());
					// 医院标识
					json.put("code", hospital.getCode());
					// 医院名称
					json.put("name", hospital.getName());
					// 省名
					json.put("province_name", hospital.getProvinceName());
					// 城市名
					json.put("city_name", hospital.getCityName());
					// 区县名
					json.put("town_name", hospital.getTownName());
					// 详细地址
					json.put("address", hospital.getAddress());
					// 简介
					json.put("intro", hospital.getIntro());
					// 医院图片
					json.put("photo", hospital.getPhoto());
					array.put(json);
				}
			}
			return write(200, "获取医院列表成功!", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取医院列表失败!");
		}
	}
    /**
     * 得到患者的签约信息
     * homePageDoctor,//主页医生code
     * invitePatientCode //邀请患者
     *
     * @return
     */
    @RequestMapping(value = "getPatientSign")
    @ResponseBody
    public String getPatientSign(
            String homePageDoctorCode,//主页医生code
            String invitePatientCode //邀请患者
    ) {
        try {
            JSONObject json = new JSONObject();
            //得到主页医生
            Doctor homePageDoctor = doctorService.findDoctorByCode(homePageDoctorCode);
            //得到邀请患者
            PatientInvitationLog w = familyService.getPatientInviteLog(invitePatientCode);
            //得到被邀请的患者的家庭签约
            SignFamily signFamily = familyContractService.getPatientSign(w.getInvitePatientCode());
            SignFamily ssSignFamily = familyContractService.getssPatientSign(w.getInvitePatientCode());
            json.put("homepage_doctor", homePageDoctor.getCode());
            json.put("homepage_doctorName", homePageDoctor.getName());
            json.put("homepage_photo", homePageDoctor.getPhoto());
            json.put("homepage_sex", homePageDoctor.getSex());
            json.put("homepage_job", homePageDoctor.getJob());
            json.put("homepage_jobName", homePageDoctor.getJobName());
            json.put("homepage_hospital", homePageDoctor.getHosptialName());
            json.put("homepage_dept", homePageDoctor.getDeptName());
            json.put("homepage_intro", homePageDoctor.getIntroduce());
            json.put("homepage_expertise", homePageDoctor.getExpertise());
            json.put("patient_code", w.getInvitePatientCode());//被邀请code
            json.put("patient_name", w.getInvitePatientName());//被邀请人名
            //设置查看病人所在分组
            List<DoctorPatientGroupInfo> dctorPatientGroupInfo = doctorPatientGroupInfoDao.findByMorenPatient(w.getInvitePatientCode());
            if (dctorPatientGroupInfo != null && dctorPatientGroupInfo.size() > 0) {
                json.put("group", dctorPatientGroupInfo.get(0).getGroup());
            } else {
                json.put("group", "0");
            }
            if (signFamily != null) {
                json.put("type", "1");//签约类型 家庭
                json.put("sign_code", signFamily.getCode());// 消息code
                json.put("sign_type", signFamily.getStatus());// -1未签约,0待签约,1已签约,2患者申请取消签约,3医生申请取消签约
                json.put("sign_doctor", signFamily.getDoctor());// 全科医生
                json.put("sign_doctorName", signFamily.getDoctorName());// 全科医生
                json.put("sign_code", signFamily.getCode());// 签约code
            } else if (ssSignFamily != null) {
                json.put("type", "2");//签约类型 三师
                json.put("sign_code", ssSignFamily.getCode());// 消息code
                json.put("sign_type", ssSignFamily.getStatus());// -1未签约,0待签约,1已签约,2患者申请取消签约,3医生申请取消签约
                json.put("sign_doctor", ssSignFamily.getDoctor());// 全科医生
                json.put("sign_doctorName", ssSignFamily.getDoctorName());// 全科医生
                json.put("sign_code", ssSignFamily.getCode());// 签约code
            } else {
                json.put("sign_type", -1);//-1未签约
            }
	/**
	 * 社区医院下医生列表查询接口
	 * @param hospital 医院标识
	 * @return
	 */
	@RequestMapping(value = "doctors")
	@ResponseBody
	public String hospitalList(String hospital, long id, int pagesize) {
		try {
			JSONArray array = new JSONArray();
			Page<Doctor> list = familyContractService.findDoctors(hospital, 2, id, pagesize);
			if (list != null) {
				for (Doctor doctor : list) {
					if (doctor == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("id", doctor.getId());
					// 医生标识
					json.put("code", doctor.getCode());
					// 医生姓名
					json.put("name", doctor.getName());
					// 所在医院名称
					json.put("hospital_name", doctor.getHosptialName());
					// 科室名称
					json.put("dept_name", doctor.getDeptName());
					// 职称名称
					json.put("job_name", doctor.getJobName());
					// 头像
					json.put("photo", doctor.getPhoto());
					// 简介
					json.put("introduce", doctor.getIntroduce());
					// 专长
					json.put("expertise", doctor.getExpertise());
					array.put(json);
				}
			}
			return write(200, "获取医院医生列表成功!", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取医院医生列表失败!");
		}
	}
	/**
	 * 医生主页信息查询接口
	 * @param doctor 医生标识
	 * @return
	 */
	@RequestMapping(value = "homepage")
	@ResponseBody
	public String homepage(String doctor) {
		try {
			JSONObject json = familyContractService.findDoctorMainPage(getUID(), doctor);
            return write(200, "数据加载成功!", "data", json);
        } catch (Exception e) {
            error(e);
            return error(-1, "数据加载失败!");
        }
    }
			if (json == null) {
				return error(-1, "医生主页查询失败!");
			}
			return write(200, "医生主页查询成功!", "data", json);
		} catch (Exception e) {
			error(e);
			return error(-1, "医生主页查询失败!");
		}
	}
    /**
     * 校验openid是否有签约信息
     *
     * @return
     */
    @RequestMapping(value = "checkOpenid")
    @ResponseBody
    public String checkOpenid() {
        try {
            if (StringUtils.isEmpty(getOpenid())) {
                return error(-1, "无效的Openid!");
            }
            String doctor = familyContractService.checkPatient(getUID());
            return write(200, "签约验证成功!", "data", doctor);
        } catch (Exception e) {
            error(e);
            return error(-1, "签约验证异常!");
        }
    }
	/**
	 * 与指定医生的签约状态查询接口
	 * @param doctor
	 * @return
	 */
	@RequestMapping(value = "status")
	@ResponseBody
	public String signStatus(String doctor) {
		try {
			// -1未签约,0待签约,1已签约,2患者申请取消签约,3医生申请取消签约
			int status = familyContractService.findSignStatus(getUID(), doctor);
			return write(200, "数据加载成功!", "data", status);
		} catch (Exception e) {
			error(e);
			return error(-1, "数据加载失败!");
		}
	}
	/**
	 * 得到患者的签约信息
	 *   homePageDoctor,//主页医生code
	    invitePatientCode //邀请患者
	 * @return
	 */
	@RequestMapping(value = "getPatientSign")
	@ResponseBody
	public String getPatientSign(
			String homePageDoctorCode,//主页医生code
			String invitePatientCode //邀请患者
	) {
		try {
			JSONObject json = new JSONObject();
			//得到主页医生
			Doctor homePageDoctor=doctorService.findDoctorByCode(homePageDoctorCode);
			//得到邀请患者
			PatientInvitationLog w= familyService.getPatientInviteLog(invitePatientCode);
			//得到被邀请的患者的家庭签约
			SignFamily signFamily=familyContractService.getPatientSign(w.getInvitePatientCode());
			SignFamily ssSignFamily=familyContractService.getssPatientSign(w.getInvitePatientCode());
			json.put("homepage_doctor",homePageDoctor.getCode());
			json.put("homepage_doctorName",homePageDoctor.getName());
			json.put("homepage_photo", homePageDoctor.getPhoto());
			json.put("homepage_sex", homePageDoctor.getSex());
			json.put("homepage_job", homePageDoctor.getJob());
			json.put("homepage_jobName", homePageDoctor.getJobName());
			json.put("homepage_hospital", homePageDoctor.getHosptialName());
			json.put("homepage_dept", homePageDoctor.getDeptName());
			json.put("homepage_intro", homePageDoctor.getIntroduce());
			json.put("homepage_expertise", homePageDoctor.getExpertise());
			json.put("patient_code", w.getInvitePatientCode());//被邀请code
			json.put("patient_name", w.getInvitePatientName());//被邀请人名
			//设置查看病人所在分组
			List<DoctorPatientGroupInfo> dctorPatientGroupInfo = doctorPatientGroupInfoDao.findByMorenPatient(w.getInvitePatientCode());
			if (dctorPatientGroupInfo != null && dctorPatientGroupInfo.size() > 0) {
				json.put("group", dctorPatientGroupInfo.get(0).getGroup());
			} else {
				json.put("group", "0");
			}
			if(signFamily!=null){
				json.put("type","1");//签约类型 家庭
				json.put("sign_code", signFamily.getCode());// 消息code
				json.put("sign_type", signFamily.getStatus());// -1未签约,0待签约,1已签约,2患者申请取消签约,3医生申请取消签约
				json.put("sign_doctor",signFamily.getDoctor());// 全科医生
				json.put("sign_doctorName",signFamily.getDoctorName());// 全科医生
				json.put("sign_code", signFamily.getCode());// 签约code
			}else if(ssSignFamily!=null){
				json.put("type","2");//签约类型 三师
				json.put("sign_code", ssSignFamily.getCode());// 消息code
				json.put("sign_type", ssSignFamily.getStatus());// -1未签约,0待签约,1已签约,2患者申请取消签约,3医生申请取消签约
				json.put("sign_doctor",ssSignFamily.getDoctor());// 全科医生
				json.put("sign_doctorName",ssSignFamily.getDoctorName());// 全科医生
				json.put("sign_code", ssSignFamily.getCode());// 签约code
			}else{
				json.put("sign_type", -1);//-1未签约
			}
    /**
     * 校验是否有签约信息
     *
     * @param idcard
     * @return
     */
    @RequestMapping(value = "check")
    @ResponseBody
    public String checkSign(String idcard) {
        try {
            if (StringUtils.isEmpty(idcard)) {
                return error(-1, "请输入身份证号!");
            }
            // 解密身份证号
            idcard = RSAUtils.getInstance(familyContractService).decryptString(idcard);
            idcard = URLDecoder.decode(idcard, "UTF-8");
            idcard = StringUtils.reverse(idcard);
            // 校验身份证号
            IdcardValidator validator = new IdcardValidator();
            if (validator.isValidatedAllIdcard(idcard)) {
                if (idcard.length() == 15) {
                    idcard = validator.convertIdcarBy15bit(idcard);
                    if (StringUtils.isEmpty(idcard)) {
                        return error(-1, "请输入正确的身份证号!");
                    }
                }
            } else {
                return error(-1, "请输入正确的身份证号!");
            }
            Patient patient = patientService.findByCode(getUID());
            if (!StringUtils.equals(patient.getIdcard(), idcard)) {
                return error(-1, "身份证号错误,请输入注册的身份证号!");
            }
            JSONObject json = familyContractService.checkSign(patient);
            if (json == null) {
                return error(-1, "签约验证异常!");
            }
            return write(200, "签约验证成功!", "data", json);
        } catch (Exception e) {
            error(e);
            return error(-1, "签约验证异常!");
        }
    }
			return write(200, "数据加载成功!", "data", json);
		} catch (Exception e) {
			error(e);
			return error(-1, "数据加载失败!");
		}
	}
	/**
	 * 校验openid是否有签约信息
	 * @return
	 */
	@RequestMapping(value = "checkOpenid")
	@ResponseBody
	public String checkOpenid() {
		try {
			if (StringUtils.isEmpty(getOpenid())) {
				return error(-1, "无效的Openid!");
			}
			String doctor = familyContractService.checkPatient(getUID());
			return write(200, "签约验证成功!", "data", doctor);
		} catch (Exception e) {
			error(e);
			return error(-1, "签约验证异常!");
		}
	}
//    /**
//     * 发送签约申请
//     *
//     * @param province     省代码
//     * @param provinceName 省名称
//     * @param city         城市代码
//     * @param cityName     城市名称
//     * @param town         区县代码
//     * @param townName     区县名称
//     * @param address      详细地址
//     * @param name         患者姓名
//     * @param doctor       医生标识
//     * @param idcard       患者身份证号
//     * @param ssc          患者社保卡号
//     * @param mobile       患者手机号
//     * @param emerMobile   患者紧急联系人
//     */
//    @RequestMapping(value = "sign")
//    @ResponseBody
//    public String sign(
//            @RequestParam(required = false) String province,
//            @RequestParam(required = false) String provinceName,
//            @RequestParam(required = false) String city,
//            @RequestParam(required = false) String cityName,
//            @RequestParam(required = false) String town,
//            @RequestParam(required = false) String townName,
//            @RequestParam(required = false) String address,
//            String name,
//            String doctor,
//            String doctorName,
//            @RequestParam(required = false) String patientCode,
//            @RequestParam(required = false) String idcard,
//            String ssc,
//            @RequestParam(required = false) String mobile,
//            @RequestParam(required = false) String emerMobile) {
//        try {
//            // String openid = getOpenid();
//            // String uid = getUID();
//            // if (StringUtils.isEmpty(openid) && StringUtils.isEmpty(uid)) {
//            // return error(-1, "无效的用户请求!");
//            // }
//            // if (StringUtils.isEmpty(idcard)) {
//            // return error(-1, "身份证号不允许为空!");
//            // }
//            // // 解密身份证号
////			 idcard = RSAUtils.getInstance(familyContractService).decryptString(idcard);
////			 idcard = URLDecoder.decode(idcard, "UTF-8");
////			 idcard = StringUtils.reverse(idcard);
//            if (StringUtils.isEmpty(patientCode)) {
//                patientCode = getUID();
//            }
//            Patient patient = patientService.findByCode(patientCode);
//            int amount = familyContractService.hasSingStatus(patient.getIdcard());
//            if (amount > 0) {
//                return error(-1, "只可以签约一个家庭医生!");
//            }
//            JSONObject json = familyContractService.sign(patient.getProvince(), patient.getProvinceName(),
//                    patient.getCity(), patient.getCityName(), patient.getTown(), patient.getTownName(), patient.getAddress(),
//                    patient.getName(), doctor, patient.getOpenid(), patient.getCode(), patient.getIdcard(), patient.getSsc(), patient.getMobile(), emerMobile);
//            int res = json.getInt("res");
//            if (res == -2) {
//                return error(-1, "身份证号与当前登录用户的身份证号不匹配!");
//            } else if (res == -3) {
//                return error(-1, "身份证号已经注册!");
//            }
//            //更新患者信息
////			if (StringUtils.isEmpty(name) ) {
////				patient.setName(name);
////			}
////			if (StringUtils.isEmpty(idcard) ) {
////				patient.setIdcard(idcard);
////			}
//            if (StringUtils.isEmpty(ssc)) {
//                patient.setSsc(ssc);
//            }
////			if (StringUtils.isEmpty(mobile) ) {
////				patient.setMobile(mobile);
////			}
//            patientService.updatePatientInfo(patient);
//            return write(200, "签约申请已发送!", "data", json);
//        } catch (Exception e) {
//            error(e);
//            return error(-1, "签约申请发送失败!");
//        }
//    }
	/**
	 * 校验是否有签约信息
	 * @param idcard
	 * @return
	 */
	@RequestMapping(value = "check")
	@ResponseBody
	public String checkSign(String idcard) {
		try {
			if (StringUtils.isEmpty(idcard)) {
				return error(-1, "请输入身份证号!");
			}
			// 解密身份证号
			idcard = RSAUtils.getInstance(familyContractService).decryptString(idcard);
			idcard = URLDecoder.decode(idcard, "UTF-8");
			idcard = StringUtils.reverse(idcard);
			// 校验身份证号
			IdcardValidator validator = new IdcardValidator();
			if (validator.isValidatedAllIdcard(idcard)) {
				if (idcard.length() == 15) {
					idcard = validator.convertIdcarBy15bit(idcard);
					if (StringUtils.isEmpty(idcard)) {
						return error(-1, "请输入正确的身份证号!");
					}
				}
			}else{
				return error(-1, "请输入正确的身份证号!");
			}
    /**
     * 签约申请
     *
     * @param doctor     医生code
     * @param doctorType 医生类型  2:全科 3:健管
     * @return
     */
    @RequestMapping(value = "sign")
    @ResponseBody
    public String sign(String doctor, int doctorType) {
        try {
            if (StringUtils.isEmpty(doctor)) {
                return error(-1, "签约医生不能为空");
            }
            if (doctorType != 2 && doctorType != 3) {
                return error(-1, "医生类型参数错误");
            }
			Patient patient = patientService.findByCode(getUID());
			if (!StringUtils.equals(patient.getIdcard(), idcard)) {
				return error(-1, "身份证号错误,请输入注册的身份证号!");
			}
			JSONObject json = familyContractService.checkSign(patient);
			if (json == null) {
				return error(-1, "签约验证异常!");
			}
			return write(200, "签约验证成功!", "data", json);
		} catch (Exception e) {
			error(e);
			return error(-1, "签约验证异常!");
		}
	}
            int result = familyContractService.sign(doctor, getUID(), doctorType);
	/**
	 * 发送签约申请
	 * @param province 省代码
	 * @param provinceName 省名称
	 * @param city 城市代码
	 * @param cityName 城市名称
	 * @param town 区县代码
	 * @param townName 区县名称
	 * @param address 详细地址
	 * @param name 患者姓名
	 * @param doctor 医生标识
	 * @param idcard 患者身份证号
	 * @param ssc 患者社保卡号
	 * @param mobile 患者手机号
	 * @param emerMobile 患者紧急联系人
	 */
	@RequestMapping(value = "sign")
	@ResponseBody
	public String sign(
			@RequestParam(required = false) String province,
			@RequestParam(required = false) String provinceName,
			@RequestParam(required = false) String city,
			@RequestParam(required = false) String cityName,
			@RequestParam(required = false) String town,
			@RequestParam(required = false) String townName,
			@RequestParam(required = false) String address,
			String name,
			String doctor,
			String doctorName,
			@RequestParam(required = false) String patientCode,
			@RequestParam(required = false)String idcard,
			String ssc,
			@RequestParam(required = false) String mobile,
			@RequestParam(required = false) String emerMobile) {
		try {
			// String openid = getOpenid();
			// String uid = getUID();
			// if (StringUtils.isEmpty(openid) && StringUtils.isEmpty(uid)) {
			// return error(-1, "无效的用户请求!");
			// }
			// if (StringUtils.isEmpty(idcard)) {
			// return error(-1, "身份证号不允许为空!");
			// }
			// // 解密身份证号
//			 idcard = RSAUtils.getInstance(familyContractService).decryptString(idcard);
//			 idcard = URLDecoder.decode(idcard, "UTF-8");
//			 idcard = StringUtils.reverse(idcard);
			if(StringUtils.isEmpty(patientCode)){
				patientCode=getUID();
			}
			Patient patient = patientService.findByCode(patientCode);
			int amount = familyContractService.hasSingStatus(patient.getIdcard());
			if (amount > 0) {
				return error(-1, "只可以签约一个家庭医生!");
			}
			JSONObject json = familyContractService.sign(patient.getProvince(), patient.getProvinceName(),
					patient.getCity(), patient.getCityName(), patient.getTown(), patient.getTownName(), patient.getAddress(),
					patient.getName(), doctor, patient.getOpenid(), patient.getCode(), patient.getIdcard(), patient.getSsc(), patient.getMobile(), emerMobile);
			int res = json.getInt("res");
			if (res == -2) {
				return error(-1, "身份证号与当前登录用户的身份证号不匹配!");
			}else if (res == -3) {
				return error(-1, "身份证号已经注册!");
			}
			//更新患者信息
//			if (StringUtils.isEmpty(name) ) {
//				patient.setName(name);
//			}
//			if (StringUtils.isEmpty(idcard) ) {
//				patient.setIdcard(idcard);
//			}
			if (StringUtils.isEmpty(ssc) ) {
				patient.setSsc(ssc);
			}
//			if (StringUtils.isEmpty(mobile) ) {
//				patient.setMobile(mobile);
//			}
			patientService.updatePatientInfo(patient);
			return write(200, "签约申请已发送!", "data", json);
		} catch (Exception e) {
			error(e);
			return error(-1, "签约申请发送失败!");
		}
	}
            if (result == -1) {
                return error(-1, "用户信息查询失败");
            } else if (result == -2) {
                return error(-1, "用户已存在签约");
            } else if (result == -3) {
                return error(-1, "医生信息查询失败");
            } else {
                return write(200, "签约申请成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "签约申请失败");
        }
    }
	/**
	 * 取消签约申请
	 * @param doctor
	 * @return
	 */
	@RequestMapping(value = "unsign")
	@ResponseBody
	public String unsign(
			String doctor,
			@RequestParam(required = false) String patientCode
	) {
		try {
			// String openid = getOpenid();
			// String uid = getUID();
			// if (StringUtils.isEmpty(openid) && StringUtils.isEmpty(uid)) {
			// return error(-1, "无效的用户请求!");
			// }
			// -1申请失败, 200申请成功,其他为状态已变化无法取消申请
			patientCode=StringUtils.isNoneBlank(patientCode)?patientCode:getUID();
			int res = familyContractService.unsign(patientCode, doctor);
			if (res == -1) {
				return error(-1, "取消签约失败!");
			} else if (res == 200) {
				return success("签约申请已取消!");
			} else {
				return error(-1, "签约状态已变化,无法申请取消签约!");
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "取消签约失败!");
		}
	}
    /**
     * 取消签约申请
     *
     * @param doctor
     * @return
     */
    @RequestMapping(value = "unsign")
    @ResponseBody
    public String unsign(
            String doctor,
            @RequestParam(required = false) String patientCode
    ) {
        try {
            // String openid = getOpenid();
            // String uid = getUID();
            // if (StringUtils.isEmpty(openid) && StringUtils.isEmpty(uid)) {
            // return error(-1, "无效的用户请求!");
            // }
            // -1申请失败, 200申请成功,其他为状态已变化无法取消申请
            patientCode = StringUtils.isNoneBlank(patientCode) ? patientCode : getUID();
            int res = familyContractService.unsign(patientCode, doctor);
            if (res == -1) {
                return error(-1, "取消签约失败!");
            } else if (res == 200) {
                return success("签约申请已取消!");
            } else {
                return error(-1, "签约状态已变化,无法申请取消签约!");
            }
        } catch (Exception e) {
            error(e);
            return error(-1, "取消签约失败!");
        }
    }
	/**
	 * 申请解约
	 * @param doctor 医生标识
	 * @param doctorName 医生姓名
	 * @return
	 */
	@RequestMapping(value = "surrender")
	@ResponseBody
	public String surrender(String doctor, String doctorName, String reason,
							@RequestParam(required = false) String patientCode) {
		try {
			patientCode=StringUtils.isNoneBlank(patientCode)?patientCode:getUID();
			Patient patient = patientService.findByCode(patientCode);
			int res = familyContractService.surrender(patient.getCode(), patient.getName(), patient.getPhoto(), doctor, doctorName, patient.getOpenid(), reason,patient.getSex());
			if (res == 0) {
				return error(-1, "解约申请发送失败!");
			} else {
				return success("解约申请已发送!");
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "解约申请发送失败!");
		}
	}
    /**
     * 申请解约
     *
     * @param doctor     医生标识
     * @param doctorName 医生姓名
     * @return
     */
    @RequestMapping(value = "surrender")
    @ResponseBody
    public String surrender(String doctor, String doctorName, String reason,
                            @RequestParam(required = false) String patientCode) {
        try {
            patientCode = StringUtils.isNoneBlank(patientCode) ? patientCode : getUID();
            Patient patient = patientService.findByCode(patientCode);
            int res = familyContractService.surrender(patient.getCode(), patient.getName(), patient.getPhoto(), doctor, doctorName, patient.getOpenid(), reason, patient.getSex());
            if (res == 0) {
                return error(-1, "解约申请发送失败!");
            } else {
                return success("解约申请已发送!");
            }
        } catch (Exception e) {
            error(e);
            return error(-1, "解约申请发送失败!");
        }
    }
	/**
	 * 查询患者相关的签约消息
	 * @return
	 */
	@RequestMapping(value = "messages")
	@ResponseBody
	public String messages(long id, int pagesize) {
		try {
			JSONArray array = new JSONArray();
			Page<Message> list = familyContractService.findMessageByPatient(getUID(), id, pagesize);
			if (list != null) {
				for (Message msg : list) {
					if (msg == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					// 消息ID
					json.put("id", msg.getId());
					// 消息标题
					json.put("title", msg.getTitle());
					// 消息内容
					json.put("message", msg.getContent());
					// 消息类型
					json.put("type", msg.getType());
					// 发送人标识
					json.put("sender", msg.getSender());
					// 发送人姓名
					json.put("senderName", msg.getSenderName());
					// 发送人头像
					json.put("senderPhoto", msg.getSenderPhoto());
					// 是否已读:1未读,0已读
					json.put("read", msg.getRead());
					// 是否已处理,1为未处理,0为已处理
					json.put("status", msg.getOver());
					// 性别
					json.put("sex", msg.getSex());
					// 发送时间
					json.put("czrq", DateUtil.dateToStrLong(msg.getCzrq()));
					array.put(json);
				}
			}
			return write(200, "获取消息列表成功!", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取消息列表失败!");
		}
	}
    /**
     * 查询患者相关的签约消息
     *
     * @return
     */
    @RequestMapping(value = "messages")
    @ResponseBody
    public String messages(long id, int pagesize) {
        try {
            JSONArray array = new JSONArray();
            Page<Message> list = familyContractService.findMessageByPatient(getUID(), id, pagesize);
            if (list != null) {
                for (Message msg : list) {
                    if (msg == null) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    // 消息ID
                    json.put("id", msg.getId());
                    // 消息标题
                    json.put("title", msg.getTitle());
                    // 消息内容
                    json.put("message", msg.getContent());
                    // 消息类型
                    json.put("type", msg.getType());
                    // 发送人标识
                    json.put("sender", msg.getSender());
                    // 发送人姓名
                    json.put("senderName", msg.getSenderName());
                    // 发送人头像
                    json.put("senderPhoto", msg.getSenderPhoto());
                    // 是否已读:1未读,0已读
                    json.put("read", msg.getRead());
                    // 是否已处理,1为未处理,0为已处理
                    json.put("status", msg.getOver());
                    // 性别
                    json.put("sex", msg.getSex());
                    // 发送时间
                    json.put("czrq", DateUtil.dateToStrLong(msg.getCzrq()));
                    array.put(json);
                }
            }
            return write(200, "获取消息列表成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "获取消息列表失败!");
        }
    }
}

+ 22 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/BookingController.java

@ -265,6 +265,7 @@ public class BookingController extends WeixinBaseController {
					// 推送消息给微信端
					JSONObject json = new JSONObject();
					json.put("first", "预约挂号提醒");
					json.put("toUser", p.getCode());
					json.put("id",obj.getId());
					json.put("date", obj.getStartTime());
					json.put("orgName", obj.getOrgName());
@ -385,6 +386,7 @@ public class BookingController extends WeixinBaseController {
				if (StringUtils.isNotEmpty(p.getOpenid())) {
					JSONObject json = new JSONObject();
					json.put("first", "取消预约挂号提醒");
					json.put("toUser", p.getCode());
					json.put("name", obj.getName());
					json.put("date", obj.getStartTime());
					json.put("doctorName", obj.getDoctorName());
@ -565,4 +567,24 @@ public class BookingController extends WeixinBaseController {
			return error(-1,e.getMessage());
		}
	}
	/**
	 * 获取医生为患者预约的总数
	 */
	@RequestMapping(value = "CountReservationByDoctorForPatient",method = RequestMethod.POST)
	@ResponseBody
	@ApiOperation("获取患者预约信息单条-患者端")
	public String CountReservationByDoctorForPatient(@ApiParam(name="doctor",value="医生编号")
										  @RequestParam(value="doctor",required = true) String doctor,
										  @ApiParam(name="patient",value="患者编号")
										  @RequestParam(value="patient",required = true) String patient) {
		try {
			Long obj =  patientReservationService.countReservationByDoctorForPatient(doctor, patient);
			return write(200, "获取患者预约信息成功!", "data", obj);
		} catch (Exception e) {
			return error(-1,e.getMessage());
		}
	}
}

+ 6 - 0
patient-co-wlyy/src/main/resources/system.properties

@ -134,6 +134,8 @@ template_termination=C0tdXtA_8k-Cy4a1EkzQuI877vqaqAtRkc-e_Gsd7sk
template_appoint_success=FY3Pqa66tHIE1Fv-irbFBPOh5cYP71fkOzfZKH4S-Fo
#预约取消
template_appoint_failed=tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s
##缴费提醒
template_expenses_remind=tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s
#----------------测试环境(健康之路i厦门)----------------#
##签约邀请
@ -152,6 +154,8 @@ template_appoint_failed=tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s
#template_appoint_success=-vU5x2tGyk1zUngBrEqMfnFqqMa6M8J98w8k5MCSUYM
##预约取消
#template_appoint_failed=r-bVEKgXVyl8O96saoJXlLd7DX1zW7fXA4a0PZHxiQM
##缴费提醒
#template_expenses_remind=r-bVEKgXVyl8O96saoJXlLd7DX1zW7fXA4a0PZHxiQM
#----------------演示环境(健康之路i健康)-----------------#
##签约邀请
@ -170,6 +174,8 @@ template_appoint_failed=tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s
#template_appoint_success=6B2bhbs9c0pCSK2bvBWmr7fLDo0KAVpKH2YcxSv-dQ4
##预约取消
#template_appoint_failed=zHeo9QCfY-k1FHtOePK97R1N2uwD4mZjET1ZUy02lu0
##缴费提醒
#template_expenses_remind=r-bVEKgXVyl8O96saoJXlLd7DX1zW7fXA4a0PZHxiQM
# 预约配置参数
guahao_url = http://www.xmsmjk.com/UrpNetService/ReservationNet.asmx