Ejemplo n.º 1
0
        /// <summary>
        /// 重载 解析Excel
        /// </summary>
        /// <param name="fileAddress"></param>
        /// <returns></returns>
        public override string LoadExcel(string fileAddress)
        {
            int    rowIndex = 2;
            string error    = "success";

            var _shipPlanBizService  = Smart.Instance.Pro_ShipPlanBizService;
            var _shipPlansBizService = Smart.Instance.Pro_ShipPlansBizService;
            int mainId = 0;

            try
            {
                var    goodsBizSer = Smart.Instance.Base_GoodsBizService;
                string strConn;
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + fileAddress + "; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                DataTable sheetNames = conn.GetOleDbSchemaTable
                                           (OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                foreach (DataRow rowTable in sheetNames.Rows)
                {
                    string sheetName = rowTable["TABLE_NAME"].ToString();
                    using (conn = new OleDbConnection(strConn))
                    {
                        conn.Open();
                        OleDbCommand objCommand = new OleDbCommand(string.Format("select * from [" + sheetName + "]"), conn);

                        Pro_ShipPlanMain mainModel = new Pro_ShipPlanMain();
                        using (OleDbDataReader dataReader = objCommand.ExecuteReader())
                        {
                            while (dataReader.Read())
                            {
                                if (dataReader.FieldCount < 30)
                                {
                                    error = "解析错误,Excel 列头必须是30列(9列+21天),请下载模板 进行对比!";
                                    break;
                                }
                                if (rowIndex == 2)
                                {
                                    mainModel.ProNo        = "20180401001";
                                    mainModel.Updater      = mainModel.Creater = CurrentUser.Name;
                                    mainModel.RowState     = 1;
                                    mainModel.PlanFromDate = Convert.ToDateTime(dataReader[9]);
                                    mainModel.PlanFromTo   = Convert.ToDateTime(dataReader[9 + 20]);
                                    mainId = Smart.Instance.Pro_ShipPlanMainBizService.AddGetId(mainModel);
                                }
                                else if (rowIndex > 2)
                                {
                                    var model = new Pro_ShipPlan();
                                    model.ScheduleNo = dataReader[0].ToString();
                                    if (string.IsNullOrEmpty(model.ScheduleNo))
                                    {
                                        continue;
                                    }
                                    model.Term         = Convert.ToInt32(dataReader[1]);
                                    model.EditionNo    = dataReader[2].ToString();
                                    model.CityNo       = dataReader[3].ToString();
                                    model.ShipDetailNo = dataReader[4].ToString();
                                    model.ShipTo       = dataReader[5].ToString();
                                    model.ShipToName   = dataReader[6].ToString();
                                    model.GoodNo       = dataReader[7].ToString();
                                    model.GoodName     = dataReader[8].ToString();
                                    model.MainId       = mainId;
                                    var shipId = _shipPlanBizService.AddGetId(model);

                                    for (int i = 9; i <= 9 + 20; i++)
                                    {
                                        var value = dataReader[i].ToString().Trim();
                                        if (!string.IsNullOrEmpty(value))
                                        {
                                            var sonModel = new Pro_ShipPlans();
                                            sonModel.PlanId   = shipId;
                                            sonModel.PlanNum  = Convert.ToInt32(value);
                                            sonModel.PlanDate = mainModel.PlanFromDate.AddDays(i - 9);
                                            _shipPlansBizService.Add(sonModel);
                                        }
                                    }
                                }
                                rowIndex++;
                            }
                        }
                        conn.Close();
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                error = "Excel解析错误,成功" + (rowIndex - 1) + "条,错误行号:" + rowIndex + ",请检查 数据格式。";
                LogHelper.WriteLog("返货单导入错误", ex);
            }
            return(error);
        }
Ejemplo n.º 2
0
        public ActionResult Index(string proLineNosList, string StockId, string ShipMainProNo, int ShipPlanMainId = 0,
                                  int Id = 0, int MainId = 0, int page = 1)
        {
            List <Pro_ShipPlan>       shipPlanList           = new List <Pro_ShipPlan>();
            List <Pro_ShipPlans>      _shipPlansList         = new List <Pro_ShipPlans>();
            List <Pro_SchedulingLine> pro_SchedulingLineList = new List <Pro_SchedulingLine>();
            var lingHourList = new List <Base_LineHour>();

            if (MainId == 0)
            {
                ViewBag.Id = MainId;

                //1.发运计划时间段
                var mainDate = Smart.Instance.Pro_ShipPlanMainBizService.GetAllDomain(QueryCondition.Instance.AddOrderBy("Id", false).AddEqual("Id", ShipPlanMainId.ToString()))[0];
                ViewBag.MainDate = mainDate;

                var query = QueryCondition.Instance.AddEqual("LineNos", proLineNosList).AddEqual("StockMainId", StockId)
                            .AddEqual("MainId", ShipPlanMainId.ToString());
                //2.发运计划产品信息
                shipPlanList = Smart.Instance.Pro_ShipPlanBizService.GetAllDomainByLineNos(query).ToList();

                //3.发运时间明细
                _shipPlansList = Smart.Instance.Pro_ShipPlansBizService.GetAllDomainByLineNos(query).ToList();

                ViewBag.ShipPlansList = _shipPlansList;

                //4 获取每条产线最大的工时
                lingHourList = Smart.Instance.Base_LineHourBizService.GetLineHourList(proLineNosList).ToList();

                //生产线
                var ProLineNos = proLineNosList.Replace("'", "").Split(',').ToList();
                foreach (var line in ProLineNos)
                {
                    var lineModel = new Pro_SchedulingLine();
                    lineModel.ProLineNo = line;
                    var hourModel = lingHourList.Find(t => t.ProLineNo == line);
                    if (hourModel != null)
                    {
                        lineModel.MaxHour = hourModel.MaxHours;
                    }
                    pro_SchedulingLineList.Add(lineModel);
                }

                ViewBag.ShipMainProNo  = ShipMainProNo;
                ViewBag.SchedulingList = pro_SchedulingLineList;
                return(View(shipPlanList));
            }
            ViewBag.Id = MainId;
            //发运计划产品信息
            var schedulingModel    = Smart.Instance.Pro_SchedulingBizService.GetAllDomain(QueryCondition.Instance.AddEqual("Id", MainId.ToString())).ToList()[0];
            Pro_ShipPlanMain model = new Pro_ShipPlanMain
            {
                PlanFromDate = schedulingModel.PlanFromDate,
                PlanFromTo   = schedulingModel.PlanToDate
            };

            ViewBag.MainDate = model;
            //获取所有产线信息
            pro_SchedulingLineList = Smart.Instance.Pro_SchedulingLineBizService.GetAllDomain(QueryCondition.Instance.AddEqual("MainId", MainId.ToString())).ToList();
            var temp_proLineNosList = "";

            foreach (var line in pro_SchedulingLineList)
            {
                temp_proLineNosList += string.Format("'{0}',", line.ProLineNo);
            }
            //4 获取每条产线最大的工时
            lingHourList = Smart.Instance.Base_LineHourBizService.GetLineHourList(temp_proLineNosList.Trim(',')).ToList();
            foreach (var line in pro_SchedulingLineList)
            {
                var hourModel = lingHourList.Find(t => t.ProLineNo == line.ProLineNo);
                if (hourModel != null)
                {
                    line.MaxHour = hourModel.MaxHours;
                }
            }

            ViewBag.SchedulingList = pro_SchedulingLineList;

            //发运计划产品信息
            shipPlanList = Smart.Instance.Pro_ShipPlanBizService.GetPro_SchedulingByEdit(MainId).ToList();

            //发运时间明细
            _shipPlansList        = Smart.Instance.Pro_ShipPlansBizService.GetPro_SchedulingGoodsNumByEdit(MainId).ToList();
            ViewBag.ShipPlansList = _shipPlansList;

            ViewBag.ShipMainProNo = schedulingModel.ShipMainProNo;
            return(View(shipPlanList));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 获取当前Bom 是否有下级商品信息 需要排产
        /// </summary>
        /// <param name="query"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public int CreateNextBomList(QueryCondition query, string name)
        {
            var           mainId     = query.GetCondition("MainId").Value;
            var           parameters = WriteAdoTemplate.CreateDbParameters();
            StringBuilder strSql     = new StringBuilder();

            //获取BOM下一级的子产品 并剔除最后一级别
            strSql.AppendFormat(@"select distinct ShipTo,ShipToName,SonGoodNo as GoodNo,SonGoodName as GoodName,ParentGoodNo,ParentGoodName,BiLi
from(select ID,ShipTo,ShipToName,GoodNo,GoodName FROM Pro_SchedulingGoods  where  
SLineId IN (select ID from [dbo].[Pro_SchedulingLine] WHERE MainId={0})
) AS TB inner join [dbo].[Base_Bom] on TB.GoodNo=Base_Bom.ParentGoodNo where exists(select 1 from Base_Bom b where b.ParentGoodNo=Base_Bom.SonGoodNo)", mainId);

            var list = ReadAdoTemplate.QueryWithRowMapperDelegate(CommandType.Text, strSql.ToString(), MapRowByCreateNextBom, parameters);

            //如果检测到有下一级的BOM信息
            if (list.Count > 0)
            {
                strSql = new StringBuilder();
                strSql.AppendFormat(@"select GoodNo,ShipTo,SDate,sum(SNum) as SNums from [dbo].[Pro_SchedulingGoodsNum]
left join Pro_SchedulingGoods on Pro_SchedulingGoods.Id=Pro_SchedulingGoodsNum.SGoodId
 where SGoodId in
(select TB.ID
from(select ID,ShipTo,ShipToName,GoodNo,GoodName FROM Pro_SchedulingGoods  where  
SLineId IN (select ID from [dbo].[Pro_SchedulingLine] WHERE MainId={0})
) AS TB inner join [dbo].[Base_Bom] on TB.GoodNo=Base_Bom.ParentGoodNo)   
and SType in (2,3,4)
group by GoodNo,ShipTo,SDate", mainId);
                //排产信息 将早中晚 汇总在一起
                var num_list = ReadAdoTemplate.QueryWithRowMapperDelegate(CommandType.Text, strSql.ToString(), MapRow_BomNum, parameters).ToList();
                if (num_list.Count > 0)
                { //主信息
                    var scheduling_model = GetAllDomain(QueryCondition.Instance.AddEqual("Id", mainId)).ToList()[0];

                    Pro_ShipPlanMain mainModel = new Pro_ShipPlanMain();

                    mainModel.Updater      = mainModel.Creater = name;
                    mainModel.RowState     = 1;
                    mainModel.PlanFromDate = scheduling_model.PlanFromDate;
                    mainModel.PlanFromTo   = scheduling_model.PlanToDate;
                    var main_Id = new Pro_ShipPlanMainDao().AddGetId(mainModel);

                    var _shipPlanBizService  = new Pro_ShipPlanDao();
                    var _shipPlansBizService = new Pro_ShipPlansDao();
                    foreach (var good in list)
                    {
                        var model = new Pro_ShipPlan();
                        model.ScheduleNo = "";

                        model.Term         = 0;
                        model.EditionNo    = "";
                        model.CityNo       = "";
                        model.ShipDetailNo = "";
                        model.ShipTo       = good.ShipTo;
                        model.ShipToName   = good.ShipToName;
                        model.GoodNo       = good.GoodNo;
                        model.GoodName     = good.GoodName;
                        model.MainId       = main_Id;

                        //获取goodNO+ shipto的商品 如果没有对应的排产信息就不要出来了
                        var good_num_list = num_list.FindAll(t => t.GoodNo == good.ParentGoodNo && t.ShipTo == good.ShipTo);
                        if (good_num_list.Count == 0)
                        {
                            continue;
                        }
                        var shipId = _shipPlanBizService.AddGetId(model);



                        for (int i = 0; i < good_num_list.Count; i++)
                        {
                            var goodNum  = good_num_list[i];
                            var sonModel = new Pro_ShipPlans();
                            sonModel.PlanId   = shipId;
                            sonModel.PlanNum  = Convert.ToInt32((goodNum.SNum ?? 0) * good.BiLi);
                            sonModel.PlanDate = goodNum.SDate;
                            _shipPlansBizService.Add(sonModel);
                        }
                    }
                    return(main_Id);
                }
                else
                {
                    //说明没有下一级的BOM 信息
                    return(-1);
                }
            }
            //说明没有下一级的BOM 信息
            return(-1);
        }