Ejemplo n.º 1
0
        /// <summary>
        ///  取消订单时,回退用户易捷币
        /// </summary>
        public static ResultDTO CancelOrder(ContextSession contextSession, CommodityOrder commodityOrder)
        {
            if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId)
            {
                return(ResultDTO.Successed);
            }

            decimal yjbMoney = OrderPayDetail.ObjectSet()
                               .Where(t => t.OrderId == commodityOrder.Id && (t.ObjectType == 10 || t.ObjectType == 15) && t.Amount > 0)
                               .Select(t => t.Amount).FirstOrDefault();

            if (yjbMoney <= 0)
            {
                return(ResultDTO.Successed);
            }

            var result = YJBSV.RefundAllOrderJournal(commodityOrder.Id);

            if (!result.IsSuccess)
            {
                if (result.Code != "OrderNotFound")
                {
                    LogHelper.Error("取消订单时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message);
                    LogOrderErrorInfo(contextSession, commodityOrder, "取消订单时,回退用户易捷币失败");
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
 /// <summary>
 ///  创建订单时,扣除用户易捷币和易捷抵现劵
 /// </summary>
 public static ResultDTO CreateOrder(Guid esAppId, CreateOrderInputDTO input)
 {
     if (esAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId)
     {
         return(ResultDTO.Successed);
     }
     return(YJBSV.CreateOrderJournal(input));
 }
Ejemplo n.º 3
0
 /// <summary>
 ///  支付成功时时,解冻用户易捷币和易捷抵现劵
 /// </summary>
 public static ResultDTO PayOrder(CommodityOrder order)
 {
     LogHelper.Info("YJBHelper.PayOrder, OrderId: " + order.Id);
     if (order.EsAppId.HasValue && order.EsAppId.Value == YJBConsts.YJAppId)
     {
         return(YJBSV.PayOrderJournal(order));
     }
     return(ResultDTO.Successed);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 查询商品的易捷币抵用信息
 /// </summary>
 public static OrderInsteadCashDTO GetCommodityCashPercentWithoutUser(Guid?esAppId, List <OrderInsteadCashInputCommodityDTO> commodities)
 {
     if (!esAppId.HasValue || esAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId)
     {
         return(new OrderInsteadCashDTO {
             Enabled = false
         });
     }
     return(YJBSV.GetCommodityCashPercentWithoutUser(commodities));
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 根据卡绑定人获取易捷卡面值
        /// </summary>
        /// <param name="UserId"></param>
        /// <returns></returns>
        public static decimal GetYJCardAcount(Guid UserId)
        {
            var result = YJBSV.GetYJCardAcount(UserId);

            if (result == 0)
            {
                LogHelper.Error("退款时,回退用户易捷卡失败,用户ID:" + UserId);
            }
            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 退回易捷卡
        /// </summary>
        /// <param name="UserId"></param>
        /// <param name="Refund"></param>
        /// <returns></returns>
        public static ResultDTO RetreatYjc(Guid UserId, Decimal Refund, Guid orderId, Guid orderItemId)
        {
            var result = YJBSV.RetreatYjc(UserId, Refund, orderId, orderItemId);

            if (!result.IsSuccess)
            {
                LogHelper.Error("退款时,回退用户易捷卡失败,用户ID:" + UserId + ",错误内容:" + result.Message);
            }
            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 退款时把金额退回到易捷卡
        /// </summary>
        /// <param name="UserId"></param>
        /// <param name="Refund"></param>
        /// <returns></returns>
        public static ResultDTO UpdateCardCash(Guid UserId, Decimal Refund)
        {
            var result = YJBSV.UpdateCardCash(UserId, Refund);

            if (!result.IsSuccess)
            {
                LogHelper.Error("退款时,回退用户易捷卡失败,用户ID:" + UserId + ",错误内容:" + result.Message);
            }
            return(result);
        }
Ejemplo n.º 8
0
 /// <summary>
 /// 获取商品的油卡兑换券额度
 /// </summary>
 /// <param name="esAppId"></param>
 /// <param name="input"></param>
 /// <returns></returns>
 public static List <CommodityYouKaDTO> GetCommodityYouKaPercent(Guid esAppId, List <Guid> commodityIdList)
 {
     //易捷APP才显示
     if (esAppId != YJBConsts.YJAppId || commodityIdList == null || commodityIdList.Count == 0)
     {
         return(new List <CommodityYouKaDTO>());
     }
     return(YJBSV.GetCommodityYouKaPercent(new GetYouKaPersentDTO {
         EsAppId = esAppId, CommodityIdList = commodityIdList
     }));
 }
Ejemplo n.º 9
0
        /// <summary>
        /// 售中退款时,回退用户易捷币和易捷抵用券
        /// </summary>
        public static ResultDTO OrderRefund(ContextSession contextSession, CommodityOrder commodityOrder, OrderRefund orderRefund, decimal commodityPrice, Guid useryjcouponid)
        {
            if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId)
            {
                return(ResultDTO.Successed);
            }

            //var result = YJBSV.RefundAllOrderJournal(commodityOrder.Id);
            //if (!result.IsSuccess)
            //{
            //    LogHelper.Error("售中退款时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message);
            //    LogOrderErrorInfo(contextSession, commodityOrder, "售中退款时,回退用回退用户易捷币失败户易捷币");
            //}
            //return result;
            #region 记录抵用券退款明细表
            var orderitemorder = (from i in OrderItem.ObjectSet()
                                  where commodityOrder.Id == i.CommodityOrderId
                                  select i).ToList();
            var user = CBCSV.GetUserNameAndCode(commodityOrder.UserId);
            foreach (var item in orderitemorder)
            {
                CouponRefundDetail couponRefundDetailDTO = new CouponRefundDetail();
                couponRefundDetailDTO.Id                   = Guid.NewGuid();
                couponRefundDetailDTO.SubTime              = DateTime.Now;
                couponRefundDetailDTO.ModifiedOn           = DateTime.Now;
                couponRefundDetailDTO.RefundTime           = DateTime.Now;
                couponRefundDetailDTO.ReceiveAccount       = user != null ? user.Item2 : "";
                couponRefundDetailDTO.ReceiveName          = user != null ? user.Item1 : "";
                couponRefundDetailDTO.CommodityCouponMoney = commodityPrice;
                couponRefundDetailDTO.FreightCouponMoney   = 0;
                couponRefundDetailDTO.CommodityRefundMoney = orderRefund.RefundMoney;
                couponRefundDetailDTO.FreightRefundMoney   = orderRefund.RefundFreightPrice;
                couponRefundDetailDTO.RefundTotalMoney     = commodityPrice + orderRefund.RefundMoney + orderRefund.RefundFreightPrice;
                couponRefundDetailDTO.ShopName             = commodityOrder.AppName;
                couponRefundDetailDTO.OrderNo              = commodityOrder.Code;
                couponRefundDetailDTO.CommoidtyName        = item.Name;
                couponRefundDetailDTO.ReceivePhone         = commodityOrder.ReceiptPhone;
                couponRefundDetailDTO.ConsigneeName        = commodityOrder.ReceiptUserName;
                couponRefundDetailDTO.Remark               = "";
                couponRefundDetailDTO.EntityState          = System.Data.EntityState.Added;

                contextSession.SaveObject(couponRefundDetailDTO);
            }
            contextSession.SaveChanges();
            #endregion
            var mobile = user != null ? user.Item2 : "";
            var result = YJBSV.RefundOrderJournal(commodityOrder.Id, orderRefund.RefundYJBMoney, commodityPrice, mobile, commodityOrder.UserId, useryjcouponid);
            if (!result.IsSuccess)
            {
                LogHelper.Error("售中退款时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message);
                LogOrderErrorInfo(contextSession, commodityOrder, "售中退款时,回退用回退用户易捷币失败户易捷币");
            }
            return(result);
        }
Ejemplo n.º 10
0
        /// <summary>
        ///  创建订单失败时,回退用户易捷币
        /// </summary>
        public static ResultDTO CreateOrderFail(ContextSession contextSession, CommodityOrder commodityOrder)
        {
            if (commodityOrder.EsAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId)
            {
                return(ResultDTO.Successed);
            }
            var result = YJBSV.CancelOrderJournal(commodityOrder.Id);

            if (!result.IsSuccess)
            {
                LogHelper.Error("创建订单失败时,回退用户易捷币失败,订单ID:" + commodityOrder.Id + ",错误内容:" + result.Message);
                LogOrderErrorInfo(contextSession, commodityOrder, "创建订单失败时,回退用户易捷币");
            }
            return(result);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 查询商品的易捷币抵用信息
        /// </summary>
        public static CanInsteadCashDTO GetCommodityCashPercent(Guid?esAppId, OrderInsteadCashInputDTO input)
        {
            var emptyResult = new CanInsteadCashDTO {
                YJBInfo = new OrderInsteadCashDTO {
                    Enabled = false
                }, YJCouponInfo = null
            };

            if (!esAppId.HasValue)
            {
                return(emptyResult);
            }
            if (esAppId != Jinher.AMP.YJB.Deploy.CustomDTO.YJBConsts.YJAppId)
            {
                return(emptyResult);
            }
            return(YJBSV.GetCommodityCashPercent(input));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 根据订单生成待结算项
        /// </summary>
        public static SettleAccountsDetails CreateSettleAccountDetails(ContextSession contextSession, CommodityOrder commodityOrder, MallApply mall, int?orderServiceState = null)
        {
            //LogHelper.Info("开始生成结算项,订单ID:" + commodityOrder.Id);

            var currentDate = DateTime.Now;

            // 1:商家,2:金和众销(给金和分的钱),3:商贸众销(给分享者分的钱),4:商贸众筹,5:推广主分成,6:应用主分成,7金和分润,8买家,9一级分销,10二级分销,11三级分销,12渠道推广,20:一级代理,21:二级代理
            //var payeeType = new List<int> { 3, 5, 9, 10, 11, 20, 21 };
            //var orderitemlist = OrderItem.ObjectSet().Where(n => n.CommodityOrderId == commodityOrder.Id).
            //    GroupJoin(OrderItemShare.ObjectSet().Where(s => payeeType.Contains(s.PayeeType)), o => o.Id, s => s.OrderItemId, (o, s) =>
            //        new { o.Id, o.Name, o.Number, o.RealPrice, o.CommodityId, o.ComCategoryId, Commission = s.Sum(_ => (decimal?)_.Commission) }).ToList();

            // 暂不计算推广佣金
            var orderitemlist = OrderItem.ObjectSet().Where(n => n.CommodityOrderId == commodityOrder.Id).Select(o =>
                                                                                                                 new { o.Id, o.Name, o.Number, o.RealPrice, o.CommodityId, o.ComCategoryId, o.CommodityAttributes }).ToList();
            bool isSetSettleAmount = true;
            List <SettleAccountsOrderItem> items = new List <SettleAccountsOrderItem>();
            var payTime = commodityOrder.PaymentTime.Value;

            foreach (var orderItem in orderitemlist)
            {
                // 结算单订单项
                SettleAccountsOrderItem saItem = new SettleAccountsOrderItem();
                saItem.Id                    = saItem.OrderItemId = orderItem.Id;
                saItem.ModifiedOn            = saItem.SubTime = currentDate;
                saItem.OrderId               = commodityOrder.Id;
                saItem.OrderItemRefundAmount = 0;               // 暂无单品退货
                saItem.OrderItemPromotionCommissionAmount = 0M; // orderItem.Commission ?? 0M;
                saItem.OrderItemName   = orderItem.Name;
                saItem.OrderItemNumber = orderItem.Number;
                saItem.OrderItemPrice  = orderItem.RealPrice.Value;
                // 自营他配
                if (mall.Type == 0)
                {
                    var commoditySettleAmount = CommoditySettleAmount.ObjectSet()
                                                .Where(c => c.CommodityId == orderItem.CommodityId && c.EffectiveTime < payTime)
                                                .OrderByDescending(c => c.SubTime)
                                                .ThenByDescending(c => c.EffectiveTime)
                                                .FirstOrDefault();
                    if (commoditySettleAmount == null)
                    {
                        // 未设置结算价,暂不结算
                        //LogHelper.Info("开始生成结算项,订单ID:" + commodityOrder.Id + ",自营商家,未设置结算价,商品ID:" + orderItem.CommodityId);
                        return(null);
                    }
                    //LogHelper.Info("开始生成结算项,订单ID:" + commodityOrder.Id + ",自营商家,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes + ",结算价:" + commoditySettleAmount.CommodityAttrJson);

                    var saAttrs = JsonHelper.JsonDeserialize <List <Jinher.AMP.BTP.Deploy.CustomDTO.CommodityAttributePrice> >(commoditySettleAmount.CommodityAttrJson);
                    var attrs   = (orderItem.CommodityAttributes ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    if (attrs.Length == 0)
                    {
                        // 无属性
                        saItem.SettleAmount = saAttrs[0].SettlePrice.Value;
                    }
                    else if (attrs.Length == 1)
                    {
                        // 单属性
                        var settlePrice = saAttrs.Where(a => a.AttributeValue == attrs[0]).FirstOrDefault();
                        if (settlePrice == null)
                        {
                            LogHelper.Error("SettleAccountHelper.CreateSettleAccountDetails 生成结算单失败,结算价设置异常,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes + ",结算价ID:" + commoditySettleAmount.Id + ",结算价属性:" + commoditySettleAmount.CommodityAttrJson);
                            return(null);
                        }
                        saItem.SettleAmount = settlePrice.SettlePrice.Value;
                    }
                    else if (attrs.Length == 2)
                    {
                        // 双属性
                        var settlePrice = saAttrs.Where(a =>
                                                        (a.AttributeValue == attrs[0] && a.SecAttributeValue == attrs[1]) ||
                                                        (a.AttributeValue == attrs[1] && a.SecAttributeValue == attrs[0]))
                                          .FirstOrDefault();
                        if (settlePrice == null)
                        {
                            LogHelper.Error("SettleAccountHelper.CreateSettleAccountDetails 生成结算单失败,结算价设置异常,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes + ",结算价ID:" + commoditySettleAmount.Id + ",结算价属性:" + commoditySettleAmount.CommodityAttrJson);
                            return(null);
                        }
                        saItem.SettleAmount = settlePrice.SettlePrice.Value;
                    }
                    else
                    {
                        LogHelper.Error("SettleAccountHelper.CreateSettleAccountDetails 生成结算单失败,商品属性异常,商品ID:" + orderItem.CommodityId + ",商品属性:" + orderItem.CommodityAttributes);
                        return(null);
                    }
                    //orderItem.com
                }
                // 第三方
                else if (mall.Type == 1)
                {
                    // 查询商品易捷币抵用数量
                    var yjbInfo = YJBSV.GetOrderItemYJBInfo(commodityOrder.EsAppId.Value, commodityOrder.Id);
                    if (!yjbInfo.IsSuccess)
                    {
                        saItem.OrderItemYJBAmount = 0;
                    }
                    else
                    {
                        var currentCommodityYJBInfo = yjbInfo.Data.Items.Where(c => c.CommodityId == orderItem.CommodityId).FirstOrDefault();
                        if (currentCommodityYJBInfo != null && currentCommodityYJBInfo.IsMallYJB)
                        {
                            saItem.OrderItemYJBAmount = currentCommodityYJBInfo.InsteadCashAmount;
                        }
                    }

                    // 计算实际成交价



                    #region 计算商品佣金比例
                    // 获取佣金比例:按结算日期获取有效的(启用日期小于等于结算日期的最近一次设置的佣金比例)佣金比例【基础、类目、商品】;
                    saItem.BaseCommission = BaseCommission.ObjectSet().Join(MallApply.ObjectSet(),
                                                                            b => b.MallApplyId, m => m.Id, (b, m) => new { b.Commission, b.EffectiveTime, b.SubTime, m.AppId, m.EsAppId }).
                                            Where(t => t.EsAppId == commodityOrder.EsAppId && t.AppId == commodityOrder.AppId && t.EffectiveTime < payTime).
                                            OrderByDescending(t => t.SubTime).Select(t => (decimal?)t.Commission).FirstOrDefault();

                    // 查询当前商品的类目
                    List <Guid> categoryIds    = new List <Guid>();
                    var         tempCategories = CommodityCategory.ObjectSet().Where(c => c.AppId == commodityOrder.EsAppId && c.CommodityId == orderItem.CommodityId).Join(Category.ObjectSet(), cc => cc.CategoryId, c => c.Id, (cc, c) => new { c.Id, c.CurrentLevel, c.ParentId, cc.IsDel }).ToList();
                    foreach (var item in tempCategories)
                    {
                        if (item.IsDel.HasValue && item.IsDel.Value)
                        {
                            continue;
                        }
                        if (item.CurrentLevel == 3 || item.CurrentLevel == 4 || item.CurrentLevel == 5)
                        {
                            var lv2 = Category.FindByID(item.ParentId.Value);
                            if (item.CurrentLevel == 3)
                            {
                                categoryIds.Add(lv2.ParentId.Value);
                                continue;
                            }
                            var lv3 = Category.FindByID(lv2.ParentId.Value);
                            if (item.CurrentLevel == 4)
                            {
                                categoryIds.Add(lv3.ParentId.Value);
                                continue;
                            }
                            var lv4 = Category.FindByID(lv3.ParentId.Value);
                            categoryIds.Add(lv4.ParentId.Value);
                        }
                        else if (item.CurrentLevel == 2)
                        {
                            categoryIds.Add(item.ParentId.Value);
                        }
                        else if (item.CurrentLevel == 1)
                        {
                            categoryIds.Add(item.Id);
                        }
                    }

                    var commissions = CategoryCommission.ObjectSet().
                                      Join(MallApply.ObjectSet(), b => b.MallApplyId, m => m.Id,
                                           (b, m) => new { b.CategoryId, b.Commission, b.EffectiveTime, b.SubTime, m.AppId, m.EsAppId }).
                                      Where(t =>
                                            t.EsAppId == commodityOrder.EsAppId &&
                                            t.AppId == commodityOrder.AppId &&
                                            categoryIds.Contains(t.CategoryId) &&
                                            t.EffectiveTime < payTime).
                                      GroupBy(t => t.CategoryId).
                                      Select(group => group.OrderByDescending(g => g.SubTime).Select(g => g.Commission).FirstOrDefault()).
                                      ToList();
                    if (commissions.Count > 0)
                    {
                        saItem.CategoryCommission = commissions.Min();
                    }
                    saItem.CommodityCommission = CommodityCommission.ObjectSet().Join(MallApply.ObjectSet(),
                                                                                      b => b.MallApplyId, m => m.Id, (b, m) => new { b.CommodityId, b.Commission, b.EffectiveTime, b.SubTime, m.AppId, m.EsAppId }).
                                                 Where(t => t.EsAppId == commodityOrder.EsAppId && t.AppId == commodityOrder.AppId &&
                                                       t.CommodityId == orderItem.CommodityId && t.EffectiveTime < payTime).
                                                 OrderByDescending(t => t.SubTime).Select(t => (decimal?)t.Commission).FirstOrDefault();
                    #endregion

                    // 商城佣金计算公式:商品销售价*佣金比例【商品佣金优先,类目佣金其次、基础佣金最后,三选一计算】* 购买数量;
                    saItem.PromotionAmount = Math.Truncate(
                        (saItem.CommodityCommission.HasValue ? saItem.CommodityCommission.Value :
                         (saItem.CategoryCommission.HasValue ? saItem.CategoryCommission.Value :
                          (saItem.BaseCommission.HasValue ? saItem.BaseCommission.Value : 0)
                         )) * saItem.OrderItemPrice * saItem.OrderItemNumber) / 100;
                }

                saItem.EntityState = EntityState.Added;
                items.Add(saItem);
            }

            // 结算单订单详情
            SettleAccountsDetails sad = new SettleAccountsDetails();
            sad.Id                = sad.OrderId = commodityOrder.Id;
            sad.EntityState       = EntityState.Added;
            sad.ModifiedOn        = sad.SubTime = currentDate;
            sad.IsSettled         = false;
            sad.AppId             = commodityOrder.AppId;
            sad.EsAppId           = commodityOrder.EsAppId.Value;
            sad.OrderCode         = commodityOrder.Code;
            sad.OrderSubTime      = payTime;
            sad.OrderAmount       = commodityOrder.Price;
            sad.OrderRealAmount   = commodityOrder.RealPrice.Value;
            sad.OrderFreight      = commodityOrder.Freight;
            sad.IsSetSettleAmount = isSetSettleAmount;

            // 导入订单时,记录退款金额
            if (commodityOrder.State == 7 || orderServiceState == 7)
            {
                var refund = OrderRefundAfterSales.ObjectSet().Where(o => o.OrderId == commodityOrder.Id).FirstOrDefault();
                // 全额退款 不计入结算单
                if (refund.IsFullRefund == 1)
                {
                    sad.IsSettled = true;
                    if (contextSession != null)
                    {
                        foreach (var item in items)
                        {
                            contextSession.SaveObject(item);
                        }
                        contextSession.SaveObject(sad);
                    }
                    return(sad);
                }
                else
                {
                    sad.OrderRefundAmount = refund.RefundMoney;
                }
            }
            else
            {
                sad.OrderRefundAmount = 0; // 暂无单品退货
            }

            //// 计算商城优惠券金额
            //var orderP ayDetailId = OrderPayDetail.ObjectSet().Where(c => c.OrderId == commodityOrder.Id && c.ObjectType == 1).Select(c => c.ObjectId).FirstOrDefault();
            //if (orderPayDetailId != Guid.Empty)
            //{
            //    var request = new Coupon.Deploy.CustomDTO.ListCouponNewRequestDTO
            //    {
            //        CouponIds = new List<Guid> { orderPayDetailId },
            //        UserId = commodityOrder.UserId
            //    };
            //    var coupons = CouponSV.Instance.GetUserCouponsByIds(request);
            //    if (coupons.IsSuccess)
            //    {
            //        var firstCoupon = coupons.Data[0];

            //        sad.OrderCouponAmount = firstCoupon.Cash;
            //        // 判断是否为电商馆
            //        sad.IsMallCoupon = ZPHSV.Instance.IsAppPavilion(firstCoupon.ShopId);
            //    }
            //    else
            //    {
            //        LogHelper.Error(string.Format("CouponSV.GetUserCouponsByIds返回结果不成功,入参 CouponIds: {0} UserId: {1},出参 Code: {2} Info: {3}。", orderPayDetailId, commodityOrder.UserId, coupons.Code, coupons.Info));
            //    }
            //}

            // 计算商家结算金额

            decimal spreadMoney = 0;
            if (commodityOrder.SpreadGold > 0)
            {
                spreadMoney = commodityOrder.SpreadGold.ToMoney();
            }
            sad.OrderSpreadAmount = spreadMoney;

            // 1.第三方
            if (mall.Type == 1)
            {
                sad.OrderYJBAmount = items.Sum(i => i.OrderItemYJBAmount);

                // 商城佣金
                sad.PromotionAmount = items.Sum(i => i.PromotionAmount);

                // 优先级:1推广主、2三级分销、 3众销
                //sad.OrderPromotionCommissionAmount = commodityOrder.SpreadGold > 0 ? commodityOrder.SpreadGold.ToMoney() :
                //    commodityOrder.DistributeMoney > 0 ? commodityOrder.DistributeMoney : commodityOrder.Commission;
                // 老版本,已弃 商家结算金额 = 订单总额 + 商城优惠券总金额 - 退款总金额 - 推广佣金总额 - 商城佣金总额
                // 版本1:商家结算金额 =  实收款 +  商城易捷币抵用金额 - 退款金额  - 商城佣金
                // 版本2:商家结算金额 =  实收款 +  商城易捷币抵用金额 - 退款金额  - 商城佣金 - 推广佣金总额
                // 商家结算金额
                sad.SellerAmount = Math.Truncate((sad.OrderRealAmount + sad.OrderYJBAmount - sad.OrderRefundAmount - sad.PromotionAmount - sad.OrderSpreadAmount.Value) * 100) / 100;
            }
            // 0.自营他配
            else if (mall.Type == 0)
            {
                // 商品结算价
                decimal totalsSettlePrice = 0;
                foreach (var item in items)
                {
                    totalsSettlePrice += item.SettleAmount * item.OrderItemNumber;
                }
                sad.SettleAmount = totalsSettlePrice;
                // 商家结算金额 = 商品结算价*数量 + 运费 - 退款金额
                sad.SellerAmount = Math.Truncate((sad.SettleAmount + sad.OrderFreight - sad.OrderRefundAmount) * 100) / 100;
                // 商城佣金
                sad.PromotionAmount = Math.Truncate((sad.OrderRealAmount - sad.SellerAmount - sad.OrderSpreadAmount.Value) * 100) / 100;
            }
            // 2.自营自配自采
            // 3.自营自配统采
            if (contextSession != null)
            {
                foreach (var item in items)
                {
                    contextSession.SaveObject(item);
                }
                contextSession.SaveObject(sad);
            }
            return(sad);
        }
Ejemplo n.º 13
0
        public static string RepairOrderItemYjbPrice(int days)
        {
            LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,开始时间:" + DateTime.Now);
            HashSet <Guid> orderIds      = new HashSet <Guid>();
            HashSet <Guid> errorOrderIds = new HashSet <Guid>();

            try
            {
                ContextSession contextSession  = ContextFactory.CurrentThreadContext;
                var            lastTime        = DateTime.Now.AddDays(-days);
                var            commodityOrders = CommodityOrder.ObjectSet().Where(t => t.EsAppId == YJB.Deploy.CustomDTO.YJBConsts.YJAppId && t.SubTime >= lastTime);
                LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,商品ids:" + JsonHelper.JsSerializer(commodityOrders.Select(t => t.Id)));
                foreach (var commodityOrder in commodityOrders)
                {
                    // 查询商品易捷币抵用数量
                    var yjInfo = YJBSV.GetOrderItemYJInfo(commodityOrder.EsAppId.Value, commodityOrder.Id);
                    if (yjInfo.IsSuccess)
                    {
                        var yjbInfo = yjInfo.Data.YJBInfo;
                        if (yjbInfo == null)
                        {
                            LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,使用易捷币抵现订单Id:" + commodityOrder.Id + ",Items: null");
                        }
                        else
                        {
                            LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,使用易捷币抵现订单Id:" + commodityOrder.Id + ",Items:" + JsonHelper.JsSerializer(yjbInfo.Items));
                        }

                        var yjCouponInfo = yjInfo.Data.YJCouponInfo;
                        if (yjCouponInfo == null)
                        {
                            LogHelper.Debug("进入易捷抵现劵抵现订单,按照商品进行拆分,使用易捷抵现劵抵现订单Id:" + commodityOrder.Id + ",Items: null");
                        }
                        else
                        {
                            LogHelper.Debug("进入易捷抵现劵抵现订单,按照商品进行拆分,使用易捷抵现劵抵现订单Id:" + commodityOrder.Id + ",Items:" + JsonHelper.JsSerializer(yjCouponInfo.Items));
                        }

                        var orderItems        = OrderItem.ObjectSet().Where(t => t.CommodityOrderId == commodityOrder.Id).ToList().OrderBy(_ => _.CommodityId).ThenByDescending(_ => _.Number).ToList();
                        var dirCommodityIndex = orderItems.Select(_ => _.CommodityId).Distinct().ToDictionary(_ => _, _ => 0);
                        foreach (var orderItem in orderItems)
                        {
                            bool needUpdate = false;
                            if (yjbInfo != null && yjbInfo.Items != null)
                            {
                                var yjbInfoItems = yjbInfo.Items.Where(c => c.CommodityId == orderItem.CommodityId).ToList();
                                if (yjbInfoItems.Count > dirCommodityIndex[orderItem.CommodityId])
                                {
                                    var currentCommodityYjbInfo = yjbInfoItems[dirCommodityIndex[orderItem.CommodityId]];
                                    if (currentCommodityYjbInfo != null /*&& currentCommodityYjbInfo.IsMallYJB*/ && currentCommodityYjbInfo.InsteadCashAmount > 0)
                                    {
                                        if (orderItem.YjbPrice != currentCommodityYjbInfo.InsteadCashAmount)
                                        {
                                            needUpdate         = true;
                                            orderItem.YjbPrice = currentCommodityYjbInfo.InsteadCashAmount;
                                        }
                                    }
                                    dirCommodityIndex[orderItem.CommodityId]++;
                                }
                            }
                            if (yjCouponInfo != null && yjCouponInfo.Items != null)
                            {
                                if (yjCouponInfo.Items.Count == 0)
                                {
                                    errorOrderIds.Add(orderItem.CommodityOrderId);
                                    continue;
                                }
                                var yjCouponPrice = orderItem.YJCouponPrice;
                                if (yjCouponInfo.Items.FirstOrDefault().OrderItemId != Guid.Empty)
                                {
                                    yjCouponPrice = yjCouponInfo.Items.Where(_ => _.OrderItemId == orderItem.Id).Sum(_ => _.InsteadCashAmount);
                                }
                                else
                                {
                                    yjCouponPrice = yjCouponInfo.Items.Where(_ => _.CommodityId == orderItem.CommodityId).Sum(_ => _.InsteadCashAmount);
                                }
                                if (yjCouponPrice != orderItem.YJCouponPrice)
                                {
                                    needUpdate = true;
                                    orderItem.YJCouponPrice = yjCouponPrice;
                                }
                            }
                            if (needUpdate)
                            {
                                orderItem.ModifiedOn = DateTime.Now;
                                orderIds.Add(orderItem.CommodityOrderId);
                            }
                        }
                    }
                }
                var count = contextSession.SaveChanges();
                LogHelper.Debug("进入易捷币抵现订单,按照商品进行拆分,结束时间:" + DateTime.Now);
            }
            catch (Exception ex)
            {
                LogHelper.Error(String.Format("易捷币抵现订单,按照商品进行拆分:" + ex.Message), ex);
            }
            return("错误订单:" + string.Join(",", errorOrderIds) + "---------修复订单:" + string.Join(",", orderIds));
        }