YkyySMSService.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  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("{{处方编号}}",wlyyPrescriptionDO.getRealOrder()).replace("{{性别}}",sex);
  105. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  106. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  107. wxPushLogDO = new WxPushLogDO();
  108. wxPushLogDO.setTempName(temlateCode);
  109. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  110. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  111. wxPushLogDO.setCreateTime(new Date());
  112. wxPushLogDao.save(wxPushLogDO);
  113. }
  114. }
  115. }else if ("outpatient_remind".equalsIgnoreCase(temlateCode)){//患者发起复诊给医生发送消息
  116. smsTemplateDO = smsTemplateDao.findByClientId("outpatient_remind");
  117. if (smsTemplateDO!=null){
  118. if ("1".equalsIgnoreCase(wlyyOutpatientDO.getType())&&"1".equalsIgnoreCase(wlyyOutpatientDO.getOutpatientType())){
  119. content = smsTemplateDO.getContent();
  120. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  121. ykyySendSMS(doctorMobile,smsTemplateDO.getHeader()+content);
  122. wxPushLogDO = new WxPushLogDO();
  123. wxPushLogDO.setTempName(temlateCode);
  124. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  125. wxPushLogDO.setReceiver(wlyyOutpatientDO.getDoctor());
  126. wxPushLogDO.setCreateTime(new Date());
  127. wxPushLogDao.save(wxPushLogDO);
  128. }
  129. }else if ("2".equalsIgnoreCase(wlyyOutpatientDO.getType())&&"1".equalsIgnoreCase(wlyyOutpatientDO.getOutpatientType())){
  130. content = smsTemplateDO.getContent().replace("图文","视频");
  131. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  132. ykyySendSMS(doctorMobile,smsTemplateDO.getHeader()+content);
  133. wxPushLogDO = new WxPushLogDO();
  134. wxPushLogDO.setTempName(temlateCode);
  135. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  136. wxPushLogDO.setReceiver(wlyyOutpatientDO.getDoctor());
  137. wxPushLogDO.setCreateTime(new Date());
  138. wxPushLogDao.save(wxPushLogDO);
  139. }
  140. }
  141. }
  142. }else if ("message_remind_paitent".equalsIgnoreCase(temlateCode)){//医生发消息发送短信提醒
  143. smsTemplateDO = smsTemplateDao.findByClientId("message_remind_paitent");
  144. if (smsTemplateDO!=null){
  145. content = smsTemplateDO.getContent().replace("{{医生姓名}}",wlyyOutpatientDO.getDoctorName());
  146. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  147. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  148. wxPushLogDO = new WxPushLogDO();
  149. wxPushLogDO.setTempName(temlateCode);
  150. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  151. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  152. wxPushLogDO.setCreateTime(new Date());
  153. wxPushLogDao.save(wxPushLogDO);
  154. }
  155. }
  156. }else if ("oneself_pick".equalsIgnoreCase(temlateCode)){//病人自取
  157. smsTemplateDO = smsTemplateDao.findByClientId("oneself_pick");
  158. if (smsTemplateDO!=null){
  159. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{门诊号码}}",wlyyOutpatientDO.getRealOrder())
  160. .replace("{{性别}}",sex);
  161. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  162. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  163. wxPushLogDO = new WxPushLogDO();
  164. wxPushLogDO.setTempName(temlateCode);
  165. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  166. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  167. wxPushLogDO.setCreateTime(new Date());
  168. wxPushLogDao.save(wxPushLogDO);
  169. }
  170. }
  171. }else if("check_failed".equalsIgnoreCase(temlateCode)){//处方审核失败
  172. smsTemplateDO = smsTemplateDao.findByClientId("check_failed_patient");
  173. if (smsTemplateDO!=null){
  174. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder()).replace("{{性别}}",sex);;
  175. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  176. wxPushLogDO = new WxPushLogDO();
  177. wxPushLogDO.setTempName(temlateCode);
  178. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  179. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  180. wxPushLogDO.setCreateTime(new Date());
  181. wxPushLogDao.save(wxPushLogDO);
  182. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  183. }
  184. }
  185. SmsTemplateDO smsTemplateDO1 = smsTemplateDao.findByClientId("check_failed_doctor");
  186. if (smsTemplateDO1!=null){
  187. String contentDoctor = smsTemplateDO1.getContent().replace("{{医生姓名}}",wlyyOutpatientDO.getDoctorName()).replace("{{时间}}",DateUtil.dateToStrLong(wlyyPrescriptionDO.getCreateTime()))
  188. .replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder());
  189. if (wxPushLogDODoctor==null&&"1".equalsIgnoreCase(sendMesControl)){
  190. wxPushLogDO = new WxPushLogDO();
  191. wxPushLogDO.setTempName(temlateCode);
  192. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  193. wxPushLogDO.setReceiver(wlyyOutpatientDO.getDoctor());
  194. wxPushLogDO.setCreateTime(new Date());
  195. wxPushLogDao.save(wxPushLogDO);
  196. ykyySendSMS(doctorMobile,smsTemplateDO1.getHeader()+contentDoctor);
  197. }
  198. }
  199. }else if ("check_success_patient".equalsIgnoreCase(temlateCode)){//处方审核通过
  200. smsTemplateDO = smsTemplateDao.findByClientId("check_success_patient");
  201. if (smsTemplateDO!=null&&wlyyOutpatientDO!=null){
  202. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",wlyyPrescriptionDO.getRealOrder()).replace("{{性别}}",sex);;
  203. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  204. wxPushLogDO = new WxPushLogDO();
  205. wxPushLogDO.setTempName(temlateCode);
  206. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  207. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  208. wxPushLogDO.setCreateTime(new Date());
  209. wxPushLogDao.save(wxPushLogDO);
  210. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  211. }
  212. }
  213. }else if ("inspection_remind".equalsIgnoreCase(temlateCode)){//处方审核通过
  214. smsTemplateDO = smsTemplateDao.findByClientId("inspection_remind");
  215. if (smsTemplateDO!=null&&wlyyOutpatientDO!=null){
  216. String medicard = "";
  217. Integer brxb = 0;
  218. String mzhm ="0";
  219. //如果患者医保卡不为空则用社保卡 否则用mzhm
  220. if(StringUtils.isNoneBlank(wlyyOutpatientDO.getCardNo())){
  221. medicard = wlyyOutpatientDO.getCardNo();
  222. JSONArray jsonArray3 = findHisPatient(medicard,false);
  223. if(jsonArray3!=null&&jsonArray3.size()>0){
  224. //获取居民信息
  225. JSONObject json = jsonArray3.getJSONObject(0);
  226. mzhm = json.getString("mzhm");
  227. }else {
  228. medicard="";
  229. }
  230. }else {
  231. JSONArray jsonArray3 = findHisPatientByIdCard(wlyyOutpatientDO.getIdcard(),false);
  232. if(jsonArray3!=null&&jsonArray3.size()>0){
  233. //获取居民信息
  234. JSONObject json = jsonArray3.getJSONObject(0);
  235. mzhm = json.getString("mzhm");
  236. }
  237. }
  238. List<WlyyInspectionDO> list = inspectionDao.findByOutpatientId(wlyyOutpatientDO.getId());
  239. String createTime = "";
  240. String isName = "";
  241. for (int i=0;i<list.size();i++){
  242. if (i==list.size()-1){
  243. isName+=list.get(i).getName()+"。";
  244. }else {
  245. isName+=list.get(i).getName()+",";
  246. }
  247. }
  248. if (list!=null&&list.size()>0){
  249. createTime = DateUtil.dateToStrLong(list.get(0).getCreateTime());
  250. }
  251. if (StringUtils.isNoneBlank(medicard)){
  252. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{处方编号}}",createTime).replace("{{门诊号码}}",mzhm)
  253. .replace("{{社保卡号}}","【凭社保卡/就诊卡"+medicard+"到院充值预缴金做检查】").replace("{{性别}}",sex).replace("{{时间}}",createTime)
  254. .replace("{{检查项目}}",isName);
  255. }else {
  256. content = smsTemplateDO.getContent().replace("{{病人姓名}}",wlyyOutpatientDO.getPatientName()).replace("{{时间}}",createTime).replace("{{门诊号码}}",mzhm)
  257. .replace("{{社保卡号}}","【到收费处,凭此条短信中的门诊号码换卡充值预缴金做检查】").replace("{{性别}}",sex)
  258. .replace("{{检查项目}}",isName);;;
  259. }
  260. if (wxPushLogDO==null&&"1".equalsIgnoreCase(sendMesControl)){
  261. wxPushLogDO = new WxPushLogDO();
  262. wxPushLogDO.setTempName(temlateCode);
  263. wxPushLogDO.setOpenid(wlyyOutpatientDO.getId());
  264. wxPushLogDO.setReceiver(wlyyOutpatientDO.getPatient());
  265. wxPushLogDO.setCreateTime(new Date());
  266. wxPushLogDao.save(wxPushLogDO);
  267. ykyySendSMS(mobile,smsTemplateDO.getHeader()+content);
  268. }
  269. }
  270. }
  271. logger.info("发送后:temlateCode"+temlateCode+"==mobile:"+mobile+"content"+content+"doctorMobile"+doctorMobile);
  272. } catch (Exception e) {
  273. e.printStackTrace();
  274. System.out.println(temlateCode+"模板发送失败");
  275. }
  276. }
  277. /**
  278. * 获取his病人信息
  279. * @param ssc
  280. * @return
  281. * @throws Exception
  282. */
  283. public JSONArray findHisPatient(String ssc,boolean demoFlag) throws Exception {
  284. String sql = "SELECT\n" +
  285. "\tx.brid AS \"brid\",\n" +
  286. "\tx.mzhm AS \"mzhm\",\n" +
  287. "\tx.brxm AS \"brxm\",\n" +
  288. "\tx.sfzh AS \"sfzh\",\n" +
  289. "\tx.brxz AS \"brxz\",\n" +
  290. "\tx.brxb AS \"brxb\",\n" +
  291. "\tx.csny as \"csny\",\n" +
  292. "\tx.jzkh AS \"jzkh\",\n" +
  293. "\tx.jdsj AS \"jdsj\",\n" +
  294. "\tx.sjhm AS \"sjhm\",\n" +
  295. "\tx.fzxmc AS \"fzxmc\",\n" +
  296. "\tx.gzztmc AS \"gzztmc\",\n" +
  297. "\tx.lxdz AS \"lxdz\"\n" +
  298. "FROM\n" +
  299. "\tV_ZKSG_BRCX x\n" +
  300. "WHERE\n" +
  301. "\tx.jzkh = '"+ssc+"' ";
  302. JSONArray array = new JSONArray();
  303. Map<String,Object> params = new HashedMap();
  304. params.put("sql",sql);
  305. logger.info("idcard:"+sql);
  306. if (demoFlag){
  307. JSONObject jsonObject = new JSONObject();
  308. jsonObject.put("brid","1168517");
  309. jsonObject.put("mzhm","0502452155");
  310. jsonObject.put("brxm","于小童");
  311. jsonObject.put("sfzh","450521199405092535");
  312. jsonObject.put("brxz","自费");
  313. jsonObject.put("brxb","男");
  314. jsonObject.put("csny","1994-05-09");
  315. jsonObject.put("jzkh","2396501");
  316. jsonObject.put("jdsj","2020-06-28 15:15:35");
  317. jsonObject.put("gzztmc","一般");
  318. jsonObject.put("lxdz","厦门市五缘湾");
  319. array.add(jsonObject);
  320. }else {
  321. HttpResponse response = HttpUtils.doGet(url,params);
  322. String content = response.getContent();
  323. logger.info("response:"+content);
  324. JSONObject rs = JSON.parseObject(content);
  325. Integer status = rs.getInteger("status");
  326. if (status==200){
  327. array = rs.getJSONArray("detailModelList");
  328. }
  329. }
  330. return array;
  331. }
  332. /**
  333. * 获取his病人信息
  334. * @param idcard
  335. * @return
  336. * @throws Exception
  337. */
  338. public JSONArray findHisPatientByIdCard(String idcard,boolean demoFlag) throws Exception {
  339. String sql = "SELECT\n" +
  340. "\tx.brid AS \"brid\",\n" +
  341. "\tx.mzhm AS \"mzhm\",\n" +
  342. "\tx.brxm AS \"brxm\",\n" +
  343. "\tx.sfzh AS \"sfzh\",\n" +
  344. "\tx.brxz AS \"brxz\",\n" +
  345. "\tx.brxb AS \"brxb\",\n" +
  346. "\tx.csny as \"csny\",\n" +
  347. "\tx.jzkh AS \"jzkh\",\n" +
  348. "\tx.jdsj AS \"jdsj\",\n" +
  349. "\tx.sjhm AS \"sjhm\",\n" +
  350. "\tx.fzxmc AS \"fzxmc\",\n" +
  351. "\tx.gzztmc AS \"gzztmc\",\n" +
  352. "\tx.lxdz AS \"lxdz\"\n" +
  353. "FROM\n" +
  354. "\tV_ZKSG_BRCX x\n" +
  355. "WHERE\n" +
  356. "\tx.sfzh = '"+idcard+"' ";
  357. JSONArray array = new JSONArray();
  358. Map<String,Object> params = new HashedMap();
  359. params.put("sql",sql);
  360. logger.info("idcard:"+sql);
  361. if (demoFlag){
  362. JSONObject jsonObject = new JSONObject();
  363. jsonObject.put("brid","1168517");
  364. jsonObject.put("mzhm","0502452155");
  365. jsonObject.put("brxm","于小童");
  366. jsonObject.put("sfzh","450521199405092535");
  367. jsonObject.put("brxz","自费");
  368. jsonObject.put("brxb","男");
  369. jsonObject.put("csny","1994-05-09");
  370. jsonObject.put("jzkh","2396501");
  371. jsonObject.put("jdsj","2020-06-28 15:15:35");
  372. jsonObject.put("gzztmc","一般");
  373. jsonObject.put("lxdz","厦门市五缘湾");
  374. array.add(jsonObject);
  375. }else {
  376. HttpResponse response = HttpUtils.doGet(url,params);
  377. String content = response.getContent();
  378. logger.info("response:"+content);
  379. JSONObject rs = JSON.parseObject(content);
  380. Integer status = rs.getInteger("status");
  381. if (status==200){
  382. array = rs.getJSONArray("detailModelList");
  383. }
  384. }
  385. return array;
  386. }
  387. }