private void btnAnalyze_Click(object sender, EventArgs e)
        {
            var d销量差     = nup上下半月销量差.Value;
            var list建议采购 = new List <_建议采购>();

            //var list下半月流水 = new List<_下半月流水>();
            //var list下半月流水详细 = new List<KeyValuePair<string, decimal>>();


            #region 读取数据
            var actReadData = new Action(() =>
            {
                var strError = string.Empty;

                ShowMsg("开始读取建议采购数据");
                FormHelper.ReadCSVFile <_建议采购>(txt建议采购.Text, ref list建议采购, ref strError);
                ShowMsg(strError);
            });
            #endregion

            #region 处理数据
            actReadData.BeginInvoke((obj) =>
            {
                var list订单分配 = new List <_订单分配>();
                var list分析详情 = new List <_分析详情>();

                list建议采购.ForEach(_建议采购Item =>
                {
                    var model   = new _订单分配();
                    model._SKU  = _建议采购Item.SKU;
                    model._供应商  = _建议采购Item._供应商;
                    model._采购员  = _建议采购Item._采购员;
                    model._制单人  = _建议采购Item._采购员;
                    model._含税单价 = _建议采购Item._商品成本单价;


                    //输入销量差,获取建议采购数量
                    _建议采购Item._销量差 = d销量差;
                    model._Qty     = _建议采购Item._建议采购数量;

                    #region 销量分析详情
                    {
                        var detailModel                = new _分析详情();
                        detailModel._SKU               = _建议采购Item.SKU;
                        detailModel._建议采购数量            = _建议采购Item._建议采购数量;
                        detailModel._如果按之前的算法建议采购数量    = _建议采购Item._如果按之前的算法建议采购数量;
                        detailModel._普源_建议采购数量         = _建议采购Item._普源_建议采购数量;
                        detailModel._销量是否上升            = _建议采购Item._销量是否上升;
                        detailModel._以5天乘以3对比15天销量上升的量 = _建议采购Item._销量是否上升 ? _建议采购Item._5天销量 * 3 - _建议采购Item._15天销量 : 0;
                        list分析详情.Add(detailModel);
                    }
                    #endregion

                    if (model._Qty > 0)
                    {
                        list订单分配.Add(model);
                    }
                });


                ExportExcel(list订单分配.OrderByDescending(x => x._供应商).ToList(), list分析详情.OrderByDescending(x => x._普源_建议采购数量).ToList());
            }, null);
            #endregion
        }
Exemple #2
0
        private void btnAnalyze_Click(object sender, EventArgs e)
        {
            var d销量差     = nup上下半月销量差.Value;
            var list建议采购 = new List <_建议采购>();

            //var list下半月流水 = new List<_下半月流水>();
            //var list下半月流水详细 = new List<KeyValuePair<string, decimal>>();


            #region 读取数据
            var actReadData = new Action(() =>
            {
                var strError = string.Empty;

                ShowMsg("开始读取建议采购数据");
                FormHelper.ReadCSVFile <_建议采购>(txt建议采购.Text, ref list建议采购, ref strError);
                ShowMsg(strError);
            });
            #endregion

            #region 处理数据
            actReadData.BeginInvoke((obj) =>
            {
                var list销量差降详情 = new List <_销量差降详情>();
                var list异常单详情  = new List <_异常单详情>();
                var list订单分配   = new List <_订单分配>();
                var list处理对比表  = new List <_处理对比表>();

                list建议采购.ForEach(_建议采购Item =>
                {
                    var model   = new _订单分配();
                    model._SKU  = _建议采购Item.SKU;
                    model._供应商  = _建议采购Item._供应商;
                    model._采购员  = _建议采购Item._采购员;
                    model._制单人  = _建议采购Item._采购员;
                    model._含税单价 = _建议采购Item._商品成本单价;


                    //输入销量差,获取建议采购数量
                    _建议采购Item._销量差 = d销量差;


                    var _d异常单销量和 = 0m;
                    if (_建议采购Item._上下半月销量差 >= d销量差)
                    {
                        var DifModel = new _销量差降详情();

                        //if (_建议采购Item.SKU=="MVPA1C47")
                        //{

                        //}

                        DifModel.SKU    = _建议采购Item.SKU;
                        DifModel._上半月销量 = _建议采购Item._上半月销量;
                        DifModel._下半月销量 = _建议采购Item._下半月销量;
                        list销量差降详情.Add(DifModel);



                        var ComModel        = new _处理对比表();
                        ComModel.SKU        = _建议采购Item.SKU;
                        ComModel._原建议采购数量   = _建议采购Item._如果按之前的算法建议采购数量;
                        ComModel._处理后建议采购数量 = _建议采购Item._建议采购数量 - _d异常单销量和;

                        if (ComModel._差值 != 0)
                        {
                            list处理对比表.Add(ComModel);
                        }
                    }

                    model._Qty = _建议采购Item._建议采购数量 - _d异常单销量和;

                    if (model._Qty > 0)
                    {
                        list订单分配.Add(model);
                    }
                });

                ExportExcel(list订单分配.OrderByDescending(x => x._供应商).ToList()
                            , list销量差降详情.OrderByDescending(x => x._销量差).ToList()
                            , list异常单详情,
                            list处理对比表.OrderByDescending(x => x._差值).ToList());
            }, null);
            #endregion
        }
        private void btnAnalyze_Click(object sender, EventArgs e)
        {
            btnAnalyze.Enabled = false;


            var list备货信息 = new List <_备货信息>();


            #region 读取数据
            var actReadData = new Action(() =>
            {
                ShowMsg("开始读取销量差明细数据");
                #region 读取销量差明细
                {
                    var strCsvPath = txt销量差明细.Text;
                    if (!string.IsNullOrEmpty(strCsvPath))
                    {
                        using (var csv = new ExcelQueryFactory(strCsvPath))
                        {
                            try
                            {
                                var tmp = from c in csv.Worksheet <_备货信息>()
                                          select c;
                                list备货信息.AddRange(tmp);
                            }
                            catch (Exception ex)
                            {
                                ShowMsg(ex.Message);
                            }
                        }
                    }
                }
                #endregion

                ShowMsg("开始读取建议备货数据");
                #region 读取建议备货
                {
                    var strCsvPath = txt建议备货明细.Text;
                    if (!string.IsNullOrEmpty(strCsvPath))
                    {
                        using (var csv = new ExcelQueryFactory(strCsvPath))
                        {
                            try
                            {
                                var tmp = from c in csv.Worksheet <_备货信息>()
                                          select c;
                                list备货信息.AddRange(tmp);
                            }
                            catch (Exception ex)
                            {
                                ShowMsg(ex.Message);
                            }
                        }
                    }
                }
                #endregion
            });
            #endregion

            #region 处理数据
            actReadData.BeginInvoke((obj) =>
            {
                var list订单分配 = new List <_订单分配>();

                list备货信息.ForEach(cur备货Item =>
                {
                    var model   = new _订单分配();
                    model._SKU  = cur备货Item.SKU;
                    model._供应商  = cur备货Item._供应商;
                    model._含税单价 = cur备货Item._含税单价;
                    model._Qty  = cur备货Item._建议备货数量;
                    model._采购员  = cur备货Item._采购员;
                    model._制单人  = cur备货Item._制单员;

                    if (cur备货Item._建议备货数量 > 0)
                    {
                        list订单分配.Add(model);
                    }
                });

                ExportExcel(list订单分配);
            }, null);
            #endregion
        }
Exemple #4
0
        private void btn处理数据_Click(object sender, EventArgs e)
        {
            var list库存预警原表    = new List <_库存预警_原表>();
            var list库存预警中位数   = new List <_库存预警_中位数>();
            var list每月流水      = new List <_每月流水>();
            var list两表都有的SKUs = new List <string>();
            var list处理结果      = new List <_订单分配>();

            var list7_9_11三段中位数 = new List <_库存预警_7_9_11_三段中位数>();
            var list7_9_11三段平均数 = new List <_库存预警_7_9_11_三段平均数>();

            #region 读取数据
            var actReadData = new Action(() =>
            {
                var strError = string.Empty;
                ShowMsg("开始读取预警原表数据");
                FormHelper.ReadCSVFile(txt库存预警原表.Text, ref list库存预警原表, ref strError);
                ShowMsg("开始读取预警中位数表数据");
                FormHelper.ReadCSVFile(txt库存预警中位数.Text, ref list库存预警中位数, ref strError);
                ShowMsg("开始读取每月流水数据");
                FormHelper.ReadCSVFile(txt每月流水.Text, ref list每月流水, ref strError);

                ShowMsg("开始过滤每月流水中不需要的数据");
                //过滤掉流水表里面不需要的sku数据,因为改表太大
                var sku_yb = list库存预警原表.Select(x => x.SKU).ToList();
                var sku_zw = list库存预警中位数.Select(x => x.SKU).ToList();

                var q = from t1 in sku_yb
                        join t2 in sku_zw on t1 equals t2
                        select t1;
                list两表都有的SKUs = q.ToList();

                sku_yb.AddRange(sku_zw);
                var sku_all = sku_yb.Select(x => x).Distinct().ToList();
                list每月流水    = list每月流水.Where(x => sku_all.Contains(x.SKU)).ToList();
            });
            #endregion

            #region 处理数据
            actReadData.BeginInvoke((obj) =>
            {
                #region 从库存流水里面统计库存预警中位数
                for (int idx = list库存预警中位数.Count - 1; idx >= 0; idx--)
                {
                    var curData   = list库存预警中位数[idx];
                    var refer流水情况 = list每月流水.FirstOrDefault(x => x.SKU == curData.SKU);
                    if (refer流水情况 != null)
                    {
                        //if (refer流水情况.SKU == "LGDC1C03-1B")
                        //{

                        //}

                        #region 近5-15-30天中位数
                        {
                            curData._5天中位数  = Calcu中位数(refer流水情况._月销量流水.Take(5).ToList(), 2);
                            curData._15天中位数 = Calcu中位数(refer流水情况._月销量流水.Take(15).ToList(), 7);
                            var sorts       = refer流水情况._月销量流水.OrderBy(x => x).ToList();
                            curData._30天中位数 = Math.Round((sorts[14] + sorts[15]) * 1m / 2, 2);
                        }
                        #endregion

                        //#region 近7-9-11三段中位数
                        //{
                        //    var model = new _库存预警_7_9_11_三段中位数();
                        //    model.SKU = curData.SKU;
                        //    model._7天中位数 = Calcu中位数(refer流水情况._月销量流水.Take(7).ToList(), 3);
                        //    model._9天中位数 = Calcu中位数(refer流水情况._月销量流水.Take(9).ToList(), 4);
                        //    model._11天中位数 = Calcu中位数(refer流水情况._月销量流水.Take(11).ToList(), 5);
                        //    list7_9_11三段中位数.Add(model);
                        //}
                        //#endregion

                        //#region 近7-9-11三段中日平均销量
                        //{
                        //    var model = new _库存预警_7_9_11_三段平均数();
                        //    model._7天总销量 = refer流水情况._月销量流水.Take(7).Sum();
                        //    model._9天总销量 = refer流水情况._月销量流水.Take(9).Sum();
                        //    model._11天总销量 = refer流水情况._月销量流水.Take(11).Sum();
                        //    list7_9_11三段平均数.Add(model);
                        //}
                        //#endregion
                    }
                }
                #endregion

                /*
                 * 建议采购量以库存预警-中位数为主,但是需要修改以下条件:
                 *(1)如果建议采购量 和 预计可用数量 一致或者差不多(建议采购量刚好够补缺货订单),那么建议采购最终数量=
                 * (库存预警建议采购量+库存预警中位数建议采购量)/2
                 *(2)当库存预警建议采购量<库存预警中位数建议采购量,以库存预警建议采购量为主
                 *(3)当库存预警中位数 标记建议采购,但是建议采购量为0时,对应的SKU 以库存预警的建议采购量为主
                 * (这个是普源数据的问题,已经联系崔总做修改,待回复)
                 *(4)当库存预警中位数建议采购量<库存预警建议采购量,商品成本单价小于1元的,最终建议采购量=(库存预警建议采购量+库存预警中位数建议采购量)/2
                 *(5)商品单价低于10元的,建议采购量小于5个的,最终建议采购量为 5个。(已经在建议采购做判断了)
                 */

                #region 先处理两表共有的,同时删除原始数据
                {
                    foreach (var cmSKU in list两表都有的SKUs)
                    {
                        //if (cmSKU == "TDPB8B15")
                        //{

                        //}

                        var model  = new _订单分配();
                        model._SKU = cmSKU;

                        model._数据来源 = _Enum数据来源._两表共有;

                        var refer原预警表             = list库存预警原表.First(x => x.SKU == cmSKU);
                        var refer预警中位数表           = list库存预警中位数.First(x => x.SKU == cmSKU);
                        model._计算后的建议采购数量_原预警表    = refer原预警表._原始建议采购数量;
                        model._计算后的建议采购数量_中位数表    = refer预警中位数表._原始建议采购数量;
                        model._原来表格导出的建议采购数量_原预警表 = refer原预警表._表格导出的原始建议采购;
                        model._原来表格导出的建议采购数量_中位数表 = refer预警中位数表._表格导出的原始建议采购;


                        model._预警销售天数   = refer原预警表._预警销售天数;
                        model._采购到货天数   = refer原预警表._采购到货天数;
                        model._可用数量     = refer原预警表._可用数量;
                        model._采购未入库    = refer原预警表._采购未入库;
                        model._缺货及未派单数量 = refer原预警表._缺货及未派单数量;

                        /*
                         *(1)如果建议采购量 和 预计可用数量 一致或者差不多(建议采购量刚好够补缺货订单),那么建议采购最终数量 =
                         * (库存预警建议采购量 + 库存预警中位数建议采购量)/ 2
                         */
                        //if (refer原预警表._可用数量 < 0)
                        //{
                        //    decimal culc = (refer原预警表._原始建议采购数量 + refer预警中位数表._原始建议采购数量) / 2;
                        //    //if (refer原预警表._商品成本单价 >= 10)
                        //    //    model._Qty = Math.Round(culc, 0);
                        //    //else
                        //    //    model._Qty = Helper.CalAmount(culc);

                        //    model._Qty = Math.Round(culc, 0);
                        //}
                        //else
                        {
                            /*
                             * (2)当库存预警建议采购量<库存预警中位数建议采购量,以库存预警建议采购量为主
                             */
                            if (refer原预警表._原始建议采购数量 < refer预警中位数表._原始建议采购数量)
                            {
                                model._Qty = refer原预警表._建议采购数量;
                            }
                            else
                            {
                                if (refer原预警表._商品成本单价 < 1)
                                {
                                    decimal culc = (refer原预警表._原始建议采购数量 + refer预警中位数表._原始建议采购数量) / 2;
                                    //if (refer原预警表._商品成本单价 >= 10)
                                    //    model._Qty = Math.Round(culc, 0);
                                    //else
                                    //    model._Qty = Helper.CalAmount(culc);

                                    model._Qty = Math.Round(culc, 0);
                                }
                                else
                                {
                                    model._Qty = refer预警中位数表._建议采购数量;
                                }
                            }
                        }

                        model._是否紧急单  = refer原预警表._是否紧急单;
                        model._预计可用库存 = refer原预警表._预计可用库存;
                        model._供应商    = refer原预警表._供应商;
                        model._采购员    = refer原预警表._采购员;
                        model._含税单价   = refer原预警表._商品成本单价;
                        model._制单人    = refer原预警表._采购员;


                        //model._计算后的建议采购数量_7_9_11三段中位数建议采购=
                        //{
                        //    var refer= list7_9_11三段中位数.Where(s=>s.SKU=)
                        //}


                        list处理结果.Add(model);


                        //已经用不上两种共有的sku数据,删除原数据
                        for (int idx = list库存预警原表.Count - 1; idx >= 0; idx--)
                        {
                            if (list库存预警原表[idx].SKU == cmSKU)
                            {
                                list库存预警原表.RemoveAt(idx);
                                break;
                            }
                        }
                        for (int idx = list库存预警中位数.Count - 1; idx >= 0; idx--)
                        {
                            if (list库存预警中位数[idx].SKU == cmSKU)
                            {
                                list库存预警中位数.RemoveAt(idx);
                                break;
                            }
                        }
                    }
                }
                #endregion


                #region 处理原预警表
                foreach (var item in list库存预警原表)
                {
                    var model                 = new _订单分配();
                    model._SKU                = item.SKU;
                    model._预计可用库存             = item._预计可用库存;
                    model._Qty                = item._建议采购数量;
                    model._供应商                = item._供应商;
                    model._采购员                = item._采购员;
                    model._含税单价               = item._商品成本单价;
                    model._制单人                = item._采购员;
                    model._原来表格导出的建议采购数量_原预警表 = item._表格导出的原始建议采购;
                    model._计算后的建议采购数量_原预警表    = item._原始建议采购数量;

                    model._是否紧急单 = item._是否紧急单;
                    model._数据来源  = _Enum数据来源._原建议采购表;



                    model._预警销售天数   = item._预警销售天数;
                    model._采购到货天数   = item._采购到货天数;
                    model._可用数量     = item._可用数量;
                    model._采购未入库    = item._采购未入库;
                    model._缺货及未派单数量 = item._缺货及未派单数量;

                    list处理结果.Add(model);
                }
                #endregion

                #region 处理中位数预警表
                foreach (var item in list库存预警中位数)
                {
                    var model                 = new _订单分配();
                    model._SKU                = item.SKU;
                    model._预计可用库存             = item._预计可用库存;
                    model._Qty                = item._建议采购数量;
                    model._供应商                = item._供应商;
                    model._采购员                = item._采购员;
                    model._含税单价               = item._商品成本单价;
                    model._制单人                = item._采购员;
                    model._原来表格导出的建议采购数量_中位数表 = item._表格导出的原始建议采购;
                    model._计算后的建议采购数量_中位数表    = item._原始建议采购数量;

                    model._是否紧急单 = item._是否紧急单;
                    model._数据来源  = _Enum数据来源._中位数建议采购;


                    model._预警销售天数   = item._预警销售天数;
                    model._采购到货天数   = item._采购到货天数;
                    model._可用数量     = item._可用数量;
                    model._采购未入库    = item._采购未入库;
                    model._缺货及未派单数量 = item._缺货及未派单数量;

                    list处理结果.Add(model);
                }
                #endregion

                for (int idx = list处理结果.Count - 1; idx >= 0; idx--)
                {
                    var curData   = list处理结果[idx];
                    var refer流水情况 = list每月流水.FirstOrDefault(x => x.SKU == curData._SKU);
                    if (refer流水情况 != null)
                    {
                        #region 近7-9-11三段中位数
                        {
                            var model       = new _库存预警_7_9_11_三段中位数();
                            model._预警销售天数   = curData._预警销售天数;
                            model._采购到货天数   = curData._采购到货天数;
                            model._可用数量     = curData._可用数量;
                            model._采购未入库    = curData._采购未入库;
                            model._缺货及未派单数量 = curData._缺货及未派单数量;

                            model._7天中位数  = Calcu中位数(refer流水情况._月销量流水.Take(7).ToList(), 3);
                            model._9天中位数  = Calcu中位数(refer流水情况._月销量流水.Take(9).ToList(), 4);
                            model._11天中位数 = Calcu中位数(refer流水情况._月销量流水.Take(11).ToList(), 5);
                            curData._计算后的建议采购数量_7_9_11三段中位数建议采购 = model._原始建议采购数量;
                        }
                        #endregion

                        #region 近7-9-11三段中日平均销量
                        {
                            var model       = new _库存预警_7_9_11_三段平均数();
                            model._预警销售天数   = curData._预警销售天数;
                            model._采购到货天数   = curData._采购到货天数;
                            model._可用数量     = curData._可用数量;
                            model._采购未入库    = curData._采购未入库;
                            model._缺货及未派单数量 = curData._缺货及未派单数量;
                            model._7天总销量    = refer流水情况._月销量流水.Take(7).Sum();
                            model._9天总销量    = refer流水情况._月销量流水.Take(9).Sum();
                            model._11天总销量   = refer流水情况._月销量流水.Take(11).Sum();
                            curData._计算后的建议采购数量_7_9_11日平均建议采购 = model._原始建议采购数量;
                        }
                        #endregion


                        //        get
                        //{
                        //            var _库存上限 = _预警销售天数 * _日平均销量;
                        //            var _库存下限 = _采购到货天数 * _日平均销量;
                        //            return _库存上限 + _库存下限 - _可用数量 - _采购未入库 + _缺货及未派单数量;
                        //        }
                    }
                }

                ExportExcel(list处理结果.OrderByDescending(x => x._供应商).ToList());
            }, null);
            #endregion
        }
        private void btn处理数据_Click(object sender, EventArgs e)
        {
            var list库存预警原表    = new List <_库存预警>();
            var list库存预警中位数   = new List <_库存预警>();
            var list每月流水      = new List <_每月流水>();
            var list两表都有的SKUs = new List <string>();
            var list缺货所有SKUs  = new List <string>();
            var list处理结果      = new List <_订单分配>();
            var list计算详情      = new List <_计算详情>();
            var list异常SKUs    = new List <string>();

            int iDay1 = Convert.ToInt32(nupDay1.Value);
            int iDay2 = Convert.ToInt32(nupDay2.Value);
            int iDay3 = Convert.ToInt32(nupDay3.Value);

            #region 读取数据
            var actReadData = new Action(() =>
            {
                var strError = string.Empty;
                ShowMsg("开始读取预警原表数据");
                FormHelper.ReadCSVFile(txt库存预警原表.Text, ref list库存预警原表, ref strError);
                ShowMsg("开始读取预警中位数表数据");
                FormHelper.ReadCSVFile(txt库存预警中位数.Text, ref list库存预警中位数, ref strError);
                ShowMsg("开始读取每月流水数据");
                FormHelper.ReadCSVFile(txt每月流水.Text, ref list每月流水, ref strError);

                ShowMsg("开始过滤每月流水中不需要的数据");
                //过滤掉流水表里面不需要的sku数据,因为该表太大
                var sku_yb = list库存预警原表.Select(x => x.SKU).ToList();
                var sku_zw = list库存预警中位数.Select(x => x.SKU).ToList();

                var q = from t1 in sku_yb
                        join t2 in sku_zw on t1 equals t2
                        select t1;
                list两表都有的SKUs = q.ToList();

                sku_yb.AddRange(sku_zw);
                list缺货所有SKUs = sku_yb.Select(x => x).Distinct().ToList();
                list每月流水     = list每月流水.Where(x => list缺货所有SKUs.Contains(x.SKU)).ToList();
            });
            #endregion

            #region 处理数据
            actReadData.BeginInvoke((obj) =>
            {
                ShowMsg("正在处理数据");
                foreach (var sku in list缺货所有SKUs)
                {
                    //if (sku== "AMKA1A03-WR")
                    //{

                    //}
                    var _计算详情Model  = new _计算详情();
                    var model       = new _订单分配();
                    model._SKU      = sku;
                    _计算详情Model._SKU = sku;

                    var refer库存预警原表  = list库存预警原表.FirstOrDefault(x => x.SKU == sku);
                    var refer库存预警中位数 = list库存预警中位数.FirstOrDefault(x => x.SKU == sku);
                    var refer流水      = list每月流水.FirstOrDefault(x => x.SKU == sku);

                    if (refer流水 == null)
                    {
                        list异常SKUs.Add(sku);
                        continue;
                    }

                    bool bShareSKU = refer库存预警原表 != null && refer库存预警中位数 != null;
                    //公共信息
                    var common    = refer库存预警原表 != null ? refer库存预警原表 : refer库存预警中位数;
                    model._预计可用库存 = common._预计可用库存;
                    model._供应商    = common._供应商;
                    model._采购员    = common._采购员;
                    model._含税单价   = common._商品成本单价;
                    model._制单人    = common._采购员;

                    //详情基本信息
                    _计算详情Model._采购员      = common._采购员;
                    _计算详情Model._含税单价     = common._商品成本单价;
                    _计算详情Model._可用数量     = common._可用数量;
                    _计算详情Model._采购未入库    = common._采购未入库;
                    _计算详情Model._缺货及未派单数量 = common._缺货及未派单数量;
                    _计算详情Model._预计可用库存   = common._预计可用库存;
                    _计算详情Model._预警销售天数   = common._预警销售天数;
                    _计算详情Model._采购到货天数   = common._采购到货天数;
                    _计算详情Model._缺货占用数量   = common._缺货占用数量;

                    //特有信息
                    model._原表格导出的建议采购数量_原预警表 = refer库存预警原表 != null ? refer库存预警原表._表格导出的原始建议采购 : 0;
                    model._原表格导出的建议采购数量_中位数表 = refer库存预警中位数 != null ? refer库存预警中位数._表格导出的原始建议采购 : 0;

                    #region 两种算法的结果
                    {
                        var list1 = refer流水._月销量流水.Take(iDay1).ToList();
                        var list2 = refer流水._月销量流水.Take(iDay2).ToList();
                        var list3 = refer流水._月销量流水.Take(iDay3).ToList();

                        #region 记录销量详情
                        {
                            _计算详情Model._参数1详情 = string.Join(",", list1);
                            _计算详情Model._参数2详情 = string.Join(",", list2);
                            _计算详情Model._参数3详情 = string.Join(",", list3);
                        }
                        #endregion

                        #region 原先算法
                        {
                            var detail = new _计算过程();
                            common._原先计算方式(list1, list2, list3, ref detail);
                            model._计算后的建议采购数量_原先算法 = detail._建议采购;

                            _计算详情Model._库存上限_原先算法       = detail._库存上限;
                            _计算详情Model._库存下限_原先算法       = detail._库存下限;
                            _计算详情Model._日平均销量_原先算法      = detail._日平均销量;
                            _计算详情Model._计算后的建议采购数量_原先算法 = detail._建议采购;

                            _计算详情Model._参数1_销量总和 = detail._参数1_销量总和;
                            _计算详情Model._参数2_销量总和 = detail._参数2_销量总和;
                            _计算详情Model._参数3_销量总和 = detail._参数3_销量总和;
                        }
                        #endregion

                        #region 中位数算法
                        {
                            var detail = new _计算过程();
                            common._中位数计算方式(list1, list2, list3, ref detail);
                            model._计算后的建议采购数量_中位数算法 = detail._建议采购;

                            _计算详情Model._库存上限_中位数       = detail._库存上限;
                            _计算详情Model._库存下限_中位数       = detail._库存下限;
                            _计算详情Model._日平均销量_中位数      = detail._日平均销量;
                            _计算详情Model._计算后的建议采购数量_中位数 = detail._建议采购;

                            _计算详情Model._参数1_中位数 = detail._参数1_中位数;
                            _计算详情Model._参数2_中位数 = detail._参数2_中位数;
                            _计算详情Model._参数3_中位数 = detail._参数3_中位数;
                        }
                        #endregion

                        _计算详情Model._原表格导出的建议采购数量_原预警表 = model._原表格导出的建议采购数量_原预警表;
                        _计算详情Model._原表格导出的建议采购数量_中位数表 = model._原表格导出的建议采购数量_中位数表;
                    }
                    #endregion

                    /*
                     * 建议采购量以库存预警-中位数为主,但是需要修改以下条件:
                     *(1)如果建议采购量 和 预计可用数量 一致或者差不多(建议采购量刚好够补缺货订单),那么建议采购最终数量=
                     * (库存预警建议采购量+库存预警中位数建议采购量)/2
                     *(2)当库存预警建议采购量<库存预警中位数建议采购量,以库存预警建议采购量为主
                     *(3)当库存预警中位数 标记建议采购,但是建议采购量为0时,对应的SKU 以库存预警的建议采购量为主
                     * (这个是普源数据的问题,已经联系崔总做修改,待回复)
                     *(4)当库存预警中位数建议采购量<库存预警建议采购量,商品成本单价小于1元的,最终建议采购量=(库存预警建议采购量+库存预警中位数建议采购量)/2
                     *(5)商品单价低于10元的,建议采购量小于5个的,最终建议采购量为 5个。(已经在建议采购做判断了)
                     */

                    //中位数算法为主
                    model._Qty = model._计算后的建议采购数量_中位数算法;

                    if (bShareSKU)
                    {
                        /*
                         * (2)当库存预警建议采购量<库存预警中位数建议采购量,以库存预警建议采购量为主
                         */
                        if (model._计算后的建议采购数量_原先算法 < model._计算后的建议采购数量_中位数算法)
                        {
                            model._Qty = model._计算后的建议采购数量_原先算法;
                        }
                        else
                        {
                            if (common._商品成本单价 < 1)
                            {
                                decimal culc = (model._计算后的建议采购数量_原先算法 + model._计算后的建议采购数量_中位数算法) / 2;
                                model._Qty   = Math.Round(culc, 0);
                            }
                        }
                    }

                    _计算详情Model.Qty = model._Qty;

                    list处理结果.Add(model);
                    list计算详情.Add(_计算详情Model);
                }


                ExportExcel(list处理结果, list计算详情, list异常SKUs, iDay1, iDay2, iDay3);
            }, null);
            #endregion
        }