Refactor employee management

This commit is contained in:
Frudrax Cheng
2026-05-28 10:05:59 +08:00
parent f394d3a8bd
commit d3ee215f61
17 changed files with 5391 additions and 174 deletions
+52 -4
View File
@@ -16,11 +16,14 @@ import (
"git.beifan.cn/trace-system/backend-go/database"
"git.beifan.cn/trace-system/backend-go/models"
"gorm.io/gorm"
)
// EmployeeSerialsService 员工序列号服务
type EmployeeSerialsService struct{}
const defaultEmployeeCompanyName = "内部员工"
// Generate 生成员工序列号
func (s *EmployeeSerialsService) Generate(
companyName string,
@@ -29,18 +32,62 @@ func (s *EmployeeSerialsService) Generate(
quantity int,
userId uint,
serialPrefix string,
) ([]models.EmployeeSerial, error) {
return s.generateWithDB(database.DB, companyName, position, employeeName, quantity, userId, nil, serialPrefix)
}
// GenerateForEmployee 为员工主档生成一个员工码
func (s *EmployeeSerialsService) GenerateForEmployee(
tx *gorm.DB,
employee models.User,
creatorID uint,
serialPrefix string,
) (*models.EmployeeSerial, error) {
db := tx
if db == nil {
db = database.DB
}
serials, err := s.generateWithDB(
db,
defaultEmployeeCompanyName,
employee.Position,
employee.Name,
1,
creatorID,
&employee.ID,
serialPrefix,
)
if err != nil {
return nil, err
}
if len(serials) == 0 {
return nil, errors.New("员工码生成失败")
}
return &serials[0], nil
}
func (s *EmployeeSerialsService) generateWithDB(
db *gorm.DB,
companyName string,
position string,
employeeName string,
quantity int,
userId uint,
employeeID *uint,
serialPrefix string,
) ([]models.EmployeeSerial, error) {
var serials []models.EmployeeSerial
// 检查公司是否存在,不存在则创建
var company models.Company
result := database.DB.Where("company_name = ?", companyName).First(&company)
result := db.Where("company_name = ?", companyName).First(&company)
if result.Error != nil {
company = models.Company{
CompanyName: companyName,
IsActive: true,
}
result = database.DB.Create(&company)
result = db.Create(&company)
if result.Error != nil {
return nil, fmt.Errorf("创建公司失败: %w", result.Error)
}
@@ -68,7 +115,7 @@ func (s *EmployeeSerialsService) Generate(
}
var existingSerial models.EmployeeSerial
checkResult := database.DB.Where("serial_number = ?", serialNumber).First(&existingSerial)
checkResult := db.Where("serial_number = ?", serialNumber).First(&existingSerial)
if checkResult.Error != nil {
serialNumbers[serialNumber] = true
i++
@@ -81,6 +128,7 @@ func (s *EmployeeSerialsService) Generate(
CompanyName: companyName,
Position: position,
EmployeeName: employeeName,
EmployeeID: employeeID,
CreatedBy: &userId,
IsActive: true,
}
@@ -88,7 +136,7 @@ func (s *EmployeeSerialsService) Generate(
}
// 保存到数据库
result = database.DB.Create(&serials)
result = db.Create(&serials)
if result.Error != nil {
return nil, fmt.Errorf("保存员工序列号失败: %w", result.Error)
}