Add branch and region details to DirectorWorker: Enhanced resignation candidate structure by including branch_id, region_id, and region_label. Updated resignation risk and resignation payloads to incorporate these new fields. Modified SQL query to retrieve branch and region information, ensuring accurate data handling for director resignations.
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m49s
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m49s
This commit is contained in:
@@ -57,6 +57,10 @@ struct DirectorResignationCandidate {
|
||||
employer_user_id: i32,
|
||||
director_character_id: i32,
|
||||
satisfaction: i32,
|
||||
branch_id: i32,
|
||||
region_id: i32,
|
||||
region_label: String,
|
||||
resignation_allowed: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -191,12 +195,18 @@ impl DirectorWorker {
|
||||
for candidate in candidates {
|
||||
let sat = candidate.satisfaction.clamp(0, 100) as f64;
|
||||
let resignation_probability = 1.0 - (sat / 100.0);
|
||||
if !candidate.resignation_allowed {
|
||||
continue;
|
||||
}
|
||||
if resignation_probability > 0.5 {
|
||||
let risk_percent = (resignation_probability * 100.0 * 100.0).round() / 100.0;
|
||||
let payload = format!(
|
||||
r#"{{"tr":"director.resignation_risk_high","event":"director_resignation_risk_high","director_id":{},"director_character_id":{},"risk_percent":{},"satisfaction":{},"threshold_percent":50}}"#,
|
||||
r#"{{"tr":"director.resignation_risk_high","event":"director_resignation_risk_high","director_id":{},"director_character_id":{},"branch_id":{},"region_id":{},"region_label":"{}","risk_percent":{},"satisfaction":{},"threshold_percent":50}}"#,
|
||||
candidate.id,
|
||||
candidate.director_character_id,
|
||||
candidate.branch_id,
|
||||
candidate.region_id,
|
||||
json_escape(&candidate.region_label),
|
||||
risk_percent,
|
||||
candidate.satisfaction.clamp(0, 100)
|
||||
);
|
||||
@@ -214,9 +224,12 @@ impl DirectorWorker {
|
||||
|
||||
let resignation_percent = (resignation_probability * 100.0 * 100.0).round() / 100.0;
|
||||
let resignation_payload = format!(
|
||||
r#"{{"tr":"director.resigned","event":"director_resigned","director_id":{},"director_character_id":{},"satisfaction":{},"resignation_percent":{}}}"#,
|
||||
r#"{{"tr":"director.resigned","event":"director_resigned","director_id":{},"director_character_id":{},"branch_id":{},"region_id":{},"region_label":"{}","satisfaction":{},"resignation_percent":{}}}"#,
|
||||
candidate.id,
|
||||
candidate.director_character_id,
|
||||
candidate.branch_id,
|
||||
candidate.region_id,
|
||||
json_escape(&candidate.region_label),
|
||||
candidate.satisfaction.clamp(0, 100),
|
||||
resignation_percent
|
||||
);
|
||||
@@ -310,6 +323,13 @@ impl DirectorWorker {
|
||||
employer_user_id: row.get("employer_user_id")?.parse().ok()?,
|
||||
director_character_id: row.get("director_character_id")?.parse().ok()?,
|
||||
satisfaction: row.get("satisfaction")?.parse().ok()?,
|
||||
branch_id: row.get("branch_id")?.parse().ok()?,
|
||||
region_id: row.get("region_id")?.parse().ok()?,
|
||||
region_label: row.get("region_label").cloned().unwrap_or_default(),
|
||||
resignation_allowed: row
|
||||
.get("resignation_allowed")
|
||||
.map(|v| v == "t" || v == "true" || v == "1")
|
||||
.unwrap_or(true),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1504,6 +1524,12 @@ impl DirectorWorker {
|
||||
}
|
||||
}
|
||||
|
||||
fn json_escape(input: &str) -> String {
|
||||
input
|
||||
.replace('\\', "\\\\")
|
||||
.replace('"', "\\\"")
|
||||
}
|
||||
|
||||
impl Worker for DirectorWorker {
|
||||
fn start_worker_thread(&mut self) {
|
||||
let pool = self.base.pool.clone();
|
||||
|
||||
@@ -642,8 +642,18 @@ pub const QUERY_GET_DIRECTORS_FOR_RESIGNATION_CHECK: &str = r#"
|
||||
SELECT d.id,
|
||||
d.employer_user_id,
|
||||
d.director_character_id,
|
||||
COALESCE(d.satisfaction, 0)::int AS satisfaction
|
||||
COALESCE(d.satisfaction, 0)::int AS satisfaction,
|
||||
COALESCE(d.branch_id, -1)::int AS branch_id,
|
||||
COALESCE(b.region_id, -1)::int AS region_id,
|
||||
COALESCE(NULLIF(TRIM(r.name::text), ''), COALESCE(b.region_id, -1)::text) AS region_label,
|
||||
(
|
||||
NOW() >= (
|
||||
GREATEST(COALESCE(d.updated_at, d.created_at), d.created_at) + INTERVAL '3 days'
|
||||
)
|
||||
) AS resignation_allowed
|
||||
FROM falukant_data.director d
|
||||
LEFT JOIN falukant_data.branch b ON b.id = d.branch_id
|
||||
LEFT JOIN falukant_data.region r ON r.id = b.region_id
|
||||
WHERE d.employer_user_id IS NOT NULL;
|
||||
"#;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user