Beispiel #1
0
 public ItemSecond(RescueRoomDrugRecord rescueRoomDrugRecord)
 {
     this.ProductName      = rescueRoomDrugRecord.ProductName;
     this.DosageQuantity   = rescueRoomDrugRecord.DosageQuantity;
     this.DosageUnit       = rescueRoomDrugRecord.DosageUnit;
     this.PrescriptionTime = rescueRoomDrugRecord.PrescriptionTime;
     this.Usage            = rescueRoomDrugRecord.Usage;
 }
        /// <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 }));
        }