using AIMSExtension;
using DCSoft.Writer.Data;
using HelperDB;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Xml;
namespace DocumentManagement
{
    public class DocumentDAL
    {
        private static DocumentDAL _Instance = null;
        /// 
        /// 对象静态实例
        /// 
        public static DocumentDAL Instance
        {
            get
            {
                if (_Instance == null)
                {
                    _Instance = DocumentDAL.Instance;
                }
                return _Instance;
            }
        }
        static DocumentDAL()
        {
            LoadKBLibaray();
        }
        //public static string OperatorNo = "";
        public static DCSoft.Writer.Data.KBLibrary Lib;
        /// 
        ///  系统时间
        /// 
        /// 系统时间
        public DateTime SystemDate()
        {
            string sqlStr = "select getdate() as SysDate";
            DataTable dt = DbHelperSQL.GetDataTable(sqlStr);
            return DateTime.Parse(dt.Rows[0]["SysDate"].ToString());
        }
        /// 
        /// 知识树节点排序
        /// 
        /// 节点list
        internal static void SetOrders(List ls)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                for (int i = 0; i < ls.Count; i++)
                {
                    strSql.Append(" Update KB_LIST set ");
                    strSql.Append(" LISTINDEX = '" + (i + 1) + "'");
                    strSql.Append(" where KB_SEQ ='" + ls[i] + "' ");
                }
                DbHelperSQL.ExecuteTrasaction(strSql.ToString());
            }
            catch (Exception ex)
            {
                DbHelperSQL.RollbackTrans();
                throw new Exception(ex.Message);
            }
        }
        /// 
        /// 模板节点排序
        /// 
        /// 节点list
        public static void SetTempOrders(List ls)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                for (int i = 0; i < ls.Count; i++)
                {
                    strSql.Append(" Update PrintTemplate set ");
                    strSql.Append(" TemplateOrder = " + (i + 1) + "");
                    strSql.Append(" where Id =" + ls[i] + " ");
                }
                DbHelperSQL.ExecuteTrasaction(strSql.ToString());
            }
            catch (Exception ex)
            {
                DbHelperSQL.RollbackTrans();
                throw new Exception(ex.Message);
            }
        }
        /// 
        /// 查询文档目录
        /// 
        /// 
        public static List LoadTemplateTree()
        {
            List result = new List();
            StringBuilder sb = new StringBuilder();
            sb.Append("Select ");
            sb.Append(" [Id] ,");
            sb.Append(" ParentId,");
            sb.Append(" XmlFileName");
            sb.Append(" From PrintTemplate");
            sb.Append(" where IsValid = 1");
            sb.Append(" Order By TemplateOrder");
            sb.Append(" ");
            DataTable dt = DbHelperSQL.GetDataTable(sb.ToString());
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                result.Add(new PrintTemplate()
                {
                    Id = int.Parse(dt.Rows[i]["Id"].ToString()),
                    ParentId = int.Parse(dt.Rows[i]["ParentId"].ToString()),
                    XmlFileName = dt.Rows[i]["XmlFileName"].ToString()
                });
            }
            return result;
        }
        /// 
        /// 根据工号权限、患者id查询文档目录
        /// 
        /// 工号
        /// 患者id
        /// 
        public static List LoadTemplateTree(int patientId)
        {
            PrintTemplate model = new PrintTemplate();
            StringBuilder sb = new StringBuilder();
            sb.Append(" Select ");
            sb.Append("  pt.[Id] ,");
            sb.Append("  ParentId,");
            sb.Append("  pt.XmlFileName");
            if (patientId > 0)
            {
                sb.Append("  ,b.Id PrintDocumentId");
            }
            sb.Append("  From PrintTemplate pt");
            sb.Append("  left join UserTempPurview u");
            sb.Append("  on pt.Id = u.TemplateId");
            sb.Append("  left join [Role] r");
            sb.Append("  on r.Id = u.RoleId");
            sb.Append("  left join Person p");
            sb.Append("  on p.RoleId = r.Id");
            if (patientId > 0)
            {
                sb.Append("  outer apply (select pd.Id from PrintDocument pd ");
                sb.Append("  where pd.TemplateId = pt.Id");
                sb.Append("  and pd.PatientId = " + patientId);
                sb.Append("  and pd.Isvalid = 1");
                sb.Append("  ) b");
            }
            sb.Append("  where ");
            sb.Append("  1=1");
            sb.Append("  and p.No = '" + AIMSExtension.PublicMethod.OperatorNo + "'");
            sb.Append("  and pt.IsValid = 1");
            sb.Append("  and r.IsValid = 1");
            sb.Append("  and p.IsValid = 1");
            sb.Append(" Order By TemplateOrder");
            DataTable dt = DbHelperSQL.GetDataTable(sb.ToString());
            List result = new List();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                result.Add(new PrintTemplate()
                {
                    Id = int.Parse(dt.Rows[i]["Id"].ToString()),
                    ParentId = int.Parse(dt.Rows[i]["ParentId"].ToString()),
                    XmlFileName = dt.Rows[i]["XmlFileName"].ToString(),
                    PrintDocumentId = (dt.Columns.Count > 3 && !dt.Rows[i]["PrintDocumentId"].ToString().Equals(string.Empty))
                    ? int.Parse(dt.Rows[i]["PrintDocumentId"].ToString()) : 0
                });
            }
            return result;
        }
        /// 
        /// 从数据库中加载知识库
        /// 
        public static void LoadKBLibaray()
        {
            try
            {
                //if (Lib != null)
                //{
                //    return;
                //}
                Lib = new KBLibrary();
                DataTable dt = DbHelperSQL.GetDataTable(@"Select
                KB_SEQ ,
                KB_PARENT ,
                KB_NAME ,
                KB_VALUE ,
                KB_Reflection,
                KB_STYLE ,
                ListIndex ,
                Reload
            From KB_List
            where IsValid = 1
            Order By KB_PARENT , LISTINDEX , KB_NAME");
                List list = new List();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    KBEntry item = new KBEntry();
                    item.ID = dt.Rows[i][0].ToString();
                    item.ParentID = dt.Rows[i][1].ToString();
                    item.Text = dt.Rows[i][2].ToString();
                    item.Value = dt.Rows[i][3].ToString().Replace("''", "'");
                    item.Text2 = dt.Rows[i][4].ToString();
                    if (Enum.IsDefined(typeof(KBEntryStyle), Convert.ToInt32(dt.Rows[i][5])))
                    {
                        item.Style = (KBEntryStyle)Convert.ToInt32(dt.Rows[i][5]);
                    }
                    else
                    {
                        item.Style = KBEntryStyle.List;
                    }
                    item.SpellCode = dt.Rows[i][7].ToString();
                    //if (dt.Rows[i][5].ToString() == KBEntryStyle.ListSQL.ToString())
                    //{
                    //    item.Style = KBEntryStyle.ListSQL;
                    //}
                    //else
                    //{
                    //    item.Style = KBEntryStyle.List;
                    //}
                    list.Add(item);
                }
                using (IDataReader reader = DbHelperSQL.GetDataReader(@" Select  * FROM KB_ITEM where IsValid = 1 ORDER BY KB_SEQ , LISTINDEX , ITEM_TEXT "))
                {
                    //IDataReader reader = cmd.ExecuteReader();
                    KBEntry currentEnty = null;
                    string bad_kb_seq = null;
                    while (reader.Read())
                    {
                        string kb_seq = reader.GetString(1);
                        if (kb_seq == bad_kb_seq)
                        {
                            // 错误的知识点节点编号,跳过记录
                            continue;
                        }
                        if (currentEnty == null || currentEnty.ID != kb_seq)
                        {
                            // 查找当前知识点
                            currentEnty = null;
                            bad_kb_seq = null;
                            foreach (KBEntry entry in list)
                            {
                                if (entry.ID == kb_seq)
                                {
                                    currentEnty = entry;
                                    break;
                                }
                            }//foreach
                        }
                        if (currentEnty == null)
                        {
                            bad_kb_seq = kb_seq;
                            continue;
                        }
                        if (reader.IsDBNull(4) == false)
                        {
                            int itemStyle = Convert.ToInt32(reader.GetValue(4));
                            if (itemStyle == 100)
                            {
                                // 遇到模板节点,添加知识库子节点
                                if (currentEnty.SubEntries == null)
                                {
                                    currentEnty.SubEntries = new KBEntryList();
                                }
                                KBEntry subEntry = new KBEntry();
                                subEntry.Style = KBEntryStyle.Template;
                                subEntry.Text = Convert.ToString(reader.GetValue(2));
                                subEntry.Value = Convert.ToString(reader.GetValue(3));
                                currentEnty.SubEntries.Add(subEntry);
                                continue;
                            }
                        }
                        if (currentEnty.ListItems == null)
                        {
                            currentEnty.ListItems = new ListItemCollection();
                        }
                        DCSoft.Writer.Data.ListItem item = new ListItem();
                        item.Text = reader.GetString(2);
                        item.Value = reader.GetString(3);
                        currentEnty.ListItems.Add(item);
                    }
                    reader.Close();
                    // 对知识点进行排列,达成上下级关系
                    KBEntry currentParent = null;
                    string rootID = null;
                    Lib.KBEntries = new KBEntryList();
                    //this.KBEntries.AddRange(list);
                    foreach (KBEntry item in list)
                    {
                        if (item.ParentID == rootID)
                        {
                            Lib.KBEntries.Add(item);
                            continue;
                        }
                        if (currentParent == null || currentParent.ID != item.ParentID)
                        {
                            currentParent = null;
                            // 找到
                            foreach (KBEntry item2 in list)
                            {
                                if (item2.ID == item.ParentID)
                                {
                                    currentParent = item2;
                                    break;
                                }
                            }
                            if (currentParent == null)
                            {
                                // 没有找到上级节点,则为根节点
                                rootID = item.ParentID;
                                Lib.KBEntries.Add(item);
                                continue;
                            }
                        }
                        if (currentParent.SubEntries == null)
                        {
                            currentParent.SubEntries = new KBEntryList();
                        }
                        currentParent.SubEntries.Add(item);
                    }//foreach
                }
            }
            catch (Exception ex)
            {
                PublicMethod.WriteLog(ex);
            }
        }
        /// 
        /// 返回视图映射列表
        /// 
        /// 
        public static DataTable GetReflectionList(string Vw_Info)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("   Select name,isnull(kb.KB_SEQ,'')as KB_SEQ,kb.ReLoad FROM SysColumns syscn   ");
            strSql.Append(" left join (select KB_SEQ,KB_Reflection,ReLoad from  KB_LIST where isvalid =1) kb ");
            strSql.Append(" on syscn.name = kb.KB_Reflection ");
            strSql.Append(" Where id=Object_Id('" + Vw_Info + "') ");
            DataTable dt = DbHelperSQL.GetDataTable(strSql.ToString());
            return dt;
        }
        public static DataTable GetPatientDoc(string PatientId)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("  SELECT *  FROM [dbo].[PrintDocument] where PatientId='" + PatientId + "' ");
            DataTable dt = DbHelperSQL.GetDataTable(strSql.ToString());
            return dt;
        }
        internal static void InsertEntry(KBEntry entry)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" Insert into [KB_LIST]");
                strSql.Append(" values( ");
                strSql.Append(" '" + entry.ID + "',");
                strSql.Append(" '" + entry.ParentID + "',");
                strSql.Append(" '" + entry.Text + "',");
                strSql.Append(" '" + entry.Value.Replace("'", "''") + "',");
                strSql.Append(" '" + entry.Text2 + "',");
                strSql.Append(" '" + Convert.ToInt32(entry.Style) + "',");
                strSql.Append(" (select isnull(MAX(listindex),0)+1  from [KB_LIST] where KB_PARENT = '" + entry.ParentID + "' and IsValid = 1),");
                strSql.Append(" 1,");
                strSql.Append(" '" + AIMSExtension.PublicMethod.OperatorNo + "',");
                strSql.Append(" getdate(),");
                strSql.Append(" '" + entry.SpellCode + "'");
                strSql.Append(" )");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
                if (entry.Style != KBEntryStyle.ListSQL && entry.ListItems != null)
                {
                    RefreshListItems(entry);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private static void RefreshListItems(KBEntry entry)
        {
            ListItemCollection list = entry.ListItems;
            foreach (ListItem item in list)
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" Insert into [KB_ITEM]");
                strSql.Append(" values( ");
                strSql.Append(" '" + entry.ID + "',");
                strSql.Append(" '" + item.Text + "',");
                strSql.Append(" '" + item.Value + "',");
                strSql.Append("  (select isnull(MAX(listindex),0)+1 from [KB_ITEM] where [KB_SEQ] = '" + entry.ID + "' and IsValid = 1) ,");
                strSql.Append(" null ,");
                strSql.Append(" 1 ,");
                strSql.Append(" '" + AIMSExtension.PublicMethod.OperatorNo + "',");
                strSql.Append(" getdate()");
                strSql.Append(" )");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
        }
        internal static void UpdateEntry(KBEntry entry)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" update [KB_LIST] set ");
                strSql.Append(" [KB_PARENT] = '" + entry.ParentID + "',");
                strSql.Append(" [KB_NAME] = '" + entry.Text + "',");
                strSql.Append(" [KB_VALUE] = '" + entry.Value.Replace("'", "''") + "',");
                strSql.Append(" [KB_Reflection] = '" + entry.Text2 + "',");
                strSql.Append(" [KB_STYLE] = '" + Convert.ToInt32(entry.Style) + "',");
                strSql.Append("OperatorNo='" + AIMSExtension.PublicMethod.OperatorNo + "',");
                strSql.Append("OperateDate= getdate(),");
                strSql.Append("Reload='" + entry.SpellCode + "'");
                strSql.Append(" where KB_SEQ = '" + entry.ID + "'");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
                if (entry.Style != KBEntryStyle.ListSQL)
                {
                    strSql = new StringBuilder();
                    strSql.Append(" update [KB_ITEM] set ");
                    strSql.Append(" [IsValid] = 0,");
                    strSql.Append("OperatorNo='" + AIMSExtension.PublicMethod.OperatorNo + "',");
                    strSql.Append("OperateDate= getdate()");
                    strSql.Append(" where KB_SEQ = '" + entry.ID + "'");
                    DbHelperSQL.ExecNonQuery(strSql.ToString());
                    if (entry.ListItems != null)
                    {
                        RefreshListItems(entry);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        internal static void DeleteEntry(string id)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" update [KB_LIST] set ");
                strSql.Append(" [IsValid] = 0,");
                strSql.Append("OperatorNo='" + AIMSExtension.PublicMethod.OperatorNo + "',");
                strSql.Append("OperateDate= getdate()");
                strSql.Append(" where KB_SEQ = '" + id + "'");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
                strSql = new StringBuilder();
                strSql.Append(" update [KB_ITEM] set ");
                strSql.Append(" [IsValid] = 0,");
                strSql.Append("OperatorNo='" + AIMSExtension.PublicMethod.OperatorNo + "',");
                strSql.Append("OperateDate= getdate()");
                strSql.Append(" where KB_SEQ = '" + id + "'");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
                DataTable dt = DbHelperSQL.GetDataTable(" select KB_SEQ from KB_LIST where KB_PARENT = '" + id + "'");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DeleteEntry(dt.Rows[i][0].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static string GetEventXml(int templateId)
        {
            string result = string.Empty;
            try
            {
                DataTable dt = DbHelperSQL.GetDataTable("select [XmlStatic]  from PrintTemplate where [Id] = '" + templateId + "' and IsValid=1 ");
                if (dt.Rows.Count > 0)
                {
                    result = dt.Rows[0]["XmlStatic"].ToString();
                    //model.OperatorDate = DateTime.Parse(dt.Rows[0]["OperatorDate"].ToString(""));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }
        public static PrintTemplate GetTemplatebyId(int templateId)
        {
            PrintTemplate model = new PrintTemplate();
            string result = string.Empty;
            try
            {
                DataTable dt = DbHelperSQL.GetDataTable("select * from [PrintTemplate]  where [Id] = '" + templateId + "' and IsValid=1 ");
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                    model.ParentId = int.Parse(dt.Rows[0]["ParentId"].ToString());
                    model.XmlFileName = dt.Rows[0]["XmlFileName"].ToString();
                    model.XmlFile = dt.Rows[0]["XmlFile"].ToString();
                    model.XmlStatic = dt.Rows[0]["XmlStatic"].ToString();
                    model.TemplateOrder = Convert.ToInt16(dt.Rows[0]["TemplateOrder"]);
                    model.OperatorNo = dt.Rows[0]["OperatorNo"].ToString();
                    //model.OperatorDate = DateTime.Parse(dt.Rows[0]["OperatorDate"].ToString(""));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return model;
        }
        public static PrintDocument GetDocumentbyId(int docId)
        {
            PrintDocument model = new PrintDocument();
            string result = string.Empty;
            try
            {
                DataTable dt = DbHelperSQL.GetDataTable("select * from [PrintDocument]  where [Id] = '" + docId + "' and IsValid=1 ");
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                    model.PatientId = int.Parse(dt.Rows[0]["PatientId"].ToString());
                    model.TemplateId = int.Parse(dt.Rows[0]["TemplateId"].ToString());
                    model.XmlFileName = dt.Rows[0]["XmlFileName"].ToString();
                    model.XmlFile = dt.Rows[0]["XmlFile"].ToString();
                    model.XmlStatic = dt.Rows[0]["XmlStatic"].ToString();
                    model.OperatorNo = dt.Rows[0]["OperatorNo"].ToString();
                    //model.OperatorDate = DateTime.Parse(dt.Rows[0]["OperatorDate"].ToString(""));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return model;
        }
        /// 
        /// 根据模板名称查询文档
        /// 
        /// 模板名称
        /// 患者Id
        /// 
        public static PrintDocument GetDocumentbyName(string tempName, int patientId)
        {
            PrintDocument model = new PrintDocument();
            string result = string.Empty;
            try
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("select ");
                sb.Append(" pd.Id,");
                sb.Append(" pd.PatientId,");
                sb.Append(" pd.TemplateId,");
                sb.Append(" pd.XmlFileName,");
                sb.Append(" pd.XmlFile,");
                sb.Append(" pd.XmlStatic,");
                sb.Append(" pd.IsValid,");
                sb.Append(" pd.OperatorNo,");
                sb.Append(" pd.OperatorDate");
                sb.Append(" from PrintDocument pd");
                sb.Append(" where ");
                sb.Append(" pd.PatientId = " + patientId);
                sb.Append(" and pd.XmlFileName = '" + tempName + "'");
                sb.Append(" and pd.IsValid = 1");
                sb.Append(" union all");
                sb.Append(" select ");
                sb.Append(" 0,");
                sb.Append(" 0,");
                sb.Append(" Id,");
                sb.Append(" pt.XmlFileName,");
                sb.Append(" pt.XmlFile,");
                sb.Append(" null,");
                sb.Append(" '',");
                sb.Append(" null,");
                sb.Append(" null");
                sb.Append(" from PrintTemplate pt");
                sb.Append(" where pt.IsValid = 1");
                sb.Append(" and pt.XmlFileName = '" + tempName + "'");
                DataTable dt = DbHelperSQL.GetDataTable(sb.ToString());
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                    model.PatientId = int.Parse(dt.Rows[0]["PatientId"].ToString());
                    model.TemplateId = int.Parse(dt.Rows[0]["TemplateId"].ToString());
                    model.XmlFileName = dt.Rows[0]["XmlFileName"].ToString();
                    model.XmlFile = dt.Rows[0]["XmlFile"].ToString();
                    model.XmlStatic = dt.Rows[0]["XmlStatic"].ToString();
                    model.OperatorNo = dt.Rows[0]["OperatorNo"].ToString();
                    //model.OperatorDate = DateTime.Parse(dt.Rows[0]["OperatorDate"].ToString(""));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return model;
        }
        public static void InsertTemplate(PrintTemplate model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into [PrintTemplate](");
                strSql.Append("[ParentId],[XmlFileName],[XmlFile],[XmlStatic],TemplateOrder,");
                //strSql.Append(" [PermissionLv],");
                strSql.Append(" [IsValid],[OperatorNo],[OperatorDate]");
                strSql.Append(")");
                strSql.Append(" values (");
                strSql.Append("'" + model.ParentId + "',");
                strSql.Append("'" + model.XmlFileName + "',");
                strSql.Append("'" + model.XmlFile + "',");
                strSql.Append("'" + model.XmlStatic + "',");
                //strSql.Append("" + model.PermissionLv + ",");
                //strSql.Append("" + model.TemplateOrder + ",");
                strSql.Append(" (select isnull(max(TemplateOrder)+1,1) from PrintTemplate where IsValid = 1 and ParentId = " + model.ParentId + "),");
                strSql.Append(" 1,");
                strSql.Append("'" + model.OperatorNo + "',");
                strSql.Append(" getdate() ");
                strSql.Append(")");
                strSql.Append(" select Id from [PrintTemplate] where Id = @@Identity");
                DataTable dt = DbHelperSQL.GetDataTable(strSql.ToString());
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void InsertPrintDocument(PrintDocument model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into [PrintDocument](");
                strSql.Append("[PatientId],TemplateId,[XmlFileName],[XmlFile],[XmlStatic],");
                strSql.Append(" [IsValid],[OperatorNo],[OperatorDate]");
                strSql.Append(")");
                strSql.Append(" values (");
                strSql.Append("" + model.PatientId + ",");
                strSql.Append("" + model.TemplateId + ",");
                strSql.Append("'" + model.XmlFileName + "',");
                strSql.Append("'" + model.XmlFile + "',");
                strSql.Append("'" + model.XmlStatic + "',");
                strSql.Append(" 1,");
                strSql.Append("'" + model.OperatorNo + "',");
                strSql.Append(" getdate() ");
                strSql.Append(")");
                strSql.Append(" select Id from [PrintDocument] where Id = @@Identity");
                DataTable dt = DbHelperSQL.GetDataTable(strSql.ToString());
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void UpdateTemplate(PrintTemplate model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintTemplate] set");
                strSql.Append(" ParentId=" + model.ParentId + ",");
                strSql.Append(" XmlFileName='" + model.XmlFileName + "',");
                strSql.Append(" XmlFile='" + model.XmlFile + "',");
                strSql.Append(" XmlStatic='" + model.XmlStatic + "',");
                strSql.Append(" OperatorNo='" + model.OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate()");
                strSql.Append(" where Id=" + model.Id + " ");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void UpdatePrintDocument(PrintDocument model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintDocument] set");
                strSql.Append(" PatientId=" + model.PatientId + ",");
                strSql.Append(" TemplateId=" + model.TemplateId + ",");
                strSql.Append(" XmlFileName='" + model.XmlFileName + "',");
                strSql.Append(" XmlFile='" + model.XmlFile + "',");
                strSql.Append(" XmlStatic='" + model.XmlStatic + "',");
                strSql.Append(" OperatorNo='" + model.OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate()");
                strSql.Append(" where Id=" + model.Id + " ");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void UpdateTemplateName(PrintTemplate model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintTemplate] set");
                strSql.Append(" XmlFileName='" + model.XmlFileName + "',");
                strSql.Append(" OperatorNo='" + model.OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate()");
                strSql.Append(" where Id=" + model.Id + " ");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void DeleteTemplate(PrintTemplate model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintTemplate] set");
                strSql.Append(" isvalid = 0,");
                strSql.Append(" OperatorNo='" + model.OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate()");
                strSql.Append(" where Id=" + model.Id + " or  ParentId=" + model.Id);
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// 
        /// 根据姓名或者住院号获取患者信息
        /// 
        /// sql条件
        /// 
        public static DataTable GetPatients(string sql)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" select *");
                strSql.Append(" from V_OperationRecordALL where 1=1");
                strSql.Append(sql);
                return DbHelperSQL.GetDataTable(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static DataTable GetLisResultNos(string patientNo)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" select LIS_ITEM_CODE,LIS_ITEM_CODEName,UpdateTime  from LisResult where");
                strSql.Append("   PATIENT_ID = '" + patientNo + "' group by LIS_ITEM_CODE,LIS_ITEM_CODEName,UpdateTime ");
                return DbHelperSQL.GetDataTable(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static DataTable GetLisResultItems(string patientNo, string LIS_ITEM_CODE)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" select *  from LisResult where");
                strSql.Append("   PATIENT_ID = '" + patientNo + "' and LIS_ITEM_CODE= '" + LIS_ITEM_CODE + "' ");
                return DbHelperSQL.GetDataTable(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static DataTable GetPacsResultItems(string patientNo)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" select *  from PacsResult where");
                strSql.Append("   PATIENTID = '" + patientNo + "' ");
                return DbHelperSQL.GetDataTable(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// 
        /// 根据模板名称查询文档
        /// 
        /// 模板名称
        /// 患者Id
        /// 
        public static PrintDocument GetDocumentbyName2(string tempName, int patientId)
        {
            PrintDocument model = new PrintDocument();
            string result = string.Empty;
            try
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("select ");
                sb.Append(" pd.Id,");
                sb.Append(" pd.PatientId,");
                sb.Append(" pd.TemplateId,");
                sb.Append(" pd.XmlFileName,");
                sb.Append(" pd.XmlFile,");
                sb.Append(" pd.XmlStatic,");
                sb.Append(" pd.IsValid,");
                sb.Append(" pd.OperatorNo,");
                sb.Append(" pd.OperatorDate");
                sb.Append(" from PrintDocument pd");
                sb.Append(" where ");
                sb.Append(" pd.PatientId = " + patientId);
                sb.Append(" and pd.XmlFileName = '" + tempName + "'");
                sb.Append(" and pd.IsValid = 1");
                DataTable dt = DbHelperSQL.GetDataTable(sb.ToString());
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                    model.PatientId = int.Parse(dt.Rows[0]["PatientId"].ToString());
                    model.TemplateId = int.Parse(dt.Rows[0]["TemplateId"].ToString());
                    model.XmlFileName = dt.Rows[0]["XmlFileName"].ToString();
                    model.XmlFile = dt.Rows[0]["XmlFile"].ToString();
                    model.XmlStatic = dt.Rows[0]["XmlStatic"].ToString();
                    model.OperatorNo = dt.Rows[0]["OperatorNo"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return model;
        }
        public static XmlDocument GetPrintDocumentXml(string tempName, int patientId)
        {
            PrintDocument model = GetDocumentbyName2(tempName, patientId);
            XmlDocument doc = new XmlDocument();
            if (model.XmlStatic != null && model.XmlStatic.Length > 0)
            {
                doc.LoadXml(model.XmlStatic);
            }
            return doc;
        }
        public static string GetDocumentXmlStatic(string tempName, int patientId, string dictName)
        {
            string Value = "";
            XmlDocument doc = GetPrintDocumentXml(tempName, patientId);
            XmlElement root = doc.DocumentElement;
            if (root != null)
            {
                foreach (XmlNode row in root.ChildNodes)
                {
                    if (row.Attributes["Name"].InnerText == dictName)
                        Value = row.InnerText.Trim();//测试方法
                }
            }
            return Value;
        }
        public static PrintDocument GetDocumentbyName(string tempName, int patientId, int RecordId)
        {
            PrintDocument model = new PrintDocument();
            string result = string.Empty;
            try
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("select ");
                sb.Append(" pd.Id,");
                sb.Append(" pd.PatientId,");
                sb.Append(" pd.TemplateId,");
                sb.Append(" pd.XmlFileName,");
                sb.Append(" pd.XmlFile,");
                sb.Append(" pd.XmlStatic,");
                sb.Append(" pd.IsValid,");
                sb.Append(" pd.OperatorNo,");
                sb.Append(" pd.OperatorDate,");
                sb.Append(" pd.RecordId,");
                sb.Append(" pd.Remark,");
                sb.Append(" pd.OrderNo");
                sb.Append(" from PrintDocument pd");
                sb.Append(" where ");
                sb.Append(" pd.PatientId = " + patientId);
                sb.Append(" and pd.XmlFileName = '" + tempName + "'");
                sb.Append(" and pd.RecordId = '" + RecordId + "'");
                sb.Append(" and pd.IsValid = 1");
                sb.Append(" union all");
                sb.Append(" select ");
                sb.Append(" 0,");
                sb.Append(" 0,");
                sb.Append(" Id,");
                sb.Append(" pt.XmlFileName,");
                sb.Append(" pt.XmlFile,");
                sb.Append(" null,");
                sb.Append(" '',");
                sb.Append(" null,");
                sb.Append(" null,");
                sb.Append(" null,");
                sb.Append(" null,");
                sb.Append(" null");
                sb.Append(" from PrintTemplate pt");
                sb.Append(" where pt.IsValid = 1");
                sb.Append(" and pt.XmlFileName = '" + tempName + "'");
                DataTable dt = DbHelperSQL.GetDataTable(sb.ToString());
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                    model.PatientId = int.Parse(dt.Rows[0]["PatientId"].ToString());
                    model.TemplateId = int.Parse(dt.Rows[0]["TemplateId"].ToString());
                    model.XmlFileName = dt.Rows[0]["XmlFileName"].ToString();
                    model.XmlFile = dt.Rows[0]["XmlFile"].ToString();
                    model.XmlStatic = dt.Rows[0]["XmlStatic"].ToString();
                    model.OperatorNo = dt.Rows[0]["OperatorNo"].ToString();
                    //model.OperatorDate = DateTime.Parse(dt.Rows[0]["OperatorDate"].ToString("")); 
                    model.RecordId = dt.Rows[0]["RecordId"].ToString();
                    model.Remark = dt.Rows[0]["Remark"].ToString();
                    model.OrderNo = dt.Rows[0]["OrderNo"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return model;
        }
        public static void InsertPrintDocument2(PrintDocument model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into [PrintDocument](");
                strSql.Append("[PatientId],TemplateId,[XmlFileName],[XmlFile],[XmlStatic],");
                strSql.Append(" [IsValid],[OperatorNo],[OperatorDate],[RecordId],[Remark],[OrderNo]");
                strSql.Append(")");
                strSql.Append(" values (");
                strSql.Append("" + model.PatientId + ",");
                strSql.Append("" + model.TemplateId + ",");
                strSql.Append("'" + model.XmlFileName + "',");
                strSql.Append("'" + model.XmlFile + "',");
                strSql.Append("'" + model.XmlStatic + "',");
                strSql.Append(" 1,");
                strSql.Append("'" + model.OperatorNo + "',");
                strSql.Append(" getdate(), ");
                strSql.Append("'" + model.RecordId + "',");
                strSql.Append("'" + model.Remark + "',");
                strSql.Append("'" + model.OrderNo + "'");
                strSql.Append(")");
                strSql.Append(" select Id from [PrintDocument] where Id = @@Identity");
                DataTable dt = DbHelperSQL.GetDataTable(strSql.ToString());
                if (dt.Rows.Count > 0)
                {
                    model.Id = int.Parse(dt.Rows[0]["Id"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void UpdatePrintDocument2(PrintDocument model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintDocument] set");
                strSql.Append(" PatientId=" + model.PatientId + ",");
                strSql.Append(" TemplateId=" + model.TemplateId + ",");
                strSql.Append(" XmlFileName='" + model.XmlFileName + "',");
                strSql.Append(" XmlFile='" + model.XmlFile + "',");
                strSql.Append(" XmlStatic='" + model.XmlStatic + "',");
                strSql.Append(" OperatorNo='" + model.OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate(),");
                strSql.Append(" RecordId='" + model.RecordId + "',");
                strSql.Append(" Remark='" + model.Remark + "',");
                strSql.Append(" OrderNo='" + model.OrderNo + "'");
                strSql.Append(" where Id=" + model.Id + " ");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void DeletePrintDocument(PrintDocument model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("delete from [PrintDocument] "); 
                strSql.Append(" where Id=" + model.Id);
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void DeletePrintDocument2(PrintDocument model)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintDocument] set");
                strSql.Append(" isvalid = 0,");
                strSql.Append(" OperatorNo='" + model.OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate()");
                strSql.Append(" where Id=" + model.Id);
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void DeletePrintDocument3(string FileName, int PatientId, string OperatorNo)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("update [PrintDocument] set");
                strSql.Append(" isvalid = 0,");
                strSql.Append(" OperatorNo='" + OperatorNo + "',");
                strSql.Append(" OperatorDate= getdate()");
                strSql.Append(" where  PatientId=" + PatientId);
                strSql.Append(" and  XmlFileName='" + FileName + "'");
                DbHelperSQL.ExecNonQuery(strSql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}