YkyySMSService.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. package com.yihu.jw.utils;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.yihu.jw.entity.base.patient.BasePatientDO;
  6. import com.yihu.jw.entity.base.sms.SmsTemplateDO;
  7. import com.yihu.jw.entity.base.wx.WxPushLogDO;
  8. import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
  9. import com.yihu.jw.entity.hospital.prescription.WlyyInspectionDO;
  10. import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
  11. import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionDO;
  12. import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
  13. import com.yihu.jw.hospital.prescription.dao.WlyyInspectionDao;
  14. import com.yihu.jw.patient.dao.BasePatientDao;
  15. import com.yihu.jw.sms.dao.BaseSmsTemplateDao;
  16. import com.yihu.jw.sms.util.ykyy.client.SmsClient;
  17. import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
  18. import com.yihu.jw.util.common.IdCardUtil;
  19. import com.yihu.jw.util.date.DateUtil;
  20. import com.yihu.jw.wechat.dao.WxPushLogDao;
  21. import com.yihu.utils.network.HttpResponse;
  22. import com.yihu.utils.network.HttpUtils;
  23. import org.apache.commons.collections.map.HashedMap;
  24. import org.apache.commons.lang3.StringUtils;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.Map;
  32. /**
  33. * Created by Trick on 2020/3/19.
  34. */
  35. @Service
  36. public class YkyySMSService {
  37. private static final Logger logger = LoggerFactory.getLogger(YkyySMSService.class);
  38. private final String usrCode ="300643";
  39. private final String pw ="T9IHN69DDF";
  40. private final String urlSms ="https://smsapp.wlwx.com";
  41. private final static String url="http://192.168.20.55:10023/ykyy/createSQLQuery";
  42. @Autowired
  43. private BaseSmsTemplateDao smsTemplateDao;
  44. @Autowired
  45. private WlyyInspectionDao inspectionDao;
  46. @Autowired
  47. private BasePatientDao basePatientDao;
  48. @Autowired
  49. private WxPushLogDao wxPushLogDao;
  50. @Autowired
  51. private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
  52. /**
  53. * 发送短信验证码
  54. * @param mobile
  55. * @param content
  56. * @return
  57. */
  58. public ResultMsg ykyySendSMS(String mobile, String content){
  59. SmsClient smsClient = new SmsClient();
  60. return smsClient.sendSms("ykyy",usrCode, content,mobile,"yes","","8",urlSms,pw);
  61. }
  62. public void sendSmsByTempcode(String temlateCode, WlyyOutpatientDO wlyyOutpatientDO, WlyyPrescriptionDO wlyyPrescriptionDO,String doctorMobile){
  63. SmsTemplateDO smsTemplateDO = null;
  64. String content="";
  65. String sex = "先生/女士";
  66. String mobile = "";
  67. //由于审方情况比较特殊单独标记下
  68. WxPushLogDO wxPushLogDO = null;
  69. WxPushLogDO wxPushLogDODoctor = null;
  70. //新增字典判断是否发送短信
  71. String sendMesControl = "1";//1 开启发送短信 0 关闭
  72. WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("ykSmsControl");
  73. if (wlyyHospitalSysDictDO!=null){
  74. sendMesControl = wlyyHospitalSysDictDO.getDictValue();
  75. }
  76. if("check_failed".equalsIgnoreCase(temlateCode)){
  77. wxPushLogDO = wxPushLogDao.findByTempNameAndOpenidAndReceiver(temlateCode,wlyyOutpatientDO.getId(),wlyyOutpatientDO.getPatient());
  78. wxPushLogDODoctor = wxPushLogDao.findByTempNameAndOpenidAndReceiver(temlateCode,wlyyOutpatientDO.getId(),wlyyOutpatientDO.getDoctor());
  79. }else {
  80. wxPushLogDO = wxPushLogDao.findByTempNameAndOpenid(temlateCode,wlyyOutpatientDO.getId());
  81. }
  82. if (wlyyOutpatientDO!=null){
  83. if (StringUtils.isNoneBlank(wlyyOutpatientDO.getIdcard())){
  84. String sexNo = IdCardUtil.getSexForIdcard_new(wlyyOutpatientDO.getIdcard());
  85. if ("1".equalsIgnoreCase(sexNo)){
  86. sex = "先生";
  87. }else if ("2".equalsIgnoreCase(sexNo)){
  88. sex = "女士";
  89. }
  90. }
  91. BasePatientDO basePatientDO = basePatientDao.findById(wlyyOutpatientDO.getPatient());
  92. if (basePatientDO!=null&&StringUtils.isNoneBlank(basePatientDO.getMobile())){
  93. mobile = basePatientDO.getMobile();
  94. }else {
  95. mobile=wlyyOutpatientDO.getMobile();
  96. }
  97. }
  98. logger.info("temlateCode"+temlateCode+"==mobile:"+mobile);
  99. try {
  100. if ("prescription_remind".equalsIgnoreCase(temlateCode)){//开具处方提醒
  101. smsTemplateDO = smsTemplateDao.findByClientId("prescription_remind");
  102. if (smsTemplateDO!=null){
  103. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{时间}}", DateUtil.dateToStrLong(wlyyPrescriptionDO.getCreateTime()))
  104. .replace("{{性别}}",sex);
  105. if (StringUtils.isNoneBlank(wlyyPrescriptionDO.getRealOrder())){
  106. content = content.replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder());
  107. }
  108. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  109. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  110. wxPushLogDO = new WxPushLogDO();
  111. wxPushLogDO.setTempName(temlateCode);
  112. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  113. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  114. wxPushLogDO.setCreateTime(new Date());
  115. wxPushLogDao.save(wxPushLogDO);
  116. }
  117. }
  118. }else if ("outpatient_remind".equalsIgnoreCase(temlateCode)){//患者发起复诊给医生发送消息
  119. smsTemplateDO = smsTemplateDao.findByClientId("outpatient_remind");
  120. if (smsTemplateDO!=null){
  121. if ("1".equalsIgnoreCase(wlyyOutpatientDO.getType())&&"1".equalsIgnoreCase(wlyyOutpatientDO.getOutpatientType())){
  122. content = smsTemplateDO.getContent();
  123. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  124. ykyySendSMS(doctorMobile,smsTemplateDO.getHeader()+content);
  125. wxPushLogDO = new WxPushLogDO();
  126. wxPushLogDO.setTempName(temlateCode);
  127. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  128. wxPushLogDO.setReceiver(wlyyOutpatientDO.getDoctor());
  129. wxPushLogDO.setCreateTime(new Date());
  130. wxPushLogDao.save(wxPushLogDO);
  131. }
  132. }else if ("2".equalsIgnoreCase(wlyyOutpatientDO.getType())&&"1".equalsIgnoreCase(wlyyOutpatientDO.getOutpatientType())){
  133. content = smsTemplateDO.getContent().replace("图文","视频");
  134. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  135. ykyySendSMS(doctorMobile,smsTemplateDO.getHeader()+content);
  136. wxPushLogDO = new WxPushLogDO();
  137. wxPushLogDO.setTempName(temlateCode);
  138. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  139. wxPushLogDO.setReceiver(wlyyOutpatientDO.getDoctor());
  140. wxPushLogDO.setCreateTime(new Date());
  141. wxPushLogDao.save(wxPushLogDO);
  142. }
  143. }
  144. }
  145. }else if ("message_remind_paitent".equalsIgnoreCase(temlateCode)){//医生发消息发送短信提醒
  146. smsTemplateDO = smsTemplateDao.findByClientId("message_remind_paitent");
  147. if (smsTemplateDO!=null){
  148. content = smsTemplateDO.getContent().replace("{{医生姓名}}",wlyyOutpatientDO.getDoctorName());
  149. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  150. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  151. wxPushLogDO = new WxPushLogDO();
  152. wxPushLogDO.setTempName(temlateCode);
  153. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  154. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  155. wxPushLogDO.setCreateTime(new Date());
  156. wxPushLogDao.save(wxPushLogDO);
  157. }
  158. }
  159. }else if ("oneself_pick".equalsIgnoreCase(temlateCode)){//病人自取
  160. smsTemplateDO = smsTemplateDao.findByClientId("oneself_pick");
  161. if (smsTemplateDO!=null){
  162. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{门诊号码}}",wlyyOutpatientDO.getRealOrder())
  163. .replace("{{性别}}",sex);
  164. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  165. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  166. wxPushLogDO = new WxPushLogDO();
  167. wxPushLogDO.setTempName(temlateCode);
  168. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  169. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  170. wxPushLogDO.setCreateTime(new Date());
  171. wxPushLogDao.save(wxPushLogDO);
  172. }
  173. }
  174. }else if("check_failed".equalsIgnoreCase(temlateCode)){//处方审核失败
  175. smsTemplateDO = smsTemplateDao.findByClientId("check_failed_patient");
  176. if (smsTemplateDO!=null){
  177. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder()).replace("{{性别}}",sex);;
  178. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  179. wxPushLogDO = new WxPushLogDO();
  180. wxPushLogDO.setTempName(temlateCode);
  181. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  182. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  183. wxPushLogDO.setCreateTime(new Date());
  184. wxPushLogDao.save(wxPushLogDO);
  185. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  186. }
  187. }
  188. SmsTemplateDO smsTemplateDO1 = smsTemplateDao.findByClientId("check_failed_doctor");
  189. if (smsTemplateDO1!=null){
  190. String contentDoctor = smsTemplateDO1.getContent().replace("{{医生姓名}}",wlyyOutpatientDO.getDoctorName()).replace("{{时间}}",DateUtil.dateToStrLong(wlyyPrescriptionDO.getCreateTime()))
  191. .replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder());
  192. if (wxPushLogDODoctor==null&&"1".equalsIgnoreCase(sendMesControl)){
  193. wxPushLogDO = new WxPushLogDO();
  194. wxPushLogDO.setTempName(temlateCode);
  195. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  196. wxPushLogDO.setReceiver(wlyyOutpatientDO.getDoctor());
  197. wxPushLogDO.setCreateTime(new Date());
  198. wxPushLogDao.save(wxPushLogDO);
  199. ykyySendSMS(doctorMobile,smsTemplateDO1.getHeader()+contentDoctor);
  200. }
  201. }
  202. }else if ("check_success_patient".equalsIgnoreCase(temlateCode)){//处方审核通过
  203. smsTemplateDO = smsTemplateDao.findByClientId("check_success_patient");
  204. if (smsTemplateDO!=null&&wlyyOutpatientDO!=null){
  205. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder()).replace("{{性别}}",sex);;
  206. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  207. wxPushLogDO = new WxPushLogDO();
  208. wxPushLogDO.setTempName(temlateCode);
  209. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  210. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  211. wxPushLogDO.setCreateTime(new Date());
  212. wxPushLogDao.save(wxPushLogDO);
  213. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  214. }
  215. }
  216. }else if ("inspection_remind".equalsIgnoreCase(temlateCode)){//处方审核通过
  217. smsTemplateDO = smsTemplateDao.findByClientId("inspection_remind");
  218. if (smsTemplateDO!=null&&wlyyOutpatientDO!=null){
  219. String medicard = "";
  220. Integer brxb = 0;
  221. String mzhm ="0";
  222. //如果患者医保卡不为空则用社保卡 否则用mzhm
  223. if(StringUtils.isNoneBlank(wlyyOutpatientDO.getCardNo())){
  224. medicard = wlyyOutpatientDO.getCardNo();
  225. JSONArray jsonArray3 = findHisPatient(medicard,false);
  226. if(jsonArray3!=null&&jsonArray3.size()>0){
  227. //获取居民信息
  228. JSONObject json = jsonArray3.getJSONObject(0);
  229. mzhm = json.getString("mzhm");
  230. }else {
  231. medicard="";
  232. }
  233. }else {
  234. JSONArray jsonArray3 = findHisPatientByIdCard(wlyyOutpatientDO.getIdcard(),false);
  235. if(jsonArray3!=null&&jsonArray3.size()>0){
  236. //获取居民信息
  237. JSONObject json = jsonArray3.getJSONObject(0);
  238. mzhm = json.getString("mzhm");
  239. }
  240. }
  241. List<WlyyInspectionDO> list = inspectionDao.findByOutpatientId(wlyyOutpatientDO.getId());
  242. String createTime = "";
  243. String isName = "";
  244. for (int i=0;i<list.size();i++){
  245. if (i==list.size()-1){
  246. isName+=list.get(i).getName()+"。";
  247. }else {
  248. isName+=list.get(i).getName()+",";
  249. }
  250. }
  251. if (list!=null&&list.size()>0){
  252. createTime = DateUtil.dateToStrLong(list.get(0).getCreateTime());
  253. }
  254. if (StringUtils.isNoneBlank(medicard)){
  255. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",createTime).replace("{{门诊号码}}",mzhm)
  256. .replace("{{社保卡号}}","【凭社保卡/就诊卡"+medicard+"到院充值预缴金做检查】").replace("{{性别}}",sex).replace("{{时间}}",createTime)
  257. .replace("{{检查项目}}",isName);
  258. }else {
  259. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{时间}}",createTime).replace("{{门诊号码}}",mzhm)
  260. .replace("{{社保卡号}}","【到收费处,凭此条短信中的门诊号码换卡充值预缴金做检查】").replace("{{性别}}",sex)
  261. .replace("{{检查项目}}",isName);;;
  262. }
  263. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  264. wxPushLogDO = new WxPushLogDO();
  265. wxPushLogDO.setTempName(temlateCode);
  266. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  267. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  268. wxPushLogDO.setCreateTime(new Date());
  269. wxPushLogDao.save(wxPushLogDO);
  270. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  271. }
  272. }
  273. }
  274. logger.info("发送后:temlateCode"+temlateCode+"==mobile:"+mobile+"content"+content+"doctorMobile"+doctorMobile);
  275. } catch (Exception e) {
  276. e.printStackTrace();
  277. System.out.println(temlateCode+"模板发送失败");
  278. }
  279. }
  280. /**
  281. * 获取his病人信息
  282. * @param ssc
  283. * @return
  284. * @throws Exception
  285. */
  286. public JSONArray findHisPatient(String ssc,boolean demoFlag) throws Exception {
  287. String sql = "SELECT\n" +
  288. "\tx.brid AS \"brid\",\n" +
  289. "\tx.mzhm AS \"mzhm\",\n" +
  290. "\tx.brxm AS \"brxm\",\n" +
  291. "\tx.sfzh AS \"sfzh\",\n" +
  292. "\tx.brxz AS \"brxz\",\n" +
  293. "\tx.brxb AS \"brxb\",\n" +
  294. "\tx.csny as \"csny\",\n" +
  295. "\tx.jzkh AS \"jzkh\",\n" +
  296. "\tx.jdsj AS \"jdsj\",\n" +
  297. "\tx.sjhm AS \"sjhm\",\n" +
  298. "\tx.fzxmc AS \"fzxmc\",\n" +
  299. "\tx.gzztmc AS \"gzztmc\",\n" +
  300. "\tx.lxdz AS \"lxdz\"\n" +
  301. "FROM\n" +
  302. "\tV_ZKSG_BRCX x\n" +
  303. "WHERE\n" +
  304. "\tx.jzkh = '"+ssc+"' ";
  305. JSONArray array = new JSONArray();
  306. Map<String,Object> params = new HashedMap();
  307. params.put("sql",sql);
  308. logger.info("idcard:"+sql);
  309. if (demoFlag){
  310. JSONObject jsonObject = new JSONObject();
  311. jsonObject.put("brid","1168517");
  312. jsonObject.put("mzhm","0502452155");
  313. jsonObject.put("brxm","于小童");
  314. jsonObject.put("sfzh","450521199405092535");
  315. jsonObject.put("brxz","自费");
  316. jsonObject.put("brxb","男");
  317. jsonObject.put("csny","1994-05-09");
  318. jsonObject.put("jzkh","2396501");
  319. jsonObject.put("jdsj","2020-06-28 15:15:35");
  320. jsonObject.put("gzztmc","一般");
  321. jsonObject.put("lxdz","厦门市五缘湾");
  322. array.add(jsonObject);
  323. }else {
  324. HttpResponse response = HttpUtils.doGet(url,params);
  325. String content = response.getContent();
  326. logger.info("response:"+content);
  327. JSONObject rs = JSON.parseObject(content);
  328. Integer status = rs.getInteger("status");
  329. if (status==200){
  330. array = rs.getJSONArray("detailModelList");
  331. }
  332. }
  333. return array;
  334. }
  335. /**
  336. * 获取his病人信息
  337. * @param idcard
  338. * @return
  339. * @throws Exception
  340. */
  341. public JSONArray findHisPatientByIdCard(String idcard,boolean demoFlag) throws Exception {
  342. String sql = "SELECT\n" +
  343. "\tx.brid AS \"brid\",\n" +
  344. "\tx.mzhm AS \"mzhm\",\n" +
  345. "\tx.brxm AS \"brxm\",\n" +
  346. "\tx.sfzh AS \"sfzh\",\n" +
  347. "\tx.brxz AS \"brxz\",\n" +
  348. "\tx.brxb AS \"brxb\",\n" +
  349. "\tx.csny as \"csny\",\n" +
  350. "\tx.jzkh AS \"jzkh\",\n" +
  351. "\tx.jdsj AS \"jdsj\",\n" +
  352. "\tx.sjhm AS \"sjhm\",\n" +
  353. "\tx.fzxmc AS \"fzxmc\",\n" +
  354. "\tx.gzztmc AS \"gzztmc\",\n" +
  355. "\tx.lxdz AS \"lxdz\"\n" +
  356. "FROM\n" +
  357. "\tV_ZKSG_BRCX x\n" +
  358. "WHERE\n" +
  359. "\tx.sfzh = '"+idcard+"' ";
  360. JSONArray array = new JSONArray();
  361. Map<String,Object> params = new HashedMap();
  362. params.put("sql",sql);
  363. logger.info("idcard:"+sql);
  364. if (demoFlag){
  365. JSONObject jsonObject = new JSONObject();
  366. jsonObject.put("brid","1168517");
  367. jsonObject.put("mzhm","0502452155");
  368. jsonObject.put("brxm","于小童");
  369. jsonObject.put("sfzh","450521199405092535");
  370. jsonObject.put("brxz","自费");
  371. jsonObject.put("brxb","男");
  372. jsonObject.put("csny","1994-05-09");
  373. jsonObject.put("jzkh","2396501");
  374. jsonObject.put("jdsj","2020-06-28 15:15:35");
  375. jsonObject.put("gzztmc","一般");
  376. jsonObject.put("lxdz","厦门市五缘湾");
  377. array.add(jsonObject);
  378. }else {
  379. HttpResponse response = HttpUtils.doGet(url,params);
  380. String content = response.getContent();
  381. logger.info("response:"+content);
  382. JSONObject rs = JSON.parseObject(content);
  383. Integer status = rs.getInteger("status");
  384. if (status==200){
  385. array = rs.getJSONArray("detailModelList");
  386. }
  387. }
  388. return array;
  389. }
  390. }