diff --git a/services/employees_service.go b/services/employees_service.go index fbf39c7..5941547 100644 --- a/services/employees_service.go +++ b/services/employees_service.go @@ -79,20 +79,6 @@ func (s *EmployeeSerialsService) generateWithDB( ) ([]models.EmployeeSerial, error) { var serials []models.EmployeeSerial - // 检查公司是否存在,不存在则创建 - var company models.Company - result := db.Where("company_name = ?", companyName).First(&company) - if result.Error != nil { - company = models.Company{ - CompanyName: companyName, - IsActive: true, - } - result = db.Create(&company) - if result.Error != nil { - return nil, fmt.Errorf("创建公司失败: %w", result.Error) - } - } - // 生成序列号前缀 if serialPrefix == "" { serialPrefix = fmt.Sprintf("EMP%d", time.Now().Year()%100) @@ -136,7 +122,7 @@ func (s *EmployeeSerialsService) generateWithDB( } // 保存到数据库 - result = db.Create(&serials) + result := db.Create(&serials) if result.Error != nil { return nil, fmt.Errorf("保存员工序列号失败: %w", result.Error) } @@ -197,17 +183,6 @@ func (s *EmployeeSerialsService) Update(serialNumber string, updateData models.U } if updateData.CompanyName != "" { - // 检查公司是否存在 - var company models.Company - companyResult := database.DB.Where("company_name = ?", updateData.CompanyName).First(&company) - if companyResult.Error != nil { - company = models.Company{ - CompanyName: updateData.CompanyName, - IsActive: true, - } - database.DB.Create(&company) - } - serial.CompanyName = updateData.CompanyName } diff --git a/services/services_test.go b/services/services_test.go index ec8eb1f..04532dc 100644 --- a/services/services_test.go +++ b/services/services_test.go @@ -248,7 +248,7 @@ func TestEmployeeSerialsService_Generate_Success(t *testing.T) { database.DB.Unscoped().Delete(&user) } -func TestEmployeeSerialsService_Generate_CreateNewCompany(t *testing.T) { +func TestEmployeeSerialsService_Generate_DoesNotCreateManagedCompany(t *testing.T) { var user models.User password, _ := bcrypt.GenerateFromPassword([]byte("password123"), bcrypt.DefaultCost) user = models.User{ @@ -266,11 +266,9 @@ func TestEmployeeSerialsService_Generate_CreateNewCompany(t *testing.T) { assert.NoError(t, err) assert.Len(t, serials, 3) - var company models.Company - result := database.DB.Where("company_name = ?", "NewEmpCompany").First(&company) - assert.NoError(t, result.Error) - assert.Equal(t, "NewEmpCompany", company.CompanyName) - assert.True(t, company.IsActive) + var count int64 + database.DB.Model(&models.Company{}).Where("company_name = ?", "NewEmpCompany").Count(&count) + assert.Equal(t, int64(0), count) for _, serial := range serials { database.DB.Unscoped().Delete(&serial) @@ -419,6 +417,10 @@ func TestEmployeeSerialsService_Update_Success(t *testing.T) { assert.Equal(t, "新名字", result.EmployeeName) assert.False(t, result.IsActive) + var count int64 + database.DB.Model(&models.Company{}).Where("company_name = ?", "UpdatedEmpCompany").Count(&count) + assert.Equal(t, int64(0), count) + for _, serial := range serials { database.DB.Unscoped().Delete(&serial) } diff --git a/services/users_service_test.go b/services/users_service_test.go index f9ed484..f7c1ef0 100644 --- a/services/users_service_test.go +++ b/services/users_service_test.go @@ -33,6 +33,34 @@ func TestUsersService_Create_Success(t *testing.T) { database.DB.Unscoped().Where("employee_name = ?", "新技术员").Delete(&models.EmployeeSerial{}) } +func TestUsersService_Create_DoesNotTouchCompanyTable(t *testing.T) { + database.DB.Unscoped().Where("company_name = ?", "内部员工").Delete(&models.Company{}) + company := models.Company{CompanyName: "内部员工", IsActive: true} + assert.NoError(t, database.DB.Create(&company).Error) + assert.NoError(t, database.DB.Delete(&company).Error) + + svc := UsersService{} + dto, err := svc.Create(models.CreateUserDTO{ + Password: "password123", + Name: "软删公司员工", + Phone: "13800000008", + EmployeeNo: "users_create_restore_company", + Position: "硬件工程师", + Role: "hardware_engineer", + }) + assert.NoError(t, err) + assert.NotNil(t, dto) + assert.Len(t, dto.EmployeeSerials, 1) + + var count int64 + database.DB.Model(&models.Company{}).Where("company_name = ?", "内部员工").Count(&count) + assert.Equal(t, int64(0), count) + + database.DB.Unscoped().Where("username = ?", "users_create_restore_company").Delete(&models.User{}) + database.DB.Unscoped().Where("employee_name = ?", "软删公司员工").Delete(&models.EmployeeSerial{}) + database.DB.Unscoped().Where("company_name = ?", "内部员工").Delete(&models.Company{}) +} + func TestUsersService_Create_BlocksEmployeeRole(t *testing.T) { svc := UsersService{} _, err := svc.Create(models.CreateUserDTO{