|
@ -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";
|
|
|
}
|
|
|
}
|