新增修改医生

This commit is contained in:
2023-07-07 17:58:38 +08:00
parent a38fe237dd
commit e027c03950
17 changed files with 1345 additions and 41 deletions
+1 -1
View File
@@ -115,7 +115,7 @@ func (r *UserDoctor) PutUserDoctor(c *gin.Context) {
userDoctorService := service.UserDoctorService{}
_, err = userDoctorService.PutUserDoctor(doctorId, userDoctorRequest.PutUserDoctor)
if err != nil {
responses.FailWithMessage("修改失败", c)
responses.FailWithMessage(err.Error(), c)
return
}
+9
View File
@@ -98,3 +98,12 @@ func (r *AdminMenuDao) GetAdminMenuId() (m []int64, err error) {
}
return m, nil
}
// GetAdminMenuListByIdWithIn 获取全部正常菜单列表-in
func (r *AdminMenuDao) GetAdminMenuListByIdWithIn(menuIds []int64) (m []*model.AdminMenu, err error) {
err = global.Db.Where("menu_id in ?", menuIds).Where("menu_status = ?", 1).Order("order_num asc").Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
+101
View File
@@ -0,0 +1,101 @@
package dao
import (
"gorm.io/gorm"
"gorm.io/gorm/clause"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
)
type UserDao struct {
}
// GetUserById 获取用户数据-用户id
func (r *UserDao) GetUserById(userId int64) (m *model.User, err error) {
err = global.Db.First(&m, userId).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserPreloadById 获取用户数据-加载全部关联-用户id
func (r *UserDao) GetUserPreloadById(userId int64) (m *model.User, err error) {
err = global.Db.Preload(clause.Associations).First(&m, userId).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteUser 删除用户
func (r *UserDao) DeleteUser(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.User{}).Error
if err != nil {
return err
}
return nil
}
// DeleteUserById 删除用户-用户id
func (r *UserDao) DeleteUserById(tx *gorm.DB, userId int64) error {
if err := tx.Delete(&model.User{}, userId).Error; err != nil {
return err
}
return nil
}
// EditUser 修改用户
func (r *UserDao) EditUser(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.User{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// EditUserById 修改用户-用户id
func (r *UserDao) EditUserById(tx *gorm.DB, userId int64, data interface{}) error {
err := tx.Model(&model.User{}).Where("user_id = ?", userId).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetUserList 获取用户列表
func (r *UserDao) GetUserList(maps interface{}) (m []*model.User, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserDaoPageSearch 获取用户列表-分页
func (r *UserDao) GetUserDaoPageSearch(getUserPage requests.GetUserPage, page, pageSize int) (m []*model.User, total int64, err error) {
var totalRecords int64
// 构建查询条件
query := global.Db.Model(&model.User{})
// 查询总数量
if err := query.Count(&totalRecords).Error; err != nil {
return nil, 0, err
}
err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error
if err != nil {
return nil, 0, err
}
return m, totalRecords, nil
}
// AddUser 新增用户
func (r *UserDao) AddUser(tx *gorm.DB, model *model.User) (*model.User, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}
+71
View File
@@ -0,0 +1,71 @@
package dao
import (
"gorm.io/gorm"
"hospital-admin-api/api/model"
"hospital-admin-api/global"
)
type UserCaCert struct {
}
// GetUserCaCertById 获取监管证书数据-监管证书id
func (r *UserCaCert) GetUserCaCertById(certId int64) (m *model.UserCaCert, err error) {
err = global.Db.First(&m, certId).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserCaCertByUserId 获取监管证书数据-监管证书id
func (r *UserCaCert) GetUserCaCertByUserId(userId int64) (m *model.UserCaCert, err error) {
err = global.Db.Where("user_id = ?", userId).First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserCaCertListByUserId 获取监管证书数据-监管证书id
func (r *UserCaCert) GetUserCaCertListByUserId(userId int64) (m []*model.UserCaCert, err error) {
err = global.Db.Where("user_id = ?", userId).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// AddUserCaCert 新增监管证书
func (r *UserCaCert) AddUserCaCert(tx *gorm.DB, model *model.UserCaCert) (*model.UserCaCert, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}
// GetUserCaCertList 获取监管证书列表
func (r *UserCaCert) GetUserCaCertList(maps interface{}) (m []*model.UserCaCert, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteUserCaCertById 删除监管证书-监管证书id
func (r *UserCaCert) DeleteUserCaCertById(tx *gorm.DB, certId int64) error {
if err := tx.Delete(&model.UserCaCert{}, certId).Error; err != nil {
return err
}
return nil
}
// EditUserCaCertById 修改监管证书-监管证书id
func (r *UserCaCert) EditUserCaCertById(tx *gorm.DB, certId int64, data interface{}) error {
err := tx.Model(&model.UserCaCert{}).Where("cert_id = ?", certId).Updates(data).Error
if err != nil {
return err
}
return nil
}
+20
View File
@@ -0,0 +1,20 @@
package model
// UserCaCert 医师/药师ca监管证书表
type UserCaCert struct {
CertId int64 `gorm:"column:cert_id;type:bigint(19);primary_key;comment:主键id" json:"cert_id"`
UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id(系统证书时为null)" json:"user_id"`
IsSystem int `gorm:"column:is_system;type:tinyint(1);default:0;comment:是否系统证书(0:否 1:是)" json:"is_system"`
Type int `gorm:"column:type;type:tinyint(1);comment:证书类型(1:线下 2:线上)" json:"type"`
CertBase64 string `gorm:"column:cert_base64;type:text;comment:签名值证书" json:"cert_base64"`
CertChainP7 string `gorm:"column:cert_chain_p7;type:text;comment:证书链" json:"cert_chain_p7"`
CertSerialNumber string `gorm:"column:cert_serial_number;type:varchar(100);comment:证书序列号" json:"cert_serial_number"`
CaPin string `gorm:"column:ca_pin;type:varchar(100);comment:ca认证pin值" json:"ca_pin"`
IsSignConfig int `gorm:"column:is_sign_config;type:tinyint(1);default:0;comment:是否已添加签章配置(第一次需申请)" json:"is_sign_config"`
SignConfig string `gorm:"column:sign_config;type:text;comment:签章坐标配置" json:"sign_config"`
Model
}
func (m *UserCaCert) TableName() string {
return "gdxz_user_ca_cert"
}
+9 -8
View File
@@ -16,28 +16,29 @@ type RoleService struct{}
// GetRoleMenuList 获取角色菜单
func (r *RoleService) GetRoleMenuList(roleId int64, isAdmin bool) ([]*roleResponse.GetRoleMenuList, error) {
// 获取角色菜单
AdminRoleMenuDao := dao.AdminRoleMenuDao{}
AdminMenuDao := dao.AdminMenuDao{}
adminRoleMenuDao := dao.AdminRoleMenuDao{}
adminMenuDao := dao.AdminMenuDao{}
var menuIDs []int64
var err error
if isAdmin {
// 超级管理员
menuIDs, err = AdminMenuDao.GetAdminMenuId()
menuIDs, err = adminMenuDao.GetAdminMenuId()
if err != nil {
return []*roleResponse.GetRoleMenuList{}, nil
return nil, nil
}
} else {
menuIDs, err = AdminRoleMenuDao.GetAdminRoleMenuIdByRoleId(roleId)
// 普通用户
menuIDs, err = adminRoleMenuDao.GetAdminRoleMenuIdByRoleId(roleId)
if err != nil {
return []*roleResponse.GetRoleMenuList{}, nil
return nil, nil
}
}
// 获取全部正常非按钮菜单列表
adminMenu, _ := AdminMenuDao.GetAdminMenuListNonButtonNormalSortOrderNum()
adminMenu, _ := adminMenuDao.GetAdminMenuListNonButtonNormalSortOrderNum()
if adminMenu == nil {
return []*roleResponse.GetRoleMenuList{}, nil
return nil, nil
}
var getRoleMenuListResponse []*roleResponse.GetRoleMenuList
+143 -25
View File
@@ -5,6 +5,8 @@ import (
"hospital-admin-api/api/dao"
"hospital-admin-api/api/requests"
"hospital-admin-api/config"
"hospital-admin-api/extend/ca"
"hospital-admin-api/extend/tencentIm"
"hospital-admin-api/global"
"strconv"
"strings"
@@ -15,6 +17,7 @@ type UserDoctorService struct {
// PutUserDoctor 修改医生
func (r *UserDoctorService) PutUserDoctor(doctorId int64, userDoctorRequest requests.PutUserDoctor) (bool, error) {
// 获取医生数据
userDoctorDao := dao.UserDoctorDao{}
userDoctor, err := userDoctorDao.GetUserDoctorById(doctorId)
@@ -29,17 +32,22 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, userDoctorRequest requ
return false, errors.New("医生详情数据错误")
}
// 医生数据
userDoctorData := make(map[string]interface{})
// 获取用户数据
userDao := dao.UserDao{}
user, err := userDao.GetUserById(userDoctor.UserId)
if err != nil {
return false, errors.New("医生数据错误")
}
// 医生详情数据
userDoctorInfoData := make(map[string]interface{})
userDoctorData := make(map[string]interface{}) // 医生数据
userDoctorInfoData := make(map[string]interface{}) // 医生详情数据
userData := make(map[string]interface{}) // 用户数据
// 处理头像
userDoctorRequest.Avatar = strings.Replace(userDoctorRequest.Avatar, config.C.Oss.OssCustomDomainName, "", 1)
if userDoctor.Avatar != userDoctorRequest.Avatar {
userDoctorData["avatar"] = userDoctorRequest.Avatar
userDoctorInfoData["avatar"] = userDoctorRequest.Avatar
avatar := strings.Replace(userDoctorRequest.Avatar, config.C.Oss.OssCustomDomainName, "", 1)
if userDoctor.Avatar != avatar {
userDoctorData["avatar"] = avatar
userData["avatar"] = avatar
}
// 处理职称
@@ -53,6 +61,9 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, userDoctorRequest requ
return false, errors.New("科室错误")
}
if departmentCustomId == 0 && userDoctor.DepartmentCustomId != 0 {
return false, errors.New("未选择新的科室")
}
if userDoctor.DepartmentCustomId != departmentCustomId || userDoctor.DepartmentCustomName != userDoctorRequest.DepartmentCustomName {
// 获取科室数据
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustom{}
@@ -237,25 +248,132 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, userDoctorRequest requ
}
}
// 判断头像是否修改,同步修改im
// 判断科室是否修改,同步修改ca平台
// 判断签名图片是否修改,同步修改ca平台
// 修改医生数据
if len(userDoctorData) != 0 {
err = userDao.EditUserById(tx, userDoctor.UserId, userData)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
}
// _, ok := userDoctorData["department_custom_id"]
// if ok {
// // 变更科室
//
// }
//
// paramMap := map[string]string{
// "userName": "zj",
// "age": "19",
// }
//
// sign := ca.GenerateSignature(paramMap)
// fmt.Println(sign)
// 判断头像是否修改,同步修改im
if userDoctor.Avatar != avatar {
profileItem := []tencentIm.ProfileItem{
{
Tag: "Tag_Profile_IM_Image",
Value: userDoctorRequest.Avatar,
},
}
res, err := tencentIm.SetProfile(strconv.FormatInt(userDoctor.UserId, 10), profileItem)
if err != nil || res != true {
tx.Rollback()
return false, errors.New("头像设置失败")
}
}
// 判断科室是否修改,同步修改ca平台
if userDoctor.DepartmentCustomId != departmentCustomId {
// 获取科室数据
hospitalDepartmentCustomDao := dao.HospitalDepartmentCustom{}
hospitalDepartmentCustom, err := hospitalDepartmentCustomDao.GetHospitalDepartmentCustomById(departmentCustomId)
if err != nil || hospitalDepartmentCustom == nil {
tx.Rollback()
return false, errors.New("科室错误")
}
// 获取云证书数据
userCaCertDao := dao.UserCaCert{}
userCaCerts, err := userCaCertDao.GetUserCaCertListByUserId(userDoctor.UserId)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
if userCaCerts != nil && len(userCaCerts) > 0 {
// 修改云证书
editCloudCertRequestData := &ca.EditCloudCertRequestData{
EntityId: strconv.FormatInt(userDoctor.UserId, 10),
EntityType: "Personal",
PersonalPhone: user.Mobile,
PersonalName: userDoctorInfo.CardName,
PersonalIdNumber: userDoctorInfo.CardNum,
OrgName: "",
OrgNumber: "",
Pin: strconv.FormatInt(userDoctor.UserId, 10),
OrgDept: hospitalDepartmentCustom.DepartmentName, // // 卫生证书:医院部门
Province: "四川省",
Locality: "成都市",
AuthType: "实人认证",
// AuthTime: strconv.FormatInt(time.Now().Unix(), 10),
AuthTime: "1688694270",
AuthResult: "认证通过",
AuthNoticeType: "数字证书变更告知",
}
editCloudCertResponse, err := ca.EditCloudCert(editCloudCertRequestData)
if err != nil || editCloudCertResponse == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
// 修改ca监管证书表
userCaCertDao := dao.UserCaCert{}
data := make(map[string]interface{})
data["cert_base64"] = editCloudCertResponse.CertBase64
data["cert_chain_p7"] = editCloudCertResponse.CertP7
data["cert_serial_number"] = editCloudCertResponse.CertP7
err = userCaCertDao.EditUserCaCertById(tx, userCaCerts[0].CertId, data)
if err != nil {
tx.Rollback()
return false, errors.New("删除失败")
}
}
}
// 判断签名图片是否修改,同步修改ca平台
// 1、新用户,未存在证书
if userDoctorRequest.SignImage != "" {
signImage := strings.Replace(userDoctorRequest.SignImage, "https://img.applets.igandanyiyuan.com", "", 1)
if signImage != userDoctorInfo.SignImage {
// 检测是否存在云证书
userCaCertDao := dao.UserCaCert{}
userCaCerts, err := userCaCertDao.GetUserCaCertListByUserId(userDoctor.UserId)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
if userCaCerts != nil && len(userCaCerts) > 0 {
userCaCert := userCaCerts[0]
// 检测是否已经添加签章配置
if userCaCert.IsSignConfig == 1 {
// 修改签章配置为未添加
data := make(map[string]interface{})
data["is_sign_config"] = 0
err = userCaCertDao.EditUserCaCertById(tx, userCaCert.CertId, data)
if err != nil {
tx.Rollback()
return false, errors.New(err.Error())
}
// 删除签章配置
deleteUserSignConfigRequestData := &ca.DeleteUserSignConfigRequestData{
UserId: strconv.FormatInt(userDoctor.UserId, 10),
ConfigKey: strconv.FormatInt(userDoctor.UserId, 10),
}
_, err := ca.DeleteUserSignConfig(deleteUserSignConfigRequestData)
if err != nil {
tx.Rollback()
return false, errors.New(err.Error())
}
}
}
}
}
tx.Commit()
return true, nil
//
}