Re-migrate code

This commit is contained in:
2026-03-02 10:05:12 +08:00
parent d1e6f15745
commit 51025195a5
7 changed files with 177 additions and 0 deletions

View File

@@ -110,3 +110,40 @@ func (s *CompaniesService) Delete(companyName string) error {
return nil
}
// GetStatsOverview 获取企业统计概览
func (s *CompaniesService) GetStatsOverview() (*models.CompanyStatsOverviewDTO, error) {
stats := &models.CompanyStatsOverviewDTO{}
if err := database.DB.Model(&models.Company{}).Count(&stats.TotalCompanies).Error; err != nil {
return nil, errors.New("统计企业总数失败")
}
if err := database.DB.Model(&models.Company{}).Where("is_active = ?", true).Count(&stats.ActiveCompanies).Error; err != nil {
return nil, errors.New("统计启用企业数量失败")
}
stats.InactiveCompanies = stats.TotalCompanies - stats.ActiveCompanies
if err := database.DB.Model(&models.Serial{}).Count(&stats.TotalSerials).Error; err != nil {
return nil, errors.New("统计企业赋码总数失败")
}
if err := database.DB.Model(&models.Serial{}).Where("is_active = ?", true).Count(&stats.ActiveSerials).Error; err != nil {
return nil, errors.New("统计有效企业赋码数量失败")
}
stats.RevokedSerials = stats.TotalSerials - stats.ActiveSerials
if err := database.DB.Model(&models.EmployeeSerial{}).Count(&stats.TotalEmployeeSerials).Error; err != nil {
return nil, errors.New("统计员工赋码总数失败")
}
if err := database.DB.Model(&models.EmployeeSerial{}).Where("is_active = ?", true).Count(&stats.ActiveEmployeeSerials).Error; err != nil {
return nil, errors.New("统计有效员工赋码数量失败")
}
stats.RevokedEmployeeSerials = stats.TotalEmployeeSerials - stats.ActiveEmployeeSerials
return stats, nil
}

View File

@@ -773,3 +773,47 @@ func TestEmployeeSerialsService_GenerateQRCode_Inactive(t *testing.T) {
database.DB.Unscoped().Where("company_name = ?", "QREmpCompany2").Delete(&models.Company{})
database.DB.Unscoped().Delete(&user)
}
func TestCompaniesService_GetStatsOverview_Success(t *testing.T) {
var user models.User
password, _ := bcrypt.GenerateFromPassword([]byte("password123"), bcrypt.DefaultCost)
user = models.User{
Username: "statsadmin",
Password: string(password),
Name: "统计管理员",
Email: "statsadmin@example.com",
Role: "admin",
}
database.DB.Create(&user)
serialService := SerialsService{}
companySerials, _ := serialService.Generate("StatsCompany", 2, 30, user.ID, "STAT")
employeeSerialsService := EmployeeSerialsService{}
employeeSerials, _ := employeeSerialsService.Generate("StatsCompany", "技术部", "测试员工", 2, user.ID)
_ = serialService.Revoke(companySerials[0].SerialNumber)
_ = employeeSerialsService.Revoke(employeeSerials[0].SerialNumber)
companiesService := CompaniesService{}
stats, err := companiesService.GetStatsOverview()
assert.NoError(t, err)
assert.NotNil(t, stats)
assert.GreaterOrEqual(t, stats.TotalCompanies, int64(1))
assert.GreaterOrEqual(t, stats.TotalSerials, int64(2))
assert.GreaterOrEqual(t, stats.TotalEmployeeSerials, int64(2))
assert.GreaterOrEqual(t, stats.RevokedSerials, int64(1))
assert.GreaterOrEqual(t, stats.RevokedEmployeeSerials, int64(1))
for _, serial := range companySerials {
database.DB.Unscoped().Delete(&serial)
}
for _, serial := range employeeSerials {
database.DB.Unscoped().Delete(&serial)
}
database.DB.Unscoped().Where("company_name = ?", "StatsCompany").Delete(&models.Company{})
database.DB.Unscoped().Delete(&user)
}