Refactor employee management
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user