|  | @ -0,0 +1,222 @@
 | 
	
		
			
				|  |  | package com.yihu.hos.qlc.controller;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.ehr.dbhelper.jdbc.DBHelper;
 | 
	
		
			
				|  |  | import com.yihu.hos.config.Config;
 | 
	
		
			
				|  |  | import com.yihu.hos.gateway.util.RPCUtil;
 | 
	
		
			
				|  |  | import com.yihu.hos.resource.util.httpclient.HttpClientUtil;
 | 
	
		
			
				|  |  | import io.swagger.annotations.Api;
 | 
	
		
			
				|  |  | import io.swagger.annotations.ApiOperation;
 | 
	
		
			
				|  |  | import io.swagger.annotations.ApiParam;
 | 
	
		
			
				|  |  | import net.sf.json.JSON;
 | 
	
		
			
				|  |  | import net.sf.json.JSONObject;
 | 
	
		
			
				|  |  | import net.sf.json.xml.XMLSerializer;
 | 
	
		
			
				|  |  | import org.dom4j.Document;
 | 
	
		
			
				|  |  | import org.dom4j.Element;
 | 
	
		
			
				|  |  | import org.dom4j.io.SAXReader;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.util.StringUtils;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RequestMapping;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RequestMethod;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RequestParam;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RestController;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | import java.util.HashMap;
 | 
	
		
			
				|  |  | import java.util.LinkedList;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.Map;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * Created by Administrator on 2016/4/20.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @RestController
 | 
	
		
			
				|  |  | @RequestMapping(value = "/api/v1.0/qlc", produces = {"application/json;charset=UTF-8"})//
 | 
	
		
			
				|  |  | @Api(protocols = "http", value = "resource", hidden = false, description = "全流程对接接口")
 | 
	
		
			
				|  |  | public class QLCController {
 | 
	
		
			
				|  |  |     private DBHelper dbHelper = new DBHelper();
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private HttpClientUtil httpClientUtil;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 院方_挂号事件推送
 | 
	
		
			
				|  |  |      * localhost:8890/gateway/transfer?api=registeredPush¶m={EventType:"",EventNo:"",CardType:"",CardNo:"",PatientId:"",HospitalId:""}&requestId="目前没用随便写"
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/queryUserInfo", method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     @ApiOperation(value = "挂号事件推送", response = Object.class, produces = "application/json", notes = "院方挂号事件推送")
 | 
	
		
			
				|  |  |     public Object queryUserInfo(@ApiParam(value = "事件类型:门诊、住院", required = true) @RequestParam(value = "EventType") String EventType,
 | 
	
		
			
				|  |  |                                 @ApiParam(value = "事件编码:门诊号、住院号", required = true) @RequestParam(value = "EventNo") String EventNo,
 | 
	
		
			
				|  |  |                                 @ApiParam(value = "卡类型", required = true) @RequestParam(value = "CardType") String CardType,
 | 
	
		
			
				|  |  |                                 @ApiParam(value = "卡号", required = true) @RequestParam(value = "CardNo") String CardNo,
 | 
	
		
			
				|  |  |                                 @ApiParam(value = "PatientId", required = true) @RequestParam(value = "PatientId") String PatientId,
 | 
	
		
			
				|  |  |                                 @ApiParam(value = "医院ID", required = true) @RequestParam(value = "HospitalId") String HospitalId,
 | 
	
		
			
				|  |  |                                 HttpServletRequest request) {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             String param = "<Req><TransactionCode>5001</TransactionCode><Data><CardType>" + CardType + "</CardType><CardNo>" + CardNo + "</CardNo><PatientId>" + PatientId + "</PatientId></Data></Req>";
 | 
	
		
			
				|  |  |             String apiparam = "{\"ChannelId\"=\"\"+Config.channelId+\"\"," +
 | 
	
		
			
				|  |  |                     "\"ParamType\"=1," +
 | 
	
		
			
				|  |  |                     "\"Params\"=\"" + param + "\"," +
 | 
	
		
			
				|  |  |                     "\"Guid\"=\"" + "00000001111111" + "\"," +
 | 
	
		
			
				|  |  |                     "\"V\"=\"3.0.0\"," +
 | 
	
		
			
				|  |  |                     "\"OutType\"=0n ," +
 | 
	
		
			
				|  |  |                     "\"HospitalId\"=\"" + HospitalId + "\"}";
 | 
	
		
			
				|  |  |             Object s = RPCUtil.getRPCData("ZEUS.HosHOPWs.QueryUserInfo", apiparam);
 | 
	
		
			
				|  |  |             //解析xml
 | 
	
		
			
				|  |  |             SAXReader saxReader = new SAXReader();
 | 
	
		
			
				|  |  |             Document document = saxReader.read(s.toString());
 | 
	
		
			
				|  |  |             Element root = document.getRootElement();
 | 
	
		
			
				|  |  |             if ("10000".equals(root.element("RespCode"))) {
 | 
	
		
			
				|  |  |                 //xml轉json
 | 
	
		
			
				|  |  |                 Element dataXML = root.element("Data");
 | 
	
		
			
				|  |  |                 JSONObject obj = xml2json(root.element("Data"));
 | 
	
		
			
				|  |  |                 obj.put("CardType", CardType);
 | 
	
		
			
				|  |  |                 obj.put("CardNo", CardNo);
 | 
	
		
			
				|  |  |                 obj.put("PatientId", PatientId);
 | 
	
		
			
				|  |  |                 obj.put("OrgCode", HospitalId);
 | 
	
		
			
				|  |  |                 //調用接口存入mongo
 | 
	
		
			
				|  |  |                 Map<String, Object> params = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |                 params.put("dataset", "HDSA00_01");
 | 
	
		
			
				|  |  |                 params.put("data", obj.toString());
 | 
	
		
			
				|  |  |                 httpClientUtil.doPost(Config.monogoUrl, params, null, null);
 | 
	
		
			
				|  |  |                 //出發採集上傳
 | 
	
		
			
				|  |  |                 params = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |                 params.put("orgCode", HospitalId);
 | 
	
		
			
				|  |  |                 params.put("cardNo", CardNo);
 | 
	
		
			
				|  |  |                 params.put("eventNo", PatientId);
 | 
	
		
			
				|  |  |                 httpClientUtil.doPost(Config.startCollect, params, null, null);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             return e.getMessage();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return "成功";
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 院方_检查/检验报告单推送---数据说明
 | 
	
		
			
				|  |  |      *  localhost:8890/gateway/transfer?api=patientInformationPush¶m={CardType:"",CardNo:"",ReportType:"",ReportId:"",State:"",HospitalId:""}&requestId="目前没用随便写"
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/patientInformation", method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     @ApiOperation(value = "检查/检验报告单推送-", response = Object.class, produces = "application/json", notes = "检查/检验报告单推送-")
 | 
	
		
			
				|  |  |     public Object patientInformation(@ApiParam(value = "卡类型", required = true) @RequestParam(value = "CardType") String CardType,
 | 
	
		
			
				|  |  |                                      @ApiParam(value = "卡号", required = true) @RequestParam(value = "CardNo") String CardNo,
 | 
	
		
			
				|  |  |                                      @ApiParam(value = "报告单类型1检验报告2检查报告", required = true) @RequestParam(value = "ReportType") String ReportType,
 | 
	
		
			
				|  |  |                                      @ApiParam(value = "报告单号", required = true) @RequestParam(value = "ReportId") String ReportId,
 | 
	
		
			
				|  |  |                                      @ApiParam(value = "报告单状态1 报告未出 2报告已出", required = true) @RequestParam(value = "State") String State,
 | 
	
		
			
				|  |  |                                      @ApiParam(value = "医院ID", required = true) @RequestParam(value = "HospitalId") String HospitalId,
 | 
	
		
			
				|  |  |                                      HttpServletRequest request) {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             if ("1".equals(State)) {
 | 
	
		
			
				|  |  |                 return "报告未出,结束 ";
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
 | 
	
		
			
				|  |  |             String data =
 | 
	
		
			
				|  |  |                     "<Req><TransactionCode>5001</TransactionCode><Data><CardNo>" + CardNo + "</CardNo><ReportId>" + ReportId + "</ReportId><ReportType>" + ReportType + "</ReportType></Data></Req>";
 | 
	
		
			
				|  |  |             String apiparam = "{\"ChannelId\"=\"\"+Config.channelId+\"\"," +
 | 
	
		
			
				|  |  |                     "\"ParamType\"=1," +
 | 
	
		
			
				|  |  |                     "\"Params\"=\"" + data + "\"," +
 | 
	
		
			
				|  |  |                     "\"Guid\"=\"" + "00000001111111" + "\"," +
 | 
	
		
			
				|  |  |                     "\"V\"=\"3.0.0\"," +
 | 
	
		
			
				|  |  |                     "\"OutType\"=0," +
 | 
	
		
			
				|  |  |                     "\"HospitalId\"=\"" + HospitalId + "\"}";
 | 
	
		
			
				|  |  |             Object s = RPCUtil.getRPCData("ZEUS.HosHOPWs.GetReportInfo", apiparam);
 | 
	
		
			
				|  |  |             //解析xml
 | 
	
		
			
				|  |  |             SAXReader saxReader = new SAXReader();
 | 
	
		
			
				|  |  |             Document document = saxReader.read(s.toString());
 | 
	
		
			
				|  |  |             Element root = document.getRootElement();
 | 
	
		
			
				|  |  |             if ("10000".equals(root.element("RespCode"))) {
 | 
	
		
			
				|  |  |                 //xml轉json
 | 
	
		
			
				|  |  |                 JSONObject obj = new JSONObject();
 | 
	
		
			
				|  |  |                 //得到Data节点
 | 
	
		
			
				|  |  |                 Element dataXml = root.element("Data");
 | 
	
		
			
				|  |  |                 //判断data节点是否有从表
 | 
	
		
			
				|  |  |                 List elements = root.elements("Data_1");
 | 
	
		
			
				|  |  |                 if (elements != null && elements.size() > 0) {
 | 
	
		
			
				|  |  |                     for (Object obj1 : elements) {
 | 
	
		
			
				|  |  |                         Element data1XML = (Element) obj1;
 | 
	
		
			
				|  |  |                         //从表节点
 | 
	
		
			
				|  |  |                         JSONObject objData = xml2json(data1XML);
 | 
	
		
			
				|  |  |                         objData.put("CardType", CardType);
 | 
	
		
			
				|  |  |                         objData.put("CardNo", CardNo);
 | 
	
		
			
				|  |  |                         objData.put("ReportId", ReportId);
 | 
	
		
			
				|  |  |                         objData.put("ReportType", ReportType);
 | 
	
		
			
				|  |  |                         objData.put("OrgCode", HospitalId);
 | 
	
		
			
				|  |  |                         //添加主表的所有信息
 | 
	
		
			
				|  |  |                         objData.putAll(xml2json(dataXml));
 | 
	
		
			
				|  |  |                         //調用接口存入mongo
 | 
	
		
			
				|  |  |                         Map<String, Object> params = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |                         params.put("dataset", "HDSD01_01");
 | 
	
		
			
				|  |  |                         params.put("data", objData.toString());
 | 
	
		
			
				|  |  |                         httpClientUtil.doPost(Config.monogoUrl, params, null, null);
 | 
	
		
			
				|  |  |                         //出發採集上傳
 | 
	
		
			
				|  |  |                         params = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |                         params.put("orgCode", HospitalId);
 | 
	
		
			
				|  |  |                         params.put("cardNo", CardNo);
 | 
	
		
			
				|  |  |                         params.put("eventNo", StringUtils.isEmpty(objData.get("ClinicNo")) ? objData.get("HosUserNo") : objData.get("ClinicNo"));
 | 
	
		
			
				|  |  |                         httpClientUtil.doPost(Config.startCollect, params, null, null);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             return e.getMessage();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return "成功";
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * xml轉map
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param element
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private static Map iterateElement(Element element) {
 | 
	
		
			
				|  |  |         List jiedian = element.elements();
 | 
	
		
			
				|  |  |         Element et = null;
 | 
	
		
			
				|  |  |         Map obj = new HashMap();
 | 
	
		
			
				|  |  |         List list = null;
 | 
	
		
			
				|  |  |         for (int i = 0; i < jiedian.size(); i++) {
 | 
	
		
			
				|  |  |             list = new LinkedList();
 | 
	
		
			
				|  |  |             et = (Element) jiedian.get(i);
 | 
	
		
			
				|  |  |             if (et.getTextTrim().equals("")) {
 | 
	
		
			
				|  |  |                 if (et.elements().size() == 0)
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 if (obj.containsKey(et.getName())) {
 | 
	
		
			
				|  |  |                     list = (List) obj.get(et.getName());
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 list.add(iterateElement(et));
 | 
	
		
			
				|  |  |                 obj.put(et.getName(), list);
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 if (obj.containsKey(et.getName())) {
 | 
	
		
			
				|  |  |                     list = (List) obj.get(et.getName());
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 list.add(et.getTextTrim());
 | 
	
		
			
				|  |  |                 obj.put(et.getName(), list);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return obj;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private String getOrgCodeBy(String orgCode) {
 | 
	
		
			
				|  |  |         List<org.json.JSONObject> listSYSTEM = dbHelper.query("select * from system_organization where qlc_org_code='" + orgCode + "'");
 | 
	
		
			
				|  |  |         return listSYSTEM.get(0).get("code").toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * xml轉json
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param xml
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private static String XML2Json(String xml) {
 | 
	
		
			
				|  |  |         XMLSerializer xmlSerializer = new XMLSerializer();
 | 
	
		
			
				|  |  |         JSON json = xmlSerializer.read(xml);
 | 
	
		
			
				|  |  |         return json.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private JSONObject xml2json(Element root) {
 | 
	
		
			
				|  |  |         JSONObject obj = new JSONObject();
 | 
	
		
			
				|  |  |         obj.put(root.getName(), iterateElement(root));
 | 
	
		
			
				|  |  |         return obj;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |