/// <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");
        }