/// <summary> /// 添加项目 /// </summary> /// <param name="item"></param> public void AddVitalSign(dynamic item) { MED_MONITOR_FUNCTION_CODE itema = item as MED_MONITOR_FUNCTION_CODE; ObservableCollection <dynamic> dataSource = new ObservableCollection <dynamic>(); Dictionary <string, object> dict = new Dictionary <string, object>(); rowDict.Add(rowDict.Count, itema.ITEM_CODE); for (int j = 0; j < columnDict.Count + 2; j++) { if (j == 0) { MED_VITAL_SIGN row = new MED_VITAL_SIGN(); row.ITEM_CODE = itema.ITEM_CODE; row.ITEM_NAME = itema.ITEM_NAME; row.Flag = "2"; row.ITEM_VALUE = itema.ITEM_CODE; row.IsReadOnlyColumn = true; row.IsShowColumn = false; dict.Add("CODE", row); } else if (j == 1) { MED_VITAL_SIGN row = new MED_VITAL_SIGN(); row.ITEM_CODE = itema.ITEM_CODE; row.ITEM_NAME = itema.ITEM_NAME; row.Flag = "2"; row.ITEM_VALUE = itema.ITEM_NAME; row.IsReadOnlyColumn = true; row.IsShowColumn = true; dict.Add("项目", row); } else { MED_VITAL_SIGN row = new MED_VITAL_SIGN(); row.ITEM_CODE = itema.ITEM_CODE; row.ITEM_NAME = itema.ITEM_NAME; row.Flag = "2"; row.TIME_POINT = columnDict[j - 2]; row.IsReadOnlyColumn = false; row.IsShowColumn = true; dict.Add(columnDict[j - 2].ToString("yyyy-MM-dd HH:mm"), row); } } var dyn = GetDynamicObject(dict); VitalSignSource.Add(dyn); }
/// <summary> /// 检查数据是否更改 /// </summary> /// <returns></returns> protected override bool CheckDataChange() { bool changed = false; ObservableCollection <dynamic> ld = VitalSignSource as ObservableCollection <dynamic>; IEnumerable <string> vitalColumns = ld[0].GetDynamicMemberNames(); foreach (dynamic itemList in VitalSignSource) { foreach (var propName in vitalColumns) { MED_VITAL_SIGN row = itemList.GetMemberValue(propName) as MED_VITAL_SIGN; if (row.ModelStatus != ModelStatus.Default) { changed = true; } } } return(changed); }
/// <summary> /// 根据患者ID获取患者的所有体征信息,包含麻醉和复苏 /// </summary> public List <MED_VITAL_SIGN> GetVitalSignData() { List <MED_VITAL_SIGN> anesData = GetVitalSignData("0"); List <MED_VITAL_SIGN> pacuData = GetVitalSignData("1"); foreach (MED_VITAL_SIGN row in pacuData) { MED_VITAL_SIGN prow = anesData.Where(x => x.TIME_POINT == row.TIME_POINT && x.ITEM_CODE == row.ITEM_CODE).FirstOrDefault(); if (prow != null) { continue; } else { anesData.Add(row); } } return(anesData); }
/// <summary> /// 保存数据 /// </summary> /// <returns></returns> protected override SaveResult SaveData() { SaveResult saveResult = SaveResult.Fail; ObservableCollection <dynamic> ld = VitalSignSource as ObservableCollection <dynamic>; IEnumerable <string> vitalColumns = ld[0].GetDynamicMemberNames(); List <MED_PAT_MONITOR_DATA_EXT> patientMonitorExt = AnesInfoService.ClientInstance.GetPatMonitorExtListByEvent(_patientID, _visitID, _operID, _eventNo); foreach (dynamic itemList in VitalSignSource) { foreach (var propName in vitalColumns) { MED_VITAL_SIGN row = itemList.GetMemberValue(propName) as MED_VITAL_SIGN; if (row.ModelStatus == ModelStatus.Add && !string.IsNullOrEmpty(row.ITEM_VALUE))// row.ModelStatus的变化来自于RaisePropertyChanged方法!(BaseModel里) { MED_PAT_MONITOR_DATA_EXT patientMonitorDataRow = new MED_PAT_MONITOR_DATA_EXT(); patientMonitorDataRow.PATIENT_ID = _patientID; patientMonitorDataRow.VISIT_ID = _visitID; patientMonitorDataRow.OPER_ID = _operID; patientMonitorDataRow.TIME_POINT = row.TIME_POINT; patientMonitorDataRow.ITEM_NAME = row.ITEM_NAME; patientMonitorDataRow.ITEM_CODE = row.ITEM_CODE; patientMonitorDataRow.ITEM_VALUE = row.ITEM_VALUE; patientMonitorDataRow.DATA_TYPE = _eventNo; patientMonitorDataRow.LAST_MODIFY_DATE = DateTime.Now; patientMonitorDataRow.OPERATOR = ExtendAppContext.Current.LoginUser == null ? "" : ExtendAppContext.Current.LoginUser.USER_JOB_ID; patientMonitorDataRow.DATA_MARK = 1; patientMonitorDataRow.ModelStatus = ModelStatus.Add; patientMonitorExt.Add(patientMonitorDataRow); } else if (row.ModelStatus == ModelStatus.Modeified) { List <MED_PAT_MONITOR_DATA_EXT> monitorExt = patientMonitorExt.Where(x => x.PATIENT_ID.Equals(_patientID) && x.VISIT_ID.Equals(_visitID) && x.OPER_ID.Equals(_operID) && x.TIME_POINT.Equals(row.TIME_POINT) && x.ITEM_NAME.Equals(row.ITEM_NAME) && x.DATA_TYPE.Equals(_eventNo) && x.ITEM_CODE.Equals(row.ITEM_CODE)).ToList(); if (monitorExt != null && monitorExt.Count > 0) { MED_PAT_MONITOR_DATA_EXT patientMonitorDataRow = monitorExt[0]; patientMonitorDataRow.ITEM_VALUE = string.IsNullOrEmpty(row.ITEM_VALUE) ? "/" : row.ITEM_VALUE; patientMonitorDataRow.LAST_MODIFY_DATE = DateTime.Now; patientMonitorDataRow.OPERATOR = ExtendAppContext.Current.LoginUser == null ? "" : ExtendAppContext.Current.LoginUser.USER_JOB_ID; patientMonitorDataRow.DATA_MARK = 1; patientMonitorDataRow.ModelStatus = ModelStatus.Modeified; } else if (!string.IsNullOrEmpty(row.ITEM_VALUE) || !row.IsShowColumn)// MED_PAT_MONITOR_DATA_EXT表里不存在这条数据,且此条数据ITEM_VALUE有值 { MED_PAT_MONITOR_DATA_EXT patientMonitorDataRow = new MED_PAT_MONITOR_DATA_EXT(); patientMonitorDataRow.PATIENT_ID = _patientID; patientMonitorDataRow.VISIT_ID = _visitID; patientMonitorDataRow.OPER_ID = _operID; patientMonitorDataRow.TIME_POINT = row.TIME_POINT; patientMonitorDataRow.ITEM_NAME = row.ITEM_NAME; patientMonitorDataRow.ITEM_CODE = row.ITEM_CODE; patientMonitorDataRow.ITEM_VALUE = null == row.ITEM_VALUE ? "/" : row.ITEM_VALUE;// 当row.IsShowColumn=fasle,ITEM_VALUE才会=“/” patientMonitorDataRow.DATA_TYPE = _eventNo; patientMonitorDataRow.LAST_MODIFY_DATE = DateTime.Now; patientMonitorDataRow.OPERATOR = ExtendAppContext.Current.LoginUser == null ? "" : ExtendAppContext.Current.LoginUser.USER_JOB_ID; patientMonitorDataRow.DATA_MARK = 1; patientMonitorDataRow.ModelStatus = ModelStatus.Add; patientMonitorExt.Add(patientMonitorDataRow); } else if (string.IsNullOrEmpty(row.ITEM_VALUE) && row.IsShowColumn) { MED_PAT_MONITOR_DATA_EXT patientMonitorDataRow = new MED_PAT_MONITOR_DATA_EXT(); patientMonitorDataRow.PATIENT_ID = _patientID; patientMonitorDataRow.VISIT_ID = _visitID; patientMonitorDataRow.OPER_ID = _operID; patientMonitorDataRow.TIME_POINT = row.TIME_POINT; patientMonitorDataRow.ITEM_NAME = row.ITEM_NAME; patientMonitorDataRow.ITEM_CODE = row.ITEM_CODE; patientMonitorDataRow.ITEM_VALUE = string.IsNullOrEmpty(row.ITEM_VALUE) ? "/" : row.ITEM_VALUE; patientMonitorDataRow.DATA_TYPE = _eventNo; patientMonitorDataRow.LAST_MODIFY_DATE = DateTime.Now; patientMonitorDataRow.OPERATOR = ExtendAppContext.Current.LoginUser == null ? "" : ExtendAppContext.Current.LoginUser.USER_JOB_ID; patientMonitorDataRow.DATA_MARK = 1; patientMonitorDataRow.ModelStatus = ModelStatus.Add; patientMonitorExt.Add(patientMonitorDataRow); } } } } // 如果一个时间点即存在隐藏的(DATA_MARK == 0)又存在显示的(DATA_MARK == 1),则把隐藏的数据删除掉 List <DateTime> timePointList = new List <DateTime>(); foreach (MED_PAT_MONITOR_DATA_EXT item in patientMonitorExt) { if (!timePointList.Contains(item.TIME_POINT)) { timePointList.Add(item.TIME_POINT); } } foreach (DateTime dt in timePointList) { int unShow = patientMonitorExt.Where(x => x.TIME_POINT == dt && x.DATA_MARK == 0).ToList().Count(); int show = patientMonitorExt.Where(x => x.TIME_POINT == dt && x.DATA_MARK == 1).ToList().Count(); if (unShow > 0 && show > 0) { patientMonitorExt.ForEach(tempRow => { if (tempRow.TIME_POINT == dt && tempRow.DATA_MARK == 0)// 在自动生成列时,去除 data_mark=0的列 { tempRow.ModelStatus = ModelStatus.Deleted; } }); } } bool result = AnesInfoService.ClientInstance.SavePatMonitorExtList(patientMonitorExt); if (result) { foreach (dynamic itemList in VitalSignSource) { foreach (var propName in vitalColumns) { MED_VITAL_SIGN row = itemList.GetMemberValue(propName) as MED_VITAL_SIGN; row.ModelStatus = ModelStatus.Default; } } } if (result) { saveResult = SaveResult.Success; } return(saveResult); }
/// <summary> /// 组装体征数据 /// </summary> public void GetVitalSignData() { ObservableCollection <dynamic> dataSource = new ObservableCollection <dynamic>(); List <MED_VITAL_SIGN> vitalSignDataTable = AnesInfoService.ClientInstance.GetVitalSignData(_patientID, _visitID, _operID, _eventNo, false); string[] rowName = AnesInfoService.ClientInstance.GetVitalSignTitles(_patientID, _visitID, _operID, _eventNo, ExtendAppContext.Current.PatientInformationExtend.OPER_ROOM_NO); // 从med_pat_monitor_data_ext表获取体征数据 List <MED_PAT_MONITOR_DATA_EXT> patMonitorDataExt = AnesInfoService.ClientInstance.GetPatMonitorExtListByEvent(_patientID, _visitID, _operID, _eventNo); rowDict = new Dictionary <int, string>(); if (rowName != null)//组装对应体征项目Code { int i = 0; foreach (string item in rowName) { if (!rowDict.ContainsKey(i)) { rowDict.Add(i, item); i++; } } } columnDict = new Dictionary <int, DateTime>(); int columnID = 0; if (vitalSignDataTable != null && vitalSignDataTable.Count > 0) //组装对应时间列 { DateTime vStartTime = vitalSignDataTable[0].TIME_POINT; DateTime vEndTime = vitalSignDataTable[vitalSignDataTable.Count - 1].TIME_POINT; if (vStartTime.Minute % 5 != 0) { vStartTime = DateTimeEqual(vStartTime); } while (vStartTime <= vEndTime) { DateTime columnName = vStartTime; if (!columnDict.ContainsValue(columnName)) { //columnDict.Add(columnID, columnName); //columnID++; // 从med_pat_monitor_data_ext表获取体征数据,DATA_MARK == 0 表示删除数据 if (!patMonitorDataExt.Exists(x => x.DATA_MARK == 0 && x.TIME_POINT == vStartTime)) { columnDict.Add(columnID, columnName); columnID++; } } vStartTime = vStartTime.AddMinutes(5); } } //避免监护仪漏采的情况将对应每5分钟一格时间点重新加进去 foreach (MED_VITAL_SIGN row in vitalSignDataTable) { if (row.TIME_POINT.Minute % 5 == 0) { DateTime columnName = row.TIME_POINT; if (!columnDict.ContainsValue(columnName)) { //columnDict.Add(columnID, columnName); //columnID++; // 从med_pat_monitor_data_ext表获取体征数据,DATA_MARK == 0 表示删除的数据,也就是不显示的数据 if (!patMonitorDataExt.Exists(x => x.DATA_MARK == 0 && x.TIME_POINT == row.TIME_POINT)) { columnDict.Add(columnID, columnName); columnID++; } } } } for (int i = 0; i < rowName.Length; i++) { Dictionary <string, object> dict = new Dictionary <string, object>(); for (int j = 0; j < columnDict.Count + 2; j++) { if (j == 0)//第一列Code隐藏 { MED_VITAL_SIGN row = new MED_VITAL_SIGN(); row.ITEM_NAME = ExtendAppContext.Current.MonitorFunctionCodeDict.ContainsKey(rowDict[i]) ? ExtendAppContext.Current.MonitorFunctionCodeDict[rowDict[i]] : rowDict[i]; row.ITEM_CODE = rowDict[i]; row.ITEM_VALUE = rowDict[i]; row.IsReadOnlyColumn = true; row.IsShowColumn = false; dict.Add("CODE", row); } else if (j == 1)//第二列项目名称 { MED_VITAL_SIGN row = new MED_VITAL_SIGN(); row.ITEM_NAME = ExtendAppContext.Current.MonitorFunctionCodeDict.ContainsKey(rowDict[i]) ? ExtendAppContext.Current.MonitorFunctionCodeDict[rowDict[i]] : rowDict[i]; row.ITEM_CODE = rowDict[i]; row.ITEM_VALUE = ExtendAppContext.Current.MonitorFunctionCodeDict.ContainsKey(rowDict[i]) ? ExtendAppContext.Current.MonitorFunctionCodeDict[rowDict[i]] : rowDict[i]; row.IsReadOnlyColumn = true; row.IsShowColumn = true; dict.Add("项目", row); } else { //第三列开始为每个时间点 MED_VITAL_SIGN row = vitalSignDataTable.Where(x => x.TIME_POINT == columnDict[j - 2] && x.ITEM_CODE == rowDict[i]).LastOrDefault(); if (row != null) { row.IsReadOnlyColumn = false; row.IsShowColumn = true; dict.Add(columnDict[j - 2].ToString("yyyy-MM-dd HH:mm"), row); } else { row = new MED_VITAL_SIGN(); row.ITEM_CODE = rowDict[i]; row.ITEM_NAME = ExtendAppContext.Current.MonitorFunctionCodeDict.ContainsKey(rowDict[i]) ? ExtendAppContext.Current.MonitorFunctionCodeDict[rowDict[i]] : rowDict[i]; row.TIME_POINT = columnDict[j - 2]; row.IsReadOnlyColumn = false; row.IsShowColumn = true; dict.Add(columnDict[j - 2].ToString("yyyy-MM-dd HH:mm"), row); } } } var dyn = GetDynamicObject(dict);//将对象转换为一整行数据 dataSource.Add(dyn); } VitalSignSource = dataSource; }