예제 #1
0
        public ResponseModel UserStoreMoney(UserStoreMoneyAdd userStoreParam)
        {
            //1.入参校验
            ResponseModel checkResult;

            if (userStoreParam == null)
            {
                return(Fail(ErrorCodeEnum.StoreMoneyParamsIsNull));
            }

            //2.校验Model
            if (CheckModelParams(out checkResult))
            {
                return(checkResult);
            }

            //3. 校验储值金额和实收金额,说明:【实收金额不能大于储值金额】
            if (userStoreParam.RealMoney > userStoreParam.RechargeMoney)
            {
                return(Fail(ErrorCodeEnum.StoreMoneyIsMoreThanRechargeMoney));
            }

            //4.储值时,若不是会员,则要求会员手机号和姓名必填,不能为空
            if (userStoreParam.UserId == 0)
            {
                if (string.IsNullOrWhiteSpace(userStoreParam.Phone) || string.IsNullOrWhiteSpace(userStoreParam.UserName))
                {
                    return(Fail(ErrorCodeEnum.PhoneAndUserNameIsNull));
                }
            }

            return(_userStoreMoneyCardService.UserStoreMoney(GetUserContext(), userStoreParam));
        }
        /// <summary>
        ///     更新会员表储值金额并记录储值日志
        /// </summary>
        /// <param name="userContext"></param>
        /// <param name="userStoreParam"></param>
        /// <param name="userInfo"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        private bool LoggingStoreMoneyLog(UserContext userContext, UserStoreMoneyAdd userStoreParam,
                                          UserInfoDetail userInfo, IDbTransaction transaction)
        {
            var logInfoResult = true;
            var updateRequest = new UserInfoDetail
            {
                Uid         = userStoreParam.UserId,
                UStoreMoney = userInfo.UStoreMoney + userStoreParam.RechargeMoney
            };
            var storeResult = _userInfoRepository.Update <UserInfoDetail>(updateRequest, item => new { item.UStoreMoney },
                                                                          transaction);

            if (storeResult)
            {
                var storeLogInfo = new UserLogInfo
                {
                    AccId          = userContext.AccId,
                    OriginalAccId  = userContext.AccId,
                    UId            = userStoreParam.UserId,
                    LogType        = (int)UserLogTypeEnum.StoreChange,
                    ItemType       = (int)UserLogItemTypeEnum.Shopping,
                    OriginalVal    = userInfo.UStoreMoney,
                    EditMoney      = userStoreParam.RealMoney,
                    EditVal        = userStoreParam.RechargeMoney,
                    FinalVal       = userInfo.UStoreMoney + userStoreParam.RechargeMoney,
                    LogTime        = DateTime.Now,
                    OperatorTime   = DateTime.Now,
                    OperatorId     = userContext.UserId,
                    OperatorIp     = userContext.IpAddress,
                    Remark         = userStoreParam.Remark,
                    Flag           = string.Empty,
                    FlagStatus     = 0,
                    FlagStatusTime = DateTime.Now,
                    EditMoneyType  = userStoreParam.PayType,
                    AddedLgUserId  = userStoreParam.Salesman,
                    BindCardId     = 0
                };

                //记录日志
                logInfoResult = _userLogRepository.Insert(storeLogInfo, transaction);
            }
            return(logInfoResult);
        }
        /// <summary>
        ///     会员充值
        /// </summary>
        /// <param name="userContext"></param>
        /// <param name="userStoreParam"></param>
        /// <returns></returns>
        public ResponseModel UserStoreMoney(UserContext userContext, UserStoreMoneyAdd userStoreParam)
        {
            var tranFlag = false;
            var userInfo = new UserInfoDetail();

            if (userStoreParam.UserId > 0)
            {
                userInfo = _userInfoRepository.Find(x => x.Uid == userStoreParam.UserId && x.AccId == userContext.AccId);
            }

            var conn = _useraddDapperRepository.Connection;

            conn.Open();
            var trans = conn.BeginTransaction();

            try
            {
                //1.先获取充值会员的个人信息(储值余额、计次卡、上次购买时间等)
                if (userStoreParam.UserId == 0)
                {
                    //1.1 新会员储值,先增加会员,然后充值
                    if (userStoreParam.UserId == 0)
                    {
                        var userNo = _userService.GetUserNewNo(userContext.AccId).Data.ToString();

                        //1.2 新增会员,储值
                        var userHandel = new UserHandle
                        {
                            Id             = userStoreParam.UserId,
                            UserNo         = userNo,
                            UserPhone      = userStoreParam.Phone,
                            UserName       = userStoreParam.UserName,
                            UserStoreMoney = userStoreParam.RechargeMoney,
                            PinYin         = Helper.GetPinyin(userStoreParam.UserName),
                            PY             = Helper.GetInitials(userStoreParam.UserName),
                            OperatorId     = userContext.UserId,
                            AccId          = userContext.AccId
                        };
                        var userInsertResult = _useraddDapperRepository.Insert(userHandel, trans);
                        if (userInsertResult)
                        {
                            //1.3 记录日志
                            var storeLogInfo = new UserLogInfo
                            {
                                AccId          = userContext.AccId,
                                OriginalAccId  = userContext.AccId,
                                UId            = userHandel.Id,
                                LogType        = (int)UserLogTypeEnum.StoreChange,
                                ItemType       = (int)UserLogItemTypeEnum.Shopping,
                                OriginalVal    = 0,
                                EditMoney      = userStoreParam.RealMoney,
                                EditVal        = userStoreParam.RechargeMoney,
                                FinalVal       = userStoreParam.RechargeMoney,
                                LogTime        = DateTime.Now,
                                OperatorTime   = DateTime.Now,
                                OperatorId     = userContext.UserId,
                                OperatorIp     = userContext.IpAddress,
                                Remark         = userStoreParam.Remark,
                                Flag           = string.Empty,
                                FlagStatus     = 0,
                                FlagStatusTime = DateTime.Now,
                                EditMoneyType  = userStoreParam.PayType,
                                AddedLgUserId  = userStoreParam.Salesman,
                                BindCardId     = 0
                            };
                            if (_userLogRepository.Insert(storeLogInfo, trans))
                            {
                                tranFlag = true;
                            }
                        }
                    }
                }
                else
                {
                    //2.储值并记录日志
                    tranFlag = LoggingStoreMoneyLog(userContext, userStoreParam, userInfo, trans);
                }
            }
            catch (Exception)
            {
                trans.Rollback();
                tranFlag = false;
                throw;
            }
            finally
            {
                if (tranFlag)
                {
                    trans.Commit();
                    //3.发送提醒短信
                    if (userStoreParam.SendMsg)
                    {
                        Task.Run(() => { _shardService.SendSms(userContext); });
                    }
                }
                else
                {
                    trans.Rollback();
                }
                trans.Dispose();
                conn.Close();
            }
            //4.返回数据
            return(new ResponseModel
            {
                Code = tranFlag ? (int)ErrorCodeEnum.Success : (int)ErrorCodeEnum.StoreMoneyFailed,
                Data = userStoreParam
            });
        }