|
|
@@ -14,26 +14,103 @@ import (
|
|
|
v2auth_response "git.sxidc.com/student-physical-examination/contract_lock_sdk/model/v2auth/response"
|
|
|
)
|
|
|
|
|
|
-// FindUserByAccountNo 按 accountNo(通常等于 openUserId)查询用户。
|
|
|
-func (c *Client) FindUserByAccountNo(accountNo string) (*UserInfo, error) {
|
|
|
- type result struct {
|
|
|
- Name string `json:"name"`
|
|
|
+type userDetailResult struct {
|
|
|
+ ID flexStringID `json:"id"`
|
|
|
+ BizID flexStringID `json:"bizId"`
|
|
|
+ Name string `json:"name"`
|
|
|
+ Mobile string `json:"mobile"`
|
|
|
+ Status string `json:"status"`
|
|
|
+}
|
|
|
+
|
|
|
+func (r userDetailResult) toUserInfo() *UserInfo {
|
|
|
+ info := &UserInfo{
|
|
|
+ ID: r.ID.String(),
|
|
|
+ BizID: r.BizID.String(),
|
|
|
+ Name: r.Name,
|
|
|
+ Mobile: r.Mobile,
|
|
|
+ Status: r.Status,
|
|
|
+ }
|
|
|
+ if info.ID == "" && info.BizID == "" && info.Name == "" {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ return info
|
|
|
+}
|
|
|
+
|
|
|
+func (p UserLocateParams) toUserQuery() (url.Values, error) {
|
|
|
+ q := url.Values{}
|
|
|
+ switch {
|
|
|
+ case p.UserID != "":
|
|
|
+ q.Set("id", p.UserID)
|
|
|
+ case p.Mobile != "":
|
|
|
+ q.Set("mobile", p.Mobile)
|
|
|
+ case p.CardNo != "":
|
|
|
+ q.Set("cardNo", p.CardNo)
|
|
|
+ case p.OpenUserID != "":
|
|
|
+ q.Set("bizId", p.OpenUserID)
|
|
|
+ case p.AccountNo != "":
|
|
|
+ q.Set("accountNo", p.AccountNo)
|
|
|
+ default:
|
|
|
+ return nil, ErrInvalidParams
|
|
|
+ }
|
|
|
+ return q, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (p UserLocateParams) toUserInfoRequest() (*common.UserInfoRequest, error) {
|
|
|
+ req := &common.UserInfoRequest{}
|
|
|
+ switch {
|
|
|
+ case p.UserID != "":
|
|
|
+ id, err := strconv.ParseInt(p.UserID, 10, 64)
|
|
|
+ if err != nil {
|
|
|
+ return nil, ErrInvalidParams
|
|
|
+ }
|
|
|
+ req.UserId = &id
|
|
|
+ case p.Mobile != "":
|
|
|
+ req.Mobile = p.Mobile
|
|
|
+ case p.CardNo != "":
|
|
|
+ req.CardNo = p.CardNo
|
|
|
+ case p.OpenUserID != "":
|
|
|
+ req.OpenUserId = p.OpenUserID
|
|
|
+ case p.AccountNo != "":
|
|
|
+ req.AccountNo = p.AccountNo
|
|
|
+ default:
|
|
|
+ return nil, ErrInvalidParams
|
|
|
+ }
|
|
|
+ return req, nil
|
|
|
+}
|
|
|
+
|
|
|
+func isUserNotFound(err error) bool {
|
|
|
+ if err == nil {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ msg := err.Error()
|
|
|
+ return strings.Contains(msg, "用户不存在") || strings.Contains(msg, "未查询到用户")
|
|
|
+}
|
|
|
+
|
|
|
+// FindUser 按手机号、证件号、三方用户 id 或登录账号查询契约锁用户;不存在时返回 nil。
|
|
|
+func (c *Client) FindUser(p UserLocateParams) (*UserInfo, error) {
|
|
|
+ q, err := p.toUserQuery()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
}
|
|
|
var resp struct {
|
|
|
apiResponse
|
|
|
- Result result `json:"result"`
|
|
|
+ Result userDetailResult `json:"result"`
|
|
|
}
|
|
|
- q := url.Values{"accountNo": {accountNo}}
|
|
|
- if err := c.getQuery("/user", q, &resp); err != nil {
|
|
|
+ if err = c.getQuery("/user", q, &resp); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- if err := resp.err(); err != nil {
|
|
|
+ if err = resp.err(); err != nil {
|
|
|
+ if isUserNotFound(err) {
|
|
|
+ return nil, nil
|
|
|
+ }
|
|
|
return nil, err
|
|
|
}
|
|
|
- if resp.Result.Name == "" {
|
|
|
- return nil, nil
|
|
|
- }
|
|
|
- return &UserInfo{Name: resp.Result.Name}, nil
|
|
|
+ return resp.Result.toUserInfo(), nil
|
|
|
+}
|
|
|
+
|
|
|
+// FindUserByAccountNo 按 accountNo(通常等于 openUserId)查询用户。
|
|
|
+func (c *Client) FindUserByAccountNo(accountNo string) (*UserInfo, error) {
|
|
|
+ return c.FindUser(UserLocateParams{AccountNo: accountNo})
|
|
|
}
|
|
|
|
|
|
// CreateInternalUser 在契约锁创建内部用户。
|
|
|
@@ -110,8 +187,16 @@ func (c *Client) UserSignSilentURL(openUserID string, applyCompany ApplyCompanyP
|
|
|
|
|
|
// QueryPersonalSignAuthRecords 查询个人静默授权记录。
|
|
|
func (c *Client) QueryPersonalSignAuthRecords(openUserID, status string) ([]AuthRecord, error) {
|
|
|
+ return c.QueryPersonalSignAuthRecordsFor(UserLocateParams{OpenUserID: openUserID}, status)
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) QueryPersonalSignAuthRecordsFor(user UserLocateParams, status string) ([]AuthRecord, error) {
|
|
|
+ authUser, err := user.toUserInfoRequest()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
req := v2auth_request.V2AuthSignsilentRecordRequest{
|
|
|
- AuthUser: &common.UserInfoRequest{OpenUserId: openUserID},
|
|
|
+ AuthUser: authUser,
|
|
|
Status: status,
|
|
|
}
|
|
|
var resp struct {
|