示例#1
0
        /// <summary>
        /// 修改商品价格变动状态
        /// </summary>
        /// <param name="auditProductPriceSysNo"></param>
        public ProductPriceRequestInfo GetProductPriceRequestInfoBySysNo(int auditProductPriceSysNo)
        {
            CheckProductPriceRequestProcessor.CheckProductPriceRequestSysNo(auditProductPriceSysNo);
            var result = _productPriceRequestDA.GetProductPriceRequestInfoBySysNo(auditProductPriceSysNo);

            if (result != null && result.Category != null && result.Category.SysNo != null)
            {
                CalcProductPrice(result);
                var productSysNo = _productPriceRequestDA.GetProductSysNoBySysNo(auditProductPriceSysNo);
                if (productSysNo > 0)
                {
                    result.Category.CategorySetting = ObjectFactory <CategorySettingProcessor> .Instance.GetCategorySettingBySysNo(result.Category.SysNo.Value, productSysNo);

                    int giftsysno;
                    int couponsysno;
                    ExternalDomainBroker.GetGiftSNAndCouponSNByProductSysNo(productSysNo, out giftsysno, out couponsysno);
                    result.GiftSysNo   = giftsysno;
                    result.CouponSysNo = couponsysno;
                }
            }
            return(result);
        }
示例#2
0
        public void UpdateDefaultRMAPolicyBySysNo(DefaultRMAPolicyInfo defaultRMAPolicy)
        {
            //更新
            //是否存在重复
            //更新操作
            using (var tran = new TransactionScope())
            {
                List <DefaultRMAPolicyInfo> _defaultRMAPolicys   = rmaPolicyRequestDA.DefaultRMAPolicyByAll();
                DefaultRMAPolicyInfo        _oldDefaultRMAPolicy =
                    rmaPolicyRequestDA.DefaultRMAPolicyByAll()
                    .Where(p => p.C3SysNo == defaultRMAPolicy.C3SysNo)
                    .Where(p => p.BrandSysNo == defaultRMAPolicy.BrandSysNo)
                    .Where(p => p.RMAPolicySysNo == defaultRMAPolicy.RMAPolicySysNo).Count() > 0
                       ? rmaPolicyRequestDA.DefaultRMAPolicyByAll()
                    .Where(p => p.C3SysNo == defaultRMAPolicy.C3SysNo)
                    .Where(p => p.BrandSysNo == defaultRMAPolicy.BrandSysNo)
                    .Where(p => p.RMAPolicySysNo == defaultRMAPolicy.RMAPolicySysNo).FirstOrDefault()
                      : null;
                if (_oldDefaultRMAPolicy != null)
                {
                    throw new BizException(String.Format("C3SysNo:{0} " + ResouceManager.GetMessageString("IM.Product", "Brand") + ":{1} " + ResouceManager.GetMessageString("IM.Product", "Repeated")
                                                         , _oldDefaultRMAPolicy.C3SysNo, _oldDefaultRMAPolicy.BrandSysNo));
                }

                rmaPolicyRequestDA.UpdateDefaultRMAPolicyBySysNo(defaultRMAPolicy);
                string LogNote = String.Format(ResouceManager.GetMessageString("IM.Product", "UserName") +
                                               ":{0} " + ResouceManager.GetMessageString("IM.Product", "Updated") + ResouceManager.GetMessageString("IM.Product", "SourceData") + " RMAPolicySysNo:{1} " + ResouceManager.GetMessageString("IM.Product", "UpdateData") + " RMAPolicySysNo:{2}"
                                               , defaultRMAPolicy.EditUser.UserDisplayName
                                               , _defaultRMAPolicys.Where(p => p.SysNo == defaultRMAPolicy.SysNo).First().RMAPolicySysNo
                                               , defaultRMAPolicy.RMAPolicySysNo);
                //记录日志
                ExternalDomainBroker.CreateOperationLog(LogNote
                                                        , BizLogType.DefaultRMAPolicy_Edit
                                                        , Int32.Parse(defaultRMAPolicy.SysNo.ToString()), "8601");
                tran.Complete();
            }
            // throw new BizException("保存成功!");
        }
        /// <summary>
        /// 根据三级分类获取三级指标
        /// </summary>
        /// <param name="sysNo"></param>
        /// <param name="productSysNo"></param>
        /// <returns></returns>
        public virtual CategorySetting GetCategorySettingBySysNo(int sysNo, int productSysNo)
        {
            CheckCategorySettingProcessor.CheckCategorySettingSysNo(sysNo);
            var eneity = _categoryDA.GetCategorySettingBySysNo(sysNo);

            CheckCategorySettingProcessor.CheckCategorySettingInfo(eneity);
            CheckCategorySettingProcessor.CheckProductSysNo(productSysNo);
            var inStockDays = ExternalDomainBroker.GetInStockDaysByProductSysNo(productSysNo);
            var days        = GetMinMarginDays(inStockDays);

            if (eneity.CategoryMinMarginInfo.Margin.ContainsKey(days))
            {
                eneity.PrimaryMargin = eneity.CategoryMinMarginInfo.Margin[days].MinMargin;
                eneity.SeniorMargin  = eneity.CategoryMinMarginInfo.Margin[days].MaxMargin;
            }
            else
            {
                if (inStockDays >= 0 && inStockDays <= 30)
                {
                    eneity.PrimaryMargin = 0.05m;
                    eneity.SeniorMargin  = 0.05m;
                }

                if (inStockDays >= 31 && inStockDays <= 180)
                {
                    eneity.PrimaryMargin = 0.01m;
                    eneity.SeniorMargin  = 0.01m;
                }

                if (inStockDays > 180)
                {
                    eneity.PrimaryMargin = -0.03m;
                    eneity.SeniorMargin  = -0.03m;
                }
            }
            return(eneity);
        }
示例#4
0
        //[SendEmailAttribute(SendEmailType.ApprovePriceRequest)]
        public void AuditProductPriceRequest(ProductPriceRequestInfo productPriceRequest)
        {
            CheckProductPriceRequestProcessor.CheckProductPriceReques(productPriceRequest);
            CheckProductPriceRequestProcessor.CheckProductPriceRequestSysNo(productPriceRequest.SysNo);
            CheckProductPriceRequestProcessor.CheckProductPriceRequestStatus(productPriceRequest.RequestStatus);
            var status  = productPriceRequest.RequestStatus;
            var tlMemo  = productPriceRequest.TLMemo ?? "";
            var pmdMemo = productPriceRequest.PMDMemo ?? "";
            var hasAdvancedAuditPricePermission = productPriceRequest.HasAdvancedAuditPricePermission;
            var hasPrimaryAuditPricePermission  = productPriceRequest.HasPrimaryAuditPricePermission;
            var isOnePass = productPriceRequest.IsOnePass;

            if (productPriceRequest.SysNo != null)
            {
                productPriceRequest = _productPriceRequestDA.GetProductPriceRequestInfoBySysNo(productPriceRequest.SysNo.Value);
            }
            productPriceRequest.TLMemo  = tlMemo;
            productPriceRequest.PMDMemo = pmdMemo;
            productPriceRequest.HasAdvancedAuditPricePermission = hasAdvancedAuditPricePermission;
            productPriceRequest.HasPrimaryAuditPricePermission  = hasPrimaryAuditPricePermission;
            var productID = "";
            int proSysNo  = 0;

            CheckProductPriceRequestProcessor.CheckProductPriceRequestStatus(productPriceRequest, status, ref productID, ref proSysNo);
            if (!isOnePass)
            {
                CheckProductPriceRequestProcessor.CheckModifyStatusPermission(productPriceRequest, status, ref productID);
            }
            CheckProductPriceRequestProcessor.CheckProductPriceRequestCreateSysNo(productPriceRequest, productID);
            SetAuditUser(productPriceRequest);
            using (var tran = new TransactionScope())
            {
                productPriceRequest.RequestStatus = status;
                _productPriceRequestDA.UpdateProductPriceRequestStatus(productPriceRequest);
                #region Check当前商品调价后所在销售规则中差价
                ExternalDomainBroker.CheckComboPriceAndSetStatus(proSysNo);
                #endregion

                //状态更新成功之后发送消息
                switch (productPriceRequest.RequestStatus)
                {
                //审核通过
                case ProductPriceRequestStatus.Approved:
                    EventPublisher.Publish <ECCentral.Service.EventMessage.IM.ProductPriceAuditMessage>(new ECCentral.Service.EventMessage.IM.ProductPriceAuditMessage()
                    {
                        AuditUserSysNo = ServiceContext.Current.UserSysNo,
                        RequestSysNo   = productPriceRequest != null && productPriceRequest.SysNo.HasValue ? productPriceRequest.SysNo.Value : 0
                    });
                    break;

                //审核拒绝
                case ProductPriceRequestStatus.Deny:
                    EventPublisher.Publish <ECCentral.Service.EventMessage.IM.ProductPriceRejectMessage>(new ECCentral.Service.EventMessage.IM.ProductPriceRejectMessage()
                    {
                        RejectUserSysNo = ServiceContext.Current.UserSysNo,
                        RequestSysNo    = productPriceRequest != null && productPriceRequest.SysNo.HasValue ? productPriceRequest.SysNo.Value : 0
                    });
                    break;
                }

                tran.Complete();
            }
            //SetSendEmailAddress(proSysNo, productPriceRequest);
        }
示例#5
0
            /// <summary>
            /// 检查商品价格变动单据审核单据
            /// </summary>
            /// <param name="productPriceRequest"></param>
            /// <param name="status"></param>
            /// <param name="productID"></param>
            /// <returns></returns>
            public static void CheckProductPriceRequestStatus(ProductPriceRequestInfo productPriceRequest, ProductPriceRequestStatus?status, ref string productID, ref int proSysNo)
            {
                CheckProductPriceReques(productPriceRequest);
                if (productPriceRequest.AuditType == null)
                {
                    throw new BizException(ResouceManager.GetMessageString("IM.ProductPriceRequest", "ProductPriceRequestTypeIsNull"));
                }
                var productPriceRequestDA = ObjectFactory <IProductPriceRequestDA> .Instance;

                if (productPriceRequest.SysNo == null)
                {
                    return;
                }
                var productSysNo = productPriceRequestDA.GetProductSysNoBySysNo(productPriceRequest.SysNo.Value);

                proSysNo = productSysNo;
                if (productSysNo <= 0)
                {
                    throw new BizException(ResouceManager.GetMessageString("IM.ProductPriceRequest", "ProductSysNoIsNull"));
                }
                var productDA = ObjectFactory <IProductDA> .Instance;
                var product   = productDA.GetProductInfoBySysNo(productSysNo);

                productID = product.ProductID;
                if (product == null || String.IsNullOrEmpty(product.ProductID))
                {
                    throw new BizException(ResouceManager.GetMessageString("IM.ProductPriceRequest", "ProductIsNull"));
                }
                if (productPriceRequest.RequestStatus == null)
                {
                    throw new BizException(ResouceManager.GetMessageString("IM.ProductPriceRequest", "ProductPriceRequestStatusIsNull"));
                }
                if (!PendingList.Contains(productPriceRequest.RequestStatus.Value))
                {
                    var errorStr = ResouceManager.GetMessageString("IM.ProductPriceRequest",
                                                                   "AuditProductPriceRequestForPending");
                    throw new BizException(String.Format(errorStr, product.ProductID));
                }
                if (status != null && productPriceRequest.AuditType.Value == ProductPriceRequestAuditType.SeniorAudit &&
                    productPriceRequest.RequestStatus.Value == ProductPriceRequestStatus.NeedSeniorApprove &&
                    status.Value == ProductPriceRequestStatus.Origin)
                {
                    var errorStr = ResouceManager.GetMessageString("IM.ProductPriceRequest",
                                                                   "AuditProductPriceRequestForPending");
                    throw new BizException(String.Format(errorStr, product.ProductID));
                }
                if (status != null && productPriceRequest.AuditType.Value == ProductPriceRequestAuditType.Audit &&
                    status.Value == ProductPriceRequestStatus.NeedSeniorApprove)
                {
                    var errorStr = ResouceManager.GetMessageString("IM.ProductPriceRequest",
                                                                   "TLAuditProductPriceRequest");
                    throw new BizException(String.Format(errorStr, product.ProductID));
                }
                if (productPriceRequest.AuditType.Value == ProductPriceRequestAuditType.SeniorAudit)
                {
                    if (String.IsNullOrEmpty(productPriceRequest.TLMemo.Trim()) &&
                        productPriceRequest.RequestStatus.Value == ProductPriceRequestStatus.Origin)
                    {
                        var errorStr = ResouceManager.GetMessageString("IM.ProductPriceRequest",
                                                                       "TLMemoInvalid");
                        throw new BizException(String.Format(errorStr, product.ProductID));
                    }
                    if (String.IsNullOrEmpty(productPriceRequest.PMDMemo.Trim()) &&
                        productPriceRequest.RequestStatus.Value == ProductPriceRequestStatus.NeedSeniorApprove)
                    {
                        var errorStr = ResouceManager.GetMessageString("IM.ProductPriceRequest",
                                                                       "PMDMemoInvalid");
                        throw new BizException(String.Format(errorStr, product.ProductID));
                    }
                }
                var result = ExternalDomainBroker.CheckMarketIsActivity(productSysNo);

                if (result && status == ProductPriceRequestStatus.Approved)
                {
                    var errorStr = ResouceManager.GetMessageString("IM.ProductPriceRequest",
                                                                   "ProductPriceRequestStatusInvalid");
                    throw new BizException(String.Format(errorStr, product.ProductID));
                }
                ExternalDomainBroker.CheckComboPriceAndSetStatus(productSysNo);
            }
示例#6
0
        /// <summary>
        /// 创建商品
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public SellerProductRequestInfo CreateItemIDForNewProductRequest(SellerProductRequestInfo entity)
        {
            //判断请求类型是否正确
            if (entity.Type != SellerProductRequestType.NewCreated)
            {
                //请求信息类型不为新品创建!
                throw new BizException(ResouceManager.GetMessageString("IM.SellerProductRequest", "SellerProductRequestTypeNotNewCreated"));
            }

            CheckSellerProductRequestInfoProcessor.CheckSellerProductRequestInfo(entity);

            //系统语言列表
            List <Language> languageList    = ExternalDomainBroker.GetAllLanguageList();
            var             defaultLanguage = languageList.FirstOrDefault(item => item.IsDefault == 1);

            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    var productGroup = BuildProductGroupInfo(entity);
                    productGroup.ProductList.ForEach(product => { product.ProductBasicInfo.LongDescription = new LanguageContent(); });
                    var dict = ObjectFactory <ProductProcessor> .Instance.ProductCreate(productGroup);

                    if (!productGroup.LanguageCode.Equals(defaultLanguage.LanguageCode))
                    {
                        ObjectFactory <ProductProcessor> .Instance.ProductLangCreate(productGroup);//写入商品多语言
                    }

                    if (dict.Count > 0)
                    {
                        String exceptionMsg;
                        if (dict.TryGetValue(productGroup.ProductList.First().GetHashCode(), out exceptionMsg))
                        {
                            throw new BizException(exceptionMsg);
                        }
                    }

                    int i = 0;
                    foreach (SellerProductRequestFileInfo image in entity.SellerProductRequestFileList)
                    {
                        if (i == 0)
                        {
                            image.ImageName = productGroup.ProductList.First().ProductBasicInfo.CommonSkuNumber + ".jpg";
                        }
                        else
                        {
                            image.ImageName = productGroup.ProductList.First().ProductBasicInfo.CommonSkuNumber + "_" + i.ToString().PadLeft(2, '0') + ".jpg";
                        }

                        //设置Commonsku每张图片写上文件名
                        _SellerProductRequestDA.UpdateProductRequestImageName(image);

                        i++;
                    }

                    entity.Status          = SellerProductRequestStatus.Processing;
                    entity.CommonSKUNumber = productGroup.ProductList.First().ProductBasicInfo.CommonSkuNumber;
                    entity.ProductID       = productGroup.ProductList.First().ProductID;

                    entity = _SellerProductRequestDA.UpdateSellerProductRequest(entity);

                    entity.Memo = entity.ProductID;
                    _SellerProductRequestDA.CallExternalSP(entity);
                }
                catch (Exception ex)
                {
                    throw new BizException(ex.Message);
                }

                scope.Complete();
            }


            return(entity);
        }
示例#7
0
        public void AuditRequestProductPrice(ProductInfo productInfo)
        {
            var exceptionBuilder = new StringBuilder();

            var product = _productDA.GetProductInfoBySysNo(productInfo.SysNo);

            if (product.ProductPriceRequest.SysNo.HasValue)
            {
                exceptionBuilder.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult1"));
            }

            if (String.IsNullOrEmpty(productInfo.ProductPriceRequest.PMMemo))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult2"));
            }

            if (ExternalDomainBroker.CheckMarketIsActivity(productInfo.SysNo))
            {
                exceptionBuilder.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult3"));
            }

            ProcessNoRequestPrice(productInfo.ProductPriceRequest, product.ProductPriceInfo);

            if (productInfo.ProductPriceRequest.CurrentPrice.HasValue &&
                (product.ProductStatus == ProductStatus.Active ||
                 product.ProductStatus == ProductStatus.InActive_Show) &&
                (productInfo.ProductPriceRequest.CurrentPrice.Value == IMConst.ProductPriceZero ||
                 productInfo.ProductPriceRequest.CurrentPrice.Value == IMConst.ProductDefaultPrice))
            {
                exceptionBuilder.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult4"));
            }

            ProductPriceRequestAuditType auditType = ProductPriceRequestAuditType.Audit;

            /*
             * var auditMessage = CheckProductPriceRequest(productInfo, product.ProductPriceInfo,
             *                                          product.ProductBasicInfo.ProductCategoryInfo, ref auditType);
             *
             * if (auditMessage.Length == 0)
             * {
             *  exceptionBuilder.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult5"));
             * }
             */
            if (exceptionBuilder.Length > 0)
            {
                throw new BizException(exceptionBuilder.ToString());
            }
            productInfo.ProductPriceRequest.AuditType = auditType;

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
            options.Timeout        = TimeSpan.FromMinutes(5);
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                if (productInfo.ProductPriceRequest.VirtualPrice != product.ProductPriceInfo.VirtualPrice)
                {
                    _productPriceDA.UpdateProductVirtualPrice(productInfo.SysNo, product.ProductPriceInfo.VirtualPrice, productInfo.ProductPriceRequest.VirtualPrice);
                }
                _productPriceDA.UpdateProductBasicPrice(productInfo.SysNo, productInfo.ProductPriceRequest);
                _productPriceRequestBP.InsertProductPriceRequest(productInfo.SysNo, productInfo.ProductPriceRequest);

                //提交价格审核之后发送消息
                var getProduct = _productDA.GetProductInfoBySysNo(productInfo.SysNo);
                EventPublisher.Publish <ECCentral.Service.EventMessage.IM.ProductPriceAuditSubmitMessage>(new ECCentral.Service.EventMessage.IM.ProductPriceAuditSubmitMessage()
                {
                    SubmitUserSysNo = ServiceContext.Current.UserSysNo,
                    ProductSysNo    = productInfo != null ? productInfo.SysNo : 0,
                    RequestSysNo    = (getProduct != null && getProduct.ProductPriceRequest != null && getProduct.ProductPriceRequest.SysNo.HasValue) ? getProduct.ProductPriceRequest.SysNo.Value : 0
                });

                scope.Complete();
            }
        }
示例#8
0
        /// <summary>
        /// Check商品本身及促销活动中毛利率,供外部访问
        /// </summary>
        /// <param name="productPriceReqInfo">价格信息,必须参数包括:CurrentPrice,Point,UnitCost,CategorySysNo</param>
        /// <param name="productSysNo">商品Sysno</param>
        /// <param name="priceName">所修改价格的名称</param>
        /// <param name="productMarginReturnMsg">返回商品本身的毛利率Check结果</param>
        /// <returns></returns>
        public List <ProductPromotionMarginInfo> CheckMargin(ProductPriceRequestInfo productPriceReqInfo,
                                                             int productSysNo,
                                                             string priceName,
                                                             decimal discount,
                                                             ref string productMarginReturnMsg)
        {
            List <ProductPromotionMarginInfo> returnList = new List <ProductPromotionMarginInfo>();
            var categoryInfo = productPriceReqInfo.Category;

            if (categoryInfo.SysNo.HasValue)
            {
                var setting = ObjectFactory <CategorySettingProcessor> .Instance.GetCategorySettingBySysNo(categoryInfo.SysNo.Value, productSysNo);

                var priceInfo = productPriceReqInfo;
                if (priceInfo.UnitCost >= 0)
                {
                    var margin = GetMargin(priceInfo.CurrentPrice.Value,
                                           priceInfo.Point.HasValue ? priceInfo.Point.Value : 0,
                                           priceInfo.UnitCost, discount);
                    if (margin < setting.PrimaryMargin && margin > setting.SeniorMargin)
                    {
                        productMarginReturnMsg = ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult1") + priceName + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult2");
                    }
                    if (margin < setting.SeniorMargin)
                    {
                        productMarginReturnMsg = priceName + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult3");
                        //auditType = ProductPriceRequestAuditType.SeniorAudit;
                    }

                    var productPromotionDiscountInfoList = ExternalDomainBroker.GetProductPromotionDiscountInfoList(productSysNo);

                    if (productPromotionDiscountInfoList.Any())
                    {
                        string msgTmp = string.Empty;
                        productPromotionDiscountInfoList.ForEach(promotionDiscountInfo =>
                        {
                            var promotionMargin = GetMargin(priceInfo.CurrentPrice.Value,
                                                            priceInfo.Point.HasValue ? priceInfo.Point.Value : 0, priceInfo.UnitCost, promotionDiscountInfo.Discount);
                            var enumName = EnumHelper.GetEnumDesc(promotionDiscountInfo.PromotionType);
                            var promotionMarginPercent = (promotionMargin * 100).TruncateDecimal(2) + "%";
                            if (promotionMargin < setting.PrimaryMargin)
                            {
                                msgTmp = ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult4") + priceName + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult5") + enumName
                                         + promotionDiscountInfo.ReferenceSysNo + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult6")
                                         + promotionMarginPercent + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult7");
                            }
                            returnList.Add(new ProductPromotionMarginInfo()
                            {
                                PromotionType  = promotionDiscountInfo.PromotionType,
                                ReferenceSysNo = promotionDiscountInfo.ReferenceSysNo,
                                Margin         = promotionMargin,
                                ReturnMsg      = msgTmp
                            });
                        });
                    }
                }
            }
            else
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult8"));
            }
            return(returnList);
        }