/// <summary>
        /// 获得审核通过状态
        /// </summary>
        /// <param name="auditType"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        private ProductPriceRequestStatus GetProductPriceRequestPassStatus(ProductPriceRequestAuditType auditType, ProductPriceRequestStatus status)
        {
            var returnstatus = ProductPriceRequestStatus.Approved;

            if (auditType == ProductPriceRequestAuditType.SeniorAudit && status == ProductPriceRequestStatus.Origin)
            {
                returnstatus = ProductPriceRequestStatus.NeedSeniorApprove;
            }
            return(returnstatus);
        }
Example #2
0
 /// <summary>
 /// 获取审核状态
 /// </summary>
 /// <param name="auditType"></param>
 /// <param name="status"></param>
 /// <returns></returns>
 private string GetAuditStatus(ProductPriceRequestAuditType auditType, ProductPriceRequestStatus status)
 {
     if (auditType == ProductPriceRequestAuditType.Audit)
     {
         return(ResouceManager.GetMessageString("IM.ProductPrice", "GetAuditStatus1"));
     }
     if (auditType == ProductPriceRequestAuditType.SeniorAudit && status == ProductPriceRequestStatus.Origin)
     {
         return(ResouceManager.GetMessageString("IM.ProductPrice", "GetAuditStatus2"));
     }
     if (auditType == ProductPriceRequestAuditType.SeniorAudit && status == ProductPriceRequestStatus.NeedSeniorApprove)
     {
         return(ResouceManager.GetMessageString("IM.ProductPrice", "GetAuditStatus3"));
     }
     return("");
 }
Example #3
0
        private string CheckMargin(decimal checkPrice, ProductInfo productInfo, CategoryInfo categoryInfo, string priceName, ref ProductPriceRequestAuditType auditType)
        {
            var message = new StringBuilder();

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

                var priceInfo = productInfo.ProductPriceRequest;
                if (priceInfo.UnitCost != 0)
                {
                    var margin = GetMargin(checkPrice,
                                           priceInfo.Point.HasValue ? priceInfo.Point.Value : 0,
                                           priceInfo.UnitCost);
                    if (margin < setting.PrimaryMargin && margin > setting.SeniorMargin)
                    {
                        message.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult1") + priceName + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult2"));
                    }
                    if (margin < setting.SeniorMargin)
                    {
                        message.AppendLine(priceName + ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult3"));
                        auditType = ProductPriceRequestAuditType.SeniorAudit;
                    }

                    var productPromotionDiscountInfoList = ExternalDomainBroker.GetProductPromotionDiscountInfoList(productInfo.SysNo);

                    if (productPromotionDiscountInfoList.Any())
                    {
                        productPromotionDiscountInfoList.ForEach(promotionDiscountInfo =>
                        {
                            var promotionMargin = GetMargin(checkPrice,
                                                            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)
                            {
                                message.AppendLine(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"));
                            }
                        });
                    }
                }
            }
            else
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "CheckMarginResult8"));
            }
            return(message.ToString());
        }
Example #4
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();
            }
        }
Example #5
0
        private string CheckProductPriceRequest(ProductInfo productInfo, ProductPriceInfo originalPriceInfo, CategoryInfo categoryInfo, ref ProductPriceRequestAuditType auditType)
        {
            var auditMessage = new StringBuilder();

            var requestInfo = productInfo.ProductPriceRequest;

            #region BasicPrice

            if (requestInfo.CurrentPrice < requestInfo.Point)
            {
                auditMessage.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "CheckProductPriceRequestResult1"));
            }

            //if (requestInfo.CurrentPrice + requestInfo.CashRebate >= requestInfo.BasicPrice)
            //{
            //    throw new BizException("商品售价加返现必须小于市场价格!");
            //}

            if (requestInfo.CurrentPrice >= 2 * requestInfo.UnitCost)
            {
                auditMessage.AppendLine(ResouceManager.GetMessageString("IM.ProductPrice", "CheckProductPriceRequestResult2"));
            }

            if (requestInfo.CurrentPrice < originalPriceInfo.CurrentPrice)
            {
                var checkMarginResult = CheckMargin(requestInfo.CurrentPrice.Value, productInfo, categoryInfo, ResouceManager.GetMessageString("IM.ProductPrice", "CheckProductPriceRequestResult3"),
                                                    ref auditType);
                if (checkMarginResult.Length > 0)
                {
                    auditMessage.AppendLine(checkMarginResult);
                }
            }

            if (requestInfo.MaxCountPerDay < requestInfo.MinCountPerOrder)
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "CheckProductPriceRequestResult4"));
            }

            #endregion

            #region RankPrice

            var rankPriceList =
                productInfo.ProductPriceRequest.ProductRankPrice.Where(
                    rankPrice => rankPrice.Status == ProductRankPriceStatus.Active).ToList();

            if (rankPriceList.Any() && rankPriceList.OrderBy(rankPrice => rankPrice.RankPrice).First().RankPrice >= requestInfo.CurrentPrice)
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult5"));
            }

            if (rankPriceList.Select(rankPrice => rankPrice.RankPrice).Distinct().Count() != rankPriceList.Count)
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult6"));
            }

            if (rankPriceList.Any(rankPrice => !rankPrice.RankPrice.HasValue))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult7"));
            }

            if (!rankPriceList
                .OrderBy(rankPrice => rankPrice.Rank)
                .Select(rankPrice => rankPrice.Rank.ToEnumDesc()).Join("")
                .Equals(rankPriceList
                        .OrderByDescending(rankPrice => rankPrice.RankPrice)
                        .Select(rankPrice => rankPrice.Rank.ToEnumDesc()).Join("")))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult8"));
            }

            foreach (var rankPrice in rankPriceList)
            {
                auditMessage.Append(CheckMargin(rankPrice.RankPrice.HasValue ? rankPrice.RankPrice.Value : 0,
                                                productInfo, categoryInfo, rankPrice.Rank.ToEnumDesc(), ref auditType));
            }

            #endregion

            #region VolumePrice

            var volumePriceList = productInfo.ProductPriceRequest.ProductWholeSalePriceInfo;

            if (volumePriceList.Any() && volumePriceList.OrderBy(volumePrice => volumePrice.Price).First().Price >= requestInfo.CurrentPrice)
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult9"));
            }

            if (volumePriceList.Any(volumePrice => !volumePrice.Qty.HasValue))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult10"));
            }

            if (volumePriceList.Any(volumePrice => !volumePrice.Price.HasValue))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult11"));
            }

            if (!volumePriceList
                .OrderBy(volumePrice => volumePrice.Level)
                .Select(volumePrice => volumePrice.Level.ToEnumDesc()).Join("")
                .Equals(volumePriceList
                        .OrderBy(volumePrice => volumePrice.Qty)
                        .Select(volumePrice => volumePrice.Level.ToEnumDesc()).Join("")))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult12"));
            }

            if (!volumePriceList
                .OrderBy(volumePrice => volumePrice.Level)
                .Select(volumePrice => volumePrice.Level.ToEnumDesc()).Join("")
                .Equals(volumePriceList
                        .OrderByDescending(volumePrice => volumePrice.Price)
                        .Select(volumePrice => volumePrice.Level.ToEnumDesc()).Join("")))
            {
                throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult13"));
            }

            #endregion

            #region VIPPrice

            if (requestInfo.IsUseAlipayVipPrice == IsUseAlipayVipPrice.Yes)
            {
                if (!requestInfo.AlipayVipPrice.HasValue)
                {
                    throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult14"));
                }

                if (requestInfo.AlipayVipPrice >= requestInfo.CurrentPrice)
                {
                    throw new BizException(ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult15"));
                }

                auditMessage.Append(CheckMargin(requestInfo.AlipayVipPrice.Value,
                                                productInfo, categoryInfo, ResouceManager.GetMessageString("IM.ProductPrice", "AuditRequestProductPriceResult16"), ref auditType));
            }

            #endregion

            return(auditMessage.ToString());
        }