public List <dynamic> GetProductPlanList(List <dynamic> plan_list)
        {
            var    ProcessTypeList = plan_list.Select(p => Convert.ToString(p.ProcessType)).ToArray();
            string ContractCode    = plan_list[0]["ContractCode"];
            string PlanCode        = plan_list[0]["PlanCode"];
            int    ProductID       = plan_list[0]["ProductID"];
            string PartCode        = plan_list[0]["PartCode"];
            int    Quantity        = plan_list[0]["Quantity"];
            var    BomList         = TreeNodeManage.GetTreeNodeList <dynamic>(
                TreeNodeManage.Instance()
                .SetNode("PartCode")
                .SetParentNode("ParentCode", PartCode)
                .SetTableName("PRS_Process_BOM"))
                                     .Where(b => b.IsSelfMade == "1" && b.IsEnable == 1 && b.PartCode == PartCode).ToList();

            var ProcessRouteList = new MES_BN_ProductProcessRouteService().GetModelList().Where(p => p.IsEnable == 1 && ProcessTypeList.Contains(p.ProcessModelType)).ToList();

            return((from p in ProcessRouteList
                    join b in BomList
                    on p.PartCode equals b.PartCode
                    orderby p.ProcessModelType, p.ProcessLineCode
                    select new
            {
                ContractCode = ContractCode,
                ProductID = ProductID,
                p.ProcessModelType,
                p.PartCode,
                RootPartCode = PartCode,
                MonthPlanCode = PlanCode,
                p.ProcessCode,
                p.ProcessName,
                b.PartFigureCode,
                b.PartName,
                b.MaterialCode,
                Quantity = b.PartQuantity * Quantity,
                BomQty = b.PartQuantity,
                PlanType = 1,
                p.ManHour,
                p.WorkshopID,
                p.WorkshopName,
                p.EquipmentID,
                p.EquipmentName,
                p.WorkGroupID,
                p.WorkGroupName
            }).ToList <dynamic>());
        }
        public List <dynamic> GetProductPlanList(List <dynamic> plan_list)
        {
            string ContractCode = plan_list[0].ContractCode;
            int    ProductID    = plan_list[0].ProductID;
            string ProcessType  = plan_list[0].ProcessType;
            string PartCode     = plan_list[0].PartCode;

            var MonthPlanList = plan_list.GroupBy(
                a => new
            {
                a.ContractCode,
                a.ProductID,
                a.PartCode,
                a.PartName,
                a.RootPartCode,
                a.ProcessType,
                a.PartFigureCode,
                a.MaterialCode,
                a.PartQuantity
            }).Select(
                a => a.Aggregate(
                    (current, next) => new
            {
                MonthPlanCode = Convert.ToString(current.MonthPlanCode) + "," + Convert.ToString(next.MonthPlanCode),
                a.Key.ContractCode,
                a.Key.ProductID,
                a.Key.PartCode,
                a.Key.PartName,
                a.Key.RootPartCode,
                a.Key.ProcessType,
                a.Key.PartFigureCode,
                a.Key.MaterialCode,
                a.Key.PartQuantity,
                Quantity = a.Sum(b => Convert.ToInt32(b.Quantity)),
            }
                    )
                //a => new
                //{
                //    a.Key.ContractCode,
                //    a.Key.ProductID,
                //    a.Key.PartCode,
                //    a.Key.PartName,
                //    a.Key.RootPartCode,
                //    a.Key.ProcessType,
                //    a.Key.PartFigureCode,
                //    a.Key.MaterialCode,
                //    a.Key.PartQuantity,
                //    Quantity = a.Sum(b => Convert.ToInt32(b.Quantity)),
                //    MonthPlanCode = a.Aggregate((current, next) => Convert.ToString(current) + "," + Convert.ToString(next))
                //}
                )
                                .ToList <dynamic>();

            //工序表
            var ProcessRouteList =
                new MES_BN_ProductProcessRouteService()
                .GetDynamicList()
                .Where(p => p.IsEnable == 1 && p.ContractCode == ContractCode && p.PartCode == PartCode && p.ProcessModelType == ProcessType)
                .ToList <dynamic>();


            var ProductPlanList =
                (from a in MonthPlanList
                 join p in ProcessRouteList
                 on Convert.ToString(a.PartCode) equals Convert.ToString(p.PartCode)
                 orderby p.ProcessModelType, p.ProcessLineCode
                 select new
            {
                a.ContractCode,
                a.ProductID,
                p.ProcessModelType,
                p.PartCode,
                a.RootPartCode,
                a.MonthPlanCode,
                p.ProcessCode,
                p.ProcessName,
                a.PartFigureCode,
                a.PartName,
                a.MaterialCode,
                //Quantity = a.Quantity,
                Quantity = Convert.ToInt32(a.PartQuantity) * Convert.ToInt32(a.Quantity),
                BomQty = a.PartQuantity,
                PlanType = 1,
                p.ManHour,
                p.WorkshopID,
                p.WorkshopName,
                p.EquipmentID,
                p.EquipmentName,
                p.WorkGroupID,
                p.WorkGroupName
            }).ToList <dynamic>();

            return(ProductPlanList);
        }