package com.ynxbd.common.helper.common; import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.common.dao.his.HisRecipeDao; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 快速发药 * * @Author wsq * @Date 2020/11/20 11:53 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ @Slf4j public class QuickDrugDispenseHelper { /** * 快速发药 * * @param drugInfo 药瓶号 * @param invoiceTransNo 发票号(作为交易流水号传递) * @return 是否成功 */ public static boolean quickDrug(String drugInfo, String invoiceTransNo) { if (StringUtils.isEmpty(drugInfo) || StringUtils.isEmpty(invoiceTransNo)) { return false; } try { log.info("[快速发药]开始执行"); String appId = WeChatConfig.APP_ID; drugInfo = convertFromXml(drugInfo.trim()); drugInfo = drugInfo.replace("GB2312", "utf8"); String soapUrl, soapAction, soapXML; switch (appId) { case "wxd503671f502bd89d": // 红河州医院 soapUrl = "http://10.255.248.21:8735/DispensingIntegration?singleWsdl"; soapAction = "BD.BDIEService/IRDIS/TaskAdmit"; soapXML = "" + "1" + "" + ""; break; case "wx64cc4b42bbed4090": // 蒙自市医院 soapUrl = "http://200.200.200.173:8788/axis2/services/DIHPMPFWebService?wsdl"; soapAction = "urn:outpOrderDispense"; soapXML = "" + "" + "" + ""; break; case "wx1f1e9d29f9b44c36": soapUrl = "http://172.16.24.51:8000/ConsisWebService/ServiceHis.svc?singleWsdl"; soapAction = "http://tempuri.org/IHisService/HisTransData"; soapXML = " " + ""; break; default: return false; } log.info("[快速发药]发送请求:" + soapXML); String respData = SoapHelper.post("快速发药", soapUrl, soapAction, soapXML); if (respData == null) { log.info("[快速发药]创建连接失败"); return false; } log.info("[快速发药]执行返回:{}", respData); if ("wx64cc4b42bbed4090".equals(appId)) { if (!respData.contains("status code=\"0\"")) { return false; } String windowNo = subString(respData, "windowNo>", "</windowNo>"); String groupNo = subString(respData, "groupNo>", "</groupNo>"); if (StringUtils.isEmpty(windowNo) || StringUtils.isEmpty(groupNo)) { return false; } String responseXml = new HisRecipeDao().hisQuickDrug(windowNo, groupNo, invoiceTransNo); log.info("蒙自 HIS发药返回 " + responseXml); return true; } if ("wx1f1e9d29f9b44c36".equals(appId)) { // 玉龙县人民医院 if (!respData.contains("RETVAL>1</RETVAL")) { return false; } String windowNo = subString(respData, "RETMSG>", "</RETMSG"); String groupNo = ""; if (StringUtils.isEmpty(windowNo)) { return false; } String responseXml = new HisRecipeDao().hisQuickDrug(windowNo, groupNo, invoiceTransNo); log.info("玉龙 HIS发药返回 " + responseXml); } } catch (Exception e) { log.info("[快速发药]调用失败:" + e.getMessage()); ErrorHelper.println(e); } return true; } private static String convertFromXml(String str) { boolean flag = true; boolean quotesFlag = true; StringBuilder ans = new StringBuilder(); String tmp = ""; for (int i = 0; i < str.length(); i++) { if ('"' == str.charAt(i)) { ans.append(str.charAt(i)); quotesFlag = !quotesFlag; } else if ('<' == str.charAt(i)) { tmp = tmp.trim(); ans.append(tmp); flag = true; ans.append(str.charAt(i)); } else if ('>' == str.charAt(i)) { if (quotesFlag) { flag = false; ans.append(str.charAt(i)); tmp = ""; } else { ans.append(">"); } } else if (flag) { ans.append(str.charAt(i)); } else { tmp += str.charAt(i); } } return ans.toString(); } /** * 截取字符串str中指定字符 strStart、strEnd之间的字符串 * * @param str 被截取字符串 * @param strStart 开始截取字符串 * @param strEnd 结束截取的字符串 * @return 截取后的字符串 */ private static String subString(String str, String strStart, String strEnd) { /* 找出指定的2个字符在 该字符串里面的 位置 */ int strStartIndex = str.indexOf(strStart); int strEndIndex = str.indexOf(strEnd); /* index 为负数 即表示该字符串中 没有该字符 */ if (strStartIndex < 0) { return ""; } if (strEndIndex < 0) { return ""; } /* 开始截取 */ return str.substring(strStartIndex, strEndIndex).substring(strStart.length()); } }