/// <summary>
        /// 查询年卡详情
        /// </summary>
        /// <param name="cardId"></param>
        /// <returns></returns>
        public JsonResult GetUserBeautyYearCardDetails(int cardId)
        {
            var result = new UserYearCardDetailResponse();

            if (cardId > 0)
            {
                var cardDetails = BeautyYearCardConfigManger.Instanse.GetShopBeautyUserYearCardDetails(cardId);
                if (cardDetails != null && cardDetails.Any())
                {
                    var codeDetails = KuaiXiuService.GetServiceCodeDetailsByCodes(cardDetails.Select(t => t.FwCode));
                    var firstCard   = cardDetails.First();
                    result.OrderInfo = new YearCardOrderInfo()
                    {
                        OrderId   = firstCard.UserCardId,
                        OrderTime = firstCard.CreateTime.ToString()
                    };
                    result.Product = new YearCardProduct()
                    {
                        Pid      = firstCard.ProductId,
                        Num      = firstCard.ProductNumber,
                        UseCycle = firstCard.UseCycle + "/" + (firstCard.CycleType == 0 ? "年" : firstCard.CycleType == 1 ? "月" : firstCard.CycleType == 2 ? "周" : "天")
                    };
                    result.YearCards = cardDetails.Join(codeDetails, x => x.FwCode, y => y.Code, (x, y) => { return(y); }).Select(t => new YearCard()
                    {
                        _disabled = ((t.Status == ServiceCodeStatusType.Created || t.Status == ServiceCodeStatusType.SmsSent) && !t.Source.Contains("Revert")) ? false : true,
                        Code      = t.Code,
                        Status    = KuaiXiuService.GetServiceCodeStatusDescription(t)
                    });
                }
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 查询用户美容年卡
        /// </summary>
        /// <param name="mobile"></param>
        /// <param name="orderId"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public JsonResult GetUserBeautyYearCards(string mobile, string orderId, int pageIndex, int pageSize)
        {
            string userId = null;

            if (!string.IsNullOrEmpty(mobile))
            {
                var user = UserAccountService.GetUserByMobile(mobile);
                if (user != null)
                {
                    userId = user.UserId.ToString();
                }
            }
            var         tupleResult = BeautyYearCardConfigManger.Instanse.GetShopBeautyUserYearCards(userId, orderId, pageIndex, pageSize);
            var         yearcards   = tupleResult.Item1;
            List <User> users       = new List <User>();

            users = UserAccountService.GetUsersByIds(yearcards.Select(t => t.UserId).Distinct().ToList());
            var cardDetails        = BeautyYearCardConfigManger.Instanse.GetShopBeautyUserYearCardDetails(yearcards.Select(t => t.PKID));
            var serviceCodeDetails = KuaiXiuService.GetServiceCodeDetailsByCodes(cardDetails.Select(t => t.FwCode));
            var result             = yearcards.Select(t =>
            {
                var user         = users.FirstOrDefault(u => u.UserId == t.UserId);
                var details      = cardDetails.Where(s => s.UserYearCardId == t.PKID);
                var codeDetails  = serviceCodeDetails.Join(details, x => x.Code, y => y.FwCode, (x, y) => { return(x); });
                var effictiveNum = codeDetails.Where(c => (c.Status == ServiceCodeStatusType.Created || c.Status == ServiceCodeStatusType.SmsSent) && !c.Source.Contains("Revert")).Count();
                return(new GetUserYearCardResponse()
                {
                    PKID = t.PKID,
                    CardPrice = t.CardPrice,
                    CardType = t.CardType,
                    CreateTime = t.CreateTime.ToString(),
                    EffictiveTime = t.BeginTime.ToString() + '-' + t.EndTime.ToString(),
                    Mobile = user?.MobileNumber,
                    OrderId = (int)t.UserCardId,
                    UserName = user?.Profile?.UserName ?? user?.Profile?.NickName,
                    RemainTime = $"{effictiveNum}/{details.Count()}"
                });
            });

            return(Json(new { data = result, totalCount = tupleResult.Item2 }, JsonRequestBehavior.AllowGet));
        }