/// <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); }
/// <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(""); }
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()); }
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(); } }
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()); }