stabilized app
This commit is contained in:
committed by
Torsten (PC)
parent
51fd9fcd13
commit
1451225978
155
src/director_worker.h
Normal file
155
src/director_worker.h
Normal file
@@ -0,0 +1,155 @@
|
||||
#ifndef DIRECTOR_WORKER_H
|
||||
#define DIRECTOR_WORKER_H
|
||||
|
||||
#include "worker.h"
|
||||
|
||||
class DirectorWorker : public Worker {
|
||||
public:
|
||||
explicit DirectorWorker(ConnectionPool &pool, MessageBroker &broker);
|
||||
~DirectorWorker() override;
|
||||
|
||||
protected:
|
||||
void run() override;
|
||||
|
||||
private:
|
||||
void performTask();
|
||||
void startProductions(std::unordered_map<std::string, std::string> director);
|
||||
void startTransports(std::unordered_map<std::string, std::string>);
|
||||
void startSellings(std::unordered_map<std::string, std::string>);
|
||||
void paySalary();
|
||||
void calculateSatisfaction();
|
||||
|
||||
static constexpr const char *QUERY_GET_DIRECTORS = R"(
|
||||
select d.may_produce, d.may_sell, d.may_start_transport, b.id branch_id, fu.id falukantUserId, d.id
|
||||
from falukant_data.director d
|
||||
join falukant_data.falukant_user fu
|
||||
on fu.id = d.employer_user_id
|
||||
join falukant_data."character" c
|
||||
on c.id = d.director_character_id
|
||||
join falukant_data.branch b
|
||||
on b.region_id = c.region_id
|
||||
and b.falukant_user_id = fu.id
|
||||
where current_time between '08:00:00' and '17:00:00'
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_GET_BEST_PRODUCTION = R"(
|
||||
select fdu."id" falukant_user_id, fdu."money", fdu."certificate", ftp."id" product_id, ftp.label_tr,(select sum("quantity")
|
||||
from "falukant_data"."stock" fds
|
||||
where fds."branch_id" = fdb."id") stock_size, coalesce((select sum(coalesce(fdi."quantity", 0))
|
||||
from "falukant_data"."stock" fds
|
||||
join "falukant_data"."inventory" fdi
|
||||
on fdi."stock_id" = fds."id"
|
||||
where fds."branch_id" = fdb."id"), 0) used_in_stock,
|
||||
(ftp."sell_cost" * (fdtpw."worth_percent" + (fdk_character."knowledge" * 2 + fdk_director."knowledge") / 3) / 100 - 6 * ftp.category) / (300.0 * ftp. production_time) worth,
|
||||
fdb."id" branch_id,
|
||||
(select count("id") from "falukant_data"."production" where "branch_id" = fdb."id") running_productions,
|
||||
coalesce((select sum(coalesce(fdp.quantity, 0)) quantity from
|
||||
falukant_data.production fdp where fdp.branch_id = fdb.id), 0) running_productions
|
||||
from "falukant_data"."director" fdd
|
||||
join "falukant_data".character fdc
|
||||
on fdc.id = fdd.director_character_id
|
||||
join "falukant_data"."falukant_user" fdu
|
||||
on fdd."employer_user_id" = fdu."id"
|
||||
join "falukant_data"."character" user_character
|
||||
on user_character."user_id" = fdu."id"
|
||||
join "falukant_data"."branch" fdb
|
||||
on fdb."falukant_user_id" = fdu."id"
|
||||
and fdb."region_id" = fdc."region_id"
|
||||
join "falukant_data"."town_product_worth" fdtpw
|
||||
on fdtpw."region_id" = fdb."region_id"
|
||||
join "falukant_data"."knowledge" fdk_character
|
||||
on
|
||||
fdk_character."product_id" = fdtpw."product_id"
|
||||
and fdk_character."character_id" = user_character."id"
|
||||
and fdk_character."product_id" = fdtpw."product_id"
|
||||
join "falukant_data"."knowledge" fdk_director
|
||||
on
|
||||
fdk_director."product_id" = fdtpw."product_id"
|
||||
and fdk_director."character_id" = fdd."director_character_id"
|
||||
and fdk_director."product_id" = fdtpw."product_id"
|
||||
join "falukant_type"."product" ftp
|
||||
on
|
||||
ftp."id" = fdtpw."product_id"
|
||||
and ftp.category <= fdu.certificate
|
||||
where fdd."id" = $1
|
||||
order by worth desc
|
||||
limit 1;
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_INSERT_PRODUCTION = R"(
|
||||
insert into "falukant_data"."production" ("branch_id", "product_id", "quantity")
|
||||
values ($1, $2, $3)
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_GET_INVENTORY = R"(
|
||||
select i.id, i.product_id, i.quantity, i.quality, p.sell_cost, fu.id user_id, b.region_id, b.id branch_id
|
||||
from falukant_data.inventory i
|
||||
join falukant_data.stock s
|
||||
on s.id = i.stock_id
|
||||
join falukant_data.branch b
|
||||
on b.id = s.branch_id
|
||||
join falukant_data.falukant_user fu
|
||||
on fu.id = b.falukant_user_id
|
||||
join falukant_data.director d
|
||||
on d.employer_user_id = fu.id
|
||||
join falukant_type.product p
|
||||
on p.id = i.product_id
|
||||
where d.id = $1
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_REMOVE_INVENTORY = R"(
|
||||
delete from falukant_data.inventory
|
||||
where id = $1
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_ADD_SELL_LOG = R"(
|
||||
INSERT INTO falukant_log.sell ("region_id", "product_id", "quantity", "seller_id")
|
||||
values ($1, $2, $3, $4)
|
||||
ON CONFLICT ("region_id", "product_id", "seller_id")
|
||||
DO UPDATE
|
||||
SET "quantity" = falukant_log.sell."quantity" + EXCLUDED.quantity
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_GET_SALARY_TO_PAY = R"(
|
||||
select d.id, d.employer_user_id, d.income
|
||||
from falukant_data.director d
|
||||
where date(d.last_salary_payout) < date(now())
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_SET_SALARY_PAYED = R"(
|
||||
update falukant_data.director
|
||||
set last_salary_payout = NOW()
|
||||
where id = $1
|
||||
)";
|
||||
|
||||
static constexpr const char *QUERY_UPDATE_SATISFACTION = R"(
|
||||
WITH new_sats AS (
|
||||
SELECT
|
||||
d.id,
|
||||
ROUND(
|
||||
d.income::numeric
|
||||
/
|
||||
(
|
||||
c.title_of_nobility
|
||||
* POWER(1.231, AVG(k.knowledge) / 1.5)
|
||||
)
|
||||
* 100
|
||||
) AS new_satisfaction
|
||||
FROM falukant_data.director d
|
||||
JOIN falukant_data.knowledge k
|
||||
ON d.director_character_id = k.character_id
|
||||
JOIN falukant_data.character c
|
||||
ON c.id = d.director_character_id
|
||||
GROUP BY d.id, c.title_of_nobility, d.income
|
||||
)
|
||||
UPDATE falukant_data.director dir
|
||||
SET satisfaction = ns.new_satisfaction
|
||||
FROM new_sats ns
|
||||
WHERE dir.id = ns.id
|
||||
-- Nur updaten, wenn sich der Wert tatsächlich ändert:
|
||||
AND dir.satisfaction IS DISTINCT FROM ns.new_satisfaction
|
||||
RETURNING dir.employer_user_id;
|
||||
)";
|
||||
};
|
||||
|
||||
#endif // DIRECTOR_WORKER_H
|
||||
Reference in New Issue
Block a user