正在显示
13 个修改的文件
包含
220 行增加
和
15 行删除
| @@ -10,6 +10,7 @@ import ( | @@ -10,6 +10,7 @@ import ( | ||
| 10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/domain" | 10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/domain" |
| 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/cache" | 11 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/cache" |
| 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_user" | 12 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_user" |
| 13 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/sms_serve" | ||
| 13 | ) | 14 | ) |
| 14 | 15 | ||
| 15 | // 组织管理 | 16 | // 组织管理 |
| @@ -26,6 +27,7 @@ func (srv AuthService) AuthLogin(loginCommand *command.LoginCommand) (interface{ | @@ -26,6 +27,7 @@ func (srv AuthService) AuthLogin(loginCommand *command.LoginCommand) (interface{ | ||
| 26 | case "signInPassword": | 27 | case "signInPassword": |
| 27 | result, err = srv.SignInPassword(loginCommand.Phone, loginCommand.Password) | 28 | result, err = srv.SignInPassword(loginCommand.Phone, loginCommand.Password) |
| 28 | case "signInCaptcha": | 29 | case "signInCaptcha": |
| 30 | + result, err = srv.SignInCaptcha(loginCommand.Phone, loginCommand.Captcha) | ||
| 29 | default: | 31 | default: |
| 30 | err = errors.New("登录方式无法解析") | 32 | err = errors.New("登录方式无法解析") |
| 31 | } | 33 | } |
| @@ -60,7 +62,25 @@ func (srv AuthService) SignInPassword(account string, password string) (interfac | @@ -60,7 +62,25 @@ func (srv AuthService) SignInPassword(account string, password string) (interfac | ||
| 60 | 62 | ||
| 61 | //SignInCaptcha 使用手机验证码登录 | 63 | //SignInCaptcha 使用手机验证码登录 |
| 62 | func (srv AuthService) SignInCaptcha(phone string, captcha string) (interface{}, error) { | 64 | func (srv AuthService) SignInCaptcha(phone string, captcha string) (interface{}, error) { |
| 63 | - return nil, nil | 65 | + smsServeGateway := sms_serve.NewHttplibHttplibSmsServe() |
| 66 | + err := smsServeGateway.CheckSmsCode(phone, captcha) | ||
| 67 | + if err != nil { | ||
| 68 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 69 | + } | ||
| 70 | + ltoken := domain.LoginToken{ | ||
| 71 | + UserId: 0, | ||
| 72 | + Account: phone, | ||
| 73 | + Platform: domain.LoginPlatformApp, | ||
| 74 | + CompanyId: 0, | ||
| 75 | + } | ||
| 76 | + authcode, err := ltoken.GenerateAuthCode() | ||
| 77 | + if err != nil { | ||
| 78 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 79 | + } | ||
| 80 | + result := map[string]string{ | ||
| 81 | + "authCode": authcode, | ||
| 82 | + } | ||
| 83 | + return result, nil | ||
| 64 | } | 84 | } |
| 65 | 85 | ||
| 66 | //GetAuthAccessToken 获取令牌Token | 86 | //GetAuthAccessToken 获取令牌Token |
| @@ -153,7 +173,7 @@ loopUser1: | @@ -153,7 +173,7 @@ loopUser1: | ||
| 153 | } | 173 | } |
| 154 | } | 174 | } |
| 155 | } | 175 | } |
| 156 | - //TODO | 176 | + |
| 157 | loginToken := domain.LoginToken{ | 177 | loginToken := domain.LoginToken{ |
| 158 | UserId: currentAccess.UserId, | 178 | UserId: currentAccess.UserId, |
| 159 | Account: currentAccess.Account, | 179 | Account: currentAccess.Account, |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + | ||
| 6 | + "github.com/beego/beego/v2/core/validation" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type SendSmsCodeCommand struct { | ||
| 10 | + Phone string `json:"phone" valid:"Required"` | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +func (orgAddCommand *SendSmsCodeCommand) Valid(validation *validation.Validation) { | ||
| 14 | + | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +func (orgAddCommand *SendSmsCodeCommand) ValidateCommand() error { | ||
| 18 | + valid := validation.Validation{} | ||
| 19 | + b, err := valid.Valid(orgAddCommand) | ||
| 20 | + if err != nil { | ||
| 21 | + return err | ||
| 22 | + } | ||
| 23 | + if !b { | ||
| 24 | + for _, validErr := range valid.Errors { | ||
| 25 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | + return nil | ||
| 29 | +} |
| 1 | package service | 1 | package service |
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/core/application" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/mobile/user/command" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/sms_serve" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type UserService struct { | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +//SendSmsCaptcha 发送验证码短信 | ||
| 13 | +func (srv UserService) SendSmsCaptcha(smsCodeCommand *command.SendSmsCodeCommand) error { | ||
| 14 | + smsServeGateway := sms_serve.NewHttplibHttplibSmsServe() | ||
| 15 | + err := smsServeGateway.SendSms(smsCodeCommand.Phone) | ||
| 16 | + if err != nil { | ||
| 17 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 18 | + } | ||
| 19 | + return nil | ||
| 20 | +} |
| @@ -44,7 +44,7 @@ func (menuService *MenuService) MenuList(menuListQuery *query.MenuListQuery) (in | @@ -44,7 +44,7 @@ func (menuService *MenuService) MenuList(menuListQuery *query.MenuListQuery) (in | ||
| 44 | }, nil | 44 | }, nil |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | -// 更新菜单 | 47 | +// 更新自定义菜单 |
| 48 | func (menuService *MenuService) MenuUpdate(menuUpdateCommand *command.MenuUpdateCommand) (interface{}, error) { | 48 | func (menuService *MenuService) MenuUpdate(menuUpdateCommand *command.MenuUpdateCommand) (interface{}, error) { |
| 49 | creationUserGateway := allied_creation_user.NewHttplibAlliedCreationUser( | 49 | creationUserGateway := allied_creation_user.NewHttplibAlliedCreationUser( |
| 50 | menuUpdateCommand.Operator.CompanyId, | 50 | menuUpdateCommand.Operator.CompanyId, |
| @@ -6,10 +6,15 @@ const SERVICE_NAME = "project" | @@ -6,10 +6,15 @@ const SERVICE_NAME = "project" | ||
| 6 | 6 | ||
| 7 | var LOG_LEVEL = "debug" | 7 | var LOG_LEVEL = "debug" |
| 8 | 8 | ||
| 9 | +//天联共创基础模块 | ||
| 9 | var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" | 10 | var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" |
| 10 | 11 | ||
| 12 | +//天联共创用户模块 | ||
| 11 | var ALLIED_CREATION_USER_HOST = "http://localhost:8081" | 13 | var ALLIED_CREATION_USER_HOST = "http://localhost:8081" |
| 12 | 14 | ||
| 15 | +//通用模块短信服务 | ||
| 16 | +var SMS_SERVE_HOST = "http://localhost:8081" | ||
| 17 | + | ||
| 13 | func init() { | 18 | func init() { |
| 14 | if os.Getenv("LOG_LEVEL") != "" { | 19 | if os.Getenv("LOG_LEVEL") != "" { |
| 15 | LOG_LEVEL = os.Getenv("LOG_LEVEL") | 20 | LOG_LEVEL = os.Getenv("LOG_LEVEL") |
| @@ -73,7 +73,7 @@ func (gateway HttplibAlliedCreationUser) MenusUpdate(param ReqMenusUpdate) (*Dat | @@ -73,7 +73,7 @@ func (gateway HttplibAlliedCreationUser) MenusUpdate(param ReqMenusUpdate) (*Dat | ||
| 73 | 73 | ||
| 74 | // MenusRemove 移除菜单 | 74 | // MenusRemove 移除菜单 |
| 75 | func (gateway HttplibAlliedCreationUser) MenusRemove(param ReqMenusRemove) (*DataMenusRemove, error) { | 75 | func (gateway HttplibAlliedCreationUser) MenusRemove(param ReqMenusRemove) (*DataMenusRemove, error) { |
| 76 | - url := gateway.baseUrL + "/menus/" + strconv.FormatInt(param.RoleId, 10) | 76 | + url := gateway.baseUrL + "/menus/" + strconv.FormatInt(param.MenuId, 10) |
| 77 | method := "delete" | 77 | method := "delete" |
| 78 | req := gateway.CreateRequest(url, method) | 78 | req := gateway.CreateRequest(url, method) |
| 79 | log.Logger.Debug("向用户模块请求数据:移除菜单。", map[string]interface{}{ | 79 | log.Logger.Debug("向用户模块请求数据:移除菜单。", map[string]interface{}{ |
| @@ -3,7 +3,7 @@ package allied_creation_user | @@ -3,7 +3,7 @@ package allied_creation_user | ||
| 3 | //更新我喜欢菜单列表 | 3 | //更新我喜欢菜单列表 |
| 4 | type ( | 4 | type ( |
| 5 | ReqFavoriteMenusUpdate struct { | 5 | ReqFavoriteMenusUpdate struct { |
| 6 | - UserId int64 | 6 | + UserId int64 `json:"userId"` |
| 7 | } | 7 | } |
| 8 | 8 | ||
| 9 | DataFavoriteMenusUpdate struct { | 9 | DataFavoriteMenusUpdate struct { |
| @@ -13,8 +13,8 @@ type ( | @@ -13,8 +13,8 @@ type ( | ||
| 13 | //移除我收藏的菜单 | 13 | //移除我收藏的菜单 |
| 14 | type ( | 14 | type ( |
| 15 | ReqFavoriteMenusRemove struct { | 15 | ReqFavoriteMenusRemove struct { |
| 16 | - UserId int64 | ||
| 17 | - MenuCode string | 16 | + UserId int64 `json:"userId"` |
| 17 | + MenuCode string `json:"menuCode"` | ||
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | DataFavoriteMenusRemove struct { | 20 | DataFavoriteMenusRemove struct { |
| @@ -24,7 +24,7 @@ type ( | @@ -24,7 +24,7 @@ type ( | ||
| 24 | //获取我收藏的菜单 | 24 | //获取我收藏的菜单 |
| 25 | type ( | 25 | type ( |
| 26 | ReqFavoriteMenusGet struct { | 26 | ReqFavoriteMenusGet struct { |
| 27 | - UserId int64 | 27 | + UserId int64 `json:"userId"` |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | DataFavoriteMenusGet struct { | 30 | DataFavoriteMenusGet struct { |
| @@ -12,7 +12,7 @@ type ( | @@ -12,7 +12,7 @@ type ( | ||
| 12 | //更新菜单 | 12 | //更新菜单 |
| 13 | type ( | 13 | type ( |
| 14 | ReqMenusUpdate struct { | 14 | ReqMenusUpdate struct { |
| 15 | - MenusId int64 | 15 | + MenusId int64 `json:"menusId"` |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | DataMenusUpdate struct { | 18 | DataMenusUpdate struct { |
| @@ -22,7 +22,7 @@ type ( | @@ -22,7 +22,7 @@ type ( | ||
| 22 | //移除菜单 | 22 | //移除菜单 |
| 23 | type ( | 23 | type ( |
| 24 | ReqMenusRemove struct { | 24 | ReqMenusRemove struct { |
| 25 | - RoleId int64 | 25 | + MenuId int64 `json:"roleId"` |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | DataMenusRemove struct { | 28 | DataMenusRemove struct { |
| @@ -32,7 +32,7 @@ type ( | @@ -32,7 +32,7 @@ type ( | ||
| 32 | //返回菜单 | 32 | //返回菜单 |
| 33 | type ( | 33 | type ( |
| 34 | ReqMenusGet struct { | 34 | ReqMenusGet struct { |
| 35 | - MenuId int64 | 35 | + MenuId int64 `json:"menuId"` |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | DataMenusGet struct { | 38 | DataMenusGet struct { |
| @@ -36,7 +36,7 @@ type ( | @@ -36,7 +36,7 @@ type ( | ||
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | DataRoleSearch struct { | 38 | DataRoleSearch struct { |
| 39 | - Count int64 | 39 | + Count int64 `json:"count"` |
| 40 | Roles []struct { | 40 | Roles []struct { |
| 41 | AccessMenus []Int64String `json:"accessMenus"` | 41 | AccessMenus []Int64String `json:"accessMenus"` |
| 42 | CompanyID Int64String `json:"companyId"` | 42 | CompanyID Int64String `json:"companyId"` |
| @@ -87,8 +87,8 @@ type ( | @@ -87,8 +87,8 @@ type ( | ||
| 87 | //分配角色给多个用户 | 87 | //分配角色给多个用户 |
| 88 | type ( | 88 | type ( |
| 89 | ReqRoleAssign struct { | 89 | ReqRoleAssign struct { |
| 90 | - RoleId int64 | ||
| 91 | - UserIds []int64 | 90 | + RoleId int64 `json:"roleId"` |
| 91 | + UserIds []int64 `json:"userIds"` | ||
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | DataRoleAssign struct { | 94 | DataRoleAssign struct { |
| 1 | +package sms_serve | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "encoding/json" | ||
| 5 | + "fmt" | ||
| 6 | + "time" | ||
| 7 | + | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/log" | ||
| 9 | + | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/constant" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +//公共短信服务模块 | ||
| 15 | +type HttplibSmsServe struct { | ||
| 16 | + service_gateway.BaseServiceGateway | ||
| 17 | + baseUrL string | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func NewHttplibHttplibSmsServe() *HttplibSmsServe { | ||
| 21 | + return &HttplibSmsServe{ | ||
| 22 | + BaseServiceGateway: service_gateway.BaseServiceGateway{ | ||
| 23 | + ConnectTimeout: 100 * time.Second, | ||
| 24 | + ReadWriteTimeout: 30 * time.Second, | ||
| 25 | + }, | ||
| 26 | + baseUrL: constant.ALLIED_CREATION_USER_HOST, | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +//SendSms 公共短信验证码服务 发送验证码 | ||
| 32 | +func (smsServe HttplibSmsServe) SendSms(phone string) error { | ||
| 33 | + url := smsServe.baseUrL + "/service/sendSms" | ||
| 34 | + method := "post" | ||
| 35 | + req := smsServe.CreateRequest(url, method) | ||
| 36 | + param := map[string]string{ | ||
| 37 | + "phone": phone, | ||
| 38 | + } | ||
| 39 | + log.Logger.Debug("向公共短信验证码服务请求数据:短信验证码接口。", map[string]interface{}{ | ||
| 40 | + "api": method + ":" + url, | ||
| 41 | + "param": param, | ||
| 42 | + }) | ||
| 43 | + req, err := req.JSONBody(param) | ||
| 44 | + if err != nil { | ||
| 45 | + return fmt.Errorf("请求公共短信验证码服务失败:%w", err) | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + byteResult, err := req.Bytes() | ||
| 49 | + if err != nil { | ||
| 50 | + return fmt.Errorf("获取公共短信验证码服务失败:%w", err) | ||
| 51 | + } | ||
| 52 | + log.Logger.Debug("获取公共短信验证码服务请求数据", map[string]interface{}{ | ||
| 53 | + "result": string(byteResult), | ||
| 54 | + }) | ||
| 55 | + var result service_gateway.GatewayResponse | ||
| 56 | + err = json.Unmarshal(byteResult, &result) | ||
| 57 | + if err != nil { | ||
| 58 | + return fmt.Errorf("解析更新组织:%w", err) | ||
| 59 | + } | ||
| 60 | + if result.Code != 0 { | ||
| 61 | + return fmt.Errorf(result.Msg) | ||
| 62 | + } | ||
| 63 | + return nil | ||
| 64 | +} | ||
| 65 | + | ||
| 66 | +//CheckSmsCode 公共短信验证码服务 校验验证码 | ||
| 67 | +func (smsServe HttplibSmsServe) CheckSmsCode(phone string, code string) error { | ||
| 68 | + url := smsServe.baseUrL + "/service/sendSms" | ||
| 69 | + method := "post" | ||
| 70 | + req := smsServe.CreateRequest(url, method) | ||
| 71 | + param := map[string]string{ | ||
| 72 | + "phone": phone, | ||
| 73 | + "code": code, | ||
| 74 | + } | ||
| 75 | + log.Logger.Debug("向公共短信验证码服务请求数据:短信验证码接口。", map[string]interface{}{ | ||
| 76 | + "api": method + ":" + url, | ||
| 77 | + "param": param, | ||
| 78 | + }) | ||
| 79 | + req, err := req.JSONBody(param) | ||
| 80 | + if err != nil { | ||
| 81 | + return fmt.Errorf("请求公共短信验证码服务失败:%w", err) | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + byteResult, err := req.Bytes() | ||
| 85 | + if err != nil { | ||
| 86 | + return fmt.Errorf("获取公共短信验证码服务失败:%w", err) | ||
| 87 | + } | ||
| 88 | + log.Logger.Debug("获取公共短信验证码服务请求数据", map[string]interface{}{ | ||
| 89 | + "result": string(byteResult), | ||
| 90 | + }) | ||
| 91 | + var result service_gateway.GatewayResponse | ||
| 92 | + err = json.Unmarshal(byteResult, &result) | ||
| 93 | + if err != nil { | ||
| 94 | + return fmt.Errorf("解析更新组织:%w", err) | ||
| 95 | + } | ||
| 96 | + if result.Code != 0 { | ||
| 97 | + return fmt.Errorf(result.Msg) | ||
| 98 | + } | ||
| 99 | + return nil | ||
| 100 | +} |
| 1 | +package mobile_client | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/mobile/user/command" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/mobile/user/service" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type UserController struct { | ||
| 9 | + baseController | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +func (controller *UserController) SendSmsCode() { | ||
| 13 | + authService := service.UserService{} | ||
| 14 | + smsCodeCmd := &command.SendSmsCodeCommand{} | ||
| 15 | + err := controller.Unmarshal(smsCodeCmd) | ||
| 16 | + if err != nil { | ||
| 17 | + controller.Response(nil, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + err = authService.SendSmsCaptcha(smsCodeCmd) | ||
| 21 | + controller.Response(nil, err) | ||
| 22 | +} |
pkg/port/beego/routers/mobile_user_router.go
0 → 100644
| 1 | +package routers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/server/web" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/port/beego/controllers/mobile_client" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +func init() { | ||
| 9 | + web.Router("/v1/app/users/smsCode", &mobile_client.UserController{}, "Post:SendSmsCode") | ||
| 10 | +} |
-
请 注册 或 登录 后发表评论