示例#1
0
        static void Main(string[] args)
        {
            //设置控制台标题
            Console.Title = ConfigurationManager.AppSettings["DisplayFormTitle"].ToString().Trim();
            //服务运行时间
            var runTime = ConfigurationManager.AppSettings["RunTime"].ToString().Trim();

            while (true)
            {
                var server = new Server();
                var db     = SqlSugarManager.DB;
                //获取医院ID列表
                var hospitalList = db.Queryable <t_hospital>().Where(n => n.IsDelete == 0).ToList();
                for (var i = 0; i < hospitalList.Count; i++)
                {
                    YLog.LogInfo($"....................................【开始处理】:{hospitalList[i].HospitalName}....................................");
                    //每天定时滚动生成下周号源
                    if (DateTime.Now.ToDate6() == runTime)
                    {
                        server.CheckAddNextQueueArrange(db, hospitalList[i].HospitalID);
                    }
                    YLog.LogInfo($"开始执行队列排班............");
                    server.GenerateQueueArrange(db, hospitalList[i].HospitalID);
                    YLog.LogInfo($"队列排班执行结束............");
                    YLog.LogInfo($"开始进入休眠............");
                    Thread.Sleep(5 * 1000);
                    YLog.LogInfo($"休眠结束............");
                    YLog.LogInfo($"开始清理脏数据............");
                    YLog.LogInfo($"脏数据清理中:{server.WashBadData(db, hospitalList[i].HospitalID)}");
                    Thread.Sleep(5 * 1000);
                    YLog.LogInfo($"脏数据清理结束............");
                    YLog.LogInfo($"....................................【结束处理】:{hospitalList[i].HospitalName}....................................\r\n");
                }
            }
        }
示例#2
0
 /// <summary>
 /// 清理脏数据-清理detail表、relation表与main表相关联的isdelete为1的值
 /// </summary>
 /// <returns></returns>
 public string WashBadData(SqlSugarClient db, string hospitalId)
 {
     try
     {
         var rsMain       = db.Queryable <t_mt_queuearrangemain>().Where(n => n.HospitalID == hospitalId).Where(n => n.IsDelete == 1).ToList();
         var rsDetail     = db.Queryable <t_mt_queuearrangedetail>().Where(n => n.IsDelete == 0).In(n => n.QueueArrangeMainID, rsMain.Select(n => n.ID).ToList()).ToList();
         var rsRelation   = db.Queryable <t_mt_queuerearrangerelation>().Where(n => n.IsDelete == 0).In(n => n.QueueArrangeDetailID, rsDetail.Select(n => n.ID).ToList()).ToList();
         var listDetail   = new List <t_mt_queuearrangedetail>();
         var listRelation = new List <t_mt_queuerearrangerelation>();
         //待更新为删除标志的排班详情
         rsDetail.ForEach(item =>
         {
             item.IsDelete = 1;
             item.AlterDT  = DateTime.Now.ToDate4();
             listDetail.Add(item);
         });
         //待更新为删除标志的 队列排班关系
         rsRelation.ForEach(item =>
         {
             item.IsDelete = 1;
             item.AlterDT  = DateTime.Now.ToDate4();
             listRelation.Add(item);
         });
         db.BeginTran();
         if (listDetail.Any())
         {
             db.Updateable <t_mt_queuearrangedetail>(listDetail).ExecuteCommand();
         }
         if (listRelation.Any())
         {
             db.Updateable <t_mt_queuerearrangerelation>(listRelation).ExecuteCommand();
         }
         db.CommitTran();
         return(string.Empty);
     }
     catch (Exception ex)
     {
         db.RollbackTran();
         YLog.LogSystemError(ex.Message);
         return(ex.Message);
     }
 }
示例#3
0
 /// <summary>
 /// 传入号源时间长度,返回需要生成队列排班的周数
 /// </summary>
 /// <param name="dayNums">号源时间长度</param>
 /// <returns></returns>
 public static int GenerateArrangeWeeks(int dayNums)
 {
     try
     {
         var weekNum     = 0;
         var devision    = dayNums / 7;
         var remainCount = dayNums % 7;
         if (remainCount == 0)
         {
             weekNum = devision;
         }
         else
         {
             weekNum = devision + 1;
         }
         return(weekNum);
     }
     catch (Exception ex)
     {
         YLog.LogSystemError(ex.Message);
         throw (ex);
     }
 }
示例#4
0
        /// <summary>
        /// 创建队列排班
        /// </summary>
        /// <param name="modalityId">检查类型Id</param>
        /// <param name="db">dbClient</param>
        /// <param name="listMainInfo">排班日期主表列表</param>
        private void CreateQueueArrange(SqlSugarClient db, string hospitalId, List <ModalityArrangeDate> listModalityDate, List <string> remainModalityList)
        {
            YLog.LogInfo($"开始生成队列排班............");
            try
            {
                if (listModalityDate.Count > 0)
                {
                    listModalityDate.ForEach(item =>
                    {
                        //获取该检查类型下的所有队列
                        var queueList = db.Queryable <t_mt_devicegroup>().Where(n => n.IsDelete == "0")
                                        .Where(n => n.State == 1).Where(n => n.ClinicID == item.ModalityId)
                                        .ToList().Select(n => new
                        {
                            QueueId   = n.ID,
                            QueueName = n.GroupName
                        }).ToList();
                        item.ArrangeDateList.ForEach(ele =>
                        {
                            var listDetailInfo   = new List <t_mt_queuearrangedetail>();
                            var listRelationInfo = new List <t_mt_queuerearrangerelation>();

                            #region "detail表"
                            for (var i = 0; i < 7; i++)
                            {
                                for (var j = 1; j <= 4; j++)
                                {
                                    var detailInfo = new t_mt_queuearrangedetail();
                                    detailInfo.ID  = CommonHandleMethod.GetID();
                                    detailInfo.QueueArrangeMainID  = ele.ID;
                                    detailInfo.QueueArrangeDate    = ele.QueueArrangeStartDate.ToDateTime().AddDays(i).ToDate1();
                                    detailInfo.QueueArrangeWeekDay = CommonHandleMethod.CaculateWeekDay(ele.QueueArrangeStartDate.ToDateTime().AddDays(i));
                                    detailInfo.QueueArrangePeriod  = j;
                                    detailInfo.CreateDT            = DateTime.Now.ToDate4();
                                    detailInfo.IsDelete            = 0;
                                    listDetailInfo.Add(detailInfo);

                                    #region "relation表"
                                    queueList.ForEach(element =>
                                    {
                                        var relationInfo = new t_mt_queuerearrangerelation();
                                        relationInfo.ID  = CommonHandleMethod.GetID();
                                        relationInfo.QueueArrangeDetailID = detailInfo.ID;
                                        relationInfo.QueueID   = element.QueueId;
                                        relationInfo.QueueName = element.QueueName;
                                        relationInfo.State     = 0;
                                        relationInfo.CreateDT  = DateTime.Now.ToDate4();
                                        relationInfo.IsDelete  = 0;
                                        listRelationInfo.Add(relationInfo);
                                    });
                                    #endregion
                                }
                            }
                            #endregion

                            db.Insertable <t_mt_queuearrangemain>(ele).ExecuteCommand();
                            db.Insertable <t_mt_queuearrangedetail>(listDetailInfo).ExecuteCommand();
                            db.Insertable <t_mt_queuerearrangerelation>(listRelationInfo).ExecuteCommand();
                        });
                    });
                }

                //存在未曾添加过队列排班的检查类型
                if (remainModalityList.Any())
                {
                    var listMainInfo     = new List <t_mt_queuearrangemain>();
                    var listDetailInfo   = new List <t_mt_queuearrangedetail>();
                    var listRelationInfo = new List <t_mt_queuerearrangerelation>();
                    Dictionary <string, int> modalityCountMap = new Dictionary <string, int>();

                    int count = 1;
                    remainModalityList.ForEach(item =>
                    {
                        if (modalityCountMap.TryGetValue(item, out count))
                        {
                            modalityCountMap[item] = count++;
                        }
                        else
                        {
                            modalityCountMap.Add(item, 1);
                            count = 1;
                        }
                        YLog.LogInfo($"新增检查类型:{CommonHandleMethod.GetModalityNameByGUID(item)}的队列排班............");
                        var mainInfo = new t_mt_queuearrangemain();
                        var firstDay = CommonHandleMethod.GetWeekFirstDayMon(DateTime.Now);
                        var lastDay  = CommonHandleMethod.GetWeekLastDaySun(DateTime.Now);
                        //获取该检查类型下的所有队列
                        var queueList = db.Queryable <t_mt_devicegroup>().Where(n => n.IsDelete == "0").Where(n => n.State == 1).Where(n => n.ClinicID == item).ToList().Select(n => new
                        {
                            QueueId   = n.ID,
                            QueueName = n.GroupName
                        }).ToList();
                        mainInfo.ID                    = CommonHandleMethod.GetID();
                        mainInfo.HospitalID            = hospitalId;
                        mainInfo.ModalityID            = item;
                        mainInfo.Modality              = CommonHandleMethod.GetModalityNameByGUID(item);
                        mainInfo.IsDelete              = 0;
                        mainInfo.CreateDT              = DateTime.Now.ToDate4();
                        mainInfo.QueueArrangeStartDate = firstDay.ToDate1();
                        mainInfo.QueueArrangeEndDate   = lastDay.ToDate1();
                        mainInfo.SequenceNumber        = count;

                        YLog.LogInfo($"当前生成序号:{count}");
                        for (var i = 0; i < 7; i++)
                        {
                            for (var j = 1; j <= 4; j++)
                            {
                                var detailInfo = new t_mt_queuearrangedetail();
                                detailInfo.ID  = CommonHandleMethod.GetID();
                                detailInfo.QueueArrangeMainID  = mainInfo.ID;
                                detailInfo.QueueArrangeDate    = firstDay.AddDays(i).ToDate1();
                                detailInfo.QueueArrangeWeekDay = CommonHandleMethod.CaculateWeekDay(firstDay.AddDays(i));
                                detailInfo.QueueArrangePeriod  = j;
                                detailInfo.CreateDT            = DateTime.Now.ToDate4();
                                detailInfo.IsDelete            = 0;
                                listDetailInfo.Add(detailInfo);

                                #region "relation表"
                                queueList.ForEach(ele =>
                                {
                                    var relationInfo = new t_mt_queuerearrangerelation();
                                    relationInfo.ID  = CommonHandleMethod.GetID();
                                    relationInfo.QueueArrangeDetailID = detailInfo.ID;
                                    relationInfo.QueueID   = ele.QueueId;
                                    relationInfo.QueueName = ele.QueueName;
                                    relationInfo.State     = 0;
                                    relationInfo.CreateDT  = DateTime.Now.ToDate4();
                                    relationInfo.IsDelete  = 0;
                                    listRelationInfo.Add(relationInfo);
                                });
                                #endregion
                            }
                        }
                        listMainInfo.Add(mainInfo);
                    });
                    db.Insertable <t_mt_queuearrangemain>(listMainInfo).ExecuteCommand();
                    db.Insertable <t_mt_queuearrangedetail>(listDetailInfo).ExecuteCommand();
                    db.Insertable <t_mt_queuerearrangerelation>(listRelationInfo).ExecuteCommand();
                }
            }
            catch (Exception ex)
            {
                db.RollbackTran();
                throw (ex);
            }
        }
示例#5
0
        /// <summary>
        /// 生成队列排班
        /// </summary>
        public void GenerateQueueArrange(SqlSugarClient db, string hospitalId)
        {
            try
            {
                var validDTO = GetSystemConfig(db, hospitalId);
                //当前该医院已有的排班日期段
                var rsMain = db.Queryable <t_mt_queuearrangemain>().Where(n => n.IsDelete == 0)
                             .Where(n => n.HospitalID == hospitalId).ToList();
                //获取当前医院所有检查类型
                var rsModality = db.Queryable <t_mt_clinic>().Where(n => n.IsDelete == 0)
                                 .Where(n => n.HospitalID == hospitalId).ToList();
                //已经参与排班的检查类型
                var rsModalityMain = rsMain.Select(n => n.ModalityID).ToList();
                //当前存在未生成队列排班的检查类型
                var rsRemain         = rsModality.Select(n => n.ID).ToList().Except(rsModalityMain).ToList();
                var modalityDateList = new List <ModalityArrangeDate>();
                //检查类型-队列排班日期列表
                rsModality.ForEach(item =>
                {
                    var modalityDate        = new ModalityArrangeDate();
                    modalityDate.ModalityId = item.ID;
                    modalityDate.Modality   = CommonHandleMethod.GetModalityNameByGUID(item.ID);
                    rsMain.ForEach(ele =>
                    {
                        if (item.ID == ele.ModalityID)
                        {
                            modalityDate.ArrangeDateList.Add(ele);
                        }
                    });
                    if (modalityDate.ArrangeDateList.Count > 0)
                    {
                        modalityDateList.Add(modalityDate);
                    }
                });
                YLog.LogInfo($"获取检查类型/队列排班日期列表............");
                //清洗后的数据列表
                var tempList = ClearData(db, modalityDateList);
                YLog.LogInfo($"数据清洗完成............");
                var listModalityArrangeDate = new List <ModalityArrangeDate>();
                //检查类型-队列排班日期列表
                tempList.ForEach(item =>
                {
                    var modalityArrangeDate        = new ModalityArrangeDate();
                    modalityArrangeDate.ModalityId = item.ModalityId;
                    modalityArrangeDate.Modality   = item.Modality;
                    if (item.ArrangeDateList.Count >= validDTO.WeekNums)
                    {
                        YLog.LogInfo($"当前检查类型:{item.Modality}的队列排班已满足号源生成周数............");
                        return;
                    }
                    var listArrangeMain = new List <t_mt_queuearrangemain>();
                    //生成其余几周的队列排班
                    for (var i = 0; i < (validDTO.WeekNums - item.ArrangeDateList.Count); i++)
                    {
                        var info        = new t_mt_queuearrangemain();
                        info.ID         = CommonHandleMethod.GetID();
                        info.IsDelete   = 0;
                        info.CreateDT   = DateTime.Now.ToDate4();
                        info.HospitalID = hospitalId;
                        info.Modality   = CommonHandleMethod.GetModalityNameByGUID(item.ModalityId);
                        info.ModalityID = item.ModalityId;
                        //获取当前日期列表的 最大序号
                        var maxSequenceNo          = item.ArrangeDateList.Max(n => n.SequenceNumber);
                        var maxSequenceInfo        = item.ArrangeDateList.Where(n => n.SequenceNumber == maxSequenceNo).FirstOrDefault();
                        info.SequenceNumber        = maxSequenceNo + (i + 1);
                        info.QueueArrangeStartDate = CommonHandleMethod.GetWeekFirstDayMon(maxSequenceInfo.QueueArrangeEndDate.ToDateTime().AddDays(7 * i + 1)).ToDate1();
                        info.QueueArrangeEndDate   = CommonHandleMethod.GetWeekLastDaySun(maxSequenceInfo.QueueArrangeEndDate.ToDateTime().AddDays(7 * i + 1)).ToDate1();
                        listArrangeMain.Add(info);
                    }

                    modalityArrangeDate.ArrangeDateList = listArrangeMain;
                    listModalityArrangeDate.Add(modalityArrangeDate);
                });

                //添加队列排班主业务
                CreateQueueArrange(db, hospitalId, listModalityArrangeDate, rsRemain);

                //提交事务
                db.CommitTran();
                YLog.LogInfo($"队列排班生成完成............");
            }
            catch (Exception ex)
            {
                db.RollbackTran();
                YLog.LogSystemError(ex.Message);
            }
        }