Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="StatisticsIndexRescueRoomRescue"/> class.
        /// </summary>
        /// <param name="time">指定的月报表涵盖时间点,只使用其中日期部分。</param>
        /// <param name="isRescue">是否抢救。</param>
        /// <param name="rescueResultId">抢救结果ID。</param>
        public StatisticsIndexRescueRoomRescue(DateTime time, bool isRescue, Guid?rescueResultId, int level)
        {
            var db = new EiSDbContext();

            this.Start   = new DateTime(time.Year, time.Month, 1);
            this.End     = this.Start.AddMonths(1);
            this.Message = string.Format("{0} 抢救:", this.Start.ToString("yyyy年M月"));

            var query = db.RescueRoomInfos.Where(c => this.Start <= c.OutDepartmentTime && c.OutDepartmentTime < this.End);

            //Level 1
            if (level >= 1)
            {
                query         = query.Where(c => c.IsRescue == isRescue);
                this.Message += query.First().IsRescueName;
            }
            //Level 2
            if (level >= 2)
            {
                query         = query.Where(c => c.RescueResultId == rescueResultId);
                this.Message += query.First().RescueResultNameFull;
            }
            query = query.OrderBy(c => c.InDepartmentTime).ThenBy(c => c.RescueRoomInfoId);

            this.List = query.ToList().Select(c => new Item(c)).ToList();
        }
Пример #2
0
        public ActionResult Create([Bind()] Models.ViewModels.RescueRoomConsultations.Create.Create targetV)
        {
            if (ModelState.IsValid)
            {
                var db = new EiSDbContext();

                var target = targetV.GetReturn();

                Models.BusinessModels.TrasenInformationConvertor.FromEmployeeNumberToName(target);

                db.RescueRoomConsultations.Add(target);
                db.SaveChanges();

                //处理返回页面
                if (targetV.GoToGreenPath == true)
                {
                    var rescueRoomInfo = db.RescueRoomInfos.Find(targetV.RescueRoomInfoId);

                    return(RedirectToAction(rescueRoomInfo.GreenPathActionName, "GreenPaths", new { id = rescueRoomInfo.GreenPathId }));
                }

                return(RedirectToAction("Details", "RescueRoomInfos", new { id = targetV.RescueRoomInfoId }));
            }

            var targetW = new Models.ViewModels.RescueRoomConsultations.Create.SelectionWorker(targetV);

            ViewBag.ConsultationDepartmentId = targetW.ConsultationDepartments;

            return(View(targetV));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="StatisticsRescueRoomMonth"/> class.
        /// </summary>
        /// <param name="time">指定的月报表涵盖时间点,只取其中月份部分。</param>
        /// <remarks>涵盖时段内的离室病例。</remarks>
        public StatisticsRescueRoomMonth(DateTime time)
        {
            var db = new EiSDbContext();

            var start = new DateTime(time.Year, time.Month, 1);
            var end   = start.AddMonths(1);

            var list = db.RescueRoomInfos.Where(c => start <= c.OutDepartmentTime && c.OutDepartmentTime < end).ToList();

            this.Time = start;

            this.CountAll = list.Count();

            //抢救
            this.CountIsRescue   = list.Where(c => c.IsRescue).Count();
            this.ListRescueFirst = list.OrderBy(c => c.IsRescue).GroupBy(c => c.IsRescue).Select(c => new RescueFirst(c, time)).ToList();

            //绿色通道
            this.CountIsGreenPath   = list.Where(c => c.IsGreenPath).Count();
            this.ListGreenPathFirst = list.OrderBy(c => c.IsGreenPath).GroupBy(c => c.IsGreenPath).Select(c => new GreenPathFirst(c, time)).ToList();

            //停留时长
            if (this.CountAll > 0)
            {
                this.AverageDuring     = new TimeSpan((long)(list.Average(c => c.During.Value.Ticks)));
                this.AverageDuringHour = this.AverageDuring.TotalHours;
            }
            this.ListDuringFirst = list.OrderBy(c => c.During).GroupBy(c => c.DuringGroupName).Select(c => new DuringFirst(c, time)).ToList();

            //去向
            this.ListDestinationFirst = list.OrderBy(c => c.Destination.DestinationCategoryNameConcat).GroupBy(c => c.Destination.DestinationCategoryNameConcat).Select(c => new DestinationFirst(c, time)).ToList();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="StatisticsIndexObserveRoomDuring"/> class.
        /// </summary>
        /// <param name="time">The time.</param>
        /// <param name="duringHours">The during hours.</param>
        /// <param name="duringMin">The during minimum.</param>
        /// <param name="duringMax">The during maximum.</param>
        public StatisticsIndexObserveRoomDuring(DateTime time, int?duringHours, int?duringMin, int?duringMax, int level)
        {
            var db = new EiSDbContext();

            this.Start   = new DateTime(time.Year, time.Month, 1);
            this.End     = this.Start.AddMonths(1);
            this.Message = string.Format("{0} 停留时长:", this.Start.ToString("yyyy年M月"));

            var list = db.ObserveRoomInfos.Where(c => this.Start <= c.OutDepartmentTime && c.OutDepartmentTime < this.End).ToList();

            if (level == 1)
            {
                list          = list.Where(c => duringMin.Value <= c.DuringHours && c.DuringHours <= duringMax.Value).ToList();
                this.Message += list.First().DuringGroupName;
            }
            if (level == 2)
            {
                list          = list.Where(c => c.DuringHours == duringHours.Value).ToList();
                this.Message += duringHours + "小时";
            }

            list = list.OrderBy(c => c.InDepartmentTime).ThenBy(c => c.ObserveRoomInfoId).ToList();

            this.List = list.Select(c => new Item(c)).ToList();
        }
Пример #5
0
        /// <summary>
        /// Gets the in rescue room way.
        /// </summary>
        /// <param name="id">进入留观室方式ID。</param>
        public JsonResult GetInObserveRoomWay(Guid id)
        {
            var db = new EiSDbContext();

            var target = db.InObserveRoomWays.Find(id);

            return(Json(target));
        }
Пример #6
0
        /// <summary>
        /// Gets the in rescue room way.
        /// </summary>
        /// <param name="id">绿色通道类型ID。</param>
        public JsonResult GetGreenPathCategory(Guid id)
        {
            var db = new EiSDbContext();

            var target = db.GreenPathCategories.Find(id);

            return(Json(target));
        }
Пример #7
0
        /// <summary>
        /// Gets the in rescue room way.
        /// </summary>
        /// <param name="id">去向ID。</param>
        public JsonResult GetDestination(Guid id)
        {
            var db = new EiSDbContext();

            var target = db.Destinations.Find(id);

            return(Json(target));
        }
Пример #8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="StatisticsIndexRescueRoomDestination"/> class.
        /// </summary>
        /// <param name="time">The time.</param>
        /// <param name="isClassifiedToInDepartment">if set to <c>true</c> [is classified to in department].</param>
        /// <param name="isClassifiedToOutDepartment">if set to <c>true</c> [is classified to out department].</param>
        /// <param name="isClassifiedLeave">if set to <c>true</c> [is classified leave].</param>
        /// <param name="isClassifiedToOther">if set to <c>true</c> [is classified to other].</param>
        /// <param name="destinationId">The destination identifier.</param>
        /// <param name="destinationRemarks">The destination remarks.</param>
        public StatisticsIndexRescueRoomDestination(DateTime time, bool?isClassifiedToInDepartment, bool?isClassifiedToOutDepartment, bool?isClassifiedLeave, bool?isClassifiedToOther, Guid?destinationId, string destinationRemarks, int level)
        {
            var db = new EiSDbContext();

            this.Start   = new DateTime(time.Year, time.Month, 1);
            this.End     = this.Start.AddMonths(1);
            this.Message = string.Format("{0} 去向:", this.Start.ToString("yyyy年M月"));

            var query = db.RescueRoomInfos.Where(c => this.Start <= c.OutDepartmentTime && c.OutDepartmentTime < this.End);

            if (level == 1)
            {
                if (isClassifiedToInDepartment != null)
                {
                    query = query.Where(c => c.Destination.IsClassifiedToInDepartment == isClassifiedToInDepartment);
                }
                if (isClassifiedToOutDepartment != null)
                {
                    query = query.Where(c => c.Destination.IsClassifiedToOutDepartment == isClassifiedToOutDepartment);
                }
                if (isClassifiedLeave != null)
                {
                    query = query.Where(c => c.Destination.IsClassifiedLeave == isClassifiedLeave);
                }
                if (isClassifiedToOther != null)
                {
                    query = query.Where(c => c.Destination.IsClassifiedToOther == isClassifiedToOther);
                }
                this.Message += query.First().Destination.DestinationCategoryNameConcat;
            }
            if (level == 2)
            {
                query         = query.Where(c => c.DestinationId == destinationId);
                this.Message += query.First().Destination.DestinationCategoryNameConcat + " - " + query.First().Destination.DestinationName;
            }
            if (level == 3)
            {
                query = query.Where(c => c.DestinationId == destinationId);
                if (string.IsNullOrEmpty(destinationRemarks))
                {
                    query = query.Where(c => c.DestinationRemarks == null || c.DestinationRemarks == "");
                }
                else
                {
                    query = query.Where(c => c.DestinationRemarks == destinationRemarks);
                }
                this.Message += query.First().Destination.DestinationCategoryNameConcat + " - " + query.First().DestinationNameFull;
            }

            query = query.OrderBy(c => c.InDepartmentTime).ThenBy(c => c.RescueRoomInfoId);

            this.List = query.ToList().Select(c => new Item(c)).ToList();
        }
        public Create3(Guid JZID)
        {
            var db       = new EiSDbContext();
            var dbTrasen = new TrasenLib.TrasenDbContext("TrasenConnection");

            var MZYS_JZJL = dbTrasen.MZYS_JZJL.Where(c => c.JZID == JZID).FirstOrDefault();
            var YY_KDJB   = dbTrasen.YY_KDJB.Where(c => c.BRXXID == MZYS_JZJL.BRXXID).FirstOrDefault();

            this.JZID = JZID;

            this.ListObserveRoomInfos = db.ObserveRoomInfos.Where(c => c.OutPatientNumber == YY_KDJB.KH && c.OutDepartmentTime.HasValue && c.OutDepartmentTime <= DateTime.Now).OrderByDescending(c => c.OutDepartmentTime).Take(1).ToList().Select(c => new ItemObserveRoomInfo(c, JZID)).ToList();
        }
Пример #10
0
        public IndexRescueRoomHandOver()
        {
            var db = new EiSDbContext();

            this.Time = DateTime.Now;

            var query = db.RescueRoomInfos.AsQueryable();

            query = query.Where(c => c.OutDepartmentTime == null);
            var queryOrdered = query.OrderBy(c => c.InDepartmentTime).ThenBy(c => c.RescueRoomInfoId);
            var list         = queryOrdered.ToList();

            this.List = list.Select(c => new Item(c)).ToList();
        }
Пример #11
0
        /// <summary>
        /// 急性心肌梗死详情-打印。
        /// </summary>
        /// <param name="id">急性心肌梗死绿色通道ID。</param>
        public ActionResult DetailsAmiPrint(Guid id)
        {
            var db = new EiSDbContext();

            var target = db.GreenPathAmis.Find(id);

            if (target == null)
            {
                return(HttpNotFound());
            }

            var targetV = new Models.ViewModels.GreenPaths.DetailsAmiPrint.DetailsAmiPrint(target);

            return(View(targetV));
        }
        public IndexAmi(Route route)
        {
            var db = new EiSDbContext();

            var query = db.RescueRoomInfos.Where(c => c.GreenPathCategory.CodeName == "Ami").SelectMany(c => c.GreenPathAmis);

            route.Count = query.Count();

            var queryOrdered     = query.OrderByDescending(c => c.RescueRoomInfo.InDepartmentTime).ThenBy(c => c.GreenPathAmiId);
            var queryCurrentPage = queryOrdered.Skip((route.Page - 1) * route.PerPage).Take(route.PerPage);

            this.Route = route;

            this.List = queryCurrentPage.ToList().Select(c => new Item(c)).ToList();
        }
Пример #13
0
        public IndexRescueRoomDay(DateTime time)
        {
            var db = new EiSDbContext();

            this.End   = time.Date.AddHours(8);
            this.Start = End.AddDays(-1);

            var queryIn   = db.RescueRoomInfos.Where(c => this.Start <= c.InDepartmentTime && c.InDepartmentTime < this.End);
            var queryStay = db.RescueRoomInfos.Where(c => c.InDepartmentTime < this.Start && (this.Start < c.OutDepartmentTime || c.OutDepartmentTime == null));

            var query        = queryIn.Union(queryStay);
            var queryOrdered = query.OrderBy(c => c.InDepartmentTime).ThenBy(c => c.RescueRoomInfoId);
            var list         = queryOrdered.ToList();

            this.List = list.Select(c => new Item(c)).ToList();
        }
Пример #14
0
        public ActionResult EditAmi([Bind()] Models.ViewModels.GreenPaths.EditAmi.EditAmi targetV)
        {
            //var db = new EiSDbContext();

            //var rescueRoomInfo = db.RescueRoomInfos.Find(greenPathAmi.RescueRoomInfoId);

            ////1-须先有首次心电图才能有再次心电图。
            //if (greenPathAmi.EcgSecondTime.HasValue && !greenPathAmi.EcgFirstTime.HasValue)
            //    ModelState.AddModelError("EcgSecondTime", "须先有首次心电图才能有再次心电图。");
            ////2-再次心电图时间不可早于首次心电图时间。
            //if (greenPathAmi.EcgSecondTime.HasValue && greenPathAmi.EcgFirstTime.HasValue && greenPathAmi.EcgFirstTime.Value > greenPathAmi.EcgSecondTime.Value)
            //    ModelState.AddModelError("EcgSecondTime", "再次心电图时间不可早于首次心电图时间。");
            ////3-完成通道时,发病时间不可为空。
            //if (greenPathAmi.IsFinished && !greenPathAmi.OccurrenceTime.HasValue)
            //    ModelState.AddModelError("OccurrenceTime", "完成通道时,发病时间不可为空。");
            ////4-发病时间不可晚于接诊时间。
            //if (rescueRoomInfo.ReceiveTime.HasValue && greenPathAmi.OccurrenceTime.HasValue && rescueRoomInfo.ReceiveTime.Value < greenPathAmi.OccurrenceTime.Value)
            //    ModelState.AddModelError("OccurrenceTime", "发病时间不可晚于接诊时间。");
            ////5-首次心电图时间不能早于接诊时间。
            ////if (rescueRoomInfo.ReceiveTime.HasValue && greenPathAmi.EcgFirstTime.HasValue && rescueRoomInfo.ReceiveTime.Value > greenPathAmi.EcgFirstTime.Value)
            ////    ModelState.AddModelError("EcgFirstTime", "首次心电图时间不能早于接诊时间。");
            ////6-再次心电图时间不能晚于完成通道时间。
            //if (greenPathAmi.FinishPathTime.HasValue && greenPathAmi.EcgSecondTime.HasValue && greenPathAmi.FinishPathTime.Value < greenPathAmi.EcgSecondTime.Value)
            //    ModelState.AddModelError("EcgSecondTime", "再次心电图时间不能晚于完成通道时间。");
            ////7-完成通道时间不能早于接诊时间。
            //if (rescueRoomInfo.ReceiveTime.HasValue && greenPathAmi.FinishPathTime.HasValue && rescueRoomInfo.ReceiveTime.Value > greenPathAmi.FinishPathTime.Value)
            //    ModelState.AddModelError("EcgFirstTime", "完成通道时间不能早于接诊时间。");

            if (ModelState.IsValid)
            {
                var db = new EiSDbContext();

                var target = db.GreenPathAmis.Find(targetV.GreenPathAmiId);
                if (target == null)
                {
                    return(HttpNotFound());
                }

                targetV.GetReturn(target);

                db.SaveChanges();

                return(RedirectToAction("DetailsAmi", new { id = target.GreenPathAmiId }));
            }

            return(View(targetV));
        }
Пример #15
0
        /// <summary>
        /// 初始化。
        /// </summary>
        /// <param name="route">导航对象。</param>
        public Index(Route route)
        {
            var db = new EiSDbContext();

            var query = db.ObserveRoomInfos.AsQueryable();

            if (route.InDepartmentTimeStart != null)
            {
                query = query.Where(c => route.InDepartmentTimeStart.Value <= c.InDepartmentTime);
            }
            if (route.InDepartmentTimeEnd != null)
            {
                query = query.Where(c => c.InDepartmentTime < route.InDepartmentTimeEnd);
            }
            if (route.OutDepartmentTimeStart != null)
            {
                query = query.Where(c => route.OutDepartmentTimeStart.Value <= c.OutDepartmentTime);
            }
            if (route.OutDepartmentTimeEnd != null)
            {
                query = query.Where(c => c.OutDepartmentTime < route.OutDepartmentTimeEnd);
            }
            if (route.IsLeave != null)
            {
                query = query.Where(c => c.OutDepartmentTime.HasValue == route.IsLeave);
            }
            if (!string.IsNullOrWhiteSpace(route.PatientName))
            {
                route.PatientName = route.PatientName.Trim();
                query             = query.Where(c => c.PatientName == route.PatientName);
            }
            if (!string.IsNullOrEmpty(route.OutPatientNumber))
            {
                route.OutPatientNumber = route.OutPatientNumber.Trim();
                query = query.Where(c => c.OutPatientNumber == route.OutPatientNumber);
            }

            route.Count = query.Count();
            var queryOrdered     = query.OrderByDescending(c => c.InDepartmentTime).ThenBy(c => c.ObserveRoomInfoId);
            var queryCurrentPage = queryOrdered.Skip((route.Page - 1) * route.PerPage).Take(route.PerPage);

            this.Route = route;

            this.List = queryCurrentPage.ToList().Select(c => new Item(c)).ToList();
        }
Пример #16
0
        /// <summary>
        /// 编辑。
        /// </summary>
        /// <param name="id">会诊项ID。</param>
        /// <param name="goToGreenPath">指定跳转到绿色通道表单。(后续参数忽略)</param>
        public ActionResult Edit(Guid id, bool goToGreenPath = false)
        {
            var db = new EiSDbContext();

            var target = db.RescueRoomConsultations.Find(id);

            if (target == null)
            {
                return(HttpNotFound());
            }

            var targetV = new Models.ViewModels.RescueRoomConsultations.Edit.Edit(target, goToGreenPath);
            var targetW = new Models.ViewModels.RescueRoomConsultations.Edit.SelectionWorker(targetV);

            ViewBag.ConsultationDepartmentId = targetW.ConsultationDepartments;

            return(View(targetV));
        }
Пример #17
0
        /// <summary>
        /// 新增。
        /// </summary>
        /// <param name="rescueRoomInfoId">归属的抢救室病例ID。</param>
        /// <param name="goToGreenPath">指定跳转到绿色通道表单。(后续参数忽略)</param>
        public ActionResult Create(Guid rescueRoomInfoId, bool goToGreenPath = false)
        {
            var db = new EiSDbContext();

            var rescueRoomInfo = db.RescueRoomInfos.Find(rescueRoomInfoId);

            if (rescueRoomInfo == null)
            {
                return(HttpNotFound());
            }

            var targetV = new Models.ViewModels.RescueRoomConsultations.Create.Create();
            var targetW = new Models.ViewModels.RescueRoomConsultations.Create.SelectionWorker(targetV);

            targetV.RescueRoomInfoId = rescueRoomInfoId;
            targetV.RequestTime      = DateTime.Today;
            targetV.GoToGreenPath    = goToGreenPath;

            ViewBag.ConsultationDepartmentId = targetW.ConsultationDepartments;

            return(View(targetV));
        }
Пример #18
0
        /// <summary>
        /// 急性心肌梗死新增。
        /// </summary>
        /// <param name="rescueRoomInfoId">归属的抢救室病例ID。</param>
        /// <remarks>直接生成后,跳转到Edit。</remarks>
        public ActionResult CreateAmi(Guid rescueRoomInfoId)
        {
            var db = new EiSDbContext();

            var rescueRoomInfo = db.RescueRoomInfos.Find(rescueRoomInfoId);

            if (rescueRoomInfo == null)
            {
                return(HttpNotFound());
            }

            if (db.GreenPathAmis.Any(c => c.RescueRoomInfoId == rescueRoomInfoId))
            {
                return(HttpNotFound());
            }

            var target = new GreenPathAmi();

            target.GreenPathAmiId   = Guid.NewGuid();
            target.RescueRoomInfoId = rescueRoomInfoId;

            target.UpdateTime = DateTime.Now;

            db.GreenPathAmis.Add(target);
            db.SaveChanges();

            //**已用索引保证唯一性**
            //if (db.GreenPathAmis.Count(c => c.RescueRoomInfoId == rescueRoomInfoId) > 1)
            //{
            //    db.GreenPathAmis.Remove(target);
            //    db.SaveChanges();

            //    return HttpNotFound();
            //}

            return(RedirectToAction("EditAmi", new { id = target.GreenPathAmiId }));
        }
        public StatisticsRescueRoomGeneral(DateTime start, DateTime end)
        {
            var db = new EiSDbContext();

            var list = db.RescueRoomInfos.Where(c => start <= c.OutDepartmentTime && c.OutDepartmentTime < end).ToList();

            this.Start = start;
            this.End   = end;

            this.CountAll      = list.Count();
            this.CountIsRescue = list.Count(c => c.IsRescue);

            //抢救
            this.Rescue             = new ItemRescue(start, end, 0, this.CountAll, list);
            this.Rescue.TitleOfName = "抢救";

            //入室方式
            this.IndepartmentWay             = new ItemInDepartmentWay(start, end, 0, this.CountAll, list);
            this.IndepartmentWay.TitleOfName = "入室方式";

            //去向
            this.Destination             = new ItemDestination(start, end, 0, this.CountAll, list);
            this.Destination.TitleOfName = "去向";
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="StatisticsIndexRescueRoomGreenPath"/> class.
        /// </summary>
        /// <param name="time">The time.</param>
        /// <param name="isGreenPath">if set to <c>true</c> [is green path].</param>
        /// <param name="greenPathCategoryId">The green path category identifier.</param>
        /// <param name="greenPathCategoryRemarks">The green path category remarks.</param>
        public StatisticsIndexRescueRoomGreenPath(DateTime time, bool?isGreenPath, Guid?greenPathCategoryId, string greenPathCategoryRemarks, int level)
        {
            var db = new EiSDbContext();

            this.Start   = new DateTime(time.Year, time.Month, 1);
            this.End     = this.Start.AddMonths(1);
            this.Message = string.Format("{0} 绿色通道:", this.Start.ToString("yyyy年M月"));

            var list = db.RescueRoomInfos.Where(c => this.Start <= c.OutDepartmentTime && c.OutDepartmentTime < this.End).OrderBy(c => c.InDepartmentTime).ThenBy(c => c.RescueRoomInfoId).ToList();

            if (level == 1)
            {
                list          = list.Where(c => c.IsGreenPath == isGreenPath).ToList();
                this.Message += list.First().IsGreenPathName;
            }
            if (level == 2)
            {
                list          = list.Where(c => c.GreenPathCategoryId == greenPathCategoryId).ToList();
                this.Message += list.First().GreenPathCategory.GreenPathCategoryName;
            }
            if (level == 3)
            {
                list = list.Where(c => c.GreenPathCategoryId == greenPathCategoryId).ToList();
                if (string.IsNullOrEmpty(greenPathCategoryRemarks))
                {
                    list = list.Where(c => c.GreenPathCategoryRemarks == null || c.GreenPathCategoryRemarks == "").ToList();
                }
                else
                {
                    list = list.Where(c => c.GreenPathCategoryRemarks == greenPathCategoryRemarks).ToList();
                }
                this.Message += list.First().GreenPathCategoryNameFull;
            }

            this.List = list.Select(c => new Item(c)).ToList();
        }
        /// <summary>
        /// 刷新。
        /// </summary>
        /// <param name="rescueRoomInfoId">归属的抢救室病例ID。</param>
        public ActionResult Refresh(Guid rescueRoomInfoId)
        {
            var db       = new EiSDbContext();
            var dbTrasen = new TrasenDbContext("TrasenConnection");

            var target = db.RescueRoomInfos.Find(rescueRoomInfoId);

            if (target == null)
            {
                return(HttpNotFound());
            }

            //设置时段起点、结点
            DateTime?timeUpperBound;
            DateTime?timeLowerBound;
            {
                timeUpperBound = target.ReceiveTime;
                var itemJZJL = dbTrasen.MZYS_JZJL.Where(c => c.JZID == target.JZID).FirstOrDefault();
                timeLowerBound = itemJZJL.WCSJ;
            }

            //==获取指定GHXXID的“处方表”记录。==
            var queryCFB = dbTrasen.VI_MZ_CFB.Where(c => c.GHXXID == target.GHXXID);

            //设置时段起点
            queryCFB = queryCFB.Where(c => timeUpperBound <= c.SFRQ);
            //设置时段结点
            if (timeLowerBound.HasValue)
            {
                queryCFB = queryCFB.Where(c => c.SFRQ <= timeLowerBound.Value);//该结点边界特殊,使用闭区间——结束的瞬间可能同时有医嘱。
            }
            var listCFB = queryCFB.ToList();

            foreach (var itemCFB in listCFB)
            {
                //获取指定CFID的“处方表明细”记录。
                var queryCFBMX = dbTrasen.VI_MZ_CFB_MX.Where(c => c.CFID == itemCFB.CFID);
                var listCFBMX  = queryCFBMX.ToList();

                foreach (var itemCFBMX in listCFBMX)
                {
                    if (db.RescueRoomDrugRecordDefinitions.Any(c => c.DrugCode == itemCFBMX.BM))
                    {
                        //判断是新增的药品还是退费的药品
                        if (!itemCFBMX.TYID.HasValue)
                        {
                            var rescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.CFMXID == itemCFBMX.CFMXID).FirstOrDefault();

                            if (rescueRoomDrugRecord == null)
                            {
                                rescueRoomDrugRecord = new RescueRoomDrugRecord();

                                rescueRoomDrugRecord.RescueRoomDrugRecordId = Guid.NewGuid();
                                rescueRoomDrugRecord.RescueRoomInfoId       = target.RescueRoomInfoId;
                                rescueRoomDrugRecord.ProductCode            = itemCFBMX.BM;
                                rescueRoomDrugRecord.ProductName            = itemCFBMX.PM;
                                rescueRoomDrugRecord.GoodsName        = itemCFBMX.SPM;
                                rescueRoomDrugRecord.DosageQuantity   = itemCFBMX.YL;
                                rescueRoomDrugRecord.DosageUnit       = itemCFBMX.YLDW;
                                rescueRoomDrugRecord.PrescriptionTime = itemCFB.SFRQ;
                                rescueRoomDrugRecord.Usage            = itemCFBMX.YFMC;

                                rescueRoomDrugRecord.CFMXID = itemCFBMX.CFMXID;
                                rescueRoomDrugRecord.CFID   = itemCFBMX.CFID;

                                rescueRoomDrugRecord.UpdateTime = DateTime.Now;

                                db.RescueRoomDrugRecords.Add(rescueRoomDrugRecord);
                                db.SaveChanges();
                            }
                            else
                            {
                                rescueRoomDrugRecord.RescueRoomInfoId = target.RescueRoomInfoId;
                                rescueRoomDrugRecord.ProductCode      = itemCFBMX.BM;
                                rescueRoomDrugRecord.ProductName      = itemCFBMX.PM;
                                rescueRoomDrugRecord.GoodsName        = itemCFBMX.SPM;
                                rescueRoomDrugRecord.DosageQuantity   = itemCFBMX.YL;
                                rescueRoomDrugRecord.DosageUnit       = itemCFBMX.YLDW;
                                rescueRoomDrugRecord.PrescriptionTime = itemCFB.SFRQ;
                                rescueRoomDrugRecord.Usage            = itemCFBMX.YFMC;

                                rescueRoomDrugRecord.CFMXID = itemCFBMX.CFMXID;
                                rescueRoomDrugRecord.CFID   = itemCFBMX.CFID;

                                db.SaveChanges();
                            }
                        }
                        else
                        {
                            var rescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.CFMXID == itemCFBMX.TYID.Value).FirstOrDefault();

                            if (rescueRoomDrugRecord != null)
                            {
                                rescueRoomDrugRecord.DosageQuantity -= itemCFBMX.YL;

                                if (rescueRoomDrugRecord.DosageQuantity == 0)
                                {
                                    db.RescueRoomDrugRecords.Remove(rescueRoomDrugRecord);
                                }

                                db.SaveChanges();
                            }
                            else
                            {
                                throw new Exception("无对应原始处方明细记录。");
                            }
                        }
                    }
                }
            }

            //删除处方时间早于时段起点的用药项
            if (timeUpperBound.HasValue)
            {
                var listRescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.RescueRoomInfoId == target.RescueRoomInfoId && c.PrescriptionTime < timeUpperBound).ToList();
                db.RescueRoomDrugRecords.RemoveRange(listRescueRoomDrugRecord);
                db.SaveChanges();
            }

            //删除处方时间超过时段结点的用药项
            if (timeLowerBound.HasValue)
            {
                var listRescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.RescueRoomInfoId == target.RescueRoomInfoId && timeLowerBound < c.PrescriptionTime).ToList();
                db.RescueRoomDrugRecords.RemoveRange(listRescueRoomDrugRecord);
                db.SaveChanges();
            }

            //删除编码在定义外的用药项
            if (true)
            {
                var listRescueRoomDrugRecord           = db.RescueRoomDrugRecords.ToList();
                var listRescueRoomDrugRecordDefinition = db.RescueRoomDrugRecordDefinitions.Where(c => c.GreenPathCode == "Ami").ToList();

                foreach (var itemRescueRoomDrugRecord in listRescueRoomDrugRecord)
                {
                    if (!listRescueRoomDrugRecordDefinition.Any(c => c.DrugCode == itemRescueRoomDrugRecord.ProductCode))
                    {
                        db.RescueRoomDrugRecords.Remove(itemRescueRoomDrugRecord);
                    }
                }
                db.SaveChanges();
            }

            return(RedirectToAction("IndexPartial", new { rescueRoomInfoId }));
        }
Пример #22
0
        /// <summary>
        /// 刷新。
        /// </summary>
        /// <param name="id">归属的抢救室病例ID。</param>
        public ActionResult Refresh(Guid rescueRoomInfoId)
        {
            var db = new EiSDbContext();

            var target = db.RescueRoomInfos.Find(rescueRoomInfoId);

            if (target == null)
            {
                return(HttpNotFound());
            }

            Oracle.ManagedDataAccess.Client.OracleConnection  connection;
            Oracle.ManagedDataAccess.Client.OracleCommand     command;
            Oracle.ManagedDataAccess.Client.OracleDataAdapter dataAdapter;
            connection = new Oracle.ManagedDataAccess.Client.OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.9)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hzsydb)));User Id=pacsinterface;Password=pubpacs;");
            command    = new Oracle.ManagedDataAccess.Client.OracleCommand(string.Format("select * from pacstations.PACS_CHECK_VIEW where cureid='{0}' AND chktime>= to_date('{1}','yyyy-mm-dd')", target.OutPatientNumber, target.InDepartmentTime.ToString("yyyy-MM-dd")), connection);
            var dataSet = new System.Data.DataSet();

            dataAdapter = new Oracle.ManagedDataAccess.Client.OracleDataAdapter(command);
            dataAdapter.Fill(dataSet);

            foreach (System.Data.DataRow row in dataSet.Tables[0].Rows)
            {
                var newRescueRoomImageRecord = new RescueRoomImageRecord();

                newRescueRoomImageRecord.BOOKID = (string)row["BOOKID"];

                if (db.RescueRoomImageRecords.Any(c => c.BOOKID == newRescueRoomImageRecord.BOOKID) || (target.OutDepartmentTime.HasValue && target.OutDepartmentTime.Value <= (DateTime?)row["CHKTIME"]))
                {
                    continue;
                }

                newRescueRoomImageRecord.RescueRoomImageRecordId = Guid.NewGuid();
                newRescueRoomImageRecord.RescueRoomInfoId        = target.RescueRoomInfoId;
                newRescueRoomImageRecord.BookTime   = (DateTime?)row["BOOKDATE"];
                newRescueRoomImageRecord.CheckTime  = (DateTime?)row["CHKTIME"];
                newRescueRoomImageRecord.ReportTime = (DateTime?)row["REPTIME"];
                newRescueRoomImageRecord.Part       = (string)row["CHKPARTS"];
                newRescueRoomImageRecord.Category   = (string)row["CHKTYPENAME"];
                var originCode    = row["IMGTYPE"].ToString();
                var imageCategory = db.ImageCategories.FirstOrDefault(c => c.OriginCode == originCode);
                newRescueRoomImageRecord.ImageCategoryId = imageCategory.ImageCategoryId;

                newRescueRoomImageRecord.UpdateTime = DateTime.Now;

                db.RescueRoomImageRecords.Add(newRescueRoomImageRecord);
                db.SaveChanges();
            }

            //删除检查时间早于入室时间的影像项
            if (false)
            {
                var listRescueRoomImageRecord = db.RescueRoomImageRecords.Where(c => c.RescueRoomInfoId == target.RescueRoomInfoId && c.CheckTime < target.InDepartmentTime).ToList();
                db.RescueRoomImageRecords.RemoveRange(listRescueRoomImageRecord);
                db.SaveChanges();
            }

            //删除检查时间超过离室时间的影像项
            if (target.OutDepartmentTime.HasValue)
            {
                var listRescueRoomImageRecord = db.RescueRoomImageRecords.Where(c => c.RescueRoomInfoId == target.RescueRoomInfoId && target.OutDepartmentTime <= c.CheckTime).ToList();
                db.RescueRoomImageRecords.RemoveRange(listRescueRoomImageRecord);
                db.SaveChanges();
            }

            return(RedirectToAction("IndexPartial", new { rescueRoomInfoId = rescueRoomInfoId }));
        }