Beispiel #1
0
 /// <summary>
 /// 将传入的成套医嘱对象同步到DataRow中,并保存到数据
 /// </summary>
 /// <param name="serialNo"></param>
 /// <param name="suiteObject"></param>
 public void SynchAndSaveMasterData(decimal serialNo, SuiteOrder suiteObject)
 {
     if (suiteObject == null)
     {
         return;
     }
     DataRow[] matchRows = SuiteMasterTable.Select(ConstSchemaNames.SuiteDetailColSuiteSerialNo + " = " + serialNo);
     if (matchRows.Length == 1)
     {
         //if (String.IsNullOrEmpty(suiteObject.Py))
         {
             // 重新生成拼音、五笔缩写
             string[] shortCodes = m_GenShortCode.GenerateStringShortCode(suiteObject.Name);
             suiteObject.Py = shortCodes[0];
             suiteObject.Wb = shortCodes[1];
         }
         // 同步属性和DataRow的值
         PersistentObjectFactory.SetDataRowValueFromObject(matchRows[0], suiteObject);
         // 将修改同步到数据库中
         m_SqlExecutor.UpdateTable(SuiteMasterTable, ConstSchemaNames.SuiteTableName, false);
         //SuiteMasterTable.AcceptChanges();
     }
     else
     {
         m_MessageBox.MessageShow("成套医嘱数据有错误,请退出程序重新进入!", CustomMessageBoxKind.ErrorOk);
     }
 }
Beispiel #2
0
        /// <summary>
        /// 在DrectSoftWordbooks.XML中根据指定的字典名搜索定义数据,创建字典实例
        /// XML文件的数据要符合Wordbook.XSD的定义。下面的处理流程是按XSD的定义进行的。
        /// </summary>
        /// <param name="name">字典名称</param>
        protected BaseWordbook(string name)
        {
            Schema.Wordbook source = WordbookStaticHandle.GetSourceWordbookByName(name);

            if (String.IsNullOrEmpty(source.WordbookName))
            {
                throw new ArgumentException("没有正确初始化字典,请检查基础数据");
            }

            // 开始处理字典的属性
            _wordbookName      = source.WordbookName;
            _caption           = source.Caption;
            _querySentence     = PersistentObjectFactory.GetQuerySentenceByName(source.QuerySentence);
            _codeField         = source.CodeField;
            _nameField         = source.NameField;
            _queryCodeField    = source.QueryCodeField;
            _codeFieldIsString = source.CodeFieldIsString;

            // 过滤参数
            _parameters          = new FilterParameterCollection();
            _showStyles          = new Collection <GridColumnStyleCollection>();
            _defaultFilterFields = new Collection <string>();

            if (source.FilterFieldCollection != null)
            {
                foreach (string field in source.FilterFieldCollection)
                {
                    _defaultFilterFields.Add(field);
                }
            }

            if (source.ParameterCollection != null)
            {
                _parameters.AddRange(source.ParameterCollection);
            }

            GridColumnStyleCollection columnStyle;

            foreach (GridColumnStyle[] style in source.ViewStyleCollection)
            {
                columnStyle = new GridColumnStyleCollection();
                columnStyle.AddRange(style);
                _showStyles.Add(columnStyle);
            }

            // 下列属性使用默认值
            SelectedStyleIndex = 0;
            ExtraCondition     = "";

            _currentMatchFields = new Collection <string>();
            foreach (string field in _defaultFilterFields)
            {
                _currentMatchFields.Add(field);
            }
        }
Beispiel #3
0
        private void SetSuiteTableData(object[,] contents)
        {
            m_SuiteTable.Clear();
            if (contents != null)
            {
                DataRow      newRow;
                OrderContent content;
                for (int index = 0; index <= contents.GetUpperBound(0); index++)
                {
                    newRow  = m_SuiteTable.NewRow();
                    content = contents[index, 0] as OrderContent;
                    PersistentObjectFactory.SetDataRowValueFromObject(newRow, content);
                    //if ((content.Item.Kind == ItemKind.WesternMedicine)
                    //   || (content.Item.Kind == ItemKind.PatentMedicine)
                    //   || (content.Item.Kind == ItemKind.HerbalMedicine))
                    //   newRow["cdxh"] = content.Item.KeyValue;
                    //else
                    //   newRow["cdxh"] = -1;
                    //newRow["ypdm"] = content.Item.Code;
                    //newRow["xmmc"] = content.Item.Name;
                    //newRow["ypjl"] = content.Amount;
                    //newRow["xmdw"] = content.CurrentUnit.Name;
                    //if ((content.ItemUsage != null) && (content.ItemUsage.KeyInitialized))
                    //{
                    //   newRow["yfdm"] = content.ItemUsage.Code;
                    //   newRow["yfmc"] = content.ItemUsage.Name;
                    //}
                    //else
                    //{
                    //   newRow["yfdm"] = "";
                    //   newRow["yfmc"] = "";
                    //}
                    //if ((content.ItemFrequency != null) && (content.ItemFrequency.KeyInitialized))
                    //{
                    //   newRow["pcdm"] = content.ItemFrequency.Code;
                    //   newRow["pcmc"] = content.ItemFrequency.Name;
                    //}
                    //else
                    //{
                    //   newRow["pcdm"] = "";
                    //   newRow["pcmc"] = "";
                    //}
                    //newRow["memo"] = content.EntrustContent;

                    newRow[ConstSchemaNames.SuiteDetailColGroupFlag] = contents[index, 1];
                    //newRow["fzfh"] = GetGroupFlag(Convert.ToInt32(newRow["fzbz"]));

                    m_SuiteTable.Rows.Add(newRow);
                }

                ResetSuiteTableNameFieldValue();
            }
        }
Beispiel #4
0
 /// <summary>
 /// 获取指定字典的查询语句定义
 /// </summary>
 /// <param name="bookName">指定的字典名称</param>
 /// <returns>查询语句</returns>
 public static string GetWordbookQuerySentence(string bookName)
 {
     Schema.Wordbook book = GetSourceWordbookByName(bookName);
     if (book != null)
     {
         return(PersistentObjectFactory.GetQuerySentenceByName(book.QuerySentence));
     }
     else
     {
         throw new ArgumentOutOfRangeException("缺少指定字典的查询语句定义");
     }
 }
Beispiel #5
0
        private void InsertTempSuiteOrderIntoTable(string doctor, DataRow[] selectedRows, bool isTempOrder)
        {
            if (selectedRows.Length == 0)
            {
                return;
            }

            object[,] selectedContents = new object[selectedRows.Length, 2];

            // 暂不处理出院带药bool needCalcTotalAmount = false ;
            string       checkMsg;
            DataRow      row;
            OrderContent content;

            try
            {
                for (int index = 0; index < selectedRows.Length; index++)
                {
                    row = selectedRows[index];
                    selectedContents[index, 1] = (GroupPositionKind)Convert.ToInt32(row[ConstSchemaNames.SuiteDetailColGroupFlag]);
                    content = PersistentObjectFactory.CreateAndIntializeObject(
                        OrderContentFactory.GetOrderContentClassName(row[ConstSchemaNames.SuiteDetailColOrderCatalog]), row) as OrderContent;
                    content.ProcessCreateOutputeInfo = new OrderContent.GenerateOutputInfo(CustomDrawOperation.CreateOutputeInfo);

                    //checkMsg = content.CheckProperties();
                    //if (!String.IsNullOrEmpty(checkMsg))
                    //   m_MessageBox.MessageShow(checkMsg, CustomMessageBoxKind.InformationOk);

                    selectedContents[index, 0] = content;
                }
                //// TODO: 暂时跳过医嘱检查
                m_CoreLogic.CheckCanInsertOrder(null, isTempOrder, null);
                m_CoreLogic.InsertSuiteOrder(m_CoreLogic.GetCurrentOrderTable(isTempOrder), doctor, selectedContents, null);
            }
            catch { }
        }
Beispiel #6
0
        /// <summary>
        /// 同步医嘱对象集合和DataTable的数据
        /// </summary>
        /// <param name="changedOrders"></param>
        /// <param name="autoDeleteNewOrder">是否主动删除所有新增状态的医嘱</param>
        /// <returns>返回DataTable的更新内容</returns>
        public DataTable SyncObjectData2Table(Order[] changedOrders, bool autoDeleteNewOrder)
        {
            // 新增和修改过的医嘱,统一将更新标志设为0

            // 首先同步修改过的医嘱,取出新医嘱稍后处理
            StringBuilder      deletedSerialNos = new StringBuilder("0, ");
            Collection <Order> newOrders        = new Collection <Order>();

            if ((changedOrders != null) && (changedOrders.Length > 0))
            {
                DataRow row;
                foreach (Order order in changedOrders)
                {
                    if (order.EditState == OrderEditState.Deleted)
                    {
                        deletedSerialNos.Append(order.SerialNo.ToString() + ",");
                    }
                    else if (order.State == OrderState.New)
                    {
                        newOrders.Add(order);
                    }
                    else
                    {
                        row = GetOrderRow(order);
                        PersistentObjectFactory.SetDataRowValueFromObject(row, order);
                        row[ConstSchemaNames.OrderColSynchFlag] = 0;
                    }
                }
            }
            deletedSerialNos.Append("0");

            // 如果自动删除新医嘱,则将DataTable中的新医嘱全部删除, 否则只删除标记为删除的医嘱
            string filter;

            if (autoDeleteNewOrder)
            {
                filter = String.Format(CultureInfo.CurrentCulture, "{1} = {0:D}", OrderState.New, ConstSchemaNames.OrderColState);
            }
            else
            {
                filter = String.Format(CultureInfo.CurrentCulture, "{0} in ({1})"
                                       , CoreBusinessLogic.GetSerialNoField(IsTempOrder), deletedSerialNos.ToString());
            }
            DataRow[] deletedRow = OrderDataTable.Select(filter);
            if (deletedRow != null)
            {
                foreach (DataRow row in deletedRow)
                {
                    row.Delete();
                }
            }

            foreach (Order order in newOrders) // 插入新医嘱
            {
                DataRow row;
                decimal groupSerialNo;

                groupSerialNo       = order.GroupSerialNo;// 新医嘱的分组序号通过触发器来更新,在这里先将其分组序号与分组标志设为一致
                order.GroupSerialNo = (int)order.GroupPosFlag;
                row = OrderDataTable.NewRow();
                PersistentObjectFactory.SetDataRowValueFromObject(row, order);
                row[ConstSchemaNames.OrderColSynchFlag] = 0;
                OrderDataTable.Rows.Add(row);
                order.GroupSerialNo = groupSerialNo; // 恢复原先的分组序号
            }

            DataTable changedTable = OrderDataTable.GetChanges();

            if ((changedTable != null) && (changedTable.Rows.Count > 0))
            {
                return(changedTable.Copy());
            }
            else
            {
                return(null);
            }
        }
Beispiel #7
0
        private void CommitSelected()
        {
            DataRow[] selectedRows = m_SuiteTable.Select(ConstSchemaNames.SuiteDetailColAmount + " > 0");
            _selectedContents = new object[selectedRows.Length, 2];

            bool         needCalcTotalAmount = (gridColDays.Visible);
            string       checkMsg;
            DataRow      row;
            OrderContent content;
            //Druggery druggery;
            OutDruggeryContent outDruggery;

            for (int index = 0; index < selectedRows.Length; index++)
            {
                row = selectedRows[index];
                _selectedContents[index, 1] = (GroupPositionKind)Convert.ToInt32(row["GroupFlag"]);
                content = PersistentObjectFactory.CreateAndIntializeObject(
                    OrderContentFactory.GetOrderContentClassName(row[ConstSchemaNames.SuiteDetailColOrderCatalog]), row) as OrderContent;
                content.ProcessCreateOutputeInfo = new OrderContent.GenerateOutputInfo(CustomDrawOperation.CreateOutputeInfo);

                checkMsg = content.CheckProperties();
                if (!String.IsNullOrEmpty(checkMsg))
                {
                    m_MessageBox.MessageShow(checkMsg, CustomMessageBoxKind.InformationOk);
                }

                if (needCalcTotalAmount)
                {
                    outDruggery = content as OutDruggeryContent;
                    if (outDruggery != null)
                    {
                        outDruggery.ReCalcTotalAmount();
                    }
                }

                //// 赋其它属性
                //if (Convert.ToInt32(row["cdxh"]) == -1)
                //{
                //   content = new ChargeItemOrderContent();
                //   content.BeginInit();
                //   content.Item = new ChargeItem(row["ypdm"].ToString().Trim());
                //   content.Item.ReInitializeProperties();
                //   content.CurrentUnit = content.Item.BaseUnit;
                //}
                //else
                //{
                //   content = new DruggeryOrderContent();
                //   content.BeginInit();
                //   druggery = new Druggery(Convert.ToDecimal(row["cdxh"]));
                //   content.Item = druggery;
                //   content.Item.ReInitializeProperties();
                //   content.CurrentUnit = druggery.WardUnit;
                //}
                //content.Amount = Convert.ToDecimal(row["ypjl"]);
                //content.ItemUsage = new OrderUsage(row["yfdm"].ToString().Trim(), row["yfmc"].ToString().Trim());
                //content.ItemFrequency = new OrderFrequency(row["pcdm"].ToString().Trim(), row["pcmc"].ToString().Trim());
                //content.ProcessCreateOutputeInfo =
                //   new OrderContent.GenerateOutputInfo(CustomDrawOperation.CreateOutputeInfo);
                //content.EndInit();
                _selectedContents[index, 0] = content;
            }
        }