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