diff --git a/api/controller/userDoctor.go b/api/controller/userDoctor.go index 1fc7413..64abfb6 100644 --- a/api/controller/userDoctor.go +++ b/api/controller/userDoctor.go @@ -83,6 +83,14 @@ func (r *UserDoctor) GetUserDoctor(c *gin.Context) { // PutUserDoctor 修改医生 func (r *UserDoctor) PutUserDoctor(c *gin.Context) { + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + userDoctorRequest := requests.UserDoctorRequest{} req := userDoctorRequest.PutUserDoctor if err := c.ShouldBindJSON(&req); err != nil { diff --git a/api/service/UserCaCert.go b/api/service/UserCaCert.go index d9ffbd7..4697e7f 100644 --- a/api/service/UserCaCert.go +++ b/api/service/UserCaCert.go @@ -10,6 +10,7 @@ import ( "hospital-admin-api/api/dto" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" + "hospital-admin-api/config" "hospital-admin-api/extend/aliyun" "hospital-admin-api/extend/ca" "strconv" @@ -104,6 +105,12 @@ func (r *UserCaCertService) AddUserCloudCert(tx *gorm.DB, userId int64) (bool, e return false, errors.New(err.Error()) } + // 到期时间-测试:180,正式:365 + CertExpireTime := model.LocalTime(time.Now().AddDate(0, 0, 180)) + if config.C.Env == "prod" { + CertExpireTime = model.LocalTime(time.Now().AddDate(0, 0, 365)) + } + // 新增ca监管证书表 userCaCert = &model.UserCaCert{ UserId: &userId, @@ -117,7 +124,7 @@ func (r *UserCaCertService) AddUserCloudCert(tx *gorm.DB, userId int64) (bool, e IsSignConfig: 0, SignConfig: "", CertApplicationTime: model.LocalTime(time.Now()), - CertExpireTime: model.LocalTime(time.Now().AddDate(0, 0, 180)), // 180天以后的时间 + CertExpireTime: CertExpireTime, // 180天以后的时间 } userCaCert, err = userCaCertDao.AddUserCaCert(tx, userCaCert) diff --git a/api/service/userDoctor.go b/api/service/userDoctor.go index 066acbf..6915bae 100644 --- a/api/service/userDoctor.go +++ b/api/service/userDoctor.go @@ -102,19 +102,9 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo doctorBankCardDao := dao.DoctorBankCardDao{} doctorBankCard, _ := doctorBankCardDao.GetDoctorBankCardByDoctorId(doctorId) - // 获取医生云证书 - userCaCertDao := dao.UserCaCertDao{} - - maps := make(map[string]interface{}) - maps["user_id"] = userDoctor.UserId - maps["type"] = 2 - maps["is_latest"] = 1 - userCaCert, _ := userCaCertDao.GetUserCaCert(maps) - userDoctorData := make(map[string]interface{}) // 医生数据 userDoctorInfoData := make(map[string]interface{}) // 医生详情数据 userData := make(map[string]interface{}) // 用户数据 - userCaCertData := make(map[string]interface{}) // 用户云证书 // 处理头像 avatar := utils.RemoveOssDomain(req.Avatar) @@ -135,7 +125,7 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo } if departmentCustomId == 0 && userDoctor.DepartmentCustomId != 0 { - return false, errors.New("未选择新的科室") + return false, errors.New("未选择科室") } if userDoctor.DepartmentCustomId != departmentCustomId || userDoctor.DepartmentCustomName != req.DepartmentCustomName { // 获取科室数据 @@ -210,10 +200,6 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo licenseCert = strings.Join(result, ",") } if userDoctorInfo.LicenseCert != licenseCert { - if userDoctor.IdenAuthStatus == 3 { - // 如果认证失败,修改属性会重新进入待审核 - userDoctorData["iden_auth_status"] = 2 - } userDoctorInfoData["license_cert"] = licenseCert } @@ -228,10 +214,6 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo qualificationCert = strings.Join(result, ",") } if userDoctorInfo.QualificationCert != qualificationCert { - if userDoctor.IdenAuthStatus == 3 { - // 如果认证失败,修改属性会重新进入待审核 - userDoctorData["iden_auth_status"] = 2 - } userDoctorInfoData["qualification_cert"] = qualificationCert } @@ -246,10 +228,6 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo workCert = strings.Join(result, ",") } if userDoctorInfo.WorkCert != workCert { - if userDoctor.IdenAuthStatus == 3 { - // 如果认证失败,修改属性会重新进入待审核 - userDoctorData["iden_auth_status"] = 2 - } userDoctorInfoData["work_cert"] = workCert } @@ -318,36 +296,16 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo } } + // 处理身份审核状态 + if userDoctor.Avatar != avatar || userDoctor.DepartmentCustomMobile != req.DepartmentCustomMobile || userDoctor.DepartmentCustomId != departmentCustomId || userDoctor.DepartmentCustomName != req.DepartmentCustomName || userDoctor.BriefIntroduction != req.BriefIntroduction || userDoctor.BeGoodAt != req.BeGoodAt || userDoctorInfo.LicenseCert != licenseCert || userDoctorInfo.QualificationCert != qualificationCert || userDoctorInfo.WorkCert != workCert { + if userDoctor.IdenAuthStatus == 3 { + // 如果认证失败,修改属性会重新进入待审核 + userDoctorData["iden_auth_status"] = 2 + } + } + // 处理多点状态更新问题 if signImage != "" && idCardBack != "" && idCardFront != "" { - // 任何情况下科室修改,多点进入待审核 - if userDoctor.DepartmentCustomId != departmentCustomId { - if userDoctor.MultiPointStatus == 2 { - return false, errors.New("多点执业审核中,请操作后进行修改") - } - - userDoctorData["multi_point_status"] = 2 - userDoctorData["multi_point_fail_reason"] = "" - - // 检测是否存在正在审核中的处方 - orderPrescriptionDao := dao.OrderPrescriptionDao{} - - maps := make(map[string]interface{}) - maps["doctor_id"] = doctorId - maps["prescription_status"] = 1 - orderPrescription, err := orderPrescriptionDao.GetList(maps) - if err != nil { - return false, errors.New("修改失败") - } - if len(orderPrescription) > 0 { - return false, errors.New("存在审核中的处方,请勿修改科室数据") - } - - if userCaCert != nil { - userCaCertData["is_latest"] = 0 - } - } - // 审核失败、未审核情况下,如果数据存在修改,重新进入待审核 if userDoctor.MultiPointStatus == 0 || userDoctor.MultiPointStatus == 3 { if signImage != userDoctorInfo.SignImage || idCardBack != userDoctorInfo.IdCardBack || idCardFront != userDoctorInfo.IdCardFront { @@ -644,12 +602,16 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo } } - // 修改医生云证书状态 - if len(userCaCertData) > 0 && userCaCert != nil { - err = userCaCertDao.EditUserCaCertById(tx, userCaCert.CertId, userCaCertData) - if err != nil { - tx.Rollback() - return false, errors.New("用户云证书修改失败") + // 处理科室问题-更新云证书 + if userDoctor.DepartmentCustomId != departmentCustomId { + if userDoctor.IdenAuthStatus == 1 { + // 更新云证书 + userCaCertService := UserCaCertService{} + _, err = userCaCertService.RenewUserCloudCert(tx, userDoctor.UserId) + if err != nil { + tx.Rollback() + return false, errors.New(err.Error()) + } } } @@ -670,6 +632,15 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, req requests.PutUserDo // 处理签名图片-如果更改,查看是否已添加签章配置,会进行删除 if req.SignImage != "" { + // 获取医生云证书 + userCaCertDao := dao.UserCaCertDao{} + + maps := make(map[string]interface{}) + maps["user_id"] = userDoctor.UserId + maps["type"] = 2 + maps["is_latest"] = 1 + userCaCert, _ := userCaCertDao.GetUserCaCert(maps) + signImage := utils.RemoveOssDomain(req.SignImage) if signImage != userDoctorInfo.SignImage && userCaCert != nil { // 检测是否已经添加签章配置 @@ -848,12 +819,6 @@ func (r *UserDoctorService) AddUserDoctor(userId string, req requests.AddUserDoc signImage = utils.RemoveOssDomain(req.SignImage) } - // 多点执业状态 - var multiPointStatus int - if req.IdCardFront != "" && req.IdCardBack != "" && req.SignImage != "" && departmentCustomId != 0 { - multiPointStatus = 2 - } - // 处理专长 if len(req.DoctorExpertise) > 0 { // 检测专长是否存在 @@ -981,7 +946,6 @@ func (r *UserDoctorService) AddUserDoctor(userId string, req requests.AddUserDoc Status: 1, IdcardStatus: 1, // 身份证默认审核通过 IdenAuthStatus: 2, - MultiPointStatus: multiPointStatus, IsBindBank: isBindBank, IsRecommend: req.IsRecommend, Avatar: avatar, @@ -1051,7 +1015,7 @@ func (r *UserDoctorService) AddUserDoctor(userId string, req requests.AddUserDoc } } - // 修改专长数据 + // 新增专长数据 if len(req.DoctorExpertise) > 0 { doctorExpertiseDao := dao.DoctorExpertiseDao{} @@ -1207,6 +1171,16 @@ func (r *UserDoctorService) PutUserDoctorPending(doctorId int64, req requests.Pu return false, errors.New("审核失败") } + // 获取医生云证书数据 + userCaCertDao := dao.UserCaCertDao{} + maps := make(map[string]interface{}) + maps["user_id"] = userDoctor.UserId + maps["type"] = 2 + _, err = userCaCertDao.GetUserCaCert(maps) + if err != nil { + return false, errors.New("请先申请云证书") + } + userDoctorData := make(map[string]interface{}) // 医生数据 userDoctorInfoData := make(map[string]interface{}) // 医生详情数据 @@ -1218,6 +1192,17 @@ func (r *UserDoctorService) PutUserDoctorPending(doctorId int64, req requests.Pu return false, errors.New("请勿重复操作") } + // 审核通过 + if req.IdenAuthStatus == 1 { + // 处理多点审核状态 + if userDoctorInfo.IdCardFront != "" && userDoctorInfo.IdCardBack != "" && userDoctorInfo.SignImage != "" && userDoctor.DepartmentCustomId != 0 { + userDoctorData["multi_point_status"] = 2 + } + + userDoctorData["iden_auth_status"] = 1 + userDoctorInfoData["qualification_cert_num"] = req.QualificationCertNum + } + // 开始事务 tx := global.Db.Begin() defer func() { @@ -1228,10 +1213,11 @@ func (r *UserDoctorService) PutUserDoctorPending(doctorId int64, req requests.Pu doctorIdenFailDao := dao.DoctorIdenFailDao{} + // 审核时间 userDoctorData["iden_auth_time"] = time.Now().Format("2006-01-02 15:04:05") // 审核通过删除所有不通过原因数据 - maps := make(map[string]interface{}) + maps = make(map[string]interface{}) maps["doctor_id"] = doctorId err = doctorIdenFailDao.DeleteDoctorIdenFail(tx, maps) if err != nil { @@ -1348,11 +1334,24 @@ func (r *UserDoctorService) PutUserDoctorPending(doctorId int64, req requests.Pu } } - // 审核通过 - if req.IdenAuthStatus == 1 { - userDoctorData["iden_auth_status"] = 1 - userDoctorInfoData["qualification_cert_num"] = req.QualificationCertNum + // 修改医生数据 + err = userDoctorDao.EditUserDoctorById(tx, doctorId, userDoctorData) + if err != nil { + tx.Rollback() + return false, errors.New("审核失败") + } + // 修改医生详情数据 + if len(userDoctorInfoData) != 0 { + err = userDoctorInfoDao.EditUserDoctorInfoById(tx, userDoctorInfo.DoctorInfoId, userDoctorInfoData) + if err != nil { + tx.Rollback() + return false, errors.New("审核失败") + } + } + + // 修改im数据-审核通过 + if req.IdenAuthStatus == 1 { // 更新医生im资料 profileItem := []tencentIm.ProfileItem{ { @@ -1370,23 +1369,6 @@ func (r *UserDoctorService) PutUserDoctorPending(doctorId int64, req requests.Pu tx.Rollback() return false, errors.New(err.Error()) } - - } - - // 修改医生数据 - err = userDoctorDao.EditUserDoctorById(tx, doctorId, userDoctorData) - if err != nil { - tx.Rollback() - return false, errors.New("审核失败") - } - - // 修改医生详情数据 - if len(userDoctorInfoData) != 0 { - err = userDoctorInfoDao.EditUserDoctorInfoById(tx, userDoctorInfo.DoctorInfoId, userDoctorInfoData) - if err != nil { - tx.Rollback() - return false, errors.New("审核失败") - } } tx.Commit()