private static void SetPropertyValueOfSubClass(object obj, PropertyInfo[] properties, DataRow sourceRow, ManyToSubClassType subObj) { // 使用类名或用工厂类取得实际的类名 string className; if (!String.IsNullOrEmpty(subObj.KindColumn)) { if (subObj.ClassName == "OrderContentFactory") { className = OrderContentFactory.GetOrderContentClassName(sourceRow[subObj.KindColumn]); } else { throw new ArgumentException(MessageStringManager.GetString("ClassNotImplement")); } } else { className = subObj.ClassName; } Object newObj = CreateAndIntializeObject(className, sourceRow); SetPropertyValue(obj, properties, newObj, subObj.Property); }
/// <summary> /// 根据指定的医嘱类型和DataRow创建医嘱内容对象 /// </summary> /// <param name="orderKind">医嘱类别</param> /// <param name="sourceRow">包含初始数据的医嘱DataRow</param> /// <returns>合适的医嘱对象</returns> public static OrderContent CreateOrderContent(OrderContentKind orderKind, DataRow sourceRow) { OrderContent content; // 根据医嘱类别+项目类别创建医嘱项目 switch (orderKind) { case OrderContentKind.Druggery: //药品医嘱 content = new DruggeryOrderContent(sourceRow); break; case OrderContentKind.ChargeItem://普通项目医嘱 content = new ChargeItemOrderContent(sourceRow); break; case OrderContentKind.GeneralItem://常规医嘱 content = new GeneralOrderContent(sourceRow); break; case OrderContentKind.ClinicItem://临床项目医嘱 content = new ClinicItemOrderContent(sourceRow); break; case OrderContentKind.OutDruggery://出院带药 content = new OutDruggeryContent(sourceRow); break; case OrderContentKind.Operation://手术医嘱 content = new OperationOrderContent(sourceRow); break; //case OrderKindFlags.CeaseLong://停长期医嘱 // break; case OrderContentKind.TextNormal://纯医嘱(普通) content = new TextOrderContent(sourceRow); break; case OrderContentKind.TextShiftDept://纯医嘱(转科) content = new ShiftDeptOrderContent(sourceRow); break; case OrderContentKind.TextAfterOperation://纯医嘱(术后) content = new AfterOperationContent(sourceRow); break; case OrderContentKind.TextLeaveHospital://纯医嘱(出院) content = new LeaveHospitalOrderContent(sourceRow); break; default: throw new ArgumentException(MessageStringManager.GetString("ClsssNotImplement")); } content.InnerOrderKind = orderKind; return(content); }
/// <summary> /// 取消医嘱 /// </summary> /// <param name="cancellerCode"></param> /// <param name="executeTime"></param> /// <returns></returns> public bool CancelOrder(string cancellerCode, DateTime executeTime) { if (ReadOnly) { throw new InvalidOperationException(MessageStringManager.GetString("ObjectIsReadOnly")); } InnerCancelInfo = new OrderOperateInfo(cancellerCode, executeTime); // FireOrderChanged(new OrderChangedEventArgs(SerialNo)); return(true); }
/// <summary> /// 根据DataRow中制定列的值确定合适的医嘱内容类名 /// </summary> /// <param name="kindValue"></param> /// <returns></returns> public static string GetOrderContentClassName(object kindValue) { if (kindValue == null) { throw new ArgumentNullException("kindValue" , MessageStringManager.GetString("CommonParameterIsNull", "医嘱类型")); } OrderContentKind orderKind = (OrderContentKind)Enum.Parse(typeof(OrderContentKind), kindValue.ToString()); switch (orderKind) { case OrderContentKind.Druggery: //药品医嘱 return("DruggeryOrderContent"); case OrderContentKind.ChargeItem://普通项目医嘱 return("ChargeItemOrderContent"); case OrderContentKind.GeneralItem://常规医嘱 return("GeneralOrderContent"); case OrderContentKind.ClinicItem://临床项目医嘱 return("ClinicItemOrderContent"); case OrderContentKind.OutDruggery://出院带药 return("OutDruggeryContent"); case OrderContentKind.Operation://手术医嘱 return("OperationOrderContent"); //case OrderKindFlags.CeaseLong://停长期医嘱 // break; case OrderContentKind.TextNormal://纯医嘱(普通) return("TextOrderContent"); case OrderContentKind.TextShiftDept://纯医嘱(转科) return("ShiftDeptOrderContent"); case OrderContentKind.TextAfterOperation://纯医嘱(术后) return("AfterOperationContent"); case OrderContentKind.TextLeaveHospital://纯医嘱(出院) return("LeaveHospitalOrderContent"); default: throw new ArgumentException(MessageStringManager.GetString("ClsssNotImplement")); } }
/// <summary> /// 将指定类型的周期换算成按天执行时的次数 /// </summary> /// <param name="periodFlag">周期类型</param> /// <param name="period">>周期(如果类型是"周",则表示每周执行几天)</param> /// <returns>按天执行时的次数</returns> public static decimal ConvertPeriod2PerDay(OrderExecPeriodUnitKind periodFlag, int period) { switch (periodFlag) { case OrderExecPeriodUnitKind.Week: return(Decimal.Divide(period, 7)); case OrderExecPeriodUnitKind.Day: return(Decimal.Divide(1, period)); case OrderExecPeriodUnitKind.Hour: return(Decimal.Divide(24, period)); case OrderExecPeriodUnitKind.Minute: return(Decimal.Divide(1440, period)); default: throw new ArgumentException(MessageStringManager.GetString("EnumFlagNotExist")); } }
/// <summary> /// 取药品默认的用法、频次、数量及单位 /// </summary> /// <param name="systemFlag">系统标志(区分门诊还是住院)</param> /// <param name="sqlExecutor"></param> /// <returns></returns> public DruggeryOrderContent GetDefaultUsageFrequency(SystemApplyRange systemFlag, IDataAccess sqlExecutor) { if (sqlExecutor == null) { throw new ArgumentNullException(MessageStringManager.GetString("ParameterIsNull", "SQLHelper")); } DataRow dr = sqlExecutor.GetRecord(PersistentObjectFactory.GetQuerySentenceByName("SelectDefUsageOfDruggery") , String.Format(CultureInfo.CurrentCulture, " PlaceID = {0} and Mark in (1400, {1:D})", ProductSerialNo, systemFlag) , true); DruggeryOrderContent result = new DruggeryOrderContent(); if (dr != null) { result.Initialize(dr); } return(result); }
/// <summary> /// 审核医嘱停止信息 /// </summary> /// <param name="auditorCode"></param> /// <param name="auditTime"></param> /// <returns></returns> public bool AuditCeaseOrder(string auditorCode, DateTime auditTime) { if (ReadOnly) { throw new InvalidOperationException(MessageStringManager.GetString("ObjectIsReadOnly")); } // 只需要更新相应字段,不需要改变医嘱状态 if (_ceaseAuditInfo == null) { _ceaseAuditInfo = new OrderOperateInfo(auditorCode, auditTime); } else { _ceaseAuditInfo.SetPropertyValue(auditorCode, auditTime); } EditState = OrderEditState.Modified; FireOrderChanged(new OrderChangedEventArgs(SerialNo)); return(true); }
/// <summary> /// 执行医嘱 /// </summary> /// <param name="executorCode"></param> /// <param name="executeTime"></param> /// <returns></returns> public bool ExecuteOrder(string executorCode, DateTime executeTime) { if (ReadOnly) { throw new InvalidOperationException(MessageStringManager.GetString("ObjectIsReadOnly")); } if (_executeInfo == null) { _executeInfo = new OrderOperateInfo(executorCode, executeTime); } else { _executeInfo.SetPropertyValue(executorCode, executeTime); } InnerState = OrderState.Executed; EditState = OrderEditState.Modified; FireOrderChanged(new OrderChangedEventArgs(SerialNo)); return(true); }
/// <summary> /// 审核医嘱 /// </summary> /// <param name="auditorCode"></param> /// <param name="auditTime"></param> /// <returns></returns> public bool AuditOrder(string auditorCode, DateTime auditTime) { if (ReadOnly) { throw new InvalidOperationException(MessageStringManager.GetString("ObjectIsReadOnly")); } // 审核前可以添加一些校验:是否需要审核、操作员权限是否够等??? if (_auditInfo == null) { _auditInfo = new OrderOperateInfo(auditorCode, auditTime); } else { _auditInfo.SetPropertyValue(auditorCode, auditTime); } InnerState = OrderState.Audited; EditState = OrderEditState.Modified; FireOrderChanged(new OrderChangedEventArgs(SerialNo)); return(true); }
/// <summary> /// 停止医嘱(设置停止时间和停止者) /// </summary> /// <param name="employeeCode"></param> /// <param name="ceaseTime"></param> /// <param name="ceaseReason">停止原因</param> /// <returns></returns> public bool CeaseOrder(string employeeCode, DateTime ceaseTime, OrderCeaseReason ceaseReason) { if (ReadOnly) { throw new InvalidOperationException(MessageStringManager.GetString("ObjectIsReadOnly")); } if (_ceaseInfo == null) { _ceaseInfo = new OrderOperateInfo(employeeCode, ceaseTime); } else { _ceaseInfo.SetPropertyValue(employeeCode, ceaseTime); } _ceaseReason = ceaseReason; EditState = OrderEditState.Modified; FireOrderChanged(new OrderChangedEventArgs(SerialNo)); return(true); }
/// <summary> /// 二次修改 TYR Catch /// add by ywk 2013年3月13日10:22:29 /// </summary> /// <param name="obj"></param> /// <param name="properties"></param> /// <param name="sourceRow"></param> /// <param name="objClass"></param> /// <param name="colMaps"></param> private static void SetPropertyValueOfLinkObject(object obj, PropertyInfo[] properties, DataRow sourceRow, ManyToObjectClassType objClass, Dictionary <string, ColumnToColumn> colMaps) { try { // 使用类名或用工厂类取得实际的类名 string className; if (String.IsNullOrEmpty(objClass.KindColumn)) { className = objClass.ClassName; } else { throw new ArgumentException(MessageStringManager.GetString("ClassNotImplement")); } object newObj = null; // 某些情况下在同一张表中用相同的字段保存不同情况下的数据,然后用某个标志位进行判断当前的数据表示何种情况。 // 在映射到对象时,每种情况都可能是一种单独的类。所以在配置中会将列和不同对象进行映射的关系都给出,由标志字段的值来决定取哪一种配置。 foreach (LinkedObject linkObj in objClass.LinkedObjects) { if ((String.IsNullOrEmpty(className)) || (linkObj.ClassName == className)) { // 有可能存在级联的情况(表的一组列关联到Link对象,而Link对象中的部分字段又关联到另外的对象) // ,所以要得到最终的原始列和关联列的关系( a -> b, b -> c ==> a -> c) Collection <ColumnToColumn> newMaps; if ((colMaps != null) && (colMaps.Count > 0)) { newMaps = new Collection <ColumnToColumn>(); ColumnToColumn newCol2Col; foreach (ColumnToColumn linkColMap in linkObj.ColumnToColumns) { newCol2Col = new ColumnToColumn(); newCol2Col.TargetColumn = linkColMap.TargetColumn;// 第三个表的列名 if (colMaps.ContainsKey(linkColMap.SourceColumn)) { newCol2Col.SourceColumn = colMaps[linkColMap.SourceColumn].SourceColumn; newCol2Col.DefaultValue = colMaps[linkColMap.SourceColumn].DefaultValue; } else if (!String.IsNullOrEmpty(linkColMap.DefaultValue)) { // 中间断开了,则表示不能建立级联关系 newCol2Col.SourceColumn = ""; // linkColMap.SourceColumn; newCol2Col.DefaultValue = linkColMap.DefaultValue; } else { continue; } newMaps.Add(newCol2Col); } } else { newMaps = linkObj.ColumnToColumns; } newObj = CreateAndIntializeObject(linkObj.ClassName, sourceRow, newMaps); break; } } SetPropertyValue(obj, properties, newObj, objClass.Property); } catch (Exception ex) { //MessageBox.Show("SetPropertyValueOfLinkObject方法出错" + ex.Message); } }