/// <summary> /// 从预览数据中筛选出打印保存数据 /// </summary> /// <param name="id_dep_prn"></param> /// <param name="id_emp_prn"></param> /// <param name="printMode"></param> public void GetPrintDOsFromPreviewDOs(string id_dep_prn, string id_emp_prn, string printMode) { List <OrdPrintDO> lstOrdPrintDOs = new List <OrdPrintDO>(); //未打印数据 List <DORowPrtFlags> lstDORowPrtFlags = new List <DORowPrtFlags>(); //未打印数据的标记参数 DORowPrtFlags[] rowFlagsPreview = prtDORowsAssistPreview.GetDoFlagsArr(); //预览后返回的标记参数集 switch (printMode) { case OrdPrintConst.PRINT_MODE_CONTINUE: case OrdPrintConst.PRINT_MODE_RESET: getPrintDOsConAndRes(rowFlagsPreview, id_dep_prn, id_emp_prn, lstOrdPrintDOs, lstDORowPrtFlags, printMode); break; case OrdPrintConst.PRINT_MODE_CANCEL: case OrdPrintConst.PRINT_MODE_STOP: getPrintDOsStpAndCal(lstOrdPrintDOs, lstDORowPrtFlags); break; case OrdPrintConst.PRINT_MODE_SINGLE: getPrintDOsSingle(lstOrdPrintDOs, lstDORowPrtFlags); break; } arryOrdPrintDOsPrint = lstOrdPrintDOs.ToArray(); prtDORowsAssistPrint = new PrtDORowsAssist(lstDORowPrtFlags); }
/// <summary> /// 查询各场景打印预览数据 /// </summary> /// <param name="id_en">就诊ID</param> /// <param name="isLong">长临标识</param> /// <param name="pageNum">页码</param> /// <param name="printMode">打印场景</param> public void LoadOrdPrintData(string id_en, bool?isLong, int?pageNum, string printMode) { switch (printMode) { case OrdPrintConst.PRINT_MODE_CONTINUE: arryOrdPrintDOsPreview = viewModel.GetPreviewContinueOrds(id_en, isLong, getMaxPageNum(id_en, isLong), out prtDORowsAssistPreview); //一般打印 break; case OrdPrintConst.PRINT_MODE_RESET: arryOrdPrintDOsPreview = viewModel.GetPreviewResetOrds(id_en, isLong, getMaxPageNum(id_en, isLong), out prtDORowsAssistPreview); //重整打印 break; case OrdPrintConst.PRINT_MODE_CANCEL: arryOrdPrintDOsPreview = viewModel.GetPreviewCancelOrds(id_en, isLong, out lstOrdPrintDOsPrint, out lstDORowPrtFlagsPrint, out prtDORowsAssistPreview); //撤销打印 break; case OrdPrintConst.PRINT_MODE_STOP: arryOrdPrintDOsPreview = viewModel.GetPreviewStopOrds(id_en, isLong, out lstOrdPrintDOsPrint, out lstDORowPrtFlagsPrint, out prtDORowsAssistPreview); //停止打印 break; case OrdPrintConst.PRINT_MODE_SINGLE: arryOrdPrintDOsPreview = viewModel.GetPreviewSignleOrds(id_en, isLong, (int)pageNum, out lstOrdPrintDOsSingle, out lstDORowPrtFlagsSingle, out prtDORowsAssistPreview); //单页补打 break; case OrdPrintConst.PRINT_MODE_ALLBROWSE: arryOrdPrintDOsPreview = viewModel.GetPreviewAllPrtedOrds(id_en, isLong, out prtDORowsAssistPreview); //浏览全部已打数据 break; default: prtDORowsAssistPreview = new PrtDORowsAssist(0); break; } }
/// <summary> /// 获取一般续打/重整打印展现数据 /// </summary> /// <param name="paramDTO">打印参数</param> /// <param name="rowAssist">返回一般打印数据集合标记参数</param> /// <returns></returns> private OrdPrintDO[] getPreviewConAndResOrds(OrdPrintParamDTO paramDTO, out PrtDORowsAssist rowAssist) { // 获取待打印数据 OrdPrintDataDTO[] ordPrintDataDTOsToPrt = ordPrintExtService.GetOrdPrintDataDTOs(paramDTO); //待打印数据为空,直接返回 if (ordPrintDataDTOsToPrt.Length == 0) { rowAssist = new PrtDORowsAssist(0); return(ordPrintDataDTOsToPrt); } // 获取已打印的最后一页数据 OrdPrintDO[] ordPrintDOsPrted = this.getPrtedOrdsByPage(paramDTO.Id_en, paramDTO.Fg_long, new List <int>() { (int)paramDTO.Page_num }); // 获取已打印的最后一页需要补打作废线或停止时间的数据 OrdPrintDataDTO[] ordPrintDataDTOsPrted = this.getCancAndStopSingleOrds(paramDTO.Id_en, paramDTO.Fg_long, (int)paramDTO.Page_num); List <DORowPrtFlags> rowFlagList = new List <DORowPrtFlags>(); //整合已打印数据、未打印数据,设置标记参数,返回展示数据 OrdPrintDO[] ordPrintDOsConAndRes = this.mergeOrdPrintDOsConAndRes(ordPrintDOsPrted, ordPrintDataDTOsPrted, ordPrintDataDTOsToPrt, ref rowFlagList, paramDTO.Print_mode == OrdPrintConst.PRINT_MODE_RESET); rowAssist = new PrtDORowsAssist(rowFlagList); return(ordPrintDOsConAndRes); }
/// <summary> /// 根据就诊Id获取已经打印的全部医嘱数据 /// <para>获取表ci_or_prn中数据</para> /// </summary> /// <param name="idEn">就诊id</param> /// <param name="fgLong">长期医嘱、临时医嘱标识</param> /// <returns>返回本次就诊全部已打印的数据</returns> public OrdPrintDO[] GetPreviewAllPrtedOrds(string idEn, FBoolean fgLong, out PrtDORowsAssist rowAssist) { List <object> args = new List <object>(); args.Add(idEn); args.Add(fgLong); StringBuilder builder = new StringBuilder(); builder.Append("Id_en = '{0}' and Fg_long = '{1}'"); // builder.Append("Id_en = '{0}' and Fg_long = '{1}' and Id_orprn='0001Z7100000000E2YD6'"); string condition = string.Format(builder.ToString(), args.ToArray()); string orderBy = "Page_num,Row_num"; OrdPrintDO[] printDOsAll = ordPrintService.find(condition, orderBy, FBoolean.False); // 所有展现数据的标记参数 rowAssist = new PrtDORowsAssist(printDOsAll.Length); DORowPrtFlags[] doprtflags = rowAssist.GetDoFlagsArr(); for (int i = 0; i < printDOsAll.Length; i++) { doprtflags[i].AtPageIx = (int)printDOsAll[i].Page_num; // 所在页码 doprtflags[i].AtGridRowIx = (int)printDOsAll[i].Row_num; // 所在行号 doprtflags[i].TakeGridRowCnt = 0; // if (printDOsAll[i].Fg_reformrow == FBoolean.True) { doprtflags[i].ForceInOneGridRow = true; // 重整标识行不换行 doprtflags[i].MarkType = DORowPrtFlags.ENumMarkType.Text; //重整标记行内容标红 } //根据作废打印标识Fg_canc_prn,判断是否打印过作废线, //打印过作废线的同时显示内容和作废线(置灰),否则只显示内容(置灰) doprtflags[i].InvalidPrtType = printDOsAll[i].Fg_canc_prn == true ? DORowPrtFlags.ENumInvalidPrtType.TextWithDelLine : DORowPrtFlags.ENumInvalidPrtType.NotInvalid; // doprtflags[i].IsDataRemedy = (bool)printDOsAll[i].Fg_stop_prn; } return(printDOsAll); }
/// <summary> /// 更新预览数据源(排序) /// </summary> public void UpdateOrdPrintDOsOrder() { if (LstOrdPrintDOsPreview == null) { return; } arryOrdPrintDOsPreview = LstOrdPrintDOsPreview.ToArray(); List <DORowPrtFlags> lstDORowPrtFlags = new List <DORowPrtFlags>(); for (int i = 0; i < arryOrdPrintDOsPreview.Length; i++) { DORowPrtFlags rowFlag = new DORowPrtFlags(); DORowPrtFlags rowFlagOrg = dicDORowPrtFlagsPreview[arryOrdPrintDOsPreview[i].Id_or]; rowFlag.ForceAfterToNewPage = rowFlagOrg.ForceAfterToNewPage; rowFlag.ForceInOneGridRow = rowFlagOrg.ForceInOneGridRow; rowFlag.MarkType = rowFlagOrg.MarkType; rowFlag.InvalidPrtType = rowFlagOrg.InvalidPrtType; rowFlag.IsDataRemedy = rowFlagOrg.IsDataRemedy; lstDORowPrtFlags.Add(rowFlag); } prtDORowsAssistPreview = new PrtDORowsAssist(lstDORowPrtFlags); }
/// <summary> /// 获取一般续打展现数据 /// </summary> /// <param name="idEn">就诊id </param> /// <param name="fgLong">长临标识</param> /// <param name="pageNum">已打印最后一页的页码,第一页为0</param> /// <param name="rowAssist">返回一般打印数据集合标记参数</param> /// <returns>返回一般打印数据集合</returns> public OrdPrintDO[] GetPreviewContinueOrds(string idEn, FBoolean fgLong, int pageNum, out PrtDORowsAssist rowAssist) { // 构造请求参数 OrdPrintParamDTO paramDTO = this.getOrdPrintParamDTO(idEn, fgLong, pageNum, OrdPrintConst.PRINT_MODE_CONTINUE); return(getPreviewConAndResOrds(paramDTO, out rowAssist)); }
/// <summary> /// 获取单页补打展现数据以及打印数据 /// </summary> /// <param name="paramDTO"></param> /// <param name="detailDOAssist"></param> /// <returns></returns> private OrdPrintDO[] getPreviewSingleOrds(OrdPrintParamDTO paramDTO, out List <OrdPrintDO> ordPrintList, out List <DORowPrtFlags> rowFlagsList, out PrtDORowsAssist detailDOAssist) { //获取指定页码所有已打印的数据 OrdPrintDO[] ordPrintDOsPrted = this.getPrtedOrdsByPage(paramDTO.Id_en, paramDTO.Fg_long, new List <int> { (int)paramDTO.Page_num }); //获取指定页码需要补打作废线or停止时间的数据 OrdPrintDataDTO[] ordPrintDataDTOsToPrt = getCancAndStopSingleOrds(paramDTO); // 需要打印作废标记or停止时间的医嘱集合 Dictionary <string, OrdPrintDataDTO> ordPrintDataDTOsPrtedDic = new Dictionary <string, OrdPrintDataDTO>(); foreach (OrdPrintDataDTO dataDTO in ordPrintDataDTOsToPrt) { if (!ordPrintDataDTOsPrtedDic.ContainsKey(dataDTO.Id_or)) { ordPrintDataDTOsPrtedDic.Add(dataDTO.Id_or, dataDTO); } } ordPrintList = new List <OrdPrintDO>(); rowFlagsList = new List <DORowPrtFlags>(); //设置标记参数 List <DORowPrtFlags> rowFlagList = new List <DORowPrtFlags>(); foreach (OrdPrintDO ordPrintDO in ordPrintDOsPrted) { DORowPrtFlags rowFlag = new DORowPrtFlags(); rowFlag.AtPageIx = (int)ordPrintDO.Page_num; rowFlag.AtGridRowIx = (int)ordPrintDO.Row_num; rowFlag.TakeGridRowCnt = 0;//单页补打,所有数据都需要打印,行数设为0 //rowFlag.TakeGridRowCnt = (int)ordPrintDO.Row_cnt; //rowFlag.ForceInOneGridRow = ordPrintDO.Fg_reformrow == FBoolean.True;// 重整标识行不换行 if (ordPrintDO.Fg_reformrow == FBoolean.True) { rowFlag.ForceInOneGridRow = true; // 重整标识行不换行 rowFlag.MarkType = DORowPrtFlags.ENumMarkType.Text; //重整标记行内容标红 } //根据作废打印标识Fg_canc_prn,判断是否打印过作废线, //打印过作废线的同时显示内容和作废线(黑) rowFlag.InvalidPrtType = ordPrintDO.Fg_canc_prn == true ? DORowPrtFlags.ENumInvalidPrtType.TextWithDelLine : DORowPrtFlags.ENumInvalidPrtType.NotInvalid; rowFlag.IsDataRemedy = (bool)ordPrintDO.Fg_stop_prn; //判断在已打印数据中,是否有需要补打作废线or停止时间 if (ordPrintDO.Id_or != null && ordPrintDataDTOsPrtedDic.ContainsKey(ordPrintDO.Id_or)) { //需要补打停止时间的:停止时间、医生、护士 if (ordPrintDataDTOsPrtedDic[ordPrintDO.Id_or].Fg_chk_stop == true) { rowFlag.IsDataRemedy = true; ordPrintDO.Fg_chk_stop = FBoolean.True; //停止标识 ordPrintDO.Fg_stop_prn = FBoolean.True; //停止打印标识 this.setOrdPrintDatetime(ordPrintDataDTOsPrtedDic[ordPrintDO.Id_or], ordPrintDO); //设置停止时间 } //需要补打作废线的:作废线(黑)、内容(黑) if (ordPrintDataDTOsPrtedDic[ordPrintDO.Id_or].Fg_chk_canc == true) { ordPrintDO.Fg_chk_canc = FBoolean.True; //作废标识 ordPrintDO.Fg_canc_prn = FBoolean.True; //作废打印标识 rowFlag.InvalidPrtType = DORowPrtFlags.ENumInvalidPrtType.TextWithDelLine; } ordPrintList.Add(ordPrintDO); rowFlagsList.Add(rowFlag); } rowFlagList.Add(rowFlag); } detailDOAssist = new PrtDORowsAssist(rowFlagList); return(ordPrintDOsPrted); }
/// <summary> /// 获取作废/停止打印展现数据以及打印数据 /// </summary> /// <param name="paramDTO">参数对象,idEn:就诊id,fgLong:长临标识,Print_mode:打印模式</param> /// <param name="ordPrintDOList"></param> /// <param name="dORowPrtFlagsPrtList"></param> /// <param name="rowAssist"></param> /// <returns>作废、停止打印预览数据</returns> private OrdPrintDO[] getPreviewCalAndStpOrds(OrdPrintParamDTO paramDTO, out List <List <OrdPrintDO> > ordPrintDOList, out List <List <DORowPrtFlags> > dORowPrtFlagsPrtList, out PrtDORowsAssist rowAssist) { // 获取待打印的作废、停止医嘱数据 OrdPrintDataDTO[] ordPrintDataDTOsToPrt = ordPrintExtService.GetOrdPrintDataDTOs(paramDTO); // 获取需要作废、停止医嘱所在页的已打印全部医嘱数据 OrdPrintDO[] ordPrintDOsPrted = ordPrintExtService.GetOrdPrintDOs(paramDTO, ordPrintDataDTOsToPrt); // 需要打印作废标记or停止时间的医嘱集合 Dictionary <string, OrdPrintDataDTO> ordPrintDataDTOsPrtedDic = new Dictionary <string, OrdPrintDataDTO>(); foreach (OrdPrintDataDTO dataDTO in ordPrintDataDTOsToPrt) { if (!ordPrintDataDTOsPrtedDic.ContainsKey(dataDTO.Id_or)) { ordPrintDataDTOsPrtedDic.Add(dataDTO.Id_or, dataDTO); } } // 所有展现数据的标记参数 rowAssist = new PrtDORowsAssist(ordPrintDOsPrted.Length); DORowPrtFlags[] doprtflags = rowAssist.GetDoFlagsArr(); // 用于判断待打印数据是否在一页 int?pageNum = -1; ordPrintDOList = new List <List <OrdPrintDO> >(); dORowPrtFlagsPrtList = new List <List <DORowPrtFlags> >(); List <OrdPrintDO> prtDataList = new List <OrdPrintDO>(); List <DORowPrtFlags> prtFlagsList = new List <DORowPrtFlags>(); // 对已打印数据设置页码、行号、所在行数、是否已打印作废标记 for (int i = 0; i < ordPrintDOsPrted.Length; i++) { doprtflags[i].AtPageIx = (int)ordPrintDOsPrted[i].Page_num; // 所在页码 doprtflags[i].AtGridRowIx = (int)ordPrintDOsPrted[i].Row_num; // 所在行号 doprtflags[i].TakeGridRowCnt = (int)ordPrintDOsPrted[i].Row_cnt; // 所占行数 //根据作废打印标识Fg_canc_prn,判断是否打印过作废线, //打印过作废线的同时显示内容和作废线(置灰),否则只显示内容(置灰) doprtflags[i].InvalidPrtType = ordPrintDOsPrted[i].Fg_canc_prn == true ? DORowPrtFlags.ENumInvalidPrtType.HasPrted : DORowPrtFlags.ENumInvalidPrtType.NotInvalid; if (ordPrintDOsPrted[i].Id_or != null && ordPrintDataDTOsPrtedDic.ContainsKey(ordPrintDOsPrted[i].Id_or)) { switch (paramDTO.Print_mode) { case OrdPrintConst.PRINT_MODE_CANCEL: //需要补打作废线的,作废线(黑),内容(置灰) if (ordPrintDataDTOsPrtedDic[ordPrintDOsPrted[i].Id_or].Fg_chk_canc == true) { doprtflags[i].InvalidPrtType = DORowPrtFlags.ENumInvalidPrtType.DelLine; //doprtflags[i].IsDataRemedy = true; ordPrintDOsPrted[i].Fg_chk_canc = FBoolean.True; //作废核对标识 ordPrintDOsPrted[i].Fg_canc_prn = FBoolean.True; //作废打印标识 } break; case OrdPrintConst.PRINT_MODE_STOP: //需要打印停止时间的数据,将补打标识设置true doprtflags[i].IsDataRemedy = FBoolean.True; ordPrintDOsPrted[i].Fg_chk_stop = FBoolean.True; //停止核对标识 ordPrintDOsPrted[i].Fg_stop_prn = FBoolean.True; //停止打印标识 this.setOrdPrintDatetime(ordPrintDataDTOsPrtedDic[ordPrintDOsPrted[i].Id_or], ordPrintDOsPrted[i]); //设置停止时间 break; } if (pageNum != ordPrintDOsPrted[i].Page_num) { pageNum = ordPrintDOsPrted[i].Page_num; prtDataList = new List <OrdPrintDO>(); prtFlagsList = new List <DORowPrtFlags>(); ordPrintDOList.Add(prtDataList); dORowPrtFlagsPrtList.Add(prtFlagsList); } prtDataList.Add(ordPrintDOsPrted[i]); prtFlagsList.Add(doprtflags[i]); } } return(ordPrintDOsPrted); }
/// <summary> /// 单页补打 /// </summary> /// <param name="idEn">就诊id</param> /// <param name="fgLong">长临标识</param> /// <param name="pageNum">页码</param> /// <param name="detailDOAssist">预览辅助参数</param> /// <returns></returns> public OrdPrintDO[] GetPreviewSignleOrds(string idEn, FBoolean fgLong, int pageNum, out List <OrdPrintDO> ordPrintList, out List <DORowPrtFlags> rowFlagsList, out PrtDORowsAssist detailDOAssist) { // 构造请求参数 OrdPrintParamDTO paramDTO = this.getOrdPrintParamDTO(idEn, fgLong, pageNum, OrdPrintConst.PRINT_MODE_SINGLE); return(this.getPreviewSingleOrds(paramDTO, out ordPrintList, out rowFlagsList, out detailDOAssist)); }
/// <summary> /// 获取停止打印展现数据 /// </summary> /// <param name="idEn">就诊id</param> /// <param name="fgLong">长临标识</param> /// <param name="ordPrintDos">返回停止打印数据</param> /// <param name="rowAssist">停止打印预览的辅助参数</param> /// <returns>返回停止打印预览数据</returns> public OrdPrintDO[] GetPreviewStopOrds(string idEn, FBoolean fgLong, out List <List <OrdPrintDO> > ordPrintList, out List <List <DORowPrtFlags> > dORowPrtFlagsPrintList, out PrtDORowsAssist rowAssist) { // 构造请求参数 OrdPrintParamDTO paramDTO = this.getOrdPrintParamDTO(idEn, fgLong, -1, OrdPrintConst.PRINT_MODE_STOP); return(this.getPreviewCalAndStpOrds(paramDTO, out ordPrintList, out dORowPrtFlagsPrintList, out rowAssist)); }