flipped-aurora/gin-vue-admin · error
存在相同PackageName
Error message
存在相同PackageName
What it means
After passing name validation, Create queries sys_auto_code_package for a row with the same packageName AND template. If such a record is found (query does not return gorm.ErrRecordNotFound), creation is refused to keep package names unique per template.
Source
Thrown at server/service/system/auto_code_package.go:48
func (s *autoCodePackage) Create(ctx context.Context, info *request.SysAutoCodePackageCreate) error {
switch {
case info.Template == "":
return errors.New("模板不能为空!")
case info.Template == "page":
return errors.New("page为表单生成器!")
case info.PackageName == "":
return errors.New("PackageName不能为空!")
case token.IsKeyword(info.PackageName):
return errors.Errorf("%s为go的关键字!", info.PackageName)
case info.Template == "package":
if info.PackageName == "system" || info.PackageName == "example" {
return errors.New("不能使用已保留的package name")
}
default:
break
}
if !errors.Is(global.GVA_DB.Where("package_name = ? and template = ?", info.PackageName, info.Template).First(&model.SysAutoCodePackage{}).Error, gorm.ErrRecordNotFound) {
return errors.New("存在相同PackageName")
}
create := info.Create()
return global.GVA_DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
err := tx.Create(&create).Error
if err != nil {
return errors.Wrap(err, "创建失败!")
}
code := info.AutoCode()
_, asts, creates, err := s.templates(ctx, create, code, true)
if err != nil {
return err
}
for key, value := range creates { // key 为 模版绝对路径
var files *template.Template
files, err = template.New(filepath.Base(key)).Funcs(autocode.GetTemplateFuncMap()).ParseFiles(key)
if err != nil {
return errors.Wrapf(err, "[filepath:%s]读取模版文件失败!", key)
}View on GitHub (pinned to 3136500ef3)
Solutions
- Query existing packages first (GET autoCode/package list) and reuse or delete the existing one before re-creating.
- Pick a unique packageName, or intentionally reuse the existing package when generating new code.
- If the leftover record is stale, delete the old package entry via the auto-code UI/API, then re-create.
Example fix
// before: blind create
POST /autoCode/createPackage {"template":"package","packageName":"crm"}
// after: check then create or reuse
const pkgs = await api.getPackageList()
if (!pkgs.some(p => p.packageName === 'crm' && p.template === 'package')) {
await api.createPackage({ template: 'package', packageName: 'crm' })
} Defensive patterns
Strategy: validation
Validate before calling
const exists = (await api.getPackageList()).list?.some(
p => p.packageName === name && p.template === template
)
if (exists) {
throw new Error('存在相同PackageName,请先删除或复用')
} Try / catch
try {
await api.createPackage(payload)
} catch (e) {
if (e?.msg === '存在相同PackageName') {
const use = await confirm('包已存在,复用该包继续生成?')
if (use) targetPackageId = await findPackageId(name)
} else { throw e }
} Prevention
- Search existing packages before creating; reuse is usually the intent.
- Make (packageName, template) a composite unique constraint in your data design to catch duplicates at insert.
- When deleting generated code, also delete the package record to avoid stale uniqueness collisions.
When it happens
Trigger: POSTing a new package whose (packageName, template) pair already exists in sys_auto_code_package; retrying a creation that already succeeded; same name but different template passes (the uniqueness is per-template).
Common situations: Double-clicking the submit button; re-running an automation script; re-creating a package after deleting its generated code but not its package record.
Related errors
AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31).
Data as JSON: /api/errors/e64646bb4f39a5aa.
Report an issue: GitHub.