七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s

This commit is contained in:
2026-07-25 17:06:58 +08:00
parent ad9f613dd6
commit 73f5125d3d
249 changed files with 17137 additions and 877 deletions

View File

@@ -0,0 +1,83 @@
package wecom
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"github.com/break/junhong_cmp_fiber/internal/model"
"github.com/break/junhong_cmp_fiber/pkg/constants"
"github.com/break/junhong_cmp_fiber/pkg/errors"
)
// SceneRepository 持久化企业微信审批业务场景当前配置。
type SceneRepository struct {
db *gorm.DB
}
// NewSceneRepository 创建企业微信审批场景 Repository。
func NewSceneRepository(db *gorm.DB) *SceneRepository {
return &SceneRepository{db: db}
}
// FindForUpdate 在事务内锁定指定业务场景。
func (r *SceneRepository) FindForUpdate(ctx context.Context, tx *gorm.DB, businessType string) (*model.WeComApprovalScene, error) {
var scene model.WeComApprovalScene
err := tx.WithContext(ctx).Clauses(clause.Locking{Strength: "UPDATE"}).Where("business_type = ?", businessType).First(&scene).Error
if err == gorm.ErrRecordNotFound {
return nil, nil
}
if err != nil {
return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询企业微信审批场景失败")
}
return &scene, nil
}
// Create 创建企业微信审批场景配置。
func (r *SceneRepository) Create(ctx context.Context, tx *gorm.DB, scene *model.WeComApprovalScene) error {
if err := tx.WithContext(ctx).Create(scene).Error; err != nil {
return errors.Wrap(errors.CodeDatabaseError, err, "创建企业微信审批场景失败")
}
return nil
}
// Update 更新企业微信审批场景当前配置。
func (r *SceneRepository) Update(ctx context.Context, tx *gorm.DB, scene *model.WeComApprovalScene) error {
if err := tx.WithContext(ctx).Model(&model.WeComApprovalScene{}).Where("id = ?", scene.ID).Updates(map[string]any{
"application_id": scene.ApplicationID, "template_id": scene.TemplateID, "template_name": scene.TemplateName,
"control_mapping": scene.ControlMapping, "template_snapshot": scene.TemplateSnapshot,
"template_fingerprint": scene.TemplateFingerprint,
"status": scene.Status, "last_verified_at": scene.LastVerifiedAt,
"updated_by": scene.UpdatedBy, "updated_at": scene.UpdatedAt,
}).Error; err != nil {
return errors.Wrap(errors.CodeDatabaseError, err, "更新企业微信审批场景失败")
}
return nil
}
// List 分页查询企业微信审批场景配置。
func (r *SceneRepository) List(ctx context.Context, page, pageSize int) ([]model.WeComApprovalScene, int64, error) {
query := r.db.WithContext(ctx).Model(&model.WeComApprovalScene{})
var total int64
if err := query.Count(&total).Error; err != nil {
return nil, 0, errors.Wrap(errors.CodeDatabaseError, err, "统计企业微信审批场景失败")
}
var scenes []model.WeComApprovalScene
if err := query.Order("business_type ASC").Offset((page - 1) * pageSize).Limit(pageSize).Find(&scenes).Error; err != nil {
return nil, 0, errors.Wrap(errors.CodeDatabaseError, err, "查询企业微信审批场景失败")
}
return scenes, total, nil
}
// GetEnabled 查询指定业务类型当前启用的企微审批场景。
func (r *SceneRepository) GetEnabled(ctx context.Context, businessType string) (*model.WeComApprovalScene, error) {
var scene model.WeComApprovalScene
if err := r.db.WithContext(ctx).Where("business_type = ? AND status = ?", businessType, constants.StatusEnabled).First(&scene).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, errors.New(errors.CodeServiceUnavailable, "企业微信审批场景未配置或已禁用")
}
return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询企业微信审批场景失败")
}
return &scene, nil
}