using SchedulingSystem.EntityClass; using SchedulingSystemClient; using SchedulingSystemClient.EntityClass; using System; using System.Collections.Generic; using System.Linq; using System.Windows; namespace SchedulingSystem { /// /// XGSQJLWindow.xaml 的交互逻辑 /// public partial class XGSQJLWindow : Window { public XGSQJLWindow(Cus_SSSQB selectedRow, SYS_YHB yh) { InitializeComponent(); Row = selectedRow; user = yh; } SYS_YHB user = new SYS_YHB(); Cus_SSSQB Row = new Cus_SSSQB(); SurgerySchedulingEntities myModel = new SurgerySchedulingEntities(); private void Window_Loaded(object sender, RoutedEventArgs e) { //rowssrq.Height = new GridLength(0); //rowsssj.Height = new GridLength(0); List listks = new List(); List listys = new List(); List listssmc = new List(); List listsfjz = new List(); listsfjz.Add(new ComboBoxBinding() { ID = 0, Name = "是" }); listsfjz.Add(new ComboBoxBinding() { ID = 1, Name = "否" }); listks = (from tbsss in myModel.SYS_KSB select new ComboBoxBinding { ID = tbsss.ID, Name = tbsss.KSMC, }).ToList(); listys = (from tbsss in myModel.SYS_SSYSB select new ComboBoxBinding { ID = tbsss.ID, Name = tbsss.YSXM, }).ToList(); listssmc = (from tbsss in myModel.SYS_SSXXB where tbsss.CJSS == true select new ComboBoxBinding { ID = tbsss.ID, Name = tbsss.SSMC, }).ToList(); List shi = new List(); for (int i = 0; i < 24; i++) { if (i < 10) { shi.Add("0" + i); } else { shi.Add(i.ToString()); } } List fen = new List(); for (int i = 0; i < 60; i++) { if (i < 10) { fen.Add("0" + i); } else { fen.Add(i.ToString()); } } List miao = new List(); for (int i = 0; i < 60; i++) { if (i < 10) { miao.Add("0" + i); } else { miao.Add(i.ToString()); } } KS.ItemsSource = listks; KS.SelectedValuePath = "ID"; KS.DisplayMemberPath = "Name"; KS.SelectedValue = Row.KSID; YS.ItemsSource = listys; YS.SelectedValuePath = "ID"; YS.DisplayMemberPath = "Name"; YS.SelectedValue = Row.ZDYSID; SSMC.ItemsSource = listssmc; SSMC.SelectedValuePath = "ID"; SSMC.DisplayMemberPath = "Name"; SSMC.SelectedValue = Row.SSID; SFJZ.ItemsSource = listsfjz; SFJZ.SelectedValuePath = "ID"; SFJZ.DisplayMemberPath = "Name"; SFJZ.SelectedValue = Row.SFJZ==true? 0:1; HZXM.Text = Row.HZXM; ZYH.Text = Row.ZYH; ZLKH.Text = Row.ZLKH; SQZD.Text = Row.SQZD; } private void btn_bc_Click(object sender, RoutedEventArgs e) { if (KS.SelectedIndex < 0) { MessageBox.Show("请选择科室"); return; } if (YS.SelectedIndex < 0) { MessageBox.Show("请选择医生"); return; } if (SSMC.SelectedIndex < 0) { MessageBox.Show("请选择手术"); return; } if (HZXM.Text == null || HZXM.Text == string.Empty) { MessageBox.Show("请填写患者姓名"); return; } if (ZYH.Text == null || ZYH.Text == string.Empty) { MessageBox.Show("请填写住院号"); return; } if (ZLKH.Text == null || ZLKH.Text == string.Empty) { MessageBox.Show("请填写诊疗卡号"); return; } try { Bus_SSSQB sssqb = new Bus_SSSQB(); sssqb.ID = Row.ID; sssqb.SQDH = Row.SQDH; sssqb.HZXM = HZXM.Text; sssqb.KSID = Convert.ToInt32(KS.SelectedValue); //sssqb.QZ = 0; sssqb.SFJZ = SSMC.SelectedIndex == 0 ? true : false; sssqb.SQSJ = DateTime.Now; sssqb.SQZD = SQZD.Text; sssqb.SSID = Convert.ToInt32(SSMC.SelectedValue); sssqb.ZDYSID = Convert.ToInt32(YS.SelectedValue); sssqb.ZLKH = ZLKH.Text; sssqb.ZYH = ZYH.Text; myModel.Entry(sssqb).State = System.Data.Entity.EntityState.Modified; myModel.SaveChanges(); //int pbid = Row.ID; //Bus_PBRZB pbrz = new Bus_PBRZB(); //pbrz.CZLX = 1; //pbrz.CZRYID = user.ID; //pbrz.PBZT = 1; //pbrz.SSID = pbid; //pbrz.CZSJ = DateTime.Now; //myModel.Bus_PBRZB.Add(pbrz); //myModel.SaveChanges(); MessageBox.Show("修改成功"); this.Close(); } catch (Exception ex) { MessageBox.Show("修改失败" + ex.ToString()); } } private void PBFS_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { //if (Convert.ToInt32(PBFS.SelectedValue) == 1) //{ // rowssrq.Height = new GridLength(1, GridUnitType.Star); // rowsssj.Height = new GridLength(1, GridUnitType.Star); //} //else //{ // rowssrq.Height = new GridLength(1); // rowsssj.Height = new GridLength(0); //} } private void btn_qx_Click(object sender, RoutedEventArgs e) { this.Close(); } #region 排班方法 /// /// 修改排班状态 /// private void UpdateZT() { //1、查出最后修改时间 int zhxgsj = Convert.ToInt32((from tbqtcs in myModel.Bus_SJCSB select new { tbqtcs }).Single().tbqtcs.ZHXGSJ.Replace("天内", "")); //2、获取锁定时间 DateTime sdsj = DateTime.Now.AddDays(zhxgsj).Date.AddSeconds(-1); //3、查出状态不是已完成和已取消并且开始时间小于锁定时间的手术排班 var listpbb = (from tbpbb in myModel.Bus_SSPBB where tbpbb.PBZT != 3 && tbpbb.PBZT != 4 && tbpbb.SSKSSJ < sdsj select new { tbpbb }).ToList(); try { for (int i = 0; i < listpbb.Count; i++) { Bus_SSPBB pbb = new Bus_SSPBB(); pbb = listpbb[i].tbpbb; //4、获取手术完成时间 DateTime sswcsj = Convert.ToDateTime(pbb.SSKSSJ).AddHours(Convert.ToDouble(pbb.SSZSC)); //5、如果手术完成时间小于当前时间修改状态为已完成 if (sswcsj < DateTime.Now) { pbb.PBZT = 4; myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; } //6、如果手术完成时间大于当前时间修改状态为已锁定 else { if (listpbb[i].tbpbb.PBZT != 5) { pbb.PBZT = 2; myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; } } } myModel.SaveChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } double amsc = 0; double pmsc = 0; string mtkssj = string.Empty; string mtpbjssj = string.Empty; string sssxxsj = string.Empty; /// /// 智能排班(修改开始时间) /// private void SmartScheduling() { //查询其他参数表 var qtcs = (from tbqtcs in myModel.Bus_SJCSB select new { tbqtcs }).Single(); //获取每天排班时间长 int mtsssc = Convert.ToInt32(qtcs.tbqtcs.MTPBSC.Replace("小时", "")); //获取锁定时间 DateTime sdsj = DateTime.Now.AddDays(Convert.ToDouble(qtcs.tbqtcs.ZHXGSJ.Replace("天内", ""))).Date.AddSeconds(-1); var qjdb = (from tbqjd in myModel.SYS_SSQKLXB select new { tbqjd }).ToList(); //获取每天排班开始时间 mtkssj = qtcs.tbqtcs.PBKSSJ; //获取每天排班时长 double mtpbsc = Convert.ToDouble(qtcs.tbqtcs.MTPBSC.Replace("小时", "")); //获取手术室休息时间 sssxxsj = qtcs.tbqtcs.STRXXSJ; //获取手术室休息时长 double sssxxsc = Convert.ToDouble(qtcs.tbqtcs.XXSC); string pmkssj = string.Empty; bool sfxx = sssxxsj == "不休息"; //判断手术室是否有休息时间 if (!sfxx) { //8、如果手术室需要休息获取休息前后两端时间的时长 DateTime kspbjs = Convert.ToDateTime(DateTime.Now.Date.ToString("yyyy-MM-dd") + " " + mtkssj); DateTime ksxxsj = Convert.ToDateTime(DateTime.Now.Date.ToString("yyyy-MM-dd") + " " + sssxxsj); DateTime xwkssj = ksxxsj.AddHours(sssxxsc); pmkssj = xwkssj.ToString("HH:mm:ss"); TimeSpan ts = ksxxsj - kspbjs; amsc = ts.TotalHours; pmsc = mtpbsc - amsc; } //每天排班结束时间 mtpbjssj = Convert.ToDateTime(DateTime.Now.Date.ToString("yyyy-MM-dd") + " " + mtkssj).AddHours(mtpbsc + sssxxsc).ToString("HH:mm:ss"); DateTime dt = DateTime.Now.Date; //1、查询出开始时间为空(未进行排班)和开始时间大于锁定时间的手术排班 List listpbjl = (from tbpbb in myModel.Bus_SSPBB where tbpbb.SSKSSJ == null || tbpbb.SSKSSJ > sdsj select new Cus_SJKPBB { ID = tbpbb.ID, //HZXM = tbpbb.HZXM, //KSID = tbpbb.KSID, //KSSJ = tbpbb.KSSJ, //PBZT = tbpbb.PBZT, //QZ = tbpbb.QZ, //SQR = tbpbb.SQR, //SQSJ = tbpbb.SQSJ, //KSRQ = tbpbb.KSRQ, //SSLX = tbpbb.SSLX, //SSMC = tbpbb.SSMC, //SSQJD = tbpbb.SSQJD, //SSSC = tbpbb.SSSC, //SSSID = tbpbb.SSSID, //SSSQJSC = tbpbb.SSSQJSC, //SSZSC = tbpbb.SSZSC, //XGR = tbpbb.XGR, //XGSJ = tbpbb.XGSJ, //YSID = tbpbb.YSID, //ZLKH = tbpbb.ZLKH, //ZYH = tbpbb.ZYH }).ToList(); //2、将排班按照手术室分组获取手术室列表 var listsss = listpbjl.GroupBy(a => a.SSSID).ToList(); try { //3、使用for循环为每个手术室进行排班 for (int j = 0; j < listsss.Count; j++) { int sssid = Convert.ToInt32(listsss[j].Key); //4、获取每个手术室的排班并按权重进行排序 List listssspb = listpbjl.Where(a => a.PBZT == 1 && a.SSSID == sssid).ToList(); //5、获取排班开始时间 DateTime pbkssj = Convert.ToDateTime(DateTime.Now.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); double pbsc = mtpbsc; double am = amsc; double pm = pmsc; List ypb = new List(); List listpb = new List(); //手术室需要休息 if (!sfxx) { //执行排班方法 //DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); } } //myModel.SaveChanges(); //MessageBox.Show("排班成功"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } //private void DiGuiPaiBan(DateTime pbkssj, string sssxxsj, List listpb, List listssspb, double am, double pm, List ypb, string pmkssj) //{ // DateTime rq = pbkssj.Date; // //实例化排班列表 // listpb = new List(); // Bus_SSPBB pbb = new Bus_SSPBB(); // DateTime xxsj = Convert.ToDateTime(pbkssj.Date.ToString("yyyy-MM-dd") + " " + sssxxsj); // //1、判断开始时间是否大于休息时间 // if (pbkssj < xxsj) // { // if (pbkssj.ToString("HH:mm:ss") == mtkssj) // { // var sdpbb = (from tbsdpbb in myModel.Bus_SDPBB // where tbsdpbb.SSRQ == rq && tbsdpbb.SSJSSJ <= xxsj // select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); // if (sdpbb.Count > 0) // { // for (int i = 0; i < sdpbb.Count; i++) // { // DateTime ikssj = sdpbb[i].tbsdpbb.SSSJ; // DateTime ijssj = sdpbb[i].tbsdpbb.SSJSSJ; // decimal isszsc = sdpbb[i].tbsdpbb.SSZSC; // if (i == 0) // { // TimeSpan amhoursSpan = new TimeSpan(ikssj.Ticks - pbkssj.Ticks); // am = amhoursSpan.Hours; // } // else // { // TimeSpan amhoursSpan = new TimeSpan(sdpbb[i + 1].tbsdpbb.SSSJ.Ticks - sdpbb[i].tbsdpbb.SSJSSJ.Ticks); // am = amhoursSpan.Hours; // } // //排班时间为上午 // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // am = am - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // } // if (i == sdpbb.Count - 1) // { // TimeSpan amhoursSpan = new TimeSpan(xxsj.Ticks - ijssj.Ticks); // am = amhoursSpan.Hours; // //排班时间为上午 // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbkssj = ijssj; // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // am = am - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // //判断已排班数量是否等于该手术室排班数量 // if (ypb.Count != listssspb.Count) // { // //判断排班时间是否小于六天后 // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // } // } // } // } // else // { // //排班时间为上午 // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // am = am - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // //判断已排班数量是否等于该手术室排班数量 // if (ypb.Count != listssspb.Count) // { // //判断排班时间是否小于六天后 // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // } // else // { // //判断下午时长是否等于每天下午时长 // if (pm == pmsc) // { // //排班时间改为休息之后的时间 // pbkssj = Convert.ToDateTime(pbkssj.Date.ToString("yyyy-MM-dd") + " " + pmkssj); // } // //查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //下午剩余时间-手术总时长 // pm = pm - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // //判断排班时间是否大于六天后 // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // //重新执行排班方法 // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // else // { // //判断下午剩余时长是否等于每天下午时长 // if (pm != pmsc) // { // //排班时间改为第二天的排班开始时间 // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } // } // else // { // //排班时间为上午 // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // am = am - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // //判断已排班数量是否等于该手术室排班数量 // if (ypb.Count != listssspb.Count) // { // //判断排班时间是否小于六天后 // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // } // else // { // //判断下午时长是否等于每天下午时长 // if (pm == pmsc) // { // DateTime xwkssj = Convert.ToDateTime(pbkssj.Date.ToString("yyyy-MM-dd") + " " + pmkssj); // //排班时间改为休息之后的时间 // pbkssj = xwkssj; // var sdpbb = (from tbsdpbb in myModel.Bus_SDPBB // where tbsdpbb.SSRQ == rq && tbsdpbb.SSSJ >= xwkssj // select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); // if (sdpbb.Count > 0) // { // for (int i = 0; i < sdpbb.Count; i++) // { // DateTime ikssj = sdpbb[i].tbsdpbb.SSSJ; // DateTime ijssj = sdpbb[i].tbsdpbb.SSJSSJ; // decimal isszsc = sdpbb[i].tbsdpbb.SSZSC; // if (i == 0) // { // TimeSpan amhoursSpan = new TimeSpan(ikssj.Ticks - pbkssj.Ticks); // pm = amhoursSpan.Hours; // } // else // { // TimeSpan amhoursSpan = new TimeSpan(sdpbb[i + 1].tbsdpbb.SSSJ.Ticks - sdpbb[i].tbsdpbb.SSJSSJ.Ticks); // pm = amhoursSpan.Hours; // } // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // pm = pm - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // } // if (i == sdpbb.Count - 1) // { // DateTime pbjssj = Convert.ToDateTime(pbkssj.ToString("yyyy-MM-dd") + " " + mtpbjssj); // TimeSpan amhoursSpan = new TimeSpan(pbjssj.Ticks - ijssj.Ticks); // pm = amhoursSpan.Hours; // //排班时间为上午 // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbkssj = ijssj; // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // am = am - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // } // else // { // //判断下午剩余时长是否等于每天下午时长 // if (pm != pmsc) // { // //排班时间改为第二天的排班开始时间 // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } // } // else // { // //查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // pm = pm - (double)pbb.SSZSC; // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // else // { // if (pm != pmsc) // { // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } // else // { // //查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //下午剩余时间-手术总时长 // pm = pm - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // //判断排班时间是否大于六天后 // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // //重新执行排班方法 // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // else // { // //判断下午剩余时长是否等于每天下午时长 // if (pm != pmsc) // { // //排班时间改为第二天的排班开始时间 // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } // } // } // else // { // //判断下午剩余时长是否等于每天下午时长 // if (pm == pmsc) // { // DateTime xwkssj = Convert.ToDateTime(pbkssj.Date.ToString("yyyy-MM-dd") + " " + pmkssj); // //排班时间改为休息之后的时间 // pbkssj = xwkssj; // var sdpbb = (from tbsdpbb in myModel.Bus_SDPBB // where tbsdpbb.SSRQ == rq && tbsdpbb.SSSJ >= xwkssj // select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); // if (sdpbb.Count > 0) // { // for (int i = 0; i < sdpbb.Count; i++) // { // DateTime ikssj = sdpbb[i].tbsdpbb.SSSJ; // DateTime ijssj = sdpbb[i].tbsdpbb.SSJSSJ; // decimal isszsc = sdpbb[i].tbsdpbb.SSZSC; // if (i == 0) // { // TimeSpan amhoursSpan = new TimeSpan(ikssj.Ticks - pbkssj.Ticks); // pm = amhoursSpan.Hours; // } // else // { // TimeSpan amhoursSpan = new TimeSpan(sdpbb[i + 1].tbsdpbb.SSSJ.Ticks - sdpbb[i].tbsdpbb.SSJSSJ.Ticks); // pm = amhoursSpan.Hours; // } // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // pm = pm - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // } // if (i == sdpbb.Count - 1) // { // DateTime pbjssj = Convert.ToDateTime(pbkssj.ToString("yyyy-MM-dd") + " " + mtpbjssj); // TimeSpan amhoursSpan = new TimeSpan(pbjssj.Ticks - ijssj.Ticks); // pm = amhoursSpan.Hours; // //排班时间为上午 // //查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果有列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = ijssj; // pbb.KSRQ = pbkssj.Date; // //修改手术开始时间 // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // //排班时间+手术总时长 // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // //上午剩余时间-手术总时长 // am = am - (double)pbb.SSZSC; // //已排班列表添加当前手术 // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // } // else // { // //判断下午剩余时长是否等于每天下午时长 // if (pm != pmsc) // { // //排班时间改为第二天的排班开始时间 // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } // } // else // { // //查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // pm = pm - (double)pbb.SSZSC; // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // else // { // if (pm != pmsc) // { // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } // else // { // //查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 // listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); // //如果列表有数据直接排班 // if (listpb.Count > 0) // { // pbb.HZXM = listpb[0].HZXM; // pbb.ID = listpb[0].ID; // pbb.KSID = listpb[0].KSID; // //pbb.KSRQ = listpb[0].KSRQ; // pbb.PBZT = listpb[0].PBZT; // pbb.QZ = listpb[0].QZ; // pbb.SQR = listpb[0].SQR; // pbb.SQSJ = listpb[0].SQSJ; // pbb.SSLX = listpb[0].SSLX; // pbb.SSMC = listpb[0].SSMC; // pbb.SSQJD = listpb[0].SSQJD; // pbb.SSSC = listpb[0].SSSC; // pbb.SSSID = listpb[0].SSSID; // pbb.SSSQJSC = listpb[0].SSSQJSC; // pbb.SSZSC = listpb[0].SSZSC; // pbb.XGR = listpb[0].XGR; // pbb.XGSJ = listpb[0].XGSJ; // pbb.YSID = listpb[0].YSID; // pbb.ZLKH = listpb[0].ZLKH; // pbb.ZYH = listpb[0].ZYH; // pbb.KSSJ = pbkssj; // pbb.KSRQ = pbkssj.Date; // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; // myModel.SaveChanges(); // myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; // pbkssj = pbkssj.AddHours((double)pbb.SSZSC); // pm = pm - (double)pbb.SSZSC; // ypb.Add(listssspb.Where(a => a.ID == pbb.ID).Single()); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // else // { // if (pm != pmsc) // { // pbkssj = Convert.ToDateTime(pbkssj.AddDays(1).Date.ToString("yyyy-MM-dd") + " " + mtkssj); // if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) // { // am = amsc; // pm = pmsc; // DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj); // } // } // //如果上午下午都没有数据证明该手术室没有手术不需要排班 // //或者有的手术总时长比上午时长和下午时长都大不能自动排班 // //继续对其他手术室进行排班 // } // } // } //} #endregion } }