Re-migrate code

This commit is contained in:
2026-03-02 12:57:07 +08:00
parent 6070df659a
commit 4f18028a7b
7 changed files with 99 additions and 11 deletions

View File

@@ -3,6 +3,7 @@ package services
import (
"errors"
"fmt"
"sort"
"time"
"gorm.io/gorm"
@@ -311,8 +312,14 @@ func (s *CompaniesService) GetStats() (map[string]any, error) {
return nil, errors.New("查询序列号统计失败")
}
var employeeSerials []models.EmployeeSerial
if err := database.DB.Order("created_at DESC").Find(&employeeSerials).Error; err != nil {
return nil, errors.New("查询员工序列号统计失败")
}
companyCount := len(companies)
serialCount := len(serials)
employeeSerialCount := len(employeeSerials)
activeCount := 0
for _, serial := range serials {
if serial.IsActive && (serial.ValidUntil == nil || serial.ValidUntil.After(now)) {
@@ -355,24 +362,43 @@ func (s *CompaniesService) GetStats() (map[string]any, error) {
}
recentSerials := make([]map[string]any, 0)
for i, serial := range serials {
if i >= 10 {
break
}
// 添加企业序列号
for _, serial := range serials {
recentSerials = append(recentSerials, map[string]any{
"serialNumber": serial.SerialNumber,
"companyName": serial.CompanyName,
"isActive": serial.IsActive,
"createdAt": serial.CreatedAt,
"type": "company",
})
}
// 添加员工序列号
for _, serial := range employeeSerials {
recentSerials = append(recentSerials, map[string]any{
"serialNumber": serial.SerialNumber,
"companyName": serial.CompanyName,
"isActive": serial.IsActive,
"createdAt": serial.CreatedAt,
"type": "employee",
"department": serial.Department,
"employeeName": serial.EmployeeName,
})
}
// 按创建时间排序保留最新的10条
sort.Slice(recentSerials, func(i, j int) bool {
return recentSerials[i]["createdAt"].(time.Time).After(recentSerials[j]["createdAt"].(time.Time))
})
if len(recentSerials) > 10 {
recentSerials = recentSerials[:10]
}
return map[string]any{
"overview": map[string]any{
"totalCompanies": companyCount,
"totalSerials": serialCount,
"activeSerials": activeCount,
"inactiveSerials": inactiveCount,
"totalCompanies": companyCount,
"totalSerials": serialCount,
"totalEmployeeSerials": employeeSerialCount,
"activeSerials": activeCount,
"inactiveSerials": inactiveCount,
},
"monthlyStats": monthlyItems,
"recentCompanies": recentCompanies,

View File

@@ -28,6 +28,7 @@ func (s *EmployeeSerialsService) Generate(
employeeName string,
quantity int,
userId uint,
serialPrefix string,
) ([]models.EmployeeSerial, error) {
var serials []models.EmployeeSerial
@@ -45,8 +46,12 @@ func (s *EmployeeSerialsService) Generate(
}
}
// 生成序列号前缀 (EMP + 年份后两位)
serialPrefix := fmt.Sprintf("EMP%d", time.Now().Year()%100)
// 生成序列号前缀
if serialPrefix == "" {
serialPrefix = fmt.Sprintf("EMP%d", time.Now().Year()%100)
}
// 标准化前缀(转大写,去除空格)
serialPrefix = strings.ToUpper(strings.TrimSpace(serialPrefix))
// 预生成所有序列号
serialNumbers := make(map[string]bool)
@@ -199,6 +204,22 @@ func (s *EmployeeSerialsService) Revoke(serialNumber string) error {
return nil
}
// Delete 删除员工序列号(物理删除)
func (s *EmployeeSerialsService) Delete(serialNumber string) error {
var serial models.EmployeeSerial
result := database.DB.Where("serial_number = ?", strings.ToUpper(serialNumber)).First(&serial)
if result.Error != nil {
return fmt.Errorf("查询员工序列号失败: %w", errors.New("序列号不存在"))
}
result = database.DB.Delete(&serial)
if result.Error != nil {
return fmt.Errorf("删除员工序列号失败: %w", result.Error)
}
return nil
}
// GenerateQRCode 生成员工二维码
func (s *EmployeeSerialsService) GenerateQRCode(
serialNumber string,