예제 #1
0
        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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
파일: Order.cs 프로젝트: xuanximoming/key
        /// <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);
        }
예제 #4
0
        /// <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"));
            }
        }
예제 #5
0
        /// <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"));
            }
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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);
        }
예제 #8
0
파일: Order.cs 프로젝트: xuanximoming/key
        /// <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);
        }
예제 #9
0
파일: Order.cs 프로젝트: xuanximoming/key
        /// <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);
        }
예제 #10
0
        /// <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);
        }
예제 #11
0
        /// <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);
            }
        }