diff --git a/api/controller/userCaCert.go b/api/controller/userCaCert.go index 0b86c01..27642a5 100644 --- a/api/controller/userCaCert.go +++ b/api/controller/userCaCert.go @@ -47,6 +47,28 @@ func (r *UserCaCert) GetUserCloudCert(c *gin.Context) { responses.Ok(c) } +// GetHospitalCloudCert 申请云证书-医院 +func (r *UserCaCert) GetHospitalCloudCert(c *gin.Context) { + // 业务处理 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + userCaCertService := service.UserCaCertService{} + _, err := userCaCertService.GetHospitalCloudCert(tx) + if err != nil { + tx.Rollback() + responses.FailWithMessage(err.Error(), c) + return + } + + tx.Commit() + responses.Ok(c) +} + // RenewUserCloudCert 更新云证书-个人-续约 func (r *UserCaCert) RenewUserCloudCert(c *gin.Context) { id := c.Param("user_id") @@ -82,6 +104,28 @@ func (r *UserCaCert) RenewUserCloudCert(c *gin.Context) { responses.Ok(c) } +// RenewHospitalCloudCert 更新云证书-医院-续约 +func (r *UserCaCert) RenewHospitalCloudCert(c *gin.Context) { + // 业务处理 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + userCaCertService := service.UserCaCertService{} + _, err := userCaCertService.RenewHospitalCloudCert(tx) + if err != nil { + tx.Rollback() + responses.FailWithMessage(err.Error(), c) + return + } + + tx.Commit() + responses.Ok(c) +} + // RemoveUserCloudCert 注销云证书-个人 func (r *UserCaCert) RemoveUserCloudCert(c *gin.Context) { id := c.Param("user_id") diff --git a/api/router/router.go b/api/router/router.go index d62462e..b4d923a 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -560,14 +560,11 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 医院 hospitalGroup := certGroup.Group("/hospital") { - // 更新云证书-个人 - hospitalGroup.GET("/renew/:user_id", api.OrderPrescription.GetOrderPrescriptionPage) + // 更新云证书-医院-续约 + hospitalGroup.GET("/renew", api.UserCaCert.RenewHospitalCloudCert) - // 注销云证书-个人 - hospitalGroup.PUT("/remove/:user_id", api.OrderPrescription.GetOrderPrescriptionPage) - - // 申请云证书-个人 - hospitalGroup.GET("/:user_id", api.UserCaCert.GetUserCloudCert) + // 申请云证书-医院 + hospitalGroup.POST("", api.UserCaCert.GetHospitalCloudCert) } } diff --git a/api/service/UserCaCert.go b/api/service/UserCaCert.go index 2200569..f8fb732 100644 --- a/api/service/UserCaCert.go +++ b/api/service/UserCaCert.go @@ -135,6 +135,65 @@ func (r *UserCaCertService) GetUserCloudCert(tx *gorm.DB, userId int64) (bool, e return true, nil } +// GetHospitalCloudCert 申请云证书-医院 +func (r *UserCaCertService) GetHospitalCloudCert(tx *gorm.DB) (bool, error) { + var userId int64 = 5345345461 + userCaCertDao := dao.UserCaCert{} + + // 检测是否存在云证书 + maps := make(map[string]interface{}) + maps["ca_pin"] = userId + maps["type"] = 2 + userCaCert, _ := userCaCertDao.GetUserCaCert(maps) + if userCaCert != nil { + return false, errors.New("医院存在正常使用的云证书,请注销后重新申请") + } + + // 申请云证书 + cloudCertRequestData := &ca.AddCloudCertRequest{ + EntityId: fmt.Sprintf("%d", userId), + EntityType: "Organizational", + PersonalPhone: "18221234167", + OrgName: "成都金牛欣欣相照互联网医院有限公司", + OrgNumber: "91510106MABTJY4K9R", + Pin: fmt.Sprintf("%d", userId), + Province: "四川省", + Locality: "成都市", + AuthType: "实人认证", + AuthTime: strconv.FormatInt(time.Now().Unix(), 10), + AuthResult: "认证通过", + AuthNoticeType: "数字证书申请告知", + } + + cloudCertResponse, err := ca.AddCloudCert(cloudCertRequestData) + if err != nil || cloudCertResponse == nil { + return false, errors.New(err.Error()) + } + + // 新增ca监管证书表 + userCaCert = &model.UserCaCert{ + UserId: &userId, + IsSystem: 1, + IsLatest: 1, + Type: 2, + CertBase64: cloudCertResponse.CertBase64, + CertChainP7: cloudCertResponse.CertP7, + CertSerialNumber: cloudCertResponse.CertSerialnumber, + CaPin: fmt.Sprintf("%d", userId), + IsSignConfig: 0, + SignConfig: "", + CertApplicationTime: model.LocalTime(time.Now()), + CertExpireTime: model.LocalTime(time.Now().AddDate(0, 0, 180)), // 180天以后的时间 + } + + userCaCert, err = userCaCertDao.AddUserCaCert(tx, userCaCert) + if err != nil || userCaCert == nil { + return false, errors.New(err.Error()) + } + + return true, nil +} + // EditUserCloudCert 修改云证书-个人 func (r *UserCaCertService) EditUserCloudCert(tx *gorm.DB, userId int64) (bool, error) { userCaCertDao := dao.UserCaCert{} @@ -259,7 +318,7 @@ func (r *UserCaCertService) EditUserCloudCert(tx *gorm.DB, userId int64) (bool, return true, nil } -// RenewUserCloudCert 更新云证书-个人 +// RenewUserCloudCert 更新云证书-个人-续约 func (r *UserCaCertService) RenewUserCloudCert(tx *gorm.DB, userId int64) (bool, error) { userCaCertDao := dao.UserCaCert{} @@ -344,6 +403,61 @@ func (r *UserCaCertService) RenewUserCloudCert(tx *gorm.DB, userId int64) (bool, return true, nil } +// RenewHospitalCloudCert 更新云证书-医院-续约 +func (r *UserCaCertService) RenewHospitalCloudCert(tx *gorm.DB) (bool, error) { + var userId int64 = 5345345461 + + userCaCertDao := dao.UserCaCert{} + + // 检测是否存在云证书 + maps := make(map[string]interface{}) + maps["ca_pin"] = userId + maps["type"] = 2 + userCaCert, _ := userCaCertDao.GetUserCaCert(maps) + if userCaCert == nil { + return false, errors.New("医院未申请云证书,无法操作") + } + + if userCaCert.IsLatest == 0 { + return false, errors.New("医院云证书非最新,无法操作") + } + + if !userCaCert.CertExpireTime.IsEmpty() { + timeDifference := time.Time(userCaCert.CertExpireTime).Sub(time.Now()) + + if timeDifference > 60*24*time.Hour { + return false, errors.New("云证书有效期大于60天,无法更新") + } + } + + // 修改云证书 + cloudCertRequestData := &ca.RenewCloudCertRequest{ + EntityId: fmt.Sprintf("%d", userId), + Pin: fmt.Sprintf("%d", userId), + AuthType: "实人认证", + AuthTime: strconv.FormatInt(time.Now().Unix(), 10), + AuthResult: "认证通过", + AuthNoticeType: "数字证书更新告知", + } + + cloudCertResponse, err := ca.RenewCloudCert(cloudCertRequestData) + if err != nil || cloudCertResponse == nil { + return false, errors.New(err.Error()) + } + + // 修改ca监管证书表 + data := make(map[string]interface{}) + data["cert_base64"] = cloudCertResponse.CertBase64 + data["cert_chain_p7"] = cloudCertResponse.CertP7 + data["cert_serial_number"] = cloudCertResponse.CertSerialnumber + err = userCaCertDao.EditUserCaCertById(tx, userCaCert.CertId, data) + if err != nil { + return false, errors.New("更新失败") + } + + return true, nil +} + // RemoveUserCloudCert 注销云证书-个人 func (r *UserCaCertService) RemoveUserCloudCert(tx *gorm.DB, userId int64) (bool, error) { userCaCertDao := dao.UserCaCert{} diff --git a/api/service/userDoctor.go b/api/service/userDoctor.go index 1f2f145..311a511 100644 --- a/api/service/userDoctor.go +++ b/api/service/userDoctor.go @@ -1434,8 +1434,8 @@ func (r *UserDoctorService) PutMulti(doctorId int64, req requests.PutMulti) (boo } }() - // 云证书处理 - if req.MultiPointStatus == 1 && config.C.Env == "prod" { + // 云证书处理-此处去掉了环境判断 + if req.MultiPointStatus == 1 { userCaCertService := UserCaCertService{} // 检测是否存在云证书 @@ -1444,7 +1444,6 @@ func (r *UserDoctorService) PutMulti(doctorId int64, req requests.PutMulti) (boo maps := make(map[string]interface{}) maps["user_id"] = userDoctor.UserId maps["type"] = 2 - maps["is_latest"] = 1 userCaCert, _ := userCaCertDao.GetUserCaCert(maps) if userCaCert == nil { // 申请云证书