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 }