/// <summary>
 /// 获取排序数据集
 /// 一般打印时,未打数据
 /// </summary>
 public void GetDataListForSort()
 {
     //获取排序数据集
     LstOrdPrintDOsPreview = new XapDataList <OrdPrintDO>();
     dicDORowPrtFlagsPreview.Clear();
     DORowPrtFlags[] doRowPrtFlags = prtDORowsAssistPreview.GetDoFlagsArr();
     for (int i = 0; i < ArryOrdPrintDOsPreview.Length; i++)
     {
         if (ArryOrdPrintDOsPreview[i] != null && ArryOrdPrintDOsPreview[i].Id_orprn == null)
         {
             LstOrdPrintDOsPreview.Add(ArryOrdPrintDOsPreview[i]);
             //以id_or为标记,暂存行标记参数
             if (!dicDORowPrtFlagsPreview.ContainsKey(ArryOrdPrintDOsPreview[i].Id_or))
             {
                 dicDORowPrtFlagsPreview.Add(ArryOrdPrintDOsPreview[i].Id_or, doRowPrtFlags[i]);
             }
         }
     }
 }
        /// <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>
        /// <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);
        }