示例#1
0
        /// <summary>
        ///抓取商城订单
        /// </summary>
        /// <param name="orderInfoList"></param>
        public void OrderSync(IList <OrderInfo> orderInfoList, string siId, out List <OrderNotification> orderNotifications)
        {
            if (orderInfoList.Count > 0)
            {
                var orderNotificationResults = new List <OrderNotification>();

                foreach (var itemOrderInfo in orderInfoList)
                {
                    var order_sn = string.Empty;//OMS系统这边对应的SerialNumber
                    //抓取商城订单操作事务
                    using (var tran = _omsAccessor.OMSContext.Database.BeginTransaction())
                    {
                        if (_orderService.GetOrderByPSerialNumber(itemOrderInfo.order_id) == null)
                        {
                            var insertErrorCount = 0;
                            var errInfo          = "";
                            try
                            {
                                //订单插入
                                Order newOrder = new Order
                                {
                                    SerialNumber   = _commonService.GetOrderSerialNumber("SC"),
                                    UserName       = itemOrderInfo.user_name,
                                    PayState       = PayState.Success,
                                    SumPrice       = Convert.ToDecimal(itemOrderInfo.order_sum_price),
                                    PayPrice       = Convert.ToDecimal(itemOrderInfo.order_fact_price),
                                    PayDate        = DateTime.Now,
                                    CustomerName   = itemOrderInfo.consignee_info.fullname,
                                    CustomerPhone  = itemOrderInfo.consignee_info.mobile,
                                    AddressDetail  = itemOrderInfo.consignee_info.province.Trim() + " " + itemOrderInfo.consignee_info.city.Trim() + " " + itemOrderInfo.consignee_info.county.Trim() + " " + itemOrderInfo.consignee_info.full_address.Trim(),
                                    CreatedBy      = 0,                          //代表系统本身
                                    CustomerMark   = itemOrderInfo.order_remark, //订单备注
                                    ShopId         = 97,                         //97为网上商城在新系统数据库Dictionary表中的Id
                                    PSerialNumber  = itemOrderInfo.order_id.Trim(),
                                    IsNeedPaperBag = itemOrderInfo.is_need_invoice,
                                };
                                //机场店地址
                                if (itemOrderInfo.consignee_info.full_address.Contains("深圳宝安机场到达出口直行150米大厅右侧(星巴克对面)"))
                                {
                                    newOrder.AddressDetail = "广东省" + " " + "深圳市" + " " + "宝安区" + " " + itemOrderInfo.consignee_info.full_address.Trim();
                                }
                                //匹配仓库
                                newOrder.WarehouseId = _orderService.MatchWarehouseId(itemOrderInfo.product_info_list, newOrder.AddressDetail);

                                //订单类型
                                string[] XHString = { "1", "2", "3", "10" };
                                if (((IList)XHString).Contains(itemOrderInfo.order_type))
                                {
                                    //商城现货
                                    newOrder.Type = OrderType.B2C_XH;
                                }
                                else if (itemOrderInfo.order_type == "4")
                                {
                                    //商城跨境
                                    newOrder.Type = OrderType.B2C_KJ;
                                }
                                else if (itemOrderInfo.order_type == "9")
                                {
                                    //合作商
                                    newOrder.Type = OrderType.B2C_HZS;
                                }

                                if (itemOrderInfo.order_state == "WAIT_SELLER_STOCK_OUT")

                                {
                                    newOrder.State = OrderState.Paid;
                                }
                                else if (itemOrderInfo.order_state == "PAY_REVOKE")
                                {
                                    newOrder.State = OrderState.Cancel;
                                }
                                //订单物流信息
                                newOrder.DeliveryTypeId = _deliveriesService.GetDeliveryByShopCode(itemOrderInfo.delivery_name.Trim()) == null ?0 : _deliveriesService.GetDeliveryByShopCode(itemOrderInfo.delivery_name.Trim()).Id;
                                //客户自提修改快递方式
                                if (itemOrderInfo.seller_remark.Contains("自提码"))
                                {
                                    newOrder.DeliveryTypeId = _deliveriesService.ConfirmDeliveryIsExist("KHZT") == null ? 0 : _deliveriesService.ConfirmDeliveryIsExist("KHZT").Id;
                                }
                                if (newOrder.DeliveryTypeId == 0)
                                {
                                    _logService.InsertSystemLog(LogLevelEnum.AddOrderErr, "订单" + itemOrderInfo.order_id + "快递方式:快递方式不匹配" + itemOrderInfo.delivery_name);
                                    tran.Commit();
                                    insertErrorCount++;
                                    continue;
                                }

                                //订单发票类型
                                if (!itemOrderInfo.is_need_invoice)
                                {
                                    newOrder.InvoiceType = InvoiceType.NoNeedInvoice;
                                }
                                else
                                {
                                    switch (itemOrderInfo.order_invoice_info.invoice_title_type.Trim())
                                    {
                                    case "1":
                                        newOrder.InvoiceType = InvoiceType.PersonalInvoice;
                                        break;

                                    case "2":
                                        newOrder.InvoiceType = InvoiceType.CompanyInvoice;
                                        break;

                                    case "3":
                                        newOrder.InvoiceType = InvoiceType.SpecialInvoice;
                                        break;
                                    }
                                }

                                //订单支付类型
                                var payType = _omsAccessor.Get <Dictionary>().Where(x => x.Isvalid && x.Type == DictionaryType.PayType && x.Value.Trim().Contains("网银在线")).FirstOrDefault();
                                newOrder.PayType = payType == null ? 119 : payType.Id;

                                //下单时间
                                if (itemOrderInfo.order_generate_date.Trim() != "")
                                {
                                    newOrder.CreatedTime = Convert.ToDateTime(itemOrderInfo.order_generate_date.Trim());
                                }
                                //支付时间
                                if (itemOrderInfo.order_paydate.Trim() != "")
                                {
                                    newOrder.PayDate = Convert.ToDateTime(itemOrderInfo.order_paydate.Trim());
                                }
                                //商城代金券优惠
                                newOrder.ProductCoupon = itemOrderInfo.product_coupon_info;
                                newOrder.AdminMark     = itemOrderInfo.seller_remark;
                                var zmjfPrice = itemOrderInfo.coupon_detail_list.Where(r => r.coupon_type.Equals("IntegralValue_New")).FirstOrDefault();
                                if (zmjfPrice != null)
                                {
                                    newOrder.ZMIntegralValuePrice = Convert.ToDecimal(zmjfPrice.coupon_price);
                                }
                                //订单所使用的中民券
                                var zmCoupon = itemOrderInfo.coupon_detail_list.Where(r => r.coupon_type.Equals("ZMCoupon")).FirstOrDefault();
                                if (zmCoupon != null)
                                {
                                    newOrder.ZMCoupon = float.Parse(zmCoupon.coupon_price);
                                }
                                else
                                {
                                    newOrder.ZMCoupon = 0;
                                }

                                //订单所使用的中民红酒券
                                var zmWineCoupon = itemOrderInfo.coupon_detail_list.Where(r => r.coupon_type.Equals("WineCoupon")).FirstOrDefault();
                                if (zmWineCoupon != null)
                                {
                                    newOrder.ZMWineCoupon = Math.Round(float.Parse(zmWineCoupon.coupon_price), 2);
                                }
                                else
                                {
                                    newOrder.ZMWineCoupon = 0;
                                }
                                //订单所使用的的红酒网红酒券
                                var wineWorldCoupon = itemOrderInfo.coupon_detail_list.Where(r => r.coupon_type.Equals("WineWorldCoupon")).FirstOrDefault();
                                if (wineWorldCoupon != null)
                                {
                                    newOrder.WineWorldCoupon = Math.Round(float.Parse(wineWorldCoupon.coupon_price), 2);
                                }
                                else
                                {
                                    newOrder.WineWorldCoupon = 0;
                                }

                                //总价要加上中民红酒券以及红酒网红酒券
                                newOrder.SumPrice += (decimal)newOrder.ZMWineCoupon;
                                newOrder.SumPrice += (decimal)newOrder.WineWorldCoupon;
                                _omsAccessor.Insert(newOrder);
                                _omsAccessor.SaveChanges();
                                #region 新增订单日志
                                _logService.InsertOrderLog(newOrder.Id, "新增订单", newOrder.State, newOrder.PayState, "商城接口新增订单");
                                #endregion
                                order_sn = newOrder.SerialNumber;
                                //订单商品插入
                                if (itemOrderInfo.product_info_list.Count > 0)
                                {
                                    foreach (var itemProduct in itemOrderInfo.product_info_list)
                                    {
                                        if (string.IsNullOrEmpty(itemProduct.goods_sn))
                                        {
                                            errInfo += "订单" + itemOrderInfo.order_id + "商品插入失败:商品" + itemProduct.goods_name + ",编码为空或NULL!";
                                            insertErrorCount++;
                                            break;
                                        }
                                        SaleProduct saleProduct = _productService.GetSaleProductByGoodSn(itemProduct.goods_sn);
                                        if (saleProduct != null && saleProduct.ProductId != 0 && saleProduct.Stock >= Convert.ToInt32(itemProduct.item_total.Trim()))
                                        {
                                            if (saleProduct.AvailableStock < Convert.ToInt32(itemProduct.item_total.Trim()))
                                            {
                                                errInfo += "订单" + itemOrderInfo.order_id + "商品插入失败:商品库存不足" + itemProduct.goods_name + ",商品编码为" + itemProduct.goods_sn;
                                                insertErrorCount++;
                                                break;
                                            }
                                            OrderProduct newOrderProduct = new OrderProduct
                                            {
                                                OrderId       = newOrder.Id,
                                                SaleProductId = saleProduct.Id,
                                                Quantity      = Convert.ToInt32(itemProduct.item_total.Trim()),
                                                OrginPrice    = _productService.GetSaleProductPriceById(saleProduct.Id, 103).Price,
                                                Price         = Convert.ToDecimal(itemProduct.sale_price.Trim()),
                                                SumPrice      = Convert.ToInt32(itemProduct.item_total.Trim()) * Convert.ToDecimal(itemProduct.sale_price.Trim()),
                                                CreatedBy     = 0
                                            };
                                            //销售商品总库存判断及锁定
                                            saleProduct.LockStock     += Convert.ToInt32(itemProduct.item_total.Trim());
                                            saleProduct.AvailableStock = saleProduct.Stock - saleProduct.LockStock;
                                            _omsAccessor.Update(saleProduct);
                                            _omsAccessor.Insert(newOrderProduct);
                                            _omsAccessor.SaveChanges();
                                            //新增锁定库存记录
                                            _productService.CreateSaleProductLockedTrackAndWareHouseStock(newOrder.Id, saleProduct.Id, newOrder.WarehouseId, newOrderProduct.Quantity, newOrderProduct.Id);
                                        }
                                        else
                                        {
                                            errInfo += "订单" + itemOrderInfo.order_id + "商品插入失败:不存在商品" + itemProduct.goods_name + ",商品编码为" + itemProduct.goods_sn;
                                            insertErrorCount++;
                                            break;
                                        }
                                    }
                                }


                                if (insertErrorCount == 0)
                                {
                                    //插入发票信息
                                    if (newOrder.InvoiceType != InvoiceType.NoNeedInvoice)
                                    {
                                        InvoiceInfo newOrderInvoiceInfo = new InvoiceInfo
                                        {
                                            OrderId         = newOrder.Id,
                                            CustomerEmail   = string.IsNullOrEmpty(itemOrderInfo.order_invoice_info.InvoiceEmail)?"": itemOrderInfo.order_invoice_info.InvoiceEmail,
                                            Title           = itemOrderInfo.order_invoice_info.invoice_title_info,
                                            TaxpayerID      = itemOrderInfo.order_invoice_info.taxpayer_id,
                                            RegisterAddress = itemOrderInfo.order_invoice_info.register_address,
                                            RegisterTel     = itemOrderInfo.order_invoice_info.register_tel,
                                            BankOfDeposit   = itemOrderInfo.order_invoice_info.bank_of_deposit,
                                            BankAccount     = itemOrderInfo.order_invoice_info.bank_account,
                                            CreatedBy       = 0,
                                        };

                                        _omsAccessor.Insert(newOrderInvoiceInfo);
                                        _omsAccessor.SaveChanges();
                                    }


                                    //支付信息插入
                                    OrderPayPrice newOrderPayPrice = new OrderPayPrice
                                    {
                                        OrderId   = newOrder.Id,
                                        IsPay     = true,
                                        Price     = Convert.ToDecimal(itemOrderInfo.order_fact_price.Trim()),
                                        CreatedBy = 0
                                    };

                                    if (itemOrderInfo.order_paydate.Trim() == "")
                                    {
                                        newOrderPayPrice.CreatedTime = DateTime.Now;
                                    }
                                    else
                                    {
                                        newOrderPayPrice.CreatedTime = Convert.ToDateTime(itemOrderInfo.order_paydate.Trim());
                                    }

                                    //订单支付类型
                                    newOrderPayPrice.PayType = payType == null ? 119 : payType.Id;

                                    _omsAccessor.Insert(newOrderPayPrice);
                                    _omsAccessor.SaveChanges();
                                }
                            }
                            catch (Exception ex)
                            {
                                insertErrorCount++;
                                errInfo += "订单" + itemOrderInfo.order_id + "插入错误" + ex.Message;
                            }
                            if (insertErrorCount > 0)
                            {
                                tran.Rollback();
                                //最后插入异常
                                _logService.InsertSystemLog(LogLevelEnum.AddOrderErr, errInfo);
                            }
                            else
                            {
                                tran.Commit();

                                //获取成功下单的订单
                                var orderNatification = new OrderNotification
                                {
                                    order_id         = itemOrderInfo.order_id,
                                    order_sn         = order_sn,
                                    operation_result = "1",
                                    sd_id            = siId
                                };
                                orderNotificationResults.Add(orderNatification);
                            }
                        }
                    }
                }

                orderNotifications = orderNotificationResults;
            }
            else
            {
                orderNotifications = null;
            }
        }
示例#2
0
        public bool BookKeeping(OrderModel orderModel, out string msg)
        {
            var order = _omsAccessor.Get <Order>().Where(p => p.Id == orderModel.Id).Include(p => p.OrderPayPrice).FirstOrDefault();

            if (order == null)
            {
                msg = "订单信息错误,请核实!";
                return(false);
            }
            if (order.PayPrice == 0)
            {
                if (!orderModel.IsPayOrRefund)
                {
                    msg = "当前订单未支付,不支持退款!";
                    return(false);
                }
                else
                {
                    if (orderModel.PayPrice > order.SumPrice)
                    {
                        msg = "支付金额大于订单总金额,操作失败!";
                        return(false);
                    }
                }
                order.PayType     = orderModel.PayType;
                order.PayMentType = orderModel.PayMentType;
                order.PayPrice    = orderModel.PayPrice;
                OrderPayPrice orderPayPrice = new OrderPayPrice
                {
                    OrderId     = order.Id,
                    IsPay       = orderModel.IsPayOrRefund,
                    PayType     = orderModel.PayType,
                    PayMentType = orderModel.PayMentType,
                    Price       = orderModel.PayPrice,
                    Mark        = orderModel.AdminMark,
                };
                order.OrderPayPrice.Add(orderPayPrice);
            }
            else
            {
                if (orderModel.IsPayOrRefund)
                {//付款
                    if (orderModel.PayPrice + order.PayPrice > order.SumPrice)
                    {
                        msg = "支付金额大于订单总金额,操作失败!";
                        return(false);
                    }
                    order.PayPrice += orderModel.PayPrice;
                }
                else
                {
                    //退款
                    if (orderModel.PayPrice > order.PayPrice)
                    {
                        msg = "退款金额大于已支付金额,操作失败";
                        return(false);
                    }
                    order.PayPrice -= orderModel.PayPrice;
                }
                OrderPayPrice orderPayPrice = new OrderPayPrice
                {
                    OrderId     = order.Id,
                    IsPay       = orderModel.IsPayOrRefund,
                    PayType     = orderModel.PayType,
                    PayMentType = orderModel.PayMentType,
                    Price       = orderModel.PayPrice,
                    Mark        = orderModel.AdminMark,
                };
                order.OrderPayPrice.Add(orderPayPrice);
            }
            _omsAccessor.Update(order);
            _omsAccessor.SaveChanges();
            msg = "操作成功";
            return(true);
        }
示例#3
0
        /// <summary>
        /// 插入订单到OMS
        /// </summary>
        /// <param name="response"></param>
        /// <returns></returns>
        public string InsertOrderToOMS(string response)
        {
            dynamic data = JsonConvert.DeserializeObject(response);

            if (data.Data == null)
            {
                return("同步完成,没有获取到招行订单!");
            }
            //判断是否已有平台单号
            foreach (var item in data.Data)
            {
                using (var trans = _omsAccessor.OMSContext.Database.BeginTransaction())
                {
                    string pNum     = (string)item.orderNo;
                    var    nextLoop = false;
                    try
                    {
                        if (Environment.StackTrace.Contains("ScheduleTaskFuncService.SyncCMBOrderToOMS"))
                        {
                            //如果当前调用为定时任务调用,则设置默认用户为admin
                            _workContext.CurrentUser = _omsAccessor.Get <User>().Where(r => r.UserName == "admin").FirstOrDefault();
                        }
                        var isExistOrder = _omsAccessor.Get <Order>().Where(r => r.PSerialNumber.Contains(pNum)).FirstOrDefault();
                        if (isExistOrder != null)
                        {
                            continue;
                        }
                        #region Order 订单
                        Order order = new Order();
                        //订单主体
                        order.SerialNumber   = _commonService.GetOrderSerialNumber();
                        order.PSerialNumber  = (string)item.orderNo;
                        order.Type           = OrderType.B2C_XH;
                        order.ShopId         = int.Parse(_configuration.GetSection("Zhaohang")["shopId"]);//订单所属店铺ID,已写在配置文件中
                        order.State          = OrderState.Paid;
                        order.WriteBackState = WriteBackState.NoWrite;


                        //支付信息
                        order.PayType     = int.Parse(_configuration.GetSection("Zhaohang")["payType"]); //统一结算,已写在配置文件中
                        order.PayMentType = 0;                                                           //回款方式B2B所属部分
                        order.PayState    = PayState.Success;
                        string d = (string)item.payTime;
                        order.PayDate  = DateTime.ParseExact((string)item.payTime, "yyyyMMddHHmmss", null);
                        order.SumPrice = 0;                        //后面更新
                        order.PayPrice = (decimal)item.invoiceAmt; //发票金额,即支付金额  订单总优惠金额【店铺维度】 promotionAmt= soAmt + expressFeeAmt - invoiceAmt


                        //其他控制部分
                        order.IsLackStock    = false;
                        order.LockMan        = 0;
                        order.LockStock      = false;
                        order.IsLackStock    = false;
                        order.Isvalid        = true;
                        order.IsCopied       = false;
                        order.AppendType     = 0;     //合并/拆分订单
                        order.IsNeedPaperBag = false; //是否需要纸袋?未找到判断标志


                        //物流信息
                        order.DeliveryTypeId = int.Parse(_configuration.GetSection("Zhaohang")["defaultDelivery"]);//设置默认物流(顺丰),已写在配置文件中
                        //order.DeliveryNumber
                        //order.DeliveryDate


                        //客户信息部分
                        order.UserName      = (string)item.receiveContact;
                        order.CustomerName  = (string)item.receiveContact;
                        order.CustomerPhone = (string)item.receiveCellPhone;
                        order.AddressDetail = _commonService.MatchProvince((string)item.receiveProvince) + " " + (string)item.receiveCity + " " + (string)item.receiveZone + " "
                                              + (string)item.receiveStreet + " " + (string)item.receiveAddress;
                        order.DistrictId   = 0;
                        order.CustomerMark = (string)item.orderMemo;
                        //order.AdminMark = decimal.Parse((string)item.promotionAmt) == 0 ? "" : "套装总价:" + (decimal)item.soAmt + " 订单总优惠金额:" + (string)item.promotionAmt;//填写优惠信息
                        order.AdminMark   = "箱内放入售后服务卡,箱子上贴上招行贴纸,并使用招行胶带封箱。";                         //填写优惠信息
                        order.WarehouseId = _orderService.MatchFirstWareHouseId(order.AddressDetail); //匹配仓库
                        //order.FinanceMark
                        //order.ToWarehouseMessage 自行填写


                        //优惠信息部分
                        order.ZMCoupon        = 0;
                        order.ZMWineCoupon    = 0;
                        order.WineWorldCoupon = 0;
                        //order.ProductCoupon
                        //order.ZMIntegralValuePrice
                        //order.OriginalOrderId
                        //order.SalesManId


                        //发票部分
                        order.InvoiceType = InvoiceType.NoNeedInvoice;


                        //其他
                        order.PriceTypeId       = 103;//或者0
                        order.CustomerId        = 0;
                        order.ApprovalProcessId = 0;
                        order.InvoiceMode       = 0;//开票方式

                        _omsAccessor.Insert <Order>(order);
                        _omsAccessor.SaveChanges();
                        #region 订单日志
                        _logService.InsertOrderLog(order.Id, "新增订单", order.State, order.PayState, "招行接口新增订单");
                        #endregion

                        #endregion


                        #region PayInfo 支付信息
                        OrderPayPrice orderPayPrice = new OrderPayPrice();
                        orderPayPrice.OrderId     = order.Id;
                        orderPayPrice.IsPay       = true;
                        orderPayPrice.PayType     = int.Parse(_configuration.GetSection("Zhaohang")["payType"]);
                        orderPayPrice.PayMentType = 0;
                        orderPayPrice.Price       = order.PayPrice;
                        _omsAccessor.Insert <OrderPayPrice>(orderPayPrice);
                        #endregion


                        #region InvoiceInfo 发票信息
                        if (int.Parse((string)item.invoiceType) != 9)
                        {
                            //增票部分
                            InvoiceInfo invoiceInfo = new InvoiceInfo();
                            invoiceInfo.OrderId       = order.Id;
                            invoiceInfo.CustomerEmail = (string)item.invoiceReceiveEmail;
                            invoiceInfo.Title         = (string)item.invoiceTitle;

                            if (item.vatInvoiceInfo != null)
                            {
                                invoiceInfo.TaxpayerID      = (string)item.vatInvoiceInfo.taxpayerIdent;//纳税人识别码
                                invoiceInfo.RegisterAddress = (string)item.vatInvoiceInfo.registeredAddress;
                                invoiceInfo.RegisterTel     = (string)item.vatInvoiceInfo.registeredPhone;
                                invoiceInfo.BankAccount     = (string)item.vatInvoiceInfo.bankAccount; //银行账号
                                invoiceInfo.BankOfDeposit   = (string)item.vatInvoiceInfo.depositBank; //银行支行信息
                                order.InvoiceType           = InvoiceType.SpecialInvoice;
                                _omsAccessor.Update <Order>(order);
                            }
                            //invoiceInfo.InvoiceNo//发票编码
                            //invoiceInfo.BankCode 默认不填
                            _omsAccessor.Insert <InvoiceInfo>(invoiceInfo);
                        }
                        _omsAccessor.SaveChanges();
                        #endregion


                        #region OrderProduct 订单商品
                        var cmbOrderPros = new List <OrderProduct>();//订单列表中的商品

                        foreach (var pro in item.shoppingList)
                        {
                            string pCode   = (string)pro.sellerSku;
                            var    salePro = _omsAccessor.Get <SaleProduct>().Join(_omsAccessor.Get <Product>().Where(p => p.Code == pCode), o => o.ProductId, p => p.Id, (o, p) => new { o, p })
                                             .Select(r => r.o).FirstOrDefault();
                            var suitPro = _omsAccessor.Get <SuitProducts>().Where(r => r.Code == pCode)
                                          .Join(_omsAccessor.Get <SuitProductsDetail>(), s => s.Id, sd => sd.SuitProductsId, (s, sd) => new { s, sd }).Select(r => r.sd)
                                          .OrderByDescending(r => r.Quantity).ToList();

                            if (salePro != null)
                            {
                                //单款商品情况
                                cmbOrderPros.Add(new OrderProduct()
                                {
                                    SaleProductId = salePro.Id,
                                    Quantity      = (int)pro.quantity,
                                    OrginPrice    = _omsAccessor.Get <SaleProductPrice>().Where(r => r.SaleProductId == salePro.Id).FirstOrDefault().Price,
                                    SumPrice      = (decimal)pro.salePrice
                                });
                            }
                            else if (suitPro != null && suitPro.Count > 0)
                            {
                                //套装商品情况

                                //套账商品中的单个商品价格及单款商品总价
                                var p = _omsAccessor.Get <SaleProductPrice>()
                                        .Join(suitPro, s => s.SaleProductId, sp => sp.SaleProductId, (s, sp) => new { s, sp })
                                        .Select(r => new
                                {
                                    r.s.SaleProductId,
                                    r.s.Price,
                                    r.sp.Quantity,
                                    SuitProSumPrice = r.s.Price * r.sp.Quantity
                                });
                                var totalPrice = p.Sum(r => r.SuitProSumPrice);
                                //套装单款商品总价格及占比
                                var spp = p.Select(r => new { r.SaleProductId, r.SuitProSumPrice, Proportion = r.SuitProSumPrice / totalPrice });
                                //套装实付总价
                                var thisSuitProSumPrice = decimal.Parse((string)pro.salePrice);


                                foreach (var sItem in suitPro)
                                {
                                    cmbOrderPros.Add(new OrderProduct()
                                    {
                                        SaleProductId = sItem.SaleProductId,
                                        Quantity      = sItem.Quantity * (int)pro.quantity,
                                        OrginPrice    = _omsAccessor.Get <SaleProductPrice>().Where(r => r.SaleProductId == sItem.SaleProductId).FirstOrDefault().Price,
                                        SumPrice      = spp.Where(r => r.SaleProductId == sItem.SaleProductId).FirstOrDefault().Proportion *thisSuitProSumPrice
                                    });
                                }
                            }
                            else
                            {
                                //找不到商品,不添加订单
                                trans.Rollback();
                                _logService.InsertedCMBOrderLog(pNum, "无法在OMS找到商品编码为:" + pCode + "的商品");
                                nextLoop = true;
                                break;
                            }
                        }
                        var finalProList = cmbOrderPros.GroupBy(r => r.SaleProductId).Select(r => new OrderProduct
                        {
                            SaleProductId = r.FirstOrDefault().SaleProductId,
                            OrginPrice    = r.FirstOrDefault().OrginPrice,
                            Quantity      = r.Sum(re => re.Quantity),
                            SumPrice      = r.Sum(re => re.SumPrice)
                        }).OrderByDescending(r => r.Quantity);

                        var     i             = 0;//用于判断当前是第几个商品
                        var     t             = finalProList.Count();
                        decimal countSumPrice = 0;
                        decimal orderSumPrice = finalProList.Sum(r => r.SumPrice);//按照订单支付金额计算,未按订单金额算(订单金额 = 支付金额 + 快递费)
                        foreach (var fItem in finalProList)
                        {
                            i++;
                            OrderProduct orderProduct = new OrderProduct();
                            orderProduct.OrderId       = order.Id;
                            orderProduct.SaleProductId = fItem.SaleProductId;
                            orderProduct.OrginPrice    = fItem.OrginPrice;

                            if (_commonService.GetNewDecimalNotRounding(fItem.SumPrice % fItem.Quantity) == 0 && fItem.SumPrice != 0)
                            {
                                //除尽
                                orderProduct.Quantity = fItem.Quantity;
                                orderProduct.Price    = _commonService.GetNewDecimalNotRounding(fItem.SumPrice / fItem.Quantity);
                                orderProduct.SumPrice = fItem.SumPrice;

                                countSumPrice += fItem.SumPrice;
                            }
                            else
                            {
                                //除不尽
                                if (i == t && fItem.Quantity > 1)
                                {
                                    //最后一款商品,拆分
                                    // 最后总价 = orderSumPrice - countSumPrice;
                                    var zuihouZongjia = orderSumPrice - countSumPrice;


                                    orderProduct.Quantity = fItem.Quantity - 1;
                                    orderProduct.Price    = _commonService.GetNewDecimalNotRounding(fItem.SumPrice / fItem.Quantity);
                                    orderProduct.SumPrice = orderProduct.Quantity * orderProduct.Price;

                                    countSumPrice += orderProduct.SumPrice;


                                    //最后一款商品
                                    OrderProduct lastPro = new OrderProduct();
                                    lastPro.OrderId       = order.Id;
                                    lastPro.SaleProductId = fItem.SaleProductId;
                                    lastPro.OrginPrice    = fItem.OrginPrice;
                                    lastPro.Quantity      = 1;
                                    lastPro.Price         = _commonService.GetNewDecimalNotRounding(orderSumPrice - countSumPrice);
                                    lastPro.SumPrice      = orderSumPrice - orderProduct.SumPrice;

                                    _omsAccessor.Insert <OrderProduct>(lastPro);
                                }
                                else if (i == t && fItem.Quantity == 1)
                                {
                                    var zuihouZongjia = orderSumPrice - countSumPrice;
                                    orderProduct.Quantity = fItem.Quantity;
                                    orderProduct.Price    = fItem.SumPrice;
                                    orderProduct.SumPrice = fItem.SumPrice;
                                }
                                else
                                {
                                    var danjia = fItem.SumPrice / fItem.Quantity;

                                    orderProduct.Quantity = fItem.Quantity;
                                    orderProduct.Price    = _commonService.GetNewDecimalNotRounding(danjia);
                                    orderProduct.SumPrice = orderProduct.Price * orderProduct.Quantity;

                                    countSumPrice += orderProduct.SumPrice;
                                }
                            }
                            //锁定销售商品
                            SaleProduct saleProduct = _omsAccessor.Get <SaleProduct>().Where(r => r.Id == fItem.SaleProductId).FirstOrDefault();
                            saleProduct.LockStock     += fItem.Quantity;
                            saleProduct.AvailableStock = saleProduct.Stock - saleProduct.LockStock;
                            if (saleProduct.AvailableStock < 0)
                            {
                                trans.Rollback();
                                _logService.InsertedCMBOrderLog(pNum, "商品库存不足,无法添加添加订单");
                                nextLoop = true;
                                break;
                            }
                            _omsAccessor.Update <SaleProduct>(saleProduct);
                            _omsAccessor.Insert <OrderProduct>(orderProduct);
                            _omsAccessor.SaveChanges();
                        }
                        #endregion
                        if (!nextLoop)
                        {
                            order.SumPrice = _omsAccessor.Get <OrderProduct>().Where(r => r.OrderId == order.Id).Sum(r => r.SumPrice);
                            _omsAccessor.Update <Order>(order);
                            _omsAccessor.SaveChanges();
                            trans.Commit();
                            //解除缺货
                            _productService.UnLockLackStockOrder(new List <int>()
                            {
                                order.Id
                            });
                            _logService.InsertedCMBOrderLog(pNum, "订单同步成功!");
                        }
                    }
                    catch (Exception e)
                    {
                        trans.Rollback();
                        _omsAccessor.Insert <CMBOrderLog>(new CMBOrderLog()
                        {
                            OrderNum = pNum, Message = e.Message
                        });
                        _omsAccessor.SaveChanges();
                        _logService.Error("<InsertOrderToOMS> 信息:" + e.Message);
                        continue;
                    }
                }
            }
            return("");
        }