This commit is contained in:
wucongxing 2023-10-27 14:32:41 +08:00
parent 6438942e18
commit cb7807801e
4 changed files with 165 additions and 11 deletions

View File

@ -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")

View File

@ -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)
}
}

View File

@ -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{}

View File

@ -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 {
// 申请云证书