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