新增实名认证,新增检测子级
This commit is contained in:
parent
f4e1ab3c4f
commit
28afabd449
@ -27,6 +27,14 @@ func (r *AdminDeptDao) GetAdminDeptList(maps interface{}) (m []*model.AdminDept,
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (r *AdminDeptDao) GetAdminDeptByParentId(parentId int64) (m *model.AdminDept, err error) {
|
||||
err = global.Db.Where("parent_id = ?", parentId).First(&m).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// AddAdminDept 新增部门
|
||||
func (r *AdminDeptDao) AddAdminDept(tx *gorm.DB, model *model.AdminDept) (*model.AdminDept, error) {
|
||||
if err := tx.Create(model).Error; err != nil {
|
||||
|
||||
@ -36,6 +36,15 @@ func (r *AdminMenuDao) GetAdminMenuById(menuId int64) (m *model.AdminMenu, err e
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetAdminMenuByParentId 获取菜单数据-菜单id
|
||||
func (r *AdminMenuDao) GetAdminMenuByParentId(parentId int64) (m *model.AdminMenu, err error) {
|
||||
err = global.Db.Where("parent_id = ?", parentId).First(&m).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetAdminMenuListNormalSortOrderNum 获取全部正常菜单列表-排序
|
||||
func (r *AdminMenuDao) GetAdminMenuListNormalSortOrderNum() (m []*model.AdminMenu, err error) {
|
||||
err = global.Db.Where("menu_status = ?", 1).Order("order_num asc").Find(&m).Error
|
||||
|
||||
@ -126,6 +126,13 @@ func (r *DeptService) DeleteDept(deleteDeptRequest requests.DeleteDept) (bool, e
|
||||
return false, errors.New("删除失败")
|
||||
}
|
||||
|
||||
// 检测部门是否存在子集
|
||||
childrenAdminDept, err := adminDeptDao.GetAdminDeptByParentId(v)
|
||||
if err != nil || childrenAdminDept != nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New("存在下级部门,删除失败")
|
||||
}
|
||||
|
||||
// 修改部门为删除
|
||||
data := make(map[string]interface{})
|
||||
data["dept_status"] = 2
|
||||
|
||||
@ -280,6 +280,13 @@ func (r *MenuService) DeleteMenu(c *gin.Context, DeleteMenuRequest requests.Dele
|
||||
return false, errors.New("系统菜单,请勿删除")
|
||||
}
|
||||
|
||||
// 检测菜单是否存在子级
|
||||
childrenAdminMenu, err := adminMenuDao.GetAdminMenuByParentId(v)
|
||||
if err != nil || childrenAdminMenu != nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New("存在下级菜单,删除失败")
|
||||
}
|
||||
|
||||
// 删除菜单关联api
|
||||
err = adminMenuApiDao.DeleteAdminMenuApiByMenuId(tx, v)
|
||||
if err != nil {
|
||||
|
||||
@ -15,6 +15,7 @@ import (
|
||||
"hospital-admin-api/config"
|
||||
"hospital-admin-api/extend/ca"
|
||||
"hospital-admin-api/extend/tencentIm"
|
||||
"hospital-admin-api/extend/verifyDun"
|
||||
"hospital-admin-api/global"
|
||||
"hospital-admin-api/utils"
|
||||
"strconv"
|
||||
@ -731,6 +732,18 @@ func (r *UserDoctorService) AddUserDoctor(userId string, req requests.AddUserDoc
|
||||
return false, errors.New("身份证号错误")
|
||||
}
|
||||
|
||||
// if config.C.Env == "prod" {
|
||||
// 身份证号码实证认证
|
||||
res, err = verifyDun.CheckIdCard(req.CardName, req.CardNum)
|
||||
if err != nil {
|
||||
return false, errors.New(err.Error())
|
||||
}
|
||||
|
||||
if !res {
|
||||
return false, errors.New("身份证认证失败")
|
||||
}
|
||||
// }
|
||||
|
||||
// 检测身份证号是否重复
|
||||
maps = make(map[string]interface{})
|
||||
maps["card_num"] = req.CardNum
|
||||
|
||||
1
extend/verifyDun/bankCard.go
Normal file
1
extend/verifyDun/bankCard.go
Normal file
@ -0,0 +1 @@
|
||||
package verifyDun
|
||||
32
extend/verifyDun/base.go
Normal file
32
extend/verifyDun/base.go
Normal file
@ -0,0 +1,32 @@
|
||||
package verifyDun
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"net/url"
|
||||
"sort"
|
||||
)
|
||||
|
||||
const (
|
||||
apiUrl = "https://verify.dun.163.com" // 本机认证服务身份证实人认证在线检测接口地址
|
||||
version = "v1"
|
||||
secretId = "0bcf9a5633eb9ca9d196583e67c3762b" // 产品密钥ID,产品标识
|
||||
secretKey = "b31e8220d115b6531a22ee71d1e89936" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
|
||||
)
|
||||
|
||||
// GenSignature 生成签名信息
|
||||
func GenSignature(params url.Values) string {
|
||||
var paramStr string
|
||||
keys := make([]string, 0, len(params))
|
||||
for k := range params {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, key := range keys {
|
||||
paramStr += key + params[key][0]
|
||||
}
|
||||
paramStr += secretKey
|
||||
md5Reader := md5.New()
|
||||
md5Reader.Write([]byte(paramStr))
|
||||
return hex.EncodeToString(md5Reader.Sum(nil))
|
||||
}
|
||||
82
extend/verifyDun/idCard.go
Normal file
82
extend/verifyDun/idCard.go
Normal file
@ -0,0 +1,82 @@
|
||||
package verifyDun
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 请求返回值
|
||||
type responseData struct {
|
||||
Code int `json:"code"` // 接口调用状态。200:正常;其它值:调用出错
|
||||
Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok
|
||||
Result result `json:"result"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明
|
||||
}
|
||||
|
||||
type result struct {
|
||||
Status int `json:"status"` // 认证结果,1-通过 2-不通过(原因见reasonType) 0-待定
|
||||
ReasonType int `json:"reasonType"` // 原因详情
|
||||
TaskId string `json:"taskId"` // 本次请求数据标识,可以根据该标识在控制台进行数据查询
|
||||
IsPayed int `json:"isPayed"` // 本次请求是否收费标识,1代表收费,0代表不收费
|
||||
}
|
||||
|
||||
// CheckIdCard 实证认证
|
||||
func CheckIdCard(name, cardNo string) (bool, error) {
|
||||
formData := url.Values{}
|
||||
formData.Set("name", name)
|
||||
formData.Set("cardNo", cardNo)
|
||||
formData.Set("secretId", secretId)
|
||||
formData.Set("businessId", "45a8fd254b4649e9bd25d773ac7ab666")
|
||||
formData.Set("version", "v1")
|
||||
formData.Set("timestamp", strconv.FormatInt(time.Now().UnixNano()/1000000, 10))
|
||||
formData.Set("nonce", string(make([]byte, 32)))
|
||||
formData.Set("signature", GenSignature(formData))
|
||||
|
||||
resp, err := http.Post(apiUrl+"/"+version+"/idcard/check", "application/x-www-form-urlencoded", strings.NewReader(formData.Encode()))
|
||||
if err != nil {
|
||||
return false, errors.New("调用API接口失败:" + err.Error())
|
||||
}
|
||||
|
||||
defer func(Body io.ReadCloser) {
|
||||
_ = Body.Close()
|
||||
}(resp.Body)
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
var responseData responseData
|
||||
err = json.Unmarshal(body, &responseData)
|
||||
if err != nil {
|
||||
// json解析失败
|
||||
return false, err
|
||||
}
|
||||
|
||||
if responseData.Code != 200 {
|
||||
if responseData.Msg != "" {
|
||||
return false, errors.New(responseData.Msg)
|
||||
} else {
|
||||
return false, errors.New("身份证认证失败")
|
||||
}
|
||||
}
|
||||
|
||||
if responseData.Result.Status == 2 {
|
||||
if responseData.Result.ReasonType == 2 {
|
||||
return false, errors.New("输入姓名和身份证号不一致")
|
||||
} else if responseData.Result.ReasonType == 3 {
|
||||
return false, errors.New("查无此身份证")
|
||||
} else if responseData.Result.ReasonType == 4 {
|
||||
return false, errors.New("身份证照片信息与输入信息不一致")
|
||||
} else {
|
||||
return false, errors.New("身份证认证失败")
|
||||
}
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
1
go.mod
1
go.mod
@ -21,6 +21,7 @@ require (
|
||||
require (
|
||||
github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 // indirect
|
||||
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible // indirect
|
||||
github.com/bitly/go-simplejson v0.5.1 // indirect
|
||||
github.com/bwmarrin/snowflake v0.3.0 // indirect
|
||||
github.com/bytedance/sonic v1.9.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||
|
||||
2
go.sum
2
go.sum
@ -58,6 +58,8 @@ github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCE
|
||||
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible h1:KpbJFXwhVeuxNtBJ74MCGbIoaBok2uZvkD7QXp2+Wis=
|
||||
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
|
||||
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
|
||||
github.com/bitly/go-simplejson v0.5.1 h1:xgwPbetQScXt1gh9BmoJ6j9JMr3TElvuIyjR8pgdoow=
|
||||
github.com/bitly/go-simplejson v0.5.1/go.mod h1:YOPVLzCfwK14b4Sff3oP1AmGhI9T9Vsg84etUnlyp+Q=
|
||||
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
|
||||
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
|
||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user