修复工作人员作业预检状态与提示
This commit is contained in:
@@ -70,12 +70,10 @@ func Preflight(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
var credential models.StaffCredential
|
||||
credentialFound := impl.DBService.
|
||||
Where("staff_account_id = ? AND status = ?", account.ID, common.StatusEnable).
|
||||
Order("expired_at desc").
|
||||
First(&credential).Error == nil
|
||||
credentialValid := credentialFound && (credential.ExpiredAt == nil || credential.ExpiredAt.After(time.Now()))
|
||||
var credentials []models.StaffCredential
|
||||
_ = impl.DBService.Where("staff_account_id = ? AND status <> ?", account.ID, common.StatusArchived).
|
||||
Order("created_at desc").Find(&credentials).Error
|
||||
credential, credentialValid, credentialReason := evaluateCredential(credentials, time.Now())
|
||||
|
||||
organizationIdentity, organizationName, organizationType := "", "", ""
|
||||
if account.DeliveryBasicID != 0 {
|
||||
@@ -94,7 +92,7 @@ func Preflight(ctx *gin.Context) {
|
||||
"account": gin.H{"status": "passed"},
|
||||
"role": gin.H{"status": "passed", "role_code": account.RoleCode},
|
||||
"organization": gin.H{"status": checkStatus(organizationIdentity != ""), "identity": organizationIdentity, "name": organizationName, "type": organizationType},
|
||||
"credential": gin.H{"status": checkStatus(credentialValid), "expired_at": credential.ExpiredAt},
|
||||
"credential": gin.H{"status": checkStatus(credentialValid), "reason": credentialReason, "credential_type": credential.CredentialType, "expired_at": credential.ExpiredAt},
|
||||
"attendance": gin.H{"status": checkStatus(account.WorkStatus == "on_duty"), "work_status": account.WorkStatus},
|
||||
"daily_training": gin.H{"status": "not_configured"},
|
||||
"service_area": gin.H{"status": "not_configured"},
|
||||
@@ -107,6 +105,29 @@ func Preflight(ctx *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
// evaluateCredential 返回最适合作为提示依据的资质及稳定原因码。
|
||||
func evaluateCredential(credentials []models.StaffCredential, now time.Time) (models.StaffCredential, bool, string) {
|
||||
var expired models.StaffCredential
|
||||
for _, credential := range credentials {
|
||||
if credential.Status != common.StatusEnable {
|
||||
continue
|
||||
}
|
||||
if credential.ExpiredAt == nil || credential.ExpiredAt.After(now) {
|
||||
return credential, true, "valid"
|
||||
}
|
||||
if expired.ID == 0 || (credential.ExpiredAt != nil && expired.ExpiredAt != nil && credential.ExpiredAt.After(*expired.ExpiredAt)) {
|
||||
expired = credential
|
||||
}
|
||||
}
|
||||
if expired.ID != 0 {
|
||||
return expired, false, "expired"
|
||||
}
|
||||
if len(credentials) > 0 {
|
||||
return credentials[0], false, "disabled"
|
||||
}
|
||||
return models.StaffCredential{}, false, "missing"
|
||||
}
|
||||
|
||||
func checkStatus(passed bool) string {
|
||||
if passed {
|
||||
return "passed"
|
||||
|
||||
Reference in New Issue
Block a user