Пример #1
0
        private bool _entity_OnRequest(string receiveData, ref string sendData)
        {
            //receiveData = SocketHelper.DeleteEOF(receiveData, _entity.Config.ReceiveEndSign);
            //sendData = receiveData.Replace('#', '$');
            //return;

            //using (StreamWriter sw = File.CreateText("d:\\msg.txt"))
            //{
            //    sw.Write(receiveData);
            //}

            string msgContent = XIMServerHelper.GetMessageContent(receiveData);

            if (msgContent == null || msgContent.Length < 1)
            {
                string strErrMsg = "Request message does not exist in request data";
                Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                sendData = XIMServerHelper.GetResponseFailed(XIMTransformHelper.GetTransactionID(), strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                return(false);
            }

            string            strName          = "";
            string            strQualifier     = "";
            string            strTransactionID = "";
            XIMInboundMessage msgConfig        = XIMServerHelper.GetMessageConfiguration(msgContent, ref strName, ref strQualifier, ref strTransactionID);

            if (msgConfig == null)
            {
                string strErrMsg = "Cannot find mapping rule configuration for current message (Name:" + strName + ", Qualifier:" + strQualifier + ").";
                Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                return(false);
            }

            XMLTransformer transformer = XMLTransformer.CreateFromMessage(msgConfig);

            if (msgConfig == null)
            {
                string strErrMsg = "Cannot find mapping XSL file for current message (XSL File:" + msgConfig.XSLFileName + ").";
                Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                return(false);
            }

            List <XmlNode> nodeList = new List <XmlNode>();

            XIMServerHelper.SplitItem(nodeList, msgContent);
            Program.Log.Write(nodeList.Count.ToString() + " XIM Item(s) are found in request message", XIMServerHelper.ModuleName);
            XIMServerHelper.SplitProcedureStep(nodeList);
            Program.Log.Write(nodeList.Count.ToString() + " XIM Item(s) splited by SPS are found in request message", XIMServerHelper.ModuleName);

            if (nodeList.Count > 0)
            {
                string[] dataSetXmlList = XIMServerHelper.Transform(transformer, nodeList);
                DataSet  dataSet        = XIMServerHelper.CreateDataSet(dataSetXmlList);
                if (dataSet == null)
                {
                    string strErrMsg = "Failed to transform to Data Set for current message.";
                    Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName);
                    sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                    return(false);
                }

                if (_service.SaveData(msgConfig.Rule, dataSet))
                {
                    Program.Log.Write("Save to GC Gateway database succeeded.");
                    sendData = XIMServerHelper.GetResponseSuccess(strTransactionID, Program.ConfigMgt.Config.SocketConfig);
                    return(true);
                }
                else
                {
                    string strErrMsg = "Save to GC Gateway database failed.";
                    Program.Log.Write(LogType.Error, strErrMsg, XIMServerHelper.ModuleName);
                    sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig);
                    return(false);
                }
            }

            return(false);
        }
Пример #2
0
        private void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            _timer.Stop();
            Program.Log.Write("# Timer tick begin.", XIMClientHelper.ModuleName);

            int index = 0;

            foreach (XIMOutboundMessage msg in Program.ConfigMgt.Config.Messages)
            {
                try
                {
                    index++;
                    List <XIMWrapper> resultList = null;
                    string            strPrefix  = "(" + index.ToString() + ") ";
                    Program.Log.Write(strPrefix + "Begin processing message (" + msg.GWEventType.ToString() + ") to (" + msg.HL7EventType.ToString() + ").", XIMClientHelper.ModuleName);

                    #region Data Processing

                    DataSet dataSet = _service.RequestData(msg.Rule, null);
                    if (dataSet == null)
                    {
                        Program.Log.Write(LogType.Warning, "Query data from GC Gateway database failed.");
                    }
                    else
                    {
                        List <DataSet> splitedDataSet = XIMClientHelper.SplitDataSet(dataSet);
                        if (splitedDataSet == null || splitedDataSet.Count < 1)
                        {
                            Program.Log.Write(LogType.Warning, "No record found in GC Gateway database query result.");
                        }
                        else
                        {
                            Program.Log.Write(strPrefix + "Query data from GC Gateway database succeeded (Record count:" + splitedDataSet.Count.ToString() + ").");
                            XMLTransformer transformer = XMLTransformer.CreateFromMessage(msg);
                            if (transformer == null)
                            {
                                Program.Log.Write(LogType.Warning, "Cannot find mapping XSL file for current message (XSL File:" + msg.XSLFileName + ").");
                            }
                            else
                            {
                                resultList = XIMClientHelper.Transform(transformer, splitedDataSet);
                                if (resultList == null || resultList.Count < 1)
                                {
                                    Program.Log.Write(LogType.Warning, "Transform from DataSet xml to XIM xml failed (XSL File:" + msg.XSLFileName + ").");
                                }
                                else
                                {
                                    Program.Log.Write(strPrefix + "Transform from DataSet xml to XIM xml succeeded (Document count:" + resultList.Count.ToString() + ").");
                                    if (resultList.Count > 1 && Program.ConfigMgt.Config.EnableDataMerging)
                                    {
                                        int pkIndex = Program.ConfigMgt.Config.DataMergingPKIndex;
                                        resultList = XIMClientHelper.MergeProcedureStep(resultList, pkIndex);
                                        if (resultList == null || resultList.Count < 1)
                                        {
                                            Program.Log.Write(LogType.Warning, "SPS merging failed (PK Index:" + pkIndex.ToString() + ").");
                                        }
                                        else
                                        {
                                            Program.Log.Write(strPrefix + "SPS merging succeeded (PK Index:" + pkIndex.ToString() + ") (Document count:" + resultList.Count.ToString() + ").");
                                        }
                                    }
                                    else
                                    {
                                        Program.Log.Write(strPrefix + "Skip SPS merging.");
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    #region Data Sending

                    if (resultList == null || resultList.Count < 1)
                    {
                        Program.Log.Write(LogType.Warning, "No availiable XIM document, skip data sending.");
                    }
                    else
                    {
                        int ximIndex = 1;
                        Program.Log.Write(strPrefix + "Sending XIM document...");
                        foreach (XIMWrapper xim in resultList)
                        {
                            string ximLogIndex = "(" + (ximIndex++).ToString() + "/" + resultList.Count.ToString() + ")";

                            bool result = false;
                            if (Program.ConfigMgt.Config.OutboundToFile)
                            {
                                result = !XIMClientHelper.SaveToFile(Program.ConfigMgt.Config, xim.XIMDocument);
                            }
                            else
                            {
                                SocketResult res = SocketHelper.SendData(Program.ConfigMgt.Config.SocketConfig, xim.XIMDocument);
                                result = (res == null || res.Type != SocketResultType.Success);
                            }

                            if (result)
                            {
                                Program.Log.Write(LogType.Warning, "Send XIM document failed. " + ximLogIndex);
                            }
                            else
                            {
                                Program.Log.Write(strPrefix, "Send XIM document succeeded. " + ximLogIndex);
                                if (_service.DischargeData(xim.GUIDList.ToArray()))
                                {
                                    Program.Log.Write(strPrefix, "Discharge data succeeded. " + ximLogIndex);
                                }
                                else
                                {
                                    Program.Log.Write(LogType.Warning, "Discharge data failed. " + ximLogIndex);
                                }
                            }
                        }
                        Program.Log.Write(strPrefix + "Send XIM document completed.");
                    }

                    #endregion

                    Program.Log.Write(strPrefix + "End processing message.", XIMClientHelper.ModuleName);
                }
                catch (Exception err)
                {
                    Program.Log.Write(err);
                }
            }

            Program.Log.Write("# Timer tick end.", XIMClientHelper.ModuleName);
            _timer.Start();
        }