Beispiel #1
0
        private void btnAnalyze_Click(object sender, EventArgs e)
        {
            try
            {
                var bIn5Day  = cb5day.Checked;
                var bIn15Day = cb15day.Checked;
                var bIn30Day = cb30day.Checked;

                #region 解析并计算


                var _d订单金额 = Convert.ToDouble(NtxtAmount.Value);

                var _Im上海默认昆山预警 = new List <_除热销_Warning>();
                var _Im昆山预警     = new List <_除热销_Warning>();
                var _Im昆山库存     = new List <_除热销_Warning>();
                var _Im上海库存     = new List <_除热销_Warning>();
                var _Im热销产品     = new List <_热销产品>();
                var _Im临时备货     = new List <_除热销_Warning>();
                var _最终需要采购的预警  = new List <_除热销_Warning>();
                var _Ex库存充足的预警  = new List <_除热销_Warning>();
                var _Ex采购需要采购订单 = new List <Order>();
                var _Ex开发需要采购订单 = new List <Order>();
                //var _经过排除判断是否需要采购的预警 = new List<Warning>();

                var str上海默认昆山ExcelPath = txtUpDfkunsYj.Text;
                var str昆山预警ExcelPath   = txtUpKsYj.Text;
                var str昆山库存ExcelPath   = txtUpKsKc.Text;
                var str上海库存ExcelPath   = txtUpSHKc.Text;
                var str临时备货ExcelPath   = txtUpTmp.Text;
                var str热销产品ExcelPath   = txtUpHot.Text;

                #region 读取源数据
                var actRead = new Action(() =>
                {
                    ShowMsg("开始读取表格数据");

                    #region 读取上海默认昆山预警
                    if (!string.IsNullOrEmpty(str上海默认昆山ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str上海默认昆山ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im上海默认昆山预警.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取昆山预警
                    if (!string.IsNullOrEmpty(str昆山预警ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str昆山预警ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im昆山预警.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取昆山仓库
                    if (!string.IsNullOrEmpty(str昆山库存ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str昆山库存ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im昆山库存.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取上海仓库
                    if (!string.IsNullOrEmpty(str上海库存ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str上海库存ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im上海库存.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取热销产品
                    if (!string.IsNullOrEmpty(str热销产品ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str热销产品ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_热销产品>(s)
                                              select c;
                                    _Im热销产品.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取临时备货
                    if (!string.IsNullOrEmpty(str临时备货ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str临时备货ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im临时备货.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion
                });
                #endregion


                #region 数据处理
                actRead.BeginInvoke((obj) =>
                {
                    ShowMsg("开始计算表格数据");

                    var _List两个预警表共有Sku唯一 = new List <string>();//两个表共有的sku,不用判断是否需要采购,直接将需要采购量相加
                    #region 计算两个预警表共有的sku唯一
                    {
                        var _List上海默认昆山预警Sku唯一 = _Im上海默认昆山预警.Where(m => !string.IsNullOrEmpty(m._SKU)).Select(m => m._SKU).Distinct().ToList();
                        var _List昆山预警Sku唯一     = _Im昆山预警.Where(m => !string.IsNullOrEmpty(m._SKU)).Select(m => m._SKU).Distinct().ToList();
                        //提取出两表共有的sku
                        if (_List上海默认昆山预警Sku唯一.Count > _List昆山预警Sku唯一.Count)
                        {
                            _List上海默认昆山预警Sku唯一.ForEach(m =>
                            {
                                if (!string.IsNullOrEmpty(m))
                                {
                                    int isCommonSku = _List昆山预警Sku唯一.Count(ss => ss == m);
                                    if (isCommonSku > 0)
                                    {
                                        _List两个预警表共有Sku唯一.Add(m);
                                    }
                                }
                            });
                        }
                        else
                        {
                            _List昆山预警Sku唯一.ForEach(m =>
                            {
                                if (!string.IsNullOrEmpty(m))
                                {
                                    int isCommonSku = _List上海默认昆山预警Sku唯一.Count(ss => ss == m);
                                    if (isCommonSku > 0)
                                    {
                                        _List两个预警表共有Sku唯一.Add(m);
                                    }
                                }
                            });
                        }
                    }
                    #endregion


                    //遍历 上海默认昆山预警
                    //1.把共有的sku的 采购建议(库存上限+库存下限...)相加起来
                    //2.把独有的sku 进入昆山所有库存判断是否需要采购
                    #region 遍历 上海默认昆山预警
                    {
                        _Im上海默认昆山预警.ForEach(cur预警Item =>
                        {
                            if (!string.IsNullOrEmpty(cur预警Item._SKU))
                            {
                                //if (cur预警Item._SKU == "TKDQ12Q78-4")
                                //{

                                //}

                                if (cur预警Item._建议采购数量 > 0)
                                {
                                    //共有的sku 采购建议(库存上限+库存下限...)相加起来
                                    #region 共有的sku 采购建议(库存上限+库存下限...)相加起来
                                    if (_List两个预警表共有Sku唯一.Count(ss => ss == cur预警Item._SKU) > 0)
                                    {
                                        var ref昆山SkuItem = _Im昆山预警.Where(kk => kk._SKU == cur预警Item._SKU).FirstOrDefault();
                                        if (ref昆山SkuItem != null)
                                        {
                                            var needOrderItem     = new _除热销_Warning();
                                            needOrderItem._SKU    = cur预警Item._SKU;
                                            needOrderItem._供应商    = cur预警Item._供应商;
                                            needOrderItem._采购员    = cur预警Item._采购员;
                                            needOrderItem._商品成本单价 = cur预警Item._商品成本单价;
                                            needOrderItem._仓库     = cur预警Item._仓库;
                                            needOrderItem._采购到货天数 = cur预警Item._采购到货天数;
                                            needOrderItem._预警销售天数 = cur预警Item._预警销售天数;


                                            //要相加的部分
                                            needOrderItem.org采购未入库    = (ref昆山SkuItem._采购未入库 + cur预警Item._采购未入库).ToString();
                                            needOrderItem._可用数量       = ref昆山SkuItem._可用数量 + cur预警Item._可用数量;
                                            needOrderItem._库存上限       = ref昆山SkuItem._库存上限 + cur预警Item._库存上限;
                                            needOrderItem._库存下限       = ref昆山SkuItem._库存下限 + cur预警Item._库存下限;
                                            needOrderItem.org缺货及未派单数量 = (ref昆山SkuItem._缺货及未派单数量 + cur预警Item._缺货及未派单数量).ToString();

                                            needOrderItem._30天销量 = ref昆山SkuItem._30天销量 + cur预警Item._30天销量;
                                            needOrderItem._15天销量 = ref昆山SkuItem._15天销量 + cur预警Item._15天销量;
                                            needOrderItem._5天销量  = ref昆山SkuItem._5天销量 + cur预警Item._5天销量;



                                            _最终需要采购的预警.Add(needOrderItem);
                                        }
                                    }
                                    #endregion
                                    //独有的sku 进入昆山所有库存判断是否需要采购
                                    #region 独有的sku 进入昆山所有库存判断是否需要采购
                                    else
                                    {
                                        //昆山所有库存没有该sku,是需要采购的,不用判断,直接加入 _最终需要采购的预警
                                        var ref昆山库存SkuItem = _Im昆山库存.Where(cc => cc._SKU == cur预警Item._SKU).FirstOrDefault();
                                        if (ref昆山库存SkuItem != null)
                                        {
                                            if (ref昆山库存SkuItem._建议采购数量 + cur预警Item._建议采购数量 > 0)
                                            {
                                                _最终需要采购的预警.Add(cur预警Item);
                                            }
                                            else
                                            {
                                                //cur预警Item.
                                                _Ex库存充足的预警.Add(cur预警Item);
                                            }
                                        }
                                        else
                                        {
                                            _最终需要采购的预警.Add(cur预警Item);
                                        }
                                    }
                                    #endregion
                                }
                            }
                        });
                    }
                    #endregion


                    //遍历 昆山预警
                    //1.把独有的sku 进入上海所有库存判断是否需要采购
                    #region 遍历 昆山预警
                    {
                        _Im昆山预警.ForEach(cur预警Item =>
                        {
                            if (!string.IsNullOrEmpty(cur预警Item._SKU))
                            {
                                //if (cur预警Item._SKU == "TKDQ12Q78-4")
                                //{

                                //}
                                if (cur预警Item._建议采购数量 > 0)
                                {
                                    //共有的sku已经处理,这里只对独有的sku判断
                                    if (_List两个预警表共有Sku唯一.Count(ss => ss == cur预警Item._SKU) == 0)
                                    {
                                        var ref上海库存SkuItem = _Im上海库存.Where(cc => cc._SKU == cur预警Item._SKU).FirstOrDefault();
                                        if (ref上海库存SkuItem != null)
                                        {
                                            if (ref上海库存SkuItem._建议采购数量 + cur预警Item._建议采购数量 > 0)
                                            {
                                                //_最终需要采购的预警.Add(cur预警Item);
                                                //需要把两个相加起来
                                                var needOrderItem     = new _除热销_Warning();
                                                needOrderItem._SKU    = cur预警Item._SKU;
                                                needOrderItem._供应商    = cur预警Item._供应商;
                                                needOrderItem._采购员    = cur预警Item._采购员;
                                                needOrderItem._商品成本单价 = cur预警Item._商品成本单价;
                                                needOrderItem._仓库     = cur预警Item._仓库;
                                                needOrderItem._采购到货天数 = cur预警Item._采购到货天数;
                                                needOrderItem._预警销售天数 = cur预警Item._预警销售天数;
                                                //要相加的部分
                                                needOrderItem.org采购未入库    = (ref上海库存SkuItem._采购未入库 + cur预警Item._采购未入库).ToString();
                                                needOrderItem._可用数量       = ref上海库存SkuItem._可用数量 + cur预警Item._可用数量;
                                                needOrderItem._库存上限       = ref上海库存SkuItem._库存上限 + cur预警Item._库存上限;
                                                needOrderItem._库存下限       = ref上海库存SkuItem._库存下限 + cur预警Item._库存下限;
                                                needOrderItem.org缺货及未派单数量 = (ref上海库存SkuItem._缺货及未派单数量 + cur预警Item._缺货及未派单数量).ToString();

                                                needOrderItem._30天销量 = ref上海库存SkuItem._30天销量 + cur预警Item._30天销量;
                                                needOrderItem._15天销量 = ref上海库存SkuItem._15天销量 + cur预警Item._15天销量;
                                                needOrderItem._5天销量  = ref上海库存SkuItem._5天销量 + cur预警Item._5天销量;

                                                _最终需要采购的预警.Add(needOrderItem);
                                            }
                                            else
                                            {
                                                _Ex库存充足的预警.Add(cur预警Item);
                                            }
                                        }
                                        else
                                        {
                                            //如果这个独有的sku没有出现在上海库存,不用判断,直接加入 最终需要采购的预警
                                            _最终需要采购的预警.Add(cur预警Item);
                                        }
                                    }
                                }
                            }
                        });
                    }
                    #endregion

                    //加入临时备货
                    #region 加入临时备货
                    {
                        //临时备货里面可能会有和 _最终需要采购的预警里面相同的sku,这时候需要合并,否则直接添加
                        var final需要采购sku唯一 = _最终需要采购的预警.Where(m => !string.IsNullOrEmpty(m._SKU)).Select(ss => ss._SKU).Distinct().ToList();
                        _Im临时备货.ForEach(cur预警Item =>
                        {
                            //共有sku
                            var ref最终需要采购的预警Item = _最终需要采购的预警.Where(ss => ss._SKU == cur预警Item._SKU).FirstOrDefault();
                            if (ref最终需要采购的预警Item != null)
                            {
                                var og  = string.IsNullOrEmpty(ref最终需要采购的预警Item.org缺货及未派单数量) ? 0.0 : Convert.ToDouble(ref最终需要采购的预警Item._缺货及未派单数量);
                                var ogn = string.IsNullOrEmpty(cur预警Item.org缺货及未派单数量) ? 0.0 : Convert.ToDouble(cur预警Item._缺货及未派单数量);
                                ref最终需要采购的预警Item.org缺货及未派单数量 = (og + ogn).ToString();
                                _最终需要采购的预警.Add(ref最终需要采购的预警Item);
                            }
                            else
                            {
                                _最终需要采购的预警.Add(cur预警Item);
                            }
                        });
                    }
                    #endregion

                    //重新计算因为热销产生的建议采购数量过大
                    #region 重新计算因为热销产生的建议采购数量过大
                    if (_Im热销产品.Count > 0)
                    {
                        for (int idx = _最终需要采购的预警.Count - 1; idx >= 0; idx--)
                        {
                            var sh = _最终需要采购的预警[idx];
                            //if (sh._SKU == "TKDR1R09-L")
                            //{

                            //}

                            var normal = sh._最终需要采购数量;

                            var refHot = _Im热销产品.Where(x => x._SKU == sh._SKU).FirstOrDefault();
                            if (refHot != null)
                            {
                                //除了热销这两天
                                //var _50天销量总和 = sh._30天销量 + sh._15天销量 + sh._5天销量;
                                //var _排除热销天数销量总和 = (sh._30天销量 - refHot._销量)/30 + sh._15天销量) / 30 + (sh._5天销量 - refHot._销量 * 3);

                                var _30av = (sh._30天销量 - (bIn30Day ? refHot._销量 : 0)) / 30;
                                var _15av = (sh._15天销量 - (bIn15Day ? refHot._销量 : 0)) / 15;
                                var _5av  = (sh._5天销量 - (bIn5Day ? refHot._销量 : 0)) / 5;

                                sh._日销量  = (_30av + _15av + _5av) / 3;
                                sh.IsHot = true;
                                if (sh._最终需要采购数量 > normal)
                                {
                                    sh.IsHot = false;
                                }
                            }

                            if (sh._最终需要采购数量 <= 0)
                            {
                                _最终需要采购的预警.RemoveAt(idx);
                            }
                        }
                    }
                    #endregion



                    //把最终建议采购的sku 两个仓库的 可用库存+可用库存 是否大于 两个仓库的 库存下限+库存下限
                    //如果大于 那么说明这个sku不需要采购
                    #region 二次判断排除生成另一张表

                    for (int idx = _最终需要采购的预警.Count - 1; idx >= 0; idx--)
                    {
                        var curItem = _最终需要采购的预警[idx];
                        //if (curItem._SKU == "TKDQ12Q78-4")
                        //{

                        //}

                        double _两个仓库可用库存以及采购未入库之和 = 0; //可用库存+可用库存+采购未入库+采购未入库-缺货及未派单
                        double _两个库存下限之和          = 0; //库存下限+库存下限
                        double _缺货以及未派单           = 0;
                        var _上海仓Item = _Im上海库存.Where(x => x._SKU == curItem._SKU).FirstOrDefault();
                        var _昆山仓Item = _Im昆山库存.Where(x => x._SKU == curItem._SKU).FirstOrDefault();
                        if (_上海仓Item != null)
                        {
                            _两个仓库可用库存以及采购未入库之和 += _上海仓Item._可用数量 + _上海仓Item._采购未入库;
                            _两个库存下限之和          += _上海仓Item._库存下限;
                            _缺货以及未派单           += _上海仓Item._缺货及未派单数量;
                        }
                        if (_昆山仓Item != null)
                        {
                            _两个仓库可用库存以及采购未入库之和 += _昆山仓Item._可用数量 + _昆山仓Item._采购未入库;
                            _两个库存下限之和          += _昆山仓Item._库存下限;
                            _缺货以及未派单           += _昆山仓Item._缺货及未派单数量;
                        }



                        if (_上海仓Item != null || _昆山仓Item != null)
                        {
                            if (_两个仓库可用库存以及采购未入库之和 - _缺货以及未派单 >= _两个库存下限之和)
                            {
                                _最终需要采购的预警.RemoveAt(idx);
                            }
                        }
                    }
                    #endregion

                    var _List供应商唯一 = _最终需要采购的预警.Select(p => p._供应商).Distinct().ToList();

                    //计算采购金额,转换采购
                    #region 计算采购金额,转换采购
                    {
                        _List供应商唯一.ForEach(strCur供应商 =>
                        {
                            var ref供应商预警Items  = _最终需要采购的预警.Where(ss => ss._供应商 == strCur供应商).ToList();
                            var ref供应商预警采购金额总计 = ref供应商预警Items.Select(ss => ss._采购金额).Sum();
                            //小于分界,分给合肥
                            if (ref供应商预警采购金额总计 <= _d订单金额)
                            {
                                ref供应商预警Items.ForEach(cur预警Item =>
                                {
                                    var curOrder        = new Order();
                                    curOrder._供应商       = strCur供应商;
                                    curOrder._SKU       = cur预警Item._SKU;
                                    curOrder._Qty       = cur预警Item._最终需要采购数量;
                                    curOrder._采购员       = Helper.ChangeLowerBuyer(cur预警Item._采购员);
                                    curOrder._含税单价      = cur预警Item._商品成本单价;
                                    curOrder._制单人       = cur预警Item._采购员;
                                    curOrder._对应供应商采购金额 = ref供应商预警采购金额总计;
                                    _Ex采购需要采购订单.Add(curOrder);
                                });
                            }
                            else
                            {
                                ref供应商预警Items.ForEach(cur预警Item =>
                                {
                                    var curOrder        = new Order();
                                    curOrder._供应商       = strCur供应商;
                                    curOrder._SKU       = cur预警Item._SKU;
                                    curOrder._Qty       = cur预警Item._最终需要采购数量;
                                    curOrder._采购员       = cur预警Item._采购员;
                                    curOrder._含税单价      = cur预警Item._商品成本单价;
                                    curOrder._制单人       = cur预警Item._采购员;
                                    curOrder._对应供应商采购金额 = ref供应商预警采购金额总计;
                                    _Ex采购需要采购订单.Add(curOrder);
                                });
                            }
                        });
                    }
                    #endregion


                    //计算完毕,开始导出数据
                    ExportExcel(_Ex采购需要采购订单, _Ex库存充足的预警);
                }, null);
                #endregion
                #endregion
            }
            catch (Exception ex)
            {
                ShowMsg(ex.Message);
            }
        }
Beispiel #2
0
        private void btnAnalyze_Click(object sender, EventArgs e)
        {
            try
            {
                var bIn5Day  = cb5day.Checked;
                var bIn15Day = cb15day.Checked;
                var bIn30Day = cb30day.Checked;

                #region 解析并计算
                var d订单分配金额            = Convert.ToDouble(NtxtAmount.Value);
                var _Im上海库存预警          = new List <_除热销_Warning>();
                var _Im昆山所有库存          = new List <_除热销_Warning>();
                var _List需要采购的预警       = new List <_除热销_Warning>();
                var _Im热销产品            = new List <_热销产品>();
                var _Ex采购订单分配          = new List <Order>();
                var _Ex开发订单分配          = new List <Order>();//把开发单独分写成一个表格
                var str上海库存预警ExcelPath = txtUpShangsYj.Text;
                var str昆山所有库存ExcelPath = txtUpKunsStore.Text;
                var str热销产品ExcelPath   = txtUpHot.Text;
                #region 读取数据
                var actRead = new Action(() =>
                {
                    ShowMsg("开始读取表格数据");

                    #region 读取上海库存预警
                    if (!string.IsNullOrEmpty(str上海库存预警ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str上海库存预警ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im上海库存预警.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取昆山所有库存
                    if (!string.IsNullOrEmpty(str昆山所有库存ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str昆山所有库存ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_除热销_Warning>(s)
                                              select c;
                                    _Im昆山所有库存.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion

                    #region 读取热销产品
                    if (!string.IsNullOrEmpty(str热销产品ExcelPath))
                    {
                        using (var excel = new ExcelQueryFactory(str热销产品ExcelPath))
                        {
                            var sheetNames = excel.GetWorksheetNames().ToList();
                            sheetNames.ForEach(s =>
                            {
                                try
                                {
                                    var tmp = from c in excel.Worksheet <_热销产品>(s)
                                              select c;
                                    _Im热销产品.AddRange(tmp);
                                }
                                catch (Exception ex)
                                {
                                    ShowMsg(ex.Message);
                                }
                            });
                        }
                    }
                    #endregion
                });
                #endregion

                #region 数据分析
                actRead.BeginInvoke((obj) =>
                {
                    ShowMsg("开始计算表格数据");

                    //判断是否需要采购,如需要加入 _List需要采购的预警
                    #region 判断是否需要采购
                    {
                        _Im上海库存预警.ForEach(cur库存预警Item =>
                        {
                            //if (cur库存预警Item._SKU == "DNFK5K72-BL")
                            //{

                            //}


                            if (!string.IsNullOrEmpty(cur库存预警Item._SKU))
                            {
                                if (cur库存预警Item._建议采购数量 > 0)
                                {
                                    var ref昆山库存Item = _Im昆山所有库存.Where(ss => ss._SKU == cur库存预警Item._SKU).FirstOrDefault();
                                    if (ref昆山库存Item != null)
                                    {
                                        if (ref昆山库存Item._建议采购数量 + cur库存预警Item._建议采购数量 > 0)
                                        {
                                            //需要把两个相加起来
                                            var needOrderItem     = new _除热销_Warning();
                                            needOrderItem._SKU    = cur库存预警Item._SKU;
                                            needOrderItem._供应商    = cur库存预警Item._供应商;
                                            needOrderItem._采购员    = cur库存预警Item._采购员;
                                            needOrderItem._商品成本单价 = cur库存预警Item._商品成本单价;
                                            needOrderItem._仓库     = cur库存预警Item._仓库;
                                            //要相加的部分
                                            needOrderItem.org采购未入库    = (ref昆山库存Item._采购未入库 + cur库存预警Item._采购未入库).ToString();
                                            needOrderItem._可用数量       = ref昆山库存Item._可用数量 + cur库存预警Item._可用数量;
                                            needOrderItem._库存上限       = ref昆山库存Item._库存上限 + cur库存预警Item._库存上限;
                                            needOrderItem._库存下限       = ref昆山库存Item._库存下限 + cur库存预警Item._库存下限;
                                            needOrderItem.org缺货及未派单数量 = (ref昆山库存Item._缺货及未派单数量 + cur库存预警Item._缺货及未派单数量).ToString();

                                            needOrderItem._30天销量 = ref昆山库存Item._30天销量 + cur库存预警Item._30天销量;
                                            needOrderItem._15天销量 = ref昆山库存Item._15天销量 + cur库存预警Item._15天销量;
                                            needOrderItem._5天销量  = ref昆山库存Item._5天销量 + cur库存预警Item._5天销量;

                                            _List需要采购的预警.Add(needOrderItem);
                                        }
                                    }
                                    else
                                    {
                                        //昆山没有该记录,直接采购
                                        _List需要采购的预警.Add(cur库存预警Item);
                                    }
                                }
                            }
                        });
                    }
                    #endregion

                    //重新计算因为热销产生的建议采购数量过大
                    #region 重新计算因为热销产生的建议采购数量过大
                    if (_Im热销产品.Count > 0)
                    {
                        for (int idx = _List需要采购的预警.Count - 1; idx >= 0; idx--)
                        {
                            var sh = _List需要采购的预警[idx];
                            //if (sh._SKU == "MVPA18B65-FU")
                            //{

                            //}

                            var normal = sh._最终需要采购数量;

                            var refHot = _Im热销产品.Where(x => x._SKU == sh._SKU).FirstOrDefault();
                            if (refHot != null)
                            {
                                //除了热销这两天
                                //var _50天销量总和 = sh._30天销量 + sh._15天销量 + sh._5天销量;
                                //var _排除热销天数销量总和 = (sh._30天销量 - refHot._销量)/30 + sh._15天销量) / 30 + (sh._5天销量 - refHot._销量 * 3);

                                var _30av = (sh._30天销量 - (bIn30Day ? refHot._销量 : 0)) / 30;
                                var _15av = (sh._15天销量 - (bIn15Day ? refHot._销量 : 0)) / 15;
                                var _5av  = (sh._5天销量 - (bIn5Day ? refHot._销量 : 0)) / 5;

                                sh._日销量  = (_30av + _15av + _5av) / 3;
                                sh.IsHot = true;
                                if (sh._最终需要采购数量 > normal)
                                {
                                    sh.IsHot = false;
                                }
                            }

                            if (sh._最终需要采购数量 <= 0)
                            {
                                _List需要采购的预警.RemoveAt(idx);
                            }
                        }
                    }
                    #endregion

                    //把最终建议采购的sku 两个仓库的 可用库存+可用库存 是否大于 两个仓库的 库存下限+库存下限
                    //如果大于 那么说明这个sku不需要采购
                    #region 二次判断排除生成另一张表

                    for (int idx = _List需要采购的预警.Count - 1; idx >= 0; idx--)
                    {
                        var curItem = _List需要采购的预警[idx];
                        double _两个仓库可用库存以及采购未入库之和 = 0; //可用库存+可用库存+采购未入库+采购未入库-缺货及未派单
                        double _两个库存下限之和          = 0; //库存下限+库存下限
                        double _缺货以及未派单           = 0;
                        var _昆山仓Item = _Im昆山所有库存.Where(x => x._SKU == curItem._SKU).FirstOrDefault();

                        if (_昆山仓Item != null)
                        {
                            _两个仓库可用库存以及采购未入库之和 += _昆山仓Item._可用数量 + _昆山仓Item._采购未入库;
                            _两个库存下限之和          += _昆山仓Item._库存下限;
                            _缺货以及未派单           += _昆山仓Item._缺货及未派单数量;
                        }

                        if (_两个仓库可用库存以及采购未入库之和 - _缺货以及未派单 >= _两个库存下限之和)
                        {
                            _List需要采购的预警.RemoveAt(idx);
                        }
                    }
                    #endregion

                    ////供应商唯一取值
                    var strProviderNames = _Im上海库存预警.Select(p => p._供应商).Distinct().OrderBy(p => p).ToList();

                    #region 计算划分采购订单
                    strProviderNames.ForEach(strCurProviderName =>
                    {
                        if (!string.IsNullOrEmpty(strCurProviderName))
                        {
                            var refCur供应商预警Items = _List需要采购的预警.Where(ss => ss._供应商 == strCurProviderName).ToList();
                            var refCur供应商采购金额总计  = refCur供应商预警Items.Select(ss => ss._采购金额).Sum();
                            //小于分界,分给合肥
                            if (refCur供应商采购金额总计 <= d订单分配金额)
                            {
                                refCur供应商预警Items.ForEach(cur库存预警Item =>
                                {
                                    var curOrder        = new Order();
                                    curOrder._供应商       = strCurProviderName;
                                    curOrder._SKU       = cur库存预警Item._SKU;
                                    curOrder._Qty       = cur库存预警Item._最终需要采购数量;
                                    curOrder._采购员       = Helper.ChangeLowerBuyer(cur库存预警Item._采购员);
                                    curOrder._含税单价      = cur库存预警Item._商品成本单价;
                                    curOrder._制单人       = cur库存预警Item._采购员;
                                    curOrder._对应供应商采购金额 = refCur供应商采购金额总计;
                                    if (Helper.IsBuyer(cur库存预警Item._采购员))
                                    {
                                        _Ex采购订单分配.Add(curOrder);
                                    }
                                    else
                                    {
                                        _Ex开发订单分配.Add(curOrder);
                                    }
                                });
                            }
                            else
                            {
                                refCur供应商预警Items.ForEach(cur库存预警Item =>
                                {
                                    var curOrder        = new Order();
                                    curOrder._供应商       = strCurProviderName;
                                    curOrder._SKU       = cur库存预警Item._SKU;
                                    curOrder._Qty       = cur库存预警Item._最终需要采购数量;
                                    curOrder._采购员       = cur库存预警Item._采购员;
                                    curOrder._含税单价      = cur库存预警Item._商品成本单价;
                                    curOrder._制单人       = cur库存预警Item._采购员;
                                    curOrder._对应供应商采购金额 = refCur供应商采购金额总计;
                                    if (Helper.IsBuyer(cur库存预警Item._采购员))
                                    {
                                        _Ex采购订单分配.Add(curOrder);
                                    }
                                    else
                                    {
                                        _Ex开发订单分配.Add(curOrder);
                                    }
                                });
                            }
                        }
                        else
                        {
                            //空白供应商,可能有不同的采购员,不需要转换
                            var refCur供应商预警Items = _List需要采购的预警.Where(ss => string.IsNullOrEmpty(ss._供应商)).ToList();
                            refCur供应商预警Items.ForEach(cur库存预警Item =>
                            {
                                var curOrder        = new Order();
                                curOrder._供应商       = strCurProviderName;
                                curOrder._SKU       = cur库存预警Item._SKU;
                                curOrder._Qty       = cur库存预警Item._最终需要采购数量;
                                curOrder._采购员       = cur库存预警Item._采购员;
                                curOrder._含税单价      = cur库存预警Item._商品成本单价;
                                curOrder._制单人       = cur库存预警Item._采购员;
                                curOrder._对应供应商采购金额 = 0;
                                if (Helper.IsBuyer(cur库存预警Item._采购员))
                                {
                                    _Ex采购订单分配.Add(curOrder);
                                }
                                else
                                {
                                    _Ex开发订单分配.Add(curOrder);
                                }
                            });
                        }
                    });
                    #endregion


                    //计算完毕,开始导出数据
                    ExportExcel(_Ex采购订单分配, _Ex开发订单分配);
                }, null);
                #endregion

                #endregion
            }
            catch (Exception ex)
            {
                ShowMsg(ex.Message);
            }
        }