/// <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); }
private void IniializeCoreLogic(Inpatient patient) { if (patient != null) { m_CoreLogic = new CoreBusinessLogic(m_SqlExecutor, EditorCallModel.EditOrder); m_CoreLogic.CurrentPatient = patient; } else { throw new ArgumentNullException("患者未赋值"); } }
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); } }
/// <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); }
/// <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); } }
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); } }