示例#1
0
        public IHttpActionResult AddRefundOrder([FromBody] string[] inparamters)
        {
            var ids = string.Empty;

            if ((null == inparamters) || (inparamters.Length < 1))
            {
                return(Ok(new { StatusCode = 0, message = "订单信息不存在" }));
            }
            try
            {
                var id     = inparamters[0].ToGuid();
                var openId = WeiChatApplicationContext.Current.WeiChatUser.OpenId;
                var order  = db.Order_Infos.SingleOrDefault(o => (o.Id == id) && (o.OpenId == openId));
                if (null == order)
                {
                    return(Ok(new { StatusCode = 0, message = "订单信息不存在" }));
                }

                var price   = inparamters[1].ToDecimal(0m);
                var type    = inparamters[2].ToInt(1);
                var reason  = inparamters[3].FilterHtml().FilterSqlKey();
                var remark  = inparamters[4].FilterHtml().FilterSqlKey();
                var details = (JArray)JsonConvert.DeserializeObject(inparamters[5]);

                #region 退换货订单

                var refundOrder = new Order_Refund
                {
                    Id           = Guid.NewGuid(),
                    OrderID      = order.Id,
                    OrderCode    = order.Code,
                    Code         = PayUtil.GenerateOutTradeNo(),
                    Type         = (EnumOrderRefundType)type,
                    Amount       = price,
                    Quantity     = 0,
                    Reason       = reason,
                    Logistics    = string.Empty,
                    ShippingCode = string.Empty,
                    Consignee    = string.Empty,
                    Mobile       = string.Empty,
                    Address      = string.Empty,
                    State        =
                        (EnumOrderRefundType)type == EnumOrderRefundType.Return
                            ? EnumOrderRefundState.Replace
                            : EnumOrderRefundState.WaitSellerAgree,
                    Remark     = remark,
                    OpenId     = openId,
                    CreateTime = DateTime.Now,
                    TenantId   = TenantId
                };

                #endregion

                #region 订单产品

                var by       = false;
                var shipping = new List <decimal>();
                foreach (var detail in details)
                {
                    var detailID = detail.ToString().ToGuid();
                    var product  = db.Order_Details.FirstOrDefault(o => o.Id == detailID);
                    if (null != product)
                    {
                        var refundDetail = new Order_RefundDetail
                        {
                            Id          = Guid.NewGuid(),
                            OrderRefund = refundOrder.Id,
                            OrderDetail = product.Id,
                            OpenId      = openId,
                            CreateTime  = DateTime.Now,
                            TenantId    = TenantId
                        };
                        db.Order_RefundDetails.Add(refundDetail);
                        //增加退换货数据
                        refundOrder.Quantity += product.Quantity;
                    }
                }

                #endregion

                //订单变更状态
                order.State           = EnumOrderStatus.ReturnedGoods;
                db.Entry(order).State = EntityState.Modified;
                if (db.Order_Refunds.Any(o => o.Code == refundOrder.Code))
                {
                    refundOrder.Code = PayUtil.GenerateOutTradeNo();
                }
                db.Order_Refunds.Add(refundOrder);

                db.SaveChanges();

                return(Ok(new { StatusCode = 1, message = refundOrder.Id }));
            }
            catch (Exception ex)
            {
                log.Log(LoggerLevels.Debug, "Order/Add:" + ex.Message);
                return(Ok(new { StatusCode = 0, message = "生成失败" }));
            }
        }
        public IHttpActionResult ApplyRefund([FromBody] string[] inparamters)
        {
            var ids = string.Empty;

            if ((null == inparamters) || (inparamters.Length < 1))
            {
                return(Ok(new { StatusCode = 0, message = "订单信息不存在" }));
            }
            try
            {
                var OrderId = inparamters[0].ToGuid();
                var openId  = WeiChatApplicationContext.Current.WeiChatUser.OpenId;
                var order   = db.Order_Infos.SingleOrDefault(o => o.Id == OrderId);
                if (null == order)
                {
                    return(Ok(new { StatusCode = 0, message = "订单信息不存在" }));
                }
                var reason = inparamters[1];

                #region 退换货订单

                var refundOrder = new Order_Refund
                {
                    Id           = Guid.NewGuid(),
                    OrderID      = order.Id,
                    OrderCode    = order.Code,
                    Code         = PayUtil.GenerateOutTradeNo(),
                    Type         = EnumOrderRefundType.ReturnGoods,
                    Amount       = order.TotalPrice,
                    Quantity     = 0,
                    Reason       = "",
                    Logistics    = string.Empty,
                    ShippingCode = string.Empty,
                    Consignee    = string.Empty,
                    Mobile       = string.Empty,
                    Address      = string.Empty,
                    State        = EnumOrderRefundState.WaitSellerAgree,
                    Remark       = "",
                    OpenId       = openId,
                    CreateTime   = DateTime.Now,
                    TenantId     = TenantId
                };

                #endregion

                #region 订单产品

                var details = db.Order_Details.Where(p => p.OrderID == order.Id).ToList();
                foreach (var detail in details)
                {
                    var detailID = detail.ToString().ToGuid();
                    var product  = db.Order_Details.FirstOrDefault(o => o.Id == detailID);
                    if (null != product)
                    {
                        var refundDetail = new Order_RefundDetail
                        {
                            Id          = Guid.NewGuid(),
                            OrderRefund = refundOrder.Id,
                            OrderDetail = product.Id,
                            OpenId      = openId,
                            CreateTime  = DateTime.Now,
                            TenantId    = TenantId
                        };
                        db.Order_RefundDetails.Add(refundDetail);
                        //增加退换货数据
                        refundOrder.Quantity += product.Quantity;
                    }
                }

                #endregion

                //订单变更状态
                order.State = EnumOrderStatus.ReturnedGoods;
                if (db.Order_Refunds.Any(o => o.Code == refundOrder.Code))
                {
                    refundOrder.Code = PayUtil.GenerateOutTradeNo();
                }
                db.Order_Refunds.Add(refundOrder);

                db.SaveChanges();

                return(Ok(new { StatusCode = 1, message = refundOrder.Id }));
            }
            catch (Exception ex)
            {
                return(Ok(new { StatusCode = 0, message = "生成失败" }));
            }

            #endregion
        }