using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using AIMSModel;
using HelperDB;
using DrawGraph;
namespace AIMSBLL
{
    public class BOperationReview
    {
        public static DataTable GetOperationReviewDataTable(string MdrecNo, string PatientName, string OperationBeginTime, string OperationEndTime)
        {
            string strSql = " SELECT of1.PatientId, of1.ApplyId, of1.MdrecNo, of1.ArchivesNo, of1.PatientName,of1.ApplyDepName, of1.PatientKind," +
                            " of1.Sex, of1.BirthDay, of1.Height, of1.[Weight], of1.BloodType," +
                            " of1.RHBloodType, of1.Illdistrict, of1.SickBed, of1.OperationType," +
                            " of1.[State],od.DiagnoseInfoName, od.OperationInfoName," +
                            " od.OperationBeginTime,od.OperationEndTime," +
                            " od.AnaesthesiaMethodName, od.OperationCutTypeName," +
                            " od.OperationBodyPositionName, od.OperationPositionName," +
                            " od.OperationDoctor, od.Assistant, od.AnesthesiaDoctor," +
                            " od.Nurse, od.Remarks,of1.MedicalRecord,of1.MedicalRecordTime  FROM V_OperationDoing od" +
                            "  LEFT JOIN V_OperationFront of1 ON of1.PatientId = od.PatientId WHERE (of1.MdrecNo ='" + MdrecNo + "' OR of1.PatientName LIKE '%" + PatientName + "%')" +
                            " AND od.OperationBeginTime >='" + OperationBeginTime + "' AND  od.OperationBeginTime <'" + OperationEndTime + "' AND " +
                            "   od.[State]  IN ('手术结束','麻醉恢复结束')";
            return HelperDB.DbHelperSQL.GetDataTable(strSql.ToString());
        }
        public static DataTable GetOperationPlanDataTable(DateTime BeginDate, DateTime EndDate, string DepName)
        {
            string strSql = "SELECT of1.ApplyId,OperationRoom,PlanOrder ,OrderOperationTime  ,  of1.ApplyDepName,of1.SickBed, of1.MdrecNo, of1.PatientName, of1.Sex, of1.Age,of1.ApplyDiagnoseInfoName, of1.ApplyOperationInfoName,of1.OperationDoctor, of1.Assistant1 Assistant, " +
 " of1.AnaesthesiaMethodName , of1.AnesthesiaDoctor ,  of1.InstrumentNurse  , of1.TourNurse  , of1.Remark,of1.OperationType" +
                            " FROM V_OperationFront of1 WHERE of1.PlanOperationTime>='" + BeginDate + "' AND of1.PlanOperationTime<'" + EndDate + "'  Order By OperationRoomID,PlanOrder";
            return HelperDB.DbHelperSQL.GetDataTable(strSql);
        }
        public static DataTable GetOperationPlanDataTable(string ApplyId)
        {
            string strSql = "SELECT of1.ApplyId,OperationRoom,PlanOrder ,OrderOperationTime  ,  of1.ApplyDepName,of1.SickBed, of1.MdrecNo, of1.PatientName, of1.Sex, of1.Age,of1.ApplyDiagnoseInfoName, of1.ApplyOperationInfoName,of1.OperationDoctor, of1.Assistant1 Assistant, " +
 " of1.AnaesthesiaMethodName , of1.AnesthesiaDoctor ,  of1.InstrumentNurse  , of1.TourNurse  , of1.Remark ,of1.OperationType " +
                            " FROM V_OperationFront of1 WHERE " + ApplyId + " ";
            return HelperDB.DbHelperSQL.GetDataTable(strSql);
        }
        public static void GetASALevel(int PatientId, OperationRecord _record)
        {
            string ASALevel = GetDocumentXmlStatic("麻醉术前访视记录单", PatientId, "ASA分级");
            if (ASALevel != "")
            {
                BasicDictionary dict = BBasicDictionary.SelectSingle(" ParentId=30 and Name='" + ASALevel + "'", null);
                if (dict != null)
                {
                    _record.ASALevel = dict.Id.Value;
                    BOperationRecord.Update(" ASALevel=@ASALevel where Id=@Id", new ParameterList("@ASALevel", _record.ASALevel, "@Id", _record.Id.Value));
                }
            }
        }
        /// 
        /// 根据模板名称查询文档
        /// 
        /// 模板名称
        /// 患者Id
        /// 
        public static string GetDocumentbyName2(string tempName, int patientId)
        {
            string XmlStatic = "";
            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)
                {
                    XmlStatic = dt.Rows[0]["XmlStatic"].ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return XmlStatic;
        }
        public static XmlDocument GetPrintDocumentXml(string tempName, int patientId)
        {
            string XmlStatic = GetDocumentbyName2(tempName, patientId);
            XmlDocument doc = new XmlDocument();
            if (XmlStatic != null && XmlStatic.Length > 0)
            {
                doc.LoadXml(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;
        }
    }
}