Hi Guys,
It can not only generate DAO for signle table according to database schema, but also generate DAO based on any query statement just like this
SELECT
P.logistics_area,
P.common_area,
P.percentage,
P.total_integral,
P.reserve_integral,
P.project_id,
P.contract_id AS real_contract_id,
P.contract_code,
P.work_hours,
P.department_id,
P.design_phase,
P.project_type,
P.project_code,
P.project_name,
P.plan_start_date,
P.plan_end_date,
P.start_date,
P.end_date,
P.status,
P.project_progress,
P.project_manage_id,
P.project_size,
P.project_integral,
P.project_description,
P.budget,
P.audit_reason,
P.design_type,
P.total_amount,
P.project_level,
P.old_project_discount,
P.department_manager_id,
C.sub_contract_id AS contract_id,
P.plate_id,
P.project_finish_percent,
P.parent_id,
P.total_finish_percent,
P.plate_manager_id,
P.project_grade_type,
P.last_percent,
P.project_flag,
P.is_new_project,
P.sheet_amount AS money_sum,
P.is_lock,
CASE
WHEN P.complaint_integral > 0 THEN 0
ELSE COALESCE(
(
SELECT
MIN(project_performance_id)
FROM
project_performances
WHERE
business_type = 2
AND is_settlement = FALSE
AND project_id = P.project_id
),
0
)
END AS project_performance_id,
(
SELECT
SUM(total_amount)
FROM
project_settlements
WHERE
settlement_status = 2
AND project_id = P.project_id
AND settlement_date BETWEEN :the_start_date AND :the_end_date
) AS sure_integral,
(P.project_integral - (COALESCE(
(
SELECT
SUM(total_amount)
FROM
project_settlements
WHERE
settlement_status = 2
AND project_id = P.project_id
),
0
))) AS left_sure_integral,
CASE
WHEN P.project_integral > 0 THEN ROUND(
(COALESCE(
(
SELECT
SUM(total_amount)
FROM
project_settlements
WHERE
settlement_status = 2
AND project_id = P.project_id
),
0
) * 100 / P.project_integral),
2
)
ELSE 0
END AS progress_percentage,
CASE
WHEN P.project_integral > 0 THEN ROUND(
(COALESCE(
(
SELECT
SUM(total_amount)
FROM
project_settlements
WHERE
settlement_status = 2
AND project_id = P.project_id
AND settlement_date BETWEEN :the_start_date AND :the_end_date
),
0
) * 100 / P.project_integral),
2
)
ELSE 0
END AS project_finish_percent_havetime,
COALESCE(
(
SELECT
SUM(account_integral)
FROM
plate_project_account_records
WHERE
project_id = P.project_id
AND account_date BETWEEN :the_start_date AND :the_end_date
),
0
) AS plate_sure_integral,
(P.reserve_integral - COALESCE(
(
SELECT
SUM(account_integral)
FROM
plate_project_account_records
WHERE
project_id = P.project_id
),
0
)) AS left_plate_sure_integral,
P.review_integral,
(
SELECT
SUM(par.advance_integral)
FROM
project_advance_records par
WHERE
P.project_id = par.project_id
AND FLAG = 1
) AS advance_integral,
CASE
WHEN CC.contract_signing_status = 2 THEN 1
ELSE
CASE
WHEN CC.contract_date IS NULL THEN
CASE
WHEN P.frozen_status IS NULL THEN
CASE
WHEN DATE_PART('day',NOW() - M.project_approval_time) > 120 THEN 2
ELSE 1
END
ELSE P.frozen_status
END
ELSE 1
END
END AS frozen_status,
P.product_line
FROM
projects P
LEFT JOIN sub_contracts C ON P.contract_code = C.sub_contract_code
LEFT JOIN main_projects M ON P.project_code = M.project_code
LEFT JOIN contracts CC ON CC.contract_id = P.contract_id
WHERE
P.project_id = :project_id
AND P.design_phase = :design_phase
AND P.project_name LIKE :project_name
AND P.contract_code = :contract_code
AND P.department_id = :department_id
AND P.plate_id = :project_type
AND P.project_code = :project_code
AND P.start_date = :start_date
AND P.end_date = :end_date
AND P.status = :status
AND P.project_level = :project_level
AND P.project_manage_id = :project_manage_id
AND P.status >= 0
AND P.product_line = :product_line
ORDER BY
P.project_id DESC
By the way it also can generate master-detail table DAO as well.
Please try it out and give me some feedback.
Best Regards.
Peter