You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1639 lines
94 KiB
1639 lines
94 KiB
using SchedulingSystemClient.EntityClass; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Windows; |
|
|
|
namespace SchedulingSystemClient |
|
{ |
|
|
|
public class PaiBan |
|
{ |
|
static SurgerySchedulingEntities myModel = new SurgerySchedulingEntities(); |
|
static double amsc = 0; |
|
static double pmsc = 0; |
|
static string mtkssj = string.Empty; |
|
static string mtpbjssj = string.Empty; |
|
static string sssxxsj = string.Empty; |
|
/// <summary> |
|
/// 新增排班 |
|
/// </summary> |
|
public static int XinZengPaiBan(int sqid) |
|
{ |
|
try |
|
{ |
|
var listpbsq = (from tbsssqb in myModel.Bus_SSSQB.AsNoTracking() |
|
where tbsssqb.ID ==sqid |
|
select new { tbsssqb }).Single(); |
|
Bus_SSPBB sspbb = new Bus_SSPBB(); |
|
sspbb.QZ = 0; |
|
int ssid = Convert.ToInt32(listpbsq.tbsssqb.SSID); |
|
string zlkh = listpbsq.tbsssqb.ZLKH; |
|
int ysid = Convert.ToInt32(listpbsq.tbsssqb.ZDYSID); |
|
Cus_SSSQB ssxxb = (from tbssxxb in myModel.SYS_SSXXB |
|
join tbssdjb in myModel.SYS_SSDJB on tbssxxb.SSDJID equals tbssdjb.ID |
|
join tbqklxb in myModel.SYS_SSQKLXB on tbssxxb.SSQKLXID equals tbqklxb.ID |
|
join tbssscb in myModel.SYS_SSSCB on tbssxxb.SSSCID equals tbssscb.ID |
|
join tbqjscb in myModel.SYS_SSSCB on tbqklxb.QJSCID equals tbqjscb.ID |
|
where tbssxxb.ID == ssid |
|
select new Cus_SSSQB |
|
{ |
|
SSDJQZ = tbssdjb.QZ, |
|
QKLXQZ = tbqklxb.QZ, |
|
QJSC = tbqjscb.SSSC, |
|
SSSC = tbssscb.SSSC, |
|
}).Single(); |
|
sspbb.QZ = sspbb.QZ + ssxxb.SSDJQZ + ssxxb.QKLXQZ; |
|
var hzvip = (from tbhzvip in myModel.SYS_HZVIPB |
|
where tbhzvip.ZLKH == zlkh |
|
select new { tbhzvip }).ToList(); |
|
if (hzvip.Count > 0) |
|
{ |
|
sspbb.QZ = sspbb.QZ + hzvip[0].tbhzvip.QZ; |
|
} |
|
var ysvip = (from tbysvip in myModel.SYS_YSVIPB |
|
join tbysb in myModel.SYS_SSYSB |
|
on new { tbysvip.YSBM, tbysvip.YSXM } equals new { tbysb.YSBM, tbysb.YSXM } |
|
where tbysb.ID == ysid |
|
select new { tbysvip }).ToList(); |
|
if (ysvip.Count > 0) |
|
{ |
|
sspbb.QZ = sspbb.QZ + ysvip[0].tbysvip.QZ; |
|
} |
|
sspbb.SQDH = listpbsq.tbsssqb.SQDH; |
|
sspbb.ZYH = listpbsq.tbsssqb.ZYH; |
|
sspbb.HZXM = listpbsq.tbsssqb.HZXM; |
|
sspbb.KSID = listpbsq.tbsssqb.KSID; |
|
sspbb.SQSJ = listpbsq.tbsssqb.SQSJ; |
|
sspbb.SQZD = listpbsq.tbsssqb.SQZD; |
|
sspbb.SSID = listpbsq.tbsssqb.SSID; |
|
sspbb.ZDYS = listpbsq.tbsssqb.ZDYSID; |
|
sspbb.SFJZ = listpbsq.tbsssqb.SFJZ; |
|
sspbb.ZLKH = listpbsq.tbsssqb.SQDH; |
|
sspbb.SSSC = ssxxb.SSSC; |
|
sspbb.QJSC = ssxxb.QJSC; |
|
sspbb.SSZSC = sspbb.SSSC + sspbb.QJSC; |
|
//查询科室能使用的手术室 |
|
var listsss = (from tbsssb in myModel.SYS_SSSBDB |
|
where tbsssb.KSID == sspbb.KSID && tbsssb.SFKY == true |
|
select new |
|
{ |
|
tbsssb |
|
}).ToList(); |
|
List<Cus_SSSSC> ssssc = new List<Cus_SSSSC>(); |
|
for (int s = 0; s < listsss.Count; s++) |
|
{ |
|
Cus_SSSSC sc = new Cus_SSSSC(); |
|
int sssid = Convert.ToInt32(listsss[s].tbsssb.SSSID); |
|
var listsssc = (from tbsspbb in myModel.Bus_SSPBB.AsNoTracking() |
|
where tbsspbb.SSSID == sssid |
|
select new |
|
{ |
|
tbsspbb |
|
}).ToList(); |
|
decimal sssc = Convert.ToDecimal(listsssc.Sum(a => a.tbsspbb.SSZSC)); |
|
sc.SSSID = sssid; |
|
sc.SSSC = sssc; |
|
ssssc.Add(sc); |
|
} |
|
ssssc = ssssc.OrderBy(a => a.SSSC).ToList(); |
|
sspbb.SSSID = ssssc[0].SSSID; |
|
sspbb.PBZT = 1; |
|
|
|
myModel.Bus_SSPBB.Add(sspbb); |
|
myModel.SaveChanges(); |
|
int id = sspbb.ID; |
|
myModel.Entry(sspbb).State = System.Data.Entity.EntityState.Detached; |
|
return id; |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageBox.Show(ex.ToString()); |
|
return -1; |
|
} |
|
|
|
//try |
|
//{ |
|
// var listpbsq = (from tbsssqb in myModel.Bus_SSSQB |
|
// where tbsssqb.ZT == 3 |
|
// select new { tbsssqb }).ToList(); |
|
// if (listpbsq.Count > 0) |
|
// { |
|
// for (int i = 0; i < listpbsq.Count; i++) |
|
// { |
|
// Bus_SSPBB sspbb = new Bus_SSPBB(); |
|
// sspbb.QZ = 0; |
|
// int ssid = Convert.ToInt32(listpbsq[i].tbsssqb.SSID); |
|
// string zlkh = listpbsq[i].tbsssqb.ZLKH; |
|
// int ysid = Convert.ToInt32(listpbsq[i].tbsssqb.ZDYSID); |
|
// Cus_SSSQB ssxxb = (from tbssxxb in myModel.SYS_SSXXB |
|
// join tbssdjb in myModel.SYS_SSDJB on tbssxxb.SSDJID equals tbssdjb.ID |
|
// join tbqklxb in myModel.SYS_SSQKLXB on tbssxxb.SSQKLXID equals tbqklxb.ID |
|
// join tbssscb in myModel.SYS_SSSCB on tbssxxb.SSSCID equals tbssscb.ID |
|
// join tbqjscb in myModel.SYS_SSSCB on tbqklxb.QJSCID equals tbqjscb.ID |
|
// where tbssxxb.ID == ssid |
|
// select new Cus_SSSQB |
|
// { |
|
// SSDJQZ = tbssdjb.QZ, |
|
// QKLXQZ = tbqklxb.QZ, |
|
// QJSC = tbqjscb.SSSC, |
|
// SSSC = tbssscb.SSSC, |
|
// }).Single(); |
|
// sspbb.QZ = sspbb.QZ + ssxxb.SSDJQZ + ssxxb.QKLXQZ; |
|
// var hzvip = (from tbhzvip in myModel.SYS_HZVIPB |
|
// where tbhzvip.ZLKH == zlkh |
|
// select new { tbhzvip }).ToList(); |
|
// if (hzvip.Count > 0) |
|
// { |
|
// sspbb.QZ = sspbb.QZ + hzvip[0].tbhzvip.QZ; |
|
// } |
|
// var ysvip = (from tbysvip in myModel.SYS_YSVIPB |
|
// join tbysb in myModel.SYS_SSYSB |
|
// on new { tbysvip.YSBM, tbysvip.YSXM } equals new { tbysb.YSBM, tbysb.YSXM } |
|
// where tbysb.ID == ysid |
|
// select new { tbysvip }).ToList(); |
|
// if (ysvip.Count > 0) |
|
// { |
|
// sspbb.QZ = sspbb.QZ + ysvip[0].tbysvip.QZ; |
|
// } |
|
// sspbb.SQDH = listpbsq[i].tbsssqb.SQDH; |
|
// sspbb.ZYH = listpbsq[i].tbsssqb.ZYH; |
|
// sspbb.HZXM = listpbsq[i].tbsssqb.HZXM; |
|
// sspbb.KSID = listpbsq[i].tbsssqb.KSID; |
|
// sspbb.SQSJ = listpbsq[i].tbsssqb.SQSJ; |
|
// sspbb.SQZD = listpbsq[i].tbsssqb.SQZD; |
|
// sspbb.SSID = listpbsq[i].tbsssqb.SSID; |
|
// sspbb.ZDYS = listpbsq[i].tbsssqb.ZDYSID; |
|
// sspbb.SFJZ = listpbsq[i].tbsssqb.SFJZ; |
|
// sspbb.ZLKH = listpbsq[i].tbsssqb.SQDH; |
|
// sspbb.SSSC = ssxxb.SSSC; |
|
// sspbb.QJSC = ssxxb.QJSC; |
|
// sspbb.SSZSC = sspbb.SSSC + sspbb.QJSC; |
|
// //查询科室能使用的手术室 |
|
// var listsss = (from tbsssb in myModel.SYS_SSSBDB |
|
// where tbsssb.KSID == sspbb.KSID && tbsssb.SFKY == true |
|
// select new |
|
// { |
|
// tbsssb |
|
// }).ToList(); |
|
// List<Cus_SSSSC> ssssc = new List<Cus_SSSSC>(); |
|
// for (int s = 0; s < listsss.Count; s++) |
|
// { |
|
// Cus_SSSSC sc = new Cus_SSSSC(); |
|
// int sssid = Convert.ToInt32(listsss[s].tbsssb.SSSID); |
|
// var listsssc = (from tbsspbb in myModel.Bus_SSPBB |
|
// where tbsspbb.SSSID == sssid |
|
// select new |
|
// { |
|
// tbsspbb |
|
// }).ToList(); |
|
// decimal sssc = Convert.ToDecimal(listsssc.Sum(a => a.tbsspbb.SSZSC)); |
|
// sc.SSSID = sssid; |
|
// sc.SSSC = sssc; |
|
// ssssc.Add(sc); |
|
// } |
|
// ssssc = ssssc.OrderBy(a => a.SSSC).ToList(); |
|
// sspbb.SSSID = ssssc[0].SSSID; |
|
// sspbb.PBZT = 1; |
|
// myModel.Bus_SSPBB.Add(sspbb); |
|
// myModel.SaveChanges(); |
|
// myModel.Entry(sspbb).State = System.Data.Entity.EntityState.Detached; |
|
// listpbsq[i].tbsssqb.ZT = 1; |
|
// myModel.Entry(listpbsq[i].tbsssqb).State = System.Data.Entity.EntityState.Modified; |
|
// myModel.SaveChanges(); |
|
// myModel.Entry(listpbsq[i].tbsssqb).State = System.Data.Entity.EntityState.Detached; |
|
// } |
|
// } |
|
//} |
|
//catch (Exception ex) |
|
//{ |
|
// MessageBox.Show(ex.ToString()); |
|
//} |
|
} |
|
/// <summary> |
|
/// 更新状态 |
|
/// </summary> |
|
public static void GengXinZhuangTai() |
|
{ |
|
try |
|
{ |
|
//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(); |
|
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; |
|
myModel.SaveChanges(); |
|
myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; |
|
} |
|
//6、如果手术完成时间大于当前时间修改状态为已锁定 |
|
else |
|
{ |
|
if (listpbb[i].tbpbb.PBZT != 5) |
|
{ |
|
pbb.PBZT = 2; |
|
myModel.Entry(pbb).State = System.Data.Entity.EntityState.Modified; |
|
myModel.SaveChanges(); |
|
myModel.Entry(pbb).State = System.Data.Entity.EntityState.Detached; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageBox.Show(ex.ToString()); |
|
} |
|
} |
|
/// <summary> |
|
/// 智能排班(修改开始时间) |
|
/// </summary> |
|
public static 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<Cus_SJKPBB> listpbjl = (from tbpbb in myModel.Bus_SSPBB |
|
where tbpbb.SSKSSJ == null || tbpbb.SSKSSJ > sdsj |
|
select new Cus_SJKPBB |
|
{ |
|
ID = tbpbb.ID, |
|
BZ = tbpbb.BZ, |
|
HZXM = tbpbb.HZXM, |
|
KSID = tbpbb.KSID, |
|
MZYS1 = tbpbb.MZYS1, |
|
MZYS2 = tbpbb.MZYS2, |
|
MZYS3 = tbpbb.MZYS3, |
|
PBZT = tbpbb.PBZT, |
|
QJSC = tbpbb.QJSC, |
|
QZ = tbpbb.QZ, |
|
SFJZ = tbpbb.SFJZ, |
|
SQDH = tbpbb.SQDH, |
|
SQSJ = tbpbb.SQSJ, |
|
SQZD = tbpbb.SQZD, |
|
SSID = tbpbb.SSID, |
|
SSJSSJ = tbpbb.SSJSSJ, |
|
SSKSSJ = tbpbb.SSKSSJ, |
|
SSSC = tbpbb.SSSC, |
|
SSSID = tbpbb.SSSID, |
|
SSZSC = tbpbb.SSZSC, |
|
XHHS1 = tbpbb.XHHS1, |
|
XHHS2 = tbpbb.XHHS2, |
|
XSHS1 = tbpbb.XSHS1, |
|
XSHS2 = tbpbb.XSHS2, |
|
ZDYS = tbpbb.ZDYS, |
|
ZLKH = tbpbb.ZLKH, |
|
ZS1 = tbpbb.ZS1, |
|
ZS2 = tbpbb.ZS2, |
|
ZS3 = tbpbb.ZS3, |
|
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<Cus_SJKPBB> 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<Cus_SJKPBB> ypb = new List<Cus_SJKPBB>(); |
|
List<Cus_SJKPBB> listpb = new List<Cus_SJKPBB>(); |
|
//手术室需要休息 |
|
if (!sfxx) |
|
{ |
|
//执行排班方法 |
|
DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj, sssid); |
|
} |
|
} |
|
//myModel.SaveChanges(); |
|
//MessageBox.Show("排班成功"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
|
|
MessageBox.Show(ex.ToString()); |
|
} |
|
} |
|
public static void DiGuiPaiBan(DateTime pbkssj, string sssxxsj, List<Cus_SJKPBB> listpb, List<Cus_SJKPBB> listssspb, double am, double pm, List<Cus_SJKPBB> ypb, string pmkssj, int sssid) |
|
{ |
|
DateTime rq = pbkssj.Date; |
|
//实例化排班列表 |
|
listpb = new List<Cus_SJKPBB>(); |
|
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 |
|
join tbpbb in myModel.Bus_SSPBB on tbsdpbb.SSID equals tbpbb.ID |
|
where tbsdpbb.SSSJ>=pbkssj && tbsdpbb.SSJSSJ <= xxsj && tbpbb.SSSID == sssid |
|
select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); |
|
if (sdpbb.Count > 0) |
|
{ |
|
for (int i = 0; i < sdpbb.Count; i++) |
|
{ |
|
DateTime ikssj = Convert.ToDateTime( sdpbb[i].tbsdpbb.SSSJ); |
|
DateTime ijssj = Convert.ToDateTime(sdpbb[i].tbsdpbb.SSJSSJ); |
|
decimal isszsc = Convert.ToDecimal(sdpbb[i].tbsdpbb.SSZSC); |
|
if (i == 0) |
|
{ |
|
TimeSpan amhoursSpan = new TimeSpan(ikssj.Ticks - pbkssj.Ticks); |
|
am = amhoursSpan.TotalHours; |
|
} |
|
else |
|
{ |
|
TimeSpan amhoursSpan = new TimeSpan(Convert.ToDateTime(sdpbb[i + 1].tbsdpbb.SSSJ).Ticks - Convert.ToDateTime(sdpbb[i].tbsdpbb.SSJSSJ).Ticks); |
|
am = amhoursSpan.TotalHours; |
|
} |
|
//排班时间为上午 |
|
//查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果有列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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.TotalHours; |
|
//排班时间为上午 |
|
//查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果有列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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,sssid); |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
pbkssj = ijssj; |
|
if (ypb.Count != listssspb.Count) |
|
{ |
|
//判断排班时间是否小于六天后 |
|
if (pbkssj <= DateTime.Now.AddDays(6).Date.AddSeconds(-1)) |
|
{ |
|
DiGuiPaiBan(pbkssj, sssxxsj, listpb, listssspb, am, pm, ypb, pmkssj, sssid); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//排班时间为上午 |
|
//查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果有列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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, sssid); |
|
} |
|
} |
|
} |
|
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.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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, sssid); |
|
} |
|
} |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//排班时间为上午 |
|
//查询出未排班并且手术总时长小于或等于上午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(am)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果有列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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, sssid); |
|
} |
|
} |
|
} |
|
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 |
|
join tbpbb in myModel.Bus_SSPBB on tbsdpbb.SSID equals tbpbb.ID |
|
where tbsdpbb.SSSJ >= pbkssj && tbsdpbb.SSJSSJ <= xxsj && tbpbb.SSSID == sssid |
|
select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); |
|
//var sdpbb = (from tbsdpbb in myModel.Bus_SDPBB |
|
// join tbpbb in myModel.Bus_SSPBB on tbsdpbb.SSID equals tbpbb.ID |
|
// where tbsdpbb.SSRQ == rq && tbsdpbb.SSJSSJ <= xxsj && tbpbb.SSSID == sssid |
|
// select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); |
|
if (sdpbb.Count > 0) |
|
{ |
|
for (int i = 0; i < sdpbb.Count; i++) |
|
{ |
|
DateTime ikssj = Convert.ToDateTime( sdpbb[i].tbsdpbb.SSSJ); |
|
DateTime ijssj = Convert.ToDateTime(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(Convert.ToDateTime(sdpbb[i + 1].tbsdpbb.SSSJ).Ticks - Convert.ToDateTime(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.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
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, sssid); |
|
} |
|
} |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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, sssid); |
|
} |
|
} |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
|
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//判断下午剩余时长是否等于每天下午时长 |
|
if (pm == pmsc) |
|
{ |
|
DateTime xwkssj = Convert.ToDateTime(pbkssj.Date.ToString("yyyy-MM-dd") + " " + pmkssj); |
|
DateTime xwjssj = Convert.ToDateTime(pbkssj.Date.ToString("yyyy-MM-dd") + " " + mtpbjssj); |
|
//排班时间改为休息之后的时间 |
|
pbkssj = xwkssj; |
|
|
|
var sdpbb = (from tbsdpbb in myModel.Bus_SDPBB |
|
join tbpbb in myModel.Bus_SSPBB on tbsdpbb.SSID equals tbpbb.ID |
|
where tbsdpbb.SSSJ >= xwkssj && tbsdpbb.SSJSSJ <= xwjssj && tbpbb.SSSID == sssid |
|
select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); |
|
|
|
//var sdpbb = (from tbsdpbb in myModel.Bus_SDPBB |
|
// join tbpbb in myModel.Bus_SSPBB on tbsdpbb.SSID equals tbpbb.ID |
|
// where tbsdpbb.SSRQ == rq && tbsdpbb.SSJSSJ <= xxsj && tbpbb.SSSID == sssid |
|
// select new { tbsdpbb }).OrderBy(a => a.tbsdpbb.SSSJ).ToList(); |
|
if (sdpbb.Count > 0) |
|
{ |
|
for (int i = 0; i < sdpbb.Count; i++) |
|
{ |
|
DateTime ikssj = Convert.ToDateTime(sdpbb[i].tbsdpbb.SSSJ); |
|
DateTime ijssj = Convert.ToDateTime(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(Convert.ToDateTime(sdpbb[i + 1].tbsdpbb.SSSJ).Ticks - Convert.ToDateTime(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.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
//修改手术开始时间 |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
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, sssid); |
|
} |
|
} |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//查询出未排班并且手术总时长小于或等于下午时长的手术按权重排序 |
|
listpb = listssspb.Except(ypb).Where(a => a.SSZSC <= Convert.ToDecimal(pm)).OrderByDescending(a => a.QZ).ToList(); |
|
//如果列表有数据直接排班 |
|
if (listpb.Count > 0) |
|
{ |
|
pbb.ID = listpb[0].ID; |
|
pbb.BZ = listpb[0].BZ; |
|
pbb.HZXM = listpb[0].HZXM; |
|
pbb.KSID = listpb[0].KSID; |
|
pbb.MZYS1 = listpb[0].MZYS1; |
|
pbb.MZYS2 = listpb[0].MZYS2; |
|
pbb.MZYS3 = listpb[0].MZYS3; |
|
pbb.PBZT = listpb[0].PBZT; |
|
pbb.QJSC = listpb[0].QJSC; |
|
pbb.QZ = listpb[0].QZ; |
|
pbb.SFJZ = listpb[0].SFJZ; |
|
pbb.SQDH = listpb[0].SQDH; |
|
pbb.SQSJ = listpb[0].SQSJ; |
|
pbb.SQZD = listpb[0].SQZD; |
|
pbb.SSID = listpb[0].SSID; |
|
pbb.SSSC = listpb[0].SSSC; |
|
pbb.SSSID = listpb[0].SSSID; |
|
pbb.SSZSC = listpb[0].SSZSC; |
|
pbb.XHHS1 = listpb[0].XHHS1; |
|
pbb.XHHS2 = listpb[0].XHHS2; |
|
pbb.XSHS1 = listpb[0].XSHS1; |
|
pbb.XSHS2 = listpb[0].XSHS2; |
|
pbb.ZDYS = listpb[0].ZDYS; |
|
pbb.ZLKH = listpb[0].ZLKH; |
|
pbb.ZS1 = listpb[0].ZS1; |
|
pbb.ZS2 = listpb[0].ZS2; |
|
pbb.ZS3 = listpb[0].ZS3; |
|
pbb.ZYH = listpb[0].ZYH; |
|
pbb.SSKSSJ = pbkssj; |
|
pbb.SSJSSJ = Convert.ToDateTime(pbb.SSKSSJ).AddHours((double)pbb.SSZSC); |
|
pbb.SSRQ = pbkssj.Date; |
|
listpb = new List<Cus_SJKPBB>(); |
|
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, sssid); |
|
} |
|
} |
|
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, sssid); |
|
} |
|
} |
|
//如果上午下午都没有数据证明该手术室没有手术不需要排班 |
|
//或者有的手术总时长比上午时长和下午时长都大不能自动排班 |
|
//继续对其他手术室进行排班 |
|
} |
|
} |
|
|
|
} |
|
} |
|
/// <summary> |
|
/// 日间排班 |
|
/// </summary> |
|
public static void RiJianPaiBan() |
|
{ |
|
DateTime date = DateTime.Now.Date; |
|
DateTime time = DateTime.Now; |
|
var listrjpb = (from tbrjpb in myModel.Bus_RJSSB |
|
where tbrjpb.SSRQ == date |
|
select new { tbrjpb }).ToList(); |
|
for (int j = 0; j < listrjpb.Count; j++) |
|
{ |
|
if (listrjpb[j].tbrjpb.SSJSSJ < time) |
|
{ |
|
listrjpb[j].tbrjpb.PBZT = 4; |
|
} |
|
} |
|
//var listsssid = listrjpb.GroupBy(a => a.tbrjpb.SSSID).ToList(); |
|
//for (int i = 0; i < listsssid.Count; i++) |
|
//{ |
|
// int sssid =Convert.ToInt32(listsssid[i].Key); |
|
// var listsss = listrjpb.Where(a => a.tbrjpb.SSSID == sssid && a.tbrjpb.PBZT == 1).OrderBy(a=>a.tbrjpb.SQSJ).ToList(); |
|
// for (int j = 0; j < listsss.Count; j++) |
|
// { |
|
// if (listsss[j].tbrjpb.SSJSSJ> time) |
|
// { |
|
// listsss[j].tbrjpb.PBZT = 4; |
|
// continue; |
|
// } |
|
// } |
|
//} |
|
} |
|
/// <summary> |
|
/// 人员排班 |
|
/// </summary> |
|
public static void RenYuanPaiBan(int ssid) |
|
{ |
|
DateTime kssj = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date; |
|
|
|
var listsspb = (from tbsspbb in myModel.Bus_SSPBB |
|
where tbsspbb.ID == ssid |
|
select new |
|
{ |
|
tbsspbb |
|
}).Single(); |
|
|
|
int sssid =Convert.ToInt32(listsspb.tbsspbb.SSSID); |
|
int ssxxid =Convert.ToInt32(listsspb.tbsspbb.SSID); |
|
var ssxxb = (from tbssxxb in myModel.SYS_SSXXB |
|
where tbssxxb.ID == ssxxid |
|
select new { tbssxxb }).Single(); |
|
int sslxid = Convert.ToInt32(ssxxb.tbssxxb.SSLX); |
|
int mzyszc = Convert.ToInt32(ssxxb.tbssxxb.MZYSZCID); |
|
int hszcid = Convert.ToInt32(ssxxb.tbssxxb.HSZCID); |
|
decimal sssc = Convert.ToInt32(listsspb.tbsspbb.SSZSC); |
|
DateTime ssrq = Convert.ToDateTime( listsspb.tbsspbb.SSRQ); |
|
DateTime sskssj = Convert.ToDateTime( listsspb.tbsspbb.SSKSSJ); |
|
DateTime ssjssj = Convert.ToDateTime( listsspb.tbsspbb.SSJSSJ); |
|
//分配麻醉医生 |
|
List<Cus_MZYSSC> listmzyssc = new List<Cus_MZYSSC>(); |
|
List<Cus_MZYSSC> listhssc = new List<Cus_MZYSSC>(); |
|
//查询出所有麻醉医生 |
|
var listmzys = (from tbmzysb in myModel.SYS_MZYSB |
|
select new { tbmzysb }).ToList(); |
|
//查询出本月的麻醉医生排班 |
|
var listdypb = (from tbmzyspb in myModel.Bus_MZYSPBB |
|
where tbmzyspb.SSKSSJ >= kssj |
|
select new { tbmzyspb }).ToList(); |
|
//查询出手术当天以排班的麻醉医生 |
|
var listdtpb = listdypb.Where(a => a.tbmzyspb.SSRQ == ssrq).ToList(); |
|
//移除当前时间有排班的麻醉医生 |
|
for (int i = 0; i < listdtpb.Count; i++) |
|
{ |
|
DateTime pbkssj = Convert.ToDateTime(listdtpb[i].tbmzyspb.SSKSSJ); |
|
DateTime pbjssj = Convert.ToDateTime(listdtpb[i].tbmzyspb.SSKSSJ); |
|
if (pbjssj < sskssj || pbkssj > ssjssj) |
|
{ |
|
int id =Convert.ToInt32(listdtpb[i].tbmzyspb.MZYSID); |
|
listmzys.RemoveAll(a => a.tbmzysb.ID == id); |
|
} |
|
} |
|
var listsclx = listmzys.Where(a => a.tbmzysb.SCSS1 == sslxid || a.tbmzysb.SCSS2 == sslxid || a.tbmzysb.SCSS3 == sslxid).ToList(); |
|
if (listsclx.Count>0) |
|
{ |
|
for (int i = 0; i < listsclx.Count; i++) |
|
{ |
|
Cus_MZYSSC mzsc = new Cus_MZYSSC(); |
|
int ysid = listsclx[i].tbmzysb.ID; |
|
mzsc.MZYSID = ysid; |
|
mzsc.SSSC = listdypb.Where(a=>a.tbmzyspb.MZYSID== ysid).Sum(a=>a.tbmzyspb.SSSC); |
|
listmzyssc.Add(mzsc); |
|
} |
|
listmzyssc = listmzyssc.OrderBy(a => a.SSSC).ToList(); |
|
listsspb.tbsspbb.MZYS1 = listmzyssc[0].MZYSID; |
|
} |
|
else |
|
{ |
|
//没有擅长类型的麻醉医生 |
|
for (int i = 0; i < listmzys.Count; i++) |
|
{ |
|
Cus_MZYSSC mzsc = new Cus_MZYSSC(); |
|
int ysid = listmzys[i].tbmzysb.ID; |
|
mzsc.MZYSID = ysid; |
|
mzsc.SSSC = listdypb.Where(a => a.tbmzyspb.MZYSID == ysid).Sum(a => a.tbmzyspb.SSSC); |
|
listmzyssc.Add(mzsc); |
|
} |
|
listmzyssc = listmzyssc.OrderBy(a => a.SSSC).ToList(); |
|
listsspb.tbsspbb.MZYS1 = listmzyssc[0].MZYSID; |
|
} |
|
//分配护士 |
|
//查询手术室所有护士 |
|
var lisths = (from tbhsb in myModel.SYS_HSB |
|
where tbhsb.SSSID == sssid |
|
select new { tbhsb }).ToList(); |
|
//查询出本月的护士排班 |
|
var lisstbyhspb = (from tbhspbb in myModel.Bus_HSPBB |
|
where tbhspbb.SSKSSJ >= kssj |
|
select new { tbhspbb }).ToList(); |
|
for (int i = 0; i < lisths.Count; i++) |
|
{ |
|
Cus_MZYSSC hssc = new Cus_MZYSSC(); |
|
int ysid = lisths[i].tbhsb.ID; |
|
hssc.MZYSID = ysid; |
|
hssc.SSSC = lisstbyhspb.Where(a => a.tbhspbb.HSID == ysid).Sum(a => a.tbhspbb.SSSC); |
|
listhssc.Add(hssc); |
|
} |
|
listhssc.OrderBy(a => a.SSSC); |
|
listsspb.tbsspbb.XSHS1 = listhssc[0].MZYSID; |
|
listsspb.tbsspbb.XHHS1 = listhssc[1].MZYSID; |
|
|
|
//List<Cus_MZYSSC> listmzyssc = new List<Cus_MZYSSC>(); |
|
//listmzyssc = (from tbmzysb in myModel.SYS_MZYSB |
|
// where tbmzysb.SCSS1 == sslxid && tbmzysb.SCSS2 == sslxid |
|
// && tbmzysb.SCSS3 == sslxid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbmzysb.ID |
|
// }).ToList(); |
|
|
|
//分配麻醉医生 |
|
//List<Cus_MZYSSC> listmzyssc = new List<Cus_MZYSSC>(); |
|
//var listrjssmz = ((from tbsspb in myModel.Bus_RJSSB |
|
// join tbmzys1 in myModel.SYS_MZYSB on tbsspb.MZYS1 equals tbmzys1.ID |
|
// join tbsssb in myModel.SYS_SSSB on tbsspb.SSSID equals tbsssb.ID |
|
// where tbsspb.SSKSSJ >= kssj && tbsspb.PBZT != 3 && tbsspb.SSSID == sssid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbsspb.MZYS1, |
|
// MZYS = tbmzys1.YSMC, |
|
// SSSID = tbsspb.SSSID, |
|
// SSS = tbsssb.SSSMC, |
|
// SSSC = tbsspb.SSSC, |
|
// }).Concat(from tbsspb in myModel.Bus_RJSSB |
|
// join tbmzys2 in myModel.SYS_MZYSB on tbsspb.MZYS2 equals tbmzys2.ID |
|
// join tbsssb in myModel.SYS_SSSB on tbsspb.SSSID equals tbsssb.ID |
|
// where tbsspb.SSKSSJ >= kssj && tbsspb.PBZT != 3 && tbsspb.SSSID == sssid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbsspb.MZYS2, |
|
// MZYS = tbmzys2.YSMC, |
|
// SSSID = tbsspb.SSSID, |
|
// SSS = tbsssb.SSSMC, |
|
// SSSC = tbsspb.SSSC, |
|
// })).ToList(); |
|
//var listmzys = (from tbmzysb in myModel.SYS_MZYSB |
|
// where tbmzysb.SSSID == sssid |
|
// select new |
|
// { tbmzysb }).ToList(); |
|
//for (int i = 0; i < listmzys.Count; i++) |
|
//{ |
|
// int mzysid = Convert.ToInt32(listmzys[i].tbmzysb.ID); |
|
// var listys = listrjssmz.Where(a => a.MZYSID == mzysid).ToList(); |
|
// Cus_MZYSSC mzys = new Cus_MZYSSC(); |
|
// mzys.MZYSID = mzysid; |
|
// mzys.SSSC = listys.Sum(a => a.SSSC); |
|
// listmzyssc.Add(mzys); |
|
//} |
|
//listmzyssc = listmzyssc.OrderBy(a => a.SSSC).ToList(); |
|
//listsspb.tbsspbb.MZYS1 = listmzyssc[0].MZYSID; |
|
|
|
|
|
////分配护士 |
|
//List<Cus_MZYSSC> listhssc = new List<Cus_MZYSSC>(); |
|
//var listrjsshs = ((from tbsspb in myModel.Bus_RJSSB |
|
// join tbxhhs1 in myModel.SYS_HSB on tbsspb.XHHS1 equals tbxhhs1.ID |
|
// join tbsssb in myModel.SYS_SSSB on tbsspb.SSSID equals tbsssb.ID |
|
// where tbsspb.SSKSSJ >= kssj && tbsspb.PBZT != 3 && tbsspb.SSSID == sssid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbsspb.XHHS1, |
|
// MZYS = tbxhhs1.HSMC, |
|
// SSSID = tbsspb.SSSID, |
|
// SSS = tbsssb.SSSMC, |
|
// SSSC = tbsspb.SSSC, |
|
// }).Concat(from tbsspb in myModel.Bus_RJSSB |
|
// join tbxhhs2 in myModel.SYS_MZYSB on tbsspb.XHHS2 equals tbxhhs2.ID |
|
// join tbsssb in myModel.SYS_SSSB on tbsspb.SSSID equals tbsssb.ID |
|
// where tbsspb.SSKSSJ >= kssj && tbsspb.PBZT != 3 && tbsspb.SSSID == sssid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbsspb.XHHS2, |
|
// MZYS = tbxhhs2.YSMC, |
|
// SSSID = tbsspb.SSSID, |
|
// SSS = tbsssb.SSSMC, |
|
// SSSC = tbsspb.SSSC, |
|
// }).Concat(from tbsspb in myModel.Bus_RJSSB |
|
// join tbxshs1 in myModel.SYS_MZYSB on tbsspb.XSHS1 equals tbxshs1.ID |
|
// join tbsssb in myModel.SYS_SSSB on tbsspb.SSSID equals tbsssb.ID |
|
// where tbsspb.SSKSSJ >= kssj && tbsspb.PBZT != 3 && tbsspb.SSSID == sssid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbsspb.XSHS1, |
|
// MZYS = tbxshs1.YSMC, |
|
// SSSID = tbsspb.SSSID, |
|
// SSS = tbsssb.SSSMC, |
|
// SSSC = tbsspb.SSSC, |
|
// }).Concat(from tbsspb in myModel.Bus_RJSSB |
|
// join tbxshs2 in myModel.SYS_MZYSB on tbsspb.XSHS1 equals tbxshs2.ID |
|
// join tbsssb in myModel.SYS_SSSB on tbsspb.SSSID equals tbsssb.ID |
|
// where tbsspb.SSKSSJ >= kssj && tbsspb.PBZT != 3 && tbsspb.SSSID == sssid |
|
// select new Cus_MZYSSC |
|
// { |
|
// MZYSID = tbsspb.XSHS2, |
|
// MZYS = tbxshs2.YSMC, |
|
// SSSID = tbsspb.SSSID, |
|
// SSS = tbsssb.SSSMC, |
|
// SSSC = tbsspb.SSSC, |
|
// })).ToList(); |
|
//var listxhhs = (from tbmzysb in myModel.SYS_HSB |
|
// where tbmzysb.SSSID == sssid |
|
// select new |
|
// { tbmzysb }).ToList(); |
|
//for (int i = 0; i < listxhhs.Count; i++) |
|
//{ |
|
// int mzysid = Convert.ToInt32(listxhhs[i].tbmzysb.ID); |
|
// var listys = listrjsshs.Where(a => a.MZYSID == mzysid).ToList(); |
|
// Cus_MZYSSC mzys = new Cus_MZYSSC(); |
|
// mzys.MZYSID = mzysid; |
|
// mzys.SSSC = listys.Sum(a => a.SSSC); |
|
// listrjsshs.Add(mzys); |
|
//} |
|
//listrjsshs = listrjsshs.OrderBy(a => a.SSSC).ToList(); |
|
//listsspb.tbsspbb.XSHS1 = listrjsshs[0].MZYSID; |
|
//listsspb.tbsspbb.XHHS1 = listrjsshs[1].MZYSID; |
|
|
|
myModel.Entry(listsspb.tbsspbb).State = System.Data.Entity.EntityState.Modified; |
|
myModel.SaveChanges(); |
|
myModel.Entry(listsspb.tbsspbb).State = System.Data.Entity.EntityState.Detached; |
|
//麻醉医生排班表 |
|
Bus_MZYSPBB myzspbb = new Bus_MZYSPBB(); |
|
myzspbb.MZYSID = listsspb.tbsspbb.MZYS1; |
|
myzspbb.PBID = ssid; |
|
myzspbb.SSKSSJ = sskssj; |
|
myzspbb.SSJSSJ = ssjssj; |
|
myzspbb.SSRQ = ssrq; |
|
myzspbb.SSSC = sssc; |
|
myModel.Bus_MZYSPBB.Add(myzspbb); |
|
myModel.SaveChanges(); |
|
myModel.Entry(myzspbb).State = System.Data.Entity.EntityState.Detached; |
|
//巡回护士 |
|
Bus_HSPBB xhhs = new Bus_HSPBB(); |
|
xhhs.HSID = listsspb.tbsspbb.XHHS1; |
|
xhhs.PBID = ssid; |
|
xhhs.SSKSSJ = sskssj; |
|
xhhs.SSJSSJ = ssjssj; |
|
xhhs.SSRQ = ssrq; |
|
xhhs.SSSC = sssc; |
|
myModel.Bus_HSPBB.Add(xhhs); |
|
myModel.SaveChanges(); |
|
myModel.Entry(xhhs).State = System.Data.Entity.EntityState.Detached; |
|
//洗手护士 |
|
Bus_HSPBB xshs = new Bus_HSPBB(); |
|
xshs.HSID = listsspb.tbsspbb.XSHS1; |
|
xshs.PBID = ssid; |
|
xshs.SSKSSJ = sskssj; |
|
xshs.SSJSSJ = ssjssj; |
|
xshs.SSRQ = ssrq; |
|
xshs.SSSC = sssc; |
|
myModel.Bus_HSPBB.Add(xshs); |
|
myModel.SaveChanges(); |
|
myModel.Entry(xshs).State = System.Data.Entity.EntityState.Detached; |
|
|
|
} |
|
} |
|
}
|
|
|