385 lines
12 KiB
Go
385 lines
12 KiB
Go
package service
|
||
|
||
import (
|
||
"errors"
|
||
"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"
|
||
)
|
||
|
||
type UserDoctorService struct {
|
||
}
|
||
|
||
// PutUserDoctor 修改医生
|
||
func (r *UserDoctorService) PutUserDoctor(doctorId int64, userDoctorRequest requests.PutUserDoctor) (bool, error) {
|
||
|
||
// 获取医生数据
|
||
userDoctorDao := dao.UserDoctorDao{}
|
||
userDoctor, err := userDoctorDao.GetUserDoctorById(doctorId)
|
||
if err != nil || userDoctor == nil {
|
||
return false, errors.New("医生数据错误")
|
||
}
|
||
|
||
// 获取医生详情数据
|
||
userDoctorInfoDao := dao.UserDoctorInfoDao{}
|
||
userDoctorInfo, err := userDoctorInfoDao.GetUserDoctorInfoByDoctorId(doctorId)
|
||
if err != nil {
|
||
return false, errors.New("医生详情数据错误")
|
||
}
|
||
|
||
// 获取用户数据
|
||
userDao := dao.UserDao{}
|
||
user, err := userDao.GetUserById(userDoctor.UserId)
|
||
if err != nil {
|
||
return false, errors.New("医生数据错误")
|
||
}
|
||
|
||
userDoctorData := make(map[string]interface{}) // 医生数据
|
||
userDoctorInfoData := make(map[string]interface{}) // 医生详情数据
|
||
userData := make(map[string]interface{}) // 用户数据
|
||
|
||
// 处理头像
|
||
avatar := strings.Replace(userDoctorRequest.Avatar, config.C.Oss.OssCustomDomainName, "", 1)
|
||
if userDoctor.Avatar != avatar {
|
||
userDoctorData["avatar"] = avatar
|
||
userData["avatar"] = avatar
|
||
}
|
||
|
||
// 处理职称
|
||
if userDoctor.DoctorTitle != userDoctorRequest.DoctorTitle {
|
||
userDoctorData["doctor_title"] = userDoctorRequest.DoctorTitle
|
||
}
|
||
|
||
// 处理科室
|
||
departmentCustomId, err := strconv.ParseInt(userDoctorRequest.DepartmentCustomId, 10, 64)
|
||
if err != nil {
|
||
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{}
|
||
hospitalDepartmentCustom, err := hospitalDepartmentCustomDao.GetHospitalDepartmentCustomById(departmentCustomId)
|
||
if err != nil || hospitalDepartmentCustom == nil {
|
||
return false, errors.New("科室错误")
|
||
}
|
||
|
||
userDoctorData["department_custom_id"] = userDoctorRequest.DepartmentCustomId
|
||
userDoctorData["department_custom_name"] = hospitalDepartmentCustom.DepartmentCustomName
|
||
|
||
if userDoctorRequest.DepartmentCustomName != "" {
|
||
userDoctorData["department_custom_name"] = userDoctorRequest.DepartmentCustomName
|
||
}
|
||
}
|
||
|
||
// 处理科室电话
|
||
if userDoctor.DepartmentCustomMobile != userDoctorRequest.DepartmentCustomMobile {
|
||
userDoctorData["department_custom_id"] = userDoctorRequest.DepartmentCustomMobile
|
||
}
|
||
|
||
// 处理医院
|
||
hospitalId, err := strconv.ParseInt(userDoctorRequest.HospitalId, 10, 64)
|
||
if err != nil {
|
||
return false, errors.New("科室错误")
|
||
}
|
||
|
||
if userDoctor.HospitalID != hospitalId {
|
||
// 获取医院数据
|
||
hospitalDao := dao.Hospital{}
|
||
hospital, err := hospitalDao.GetHospitalById(hospitalId)
|
||
if err != nil || hospital == nil {
|
||
return false, errors.New("医院错误")
|
||
}
|
||
userDoctorData["department_custom_id"] = userDoctorRequest.HospitalId
|
||
}
|
||
|
||
// 处理擅长
|
||
if userDoctor.BeGoodAt != userDoctorRequest.BeGoodAt {
|
||
userDoctorData["be_good_at"] = userDoctorRequest.BeGoodAt
|
||
}
|
||
|
||
// 医生简介
|
||
if userDoctor.BriefIntroduction != userDoctorRequest.BriefIntroduction {
|
||
userDoctorData["brief_introduction"] = userDoctorRequest.BriefIntroduction
|
||
}
|
||
|
||
// 处理医师执业证
|
||
var licenseCert string
|
||
if len(userDoctorRequest.LicenseCert) > 0 {
|
||
result := make([]string, len(userDoctorRequest.LicenseCert))
|
||
for i, url := range userDoctorRequest.LicenseCert {
|
||
result[i] = strings.TrimPrefix(url, config.C.Oss.OssCustomDomainName)
|
||
}
|
||
|
||
licenseCert = strings.Join(result, ",")
|
||
}
|
||
|
||
if userDoctorInfo != nil {
|
||
if userDoctorInfo.LicenseCert != licenseCert {
|
||
userDoctorInfoData["license_cert"] = licenseCert
|
||
}
|
||
} else {
|
||
userDoctorInfoData["license_cert"] = licenseCert
|
||
}
|
||
|
||
// 处理医师资格证
|
||
var qualificationCert string
|
||
if len(userDoctorRequest.QualificationCert) > 0 {
|
||
result := make([]string, len(userDoctorRequest.QualificationCert))
|
||
for i, url := range userDoctorRequest.QualificationCert {
|
||
result[i] = strings.TrimPrefix(url, config.C.Oss.OssCustomDomainName)
|
||
}
|
||
|
||
qualificationCert = strings.Join(result, ",")
|
||
}
|
||
|
||
if userDoctorInfo != nil {
|
||
if userDoctorInfo.QualificationCert != qualificationCert {
|
||
userDoctorInfoData["qualification_cert"] = qualificationCert
|
||
}
|
||
} else {
|
||
userDoctorInfoData["qualification_cert"] = qualificationCert
|
||
}
|
||
|
||
// 处理医师资格证号
|
||
if userDoctorInfo != nil {
|
||
if userDoctorInfo.QualificationCertNum != userDoctorRequest.QualificationCertNum {
|
||
userDoctorInfoData["qualification_cert_num"] = userDoctorRequest.QualificationCertNum
|
||
}
|
||
} else {
|
||
userDoctorInfoData["qualification_cert_num"] = userDoctorRequest.QualificationCertNum
|
||
}
|
||
|
||
// 处理医师工作证
|
||
var workCert string
|
||
if len(userDoctorRequest.WorkCert) > 0 {
|
||
result := make([]string, len(userDoctorRequest.WorkCert))
|
||
for i, url := range userDoctorRequest.WorkCert {
|
||
result[i] = strings.TrimPrefix(url, config.C.Oss.OssCustomDomainName)
|
||
}
|
||
|
||
workCert = strings.Join(result, ",")
|
||
}
|
||
|
||
if userDoctorInfo != nil {
|
||
if userDoctorInfo.WorkCert != workCert {
|
||
userDoctorInfoData["work_cert"] = workCert
|
||
}
|
||
} else {
|
||
userDoctorInfoData["work_cert"] = workCert
|
||
}
|
||
|
||
// 处理身份证正面图片
|
||
if userDoctorInfo.IdCardFront != "" && userDoctorRequest.IdCardFront == "" {
|
||
return false, errors.New("未上传新的身份证图片")
|
||
}
|
||
|
||
if userDoctorRequest.IdCardFront != "" {
|
||
idCardFront := strings.Replace(userDoctorRequest.IdCardFront, "https://img.applets.igandanyiyuan.com", "", 1)
|
||
if idCardFront != userDoctorInfo.IdCardFront {
|
||
userDoctorInfoData["id_card_front"] = idCardFront
|
||
}
|
||
}
|
||
|
||
// 身份证背面图片
|
||
if userDoctorInfo.IdCardBack != "" && userDoctorRequest.IdCardBack == "" {
|
||
return false, errors.New("未上传新的身份证图片")
|
||
}
|
||
if userDoctorRequest.IdCardBack != "" {
|
||
idCardBack := strings.Replace(userDoctorRequest.IdCardBack, "https://img.applets.igandanyiyuan.com", "", 1)
|
||
if idCardBack != userDoctorInfo.IdCardBack {
|
||
userDoctorInfoData["id_card_back"] = idCardBack
|
||
}
|
||
}
|
||
|
||
// 签名图片
|
||
if userDoctorInfo.SignImage != "" && userDoctorRequest.SignImage == "" {
|
||
return false, errors.New("未上传新的签名图片")
|
||
}
|
||
if userDoctorRequest.SignImage != "" {
|
||
signImage := strings.Replace(userDoctorRequest.SignImage, "https://img.applets.igandanyiyuan.com", "", 1)
|
||
if signImage != userDoctorInfo.SignImage {
|
||
userDoctorInfoData["sign_image"] = signImage
|
||
}
|
||
}
|
||
|
||
// 开始事务
|
||
tx := global.Db.Begin()
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
tx.Rollback()
|
||
}
|
||
}()
|
||
|
||
// 修改医生数据
|
||
if len(userDoctorData) != 0 {
|
||
err = userDoctorDao.EditUserDoctorById(tx, doctorId, userDoctorData)
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return false, errors.New("修改失败")
|
||
}
|
||
}
|
||
|
||
// 修改医生详情数据
|
||
if userDoctorInfo == nil {
|
||
// 新增医生详情表
|
||
if len(userDoctorInfoData) != 0 {
|
||
userDoctorInfo, err := userDoctorInfoDao.AddUserDoctorInfoByMap(tx, userDoctorInfoData)
|
||
if userDoctorInfo == nil || err != nil {
|
||
tx.Rollback()
|
||
return false, errors.New("修改失败")
|
||
}
|
||
}
|
||
} else {
|
||
if len(userDoctorInfoData) != 0 {
|
||
err = userDoctorInfoDao.EditUserDoctorInfoById(tx, userDoctorInfo.DoctorInfoId, userDoctorInfoData)
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return false, errors.New("修改失败")
|
||
}
|
||
}
|
||
}
|
||
|
||
// 修改医生数据
|
||
if len(userDoctorData) != 0 {
|
||
err = userDao.EditUserById(tx, userDoctor.UserId, userData)
|
||
if err != nil {
|
||
tx.Rollback()
|
||
return false, errors.New("修改失败")
|
||
}
|
||
}
|
||
|
||
// 判断头像是否修改,同步修改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
|
||
}
|
||
|
||
// AddUserDoctor 新增医生
|
||
func (r *UserDoctorService) AddUserDoctor(userDoctorRequest requests.AddUserDoctor) (bool, error) {
|
||
return true, nil
|
||
}
|