public ResultModel GetReturnProductInfo(SearchReturnProductInfoModel model)
        {
            var result = new ResultModel()
            {
                Data = new SimpleDataPagedList <ReturnProductInfoModel>(base._database.Db.ReturnProductInfo.All().Where(_database.Db.ReturnProductInfo.OrderDetailsID == model.OrderDetailsID && _database.Db.ReturnProductInfo.UserID == model.UserID),
                                                                        model.PagedIndex, model.PagedSize)
            };

            return(result);
        }
        /// <summary>
        /// 确认退款
        /// </summary>
        /// <param name="ReturnOrderID">退款标识</param>
        /// <param name="ReturnStatus">退款状态</param>

        /// <returns></returns>
        public JsonResult UpdateReturnProductInfoTK(string ReturnOrderID, int ReturnStatus)
        {
            ReturnProductInfoModel model = new ReturnProductInfoModel();
            var resultModel = new ResultModel();

            if (!string.IsNullOrEmpty(ReturnOrderID))
            {
                model.ReturnOrderID = ReturnOrderID;
                model.ReturnStatus  = ReturnStatus;
                model.RefundPerson  = UserInfo.CurrentUserName;
                model.RefundDate    = DateTime.Now;

                //resultModel = this._return_GoodsService.UpdateReturnProductInfoTK(model);
                //修改退货表 状态 5已退款
                //订单明细表 退货状态 改成 2已退款
                //订单表 退款标识 修改成 已处理
                //订单表 状态改成8交易关闭(需要判断订单明细表里的相关产品数据都是已经退款状态)
                //给退款用户的账户余额添加退款 费用
                SearchReturnProductInfoModel spmodel = new SearchReturnProductInfoModel();
                spmodel.ReturnOrderID = ReturnOrderID;
                spmodel.PagedIndex    = 0;
                spmodel.PagedSize     = 20;
                var result = this._return_GoodsService.GetReturnProductInfoList(spmodel);
                List <ReturnProductInfoModel> ds = result.Data;
                if (ds.Count > 0)
                {
                    model = ds[0];
                    model.ReturnOrderID = ReturnOrderID;
                    model.ReturnStatus  = ReturnStatus;
                    model.RefundPerson  = UserInfo.CurrentUserName;
                    model.RefundDate    = DateTime.Now;
                }

                resultModel = this._return_GoodsService.UpdateReturnProductInfoTK(model);



                var opera = string.Empty;
                opera += "确认退款 ReturnStatus=5, ReturnOrderID:" + model.ReturnOrderID + ",结果:" + resultModel.IsValid;
                LogPackage.InserAC_OperateLog(opera, "修改退换货记录");
                resultModel = LogPackage.GetResulMessagest(resultModel.IsValid, new List <string> {
                    resultModel.IsValid == true ? "Confirm refund success" : "Confirm refund failed"
                });
                return(Json(resultModel, JsonRequestBehavior.AllowGet));
            }
            else
            {
                resultModel = LogPackage.GetResulMessagest(false, new List <string> {
                    "Invalid return or change product record ID"
                });
            }

            return(Json(resultModel, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 列表Return_Goods
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult List(SearchReturnProductInfoModel model)
        {
            //SearchAC_OperateLogModel logmodel = new SearchAC_OperateLogModel();
            model.PagedIndex = model.PagedIndex == 0 ? 0 : model.PagedIndex;
            model.PagedSize  = model.PagedSize == 0 ? 10 : model.PagedSize;
            model.LanguageID = ACultureHelper.GetLanguageID;



            //查询列表
            var result = this._return_GoodsService.GetReturnProductInfoList(model);
            List <ReturnProductInfoModel> ds = result.Data;
            var data = new
            {
                rows  = ds,
                total = result.Data.TotalCount,
            };

            return(Json(data, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// Return_Goods加载数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Create(string id)
        {
            ReturnProductInfoModel model = new ReturnProductInfoModel();

            if (!string.IsNullOrEmpty(id))
            {
                //查询列表
                //List<Return_GoodsModel> result = this._return_GoodsService.GetReturn_GoodsById(id).Data;
                SearchReturnProductInfoModel model1 = new SearchReturnProductInfoModel();
                model1.ReturnOrderID = id;
                model1.PagedIndex    = 0;
                model1.PagedSize     = 100;
                var result = this._return_GoodsService.GetReturnProductInfoList(model1);
                List <ReturnProductInfoModel> ds = result.Data;
                if (ds != null && ds.Count > 0)
                {
                    model = ds[0];
                }
            }
            return(PartialView(model));
        }
        /// <summary>
        /// 获取退换货记录和订单明细关联列表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// wuyf
        public ResultModel GetReturnProductInfoOrderDetailsList(SearchReturnProductInfoModel model)
        {
            var tb = _database.Db.ReturnProductInfo;

            var where = new SimpleExpression(1, 1, SimpleExpressionType.Equal); //



            if (!string.IsNullOrEmpty(model.OrderID))
            {
                //查询订单ID
                where = new SimpleExpression(where, tb.OrderID.Like(model.OrderID.Trim()), SimpleExpressionType.And);
            }



            dynamic cl;

            var query = tb
                        .Query()
                        .LeftJoin(_database.Db.OrderDetails, out cl).On(_database.Db.OrderDetails.OrderID == tb.OrderID)

                        .Select(
                tb.ReturnOrderID,
                tb.OrderID,
                tb.UserID,
                tb.ProductId,
                tb.ProductSnapshotID,
                tb.ReturnType,
                tb.ReturnStatus,
                tb.TradeAmount,
                tb.RefundAmount,
                tb.ReturntNumber,
                tb.ReasonType,
                tb.Discription,

                tb.ReturnAddress,
                tb.ReceiverName,
                tb.ReceiverMobile,
                tb.ReceiverTel,

                tb.MerchantReturnAddress,
                tb.ReturnText,
                tb.CreateTime,
                tb.UpdateTime,
                tb.AuditUser,

                tb.Receiver,
                tb.DeliveryDate,
                tb.RefundPerson,
                tb.RefundDate,

                cl.IsReturn,
                cl.Quantity,
                cl.OrderDetailsID

                )
                        .Where(where)
                        .OrderByCreateTimeDescending();

            var result = new ResultModel
            {
                Data = new SimpleDataPagedList <ReturnProductInfoModel>(query,
                                                                        model.PagedIndex, model.PagedSize)
            };

            return(result);
        }
        /// <summary>
        /// 退换货记录(确认退款)
        /// </summary>
        /// <param name="model">退货记录模型</param>
        /// <returns>是否修改成功</returns>
        /// wuyf
        public ResultModel UpdateReturnProductInfoTK(ReturnProductInfoModel model)
        {
            //修改退货表 状态 5已退款
            //订单明细表 退货状态 改成 2已退款
            //订单表 退款标识 修改成 已处理
            //订单表 状态改成8交易关闭(需要判断订单明细表里的相关产品数据都是已经退款状态)
            //给退款用户的账户余额添加退款 费用

            var result = new ResultModel();

            #region 订单表 状态改成8交易关闭(需要判断订单明细表里的相关产品数据都是已经退款状态)
            var bl = true;//是否把当前订单的状态改成 8已关闭
            SearchReturnProductInfoModel srpm = new SearchReturnProductInfoModel();
            srpm.OrderID    = model.OrderID;
            srpm.PagedIndex = 0;
            srpm.PagedSize  = 100;
            //获取退换货记录和订单明细关联列表
            List <ReturnProductInfoModel> list = GetReturnProductInfoList(srpm).Data;// GetReturnProductInfoOrderDetailsList(srpm).Data;

            //订单明细
            List <OrderDetails> orderDetails = _database.Db.OrderDetails.FindAll(_database.Db.OrderDetails.OrderID == model.OrderID).ToList <OrderDetails>();
            //判断订单详情与退款记录条数是否一致(是一个订单多个商品,还是一个订单一个商品)
            var factoryCount = orderDetails.Count();

            //if (list.Count == factoryCount)
            //{
            //    if (list.Count == 1)
            //    {
            //        ReturnProductInfoModel rpmodel = list[0];//只有一条数据时,订单明细主键和退货数量跟明细数量相等,订单表的状态可以改为 8已关闭

            //        //该订单商品已退完
            //        if (rpmodel.OrderDetailsID == model.OrderDetailsID && rpmodel.ReturntNumber < rpmodel.Quantity)
            //        {
            //            bl = false;
            //        }
            //    }
            //    else
            //    {
            //        for (int i = 0; i < list.Count; i++)
            //        {
            //            ReturnProductInfoModel rpmodel1 = list[i];
            //            //ReturnProductInfoModel returndetail = returnList.Where(x => x.OrderDetailsID == detail.OrderDetailsID).FirstOrDefault();

            //            if ((rpmodel1.OrderDetailsID != model.OrderDetailsID && rpmodel1.IsReturn != 2) || (rpmodel1.OrderDetailsID == model.OrderDetailsID && rpmodel1.ReturntNumber < rpmodel1.Quantity))//状态 2 是已退款
            //            {
            //                //退出循环,不修改订单状态 为 8交易关闭
            //                //该订单还有为退款的商品
            //                bl = false; break;
            //            }
            //        }
            //    }
            //}
            //else
            //{
            //    bl = false;
            //}

            //zhoub 20160129 edit
            if (list.Count > 0)
            {
                //查找当前退款订单产品数量是否全部退完
                ReturnProductInfoModel rpim = list.FindAll(a => a.OrderDetailsID == model.OrderDetailsID).FirstOrDefault();
                if (rpim.ReturntNumber != rpim.Quantity)
                {
                    bl = false;
                }
                //判断之前退款是否有未确认退款或是产品未全部退完的
                for (int i = 0; i < list.Count; i++)
                {
                    ReturnProductInfoModel rpmodel = list[i];
                    if (rpmodel.OrderDetailsID != model.OrderDetailsID)
                    {
                        if (rpmodel.IsReturn != 2 || rpmodel.ReturntNumber != rpmodel.Quantity)
                        {
                            bl = false;
                            break;
                        }
                    }
                }
            }


            #endregion

            using (var tx1 = _database.Db.BeginTransaction())
            {
                try
                {
                    //退款表 修改状态成(5)
                    tx1.ReturnProductInfo.UpdateByReturnOrderID(ReturnOrderID: model.ReturnOrderID, RefundPerson: model.RefundPerson, ReturnStatus: model.ReturnStatus, RefundDate: model.RefundDate);
                    //订单明细表 退货状态 改成 2已退款
                    tx1.OrderDetails.UpdateByOrderDetailsID(OrderDetailsID: model.OrderDetailsID, IsReturn: 2);


                    if (bl)
                    {
                        //订单表 订单状态 修改成 8已关闭 (需要判断订单明细表里的相关产品数据都是已经退款状态)
                        tx1.Order.UpdateByOrderID(OrderID: model.OrderID, OrderStatus: 8);
                    }


                    #region 给用户账户充值金额,金额等于退款金额
                    srpm.ReturnOrderID = model.ReturnOrderID;
                    //根据退款主键查询退款单子
                    //List<ReturnProductInfoModel> list1 = GetReturnProductInfoList(srpm).Data;
                    //ReturnProductInfoModel rmodel = list[0];
                    ZJ_UserBalanceModel zjmodel = new ZJ_UserBalanceModel();
                    zjmodel.Account        = model.Account;
                    zjmodel.AddOrCutAmount = model.RefundAmount;
                    zjmodel.AddOrCutType   = 4;
                    zjmodel.CreateBy       = model.RefundPerson;
                    zjmodel.IsDisplay      = 1;
                    zjmodel.Phone          = model.Phone;
                    zjmodel.RealName       = model.RealName;
                    zjmodel.Remark         = "退货中的退款金额";
                    zjmodel.UserID         = model.UserID;
                    zjmodel.OrderNo        = model.OrderID;
                    UpdateZJ_UserBalance(zjmodel, tx1);
                    #endregion


                    tx1.Commit();
                    //订单表 退款标识 修改成 已处理(2)
                    //tx1.Order.UpdateByOrderID(OrderID: model.OrderID, RefundFlag: 2);
                    IsStust(model);
                }
                catch (Exception ex)
                {
                    tx1.Rollback();

                    result.IsValid = false;
                    result.Messages.Add(ex.Message);
                }
            }

            return(result);
        }
        /// <summary>
        /// 获取退换货记录列表
        /// </summary>
        /// <param name="parentId">父Id</param>
        /// <returns>退换货记录列表</returns>
        /// wuyf
        public ResultModel GetReturnProductInfoList(SearchReturnProductInfoModel model)
        {
            var tb = _database.Db.ReturnProductInfo;

            var where = new SimpleExpression(1, 1, SimpleExpressionType.Equal); //

            if (model.ReturnOrderID != null && !string.IsNullOrEmpty(model.ReturnOrderID.Trim()))
            {
                //主键
                where = new SimpleExpression(where, tb.ReturnOrderID == model.ReturnOrderID, SimpleExpressionType.And);
            }

            if (!string.IsNullOrEmpty(model.OrderID))
            {
                //查询订单ID
                where = new SimpleExpression(where, tb.OrderID.Like("%" + model.OrderID.Trim() + "%"), SimpleExpressionType.And);
            }

            if (model.UserID > 0)
            {
                //用户ID
                where = new SimpleExpression(where, tb.UserID == model.UserID, SimpleExpressionType.And);
            }
            if (model.Phone != null && !string.IsNullOrEmpty(model.Phone.Trim()))
            {
                //用户手机
                where = new SimpleExpression(where, _database.Db.YH_User.Phone.Like("%" + model.Phone.Trim() + "%"), SimpleExpressionType.And);
            }
            if (model.Email != null && !string.IsNullOrEmpty(model.Email.Trim()))
            {
                //用户手机
                where = new SimpleExpression(where, _database.Db.YH_User.Email.Like("%" + model.Email.Trim() + "%"), SimpleExpressionType.And);
            }

            if (model.ReturnStatus > 0)
            {
                //状态 (1:退款申请中(会员撤消操作),2:审核通过(用户发货(系统上不会体现),后台确认收货操作),3申请已驳回,4已收货(后台退款操作),5已退款,6申请已撤消)
                where = new SimpleExpression(where, tb.ReturnStatus == model.ReturnStatus, SimpleExpressionType.And);
            }

            if (model.ReturnType > 0)
            {
                //退换货类型 1退货,2换货,3返修
                where = new SimpleExpression(where, tb.ReturnType == model.ReturnType, SimpleExpressionType.And);
            }

            dynamic cl, pc, mer, pro, detailsLang;

            var query = tb
                        .Query()
                        .LeftJoin(_database.Db.OrderDetails, out cl).On(_database.Db.OrderDetails.OrderDetailsID == tb.OrderDetailsID)
                        .LeftJoin(_database.Db.OrderDetails_lang, out detailsLang).On(detailsLang.OrderDetailsID == cl.OrderDetailsID && detailsLang.LanguageID == model.LanguageID)
                        .LeftJoin(_database.Db.YH_User, out pc).On(_database.Db.YH_User.UserID == tb.UserID)
                        .LeftJoin(_database.Db.Product, out pro).On(pro.ProductId == tb.ProductId)
                        .LeftJoin(_database.Db.YH_MerchantInfo, out mer).On(mer.MerchantID == pro.MerchantID)
                        .Select(
                tb.ReturnOrderID.Distinct(),
                tb.OrderID,
                tb.UserID,
                tb.ProductId,
                tb.ProductSnapshotID,
                tb.ReturnType,
                tb.ReturnStatus,
                tb.TradeAmount,
                tb.RefundAmount,
                tb.ReturntNumber,
                tb.ReasonType,
                tb.Discription,

                tb.ReturnAddress,
                tb.ReceiverName,
                tb.ReceiverMobile,
                tb.ReceiverTel,

                tb.MerchantReturnAddress,
                tb.ReturnText,
                tb.CreateTime,
                tb.UpdateTime,
                tb.AuditUser,

                tb.Receiver,
                tb.DeliveryDate,
                tb.RefundPerson,
                tb.RefundDate,

                detailsLang.ProductName,
                cl.CostPrice,
                cl.SalesPrice,
                pc.Account,
                pc.Phone,
                pc.NickName,
                pc.RealName,
                pc.Email,
                cl.SkuName,
                cl.OrderDetailsID,
                cl.IsReturn,
                cl.Quantity,
                mer.ShopName
                )
                        .Where(where)
                        .OrderByCreateTimeDescending();

            var result = new ResultModel
            {
                Data = new SimpleDataPagedList <ReturnProductInfoModel>(query,
                                                                        model.PagedIndex, model.PagedSize)
            };

            return(result);
        }