/// <summary> /// 采购篮添加赠品 /// </summary> /// <param name="itemInfo"></param> /// <returns></returns> public virtual BasketItemsInfo CreateGiftForBasket(BasketItemsInfo itemInfo) { #region [Check 实体逻辑] if (!itemInfo.Quantity.HasValue || itemInfo.Quantity == 0) { //{0}:该商品数量不能为空! throw new BizException(string.Format(GetMessageString("Basket_ProductQtyEmpty"), itemInfo.ProductID)); } if (!itemInfo.OrderPrice.HasValue) { //"{0}:该商品结算价不能为空!" throw new BizException(string.Format(GetMessageString("Basket_SettlePriceEmpty"), itemInfo.ProductID)); } if (!itemInfo.ProductSysNo.HasValue || itemInfo.ProductSysNo == 0) { //{0}:该商品编号不能为空! throw new BizException(string.Format(GetMessageString("Basket_ItemSysNoEmpty"), itemInfo.ProductID)); } if (itemInfo.ItemSysNo == null || !itemInfo.ItemSysNo.HasValue || itemInfo.ItemSysNo.Value == 0) { //如果ItemSysNo 为空,则为添加操作 : return(BasketDA.CreateBasketItemForPrepare(itemInfo)); } else { return(BasketDA.UpdateBasketItemForGift(itemInfo)); } #endregion }
public int CreateBasketItemsForPrepare(List <ProductCenterItemInfo> list) { List <BasketItemsInfo> returnList = new List <BasketItemsInfo>(); list.ForEach(x => { x.SuggestTransferStocks.ForEach(y => { if (y.PurchaseQty != 0) { BasketItemsInfo info = new BasketItemsInfo(); info.OrderPrice = Convert.ToDecimal(y.Price); info.ProductSysNo = x.ItemSysNumber; info.ProductID = x.ItemCode; info.Quantity = y.PurchaseQty; info.StockSysNo = Convert.ToInt32(y.WareHouseNumber); info.IsTransfer = y.NeedBufferEnable == ECCentral.BizEntity.Inventory.YNStatus.Yes ? 1 : 0; info.LastVendorSysNo = null; info.ReadyQuantity = x.SuggestQtyAll; info.CompanyCode = x.CompanyCode; returnList.Add(info); } }); }); if (returnList.Count <= 0) { throw new BizException("你没有要选择的商品,或者商品信息 (采购数量,采购价格)设置不正确!"); } return(ObjectFactory <IPOBizInteract> .Instance.CreateBasketItemsForPrepare(returnList)); }
/// <summary> /// 创建/更新 采购篮商品 /// </summary> /// <param name="basketInfo"></param> /// <returns></returns> public virtual BasketItemsInfo SaveBasket(BasketItemsInfo basketInfo) { #region [Check 实体逻辑] //检查商品数量: if (!basketInfo.Quantity.HasValue || basketInfo.Quantity.Value == 0) { //{0}:该商品数量不能为空 throw new BizException(string.Format(GetMessageString("Basket_ProductQtyEmpty"), basketInfo.ProductID)); } if (!basketInfo.OrderPrice.HasValue) { //{0}:该商品结算价不能为空! throw new BizException(string.Format(GetMessageString("Basket_SettlePriceEmpty"), basketInfo.ProductID)); } //商品编号: if (!basketInfo.ProductSysNo.HasValue || basketInfo.ProductSysNo == 0) { //{0}:该商品编号不能为空! throw new BizException(string.Format(GetMessageString("Basket_ItemSysNoEmpty"), basketInfo.ProductID)); } //商品是否存在于采购篮中: else if (BasketDA.CheckProductHasExistInBasket(basketInfo)) { //{0}:该商品已存在于采购篮中! throw new BizException(string.Format(GetMessageString("Basket_ItemExists"), basketInfo.ProductID)); } #endregion //保存和更新操作: if (basketInfo.ItemSysNo == null || !basketInfo.ItemSysNo.HasValue || basketInfo.ItemSysNo.Value == 0) { //如果不存在SysNo,则为新建操作: basketInfo = BasketDA.CreateBasketItem(basketInfo); //写LOG: //CommonService.WriteLog<BasketItemEntity>(entity, " Created BaksetItem ", entity.SysNo.Value.ToString(), (int)LogType.PO_Basket_Insert); ExternalDomainBroker.CreateLog(" Created BaksetItem " , BizEntity.Common.BizLogType.Purchase_Basket_Insert , basketInfo.ItemSysNo.Value , basketInfo.CompanyCode); } else { basketInfo = BasketDA.UpdateBasketItem(basketInfo); //写LOG: //CommonService.WriteLog<BasketItemEntity>(entity, " Updated BaksetItem ", entity.SysNo.Value.ToString(), (int)LogType.PO_Basket_Update); ExternalDomainBroker.CreateLog(" Updated BaksetItem " , BizEntity.Common.BizLogType.Purchase_Basket_Update , basketInfo.ItemSysNo.Value , basketInfo.CompanyCode); } return(basketInfo); }
public int CheckGiftInBasket(BasketItemsInfo basketInfo, int giftSysNo) { DataCommand command = DataCommandManager.GetDataCommand("GetProductFormBasket"); command.SetParameterValue("@ProductSysoNo", giftSysNo); command.SetParameterValue("@StockSysNo", basketInfo.StockSysNo); command.SetParameterValue("@IsTransfer", basketInfo.IsTransfer); command.SetParameterValue("@VendorSysNo", basketInfo.VendorSysNo); object result = command.ExecuteScalar(); return(Convert.ToInt32(result)); }
/// <summary> /// 创建采购篮商品(备货中心用) /// </summary> /// <param name="prepareInfo"></param> /// <returns></returns> public virtual BasketItemsInfo CreateBasketItemForPrepare(BasketItemsInfo prepareInfo) { if (BasketDA.CheckProductHasExistInBasket(prepareInfo) && !prepareInfo.ItemSysNo.HasValue) { //添加采购篮中item记录是否重复判断条件:采购员,供应商,item,目标仓库 //{0}:该商品已存在于采购篮中! throw new BizException(string.Format(GetMessageString("Basket_ItemExists"), prepareInfo.ProductID)); } prepareInfo.LastVendorSysNo = BasketDA.GetVendorSysNoByProductNoAndStockSysNo(prepareInfo.ProductSysNo.Value, prepareInfo.StockSysNo.Value); #region [Check 实体逻辑] if (!prepareInfo.Quantity.HasValue || prepareInfo.Quantity == 0) { //{0}:该商品数量不能为空! throw new BizException(string.Format(GetMessageString("Basket_ProductQtyEmpty"), prepareInfo.ProductID)); } if (!prepareInfo.OrderPrice.HasValue) { //{0}:该商品结算价不能为空! throw new BizException(string.Format(GetMessageString("Basket_SettlePriceEmpty"), prepareInfo.ProductID)); } if (!prepareInfo.ProductSysNo.HasValue || prepareInfo.ProductSysNo == 0) { //{0}:该商品编号不能为空! throw new BizException(string.Format(GetMessageString("Basket_ItemSysNoEmpty"), prepareInfo.ProductID)); } else if (BasketDA.CheckProductHasExistInBasket(prepareInfo) && !prepareInfo.ItemSysNo.HasValue) { //添加采购篮中item记录是否重复判断条件:采购员,供应商,item,目标仓库 //{0}:该商品已存在于采购篮中! throw new BizException(string.Format(GetMessageString("Basket_ItemExists"), prepareInfo.ProductID)); } #endregion //新建操作: prepareInfo = BasketDA.CreateBasketItemForPrepare(prepareInfo); //写LOG: // CommonService.WriteLog<BasketItemEntity>(entity, " Created BaksetItem For Prepare ", entity.SysNo.Value.ToString(), (int)LogType.PO_Basket_Insert); ExternalDomainBroker.CreateLog(" Created BaksetItem For Prepare " , BizEntity.Common.BizLogType.Purchase_Basket_Insert , prepareInfo.ItemSysNo.Value , prepareInfo.CompanyCode); return(prepareInfo); }
private List <BasketItemsInfo> GetBasketItemsInfoBySysNo(List <int> sysNos) { List <BasketItemsInfo> list = new List <BasketItemsInfo>(); sysNos.ForEach(x => { BasketItemsInfo getInfo = new BasketItemsInfo(); if (x > 0) { getInfo = BasketDA.LoadBasketItemBySysNo(x); if (null != getInfo) { list.Add(getInfo); } } }); return(list); }
/// <summary> /// 批量添加赠品操作 /// </summary> /// <param name="sysNoList"></param> public virtual void BatchAddGift(List <BasketItemsInfo> list) { List <BasketItemsInfo> newItemlist = new List <BasketItemsInfo>(); string WarningMsg = string.Empty; #region 持久化列表中数据到数据库中 BatchUpdateBasketItems(list); #endregion if (list != null && list.Count > 0) { #region 查询采购蓝中item的赠品,验证赠品数量是否合主商品相等 List <int> psysno = new List <int>(); foreach (BasketItemsInfo bitem in list) { psysno.Add(bitem.ProductSysNo.Value); } psysno.Distinct(); List <BasketItemsInfo> giftResultList = BasketDA.LoadGiftItemByBasketItem(psysno); foreach (var bitem in list) { if (!bitem.VendorSysNo.HasValue || bitem.VendorSysNo == 0 || !bitem.StockSysNo.HasValue || !bitem.IsTransfer.HasValue) { #region 验证信息是否完整。 if (WarningMsg != string.Empty) { WarningMsg += "," + Environment.NewLine; } WarningMsg += GetMessageString("Basket_CheckInfo_1") + bitem.ProductSysNo + GetMessageString("Basket_CheckInfo_2"); if (bitem.VendorSysNo == 0 || !bitem.VendorSysNo.HasValue) { WarningMsg += GetMessageString("Basket_CheckInfo_Vendor"); } if (!bitem.StockSysNo.HasValue) { WarningMsg += GetMessageString("Basket_CheckInfo_Stock"); } if (!bitem.IsTransfer.HasValue) { WarningMsg += GetMessageString("Basket_CheckInfo_Transfer"); } #endregion } } if (!string.IsNullOrEmpty(WarningMsg)) { //WarningMsg += "等关键信息,请补全关键信息后再批量添加其赠品!"; WarningMsg += GetMessageString("Basket_CheckInfo_Desc"); throw new BizException(WarningMsg); } var group = from item in list group item by new { item.StockSysNo } into g select new { Key = g.Key, ResultList = g }; foreach (var item in group) { var newbasketItem = from i in item.ResultList where i.Quantity >= 0 select i ; if (giftResultList != null && giftResultList.Count > 0) { foreach (BasketItemsInfo giftentity in giftResultList) { #region 判断赠品数量 int masterQty = 0; int giftQty = 0; string stockName = string.Empty; int stocksysno = 0; foreach (var bitem in newbasketItem) { if (bitem.VendorSysNo != 0 && bitem.StockSysNo.HasValue && bitem.IsTransfer.HasValue) { #region 验证赠品与主商品数量 if (giftentity.MasterProductSysNo == bitem.ProductSysNo) { masterQty = bitem.Quantity.Value; stockName = bitem.StockName; stocksysno = bitem.StockSysNo.Value; if (giftQty != 0) { foreach (var bi in newbasketItem) { if (bi.ProductSysNo == giftentity.GiftSysNo) { bi.Quantity -= masterQty; } } } } if (giftentity.GiftSysNo == bitem.ProductSysNo) { giftQty += bitem.Quantity.Value; stockName = bitem.StockName; stocksysno = bitem.StockSysNo.Value; if (masterQty != 0) { bitem.Quantity -= masterQty; } } #endregion } } #endregion #region 添加赠品 if (masterQty != giftQty && masterQty > giftQty) { //先验证采购蓝中是否包含此商品,如果包含并且供应商,目标分仓, //是否中转都一样则直接改采购数量;如果没有或不一样,则新建记录 foreach (BasketItemsInfo entity in list) { //新建 if (entity.ProductSysNo == giftentity.MasterProductSysNo && entity.StockSysNo == stocksysno) { int basketsysno = BasketDA.CheckGiftInBasket(entity, giftentity.GiftSysNo.Value); if (basketsysno != 0) { BasketItemsInfo basketItem = new BasketItemsInfo() { ItemSysNo = basketsysno, CreateUserSysNo = entity.CreateUserSysNo, OrderPrice = entity.OrderPrice, Quantity = masterQty - giftQty, LastVendorSysNo = entity.VendorSysNo, ProductSysNo = giftentity.GiftSysNo, IsTransfer = entity.IsTransfer, StockSysNo = entity.StockSysNo, CompanyCode = entity.CompanyCode, ProductID = entity.ProductID, ReadyQuantity = entity.ReadyQuantity, IsConsign = entity.IsConsign, GiftSysNo = entity.GiftSysNo, PMSysNo = entity.PMSysNo }; newItemlist.Add(basketItem); if (newItemlist.Count > 0) { //采购篮添加赠品操作: newItemlist.ForEach(x => { CreateGiftForBasket(x); }); newItemlist.Clear(); } } else { //获取赠品信息: BasketItemsInfo gift = BasketDA.LoadBasketGiftInfo(giftentity.GiftSysNo.Value); BasketItemsInfo basketItem = new BasketItemsInfo() { OrderPrice = gift.OrderPrice, Quantity = masterQty - giftQty, LastVendorSysNo = entity.VendorSysNo, ProductSysNo = giftentity.GiftSysNo, IsTransfer = entity.IsTransfer, CreateTime = DateTime.Now, StockSysNo = entity.StockSysNo, CompanyCode = entity.CompanyCode, ProductID = entity.ProductID, ReadyQuantity = entity.ReadyQuantity, CreateUserSysNo = entity.CreateUserSysNo, IsConsign = entity.IsConsign, GiftSysNo = entity.GiftSysNo, PMSysNo = entity.PMSysNo }; newItemlist.Add(basketItem); if (newItemlist.Count > 0) { //采购篮添加赠品操作: newItemlist.ForEach(x => { CreateGiftForBasket(x); }); newItemlist.Clear(); } } } } } #endregion } } } #endregion } }
public void ConvertBasketTemplateFileToEntityList(string fileIdentity, out int successCount, out int failedCount, out string errorMsg, out List <BasketItemsInfo> failedList) { //1.移到一个新的文件夹中: string getConfigPath = AppSettingManager.GetSetting("PO", "VendorAttachmentFilesPath"); if (!Path.IsPathRooted(getConfigPath)) { //是相对路径: getConfigPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, getConfigPath); } string fileName = Guid.NewGuid().ToString() + FileUploadManager.GetFileExtensionName(fileIdentity); string getDestinationPath = Path.Combine(getConfigPath, fileName); string getFolder = Path.GetDirectoryName(getDestinationPath); if (!Directory.Exists(getFolder)) { Directory.CreateDirectory(getFolder); } //将上传的文件从临时文件夹剪切到目标文件夹: FileUploadManager.MoveFile(fileIdentity, getDestinationPath); //2.解析Excel: DataTable dt = new DataTable(); int sCount = 0; int fCount = 0; string returnErrorMessage = string.Empty; List <string> stockNames = new List <string>(); //获取仓库信息: List <string> validStockSysNo = new List <string>(); var configString = AppSettingManager.GetSetting("PO", "ValidStockSysNo"); if (!string.IsNullOrEmpty(configString)) { validStockSysNo = configString.Split(',').ToList(); } validStockSysNo.ForEach(x => { WarehouseInfo winfo = InventoryBizInteract.GetWarehouseInfoBySysNo(Convert.ToInt32(x)); if (winfo != null) { stockNames.Add(winfo.WarehouseName); } }); var connectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", Path.GetFullPath(getDestinationPath)); using (OleDbConnection conn = new OleDbConnection(connectionString)) { try { conn.Open(); OleDbCommand cmd = new OleDbCommand("select * from [sheet1$]", conn); OleDbDataAdapter adp = new OleDbDataAdapter(cmd); adp.Fill(dt); } catch (Exception ex) { throw new BizException("文件格式不正确!" + "\n" + ex.Message); } } if (dt.Rows.Count == 0) { throw new BizException("没有可导入的数据"); } else if (dt.Rows.Count > 1000) { throw new BizException("商品信息超过1000条,请将文件拆分后重新进行上传!"); } List <BasketItemsInfo> importList = new List <BasketItemsInfo>(dt.Rows.Count); for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; int vendorSysNo = -1; int quantity = -1; decimal orderPrice = -1; int.TryParse(row[0].ToString().Trim(), out vendorSysNo); int.TryParse(row[2].ToString().Trim(), out quantity); decimal.TryParse(row[3].ToString().Trim(), out orderPrice); BasketItemsInfo importModel = new BasketItemsInfo { VendorSysNo = vendorSysNo, ProductID = row[1].ToString().Trim(), Quantity = quantity, OrderPrice = orderPrice, StockName = row[4].ToString().Trim(), IsTransfer = row[5].ToString().Trim() != "是" && row[5].ToString().Trim() != "否" ? (int?)null : (row[5].ToString().Trim() == "是" ? 1 : 0) }; importList.Add(importModel); } var query = from g in (from item in importList group item by new { item.VendorSysNo, item.ProductID, item.StockName } into importGroup select importGroup) where g.Count() > 1 select g; if (query.Count() > 0) { var message = new StringBuilder("上传文件中存在重复记录:" + Environment.NewLine); foreach (var g in query) { message.AppendFormat("供应商编号:{0} 商品编号:{1} 目标分仓:{2}{3}", g.Key.VendorSysNo, g.Key.ProductID, g.Key.StockName, Environment.NewLine); } throw new BizException(message.ToString()); } List <BasketItemsInfo> messageList = new List <BasketItemsInfo>(); failedList = new List <BasketItemsInfo>(); foreach (var item in importList) { try { BasketItemsInfo basketItem = new BasketItemsInfo(); if (item.VendorSysNo > 0) { int vendorSysNo; if (Int32.TryParse(item.VendorSysNo.ToString(), out vendorSysNo)) { basketItem.LastVendorSysNo = vendorSysNo; } else { throw new BizException("【供应商编号】有非法的值,必须是有效的供应商"); } } else { throw new BizException("【供应商编号】有非法的值,必须是有效的供应商"); } if (string.IsNullOrEmpty(item.ProductID)) { throw new BizException("【商品编号】有非法的值,必须是有效的商品编号"); } else { basketItem.ProductID = item.ProductID; } if (item.OrderPrice < 0) { throw new BizException("【采购价格】不能为空"); } else { basketItem.OrderPrice = Convert.ToDecimal(item.OrderPrice); } if (!item.IsTransfer.HasValue) { throw new BizException("【是否中转】有非法的值,必须为'是'或者'否'"); } else { basketItem.IsTransfer = item.IsTransfer; } if (item.Quantity < 0) { throw new BizException("【数量】有非法的值,必须输入大于零的整数"); } else { basketItem.Quantity = item.Quantity; } if (item.OrderPrice >= 0) { decimal orderPrice; if (decimal.TryParse(item.OrderPrice.ToString(), out orderPrice)) { if (orderPrice > 0) { basketItem.OrderPrice = orderPrice; } else { throw new BizException("【订购价格】有非法的值,必须为大于零的数"); } } else { throw new BizException("【订购价格】有非法的值,必须为大于零的数"); } } if (string.IsNullOrEmpty(item.StockName) || !stockNames.Contains(item.StockName)) { throw new BizException(string.Format("【目标分仓】有非法的值,必须为:{0}", String.Join("、", stockNames.ToArray()))); } else { basketItem.StockName = item.StockName; } messageList.Add(basketItem); } catch (BizException ex) { item.ErrorMessage = ex.Message; failedList.Add(item); } catch (Exception) { //TODO:定message item.ErrorMessage = "验证数据时出现未知错误"; } } //调用服务,写入到采购篮中: List <BasketItemsInfo> returnItemsList = new List <BasketItemsInfo>(); if (messageList.Count > 0) { returnItemsList = PurchaseOrderBasketProcessor.BatchImportAndCreateBasketItem(messageList, false); //构建失败列表并返回: for (int i = 0; i < returnItemsList.Count; i++) { if (!string.IsNullOrEmpty(returnItemsList[i].ErrorMessage)) { fCount++; failedList.Add(returnItemsList[i]); } else { sCount++; } } ; } for (int i = 0; i < failedList.Count; i++) { returnErrorMessage += (i + 1) + ":" + failedList[i].ErrorMessage.ToString() + Environment.NewLine; } successCount = sCount; failedCount = failedList.Count; errorMsg = returnErrorMessage; }