Exemplo n.º 1
0
        public static IEnumerable<patient_queue> PatientWaitingList(HQSWcfService.shinetriageEntities entities, pager pagerData, int Count)
        {
            var triageData = pagerData.triage;
            int dayOfWeek = (int)DateTime.Now.DayOfWeek;

            var queueTypeEnable = (
                                    triageData.triage_type == 1 && pagerData.doctor.rlt_doctor2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id
                                                                                    && rlt.onduty[dayOfWeek] != '0'
                                                                                    && (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                                rlt.onduty[dayOfWeek] != '2')) == 1)
                                    ||
                                    (triageData.triage_type == 2 && pagerData.rlt_pager2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id
                                                                                    && rlt.onduty[dayOfWeek] != '0'
                                                                                    && (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                                rlt.onduty[dayOfWeek] != '2')) == 1);

            var queue_type = queueTypeEnable ? (triageData.triage_type == 1 ? pagerData.doctor.rlt_doctor2queue_type.FirstOrDefault().queue_type : pagerData.rlt_pager2queue_type.FirstOrDefault().queue_type) : null;
            if (queue_type != null)
            {
                queueTypeEnable = (triageData.triage_type == 1 && queue_type.rlt_doctor2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id
                                                                                    && rlt.onduty[dayOfWeek] != '0'
                                                                                    && (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                                rlt.onduty[dayOfWeek] != '2')) == 1)
                                    ||
                                    (triageData.triage_type == 2 && queue_type.rlt_pager2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id
                                                                                    && rlt.onduty[dayOfWeek] != '0'
                                                                                    && (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                                rlt.onduty[dayOfWeek] != '2')) == 1);
            }

            var queue_type_id = queueTypeEnable ? (triageData.triage_type == 1 ? pagerData.doctor.rlt_doctor2queue_type.FirstOrDefault().queue_type_id : pagerData.rlt_pager2queue_type.FirstOrDefault().queue_type_id) : 0;

            var patientQueueList = from patientQueueData in entities.patient_queue
                                   where !patientQueueData.is_call
                                        && patientQueueData.queue_type.is_pretriage ? (
                                                                                        (triageData.triage_type == 1 && patientQueueData.doctor_id == pagerData.doctor_id)
                                                                                        || (triageData.triage_type == 2 && patientQueueData.pager_id == pagerData.pager_id))
                                                                                    : (
                                                                                        queueTypeEnable && patientQueueData.queue_type_id == queue_type_id
                                                                                    )
                                        && patientQueueData.state_triage != 5
                                   orderby
                                         patientQueueData.time_interval,
                                         patientQueueData.is_priority descending,
                                         patientQueueData.sub_queue_order descending,
                                         patientQueueData.queue_num,
                                         patientQueueData.fre_date
                                   select patientQueueData;

            var listPriority = (from p in patientQueueList
                                where p.is_priority && !p.is_call
                                orderby p.opr_time
                                select p
                        ).Take(Count).ToList();
            if (listPriority.Count() == Count)
                return listPriority;

            var listFirst = (from p in patientQueueList
                             where !p.is_priority && p.state_call == 0 && p.state_triage == 0
                             select p).Take(Count).ToList();

            var listPass = (from p in patientQueueList
                            where !p.is_priority && p.state_call == 1 && !p.is_call
                            orderby p.opr_time
                            select p).Take(Count).ToList();

            var listReturn = (from p in patientQueueList
                              where !p.is_call && !p.is_priority && p.state_triage == 1 && p.state_call != 1
                              orderby p.opr_time
                              select p).Take(Count).ToList();

            var tmpFirst = from p in listFirst
                           select new
                           {
                               data = p,
                              // index = listFirst.IndexOf(p)
                           };

            var tmpPass = from p in listPass
                          select new
                          {
                              data = p,
                              index = listPass.Take(listPass.IndexOf(p) + 1).Sum(t => t.return_flag).Value
                          };

            var listFirstAndPass = (from p in tmpFirst.Union(tmpPass)
                                    orderby p.index, p.data.state_call descending
                                    select p.data).ToList();

            var rtn = listPriority.Union(
                                        from patient in
                                            (
                                                (from p in listFirstAndPass
                                                 select new
                                                 {
                                                     data = p,
                                                     index = listFirstAndPass.IndexOf(p)
                                                 }).Union(
                                                from p in listReturn
                                                select new
                                                {
                                                    data = p,
                                                    index = listReturn.Take(listReturn.IndexOf(p) + 1).Sum(t => t.return_flag).Value
                                                }
                                                )
                                                )
                                        orderby patient.index, patient.data.state_triage descending
                                        select patient.data).Take(Count);

            return rtn;
        }
Exemplo n.º 2
0
        public static IEnumerable <patient_queue> PatientWaitingList(HQSWcfService.shinetriageEntities entities, pager pagerData, int Count)
        {
            var triageData = pagerData.triage;
            int dayOfWeek  = (int)DateTime.Now.DayOfWeek;

            var queueTypeEnable = (
                triageData.triage_type == 1 && pagerData.doctor.rlt_doctor2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id &&
                                                                                            rlt.onduty[dayOfWeek] != '0' &&
                                                                                            (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                             rlt.onduty[dayOfWeek] != '2')) == 1)
                                  ||
                                  (triageData.triage_type == 2 && pagerData.rlt_pager2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id &&
                                                                                                       rlt.onduty[dayOfWeek] != '0' &&
                                                                                                       (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                        rlt.onduty[dayOfWeek] != '2')) == 1);

            var queue_type = queueTypeEnable ? (triageData.triage_type == 1 ? pagerData.doctor.rlt_doctor2queue_type.FirstOrDefault().queue_type : pagerData.rlt_pager2queue_type.FirstOrDefault().queue_type) : null;

            if (queue_type != null)
            {
                queueTypeEnable = (triageData.triage_type == 1 && queue_type.rlt_doctor2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id &&
                                                                                                         rlt.onduty[dayOfWeek] != '0' &&
                                                                                                         (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                          rlt.onduty[dayOfWeek] != '2')) == 1)
                                  ||
                                  (triageData.triage_type == 2 && queue_type.rlt_pager2queue_type.Count(rlt => rlt.queue_type.triage_id == triageData.triage_id &&
                                                                                                        rlt.onduty[dayOfWeek] != '0' &&
                                                                                                        (DateTime.Now.Hour < 12 ? rlt.onduty[dayOfWeek] != '3' :
                                                                                                         rlt.onduty[dayOfWeek] != '2')) == 1);
            }

            var queue_type_id = queueTypeEnable ? (triageData.triage_type == 1 ? pagerData.doctor.rlt_doctor2queue_type.FirstOrDefault().queue_type_id : pagerData.rlt_pager2queue_type.FirstOrDefault().queue_type_id) : 0;

            var patientQueueList = from patientQueueData in entities.patient_queue
                                   where !patientQueueData.is_call &&
                                   patientQueueData.queue_type.is_pretriage ? (
                (triageData.triage_type == 1 && patientQueueData.doctor_id == pagerData.doctor_id) ||
                (triageData.triage_type == 2 && patientQueueData.pager_id == pagerData.pager_id))
                                                                                    : (
                queueTypeEnable && patientQueueData.queue_type_id == queue_type_id
                ) &&
                                   patientQueueData.state_triage != 5
                                   orderby
                                   patientQueueData.time_interval,
                patientQueueData.is_priority descending,
                patientQueueData.sub_queue_order descending,
                patientQueueData.queue_num,
                patientQueueData.fre_date
            select patientQueueData;

            var listPriority = (from p in patientQueueList
                                where p.is_priority && !p.is_call
                                orderby p.opr_time
                                select p
                                ).Take(Count).ToList();

            if (listPriority.Count() == Count)
            {
                return(listPriority);
            }

            var listFirst = (from p in patientQueueList
                             where !p.is_priority && p.state_call == 0 && p.state_triage == 0
                             select p).Take(Count).ToList();

            var listPass = (from p in patientQueueList
                            where !p.is_priority && p.state_call == 1 && !p.is_call
                            orderby p.opr_time
                            select p).Take(Count).ToList();

            var listReturn = (from p in patientQueueList
                              where !p.is_call && !p.is_priority && p.state_triage == 1 && p.state_call != 1
                              orderby p.opr_time
                              select p).Take(Count).ToList();

            var tmpFirst = from p in listFirst
                           select new
            {
                data = p,
                // index = listFirst.IndexOf(p)
            };

            var tmpPass = from p in listPass
                          select new
            {
                data  = p,
                index = listPass.Take(listPass.IndexOf(p) + 1).Sum(t => t.return_flag).Value
            };

            var listFirstAndPass = (from p in tmpFirst.Union(tmpPass)
                                    orderby p.index, p.data.state_call descending
                                    select p.data).ToList();

            var rtn = listPriority.Union(
                from patient in
                (
                    (from p in listFirstAndPass
                     select new
            {
                data = p,
                index = listFirstAndPass.IndexOf(p)
            }).Union(
                        from p in listReturn
                        select new
            {
                data = p,
                index = listReturn.Take(listReturn.IndexOf(p) + 1).Sum(t => t.return_flag).Value
            }
                        )
                )
                orderby patient.index, patient.data.state_triage descending
                select patient.data).Take(Count);

            return(rtn);
        }