Exemple #1
0
        /// <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
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        /// <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));
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        /// <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;
        }