Re-migrate code
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user