Example #1
0
        /// <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();
        }
Example #2
0
        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 硬编码]
                    });
                });
            }
        }
Example #3
0
        /// <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;
            }
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        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);
            }
        }
Example #7
0
        /// <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);
                }
            }
        }
Example #8
0
        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);
        }
Example #9
0
        /// <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);
        }
Example #10
0
        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);
        }
Example #11
0
 public BizEntity.Inventory.ProductSalesTrendInfo GetProductTotalSalesTrendInfo(int id)
 {
     return(ExternalDomainBroker.GetProductSalesTrendInfoTotal(id));
 }
Example #12
0
 public BizEntity.Inventory.ProductInventoryInfo GetProductTotalInventoryInfo(int id)
 {
     return(ExternalDomainBroker.GetProductTotalInventoryInfo(id));
 }
Example #13
0
 public DateTime?GetLastPoDate(int id)
 {
     return(ExternalDomainBroker.GetLastPoDate(id));
 }
Example #14
0
 public virtual string GetReasonCodePath(int reasonCodeSysNo, string companyCode)
 {
     return(ExternalDomainBroker.GetReasonCodePath(reasonCodeSysNo, companyCode));
 }
Example #15
0
 public BizEntity.IM.ProductInfo GetProductInfo(int id)
 {
     return(ExternalDomainBroker.GetProductInfo(id));
 }
Example #16
0
 /// <summary>
 /// 根据供应商编号获取对应的代理信息
 /// </summary>
 /// <param name="vendorInfo"></param>
 /// <returns></returns>
 public List <VendorAgentInfo> GetVendorAgentInfo(VendorInfo vendorInfo)
 {
     return(ExternalDomainBroker.GetVendorAgentInfoList(vendorInfo));
 }
Example #17
0
        /// <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);
        }
Example #18
0
        /// <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);
        }
Example #19
0
        /// <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;
                    });
                }
            }
        }
Example #20
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());
        }
Example #21
0
        public ProductInfo GetProductInfo(string productId)
        {
            var product = ExternalDomainBroker.GetProductInfo(productId);

            return(product);
        }
Example #22
0
        /// <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);
        }
Example #23
0
        /// <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));
        }
Example #24
0
        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);
        }
Example #25
0
        /// <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);
        }
Example #26
0
        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;
            }
        }
Example #27
0
 /// <summary>
 /// 获取分仓列表 [Ray.L.Xing 泰隆优选不存在多渠道 故将StockInfo 改为WarehouseInfo 返回]
 /// </summary>
 /// <param name="companyCode"></param>
 /// <returns></returns>
 public List <WarehouseInfo> GetWarehouseList(string companyCode)
 {
     return(ExternalDomainBroker.GetWarehouseList(companyCode));
 }
Example #28
0
        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);
        }
Example #29
0
        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);
        }
Example #30
0
        /// <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);
        }