|  | @ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONArray;
 | 
	
		
			
				|  |  | import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  | import com.yihu.jw.doctor.dao.BaseDoctorDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.im.ConsultDo;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.im.ConsultTeamDo;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.patient.BasePatientDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.wx.*;
 | 
	
	
		
			
				|  | @ -25,18 +24,20 @@ import com.yihu.jw.patient.dao.BasePatientDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.web.Envelop;
 | 
	
		
			
				|  |  | import com.yihu.jw.rm.base.BaseRequestMapping;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.date.DateUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.http.HttpClientUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.utils.CheckSumBuilder;
 | 
	
		
			
				|  |  | import com.yihu.jw.utils.RSAEncrypt;
 | 
	
		
			
				|  |  | import com.yihu.jw.utils.hibernate.HibenateUtils;
 | 
	
		
			
				|  |  | import com.yihu.jw.wechat.dao.BasePatientWechatDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.wechat.dao.WxPushLogDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.wechat.dao.WxTemplateDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.wechat.dao.*;
 | 
	
		
			
				|  |  | import org.apache.commons.collections.map.HashedMap;
 | 
	
		
			
				|  |  | import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | import org.apache.http.NameValuePair;
 | 
	
		
			
				|  |  | import org.apache.http.message.BasicNameValuePair;
 | 
	
		
			
				|  |  | import org.slf4j.Logger;
 | 
	
		
			
				|  |  | import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.BeanFactory;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Service;
 | 
	
	
		
			
				|  | @ -94,11 +95,15 @@ public class WxTemplateService {
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ConsultTeamOrderDao consultTeamOrderDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private OutpatientDao outpatientDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseDoctorDao doctorDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionLogService prescriptionLogService;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private WechatDao wechatDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private HttpClientUtil httpClientUtil;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private OutpatientDao outpatientDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     
 | 
	
	
		
			
				|  | @ -140,8 +145,32 @@ public class WxTemplateService {
 | 
	
		
			
				|  |  |                                 "",miniprogramUrl,"wx53f6bb4ac081d840");
 | 
	
		
			
				|  |  |                     }else{
 | 
	
		
			
				|  |  |                         WxTemplateConfigDO config = wxTemplateConfigDao.findByWechatIdAndTemplateNameAndSceneAndStatus(wechatId,"template_consult_notice","spthtx",1);
 | 
	
		
			
				|  |  |                         config.setFirst(config.getFirst().replace("key1",sender_name));
 | 
	
		
			
				|  |  |                         config.setPagepath(config.getPagepath()+""+reciver_id+"&doctorName="+sender_name+"&role=patient&roomID="+session_id+"&template=1v1&debugMode=false&cloudenv=PRO");
 | 
	
		
			
				|  |  |                         BaseDoctorDO doctorDO = doctorDao.findById(sender_id);
 | 
	
		
			
				|  |  |                         String titleName = "";
 | 
	
		
			
				|  |  |                         if (doctorDO!=null){
 | 
	
		
			
				|  |  |                             titleName = doctorDO.getJobTitleName();
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         String miniprogramUrl = "";
 | 
	
		
			
				|  |  |                         config.setFirst(config.getFirst().replace("key1",sender_name+titleName));
 | 
	
		
			
				|  |  |                         if (wechatId.equalsIgnoreCase("xm_ykyy_wx")){
 | 
	
		
			
				|  |  |                             String token = yxToken(reciver_id,reciver_name);
 | 
	
		
			
				|  |  |                             miniprogramUrl = "pages/room/yunxin?role=patient&token="+token+"&uid="+basePatientDO.getId();
 | 
	
		
			
				|  |  |                             config.setPagepath(miniprogramUrl);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         ConsultTeamDo consultDo = consultTeamOrderDao.findByConsult(session_id);
 | 
	
		
			
				|  |  |                         WlyyOutpatientDO wlyyOutpatientDO = new WlyyOutpatientDO();
 | 
	
		
			
				|  |  |                         if (consultDo!=null){
 | 
	
		
			
				|  |  |                             wlyyOutpatientDO = outpatientDao.findById(consultDo.getRelationCode());
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if (wlyyOutpatientDO!=null){
 | 
	
		
			
				|  |  |                             config.setKeyword2(config.getKeyword2()+DateUtil.dateToStrLong(wlyyOutpatientDO.getCreateTime()));
 | 
	
		
			
				|  |  |                             config.setKeyword3(config.getKeyword3()+wlyyOutpatientDO.getIcd10Name());
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         WxWechatDO wechatDO = wechatDao.findById(wechatId);
 | 
	
		
			
				|  |  |                         if (wechatDO!=null){
 | 
	
		
			
				|  |  |                             config.setAppid(wechatDO.getApplets());
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         config.setKeyword1(config.getKeyword1()+doctorDO.getName());
 | 
	
		
			
				|  |  |                         weixinMessagePushUtils.putWxMsg(wxAccessTokenService.getWxAccessTokenById(wechatId).getAccessToken(),basePatientWechatDo.getOpenid(),config);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
	
		
			
				|  | @ -155,6 +184,55 @@ public class WxTemplateService {
 | 
	
		
			
				|  |  |         return "success";
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public String yxToken(String userId,String channelName){
 | 
	
		
			
				|  |  |         WlyyHospitalSysDictDO sysDictDO = hospitalSysDictDao.findById("YXAPPKEY");
 | 
	
		
			
				|  |  |         WlyyHospitalSysDictDO hospitalSysDictDO =  hospitalSysDictDao.findById("YXAPPSECRET");
 | 
	
		
			
				|  |  |         if (sysDictDO==null){
 | 
	
		
			
				|  |  |             return  "找不到对应的key";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         String appKey = sysDictDO.getDictValue();
 | 
	
		
			
				|  |  |         String appSecret = hospitalSysDictDO.getDictValue();
 | 
	
		
			
				|  |  |         String nonce =  randomInt(10);
 | 
	
		
			
				|  |  |         String curTime = String.valueOf((new Date()).getTime() / 1000L);
 | 
	
		
			
				|  |  |         String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);//参考 计算CheckSum的java代码
 | 
	
		
			
				|  |  |         String url = "https://api.netease.im/nimserver/user/getToken.action";
 | 
	
		
			
				|  |  |         Map<String,Object> httpPost = new HashedMap();
 | 
	
		
			
				|  |  |         // 设置请求的header
 | 
	
		
			
				|  |  |         httpPost.put("AppKey", appKey);
 | 
	
		
			
				|  |  |         httpPost.put("Nonce", nonce);
 | 
	
		
			
				|  |  |         httpPost.put("CurTime", curTime);
 | 
	
		
			
				|  |  |         httpPost.put("CheckSum", checkSum);
 | 
	
		
			
				|  |  |         httpPost.put("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
 | 
	
		
			
				|  |  |         List<NameValuePair> nvps = new ArrayList<NameValuePair>();
 | 
	
		
			
				|  |  |         nvps.add(new BasicNameValuePair("uid", userId));
 | 
	
		
			
				|  |  |         nvps.add(new BasicNameValuePair("channelName",channelName));
 | 
	
		
			
				|  |  |         String response = httpClientUtil.headerPost(url,nvps,"UTF-8",httpPost);
 | 
	
		
			
				|  |  |         logger.info("返回日志"+response);
 | 
	
		
			
				|  |  |         if(StringUtils.isNoneBlank(response)){
 | 
	
		
			
				|  |  |             com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(response);
 | 
	
		
			
				|  |  |             if (jsonObject.getString("code").equalsIgnoreCase("200")){
 | 
	
		
			
				|  |  |                 return jsonObject.getString("token");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return null;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取指定长度的随机数字字符串
 | 
	
		
			
				|  |  |      * @param length
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public String randomInt(int length) {
 | 
	
		
			
				|  |  |         String str = "0123456789";
 | 
	
		
			
				|  |  |         StringBuffer buffer = new StringBuffer();
 | 
	
		
			
				|  |  |         Random random = new Random();
 | 
	
		
			
				|  |  |         for(int i = 0; i < length; ++i) {
 | 
	
		
			
				|  |  |             int pos = random.nextInt(str.length());
 | 
	
		
			
				|  |  |             buffer.append(str.charAt(pos));
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return buffer.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询HIS的01表中的审方状态,如果已审方,且未结算,则推送一条模板消息给居民,让居民进行支付结算。
 | 
	
		
			
				|  |  |      */
 | 
	
	
		
			
				|  | @ -436,4 +514,44 @@ public class WxTemplateService {
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return "success";
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 发送微信模版消息
 | 
	
		
			
				|  |  |      * @param userName
 | 
	
		
			
				|  |  |      * @param senderName
 | 
	
		
			
				|  |  |      * @param idCard
 | 
	
		
			
				|  |  |      * @param phone
 | 
	
		
			
				|  |  |      * @param title
 | 
	
		
			
				|  |  |      * @param content
 | 
	
		
			
				|  |  |      * @param contentString
 | 
	
		
			
				|  |  |      * @param url
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public String sendAppletWxTemple(String userName, String senderName,
 | 
	
		
			
				|  |  |                                String idCard, String phone, String title,
 | 
	
		
			
				|  |  |                                String content, String contentString,
 | 
	
		
			
				|  |  |                                String url,String pagePath) throws Exception{
 | 
	
		
			
				|  |  |         BasePatientDO basePatientDO = basePatientDao.findByIdcard(idCard);
 | 
	
		
			
				|  |  |         WxWechatDO wxWechatDO = wechatDao.findById(wechatId);
 | 
	
		
			
				|  |  |         if(basePatientDO!=null){
 | 
	
		
			
				|  |  |             List<BasePatientWechatDo> ps = basePatientWechatDao.findByWechatIdAndPatientId(wechatId,basePatientDO.getId());
 | 
	
		
			
				|  |  |             if(ps.isEmpty()){
 | 
	
		
			
				|  |  |                 logger.info("该用户"+basePatientDO.getName()+"没有openid,无法推送模版消息,用户ID:"+basePatientDO.getId()+"wechatId:"+wechatId);
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 for (BasePatientWechatDo basePatientWechatDo:ps){
 | 
	
		
			
				|  |  |                     WxTemplateConfigDO config = new WxTemplateConfigDO();
 | 
	
		
			
				|  |  |                     config.setFirst(config.getFirst().replace("key1",userName));
 | 
	
		
			
				|  |  |                     config.setKeyword1(contentString);
 | 
	
		
			
				|  |  |                     config.setKeyword2(DateUtil.dateToStrLong(new Date()));
 | 
	
		
			
				|  |  |                     config.setUrl(url);
 | 
	
		
			
				|  |  |                     config.setAppid(wxWechatDO.getApplets());
 | 
	
		
			
				|  |  |                     config.setPagepath(pagePath);
 | 
	
		
			
				|  |  |                     weixinMessagePushUtils.putWxMsg(wxAccessTokenService.getWxAccessTokenById(wechatId).getAccessToken(),basePatientWechatDo.getOpenid(),config);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }else{
 | 
	
		
			
				|  |  |             throw new Exception("接收者ID错误,无法找到该账号");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return "success";
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |