ソースを参照

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

8 年 前
コミット
9f457ca3bf
17 ファイル変更957 行追加88 行削除
  1. 3 3
      patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/PatientFamilyTemp.java
  2. 49 5
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/account/DoctorInfoService.java
  3. 250 33
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/family/FamilyMemberService.java
  4. 24 4
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthGuidanceService.java
  5. 104 10
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  6. 20 2
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/PatientRemindService.java
  7. 23 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/survey/ManagerQuestionnaireService.java
  8. 23 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java
  9. 19 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java
  10. 19 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultPublicController.java
  11. 25 4
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/health/DoctorHealthEduArticleController.java
  12. 23 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/survey/ManagerQuestionnaireController.java
  13. 18 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/booking/PatientBookingController.java
  14. 127 7
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/family/FamilyMemberController.java
  15. 14 12
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java
  16. 53 3
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/BookingController.java
  17. 163 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/wechat/util/WeiXinOpenIdUtils.java

+ 3 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/PatientFamilyTemp.java

@ -22,7 +22,7 @@ public class PatientFamilyTemp extends IdEntity {
    //患者家人code
    private String familyMember;
    //患者家庭关系
    private String familyRelation;
    private int familyRelation;
    //添加时间
    private Date czrq;
    //状态标识
@ -61,11 +61,11 @@ public class PatientFamilyTemp extends IdEntity {
        this.familyMember = familyMember;
    }
    public String getFamilyRelation() {
    public int getFamilyRelation() {
        return familyRelation;
    }
    public void setFamilyRelation(String familyRelation) {
    public void setFamilyRelation(int familyRelation) {
        this.familyRelation = familyRelation;
    }

+ 49 - 5
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/account/DoctorInfoService.java

@ -38,6 +38,7 @@ import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.ImUtill;
import com.yihu.wlyy.util.MD5;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -107,6 +108,8 @@ public class DoctorInfoService extends BaseService {
    protected OperatorLogDao operatorLogDao;
    @Autowired
    private DoctorWorkTimeService doctorWorkTimeService;
    @Autowired
    private WeiXinOpenIdUtils weiXinOpenIdUtils;
    /**
     * 获取医生的签约病人
@ -875,7 +878,23 @@ public class DoctorInfoService extends BaseService {
                data.put("remark", newD.getName() + "医生与" + signFamily.getDoctorName() + "医生一道,为您提供优质健康服务");
            }
        }
        PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), data);
        //判断是否判定openId,有没有发则查找家人发送
        if(StringUtils.isNotBlank(p.getOpenid())){
            PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), data);
        }else{
            JSONObject json  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
            Patient member = (Patient) json.get("member");
            if(StringUtils.isNotBlank(member.getOpenid())){
                String first = (String) data.get("first");
                data.remove("first");
                data.put("first",weiXinOpenIdUtils.getTitleMes(p,json.getInt("relation"),member.getName())+first);
                PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, member.getOpenid(), member.getName(), data);
            }
        }
    }
    @Transactional
@ -973,8 +992,20 @@ public class DoctorInfoService extends BaseService {
        } else {
            data.put("remark", newD.getName() + "医生与" + signFamily.getDoctorName() + "医生一道,为您提供优质健康服务");
        }
        PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), data);
        if(StringUtils.isNotBlank(p.getOpenid())){
            PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), data);
        }else{
            JSONObject json = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
            Patient member = (Patient)json.get("member");
            if(StringUtils.isNotBlank(member.getOpenid())){
                String first = (String) data.get("first");
                data.remove("first");
                data.put("first",weiXinOpenIdUtils.getTitleMes(p,json.getInt("relation"),member.getName())+first);
                PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, member.getOpenid(), member.getName(), data);
            }
        }
        return 1;
    }
@ -1154,8 +1185,6 @@ public class DoctorInfoService extends BaseService {
        data.put("toUser", patient);
        data.put("doctor", newD.getCode());
        data.put("doctorName", newD.getName());
        data.put("first", p.getName() + ",您好!因签约团队内分工调整,您的责任医生有变动," + oldDoctorName +
                "医生无法继续为您服务,具体变动如下:");
        data.put("keyword3", "家庭医生");
        data.put("keyword2", DateUtil.dateToStrNoSecond(new Date()));
        data.put("keyword1", newD.getName());
@ -1164,6 +1193,21 @@ public class DoctorInfoService extends BaseService {
        } else {
            data.put("remark", newD.getName() + "医生与" + signFamily.getDoctorHealthName() + "医生一道,为您提供优质健康服务");
        }
        PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), data);
        if(StringUtils.isNotBlank(p.getOpenid())){
            data.put("first", p.getName() + ",您好!因签约团队内分工调整,您的责任医生有变动," + oldDoctorName +
                    "医生无法继续为您服务,具体变动如下:");
            PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), data);
        }else{
            //如果自己没有绑定,则发给家人
            JSONObject json = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
            Patient member = (Patient)json.get("member");
            if(StringUtils.isNotBlank(member.getOpenid())){
                data.put("first", weiXinOpenIdUtils.getTitleMes(p,(int)json.get("relation"),member.getName())+p.getName() + ",您好!因签约团队内分工调整,您的责任医生有变动," + oldDoctorName +
                        "医生无法继续为您服务,具体变动如下:");
                PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, member.getOpenid(), member.getName(), data);
            }
        }
    }
}

+ 250 - 33
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/family/FamilyMemberService.java

@ -2,26 +2,27 @@ package com.yihu.wlyy.service.app.family;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.PatientFamilyMember;
import com.yihu.wlyy.entity.patient.PatientFamilyTemp;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.invitation.PatientInvitationLog;
import com.yihu.wlyy.entity.security.AccessToken;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.PatientFamilyMemberDao;
import com.yihu.wlyy.repository.patient.PatientFamilyTempDao;
import com.yihu.wlyy.repository.patient.PatientInvitationLogDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.service.common.SMSService;
import com.yihu.wlyy.service.common.account.AccessTokenService;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.IdCardUtil;
import com.yihu.wlyy.util.MD5;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.*;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.Date;
@ -48,6 +49,8 @@ public class FamilyMemberService extends BaseService {
    FamilyContractService contractService;
    @Autowired
    private AccessTokenService accessTokenService;
    @Autowired
    private PatientFamilyTempDao patientFamilyTempDao;
    @Autowired
    JdbcTemplate jdbcTemplate;
@ -498,11 +501,10 @@ public class FamilyMemberService extends BaseService {
    /**
     * 验证添加的家庭成员
     *
     * @param code 用于查询openId
     * @param menber 预绑定成员
     * @return 0未绑定微信,1仅绑定微信,2仅绑定手机,3手机微信都绑定
     */
    public JSONObject checkFamilyMember(String code, String menber,String sus) throws Exception {
    public JSONObject checkFamilyMember(String menber) throws Exception {
        JSONObject r = new JSONObject();
@ -511,43 +513,46 @@ public class FamilyMemberService extends BaseService {
        //1.判断微信过滤
        //判断是否绑定微信,如果版绑定了微信,将状态改变为 1
        if(sus.equals("1")){
                result = 1;
        }
        Patient p = patientDao.findByCode(menber);
        if (StringUtils.isNotBlank(p.getOpenid())) {
            String sus = getIsSus(p.getOpenid());
            if(StringUtils.isNotBlank(sus)){
                if ("1".equals(sus)) {
                    result = 1;
                }
            }
        }
        //2.判断手机过滤
        //判断是否绑定了手机
        Patient p = patientDao.findByCode(menber);
        if(StringUtils.isNoneBlank(p.getMobile())){
        if (StringUtils.isNoneBlank(p.getMobile())) {
            //如果用户绑定了微信,将状态更改为4
            if(result == 1){
            if (result == 1) {
                result = 3;
            //如果用户未绑定微信,将状态更改为2
            }else if(result == 0){
                result = 2 ;
                //如果用户未绑定微信,将状态更改为2
            } else if (result == 0) {
                result = 2;
            }
        }
        //返回过滤后的状态
        r.put("state",result);
        if(result==0){
            r.put("mes","未绑定微信和手机");
        }else if(result==1){
            r.put("mes","仅绑定微信");
        }else if(result==2){
            r.put("mes","仅绑定手机");
        }else if(result==3){
            r.put("mes","手机和微信皆绑定");
        r.put("state", result);
        if (result == 0) {
            r.put("mes", "未绑定微信和手机");
        } else if (result == 1) {
            r.put("mes", "仅绑定微信");
        } else if (result == 2) {
            r.put("mes", "仅绑定手机");
        } else if (result == 3) {
            r.put("mes", "手机和微信皆绑定");
        }
      return r;
        return r;
    }
    /**
     * 获取微信的access_token
     *
@ -584,18 +589,230 @@ public class FamilyMemberService extends BaseService {
    /**
     * 查询所有待处理列表
     *
     * @param code
     * @return
     */
    public JSONObject getFamilyMesList(String code){
    public JSONObject getFamilyMesList(String code) {
        JSONObject result = new JSONObject();
        List<Map<String,Object>> list = jdbcTemplate.queryForList(getFamilyMesListSql(code));
        result.put("mes",list);
        List<Map<String, Object>> list = jdbcTemplate.queryForList(getFamilyMesListSql(code));
        result.put("mes", list);
        return result;
    }
    public String getFamilyMesListSql(String code){
        StringBuffer sql = new StringBuffer("SELECT t.*,p.idcard,p.mobile FROM wlyy_patient_family_temp t,wlyy_patient p WHERE t.patient = p.code AND t.dealer ="+code);
    public String getFamilyMesListSql(String code) {
        StringBuffer sql = new StringBuffer("SELECT t.*,p.idcard,p.mobile FROM wlyy_patient_family_temp t,wlyy_patient p WHERE t.patient = p.code AND t.dealer ='" + code+"'");
        return sql.toString();
    }
    /**
     * 通过用户名密码添加
     *
     * @param patient
     * @param member
     * @param password
     * @param relation
     * @return
     * @throws Exception
     */
    @Transactional
    public int addMemberByPw(String patient, String member, String password, int relation) throws Exception {
        if (patient.equals(member)) {
            return 0;
        }
        Patient p = patientDao.findByCode(patient);
        Patient m = patientDao.findByCode(member);
        if (p == null) {
            return -1;
        }
        // 添加的成员是否注册判断
        if (m == null) {
            return -2;
        }
        if (StringUtils.isNotEmpty(password)) {
            String loginPassword = MD5.GetMD5Code(password + m.getSalt());
            if (!loginPassword.equals(m.getPassword())) {
                return -3;
            }
        }
        return addMemberFamily(p, m, patient, member, relation);
    }
    /**
     * 通过微信模板添加
     *
     * @param id
     * @param state
     * @return
     * @throws Exception
     */
    @Transactional
    public int addMenberByWXTemp(Long id, String state) throws Exception {
        if (StringUtils.isNotBlank(state)) {
            //同意添加
            if ("1".equals(state)) {
                PatientFamilyTemp temp = patientFamilyTempDao.findOne(id);
                if (temp.getPatient().equals(temp.getFamilyMember())) {
                    return 0;
                }
                Patient p = patientDao.findByCode(temp.getPatient());
                Patient m = patientDao.findByCode(temp.getFamilyMember());
                if (p == null) {
                    return -1;
                }
                // 添加的成员是否注册判断
                if (m == null) {
                    return -2;
                }
                return addMemberFamily(p, m, temp.getPatient(), temp.getFamilyMember(), temp.getFamilyRelation());
                //不同意添加
            } else if ("2".equals(state)) {
                PatientFamilyTemp temp = patientFamilyTempDao.findOne(id);
                temp.setState("2");
                patientFamilyTempDao.save(temp);
                return 2;
            }
        }
        return -1;
    }
    @Transactional
    public int addMemberByCaptcha(String patient, String member, String captcha, int relation) throws Exception {
        if (patient.equals(member)) {
            return 0;
        }
        Patient p = patientDao.findByCode(patient);
        Patient m = patientDao.findByCode(member);
        if (p == null) {
            return -1;
        }
        // 添加的成员是否注册判断
        if (m == null) {
            return -2;
        }
        // 验证码验证
        if (StringUtils.isNotEmpty(captcha)) {
            int checkStatus = smsService.check(m.getMobile(), 10, captcha);
            if (checkStatus == -2) {
                return -6;  // 验证码过期
            } else if (checkStatus == -1) {
                return -3; // 验证码错误
            }
        }
        return addMemberFamily(p, m, patient, member, relation);
    }
    @Transactional
    public int addMemberFamily(Patient p, Patient m, String patient, String member, int relation) throws Exception {
        if (relation < 5) {
            List<PatientFamilyMember> familyMembers = memberDao.findByPatientAndFamilyRelation(patient, relation);
            if (familyMembers != null && familyMembers.size() > 0) {
                return -5;
            }
        }
        // 添加自己与对方的关系
        PatientFamilyMember fm = memberDao.findByPatientAndFamilyMember(patient, member);
        // 家庭关系已存在时,不重复添加
        if (fm != null) {
            return -4;
        } else {
            fm = new PatientFamilyMember();
            fm.setPatient(patient);
            fm.setFamilyMember(member);
        }
        fm.setFamilyRelation(relation);
        fm.setCzrq(new Date());
        // 添加对方与自己的关系
        PatientFamilyMember fmt = memberDao.findByPatientAndFamilyMember(member, patient);
        // 不存在则创建
        if (fmt == null) {
            fmt = new PatientFamilyMember();
            fmt.setPatient(member);
            fmt.setFamilyMember(patient);
        }
        // 对方与自己的关系转s
        //int relationTrans = familyRelationTrans(p, relation);
        int relationTrans = familyRelationTrans(p, relation);
        fmt.setFamilyRelation(relationTrans);
        fmt.setCzrq(new Date());
        memberDao.save(fm);
        memberDao.save(fmt);
        return 1;
    }
    @Transactional
    public int sendWXTemp(String patient, String member, String access_token, int relation) {
        Patient p = patientDao.findByCode(patient);
        Patient m = patientDao.findByCode(member);
        if (p == null) {
            return -1;
        }
        // 添加的成员是否注册判断
        if (m == null) {
            return -2;
        }
        JSONObject json = new JSONObject();
        json.put("frist", m.getName() + ",您好!" + p.getName() + "向您发起添加家人申请,添加成功后,对方可使用您的账号,为您处理各类健康服务。");
        json.put("keyword1", "添加家人申请");
        json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
        json.put("keyword3", p.getName());
        json.put("keyword4", relations.get(relation));
        json.put("remark", "点击立即处理。");
        json.put("member", member);
        //此消息为定向推送,无需家人代收
        PushMsgTask.getInstance().putWxMsg(access_token, 12, m.getOpenid(), p.getName(), json);
        PatientFamilyTemp temp = new PatientFamilyTemp();
        temp.setState("0");
        temp.setCzrq(new Date());
        temp.setDealer(member);
        temp.setPatient(patient);
        temp.setPatientName(p.getName());
        temp.setFamilyMember(member);
        temp.setFamilyRelation(relation);
        //保存消息列表
        patientFamilyTempDao.save(temp);
        return 1;
    }
    /**
     * 获取subscribe
     *
     * @param openid
     * @return
     * @throws Exception
     */
    public String getIsSus(String openid) throws Exception {
        String userInfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + getAccessToken() + "&openid=" + openid + "&lang=zh_CN";
        String params = "";
        String result = HttpUtil.sendGet(userInfo_url, params);
        JSONObject json = new JSONObject(result);
        if (json.has("subscribe")) {
            return json.get("subscribe").toString();
        } else {
            return null;
        }
    }
}

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

@ -11,6 +11,7 @@ import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -43,6 +44,8 @@ public class PatientHealthGuidanceService extends BaseService {
	SignFamilyDao signFamilyDao;
	@Autowired
	JdbcTemplate jdbcTemplate;
	@Autowired
	WeiXinOpenIdUtils weiXinOpenIdUtils;
	public JSONObject findById(Long id){
		PatientHealthGuidance guidance = patientHealthGuidanceDao.findOne(id);
@ -109,10 +112,26 @@ public class PatientHealthGuidanceService extends BaseService {
		guidance.setAdminTeamCode(signFamily.getAdminTeamId());
		guidance.setSignType(2);
		guidance = patientHealthGuidanceDao.save(guidance);
		if (guidance != null && StringUtils.isNotEmpty(patient.getOpenid())) {
			// 推送消息到微信端
			JSONObject json = new JSONObject();
		String openId = null;
		String name = null;
		JSONObject json = new JSONObject();
		//判定openId是否为空空,如果为空,查找他家人的openId
		if(StringUtils.isNotBlank(patient.getOpenid())){
			json.put("first", "健康指导提醒");
			name = patient.getName();
			openId = patient.getOpenid();
		}else{
			JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(patient.getCode());
			Patient member = (Patient)j.get("member");
			openId = member.getOpenid();
			name = member.getName();
			json.put("first", weiXinOpenIdUtils.getTitleMes(patient,j.getInt("relation"),member.getName())+"健康指导提醒");
		}
		if (guidance != null && StringUtils.isNotEmpty(openId)) {
			json.put("toUser", patient.getCode());
			json.put("id", guidance.getId());
			json.put("date", DateUtil.getStringDate());
@ -120,7 +139,8 @@ public class PatientHealthGuidanceService extends BaseService {
			json.put("doctorName", doctor.getName());
			json.put("content", "您好!医生给您发来了一份新的健康指导。");
			json.put("remark", "请点击查看");
			PushMsgTask.getInstance().putWxMsg(accessToken, 4, patient.getOpenid(), patient.getName(), json);
			// 推送消息到微信端
			PushMsgTask.getInstance().putWxMsg(accessToken, 4, openId, name, json);
		}
		return guidance;
	}

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

@ -37,6 +37,7 @@ import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.task.SignUploadTask;
import com.yihu.wlyy.util.*;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -118,6 +119,8 @@ public class FamilyContractService extends BaseService {
    private DoctorWorkTimeService doctorWorkTimeService;
    @Autowired
    private OperatorLogDao operatorLogDao;
    @Autowired
    private WeiXinOpenIdUtils weiXinOpenIdUtils;
    public SignFamily findSignFamilyByCode(String code) {
        return signFamilyDao.findByCodeAndType(code, 2);
@ -993,8 +996,22 @@ public class FamilyContractService extends BaseService {
            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);
            if(StringUtils.isNotBlank(sf.getOpenid())){
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(access_token, 1, sf.getOpenid(), sf.getName(), json);
            }else{
                JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(patient.getCode());
                Patient member = (Patient)j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    String first = (String)json.get("first");
                    json.remove("first");
                    json.put("first",weiXinOpenIdUtils.getTitleMes(patient,j.getInt("relation"),member.getName()));
                    PushMsgTask.getInstance().putWxMsg(access_token, 1, member.getOpenid(), member.getName(), json);
                }
            }
            new Thread(new SignUploadTask(sf.getCode())).start();
            JSONObject participants = new JSONObject();
            participants.put(sf.getPatient(),0);
@ -1217,8 +1234,22 @@ public class FamilyContractService extends BaseService {
            json.put("date", DateUtil.dateToStrShort(new Date()));
            json.put("content", sf.getName() + ",您好!您与 " + (StringUtils.isEmpty(sf.getDoctor()) ? sf.getDoctorHealthName() : sf.getDoctorName()) + " 医生建立家庭医生签约关系失败,请查看!");
            json.put("remark", "您好,签约家庭医生失败通知");
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 2, sf.getOpenid(), sf.getName(), json);
            if(StringUtils.isNotBlank(sf.getOpenid())){
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(access_token, 2, sf.getOpenid(), sf.getName(), json);
            }else{
                JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                Patient member = (Patient)j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                   String first = (String)json.get("first");
                   json.remove("first");
                   json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName()));
                   PushMsgTask.getInstance().putWxMsg(access_token, 2, member.getOpenid(), member.getName(), json);
                }
            }
            result.put("status", 2);
            return result;
        }
@ -1247,7 +1278,20 @@ public class FamilyContractService extends BaseService {
            json.put("content", content);
            json.put("remark", ""); //您好,您成功签约家庭医生
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 1, sf.getOpenid(), sf.getName(), json);
            if(StringUtils.isNotBlank(sf.getOpenid())){
                PushMsgTask.getInstance().putWxMsg(access_token, 1, sf.getOpenid(), sf.getName(), json);
            }else{
                JSONObject j =  weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                Patient member = (Patient)j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    String first = (String)json.get("first");
                    json.remove("first");
                    json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName()));
                    PushMsgTask.getInstance().putWxMsg(access_token, 1, member.getOpenid(), member.getName(), json);
                }
            }
            new Thread(new SignUploadTask(sf.getCode())).start();
            JSONObject participants = new JSONObject();
            participants.put(sf.getPatient(),0);
@ -1320,8 +1364,23 @@ public class FamilyContractService extends BaseService {
            json.put("doctorName", sf.getDoctorName());
            json.put("orgName", sf.getHospitalName());
            json.put("remark", sf.getName() + ",您好!您的签约医生已同意您的解约申请,解约已生效。");
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 5, sf.getOpenid(), sf.getName(), json);
            if(StringUtils.isNotBlank(sf.getOpenid())){
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(access_token, 5, sf.getOpenid(), sf.getName(), json);
            }else{
                JSONObject j =  weiXinOpenIdUtils.getFamilyOpenId(patient);
                Patient member = (Patient)j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    String first = (String)json.get("first");
                    json.remove("first");
                    Patient p = patientDao.findByCode(patient);
                    json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName()));
                    PushMsgTask.getInstance().putWxMsg(access_token, 5, member.getOpenid(), member.getName(), json);
                }
            }
        } else {
            // 更新状态为正常
            signFamilyDao.refuseSurrender(patient);
@ -1334,8 +1393,23 @@ public class FamilyContractService extends BaseService {
            json.put("doctorName", sf.getDoctorName());
            json.put("orgName", sf.getHospitalName());
            json.put("remark", sf.getName() + ",您好!您的签约医生拒绝您的解约申请,解约失败。");
            // 添加到发送队列
            PushMsgTask.getInstance().putWxMsg(access_token, 5, sf.getOpenid(), sf.getName(), json);
            if(StringUtils.isNotBlank(sf.getOpenid())){
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(access_token, 5, sf.getOpenid(), sf.getName(), json);
            }else{
                JSONObject j =  weiXinOpenIdUtils.getFamilyOpenId(patient);
                Patient member = (Patient)j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    String first = (String)json.get("first");
                    json.remove("first");
                    Patient p = patientDao.findByCode(patient);
                    json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName()));
                    PushMsgTask.getInstance().putWxMsg(access_token, 5, member.getOpenid(), member.getName(), json);
                }
            }
        }
        return 1;
    }
@ -1940,7 +2014,27 @@ public class FamilyContractService extends BaseService {
        result.put("msg", "更新成功");
        for (JSONObject msg : wxMessages) {
            PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), msg);
            if(StringUtils.isNotBlank(p.getOpenid())){
                PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, p.getOpenid(), p.getName(), msg);
            }else{
                //如果自己没有绑定,则发给家人
                JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                Patient member = (Patient)j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    String first = (String)msg.get("first");
                    msg.remove("first");
                    try{
                        msg.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName()));
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    PushMsgTask.getInstance().putWxMsg(accessTokenUtils.getAccessToken(), 10, member.getOpenid(), member.getName(), msg);
                }
            }
        }
        OperatorLog operatorLog = new OperatorLog();
        operatorLog.setCreateTime(new Date());

+ 20 - 2
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/PatientRemindService.java

@ -16,6 +16,7 @@ import com.yihu.wlyy.task.RemindFocusWechatTask;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
@ -55,6 +56,8 @@ public class PatientRemindService extends BaseService {
    JdbcTemplate jdbcTemplate;
    @Autowired
    ConsultService consultService;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    /**
     * 缴费提醒
@ -220,8 +223,23 @@ public class PatientRemindService extends BaseService {
                json.put("date", DateUtil.dateToStrShort(new Date()));
                json.put("content", p.getName() + ",您好!为完成家庭医生签约,尽早为您提供家庭医生服务,请尽快到" + hos.getName() + "(地址:" + hos.getAddress() + ")缴费");
                json.put("remark", "");
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(tokenUtils.getAccessToken(), 8, p.getOpenid(), p.getName(), json);
                //判断是否判定openId,有没有发则查找家人发送
                if(StringUtils.isNotBlank(p.getOpenid())){
                    // 添加到发送队列
                    PushMsgTask.getInstance().putWxMsg(tokenUtils.getAccessToken(), 8, p.getOpenid(), p.getName(), json);
                }else{
                    JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                    Patient member = (Patient) j.get("member");
                    if(StringUtils.isNotBlank(member.getOpenid())){
                        String first = (String) json.get("first");
                        json.remove("first");
                        json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                        PushMsgTask.getInstance().putWxMsg(tokenUtils.getAccessToken(), 8, member.getOpenid(), member.getName(), json);
                    }
                }
                wFlag = true;
            }
            //发送IM

+ 23 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/survey/ManagerQuestionnaireService.java

@ -16,6 +16,7 @@ import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.web.doctor.survey.ManagerQuestionnaireController;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import com.yihu.wlyy.wechat.util.WeiXinTempMsgSendUtils;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
@ -86,6 +87,9 @@ public class ManagerQuestionnaireService extends BaseService {
    @Autowired
    private PatientDao patientDao;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    public String createSurvey(String doctor, JSONObject jsonStr, String accessToken) throws Exception {
        System.out.println("=============>" + jsonStr);
@ -287,7 +291,25 @@ public class ManagerQuestionnaireService extends BaseService {
                json.put("toUser", c);
                json.put("survey_id",surveyCode );
                json.put("first", name + ",您好!为了给您提供更好的家庭医生健康服务,现有一份问卷需要您填写。");
                PushMsgTask.getInstance().putWxMsg(accessToken, 11, openId, name, json);
                //判断是否判定openId,有没有发则查找家人发送
                if(StringUtils.isNotBlank(p.getOpenid())){
                    // 添加到发送队列
                    PushMsgTask.getInstance().putWxMsg(accessToken, 11, openId, name, json);
                }else{
                    JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getOpenid());
                    Patient member = (Patient) j.get("member");
                    if(StringUtils.isNotBlank(member.getOpenid())){
                        String first = (String) json.get("first");
                        json.remove("first");
                        try{
                            json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                        PushMsgTask.getInstance().putWxMsg(accessToken, 11, member.getOpenid(), member.getName(), json);
                    }
                }
            });
        }
//       =====================================================

+ 23 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -455,6 +455,29 @@ public class PushMsgTask {
                logger.info("type=====>openId " + openid);
            }else if(type == 12){
                temp.setUrl(url + "/html/jtgx/html/appcation-msg-list.html?openid=" + openid+ "&member=" + json.getString("member"));
                temp.setTemplate_id(SystemConf.getInstance().getSystemProperties().getProperty("template_doctor_survey"));
                WechatTemplateData  keyword1= new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData  keyword2= new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData  keyword3= new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
                WechatTemplateData  keyword4= new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("keyword4"));
                m.put("keyword4", keyword4);
            }
            temp.setData(m);

+ 19 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java

@ -15,6 +15,7 @@ import com.yihu.wlyy.service.app.family.FamilyService;
import com.yihu.wlyy.service.common.login.LoginLogService;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.MD5;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
@ -60,6 +61,8 @@ public class WechatController extends WeixinBaseController {
    private LoginLogService loginLogService;
    @Autowired
    private FamilyMemberService familyMemberService;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    /**
     * 患者注册-验证手机号
@ -597,7 +600,22 @@ public class WechatController extends WeixinBaseController {
            json.put("date", "2016-06-08");
            json.put("doctorName", "徐小鹏");
            json.put("orgName", "厦门第一医院");
            PushMsgTask.getInstance().putWxMsg(getAccessToken(), 5, patient.getOpenid(), patient.getName(), json);
            //判断是否判定openId,有没有发则查找家人发送
            if(StringUtils.isNotBlank(patient.getOpenid())){
                // 添加到发送队列
                PushMsgTask.getInstance().putWxMsg(getAccessToken(), 5, patient.getOpenid(), patient.getName(), json);
            }else{
                JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(patient.getCode());
                Patient member = (Patient) j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    String first = (String) json.get("first");
                    json.remove("first");
                    json.put("first",weiXinOpenIdUtils.getTitleMes(patient,j.getInt("relation"),member.getName())+first);
                    PushMsgTask.getInstance().putWxMsg(getAccessToken(),5, member.getOpenid(), member.getName(), json);
                }
            }
            return write(200, "发送成功");
        } catch (Exception e) {
            error(e);

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

@ -7,6 +7,7 @@ import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.service.app.account.DoctorInfoService;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
@ -50,6 +51,8 @@ public class DoctorConsultPublicController extends BaseController {
	@Autowired
	WeiXinAccessTokenUtils weiXinAccessTokenUtils;
	@Autowired
	WeiXinOpenIdUtils weiXinOpenIdUtils;
	/**
	 * 查询公共咨询记录
	 * @param type 查询类型:0全部,1我的回答
@ -241,7 +244,22 @@ public class DoctorConsultPublicController extends BaseController {
				json.put("doctorName", doctor.getName());
				json.put("remark", "");
				PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 3, p.getOpenid(), p.getName(), json);
				//判断是否判定openId,有没有发则查找家人发送
				if(StringUtils.isNotBlank(p.getOpenid())){
					// 添加到发送队列
					PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 3, p.getOpenid(), p.getName(), json);
				}else{
					JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
					Patient member = (Patient) j.get("member");
					if(StringUtils.isNotBlank(member.getOpenid())){
						String first = (String) json.get("first");
						json.remove("first");
						json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
						PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 3, member.getOpenid(), member.getName(), json);
					}
				}
				// 推送消息给患者
				//PushMsgTask.getInstance().put(cp.getPatient(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_PUBLIC_REPLY.P_CP_01.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_PUBLIC_REPLY.公共咨询.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_PUBLIC_REPLY.医生回复了您.name(), consult);
				return success("回复成功!");

+ 25 - 4
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/health/DoctorHealthEduArticleController.java

@ -13,6 +13,7 @@ import com.yihu.wlyy.service.app.label.SignPatientLabelInfoService;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.web.WeixinBaseController;
import com.yihu.wlyy.web.doctor.message.DoctorMessageController;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -76,6 +77,8 @@ public class DoctorHealthEduArticleController extends WeixinBaseController {
    @Autowired
    ConsultService consultService;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    /**
     * 查询
@ -402,6 +405,7 @@ public class DoctorHealthEduArticleController extends WeixinBaseController {
                        content.put("openid", patientTemp.getOpenid());
                        content.put("name", patientTemp.getName());
                        content.put("json", json);
                        content.put("code",patientTemp.getCode());
                        msgs.put(patientTemp.getCode(), content);
                    }
                }
@ -412,11 +416,28 @@ public class DoctorHealthEduArticleController extends WeixinBaseController {
                return error(-1, "发送失败!");
            } else {
                for (String key : msgs.keySet()) {
                    Map<String, Object> map = msgs.get(key);
                    PushMsgTask.getInstance().putWxMsg(getAccessToken(), 9,
                            map.get("openid") == null ? "" : map.get("openid").toString(),
                            map.get("name") == null ? "" : map.get("name").toString(),
                            (JSONObject) map.get("json"));
                    String openid = (String)map.get("openid");
                    if(StringUtils.isNotBlank(openid)){
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 9,
                                map.get("openid") == null ? "" : map.get("openid").toString(),
                                map.get("name") == null ? "" : map.get("name").toString(),
                                (JSONObject) map.get("json"));
                    }else{
                        JSONObject j = weiXinOpenIdUtils.getFamilyOpenId((String)map.get("code"));
                        Patient p = patientService.findByCode((String)map.get("code"));
                        Patient member = (Patient)j.get("member");
                        JSONObject data = (JSONObject) map.get("json");
                        String first = (String)data.get("first");
                        data.remove("first");
                        data.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName()));
                        if(StringUtils.isNotBlank(member.getOpenid())){
                            PushMsgTask.getInstance().putWxMsg(getAccessToken(), 9, member.getOpenid(), member.getName(), data);
                        }
                    }
                    JSONObject json = (JSONObject) map.get("json");
                }

+ 23 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/survey/ManagerQuestionnaireController.java

@ -13,6 +13,7 @@ import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.web.BaseController;
import com.yihu.wlyy.web.WeixinBaseController;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -47,6 +48,8 @@ public class ManagerQuestionnaireController extends WeixinBaseController {
    private PatientDao patientDao;
    @Autowired
    private SurveyUserDao surveyUserDao;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    /**
     * 获取问卷列表
@ -456,7 +459,26 @@ public class ManagerQuestionnaireController extends WeixinBaseController {
                json.put("toUser", c);
                json.put("survey_id", code);
                json.put("first", name + ",您好!为了给您提供更好的家庭医生健康服务,现有一份问卷需要您填写。");
                PushMsgTask.getInstance().putWxMsg(accessToken, 11, openId, name, json);
                //判断是否判定openId,有没有发则查找家人发送
                if(StringUtils.isNotBlank(p.getOpenid())){
                    // 添加到发送队列
                    PushMsgTask.getInstance().putWxMsg(accessToken, 11, openId, name, json);
                }else{
                    JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                    Patient member = (Patient) j.get("member");
                    if(StringUtils.isNotBlank(member.getOpenid())){
                        String first = (String) json.get("first");
                        json.remove("first");
                        try{
                            json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 11, member.getOpenid(), member.getName(), json);
                    }
                }
            });
            return write(200, "发送成功!");

+ 18 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/booking/PatientBookingController.java

@ -8,6 +8,7 @@ import com.yihu.wlyy.service.third.guahao.GuahaoXMService;
import com.yihu.wlyy.service.third.guahao.GuahaoYihuService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.web.WeixinBaseController;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -36,6 +37,8 @@ public class PatientBookingController extends WeixinBaseController{
    private PatientReservationService patientReservationService;
    @Autowired
    private PatientService patientService;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    @RequestMapping(value = "CancelOrder", method = RequestMethod.POST)
@ -72,7 +75,21 @@ public class PatientBookingController extends WeixinBaseController{
                    json.put("doctorName", obj.getDoctorName());
                    json.put("orgName", obj.getOrgName());
                    json.put("remark", obj.getName() + ",您好!\n您已取消了" + obj.getStartTime() + "的挂号!");
                    PushMsgTask.getInstance().putWxMsg(getAccessToken(), 7, p.getOpenid(), obj.getName(), json);
                    //判断是否判定openId,有没有发则查找家人发送
                    if(StringUtils.isNotBlank(p.getOpenid())){
                        // 添加到发送队列
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 7, p.getOpenid(), obj.getName(), json);
                    }else{
                        JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                        Patient member = (Patient) j.get("member");
                        if(StringUtils.isNotBlank(member.getOpenid())){
                            String first = (String) json.get("first");
                            json.remove("first");
                            json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                            PushMsgTask.getInstance().putWxMsg(getAccessToken(), 7, member.getOpenid(), member.getName(), json);
                        }
                    }
                }
                return write(200, "取消挂号单成功!");
            } else {

+ 127 - 7
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/family/FamilyMemberController.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.web.patient.family;
import com.yihu.wlyy.service.app.family.FamilyMemberService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.web.WeixinBaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -182,16 +183,14 @@ public class FamilyMemberController extends WeixinBaseController {
    /**
     * 验证家庭成员微信及手机绑定情况
     * @param code 由于查找openid
     * @param memberCode
     * @return
     */
    @RequestMapping(value = "/check_member", method = RequestMethod.GET)
    @ApiOperation(value = "验证家庭成员微信及手机绑定情况")
    public String checkFamilyMember(@RequestParam("code") String code,
                                     @RequestParam("memberCode")String memberCode){
    public String checkFamilyMember(@RequestParam("memberCode")String memberCode){
        try {
            JSONObject result = familyMemberService.checkFamilyMember(code,memberCode,getSubscribeByCode(code));
            JSONObject result = familyMemberService.checkFamilyMember(memberCode);
            return write(200, "验证成功", "data", result);
        }catch (Exception e){
            return error(-1, "验证失败");
@ -203,7 +202,7 @@ public class FamilyMemberController extends WeixinBaseController {
     * @param code 业务主键
     * @return
     */
    @RequestMapping(value = "/getFamilyMesList", method = RequestMethod.GET)
    @RequestMapping(value = "/getFamilyMesList", method = RequestMethod.POST)
    @ApiOperation(value = "获取用户消息列表")
    public String getFamilyMesList(@RequestParam("code") String code){
        try {
@ -214,7 +213,128 @@ public class FamilyMemberController extends WeixinBaseController {
        }
    }
    public String addMemberByPw(){
        return "";
    @RequestMapping(value = "/addMemberByPw", method = RequestMethod.POST)
    @ApiOperation(value = "通过登录验证新增家庭成员")
    public String addMemberByPw(@RequestParam("member") String member,
                                @RequestParam("password")String password,
                                @RequestParam("relation")int relation){
        try {
            if (StringUtils.isEmpty(member)) {
                return error(-1, "添加成员不能为空");
            }
            if (relation < 0 || relation > 6) {
                return error(-1, "家庭关系无效");
            }
            int result = familyMemberService.addMemberByPw(getUID(),member,password,relation);
            if(result==0){
                return error(-1, "不能添加自己");
            }else if(result==-1){
                return error(-1, "居民信息查询失败");
            }else if(result==-2){
                return error(-1, "该成员未注册");
            }else if(result==-3){
                return error(-1, "密码错误");
            }else if (result == -4) {
                return error(-1, "该家庭成员已存在");
            }else if(result==-5){
                return error(-1, "该家庭关系已存在成员");
            } else {
                return write(200, "添加成功");
            }
        } catch (Exception e) {
            return error(-1, "添加失败");
        }
    }
    @RequestMapping(value = "/addMemberByCaptcha", method = RequestMethod.POST)
    @ApiOperation(value = "通过手机验证码新增家庭成员")
    public String addMemberByCaptcha(@RequestParam("member") String member,
                                     @RequestParam("captcha") String captcha,
                                     @RequestParam("relation") int relation){
        try {
            if (StringUtils.isEmpty(member)) {
                return error(-1, "添加成员不能为空");
            }
            if (StringUtils.isEmpty(captcha)) {
                return error(-1, "验证码不能为空");
            }
            if (relation < 0 || relation > 6) {
                return error(-1, "家庭关系无效");
            }
            int result = familyMemberService.addMemberByCaptcha(getUID(),member,captcha,relation);
            if(result==0){
                return error(-1, "不能添加自己");
            }else if(result==-1){
                return error(-1, "居民信息查询失败");
            }else if(result==-2){
                return error(-1, "该成员未注册");
            }else if(result==-3){
                return error(-1, "验证码错误");
            }else if (result == -4) {
                return error(-1, "该家庭成员已存在");
            }else if(result==-5){
                return error(-1, "该家庭关系已存在成员");
            }else if(result==-6){
                return error(-1, "验证码已过期,请重新获取验证码");
            } else {
                return write(200, "添加成功");
            }
        } catch (Exception e) {
            return error(-1, "添加失败");
        }
    }
    @RequestMapping(value = "/addMenberByWXTemp", method = RequestMethod.POST)
    @ApiOperation(value = "通过微信模板新增家庭成员")
    public String addMenberByWXTemp(@RequestParam("id") Long id,
                                    @RequestParam("state") String state){
        try {
            int result = familyMemberService.addMenberByWXTemp(id,state);
            if(result==0){
                return error(-1, "不能添加自己");
            }else if(result==-1){
                return error(-1, "居民信息查询失败");
            }else if(result==-2){
                return error(-1, "该成员未注册");
            }else if (result == -4) {
                return error(-1, "该家庭成员已存在");
            }else if(result==-5){
                return error(-1, "该家庭关系已存在成员");
            } else {
                return write(200, "添加成功");
            }
        } catch (Exception e) {
            return error(-1, "添加失败");
        }
    }
    @RequestMapping(value = "/sendWXTemp", method = RequestMethod.POST)
    @ApiOperation(value = "发送微信模板")
    public String sendWXTemp(@RequestParam("member")String member,@RequestParam("relation")int relation){
        try {
            int result = familyMemberService.sendWXTemp(getUID(),member,getAccessToken(),relation);
            if(result==-1){
                return error(-1, "居民信息查询失败");
            }else if(result==-2){
                return error(-1, "该成员未注册");
            }else {
                return write(200, "发送成功");
            }
        } catch (Exception e) {
            return error(-1, "发送失败");
        }
    }
    @RequestMapping(value = "/getOpenIdByCode", method = RequestMethod.POST)
    @ApiOperation(value = "获取openId")
    public String getOpenId(@RequestParam("code")String code){
        String openId = getOpenidByCode(code);
        return write(200, openId);
    }
}

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

@ -236,7 +236,7 @@ public class StatisticsController extends BaseController {
            JSONArray jsonArray1 = statisticsService.getLowLevelTotalDetail(endDate, area, level, indexes[0], sort, lowLevel);
            jsonArrays.add(jsonArray1);
            JSONArray jsonArray2= statisticsService.getLowLevelIncrementDetail(endDate, endDate, area, level, indexes[1], sort, lowLevel);
            JSONArray jsonArray2 = statisticsService.getLowLevelIncrementDetail(endDate, endDate, area, level, indexes[1], sort, lowLevel);
            jsonArrays.add(jsonArray2);
            //遍历合并2个指标中key值一样的
@ -260,7 +260,7 @@ public class StatisticsController extends BaseController {
                    }
                }
            }
            result.put("index_"+indexes[0], returnJa);
            result.put("index_" + indexes[0], returnJa);
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
@ -429,9 +429,9 @@ public class StatisticsController extends BaseController {
                for (String idx : indexes) {
                    if (idx.equals("18") || index.equals("19")) {
                        result.put("index_" + idx, statisticsAllService.getLowLevelTotalSpecial(date, area, level, idx, sort, lowLevel));
                    }else if(idx.equals("1") || index.equals("21")){
                    } else if (idx.equals("1") || index.equals("21")) {
                        result.put("index_" + idx, statisticsAllService.getLowLevelTotal2(date, area, level, idx, sort, lowLevel));
                    }else {
                    } else {
                        result.put("index_" + idx, statisticsAllService.getLowLevelTotal(date, area, level, idx, sort, lowLevel));
                    }
                }
@ -537,17 +537,18 @@ public class StatisticsController extends BaseController {
     * ①回复及时率------医生首次回复24小时内比例
     * ②未回复数(数、率)----------当前未回复咨询数、以及相应比例
     * ③处理咨询回复时间分布---------全部咨询的首次回复咨询时间分布
     *
     * @param level 查询的等级,按市、区、机构
     * @param code  查询的等级对应Code
     * @param area  查询的等级对应Code
     * @return
     */
    @RequestMapping("/Consulting_Stat")
    @ResponseBody
    public String getConsultingStatistics(@RequestParam(required = true) Integer level,
                                          @RequestParam(required = true) String code){
        try{
            return write(200, "查询成功", "data", statisticsService.getConsultingStatistics(level,code));
        }catch (Exception e){
                                          @RequestParam(required = true) String area) {
        try {
            return write(200, "查询成功", "data", statisticsService.getConsultingStatistics(level, area));
        } catch (Exception e) {
            return error(-1, "查询失败");
        }
    }
@ -556,14 +557,15 @@ public class StatisticsController extends BaseController {
     * 获取绑定率
     * 1、选定绑定微信指标,下面排行内,在绑定微信数后新增:"绑定率:xx.22%"
     * 2、绑定率=绑定数/已签约数
     *
     * @return
     */
    @RequestMapping("/bindingRate_stat")
    @ResponseBody
    public String getBindingRate(){
        try{
    public String getBindingRate() {
        try {
            return write(200, "查询成功", "data", statisticsService.getBindingRate());
        }catch (Exception e){
        } catch (Exception e) {
            return error(-1, "查询失败");
        }
    }

+ 53 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/BookingController.java

@ -18,6 +18,7 @@ import com.yihu.wlyy.util.HttpClientUtil;
import com.yihu.wlyy.util.NetworkUtil;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.web.WeixinBaseController;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -63,6 +64,9 @@ public class BookingController extends WeixinBaseController {
    @Autowired
    private SMSDao smsDao;
    @Autowired
    WeiXinOpenIdUtils weiXinOpenIdUtils;
    /**
     * 根据城市编码获取相应挂号服务
     *
@ -304,7 +308,23 @@ public class BookingController extends WeixinBaseController {
                    json.put("doctorName", obj.getDoctorName());
                    json.put("deptName", obj.getDeptName());
                    json.put("remark", p.getName() + ",您好!" + msg);
                    PushMsgTask.getInstance().putWxMsg(getAccessToken(), 6, p.getOpenid(), p.getName(), json);
                    //判断是否判定openId,有没有发则查找家人发送
                    if(StringUtils.isNotBlank(p.getOpenid())){
                        // 添加到发送队列
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 6, p.getOpenid(), p.getName(), json);
                    }else{
                        JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                        Patient member = (Patient) j.get("member");
                        if(StringUtils.isNotBlank(member.getOpenid())){
                            String first = (String) json.get("first");
                            json.remove("first");
                            json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                            PushMsgTask.getInstance().putWxMsg(getAccessToken(), 6, member.getOpenid(), member.getName(), json);
                        }
                    }
                }
                //发送短信小时
                // 调用总部发送信息的接口
@ -364,7 +384,21 @@ public class BookingController extends WeixinBaseController {
                    json.put("doctorName", obj.getDoctorName());
                    json.put("orgName", obj.getOrgName());
                    json.put("remark", obj.getName() + ",您好!\n您已取消了" + obj.getStartTime() + "的挂号!");
                    PushMsgTask.getInstance().putWxMsg(getAccessToken(), 7, p.getOpenid(), obj.getName(), json);
                    //判断是否判定openId,有没有发则查找家人发送
                    if(StringUtils.isNotBlank(p.getOpenid())){
                        // 添加到发送队列
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 7, p.getOpenid(), obj.getName(), json);
                    }else{
                        JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                        Patient member = (Patient) j.get("member");
                        if(StringUtils.isNotBlank(member.getOpenid())){
                            String first = (String) json.get("first");
                            json.remove("first");
                            json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                            PushMsgTask.getInstance().putWxMsg(getAccessToken(), 7, member.getOpenid(), member.getName(), json);
                        }
                    }
                }
                return write(200, "取消挂号单成功!");
@ -477,7 +511,23 @@ public class BookingController extends WeixinBaseController {
                        json.put("doctorName", obj.getDeptName());
                        json.put("deptName", obj.getDeptName());
                        json.put("remark", patientName + ",您好!\n" + msg);
                        PushMsgTask.getInstance().putWxMsg(getAccessToken(), 6, p.getOpenid(), patientName, json);
                        //判断是否判定openId,有没有发则查找家人发送
                        if(StringUtils.isNotBlank(p.getOpenid())){
                            // 添加到发送队列
                            PushMsgTask.getInstance().putWxMsg(getAccessToken(), 6, p.getOpenid(), patientName, json);
                        }else{
                            JSONObject j  = weiXinOpenIdUtils.getFamilyOpenId(p.getCode());
                            Patient member = (Patient) j.get("member");
                            if(StringUtils.isNotBlank(member.getOpenid())){
                                String first = (String) json.get("first");
                                json.remove("first");
                                json.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),member.getName())+first);
                                PushMsgTask.getInstance().putWxMsg(getAccessToken(), 6, member.getOpenid(), member.getName(), json);
                            }
                        }
                    }
                    else{
                        des +=" 微信提醒失败,患者无绑定微信!";

+ 163 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/wechat/util/WeiXinOpenIdUtils.java

@ -0,0 +1,163 @@
package com.yihu.wlyy.wechat.util;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.PatientFamilyMember;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.PatientFamilyMemberDao;
import com.yihu.wlyy.service.app.family.FamilyMemberService;
import com.yihu.wlyy.util.IdCardUtil;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Trick on 2017/4/20.
 */
@Component
public class WeiXinOpenIdUtils {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    PatientDao patientDao;
    private Map<Integer, String> relations = new HashMap<>();
    @PostConstruct
    public void init() {
        relations.put(0, "其他");
        relations.put(1, "父亲");
        relations.put(2, "母亲");
        relations.put(3, "老公");
        relations.put(4, "老婆");
        relations.put(5, "儿子");
        relations.put(6, "女儿");
        relations.put(7, "未知");
    }
    //关系翻译
    public String getRelation(int relation) {
        return relations.get(relation);
    }
    /**
     * 先按照家庭关系“父亲→母亲→老公→老婆→儿子→女儿→其他”的顺序,获取openid
     *
     * @param code 推送人
     * @return
     */
    public JSONObject getFamilyOpenId(String code) {
        /**
         * 按关系和时间排序
         */
        StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = " + code + " ORDER BY t.family_relation ASC ,t.czrq DESC");
        JSONObject result = new JSONObject();
        List<Map<String, Object>> members = jdbcTemplate.queryForList(sql.toString());
        List<Map<String, Object>> others = new ArrayList<>();
        if (members != null && members.size() > 0) {
            for (Map<String, Object> member : members) {
                if ((int) member.get("family_relation") == 0) {
                    others.add(member);
                } else {
                    String memberCode = (String) member.get("family_member");
                    if (StringUtils.isNotBlank(memberCode)) {
                        Patient p = patientDao.findByCode(memberCode);
                        if (StringUtils.isNotBlank(p.getOpenid())) {
                            result.put("member", p);
                            result.put("relation", (int) member.get("family_relation"));
                            return result;
                        }
                    }
                }
            }
        }
        //查询为关系为其他的openid
        if (others != null && others.size() > 0) {
            for (Map<String, Object> other : others) {
                String memberCode = (String) other.get("family_member");
                if (StringUtils.isNotBlank(memberCode)) {
                    Patient p = patientDao.findByCode(memberCode);
                    if (StringUtils.isNotBlank(p.getOpenid())) {
                        result.put("member", p);
                        result.put("relation", (int) other.get("family_relation"));
                        return result;
                    }
                }
            }
        }
        return null;
    }
    public String getTitleMes(Patient p, int ralation, String dealerName) throws Exception {
        return "因您的" + relations.get(familyRelationTrans(p, ralation)) + p.getName() + "未绑定微信,故请将该消息传达给" + dealerName + ":";
    }
    /**
     * 家庭关系转换
     *
     * @param patient  居民
     * @param relation 关系 1父亲 2母亲 3老公 4老婆 5儿子 6女儿 7其他
     * @return
     */
    public int familyRelationTrans(Patient patient, int relation) throws Exception {
        int relationTrans = 0;
        switch (relation) {
            case 1:
            case 2:
                if (patient.getSex() == 1) {
                    relationTrans = 5;
                } else if (patient.getSex() == 2) {
                    relationTrans = 6;
                } else {
                    relationTrans = 0;
                }
                if (relationTrans == 0) {
                    if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
                        relationTrans = 6;
                    } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
                        relationTrans = 5;
                    }
                }
                break;
            case 3:
                relationTrans = 4;
                break;
            case 4:
                relationTrans = 3;
                break;
            case 5:
            case 6:
                if (patient.getSex() == 1) {
                    relationTrans = 1;
                } else if (patient.getSex() == 2) {
                    relationTrans = 2;
                } else {
                    relationTrans = 0;
                }
                if (relationTrans == 0) {
                    if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
                        relationTrans = 2;
                    } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
                        relationTrans = 1;
                    }
                }
                break;
        }
        return relationTrans;
    }
}