예제 #1
0
        /// <summary>
        /// 在医嘱的DataTable中找到指定医嘱对象对应的行,并返回
        /// </summary>
        /// <param name="order"></param>
        /// <returns>医嘱所在行,不存在则返回null</returns>
        public DataRow GetOrderRow(Order order)
        {
            if (order == null)
            {
                throw new ArgumentNullException();
            }

            if ((order.EditState == OrderEditState.Added) ||
                (order.EditState == OrderEditState.Detached))
            {
                return(null);
            }

            // 通过医嘱序号来定位
            DataRow[] rows = OrderDataTable.Select(String.Format(CultureInfo.CurrentCulture
                                                                 , "{0} = {1}"
                                                                 , CoreBusinessLogic.GetSerialNoField(IsTempOrder)
                                                                 , order.SerialNo));
            if (rows.Length == 1)
            {
                return(rows[0]);
            }
            else if (rows.Length > 1)
            {
                throw new ArgumentException(ConstMessages.ExceptionHaveManyMatchRows);
            }
            else
            {
                throw new ArgumentOutOfRangeException();
            }
        }
        // GET: api/Calorie/5
        //public string Get(int id)
        //{
        //    return "value";
        //}

        // POST: api/Calorie
        public void Post([FromBody] dynamic value)
        {
            int      amountofCalories = value.AmountofCalories;
            int      timeZoneOffset   = value.timeZoneOffset;
            DateTime currentDateTime  = value.dateTime;
            DateTime dateTimeAccordingToUserTimeZone = currentDateTime.AddMinutes(-1 * timeZoneOffset);
            string   comments = value.comments;

            CoreBusinessLogic.Addcalories(identity.User.Uid, amountofCalories, dateTimeAccordingToUserTimeZone, comments);
        }
예제 #3
0
 private void IniializeCoreLogic(Inpatient patient)
 {
     if (patient != null)
     {
         m_CoreLogic = new CoreBusinessLogic(m_SqlExecutor, EditorCallModel.EditOrder);
         m_CoreLogic.CurrentPatient = patient;
     }
     else
     {
         throw new ArgumentNullException("患者未赋值");
     }
 }
예제 #4
0
        private void SynchLongOrderExecResultToEmr(DataTable longOrderTable)
        {
            if ((longOrderTable != null) && (longOrderTable.Rows.Count > 0))
            {
                OrderTable currentTable = m_CoreLogic.GetCurrentOrderTable(false);
                if (currentTable.Orders.Count == 0)
                {
                    if (CoreBusinessLogic.BusinessLogic.UsedForAllPatient)
                    {
                        throw new ArgumentOutOfRangeException("传入的长期医嘱数据在电子病历系统中不存在");
                    }
                    else
                    {
                        return;
                    }
                }
                currentTable.OrderDataTable.Merge(longOrderTable);
                string    changedSerialNo = CombineSerialNo(longOrderTable, "cqyzxh");
                DataRow[] changedRows     = currentTable.OrderDataTable.Select("cqyzxh in (" + changedSerialNo + ")");
                Dictionary <decimal, DataRow> changedHerbSummaries = new Dictionary <decimal, DataRow>();

                foreach (DataRow row in changedRows)
                {
                    if (row["memo"].ToString().StartsWith(Order.HerbSummaryFlag))
                    {
                        changedHerbSummaries.Add(Convert.ToDecimal(row["memo"].ToString().Substring(Order.HerbSummaryFlag.Length - 1)), row);
                    }
                }
                // 同步关联的草药明细的状态
                if (changedHerbSummaries.Count > 0)
                {
                    decimal groupSerialNo;

                    foreach (DataRow row in currentTable.OrderDataTable.Rows)
                    {
                        groupSerialNo = Convert.ToDecimal(row["fzxh"]);
                        if (changedHerbSummaries.ContainsKey(groupSerialNo))
                        {
                            row["yzzt"]  = changedHerbSummaries[groupSerialNo]["yzzt"];
                            row["zxczy"] = changedHerbSummaries[groupSerialNo]["zxczy"];
                            row["zxrq"]  = changedHerbSummaries[groupSerialNo]["zxrq"];
                        }
                    }
                }

                DataTable changedTable = currentTable.OrderDataTable.GetChanges();
                m_SqlExecutor.UpdateTable(currentTable.OrderDataTable, CoreBusinessLogic.GetOrderTableName(currentTable.IsTempOrder), false);
                //currentTable.OrderDataTable.AcceptChanges();
                // 处理质量管理消息
                m_CoreLogic.HandleQcMessageAfterSynchExecute(changedTable, false);
            }
        }
예제 #5
0
        /// <summary>
        /// 保存发送到HIS的医嘱信息记录到表中
        /// </summary>
        /// <param name="changedTable"></param>
        /// <param name="isTempOrder"></param>
        public void SaveRecord(DataTable changedTable, bool isTempOrder, string operatorCode, DateTime sendTime)
        {
            if ((CurrentPatient == null) || (changedTable.Rows.Count == 0))
            {
                return;
            }

            int serialNo;

            // 先插主记录
            MainParas["syxh"].Value    = CurrentPatient.NoOfFirstPage;
            MainParas["hissyxh"].Value = CurrentPatient.NoOfHisFirstPage;
            MainParas["fsczyh"].Value  = operatorCode;
            MainParas["fssj"].Value    = sendTime;

            m_SqlHelper.ExecuteNoneQuery(InsertMainSql, MainParas, out serialNo);

            if (serialNo <= 0)
            {
                throw new Exception("插入主记录失败");
            }

            // 再插入明细记录
            string OrderSerialNoField = CoreBusinessLogic.GetSerialNoField(isTempOrder);

            DetailParas["fsxh"].Value = serialNo;
            if (isTempOrder)
            {
                DetailParas["lsyz"].Value = 1;
            }
            else
            {
                DetailParas["lsyz"].Value = 0;
            }

            foreach (DataRow row in changedTable.Rows)
            {
                DetailParas["yzxh"].Value = row[OrderSerialNoField];
                m_SqlHelper.ExecuteNoneQuery(InsertDetailSql, DetailParas);
            }
        }
        // GET: api/Calorie
        public object Get()
        {
            NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query);
            string operation        = nvc["operation"];
            object returnData       = null;

            if (operation.Equals("GetCaloireCountForToday", StringComparison.OrdinalIgnoreCase))
            {
                DateTime todaysDate = Convert.ToDateTime(nvc["todaysDate"]);
                returnData = CoreBusinessLogic.GetCaloireCountForToday(identity.User.Uid, todaysDate);
            }
            //if (operation.Equals("GetDaysFailedAndPassedInPast1Week", StringComparison.OrdinalIgnoreCase))
            //{
            //    returnData = CoreBusinessLogic.GetDaysFailedAndPassedInPast1Week(identity.User.Uid);
            //}
            //if (operation.Equals("GetDaysFailedAndPassedCustom", StringComparison.OrdinalIgnoreCase))
            //{
            //    DateTime startDate = Convert.ToDateTime(nvc["startDate"]);
            //    DateTime endDate = Convert.ToDateTime(nvc["endDate"]);
            //    returnData = CoreBusinessLogic.GetDaysFailedAndPassedCustom(identity.User.Uid, startDate, endDate);
            //}
            return(returnData);
        }
예제 #7
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);
            }
        }
예제 #8
0
        private void SynchTempOrderExecResultToEmr(DataTable tempOrderTable)
        {
            // 直接对数据集进行合并,然后保存到EMR数据库(这样会导致OrderTable中数据集内容和对象属性不一致)
            if ((tempOrderTable != null) && (tempOrderTable.Rows.Count > 0))
            {
                OrderTable currentTable = m_CoreLogic.GetCurrentOrderTable(true);
                if (currentTable.Orders.Count == 0)
                {
                    if (CoreBusinessLogic.BusinessLogic.UsedForAllPatient)
                    {
                        throw new ArgumentOutOfRangeException("传入的临时医嘱数据在电子病历系统中不存在");
                    }
                    else
                    {
                        return;
                    }
                }
                currentTable.OrderDataTable.Merge(tempOrderTable);

                string    changedSerialNo = CombineSerialNo(tempOrderTable, "lsyzxh");
                DataRow[] changedRows     = currentTable.OrderDataTable.Select("lsyzxh in (" + changedSerialNo + ")");

                Dictionary <decimal, DataRow> changedHerbSummaries = new Dictionary <decimal, DataRow>();
                StringBuilder reqSerialNos = new StringBuilder("0");
                foreach (DataRow row in changedRows)
                {
                    if ((row["sqdxh"].ToString() != "") && (Convert.ToDecimal(row["sqdxh"]) != 0))
                    {
                        reqSerialNos.Append("," + row["sqdxh"].ToString());
                    }
                    else if (row["memo"].ToString().StartsWith(Order.HerbSummaryFlag))
                    {
                        changedHerbSummaries.Add(Convert.ToDecimal(row["memo"].ToString().Substring(Order.HerbSummaryFlag.Length - 1)), row);
                    }
                }
                // 同步关联的草药明细的状态
                if (changedHerbSummaries.Count > 0)
                {
                    decimal groupSerialNo;
                    foreach (DataRow row in currentTable.OrderDataTable.Rows)
                    {
                        groupSerialNo = Convert.ToDecimal(row["fzxh"]);
                        if (changedHerbSummaries.ContainsKey(groupSerialNo))
                        {
                            row["yzzt"]  = changedHerbSummaries[groupSerialNo]["yzzt"];
                            row["zxczy"] = changedHerbSummaries[groupSerialNo]["zxczy"];
                            row["zxrq"]  = changedHerbSummaries[groupSerialNo]["zxrq"];
                        }
                    }
                }

                DataTable changedTable = currentTable.OrderDataTable.GetChanges();
                m_SqlExecutor.UpdateTable(currentTable.OrderDataTable, CoreBusinessLogic.GetOrderTableName(currentTable.IsTempOrder), false);
                //currentTable.OrderDataTable.AcceptChanges();
                // 将关联的申请单状态改成已执行
                if (reqSerialNos.Length > 1)
                {
                    m_SqlExecutor.ExecuteNoneQuery("update BL_SQDK set qrbz = 2 where xh in (" + reqSerialNos.ToString() + ")");
                }

                // 处理质量管理消息
                m_CoreLogic.HandleQcMessageAfterSynchExecute(changedTable, true);
            }
        }