소스 검색

微信模板添加家庭成员改造

trick9191 8 년 전
부모
커밋
a964826601

+ 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;
    }

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

@ -2,20 +2,20 @@ 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;
@ -48,6 +48,8 @@ public class FamilyMemberService extends BaseService {
    FamilyContractService contractService;
    @Autowired
    private AccessTokenService accessTokenService;
    @Autowired
    private PatientFamilyTempDao patientFamilyTempDao;
    @Autowired
    JdbcTemplate jdbcTemplate;
@ -498,11 +500,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 +512,44 @@ public class FamilyMemberService extends BaseService {
        //1.判断微信过滤
        //判断是否绑定微信,如果版绑定了微信,将状态改变为 1
        if(sus.equals("1")){
        Patient p = patientDao.findByCode(menber);
        if(StringUtils.isNotBlank(p.getOpenid())){
            String sus = getIsSus(p.getOpenid());
            if (sus.equals("1")) {
                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 +586,221 @@ 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
     */
    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
     */
    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;
    }
    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);
    }
    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;
    }
    public int sendWXTemp(String patient, String member, String access_token, String openid,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, openid, 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);
        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;
        }
    }
}

+ 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);

+ 121 - 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,122 @@ 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(String member, String access_token, String openid,int relation){
        try {
            int result = familyMemberService.sendWXTemp(getUID(),member,getAccessToken(),getOpenidByCode(member),relation);
            if(result==-1){
                return error(-1, "居民信息查询失败");
            }else if(result==-2){
                return error(-1, "该成员未注册");
            }else {
                return write(200, "发送成功");
            }
        } catch (Exception e) {
            return error(-1, "发送失败");
        }
    }
}

+ 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, "查询失败");
        }
    }

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

@ -0,0 +1,73 @@
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
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;
    /**
     * 先按照家庭关系“父亲→母亲→老公→老婆→儿子→女儿→其他”的顺序,获取openid
     * @param code 推送人
     * @return
     */
    public String 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");
        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())){
                            return p.getOpenid();
                        }
                    }
                }
            }
        }
        //查询为关系为其他的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())){
                        return p.getOpenid();
                    }
                }
            }
        }
        return null;
    }
}