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