/// <summary> /// 处理团购已完成了的订单 /// </summary> /// <param name="companyCode"></param> public virtual void ProcessFinishedGroupBuySO(string companyCode) { List <ECCentral.BizEntity.MKT.GroupBuyingInfo> gbInfoList = ExternalDomainBroker.GetGroupBuyInfoForNeedProcess(companyCode); GroupBuySOProcessor groupBuySOProcessor = ObjectFactory <GroupBuySOProcessor> .Instance; List <BatchActionItem <ECCentral.BizEntity.MKT.GroupBuyingInfo> > actionItemList = new List <BatchActionItem <ECCentral.BizEntity.MKT.GroupBuyingInfo> >(); foreach (ECCentral.BizEntity.MKT.GroupBuyingInfo gbInfo in gbInfoList) { actionItemList.Add(new BatchActionItem <ECCentral.BizEntity.MKT.GroupBuyingInfo> { ID = gbInfo.SysNo.Value.ToString(), Data = gbInfo }); } BatchActionResult <ECCentral.BizEntity.MKT.GroupBuyingInfo> result = BatchActionManager.DoBatchAction <ECCentral.BizEntity.MKT.GroupBuyingInfo>(actionItemList, (gbInfo) => { groupBuySOProcessor.ProcessorGroupBuySO(gbInfo); }); result.ThrowErrorException(); }
public virtual void BatchDelete(List <int> sysNoList) { if (sysNoList != null && sysNoList.Count > 0) { TransactionScopeFactory.TransactionAction(() => { sysNoList.ForEach(p => { _da.UpdateStatus(p, ComboStatus.Deactive); //更新PromotionEngine配置中活动的状态 //_oaPromotionEngine.UpdateActivityStatus(p, ComboStatus.Deactive); ExternalDomainBroker.CreateOperationLog( String.Format("{0}{1}SysNo:{2}", DateTime.Now.ToString(), "删除", p) , BizEntity.Common.BizLogType.OptionalAccessories_Del , p, "8601");//[Mark][Alan.X.Luo 硬编码] }); }); } }
/// <summary> /// 计算手续费 /// </summary> /// <param name="soInfo"></param> public virtual void CalculatePayPrice(SOInfo soInfo) { decimal payPriceBase = 0; PayType ptInfo = ExternalDomainBroker.GetPayTypeBySysNo(soInfo.BaseInfo.PayTypeSysNo.Value); if (ptInfo != null) { payPriceBase = soInfo.BaseInfo.CashPay + soInfo.BaseInfo.ShipPrice.Value + soInfo.BaseInfo.PromotionAmount.Value + soInfo.BaseInfo.PremiumAmount.Value + soInfo.BaseInfo.TariffAmount.Value - soInfo.BaseInfo.PrepayAmount.Value - soInfo.BaseInfo.GiftCardPay.Value; soInfo.BaseInfo.PayPrice = decimal.Round(ptInfo.PayRate.Value * payPriceBase, 2); } if (soInfo.BaseInfo.PayPrice <= 0) { soInfo.BaseInfo.PayPrice = null; } }
/// <summary> /// 将查询转为记录 /// </summary> /// <param name="queryData">查询结果</param> /// <returns>记录列表</returns> List <InternalMemoReport> ConvertReports(List <SOInternalMemoInfo> queryData) { List <InternalMemoReport> reports = new List <InternalMemoReport>(); //去掉重复数据 var distinctQuery = queryData.Distinct(); var users = distinctQuery.GroupBy(item => item.CreateUserSysNo); foreach (var user in users) { InternalMemoReport report = new InternalMemoReport(); report.UserSysNo = user.Key; report.UserName = ExternalDomainBroker.GetUserInfoBySysNo(user.First().CreateUserSysNo).UserDisplayName; List <int> ProcessedSOList = new List <int>(); foreach (var imemo in user.OrderBy(item => item.LogTime.Value).ToList()) { if (ProcessedSOList.Exists(item => item == imemo.SOSysNo)) { continue; } if (distinctQuery.Count(item => (item.LogTime.Value > imemo.LogTime.Value && item.LogTime.Value.AddDays(-3) < imemo.LogTime.Value) && item.SOSysNo == imemo.SOSysNo) == 0) { report.ResolvedCount++; } else { report.UnResolvedCount++; } ProcessedSOList.Add(imemo.SOSysNo); } reports.Add(report); } return(reports); }
/// <summary> /// 创建Combo Master /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual int?CreateCombo(ComboInfo info) { List <string> errorList = CheckBasicIsPass(info); if (errorList.Count > 0) { throw new BizException(errorList.Join("\r\n")); } //创建的时候不检查Item的信息 //errorList = CheckComboItemIsPass(info); //if (errorList.Count > 0) //{ // throw new BizException(errorList.Join("\r\n")); //} if (info.Status == null) { info.Status = ComboStatus.Deactive; } TransactionScopeFactory.TransactionAction(() => { info.SysNo = _da.CreateMaster(info); foreach (ComboItem item in info.Items) { item.ComboSysNo = info.SysNo; _da.AddComboItem(item); } //将套餐信息写入到促销引擎中,写入时促销活动是停止状态,审核通过后变成运行状态。 //ObjectFactory<ComboPromotionEngine>.Instance.SaveComboActivity(info); }); ExternalDomainBroker.CreateOperationLog(BizLogType.ComboCreate.ToEnumDesc(), BizLogType.ComboCreate, info.SysNo.Value, info.CompanyCode); return(info.SysNo); }
private void LoadRequestUserInfo(LendRequestInfo requestInfo) { if (requestInfo.CreateUser != null && requestInfo.CreateUser.SysNo != null) { requestInfo.CreateUser = ExternalDomainBroker.GetUserInfo((int)requestInfo.CreateUser.SysNo); } if (requestInfo.EditUser != null && requestInfo.EditUser.SysNo != null) { requestInfo.EditUser = ExternalDomainBroker.GetUserInfo((int)requestInfo.EditUser.SysNo); } if (requestInfo.AuditUser != null && requestInfo.AuditUser.SysNo != null) { requestInfo.AuditUser = ExternalDomainBroker.GetUserInfo((int)requestInfo.AuditUser.SysNo); } if (requestInfo.OutStockUser != null && requestInfo.OutStockUser.SysNo != null) { requestInfo.OutStockUser = ExternalDomainBroker.GetUserInfo((int)requestInfo.OutStockUser.SysNo); } }
/// <summary> /// 提供一个接口供商品价格管理模块来调用,传入商品sysno /// 然后检查商品对应捆绑规则是否有低于成本价的情况(价格和+折扣 《 成本价格和),有的就将其变为待审核(status=1) /// </summary> /// <param name="productSysNo"></param> public virtual void CheckComboPriceAndSetStatus(int productSysNo) { //1.根据productSysNo得到所有包含了该Product的所有状态的Combo List <ComboInfo> comboList = _da.GetComboListByProductSysNo(productSysNo); if (comboList.Count == 0) { return; } //2.循环处理Combo,调用CheckIsPass函数,判断是否: 价格和+折扣和<成本价格和,有则将其变为待审核(status=1),并记录LOG,发送邮件 comboList = comboList.Where(o => o.Status == ComboStatus.Active).ToList <ComboInfo>(); foreach (ComboInfo combo in comboList) { #region 需处理套餐与DIY的数据,即combo.RefernceType=1,2 if (combo.ReferenceType != 1 && combo.ReferenceType != 2) { continue; } #endregion if (!CheckPriceIsPass(combo)) { if (combo.Status == ComboStatus.Active) //有效状态改为待审核,无效和待审核不做处理 { _da.UpdateStatus(combo.SysNo, ComboStatus.WaitingAudit); } if (combo.RequestSysNo > 0) { combo.Status = ComboStatus.Deactive; _da.SyncSaleRuleStatus(combo.RequestSysNo, combo.Status); } //string note = "捆绑销售编号 " + combo.SysNo.Value.ToString() + ",status=" + combo.Status.ToDisplayText() + "状态改为待审核。"; string note = ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboMKTSysNo") + combo.SysNo.Value.ToString() + ",status=" + combo.Status.ToDisplayText() + ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_StatusTransToCheckPending"); ExternalDomainBroker.CreateOperationLog(note, BizLogType.Basic_Product_Price_Update_Verify, combo.SysNo.Value, combo.CompanyCode); SendMail(combo); ExternalDomainBroker.CreateOperationLog(BizLogType.ComboCheckPriceAndSetStatus.ToEnumDesc(), BizLogType.ComboCheckPriceAndSetStatus, combo.SysNo.Value, combo.CompanyCode); } } }
protected override PayItemInfo PreCheckForPay(PayItemInfo entity, out PayableInfo payableInfo) { var payItemInfo = base.PreCheckForPay(entity, out payableInfo); if (entity.OrderType == PayableOrderType.POAdjust) { //PO调整单不用作额外的检查 return(payItemInfo); } var poInfo = ExternalDomainBroker.GetPurchaseOrderInfo(payableInfo.OrderSysNo.Value, 0); if (poInfo == null) { ThrowBizException("PayItem_OrderNotExisitsFormat", payItemInfo.OrderSysNo); } if (payItemInfo.PayStyle == PayItemStyle.Advanced) { if (poInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus == PurchaseOrderStatus.Abandoned) { ThrowBizException("PayItem_Pay_AbandonedPOCanNotAdvanced"); } } else { if (payItemInfo.OrderType != PayableOrderType.POAdjust && poInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus != PurchaseOrderStatus.InStocked && poInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus != PurchaseOrderStatus.PartlyInStocked && poInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus != PurchaseOrderStatus.SystemClosed && poInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus != PurchaseOrderStatus.ManualClosed && poInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus != PurchaseOrderStatus.VendorClosed) { ThrowBizException("PayItem_Pay_POStatusInvalid"); } } return(payItemInfo); }
/// <summary> /// 创建OptionalAccessories /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual int?CreateOptionalAccessories(OptionalAccessoriesInfo info) { List <string> errorList = CheckBasicIsPass(info); if (errorList.Count > 0) { throw new BizException(errorList.Join("\r\n")); } errorList = CheckOptionalAccessoriesItemIsPass(info, false); if (errorList.Count > 0) { throw new BizException(errorList.Join("\r\n")); } if (info.Status == null) { info.Status = ComboStatus.Deactive; } TransactionScopeFactory.TransactionAction(() => { info.SysNo = _da.CreateMaster(info); foreach (OptionalAccessoriesItem item in info.Items) { item.OptionalAccessoriesSysNo = info.SysNo; _da.AddOptionalAccessoriesItem(item); } //将数据保存到PromotionEngine配置库中 //_oaPromotionEngine.SaveActivity(info); }); ExternalDomainBroker.CreateOperationLog(BizLogType.OptionalAccessories_Create.ToEnumDesc(), BizLogType.OptionalAccessories_Create, info.SysNo.Value, info.CompanyCode); return(info.SysNo); }
public virtual int?CreateNewsInfo(NewsInfo entity) { int?result; //如果扩展生效的话,需要为该C3相关的前台类别插入相同的新闻 if (entity.Extendflag.HasValue && entity.Extendflag.Value) { var list = ObjectFactory <ECCategoryProcessor> .Instance.GetRelatedECCategory3SysNo(entity.ReferenceSysNo.Value); list.Add(new ECCategory() { SysNo = entity.ReferenceSysNo.Value }); using (TransactionScope scope = new TransactionScope()) { foreach (var item in list) { entity.ReferenceSysNo = item.SysNo; ObjectFactory <NewsProcessor> .Instance.CreateNewsInfo(entity); } scope.Complete(); } result = null; } else { result = ObjectFactory <NewsProcessor> .Instance.CreateNewsInfo(entity); } ExternalDomainBroker.CreateOperationLog( String.Format("{0}{1}SysNo:{2}", DateTime.Now.ToString(), ResouceManager.GetMessageString("MKT.News", "News_CreateNewsAndNotice") , entity.SysNo) , BizEntity.Common.BizLogType.ComputerConfig_Add , entity.SysNo.Value, entity.CompanyCode); return(result); }
public BizEntity.Inventory.ProductSalesTrendInfo GetProductTotalSalesTrendInfo(int id) { return(ExternalDomainBroker.GetProductSalesTrendInfoTotal(id)); }
public BizEntity.Inventory.ProductInventoryInfo GetProductTotalInventoryInfo(int id) { return(ExternalDomainBroker.GetProductTotalInventoryInfo(id)); }
public DateTime?GetLastPoDate(int id) { return(ExternalDomainBroker.GetLastPoDate(id)); }
public virtual string GetReasonCodePath(int reasonCodeSysNo, string companyCode) { return(ExternalDomainBroker.GetReasonCodePath(reasonCodeSysNo, companyCode)); }
public BizEntity.IM.ProductInfo GetProductInfo(int id) { return(ExternalDomainBroker.GetProductInfo(id)); }
/// <summary> /// 根据供应商编号获取对应的代理信息 /// </summary> /// <param name="vendorInfo"></param> /// <returns></returns> public List <VendorAgentInfo> GetVendorAgentInfo(VendorInfo vendorInfo) { return(ExternalDomainBroker.GetVendorAgentInfoList(vendorInfo)); }
/// <summary> /// 对Combo Item进行检查,本方法对添加ComboItem时也有用 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual List <string> CheckComboItemIsPass(ComboInfo info) { List <string> errList = new List <string>(); if (info.Items.Count > 1 && info.Items.FindAll(f => f.IsMasterItemB.Value).Count > 1) { //errList.Add("一个组合中必须有且只能有1个主商品!"); errList.Add(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_OnlyOneProductInCombo")); return(errList); } var grouplist = from p in info.Items group p by p.ProductSysNo into g select new { g.Key, num = g.Count() }; var maxcount = (from p in grouplist select p.num).Max(); if (maxcount > 1) { // errList.Add("捆绑商品中存在重复的商品!"); errList.Add(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_HasSameProductInCombo")); return(errList); } decimal price = 0m; //每个商品的价格check foreach (ComboItem item in info.Items) { ProductInfo product = ExternalDomainBroker.GetProductInfo(item.ProductSysNo.Value); if (item.Discount > 0) { //errList.Add(string.Format("商品{0}折扣只能为小于等于0的整数!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_DisCountMustIntLessZero"), product.ProductID)); } if (!item.Quantity.HasValue || item.Quantity.Value <= 0) { //errList.Add(string.Format("商品{0}数量必须为大于0的整数!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_QuntityMustIntAndThanZero"), product.ProductID)); } item.MerchantName = product.Merchant != null ? product.Merchant.MerchantName : ""; item.MerchantSysNo = product.Merchant != null ? product.Merchant.MerchantID : null; //确认用折扣后价格比较,折后价不能小于成本,会员价,批发价,限时抢购当前价 decimal discountPrice = Math.Abs(item.Discount.Value); if (discountPrice > item.ProductCurrentPrice && item.ProductCurrentPrice > 0) { //errList.Add(string.Format("商品{0}捆绑销售折扣小于成本价!", product.ProductID)); //errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboPriceLessThanCost"), product.ProductID)); //errList.Add(string.Format("捆绑销售折扣大于当前价(商品: {0}------当前价:{1}) ", product.ProductID, product.ProductPriceInfo.CurrentPrice)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_DiscountMoreThanCurrentPrice"), product.ProductID, product.ProductPriceInfo.CurrentPrice)); } if (product.ProductPriceInfo.ProductWholeSalePriceInfo != null && product.ProductPriceInfo.ProductWholeSalePriceInfo.Count() > 0) { ProductWholeSalePriceInfo P1 = product.ProductPriceInfo.ProductWholeSalePriceInfo.FirstOrDefault(f => f.Level == WholeSaleLevelType.L1); if (P1 != null && P1.Price < discountPrice) { //errList.Add(string.Format("商品{0}捆绑销售折扣小于团购价1!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboPriceLessWholeSalePrice1") , product.ProductID , discountPrice , P1.Price)); } ProductWholeSalePriceInfo P2 = product.ProductPriceInfo.ProductWholeSalePriceInfo.FirstOrDefault(f => f.Level == WholeSaleLevelType.L2); if (P2 != null && P2.Price < discountPrice) { //errList.Add(string.Format("商品{0}捆绑销售折扣小于团购价2!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboPriceLessWholeSalePrice2") , product.ProductID , discountPrice , P2.Price)); } ProductWholeSalePriceInfo P3 = product.ProductPriceInfo.ProductWholeSalePriceInfo.FirstOrDefault(f => f.Level == WholeSaleLevelType.L3); if (P3 != null && P3.Price < discountPrice) { //errList.Add(string.Format("商品{0}捆绑销售折扣小于团购价3!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboPriceLessWholeSalePrice3") , product.ProductID , discountPrice , P3.Price)); } } List <CountdownInfo> countDownList = ObjectFactory <CountdownProcessor> .Instance.GetCountDownByProductSysNo(item.ProductSysNo.Value); if (countDownList != null && countDownList.Count > 0) { // || f.Status == CountdownStatus.Ready CountdownInfo countdown = countDownList.Find(f => f.Status == CountdownStatus.Running); if (countdown != null) { if (countdown.CountDownCurrentPrice.HasValue && countdown.CountDownCurrentPrice.Value < discountPrice) { //errList.Add(string.Format("商品{0}捆绑销售折扣小于就绪或运行中的限时抢购的最低价!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboPriceLessThanRunning"), product.ProductID)); } } } if (product.ProductPriceInfo.ProductRankPrice != null && product.ProductPriceInfo.ProductRankPrice.Count > 0) { decimal?rankPrice = (from p in product.ProductPriceInfo.ProductRankPrice where p.Status == ProductRankPriceStatus.Active select p.RankPrice).Min(); if (rankPrice != null && rankPrice < discountPrice) { // errList.Add(string.Format("商品{0}捆绑销售折扣小于会员价!", product.ProductID)); errList.Add(string.Format(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_ComboPriceLessThanVIP"), product.ProductID)); } } } if (!CheckItemMerchantIsSame(info)) { //errList.Add("捆绑商品中存在供应商不同!"); errList.Add(ResouceManager.GetMessageString("MKT.Promotion.Combo", "Combo_DifferentSupplierInCombo")); return(errList); } return(errList); }
/// <summary> /// 调用促销引擎计算促销折扣 /// </summary> /// <param name="soInfo"></param> public virtual void CalculatePromotion(SOInfo soInfo) { //电子卡和实物卡Portal放在Portal计算 if (soInfo.BaseInfo.SOType == SOType.ElectronicCard || soInfo.BaseInfo.SOType == SOType.PhysicalCard) { soInfo.BaseInfo.CouponAmount = null; return; } //修改订单时,如果没有改变优惠券,则不重新验证和计算优惠券信息 bool isModifyCoupons = true; if (IsUpdate && OriginalSOInfo.SOPromotions != null && OriginalSOInfo.SOPromotions.Count > 0 && soInfo.SOPromotions != null && soInfo.SOPromotions.Count > 0) { var currentCoupon = soInfo.Items.FirstOrDefault(item => { return(item.ProductType == SOProductType.Coupon); }); int tmpCouponSysNo = currentCoupon != null ? currentCoupon.ProductSysNo.Value : 0; if (tmpCouponSysNo > 0) { var orgCoupon = OriginalSOInfo.Items.FirstOrDefault(item => { return(item.ProductType == SOProductType.Coupon); }); int couponSysNo = orgCoupon != null ? orgCoupon.ProductSysNo.Value : 0; if (couponSysNo == tmpCouponSysNo) { soInfo.SOPromotions = OriginalSOInfo.SOPromotions; isModifyCoupons = false; } } } var newPromotionCalculates = ExternalDomainBroker.CalculateSOPromotion(soInfo, isModifyCoupons); soInfo.SOPromotions.RemoveAll(p => p.PromotionType != SOPromotionType.VendorGift); soInfo.SOPromotions.AddRange(newPromotionCalculates); //SOItemInfo的PromotionAmount 需要先初始化为0 soInfo.BaseInfo.PromotionAmount = 0; soInfo.Items.ForEach(p => p.PromotionAmount = 0); if (soInfo.SOPromotions != null && soInfo.SOPromotions.Count > 0) { #region 如果有调价,将不使用的规则 bool isManualPrice = soInfo.Items.Exists(p => p.AdjustPrice != 0 && !string.IsNullOrEmpty(p.AdjustPriceReason)); //绑定 if (isManualPrice) { soInfo.SOPromotions = soInfo.SOPromotions.FindAll(p => p.PromotionType != SOPromotionType.Combo); } #endregion soInfo.Items.ForEach(item => { item.CouponAverageDiscount = (from p in soInfo.SOPromotions from d in p.SOPromotionDetails where d.MasterProductSysNo == item.ProductSysNo && p.PromotionType == SOPromotionType.Coupon select d.DiscountAmount.Value).Sum() / item.Quantity.Value; item.Price = (item.OriginalPrice - item.CouponAverageDiscount).Round(2); item.PromotionAmount = (from p in soInfo.SOPromotions from d in p.SOPromotionDetails where d.MasterProductSysNo == item.ProductSysNo && p.PromotionType != SOPromotionType.Coupon select d.DiscountAmount.Value).Sum(); item.PromotionAmount = -item.PromotionAmount.Round(2); }); foreach (var couponItem in soInfo.Items.Where(p => p.ProductType == SOProductType.Coupon)) { couponItem.Price = 0; couponItem.CostPrice = 0; } //电子卡和实物卡 if (soInfo.BaseInfo.SOType == SOType.ElectronicCard || soInfo.BaseInfo.SOType == SOType.PhysicalCard) { soInfo.BaseInfo.PromotionAmount = soInfo.SOPromotions .Sum(item => item.DiscountAmount); soInfo.BaseInfo.CouponAmount = null; return; } //统计销售规则,销售立减总折扣 soInfo.BaseInfo.PromotionAmount = soInfo.SOPromotions .Where(item => item.PromotionType == SOPromotionType.Combo || item.PromotionType == SOPromotionType.SaleDiscountRule) .Sum(item => item.DiscountAmount); if (soInfo.BaseInfo.PromotionAmount == 0) { soInfo.BaseInfo.PromotionAmount = null; } //统计优惠券总折扣 soInfo.BaseInfo.CouponAmount = soInfo.SOPromotions .Where(item => item.PromotionType == SOPromotionType.Coupon) .Sum(item => item.DiscountAmount); if (soInfo.BaseInfo.CouponAmount == 0) { soInfo.BaseInfo.CouponAmount = null; } } //赠品信息计算 CalculateVendorGift(soInfo); }
/// <summary> /// 计算商品最终售价 /// 原则:取最优客户价格 /// </summary> /// <param name="soInfo"></param> public virtual void CalculateItemPrice(SOInfo soInfo) { //礼品卡订单不获取价格 if (soInfo.BaseInfo.SOType == SOType.ElectronicCard || soInfo.BaseInfo.SOType == SOType.PhysicalCard) { soInfo.Items.ForEach(item => { item.GainAveragePoint = 0; item.PayType = ProductPayType.MoneyOnly; }); return; } //获取商品价格信息 List <int> itemSysNos = soInfo.Items.Where(item => item.ProductType == SOProductType.Accessory || item.ProductType == SOProductType.Award || item.ProductType == SOProductType.Gift || item.ProductType == SOProductType.Product || item.ProductType == SOProductType.SelfGift) .Select <SOItemInfo, int>(item => item.ProductSysNo.Value).ToList <int>(); List <ProductInfo> productInfoList = ExternalDomainBroker.GetProductInfoListByProductSysNoList(itemSysNos); if (productInfoList != null && productInfoList.Count > 0) { foreach (var item in soInfo.Items) { //普通商品处理逻辑 if (item.ProductType == SOProductType.Product) { ProductPriceInfo priceInfo = null; ProductInfo productInfoTemp = productInfoList.Find(x => x.SysNo == item.ProductSysNo); if (productInfoTemp != null) { priceInfo = productInfoTemp.ProductPriceInfo; } if (priceInfo != null) { item.CostPrice = priceInfo.UnitCost; item.PayType = priceInfo.PayType;//Vantal Update 属性名称修改 item.GainAveragePoint = priceInfo.Point; item.OriginalPrice = priceInfo.CurrentPrice; CustomerRank customerRank = ExternalDomainBroker.GetCustomerRank(soInfo.BaseInfo.CustomerSysNo.Value); #warning 批发与手动修改价格逻辑需要再处理, 更新订单逻辑也需要考虑 decimal tempWholeSalePrice = 0.00M; decimal tempMemberPrice = 0.00M; //如果商品支持批发价,商品售价取最优批发价格 if (priceInfo.ProductWholeSalePriceInfo != null && priceInfo.ProductWholeSalePriceInfo.Count > 0) { //取最优批发价 priceInfo.ProductWholeSalePriceInfo.OrderBy(l => l.Level) .ToList() .ForEach(w => { if (item.Quantity >= w.Qty) { tempWholeSalePrice = w.Price.Value; } }); } //优先使用会员价 priceInfo.ProductRankPrice.OrderBy(r => r.Rank) .ToList() .ForEach(r => { if (r.Status.HasValue && r.Status == ProductRankPriceStatus.Active && customerRank >= r.Rank) { tempMemberPrice = r.RankPrice.Value; } }); if (tempWholeSalePrice != 0) { item.OriginalPrice = Math.Min(tempWholeSalePrice, item.OriginalPrice.Value); item.PriceType = SOProductPriceType.WholeSale; } if (tempMemberPrice != 0) { if (tempMemberPrice <= tempWholeSalePrice) { item.OriginalPrice = Math.Min(tempMemberPrice, item.OriginalPrice.Value); item.PriceType = SOProductPriceType.Member; } } if (item.PriceType == SOProductPriceType.WholeSale) { //批发无积分 item.GainAveragePoint = 0; } if (m_isManualPrice) { //重新计算Discount if (item.Price_End > 0) { item.AdjustPrice = item.OriginalPrice.Value - item.Price_End; //初始化调价 item.Price_End = 0; } item.OriginalPrice = item.OriginalPrice - item.AdjustPrice; } //更新状态购物车的单件商品没有修改数量按原始价格计算 if (IsUpdate) { var originalItem = OriginalSOInfo.Items.Find(oitem => oitem.ProductSysNo == item.ProductSysNo); if (originalItem != null && item.Quantity == originalItem.Quantity) { //如果手动改价 if (item.AdjustPrice != originalItem.AdjustPrice) { item.OriginalPrice = (originalItem.OriginalPrice ?? 0) + originalItem.AdjustPrice - item.AdjustPrice; //continue; } } } item.Price = item.OriginalPrice; } } //优惠券和延保不赠积分 else if (item.ProductType == SOProductType.Coupon) { item.GainAveragePoint = 0; item.PayType = ProductPayType.All; } else if (item.ProductType == SOProductType.ExtendWarranty) { item.OriginalPrice = item.Price; item.GainAveragePoint = 0; item.PayType = ProductPayType.All; //数量 var masterProduct = soInfo.Items.First(p => p.ProductSysNo.ToString() == item.MasterProductSysNo); item.Quantity = masterProduct.Quantity; } //是赠品,附件,奖品则价格为0, 积分为0 else { ProductPriceInfo priceInfo = null; ProductInfo productInfoTemp = productInfoList.Find(x => x.SysNo == item.ProductSysNo); if (productInfoTemp != null) { priceInfo = productInfoTemp.ProductPriceInfo; } if (priceInfo != null) { item.CostPrice = priceInfo.UnitCost; } item.OriginalPrice = 0; item.Price = 0; item.PayType = ProductPayType.All; } } } if (m_isManualPrice) { if (IsUpdate) { foreach (var item in soInfo.Items) { SOItemInfo oldSOItem = OriginalSOInfo.Items.Find(oldItem => oldItem.ProductSysNo == item.ProductSysNo); if (oldSOItem != null) { if (!(item.PromotionAmount == 0 && string.IsNullOrEmpty(item.AdjustPriceReason)) && !(item.Price_End != item.Price)) { item.OriginalPrice = item.OriginalPrice + oldSOItem.PromotionAmount - item.PromotionAmount; } } item.Price = item.OriginalPrice; } } else if (soInfo.BaseInfo.SOType == SOType.Gift) { //赠品订单做补偿时使用 soInfo.Items.ForEach(item => { item.PromotionAmount = item.OriginalPrice; item.AdjustPriceReason = "赠品订单自动调整"; item.OriginalPrice = 0; item.Price = 0; }); } } }
/// <summary> /// 获取ETP时间 /// </summary> /// <param name="pay">应付款实体类</param> /// <param name="payTime">录入发票时间</param> /// <returns>ETP计算结果</returns> public static DateTime?GetETPByPayPeriod(PayableInfo pay, DateTime payTime) { if (payTime == DateTime.MinValue) { payTime = DateTime.Parse("1900-01-01"); } DateTime enterDatabaseDate = DateTime.MinValue; //PO入库时间 int payTypeSysNo = -1; //账期类型 IETPCalculator calculator = null; //ETP计算器 switch (pay.OrderType) { case PayableOrderType.PO: var poInfo = ExternalDomainBroker.GetPurchaseOrderInfo(pay.OrderSysNo.Value, pay.BatchNumber.Value); if (poInfo == null) { //throw new BizException("未找到PO单"); ThrowBizException("POVendorInvoice_PONotFound"); } //如果是负PO(入库金额<0),EGP和ETP不用计算都为入库时间。 if (poInfo.PurchaseOrderBasicInfo.TotalAmt < 0) { return(ETPCalculatorHelper.ConvertWorkDate(poInfo.PurchaseOrderBasicInfo.CreateDate)); } //PO代销采购单入库不计算ETP if (poInfo.PurchaseOrderBasicInfo.ConsignFlag == PurchaseOrderConsignFlag.Consign) { return(null); } if (!poInfo.PurchaseOrderBasicInfo.CreateDate.HasValue) { poInfo.PurchaseOrderBasicInfo.CreateDate = DateTime.Parse("1900-01-01"); } enterDatabaseDate = poInfo.PurchaseOrderBasicInfo.CreateDate.Value; payTypeSysNo = poInfo.PurchaseOrderBasicInfo.PayType.SysNo.Value; //不计算票到的情况(payTime 为最小值表示 是PO入库) if (payTime == DateTime.Parse("1900-01-01")) { switch ((VendorPayPeriodType)payTypeSysNo) { //货到后N天,且票到 case VendorPayPeriodType.ItemInPayIn: case VendorPayPeriodType.ItemInAfter2PayIn: case VendorPayPeriodType.ItemInAfter3PayIn: case VendorPayPeriodType.ItemInAfter4PayIn: case VendorPayPeriodType.ItemInAfter5PayIn: case VendorPayPeriodType.ItemInAfter6PayIn: case VendorPayPeriodType.ItemInAfter7PayIn: case VendorPayPeriodType.ItemInAfter8PayIn: case VendorPayPeriodType.ItemInAfter9PayIn: case VendorPayPeriodType.ItemInAfter10PayIn: case VendorPayPeriodType.ItemInAfter14PayIn: case VendorPayPeriodType.ItemInAfter18PayIn: case VendorPayPeriodType.ItemInAfter20PayIn: case VendorPayPeriodType.ItemInAfter25PayIn: case VendorPayPeriodType.ItemInAfter30PayIn: case VendorPayPeriodType.ItemInAfter45PayIn: case VendorPayPeriodType.ItemInAfter60PayIn: //月结 case VendorPayPeriodType.ItemInPayByMonth: //预付账期【款到】 case VendorPayPeriodType.MoneyInItemOut: case VendorPayPeriodType.MoneyInItemOut60: case VendorPayPeriodType.MoneyInItemOut90: return(null); } } //创建经销预计的ETP计算器 calculator = new SellETPCalculator(new SellCalcInputData(enterDatabaseDate, payTime, (VendorPayPeriodType)payTypeSysNo)); break; case PayableOrderType.VendorSettleOrder: //代销结算单 var consignSettlementInfo = ExternalDomainBroker.GetConsignSettlementInfo(pay.OrderSysNo.Value); if (consignSettlementInfo == null) { //throw new BizException("未找到代销结算单"); ThrowBizException("POVendorInvoice_VendorSettleOrderNotFound"); } payTypeSysNo = consignSettlementInfo.VendorInfo.VendorFinanceInfo.PayPeriodType.PayTermsNo.Value; //创建代销预计的ETP计算器 calculator = new ConsignmentETPCalculator(new ConsignmentCalcInputData(payTime, (VendorPayPeriodType)payTypeSysNo)); break; case PayableOrderType.CollectionSettlement: //代收结算单 var collectionSettlement = ExternalDomainBroker.GetGatherSettlementInfo(pay.OrderSysNo.Value); if (collectionSettlement == null) { //throw new BizException("未找到代收结算单"); ThrowBizException("POVendorInvoice_CollectionSettlementNotFound"); } collectionSettlement.VendorInfo = ExternalDomainBroker.GetVendorBasicInfo(collectionSettlement.VendorInfo.SysNo.Value); payTypeSysNo = collectionSettlement.VendorInfo.VendorFinanceInfo.PayPeriodType.PayTermsNo.Value; //创建代销预计的ETP计算器 calculator = new ConsignmentETPCalculator(new ConsignmentCalcInputData(payTime, (VendorPayPeriodType)payTypeSysNo)); break; //代收代付 2012.11.28 case PayableOrderType.CollectionPayment: CollectionPaymentInfo poCollectionPaymentEntity = ExternalDomainBroker.GetCollectionPaymentInfo(pay.OrderSysNo.Value); if (poCollectionPaymentEntity == null) { //throw new BizException("未找到代收代付结算单");CollectionPayment ThrowBizException("POVendorInvoice_CollectionPaymentNotFound"); } //createDate = poConsignSettleEntity.CreateTime.Value; //createDate = DateTime.Now; //代销结算单的结算时间(结算单的生成时间) //payTypeSysNo = poCollectionPaymentEntity.PayTypeSysNo; ////创建代销预估的EGP输入参数对象 //inputData = new EgpConsignmentInputData(createDate, (VendorPayPeriodType)payTypeSysNo); poCollectionPaymentEntity.VendorInfo = ExternalDomainBroker.GetVendorBasicInfo(poCollectionPaymentEntity.VendorInfo.SysNo.Value); payTypeSysNo = poCollectionPaymentEntity.VendorInfo.VendorFinanceInfo.PayPeriodType.PayTermsNo.Value; calculator = new ConsignmentETPCalculator(new ConsignmentCalcInputData(payTime, (VendorPayPeriodType)payTypeSysNo)); break; default: return(null); } return(calculator.Calculate()); }
public ProductInfo GetProductInfo(string productId) { var product = ExternalDomainBroker.GetProductInfo(productId); return(product); }
/// <summary> /// 获取优惠券所有信息,包含了组装好的其它Domain的描述、计算类信息,但是不Load优惠券代码信息 /// </summary> /// <param name="sysNo"></param> /// <returns></returns> public virtual CouponsInfo Load(int?sysNo) { CouponsInfo info = _processor.Load(sysNo); //在APPService中,Load 是为了Restful所调用,所以需要组装CouponsInfo中其它Domain中的描述类信息 #region 商品范围条件 if (info.ProductCondition != null) { //组装品牌的名称信息在UI上显示 if (info.ProductCondition.RelBrands != null && info.ProductCondition.RelBrands.BrandList != null && info.ProductCondition.RelBrands.BrandList.Count > 0) { foreach (SimpleObject obj in info.ProductCondition.RelBrands.BrandList) { obj.Name = ExternalDomainBroker.GetBrandInfoBySysNo(obj.SysNo.Value).BrandNameLocal.Content; } } //组装商品类别的名称信息在UI上显示 if (info.ProductCondition.RelCategories != null && info.ProductCondition.RelCategories.CategoryList != null && info.ProductCondition.RelCategories.CategoryList.Count > 0) { foreach (SimpleObject obj in info.ProductCondition.RelCategories.CategoryList) { obj.Name = ExternalDomainBroker.GetCategory3Info(obj.SysNo.Value).CategoryName.Content; } } //组装商品的ID、名称、毛利率在UI上显示 if (info.ProductCondition.RelProducts != null && info.ProductCondition.RelProducts.ProductList != null && info.ProductCondition.RelProducts.ProductList.Count > 0) { foreach (RelProductAndQty prd in info.ProductCondition.RelProducts.ProductList) { ProductInfo product = ExternalDomainBroker.GetProductInfo(prd.ProductSysNo.Value); prd.ProductName = product.ProductBasicInfo.ProductTitle.Content; prd.ProductID = product.ProductID; if (info.CouponChannelType == CouponsMKTType.MKTPM) { prd.GrossMarginRate = ObjectFactory <GrossMarginProcessor> .Instance.GetCouponGrossMarginRateForPM(product, sysNo.Value); } else { prd.GrossMarginRate = ObjectFactory <GrossMarginProcessor> .Instance.GetCouponGrossMarginRate(product); } } } } #endregion #region 客户范围条件 if (info.CustomerCondition != null) { //地区信息的名称在Portal端组装(因为客户端本身也要加载所有地区信息) //客户等级的名称在Portal端组装(因为客户端本身也要加载所有等级信息) //服务端组装Customer的基础信息 if (info.CustomerCondition.RelCustomers != null && info.CustomerCondition.RelCustomers.CustomerIDList != null && info.CustomerCondition.RelCustomers.CustomerIDList.Count > 0) { foreach (CustomerAndSend cas in info.CustomerCondition.RelCustomers.CustomerIDList) { } } } #endregion info.IsExistThrowInTypeCouponCode = _processor.CheckExistThisTypeCouponCode(info.SysNo, CouponCodeType.ThrowIn); return(info); }
/// <summary> /// 获取指定商品的毛利率 /// </summary> /// <param name="productSysNo"></param> /// <returns></returns> public virtual decimal?GetCouponGrossMarginRate(int productSysNo) { var product = ExternalDomainBroker.GetProductInfo(productSysNo); return(ObjectFactory <GrossMarginProcessor> .Instance.GetCouponGrossMarginRate(product)); }
private RefundPrintInfo GetRefundInfo(int refundSysNo) { RefundPrintInfo refundInfo = new RefundPrintInfo(); refundInfo.Items = new List <RefundItemPrintInfo>(); var dtRefund = ObjectFactory <RefundProcessor> .Instance.GetRefundPrintDetail(refundSysNo); var dtRefundItems = ObjectFactory <RefundProcessor> .Instance.GetRefundPrintItems(refundSysNo); if (dtRefund.Rows.Count == 0) { throw new BizException(ResouceManager.GetMessageString("RMA.Refund", "Refund_Refund_NotExists")); } DataMapper.AutoMap <RefundPrintInfo>(refundInfo, dtRefund.Rows[0]); if (dtRefundItems.Rows.Count > 0) { foreach (DataRow row in dtRefundItems.Rows) { RefundItemPrintInfo item = new RefundItemPrintInfo(); DataMapper.AutoMap <RefundItemPrintInfo>(item, row); refundInfo.Items.Add(item); } } if (refundInfo.Items != null) { refundInfo.Items.ForEach(item => { item.Quantity = -1; item.IsPoint = false; item.Price = refundInfo.RefundPayType == RefundPayType.TransferPointRefund ? 0M : (item.RefundCash ?? 0M); item.TotalAmount = item.Quantity * item.Price; }); if (refundInfo.DeductPointFromCurrentCash != null && refundInfo.DeductPointFromCurrentCash != 0) { RefundItemPrintInfo printItem = new RefundItemPrintInfo() { ProductID = "赎回积分", IsPoint = false, TotalAmount = refundInfo.DeductPointFromCurrentCash.Value }; refundInfo.Items.Add(printItem); } if (refundInfo.CompensateShipPrice != null && refundInfo.CompensateShipPrice.Value != 0) { RefundItemPrintInfo printItem = new RefundItemPrintInfo() { ProductID = "补偿运费", IsPoint = false, TotalAmount = -1 * refundInfo.CompensateShipPrice.Value }; refundInfo.Items.Add(printItem); } if (refundInfo.PointAmount != null && refundInfo.PointAmount.Value != 0) { RefundItemPrintInfo printItem = new RefundItemPrintInfo() { ProductID = "影响积分", IsPoint = true, TotalAmount = refundInfo.PointAmount.Value + (refundInfo.RefundPayType == RefundPayType.TransferPointRefund ? (refundInfo.CashAmount ?? 0M) * ExternalDomainBroker.GetPointToMoneyRatio() : 0M) }; refundInfo.Items.Add(printItem); } } return(refundInfo); }
/// <summary> /// 检查具体的一单 /// </summary> /// <param name="soEntity4FPCheck"></param> void CheckSingle(SOInfo soEntity4FPCheck) { var custom = ExternalDomainBroker.GetCustomerBasicInfo(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value); //用户没有查询到不验证(可以以前的数据没有了) if (custom == null) { return; } //某些特定用户不用验证 if (custom.FromLinkSource == m_interOrder || m_ignoreCustomIDList.Exists(p => custom.CustomerID.StartsWith(p))) { return; } List <string> tmpResons = new List <string>(); FPStatus tmpFPstatus = FPStatus.Normal; bool IsMarkRed = false; //是否飘红可疑标记 if (m_isCheckKeYi) { #region 检查疑单 if (m_soDA.IsSpiteCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value, m_companyCode)) { tmpFPstatus = FPStatus.Suspect; tmpResons.Add("此用户是恶意用户,之前有过不良的购物记录"); InsertKFC(soEntity4FPCheck); } else { // 如果是货到付款 bool isRej = false; if (m_payTypeList.Exists(item => item.SysNo == soEntity4FPCheck.BaseInfo.PayTypeSysNo && item.IsPayWhenRecv.HasValue && item.IsPayWhenRecv.Value)) { bool isNewCustom = m_soDA.IsNewCustom(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value); if (isNewCustom) { if (m_soDA.IsRejectionCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, soEntity4FPCheck.ReceiverInfo.Address, soEntity4FPCheck.ReceiverInfo.MobilePhone, soEntity4FPCheck.ReceiverInfo.Phone, m_companyCode)) { isRej = true; tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新用户,该用户的地址(或手机号码或固定电话)有过拒收记录,请谨慎处理"); } else if (soEntity4FPCheck.ReceiverInfo.Phone.IndexOf(",") >= 0) { string[] singlePhone = soEntity4FPCheck.ReceiverInfo.Phone.Split(','); foreach (string sp in singlePhone) { if (m_soDA.IsRejectionCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, "", "", sp, m_companyCode)) { isRej = true; tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新用户,该用户的地址(或手机号码或固定电话)有过拒收记录,请谨慎处理"); break; } } } else if (soEntity4FPCheck.ReceiverInfo.Phone.IndexOf(",") >= 0) { string[] singlePhone = soEntity4FPCheck.ReceiverInfo.Phone.Split(','); foreach (string sp in singlePhone) { if (m_soDA.IsRejectionCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, "", "", sp, m_companyCode)) { isRej = true; tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新用户,该用户的地址(或手机号码或固定电话)有过拒收记录,请谨慎处理"); break; } } } } else { if (m_soDA.IsRejectionCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, "", "", "", m_companyCode)) { isRej = true; tmpFPstatus = FPStatus.Suspect; if (m_soDA.IsNewRejectionCustomerB(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value)) { tmpResons.Add("新用户,该用户之前有过拒收货物的订单记录,请谨慎处理"); } else { tmpResons.Add("该用户拒收订单的比例超过限度,请谨慎处理"); } } } if (isRej != true) { // 是新客户并且没有通过手机验证 if (isNewCustom && (!custom.CellPhoneConfirmed.HasValue || !custom.CellPhoneConfirmed.Value)) { tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新客户"); tmpResons.Add("没有通过手机验证的货到付款订单"); if (soEntity4FPCheck.BaseInfo.SOAmount > 500) { tmpFPstatus = FPStatus.Suspect; //标为可疑单 tmpResons.Add("订单金额在500元以上"); IsMarkRed = true; //设置可疑信息飘红 } else { tmpFPstatus = FPStatus.Suspect;//标为可疑单 tmpResons.Add("订单金额在0-500元"); } if (m_soDA.GetSOCount4OneDay(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value) > 1) { tmpFPstatus = FPStatus.Suspect; tmpResons.Add("一天之中存在多个不同的收货地址的订单信息"); IsMarkRed = true; } } else if (m_autoRMACustomers.FirstOrDefault(z => { return(z.BaseInfo.CustomerSysNo == soEntity4FPCheck.BaseInfo.CustomerSysNo); }) != null) { //一个月内物流拒收过此用户的订单标为可疑单 tmpFPstatus = FPStatus.Suspect; tmpResons.Add("一个月内物流拒收过此用户的订单"); IsMarkRed = true; } } else { InsertKFC(soEntity4FPCheck); } } else //款到发货 { if (m_soDA.IsNewOccupyStockCustomerA(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value)) { if (m_soDA.IsOccupyStockCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, soEntity4FPCheck.ReceiverInfo.Address, soEntity4FPCheck.ReceiverInfo.MobilePhone, soEntity4FPCheck.ReceiverInfo.Phone, m_companyCode)) { tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新用户,该用户的地址(或手机号码或固定电话)有过恶意占库存记录,请谨慎处理"); InsertKFC(soEntity4FPCheck); } else if (soEntity4FPCheck.ReceiverInfo.Phone.IndexOf(",") >= 0) { string[] singlePhone = soEntity4FPCheck.ReceiverInfo.Phone.Split(','); foreach (string sp in singlePhone) { if (m_soDA.IsOccupyStockCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, "", "", sp, m_companyCode)) { tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新用户,该用户的地址(或手机号码或固定电话)有过恶意占库存记录,请谨慎处理"); InsertKFC(soEntity4FPCheck); break; } } } else if (soEntity4FPCheck.ReceiverInfo.Phone.IndexOf(",") >= 0) { string[] singlePhone = soEntity4FPCheck.ReceiverInfo.Phone.Split(','); foreach (string sp in singlePhone) { if (m_soDA.IsOccupyStockCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, "", "", sp, m_companyCode)) { tmpFPstatus = FPStatus.Suspect; tmpResons.Add("新用户,该用户的地址(或手机号码或固定电话)有过恶意占库存记录,请谨慎处理"); InsertKFC(soEntity4FPCheck); break; } } } } else { if (m_soDA.IsOccupyStockCustomer(soEntity4FPCheck.BaseInfo.CustomerSysNo, null, null, null, m_companyCode)) { InsertKFC(soEntity4FPCheck); tmpFPstatus = FPStatus.Suspect; if (m_soDA.IsNewOccupyStockCustomerB(soEntity4FPCheck.BaseInfo.CustomerSysNo.Value)) { tmpResons.Add("新用户,该用户之前有过连续作废订单记录,请谨慎处理"); } else { tmpResons.Add("该用户之前有过连续作废订单记录,请谨慎处理"); } } } } } #endregion } #region 获取订单的Item列表信息 List <SOItemInfo> tmpSingleSO = new List <SOItemInfo>(); //订单状态必须为这几种:Origin WaitingOutStock WaitingManagerAudit if (soEntity4FPCheck.BaseInfo.Status == SOStatus.Origin || soEntity4FPCheck.BaseInfo.Status == SOStatus.WaitingOutStock || soEntity4FPCheck.BaseInfo.Status == SOStatus.WaitingManagerAudit) { var itemList = m_soDA.GetSOItemsBySOSysNo(soEntity4FPCheck.SysNo.Value); tmpSingleSO.AddRange(itemList.Where(p => p.ProductType == SOProductType.Product)); } if (tmpSingleSO.Count == 0) { tmpResons.Add("空单"); } #endregion if (m_isCheckChuanHuo && tmpFPstatus != FPStatus.Suspect) //可疑优先于炒货,如果已经确认是可疑单,就不用再验证串货了 { if (tmpSingleSO.Count > 0) { string currentSOIPAddress = soEntity4FPCheck.ClientInfo.CustomerIPAddress; DateTime currentSOCreateTime = soEntity4FPCheck.BaseInfo.CreateTime.Value; #region 检查串货订单 //检查PRD foreach (var item in tmpSingleSO) { //仅在遇到要求串货检查的Item时才去检测,减少数据库的访问次数 if (m_chuanHuoProductNoList.Find(t => { return(t == item.ProductID); }) != null) { var list = m_soDA.GetChuanHuoSOListByProduct(item.ProductSysNo.Value, currentSOIPAddress, currentSOCreateTime, m_companyCode); if (list.Count > 1) { tmpFPstatus = FPStatus.ChuanHuo; break; } } } //检查C3小类 List <int> chuanHuoSOSysNosByC3 = (from a in m_chuanHuoC3SysNoList from b in tmpSingleSO where a == b.C3SysNo select a).ToList(); foreach (int c3No in chuanHuoSOSysNosByC3) { var list = m_soDA.GetChuanHuoSOListByC3(c3No, currentSOIPAddress, currentSOCreateTime, m_companyCode); if (list.Count > 1) { tmpFPstatus = FPStatus.ChuanHuo; break; } } if (tmpFPstatus == FPStatus.ChuanHuo) { tmpResons.Add("串货订单"); } } #endregion } if (m_isCheckChongFu) { #region 检查重复订单 if (tmpSingleSO.Count > 0) { foreach (var item in tmpSingleSO) { var tmpDuplicateSOs = m_soDA.GetDuplicatSOList(item.ProductSysNo.Value, soEntity4FPCheck.BaseInfo.CustomerSysNo.Value, soEntity4FPCheck.BaseInfo.CreateTime.Value, m_companyCode); if (tmpDuplicateSOs.Count > 1) { string duplicateMarket = "重复订单"; if (!tmpResons.Contains(duplicateMarket)) { tmpResons.Add(duplicateMarket); } //StringBuilder tmpDuplicateSOSysNosb = new StringBuilder(); //foreach (var y in tmpDuplicateSOs) //{ // tmpDuplicateSOSysNosb.Append(string.Format("{0},", y.SysNo)); // if (tmpDuplicateSOSysNosb.Length > 400) // break; //} //tmpDuplicateSOSysNoString = tmpDuplicateSOSysNosb.ToString().TrimEnd(",".ToCharArray()); //只获取30个订单即可,替换原来的长度切断(为什么有更新的限制,暂时去掉) string tmpDuplicateSOSysNoString = string.Join(",", tmpDuplicateSOs.Select(p => p.SysNo.Value)); m_soDA.UpdateMarkException(tmpDuplicateSOSysNoString, item.ProductSysNo.Value, tmpDuplicateSOSysNoString); } } } #endregion } if (m_isCheckChaoHuo && (!string.IsNullOrEmpty(soEntity4FPCheck.ReceiverInfo.MobilePhone) || !string.IsNullOrEmpty(soEntity4FPCheck.ReceiverInfo.Phone)) ) { #region 检查炒货订单 #region PreData int SysNoCount = 3; //订单数量 (默认需要大于的最小订单数量为1) int hoursLimit = 24; //需从配置表中读取 var fPCheckItemEntityTemp = m_fPCheckItemList.Find(t => { return(t.FPCheckItemDataType == "小时之内订单数量大于" && t.FPCheckItemStatus == FPCheckItemStatus.Invalid); }); if (fPCheckItemEntityTemp != null) { if (fPCheckItemEntityTemp.FPCheckItemDataValue != string.Empty) { hoursLimit = Convert.ToInt32(fPCheckItemEntityTemp.FPCheckItemDataValue.Split('|')[0].ToString()); SysNoCount = Convert.ToInt32(fPCheckItemEntityTemp.FPCheckItemDataValue.Split('|')[1].ToString()); } } int?PointPromotionFlag = null; //判断是否进行订单优惠券积分的,检测标识符,赋任何值表示此条件有效; int?ShipPriceFlag = null; //判断是否进行订单中运费金额为0的,检测标识符,赋任何值表示此条件有效; int?IsVATFlag = null; //判断是否进行订单中勾选开具增值税发票的,检测标识符,赋任何值表示此条件有效; if (m_fPCheckItemList.Count > 0 && m_fPCheckItemList.Find(t => { return(t.FPCheckItemDataType == "订单中使用优惠券/积分等优惠" && t.FPCheckItemStatus == FPCheckItemStatus.Invalid); }) != null) { PointPromotionFlag = 1; } if (m_fPCheckItemList.Count > 0 && m_fPCheckItemList.Find(t => { return(t.FPCheckItemDataType == "订单中运费金额为0" && t.FPCheckItemStatus == FPCheckItemStatus.Invalid); }) != null) { ShipPriceFlag = 1; } if (m_fPCheckItemList.Count > 0 && m_fPCheckItemList.Find(t => { return(t.FPCheckItemDataType == "订单中勾选开具增值税发票" && t.FPCheckItemStatus == FPCheckItemStatus.Invalid); }) != null) { IsVATFlag = 1; } #endregion var chaoHuoList = m_soDA.GetChaoHuoSOList( soEntity4FPCheck.ReceiverInfo.MobilePhone , soEntity4FPCheck.ReceiverInfo.Phone , hoursLimit , soEntity4FPCheck.BaseInfo.CreateTime.Value , PointPromotionFlag , ShipPriceFlag , IsVATFlag , m_companyCode ); if (chaoHuoList.Count > SysNoCount) { if (tmpResons.Contains("重复订单")) { tmpResons.Clear(); } tmpFPstatus = FPStatus.ChaoHuo; #region //收集炒货的订单号 int lenReasons = 0; tmpResons.ForEach(x => { lenReasons += x.Length; } ); lenReasons += tmpResons.Count; StringBuilder tmpChaoHuoSOSysNosb = new StringBuilder(); string tmpChaoHuoSysNoString = string.Empty; string ChaoHuoSysNo; foreach (var x in chaoHuoList) { ChaoHuoSysNo = string.Format("{0},", x.SysNo); if ((lenReasons + tmpChaoHuoSOSysNosb.Length + ChaoHuoSysNo.Length - 1) > 200) { break; } tmpChaoHuoSOSysNosb.Append(ChaoHuoSysNo); } tmpChaoHuoSysNoString = tmpChaoHuoSOSysNosb.ToString().TrimEnd(",".ToCharArray()); tmpResons.Add(tmpChaoHuoSysNoString); #endregion string soSysNos = string.Join(",", chaoHuoList.Select(p => p.SysNo.Value)); m_soDA.UpdateMarkFPStatus(soSysNos, (int)tmpFPstatus, tmpChaoHuoSysNoString, false); } #endregion } #region 检查本地仓断货订单 if (m_outStockList.Count > 0) { string localWH = ExternalDomainBroker.GetLocalWarehouseNumber(soEntity4FPCheck.ReceiverInfo.AreaSysNo.Value, m_companyCode); if (!string.IsNullOrEmpty(localWH) && m_outStockList.Exists(os => os.ToString() == localWH) && m_soDA.CountNotLocalWHSOItem(soEntity4FPCheck.SysNo.Value, localWH) > 0) { m_soDA.UpdateLocalWHMark(soEntity4FPCheck.SysNo.Value, localWH, 1); } } #endregion if (tmpFPstatus == FPStatus.Normal && tmpResons.Count == 0) { tmpResons.Add("正常单"); } string temReson = string.Empty; foreach (string reson in tmpResons) { temReson += reson + ";"; } temReson = temReson.TrimEnd(';'); m_soDA.UpdateMarkFPStatus(soEntity4FPCheck.SysNo.ToString(), (int)tmpFPstatus, temReson, IsMarkRed); }
protected override void ProcessReferencePayableInfoForCreate(PayItemInfo entity) { //如果该付款单对应的应付款已经Abandon,那么此时需要重新激活该应付款并将其更新 if (ReferencePayableInfo != null) { if (ReferencePayableInfo.PayStatus == PayableStatus.Abandon) { ReferencePayableInfo.OrderAmt = entity.PayAmt; ReferencePayableInfo.PayStatus = PayableStatus.UnPay; if (entity.OrderType == PayableOrderType.VendorSettleOrder) { ReferencePayableInfo.EIMSNo = ExternalDomainBroker.GetConsignSettlementReturnPointSysNo(entity.OrderSysNo.Value); } else { ReferencePayableInfo.EIMSNo = null; } PayableBizProcessor.UpdateStatusAndOrderAmt(ReferencePayableInfo); entity.PaySysNo = ReferencePayableInfo.SysNo.Value; entity.CurrencySysNo = 1; entity.OrderType = ReferencePayableInfo.OrderType; entity.OrderSysNo = ReferencePayableInfo.OrderSysNo; } if (ReferencePayableInfo.PayStatus == PayableStatus.UnPay) { entity.PaySysNo = ReferencePayableInfo.SysNo.Value; entity.CurrencySysNo = 1; entity.OrderType = ReferencePayableInfo.OrderType; entity.OrderSysNo = ReferencePayableInfo.OrderSysNo; } } else { ReferencePayableInfo = new PayableInfo(); ReferencePayableInfo.OrderSysNo = entity.OrderSysNo.Value; ReferencePayableInfo.OrderType = entity.OrderType.Value; ReferencePayableInfo.AlreadyPayAmt = 0; ReferencePayableInfo.OrderAmt = entity.PayAmt; ReferencePayableInfo.CurrencySysNo = 1; ReferencePayableInfo.PayStatus = PayableStatus.UnPay; ReferencePayableInfo.InvoiceStatus = PayableInvoiceStatus.Absent; ReferencePayableInfo.AuditStatus = PayableAuditStatus.NotAudit; ReferencePayableInfo.InvoiceFactStatus = PayableInvoiceFactStatus.Corrent; ReferencePayableInfo.Note = "Auto created by system!"; ReferencePayableInfo.CompanyCode = entity.CompanyCode; if (entity.OrderType == PayableOrderType.VendorSettleOrder) { ReferencePayableInfo.EIMSNo = ExternalDomainBroker.GetConsignSettlementReturnPointSysNo(entity.OrderSysNo.Value); } ReferencePayableInfo = PayableBizProcessor.Create(ReferencePayableInfo); entity.PaySysNo = ReferencePayableInfo.SysNo.Value; entity.CurrencySysNo = 1; entity.OrderType = ReferencePayableInfo.OrderType; entity.OrderSysNo = ReferencePayableInfo.OrderSysNo; } }
/// <summary> /// 获取分仓列表 [Ray.L.Xing 泰隆优选不存在多渠道 故将StockInfo 改为WarehouseInfo 返回] /// </summary> /// <param name="companyCode"></param> /// <returns></returns> public List <WarehouseInfo> GetWarehouseList(string companyCode) { return(ExternalDomainBroker.GetWarehouseList(companyCode)); }
DataFeedTemplate BulidTemplate(int c3SysNo, string c3Name) { string configPath = Path.Combine( AppDomain.CurrentDomain.SetupInformation.ApplicationBase , AppSettingHelper.Get("DataFeedFilesConfigPath") ); m_dataFeed = SerializationUtility.LoadFromXml <DataFeedFileMapping>(configPath).Mappings[0]; DataFeedTemplate template = new DataFeedTemplate(); template.C3Name = c3Name; template.C3SysNo = c3SysNo; template.C3RowIndex = int.Parse(m_dataFeed.C3RowIndex); //填充列分组信息 template.HeaderGroups = new List <HeaderGroup>(); foreach (var item in m_dataFeed.HeaderGroups) { template.HeaderGroups.Add(item); } template.BasicColumns = BuildBasicColumns(c3SysNo); var list = ExternalDomainBroker.GetCategoryPropertyByCategorySysNo(c3SysNo); if (list != null) { template.Properties = new List <DataFeedColumn>(); var activeList = list.Where(p => p.Property.Status == PropertyStatus.Active); if (activeList.Count() > 0) { var propertySysNoList = activeList.Select(p => p.Property.SysNo.Value).ToList(); var propertyValues = ExternalDomainBroker.GetPropertyValueInfoByPropertySysNoList(propertySysNoList); foreach (var item in activeList) { DataFeedColumn column = new DataFeedColumn(); column.Number = item.Property.SysNo.Value; // item.PropertyType == "D"? 没有这个属性? if (item.PropertyType == PropertyType.Grouping) { column.Name = string.Format("{0}_列表", item.Property.PropertyName.Content); } else { column.Name = item.Property.PropertyName.Content; } column.Type = DataType.LIST; column.Width = column.Name.Length; if (item.IsMustInput == CategoryPropertyStatus.Yes) { column.IsMustInput = true; } else { column.IsMustInput = false; } if (item.IsInAdvSearch == CategoryPropertyStatus.Yes) { column.IsInAdvSearch = true; } column.List = new List <string>(); var propertyList = propertyValues.FirstOrDefault(p => p.Key == item.Property.SysNo.Value).Value; if (propertyList != null) { foreach (var value in propertyList.Where(p => p.PropertyInfo.Status == PropertyStatus.Active)) { column.List.Add(value.ValueDescription.Content); } } template.Properties.Add(column); //分组属性需要多加一列 // item.PropertyType == "D"? 没有这个属性? if (item.PropertyType == PropertyType.Grouping) { column = new DataFeedColumn(); column.Name = string.Format("{0}_自定义", item.Property.PropertyName.Content); column.Width = column.Name.Length; column.Type = DataType.TEXT_LENGTH; template.Properties.Add(column); } //HACK:Bob.H.Li 如果Item.Type==G,那么添加一列“是否分组属性” if (item.PropertyType == PropertyType.Grouping) { column = new DataFeedColumn(); column.Number = template.Properties.Count; column.Name = DataFeedConstString.EXCEL_ADDSELECTGROUPSTRING; column.Width = column.Name.Length; column.Type = DataType.LIST; column.List = new List <string>() { GroupPropertyType.OnlyGroupText, GroupPropertyType.OnlyGroupPicture, GroupPropertyType.GroupAggregationText, GroupPropertyType.GroupAggregationPicture }; template.Properties.Add(column); } } } } return(template); }
private void InitData(int sysno, DataTable table) { GroupBuyingSettlementInfo origin = ObjectFactory <GroupBuyingProcessor> .Instance.LoadGroupBuyingSettleBySysNo(sysno); if (origin == null) { return; } decimal currentMonthMarket = 0; DataTable dt = ObjectFactory <GroupBuyingProcessor> .Instance.LoadGroupBuyingSettlementItemBySettleSysNo(sysno); if (dt != null || dt.Rows.Count > 0) { foreach (DataRow r in dt.Rows) { int itemSynso = Convert.ToInt32(r["SysNo"]); DataTable dt2 = ObjectFactory <GroupBuyingProcessor> .Instance.LoadTicketByGroupBuyingSysNo(itemSynso); if (dt2 != null && dt2.Rows.Count > 0) { foreach (DataRow row2 in dt2.Rows) { currentMonthMarket += Convert.ToDecimal(row2["TicketAmt"]);; } } } } VendorInfo vendor = ExternalDomainBroker.GetVendorInfoBySysNo(origin.VendorSysNo.Value); DataRow row = null; row = table.NewRow(); row["StatementSysNo"] = sysno; //结算单号 row["ContractSysNo"] = string.Empty; //合同号 row["StatementDate"] = DateTime.Now.ToString("yyyy/MM"); //结算年月 row["PrintDate"] = DateTime.Now.ToString(); //打印日期 row["StatementDepartment"] = ResouceManager.GetMessageString("MKT.Promotion.GroupBuying", "GroupBuying_StatementDepartment"); //结算部门 row["CurrentMonthMarket"] = currentMonthMarket.ToString("f2"); //本月销售 row["PayDate"] = string.Empty; //付款日 row["CompanyName1"] = vendor.VendorBasicInfo.VendorNameLocal; //公司名称 row["CheckType"] = ResouceManager.GetMessageString("MKT.Promotion.GroupBuying", "GroupBuying_CheckType001"); //核算方式 row["CompanyAddress"] = vendor.VendorBasicInfo.Address; //公司地址 row["TaxNo"] = vendor.VendorFinanceInfo.TaxNumber; //税号 row["OpenedBank"] = vendor.VendorFinanceInfo.BankName; //开户行 row["BankAccount"] = vendor.VendorFinanceInfo.AccountNumber; //账号 row["VendorCode"] = vendor == null ? string.Empty : vendor.VendorBasicInfo.VendorID; //供货商代码 row["VendorSysno"] = vendor == null ? string.Empty : origin.VendorSysNo.Value.ToString(); //供货商系统编号 row["CreateDate"] = origin.CreateDate.Value.ToString(); //制单日期 row["CutPaymentName"] = string.Empty; //扣款名称 row["CutPaymentAmount"] = string.Empty; //扣款金额 row["TotalCutPaymentAmount"] = string.Empty; //合计 row["Cost"] = origin.SettleAmt.HasValue ? origin.SettleAmt.Value.ToString("f2") : "0.00"; //价款 row["RateAmount"] = "0.00"; //税金 row["RateTotal"] = origin.SettleAmt.HasValue ? origin.SettleAmt.Value.ToString("f2") : "0.00"; //税金合计 row["17RateCost"] = "0.00"; //17%税率价款 row["17RateAmount"] = "0.00"; //税金 row["17RateTotal"] = "0.00"; //税金合计 row["13RateCost"] = "0.00"; //13%税率价款 row["13RateAmount"] = "0.00"; //税金 row["13RateTotal"] = "0.00"; //税金合计 row["OtherRateCost"] = "0.00"; //其他税率价款 row["OtherRateAmount"] = "0.00"; //税金 row["OtherRateTotal"] = "0.00"; //税金合计 row["ActualPayAmount"] = origin.SettleAmt.HasValue ? origin.SettleAmt.Value.ToString("f2") : "0.00"; //实际付款金额 row["CompanyName2"] = ResouceManager.GetMessageString("MKT.Promotion.GroupBuying", "GroupBuying_CompanyName2");; //公司名称 row["Producer"] = ResouceManager.GetMessageString("MKT.Promotion.GroupBuying", "GroupBuying_Producer");; //制作人 row["BusinessCheck"] = origin.EditUserName; //业务审核 //int usersysno = 0; //if (!string.IsNullOrEmpty(origin.EditUser) && int.TryParse(origin.EditUser, out usersysno)) //{ // UserInfo userInfo = ObjectFactory<ICommonBizInteract>.Instance.GetUserInfoBySysNo(usersysno); // if (userInfo != null) // row["BusinessCheck"] = userInfo.UserName;//业务审核 //} row["FinanceRecheck"] = string.Empty; //财务复核 row["DepartmentManager"] = string.Empty; //部门经理 row["Manufacturer"] = vendor.VendorBasicInfo.VendorNameLocal; //厂商 row["display"] = "style='display:none'"; table.Rows.Add(row); }
/// <summary> /// 更新Combo Master,包含:更新主信息,更新状态: /// 无效->有效,无效->待审核,有效->无效,有效->待审核,待审核->无效,待审核->有效 /// 其中无效->有效需要Check RequiredSaleRule4UpdateValidate /// </summary> /// <param name="info"></param> public virtual void UpdateCombo(ComboInfo info) { List <string> errorList = CheckBasicIsPass(info); if (errorList.Count > 0) { throw new BizException(errorList.Join("\r\n")); } #region 2012-11-13 update //修改内容:在销售规则有商品时才走对商品check的逻辑 #endregion if (info.Items != null && info.Items.Count > 0) { errorList = CheckComboItemIsPass(info); } if (errorList.Count > 0) { throw new BizException(errorList.Join("\r\n")); } errorList = CheckValidateWhenChangeStatus(info); if (errorList.Count > 0) { throw new BizException(errorList.Join("\r\n")); } TransactionScopeFactory.TransactionAction(() => { _da.UpdateMaster(info); _da.DeleteComboAllItem(info.SysNo.Value); foreach (ComboItem item in info.Items) { item.ComboSysNo = info.SysNo; _da.AddComboItem(item); } //更新活动 //ObjectFactory<ComboPromotionEngine>.Instance.SaveComboActivity(info); // 发送待办消息 switch (info.TargetStatus) { // 待审核 case ComboStatus.WaitingAudit: EventPublisher.Publish <ComboSaleSubmitMessage>(new ComboSaleSubmitMessage { ComboSaleSysNo = info.SysNo.Value, ComboSaleName = info.Name.Content, CurrentUserSysNo = ServiceContext.Current.UserSysNo }); break; // 有效 case ComboStatus.Active: EventPublisher.Publish <ComboSaleActiveMessage>(new ComboSaleActiveMessage { ComboSaleSysNo = info.SysNo.Value, ComboSaleName = info.Name.Content, CurrentUserSysNo = ServiceContext.Current.UserSysNo }); break; // 无效 case ComboStatus.Deactive: EventPublisher.Publish <ComboSaleAuditRefuseMessage>(new ComboSaleAuditRefuseMessage { ComboSaleSysNo = info.SysNo.Value, ComboSaleName = info.Name.Content, CurrentUserSysNo = ServiceContext.Current.UserSysNo }); break; } }); ExternalDomainBroker.CreateOperationLog(BizLogType.ComboUpdate.ToEnumDesc(), BizLogType.ComboUpdate, info.SysNo.Value, info.CompanyCode); }