Exemplo n.º 1
0
        /// <summary>
        /// 取得會員資訊
        /// </summary>
        /// <param name="memberInfo">memberInfo</param>
        /// <returns>Tuple(MemberInfoDto, string)</returns>
        public async Task <Tuple <MemberInfoDto, string> > GetMemberInfo(MemberInfoDto memberInfo)
        {
            try
            {
                MemberData memberData = null;
                if (!string.IsNullOrEmpty(memberInfo.MemberID))
                {
                    memberData = await this.memberRepository.GetMemebrDataByMemberID(memberInfo.MemberID);
                }
                else if (!string.IsNullOrEmpty(memberInfo.Email))
                {
                    memberData = await this.memberRepository.GetMemebrDataByEmail(memberInfo.Email);
                }
                else if (!string.IsNullOrEmpty(memberInfo.Mobile))
                {
                    memberData = await this.memberRepository.GetMemebrDataByMobile(memberInfo.Mobile);
                }
                else
                {
                    return(Tuple.Create <MemberInfoDto, string>(null, "無效的查詢參數."));
                }

                if (memberData == null)
                {
                    return(Tuple.Create <MemberInfoDto, string>(null, "無會員資料."));
                }

                return(Tuple.Create(this.mapper.Map <MemberInfoDto>(memberData), string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Member Info Error >>> MemberID:{memberInfo.MemberID} Email:{memberInfo.Email} Mobile:{memberInfo.Mobile}\n{ex}");
                return(Tuple.Create <MemberInfoDto, string>(null, "取得會員資訊發生錯誤."));
            }
        }
Exemplo n.º 2
0
 internal MemberInfo(MemberInfoDto dto)
 {
     InstanceId                = dto.InstanceId;
     TimeStamp                 = dto.TimeStamp;
     State                     = dto.State;
     IsAlive                   = dto.IsAlive;
     InternalTcpEndPoint       = new DnsEndPoint(dto.InternalTcpIp, dto.InternalTcpPort);
     InternalSecureTcpEndPoint = dto.InternalSecureTcpPort > 0
                         ? new DnsEndPoint(dto.InternalTcpIp, dto.InternalSecureTcpPort)
                         : null;
     ExternalTcpEndPoint       = dto.ExternalTcpIp != null ? new DnsEndPoint(dto.ExternalTcpIp, dto.ExternalTcpPort) : null;
     ExternalSecureTcpEndPoint = dto.ExternalTcpIp != null && dto.ExternalSecureTcpPort > 0
                         ? new DnsEndPoint(dto.ExternalTcpIp, dto.ExternalSecureTcpPort)
                         : null;
     HttpEndPoint                = new DnsEndPoint(dto.HttpEndPointIp, dto.HttpEndPointPort);
     AdvertiseHostToClientAs     = dto.AdvertiseHostToClientAs;
     AdvertiseHttpPortToClientAs = dto.AdvertiseHttpPortToClientAs;
     AdvertiseTcpPortToClientAs  = dto.AdvertiseTcpPortToClientAs;
     LastCommitPosition          = dto.LastCommitPosition;
     WriterCheckpoint            = dto.WriterCheckpoint;
     ChaserCheckpoint            = dto.ChaserCheckpoint;
     EpochPosition               = dto.EpochPosition;
     EpochNumber       = dto.EpochNumber;
     EpochId           = dto.EpochId;
     NodePriority      = dto.NodePriority;
     IsReadOnlyReplica = dto.IsReadOnlyReplica;
 }
Exemplo n.º 3
0
        internal MemberInfo(MemberInfoDto dto)
        {
            InstanceId = dto.InstanceId;
            TimeStamp  = dto.TimeStamp;
            State      = dto.State;
            IsAlive    = dto.IsAlive;
            var internalTcpIp = IPAddress.Parse(dto.InternalTcpIp);
            var externalTcpIp = dto.ExternalTcpIp != null?IPAddress.Parse(dto.ExternalTcpIp) : null;

            InternalTcpEndPoint       = new IPEndPoint(internalTcpIp, dto.InternalTcpPort);
            InternalSecureTcpEndPoint = dto.InternalSecureTcpPort > 0
                                ? new IPEndPoint(internalTcpIp, dto.InternalSecureTcpPort)
                                : null;
            ExternalTcpEndPoint       = externalTcpIp != null ? new IPEndPoint(externalTcpIp, dto.ExternalTcpPort) : null;
            ExternalSecureTcpEndPoint = externalTcpIp != null && dto.ExternalSecureTcpPort > 0
                                ? new IPEndPoint(externalTcpIp, dto.ExternalSecureTcpPort)
                                : null;
            InternalHttpEndPoint = new IPEndPoint(IPAddress.Parse(dto.InternalHttpIp), dto.InternalHttpPort);
            ExternalHttpEndPoint = new IPEndPoint(IPAddress.Parse(dto.ExternalHttpIp), dto.ExternalHttpPort);
            LastCommitPosition   = dto.LastCommitPosition;
            WriterCheckpoint     = dto.WriterCheckpoint;
            ChaserCheckpoint     = dto.ChaserCheckpoint;
            EpochPosition        = dto.EpochPosition;
            EpochNumber          = dto.EpochNumber;
            EpochId           = dto.EpochId;
            NodePriority      = dto.NodePriority;
            IsReadOnlyReplica = dto.IsReadOnlyReplica;
        }
        public async Task <IActionResult> Post(MemberInfoDto memberInfo)
        {
            try
            {
                Tuple <MemberInfoDto, string> searchResult = await this.memberService.GetMemberInfo(memberInfo);

                if (searchResult.Item1 == null)
                {
                    return(BadRequest(searchResult.Item2));
                }

                Tuple <MemberInfoDto, string> result = await this.memberService.EditData(new MemberInfoDto()
                {
                    MemberID = searchResult.Item1.MemberID, Password = memberInfo.Password
                }, false);

                if (string.IsNullOrEmpty(result.Item2))
                {
                    return(Ok(result.Item1));
                }

                return(BadRequest(result.Item2));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Reset Password Error >>> Data:{JsonConvert.SerializeObject(memberInfo)}\n{ex}");
                return(BadRequest("重設密碼發生錯誤."));
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 會員編輯
        /// </summary>
        /// <param name="memberInfo">memberInfo</param>
        /// <param name="isStrictPassword">isStrictPassword</param>
        /// <returns>Tuple(MemberInfoDto, string)</returns>
        public async Task <Tuple <MemberInfoDto, string> > EditData(MemberInfoDto memberInfo, bool isStrictPassword)
        {
            try
            {
                MemberData memberData = await this.memberRepository.GetMemebrDataByMemberID(memberInfo.MemberID);

                string updateMemberDataHandlerResult = this.UpdateMemberDataHandler(memberInfo, memberData, isStrictPassword);
                if (!string.IsNullOrEmpty(updateMemberDataHandlerResult))
                {
                    return(Tuple.Create <MemberInfoDto, string>(null, updateMemberDataHandlerResult));
                }

                bool updateMemebrDataResult = await this.memberRepository.UpdateMemebrData(memberData);

                if (!updateMemebrDataResult)
                {
                    return(Tuple.Create <MemberInfoDto, string>(null, "會員編輯更新失敗"));
                }

                return(Tuple.Create(this.mapper.Map <MemberInfoDto>(memberData), string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Edit Data Error >>> Data:{JsonConvert.SerializeObject(memberInfo)} IsStrictPassword:{isStrictPassword}\n{ex}");
                return(Tuple.Create <MemberInfoDto, string>(null, "會員編輯發生錯誤."));
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 會員資料更新處理
        /// </summary>
        /// <param name="memberInfo">memberInfo</param>
        /// <param name="memberData">memberData</param>
        /// <param name="isStrictPassword">isStrictPassword</param>
        /// <returns>string</returns>
        private string UpdateMemberDataHandler(MemberInfoDto memberInfo, MemberData memberData, bool isStrictPassword)
        {
            if (!string.IsNullOrEmpty(memberInfo.BirthDayDate))
            {
                memberData.BirthDayDate = memberInfo.BirthDayDate;
            }

            if (memberInfo.BodyHeight > decimal.Zero)
            {
                memberData.BodyHeight = memberInfo.BodyHeight;
            }

            if (memberInfo.BodyWeight > decimal.Zero)
            {
                memberData.BodyWeight = memberInfo.BodyWeight;
            }

            if (memberInfo.Gender > 0)
            {
                memberData.Gender = memberInfo.Gender;
            }

            if (!string.IsNullOrEmpty(memberInfo.Mobile))
            {
                if (!Utility.IsValidMobile(memberInfo.Mobile))
                {
                    return("行動電話號碼格式驗證失敗.");
                }

                memberData.Mobile = memberInfo.Mobile;
            }

            if (!string.IsNullOrEmpty(memberInfo.Nickname))
            {
                memberData.Nickname = memberInfo.Nickname;
            }

            if (!string.IsNullOrEmpty(memberInfo.Password))
            {
                if (isStrictPassword && !this.IsValidPassword(memberInfo.Password))
                {
                    return("密碼格式錯誤.");
                }

                memberData.Password = Utility.EncryptAES(memberInfo.Password);
            }

            if (!string.IsNullOrEmpty(memberInfo.Photo))
            {
                memberData.Photo = memberInfo.Photo;
            }

            return(string.Empty);
        }
        public async Task <IActionResult> GetMemberInfo(MemberInfoDto memberInfo)
        {
            try
            {
                Tuple <MemberInfoDto, string> result = await this.memberService.GetMemberInfo(memberInfo);

                if (string.IsNullOrEmpty(result.Item2))
                {
                    return(Ok(result.Item1));
                }

                return(BadRequest(result.Item2));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Member Info Error >>> MemberID:{memberInfo.MemberID} Email:{memberInfo.Email} Mobile:{memberInfo.Mobile}\n{ex}");
                return(BadRequest("取得會員資訊發生錯誤."));
            }
        }
Exemplo n.º 8
0
        public async Task <IActionResult> Post(MemberInfoDto memberInfo)
        {
            try
            {
                Tuple <string, string> result = await this.memberService.Login(memberInfo);

                if (string.IsNullOrEmpty(result.Item2))
                {
                    return(Ok(result.Item1));
                }

                return(BadRequest(result.Item2));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Login Error >>> Email:{memberInfo.Email} Password:{memberInfo.Password}\n{ex}");
                return(BadRequest("會員登入發生錯誤."));
            }
        }
Exemplo n.º 9
0
        public async Task <IActionResult> Post(MemberInfoDto memberInfo)
        {
            try
            {
                string result = await this.memberService.Register(memberInfo);

                if (string.IsNullOrEmpty(result))
                {
                    return(Ok("會員註冊成功."));
                }

                return(BadRequest(result));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Register Error >>> Email:{memberInfo.Email} Password:{memberInfo.Password}\n{ex}");
                return(BadRequest("會員註冊發生錯誤."));
            }
        }
Exemplo n.º 10
0
        public async Task <IActionResult> Post(MemberInfoDto memberInfo)
        {
            try
            {
                Tuple <MemberInfoDto, string> result = await this.memberService.EditData(memberInfo, true);

                if (string.IsNullOrEmpty(result.Item2))
                {
                    return(Ok(result.Item1));
                }

                return(BadRequest(result.Item2));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Edit Data Error >>> Data:{JsonConvert.SerializeObject(memberInfo)}\n{ex}");
                return(BadRequest("會員編輯發生錯誤"));
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 會員登入
        /// </summary>
        /// <param name="memberInfo">memberInfo</param>
        /// <returns>Tuple(string, string)</returns>
        public async Task <Tuple <string, string> > Login(MemberInfoDto memberInfo)
        {
            try
            {
                if (string.IsNullOrEmpty(memberInfo.Email) || string.IsNullOrEmpty(memberInfo.Password))
                {
                    return(Tuple.Create(string.Empty, "信箱或密碼無效."));
                }

                MemberData memberData = await this.memberRepository.GetMemebrDataByEmail(memberInfo.Email);

                if (memberData == null)
                {
                    return(Tuple.Create(string.Empty, "無法根據信箱查詢到相關會員."));
                }

                if (!Utility.DecryptAES(memberData.Password).Equals(memberInfo.Password))
                {
                    return(Tuple.Create(string.Empty, "密碼驗證失敗."));
                }

                bool updateMemebrLoginDateResult = await this.memberRepository.UpdateMemebrLoginDate(memberData.MemberID, DateTime.Now);

                if (!updateMemebrLoginDateResult)
                {
                    return(Tuple.Create(string.Empty, "會員登入失敗."));
                }

                return(Tuple.Create(memberData.MemberID, string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Login Error >>> Email:{memberInfo.Email} Password:{memberInfo.Password}\n{ex}");
                return(Tuple.Create(string.Empty, "會員登入發生錯誤."));
            }
        }
Exemplo n.º 12
0
 public ClusterInfoDto(MemberInfoDto[] members)
 {
     Members = members;
 }
Exemplo n.º 13
0
        /// <summary>
        /// 會員註冊
        /// </summary>
        /// <param name="memberInfo">memberInfo</param>
        /// <returns>string</returns>
        public async Task <string> Register(MemberInfoDto memberInfo)
        {
            try
            {
                if (string.IsNullOrEmpty(memberInfo.Email) || string.IsNullOrEmpty(memberInfo.Password))
                {
                    return("信箱或密碼無效.");
                }

                //// 待確認是否驗證
                //if (string.IsNullOrEmpty(memberInfo.Mobile))
                //{
                //    return "行動電話號碼無效.";
                //}

                if (!Utility.IsValidEmail(memberInfo.Email))
                {
                    return("信箱格式錯誤.");
                }

                if (!this.IsValidPassword(memberInfo.Password))
                {
                    return("密碼格式錯誤.");
                }

                //// 待確認是否驗證
                //if (!Utility.IsValidMobile(memberInfo.Mobile))
                //{
                //    return "行動電話號碼格式錯誤.";
                //}

                bool emailHasRegister = await this.memberRepository.GetMemebrDataByEmail(memberInfo.Email) != null;

                if (emailHasRegister)
                {
                    return("此信箱已經被註冊.");
                }

                //// 待確認是否驗證
                //bool mobileHasRegister = await this.memberRepository.GetMemebrDataByMobile(memberInfo.Mobile) != null;
                //if (mobileHasRegister)
                //{
                //    return "此行動電話號碼已經被註冊.";
                //}

                string memberSerialNumber = await this.memberRepository.GetMemberSerialNumber();

                if (string.IsNullOrEmpty(memberSerialNumber))
                {
                    return("取得會員序號失敗.");
                }

                MemberData memberData = new MemberData()
                {
                    CreateDate = DateTime.Now,
                    MemberID   = memberSerialNumber,
                    Email      = memberInfo.Email,
                    Password   = Utility.EncryptAES(memberInfo.Password),
                    Mobile     = memberInfo.Mobile
                };

                bool isSuccess = await this.memberRepository.CreateMemberData(memberData);

                if (!isSuccess)
                {
                    return("會員註冊失敗.");
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Register Error >>> Data:{JsonConvert.SerializeObject(memberInfo)}\n{ex}");
                return("會員註冊發生錯誤.");
            }
        }
Exemplo n.º 14
0
        public void PayCallBack(NotifyCallBackInput input, UserBaseDto userInfo, out string lotteryId)
        {
            using (var conn = GetLotteryConnection())
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    try
                    {
                        #region 支付处理

                        var orderDto = conn.QueryList <OrderInfoInfo>(new { SalesOrderNo = input.Orderid },
                                                                      TableNameConstants.OrderdRecordTable, transaction: transaction).First();
                        var authRank = conn
                                       .QueryList <AuthRankDto>(new { Id = orderDto.AuthRankId }, TableNameConstants.AuthRankTable, transaction: transaction)
                                       .First();

                        var authinfoLast = conn.QueryList <AuthOrderInfo>(new
                        {
                            AuthUserId = userInfo.Id,
                            LotteryId  = orderDto.LotteryId,
                            Status     = AuthStatus.Normal
                        }, TableNameConstants.AuthorizeRecordTable, transaction: transaction).OrderByDescending(p => p.CreateTime).FirstOrDefault();

                        var memberInfo = conn
                                         .QueryList <MemberInfoDto>(new
                        {
                            UserId    = userInfo.Id,
                            LotteryId = orderDto.LotteryId,
                        }, TableNameConstants.MemberTable, transaction: transaction)
                                         .FirstOrDefault();


                        orderDto.PayCost         = input.Realprice;
                        orderDto.Status          = PayStatus.Payed;
                        orderDto.Payer           = userInfo.Id;
                        orderDto.ThirdPayOrderNo = input.Paysapi_id;
                        orderDto.PayOrderNo      = OrderHelper.GenerateOrderNo(OrderType.Pay, SellType.Rmb);
                        orderDto.PayType         = PayType.PaysApi;
                        orderDto.PayTime         = DateTime.Now;

                        conn.Update(orderDto, new { orderDto.Id }, TableNameConstants.OrderdRecordTable,
                                    transaction: transaction);

                        var authinfo = new AuthOrderInfo()
                        {
                            Id          = Guid.NewGuid().ToString(),
                            AuthRankId  = orderDto.AuthRankId,
                            AuthUserId  = userInfo.Id,
                            AuthOrderNo = OrderHelper.GenerateOrderNo(OrderType.Order, SellType.Rmb),
                            //  InvalidDate = DateTime.Now.AddMonths(orderDto.Count),
                            AuthTime     = DateTime.Now,
                            AuthType     = SellType.Rmb,
                            CreateBy     = userInfo.Id,
                            CreateTime   = DateTime.Now,
                            Notes        = authRank.MemberRank.GetChineseDescribe(),
                            Status       = AuthStatus.Normal,
                            SaleRecordId = orderDto.Id,
                            LotteryId    = orderDto.LotteryId
                        };

                        if (authinfoLast == null)
                        {
                            authinfo.InvalidDate = DateTime.Now.AddMonths(orderDto.Count);
                        }
                        else
                        {
                            authinfo.InvalidDate = authinfoLast.InvalidDate.AddMonths(orderDto.Count);

                            authinfoLast.UpdateBy   = userInfo.Id;
                            authinfoLast.UpdateTime = DateTime.Now;
                            authinfoLast.Status     = AuthStatus.Invalid;
                            conn.Update(authinfoLast, new { Id = authinfoLast.Id }, TableNameConstants.AuthorizeRecordTable, transaction);
                        }
                        conn.Insert(authinfo, TableNameConstants.AuthorizeRecordTable, transaction);

                        if (memberInfo == null)
                        {
                            memberInfo = new MemberInfoDto()
                            {
                                Id              = Guid.NewGuid().ToString(),
                                InvalidDate     = authinfo.InvalidDate,
                                LastAuthOrderId = authinfo.Id,
                                LotteryId       = orderDto.LotteryId,
                                MemberRank      = (int)authRank.MemberRank,
                                Status          = MemberStatus.Normal,
                                UserId          = userInfo.Id,
                                CreateBy        = userInfo.Id,
                                CreateTime      = DateTime.Now
                            };
                            conn.Insert(memberInfo, TableNameConstants.MemberTable, transaction);
                        }
                        else
                        {
                            memberInfo.MemberRank  = (int)authRank.MemberRank;
                            memberInfo.InvalidDate = authinfo.InvalidDate;
                            memberInfo.UpdateBy    = userInfo.Id;
                            memberInfo.UpdateTime  = DateTime.Now;
                            conn.Update(memberInfo, new { Id = memberInfo.Id }, TableNameConstants.MemberTable, transaction);
                        }

                        #endregion 支付处理

                        #region 指标配置

                        //var userNormConigs = conn.QueryList<NormConfigDto>(new { UserId = userInfo.Id, IsEnable = 1 }, TableNameConstants.NormConfigTable, transaction: transaction);

                        //if (!userNormConigs.Safe().Any())
                        //{
                        //    var normConfigs = conn.QueryList<NormConfigDto>(new { LotteryId = orderDto.LotteryId, IsDefualt = 1, IsEnable = 1 }, TableNameConstants.NormConfigTable, transaction: transaction);

                        //    foreach (var normConfig in normConfigs)
                        //    {
                        //        normConfig.UserId = userInfo.Id;
                        //        normConfig.Id = Guid.NewGuid().ToString();
                        //        conn.Insert(normConfig, TableNameConstants.NormConfigTable, transaction);
                        //    }
                        //}

                        #endregion 指标配置

                        #region 清除相关缓存

                        var redisKey1 = string.Format(RedisKeyConstants.MEMBERRANK_MEMBERPOWER_KEY, orderDto.LotteryId,
                                                      authRank.MemberRank);
                        var redisKey2 = string.Format(RedisKeyConstants.MEMBERRANK_ROLE_KEY, orderDto.LotteryId,
                                                      authRank.MemberRank);
                        var redisKey3 = string.Format(RedisKeyConstants.USERINFO_KEY, userInfo.Id);
                        var redisKey4 = string.Format(RedisKeyConstants.OPERATION_MEMBERINFO_KEY, orderDto.LotteryId);
                        _cacheManager.RemoveByPattern(redisKey1);
                        _cacheManager.RemoveByPattern(redisKey2);
                        _cacheManager.RemoveByPattern(redisKey3);
                        _cacheManager.RemoveByPattern(redisKey4);
                        transaction.Commit();

                        lotteryId = orderDto.LotteryId;

                        #endregion 清除相关缓存
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        throw;
                    }
                }
            }
        }