/// <summary> /// 添加任务 /// </summary> /// <returns></returns> public bool AddTask(int id, int machId, ref string errMsg) { try { using (JDJS_WMS_DB_USEREntities wms = new JDJS_WMS_DB_USEREntities()) { using (System.Data.Entity.DbContextTransaction mytran = wms.Database.BeginTransaction()) { try { var work = wms.JDJS_WMS_Order_Process_Scheduling_Table.Where(r => r.ID == id).FirstOrDefault(); if (work == null) { mytran.Rollback(); errMsg = "该加工任务不存在!"; return(false); } if (work.isFlag != 1) { mytran.Rollback(); errMsg = "该加工任务不满足替换条件!"; return(false); } var device = wms.JDJS_WMS_Device_Info.Where(r => r.ID == machId).FirstOrDefault(); if (device == null) { mytran.Rollback(); errMsg = "该机床不存在!"; return(false); } TimeSpan span = Convert.ToDateTime(work.EndTime) - Convert.ToDateTime(work.StartTime); int orderId = Convert.ToInt32(work.OrderID); int processId = Convert.ToInt32(work.ProcessID); int count = Convert.ToInt32(work.WorkCount); DateTime time = DateTime.Now; var works = wms.JDJS_WMS_Order_Process_Scheduling_Table.Where(r => r.CncID == machId && (r.isFlag == 1 || r.isFlag == 2)); if (works.Count() > 0) { time = Convert.ToDateTime(works.OrderByDescending(r => r.EndTime).First().EndTime); } JDJS_WMS_Order_Process_Scheduling_Table jd = new JDJS_WMS_Order_Process_Scheduling_Table() { CncID = machId, EndTime = time + span, isFlag = 1, OrderID = orderId, ProcessID = processId, StartTime = time, WorkCount = count }; wms.JDJS_WMS_Order_Process_Scheduling_Table.Add(jd); DateTime time1 = Convert.ToDateTime(work.StartTime); TimeSpan timespan = Convert.ToDateTime(work.EndTime) - Convert.ToDateTime(work.StartTime); var works1 = wms.JDJS_WMS_Order_Process_Scheduling_Table.Where(r => r.CncID == work.CncID && r.isFlag == 1 && r.StartTime > time1); foreach (var item in works1) { DateTime startTime = Convert.ToDateTime(item.StartTime); item.StartTime = startTime - timespan; DateTime endTime = Convert.ToDateTime(item.EndTime); item.EndTime = endTime - timespan; } wms.JDJS_WMS_Order_Process_Scheduling_Table.Remove(work); wms.SaveChanges(); mytran.Commit(); errMsg = "ok"; return(true); } catch (Exception ex) { mytran.Rollback(); errMsg = ex.Message; return(false); } } } } catch (Exception ex) { errMsg = ex.Message; return(false); } }
public void ProcessRequest(HttpContext context) { var orderId = int.Parse(context.Request["orderId"]); var number = int.Parse(context.Request["number"]); { int orderID = orderId; //订单主键id int BlankNum = number; //追加的毛坯数量 using (JDJS_WMS_DB_USEREntities wms = new JDJS_WMS_DB_USEREntities()) { { //增加机床排产 var processInfo = wms.JDJS_WMS_Order_Process_Info_Table.Where(r => r.OrderID == orderID && r.sign == 1).OrderBy(r => r.ProcessID); Dictionary <int, double> processTimeInfo = new Dictionary <int, double>();//工序的主键id和工序需要的时间。 foreach (var item in processInfo) { processTimeInfo.Add(item.ID, Convert.ToDouble(item.ProcessTime)); } for (int i = 0; i < BlankNum; i++) //开始按,每一件毛坯增加 { foreach (var item in processTimeInfo) //给每一序增加 { using (System.Data.Entity.DbContextTransaction mytran = wms.Database.BeginTransaction()) { try { int deviceID = 0; var processDevice = wms.JDJS_WMS_Order_Process_Scheduling_Table.Where(r => r.ProcessID == item.Key && (r.isFlag == 2 || r.isFlag == 1)).OrderBy(r => r.EndTime); if (processDevice.Count() > 0)//如果该序还有没干或正在干的机床 { Dictionary <int, DateTime> deviceiNFO = new Dictionary <int, DateTime>(); foreach (var CNC in processDevice)//将每台机床的该序的最晚的结束时间拿出 { if (!deviceiNFO.ContainsKey(Convert.ToInt32(CNC.CncID))) { deviceiNFO.Add(Convert.ToInt32(CNC.CncID), Convert.ToDateTime(CNC.EndTime)); } else { if (Convert.ToDateTime(CNC.EndTime) > deviceiNFO[Convert.ToInt32(CNC.CncID)]) { deviceiNFO[Convert.ToInt32(CNC.CncID)] = Convert.ToDateTime(CNC.EndTime); } } } DateTime time = DateTime.Now.AddYears(1); foreach (var real in deviceiNFO) { if (real.Value < time) { deviceID = real.Key; time = real.Value; } } var nextprocess = wms.JDJS_WMS_Order_Process_Scheduling_Table.Where(r => r.CncID == deviceID && r.isFlag == 1 && r.ProcessID != item.Key); foreach (var real in nextprocess) { DateTime start = Convert.ToDateTime(real.StartTime); real.StartTime = start.AddMinutes(item.Value); DateTime end = Convert.ToDateTime(real.EndTime); real.EndTime = end.AddMinutes(item.Value); } wms.SaveChanges(); JDJS_WMS_Order_Process_Scheduling_Table scheduling_Table = new JDJS_WMS_Order_Process_Scheduling_Table() { CncID = deviceID, OrderID = orderID, ProcessID = item.Key, StartTime = time, EndTime = time.AddMinutes(item.Value), isFlag = 1 }; wms.JDJS_WMS_Order_Process_Scheduling_Table.Add(scheduling_Table); wms.SaveChanges(); } else//没有机床干这一序 { context.Response.Write("订单已下机,无法追加!"); mytran.Rollback(); return; } wms.SaveChanges(); mytran.Commit(); } catch (Exception ex) { context.Response.Write(ex.Message); mytran.Rollback(); return; } } } } } using (System.Data.Entity.DbContextTransaction mytran = wms.Database.BeginTransaction()) { try { //JDJS_WMS_Blank_Additional_History_Table blankAdd = new JDJS_WMS_Blank_Additional_History_Table() //{ // OrderID = orderID, // BlankAddNum = BlankNum, // AddTime = DateTime.Now //}; //wms.JDJS_WMS_Blank_Additional_History_Table.Add(blankAdd);//添加到毛坯添加历史记录表中 //wms.SaveChanges(); var process = wms.JDJS_WMS_Order_Process_Info_Table.Where(r => r.OrderID == orderID && r.ProcessID == 1).FirstOrDefault(); process.BlankNumber += BlankNum; wms.JDJS_WMS_Order_Blank_Table.Where(r => r.OrderID == orderID).FirstOrDefault().BlankAddition += BlankNum; wms.SaveChanges();//将毛坯数量加上 wms.SaveChanges(); mytran.Commit(); } catch (Exception ex) { Console.WriteLine(ex.Message); mytran.Rollback(); } } } } context.Response.Write("ok"); }