All Latest
6a1d10552a8d0: POST https://beta.jinchangxiao.com/vue/erp-analysis/list-case-ticket at 2026-06-01 12:53:41 pm by 221.216.117.119

Performance Profiling

Total processing time: 40 ms; Peak memory: 5.003 MB. Show Profiling Timeline

总计9条数据
TimeDurationCategoryInfo
  
12:53:41.18212.2 msyii\db\Command::querySELECT COALESCE(ROUND(sum(summary.erp_labor_cost_amount)::numeric, 2), 0) as erp_labor_cost_amount, COALESCE(ROUND(sum(summary.work_hours)::numeric, 2), 0) as work_hours, COALESCE(ROUND(COALESCE(sum(summary.erp_labor_cost_amount), 0)::numeric / NULLIF(sum(summary.work_hours)::numeric, 0), 2), 0) as average_labor_cost_per_hour FROM (SELECT ct.ticket_id, ct.ticket_type, ct.ticket_type_name, ct.ticket_no, ct.case_id, ct.case_no, ct.project_id, p.project_title, ct.client_id, c.name as client_name, ct.sales_rep_id, sr.name as sales_rep_name, ct.engineer_id, e.name as engineer_name, ROUND(ct.work_hours::numeric, 2) as work_hours, ROUND(COALESCE(tlc.erp_labor_cost_amount, 0)::numeric, 2) as erp_labor_cost_amount, CASE WHEN ROUND(ct.work_hours::numeric, 2) = TRUNC(ROUND(ct.work_hours::numeric, 2)) THEN TRUNC(ROUND(ct.work_hours::numeric, 2))::text || 'h' ELSE ROUND(ct.work_hours::numeric, 2)::text || 'h' END as hours_spent_display, ct.start_at, to_char(ct.start_at, 'YYYY/MM/DD HH24:MI') as start_at_display, ct.end_at, to_char(ct.end_at, 'YYYY/MM/DD HH24:MI') as end_at_display FROM ((SELECT p.id as ticket_id, 'preSales' as ticket_type, '售前' as ticket_type_name, p.ticket_no, p.case_id, c.case_no, COALESCE(p.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, p.engineer_id, p.start_at, p.end_at, date_trunc('month', p.start_at)::date as settle_month, EXTRACT(EPOCH FROM (p.end_at - p.start_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_pre_sales" "p" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = p.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(p.client_id, c.client_id) WHERE (p.start_at IS NOT NULL) AND (p.end_at IS NOT NULL) AND (p.end_at > p.start_at) AND (p.engineer_id IS NOT NULL) AND (("p"."is_draft"=FALSE) OR (p.is_draft IS NULL)) AND ("p"."start_at" >= '2026-01-01 00:00:00') AND ("p"."start_at" <= '2026-12-31 23:59:59')) UNION ALL ( SELECT i.id as ticket_id, 'implementRecords' as ticket_type, '实施' as ticket_type_name, i.ticket_no, i.case_id, c.case_no, COALESCE(i.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, c.last_engineer as engineer_id, i.arrived_at as start_at, i.left_at as end_at, date_trunc('month', i.arrived_at)::date as settle_month, EXTRACT(EPOCH FROM (i.left_at - i.arrived_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_implement_records" "i" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = i.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(i.client_id, c.client_id) WHERE (i.arrived_at IS NOT NULL) AND (i.left_at IS NOT NULL) AND (i.left_at > i.arrived_at) AND (c.last_engineer IS NOT NULL) AND (("i"."is_draft"=FALSE) OR (i.is_draft IS NULL)) AND ("i"."arrived_at" >= '2026-01-01 00:00:00') AND ("i"."arrived_at" <= '2026-12-31 23:59:59') )) "ct" LEFT JOIN "a57be577deb434"."tbl_clients" "c" ON c.id = ct.client_id LEFT JOIN "a57be577deb434"."tbl_projects" "p" ON p.id = ct.project_id LEFT JOIN "a57be577deb434"."tbl_users" "sr" ON sr.id = ct.sales_rep_id LEFT JOIN "a57be577deb434"."tbl_users" "e" ON e.id = ct.engineer_id LEFT JOIN (SELECT ct.ticket_id, ct.ticket_type, COALESCE(sum(CASE WHEN ct.work_hours > 0 THEN COALESCE(payroll.amount, 0) / GREATEST(( SELECT COUNT(1) FROM generate_series(ct.settle_month::timestamp, (ct.settle_month + interval '1 month - 1 day')::timestamp, interval '1 day') AS work_dates(work_date) LEFT JOIN a57be577deb434.tbl_legal_holidays lh ON lh.edate = work_dates.work_date::date LEFT JOIN a57be577deb434.tbl_punch_strategy_schedules pss ON pss.edate = work_dates.work_date::date AND pss.punch_strategy_id = ps.id WHERE CASE WHEN ps.id IS NULL THEN EXTRACT(ISODOW FROM work_dates.work_date)::integer BETWEEN 1 AND 5 WHEN pss.id IS NOT NULL THEN pss.need_work WHEN ps.legal_holiday AND lh.id IS NOT NULL THEN lh.is_exchange ELSE (ps.week::integer & (1 << (EXTRACT(ISODOW FROM work_dates.work_date)::integer - 1))) <> 0 END ), 1) / GREATEST((CASE WHEN ps.id IS NULL THEN 8 WHEN ps.punch_type = 0 THEN 8 WHEN ps.work_hour IS NOT NULL AND ps.work_hour > 0 THEN ps.work_hour ELSE 8 END), 1) * ct.work_hours ELSE 0 END), 0) as erp_labor_cost_amount FROM ((SELECT p.id as ticket_id, 'preSales' as ticket_type, '售前' as ticket_type_name, p.ticket_no, p.case_id, c.case_no, COALESCE(p.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, p.engineer_id, p.start_at, p.end_at, date_trunc('month', p.start_at)::date as settle_month, EXTRACT(EPOCH FROM (p.end_at - p.start_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_pre_sales" "p" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = p.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(p.client_id, c.client_id) WHERE (p.start_at IS NOT NULL) AND (p.end_at IS NOT NULL) AND (p.end_at > p.start_at) AND (p.engineer_id IS NOT NULL) AND (("p"."is_draft"=FALSE) OR (p.is_draft IS NULL)) AND ("p"."start_at" >= '2026-01-01 00:00:00') AND ("p"."start_at" <= '2026-12-31 23:59:59')) UNION ALL ( SELECT i.id as ticket_id, 'implementRecords' as ticket_type, '实施' as ticket_type_name, i.ticket_no, i.case_id, c.case_no, COALESCE(i.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, c.last_engineer as engineer_id, i.arrived_at as start_at, i.left_at as end_at, date_trunc('month', i.arrived_at)::date as settle_month, EXTRACT(EPOCH FROM (i.left_at - i.arrived_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_implement_records" "i" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = i.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(i.client_id, c.client_id) WHERE (i.arrived_at IS NOT NULL) AND (i.left_at IS NOT NULL) AND (i.left_at > i.arrived_at) AND (c.last_engineer IS NOT NULL) AND (("i"."is_draft"=FALSE) OR (i.is_draft IS NULL)) AND ("i"."arrived_at" >= '2026-01-01 00:00:00') AND ("i"."arrived_at" <= '2026-12-31 23:59:59') )) "ct" LEFT JOIN (SELECT pay.user_id, pay.settle_month, COALESCE(sum(pay.amount), 0) as amount FROM ((SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_wage_ticket_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_wage_tickets" "t" ON am.erp_wage_ticket_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month") UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_social_insurance_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_social_insurances" "t" ON am.erp_social_insurance_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" ) UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_provident_fund_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_provident_funds" "t" ON am.erp_provident_fund_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" ) UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_personal_tax_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_personal_taxs" "t" ON am.erp_personal_tax_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" )) "pay" GROUP BY "pay"."user_id", "pay"."settle_month") "payroll" ON payroll.user_id = ct.engineer_id AND payroll.settle_month = ct.settle_month LEFT JOIN "a57be577deb434"."tbl_punch_strategy_resource_rels" "psrr" ON psrr.user_id = ct.engineer_id LEFT JOIN "a57be577deb434"."tbl_punch_strategies" "ps" ON ps.id = psrr.punch_strategy_id GROUP BY "ct"."ticket_id", "ct"."ticket_type") "tlc" ON tlc.ticket_id = ct.ticket_id AND tlc.ticket_type = ct.ticket_type WHERE "ct"."engineer_id"='5064') "summary"
12:53:41.2019.8 msyii\db\Command::querySELECT ct.ticket_id, ct.ticket_type, ct.ticket_type_name, ct.ticket_no, ct.case_id, ct.case_no, ct.project_id, p.project_title, ct.client_id, c.name as client_name, ct.sales_rep_id, sr.name as sales_rep_name, ct.engineer_id, e.name as engineer_name, ROUND(ct.work_hours::numeric, 2) as work_hours, ROUND(COALESCE(tlc.erp_labor_cost_amount, 0)::numeric, 2) as erp_labor_cost_amount, CASE WHEN ROUND(ct.work_hours::numeric, 2) = TRUNC(ROUND(ct.work_hours::numeric, 2)) THEN TRUNC(ROUND(ct.work_hours::numeric, 2))::text || 'h' ELSE ROUND(ct.work_hours::numeric, 2)::text || 'h' END as hours_spent_display, ct.start_at, to_char(ct.start_at, 'YYYY/MM/DD HH24:MI') as start_at_display, ct.end_at, to_char(ct.end_at, 'YYYY/MM/DD HH24:MI') as end_at_display FROM ((SELECT p.id as ticket_id, 'preSales' as ticket_type, '售前' as ticket_type_name, p.ticket_no, p.case_id, c.case_no, COALESCE(p.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, p.engineer_id, p.start_at, p.end_at, date_trunc('month', p.start_at)::date as settle_month, EXTRACT(EPOCH FROM (p.end_at - p.start_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_pre_sales" "p" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = p.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(p.client_id, c.client_id) WHERE (p.start_at IS NOT NULL) AND (p.end_at IS NOT NULL) AND (p.end_at > p.start_at) AND (p.engineer_id IS NOT NULL) AND (("p"."is_draft"=FALSE) OR (p.is_draft IS NULL)) AND ("p"."start_at" >= '2026-01-01 00:00:00') AND ("p"."start_at" <= '2026-12-31 23:59:59')) UNION ALL ( SELECT i.id as ticket_id, 'implementRecords' as ticket_type, '实施' as ticket_type_name, i.ticket_no, i.case_id, c.case_no, COALESCE(i.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, c.last_engineer as engineer_id, i.arrived_at as start_at, i.left_at as end_at, date_trunc('month', i.arrived_at)::date as settle_month, EXTRACT(EPOCH FROM (i.left_at - i.arrived_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_implement_records" "i" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = i.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(i.client_id, c.client_id) WHERE (i.arrived_at IS NOT NULL) AND (i.left_at IS NOT NULL) AND (i.left_at > i.arrived_at) AND (c.last_engineer IS NOT NULL) AND (("i"."is_draft"=FALSE) OR (i.is_draft IS NULL)) AND ("i"."arrived_at" >= '2026-01-01 00:00:00') AND ("i"."arrived_at" <= '2026-12-31 23:59:59') )) "ct" LEFT JOIN "a57be577deb434"."tbl_clients" "c" ON c.id = ct.client_id LEFT JOIN "a57be577deb434"."tbl_projects" "p" ON p.id = ct.project_id LEFT JOIN "a57be577deb434"."tbl_users" "sr" ON sr.id = ct.sales_rep_id LEFT JOIN "a57be577deb434"."tbl_users" "e" ON e.id = ct.engineer_id LEFT JOIN (SELECT ct.ticket_id, ct.ticket_type, COALESCE(sum(CASE WHEN ct.work_hours > 0 THEN COALESCE(payroll.amount, 0) / GREATEST(( SELECT COUNT(1) FROM generate_series(ct.settle_month::timestamp, (ct.settle_month + interval '1 month - 1 day')::timestamp, interval '1 day') AS work_dates(work_date) LEFT JOIN a57be577deb434.tbl_legal_holidays lh ON lh.edate = work_dates.work_date::date LEFT JOIN a57be577deb434.tbl_punch_strategy_schedules pss ON pss.edate = work_dates.work_date::date AND pss.punch_strategy_id = ps.id WHERE CASE WHEN ps.id IS NULL THEN EXTRACT(ISODOW FROM work_dates.work_date)::integer BETWEEN 1 AND 5 WHEN pss.id IS NOT NULL THEN pss.need_work WHEN ps.legal_holiday AND lh.id IS NOT NULL THEN lh.is_exchange ELSE (ps.week::integer & (1 << (EXTRACT(ISODOW FROM work_dates.work_date)::integer - 1))) <> 0 END ), 1) / GREATEST((CASE WHEN ps.id IS NULL THEN 8 WHEN ps.punch_type = 0 THEN 8 WHEN ps.work_hour IS NOT NULL AND ps.work_hour > 0 THEN ps.work_hour ELSE 8 END), 1) * ct.work_hours ELSE 0 END), 0) as erp_labor_cost_amount FROM ((SELECT p.id as ticket_id, 'preSales' as ticket_type, '售前' as ticket_type_name, p.ticket_no, p.case_id, c.case_no, COALESCE(p.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, p.engineer_id, p.start_at, p.end_at, date_trunc('month', p.start_at)::date as settle_month, EXTRACT(EPOCH FROM (p.end_at - p.start_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_pre_sales" "p" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = p.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(p.client_id, c.client_id) WHERE (p.start_at IS NOT NULL) AND (p.end_at IS NOT NULL) AND (p.end_at > p.start_at) AND (p.engineer_id IS NOT NULL) AND (("p"."is_draft"=FALSE) OR (p.is_draft IS NULL)) AND ("p"."start_at" >= '2026-01-01 00:00:00') AND ("p"."start_at" <= '2026-12-31 23:59:59')) UNION ALL ( SELECT i.id as ticket_id, 'implementRecords' as ticket_type, '实施' as ticket_type_name, i.ticket_no, i.case_id, c.case_no, COALESCE(i.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, c.last_engineer as engineer_id, i.arrived_at as start_at, i.left_at as end_at, date_trunc('month', i.arrived_at)::date as settle_month, EXTRACT(EPOCH FROM (i.left_at - i.arrived_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_implement_records" "i" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = i.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(i.client_id, c.client_id) WHERE (i.arrived_at IS NOT NULL) AND (i.left_at IS NOT NULL) AND (i.left_at > i.arrived_at) AND (c.last_engineer IS NOT NULL) AND (("i"."is_draft"=FALSE) OR (i.is_draft IS NULL)) AND ("i"."arrived_at" >= '2026-01-01 00:00:00') AND ("i"."arrived_at" <= '2026-12-31 23:59:59') )) "ct" LEFT JOIN (SELECT pay.user_id, pay.settle_month, COALESCE(sum(pay.amount), 0) as amount FROM ((SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_wage_ticket_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_wage_tickets" "t" ON am.erp_wage_ticket_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month") UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_social_insurance_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_social_insurances" "t" ON am.erp_social_insurance_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" ) UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_provident_fund_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_provident_funds" "t" ON am.erp_provident_fund_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" ) UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_personal_tax_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_personal_taxs" "t" ON am.erp_personal_tax_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" )) "pay" GROUP BY "pay"."user_id", "pay"."settle_month") "payroll" ON payroll.user_id = ct.engineer_id AND payroll.settle_month = ct.settle_month LEFT JOIN "a57be577deb434"."tbl_punch_strategy_resource_rels" "psrr" ON psrr.user_id = ct.engineer_id LEFT JOIN "a57be577deb434"."tbl_punch_strategies" "ps" ON ps.id = psrr.punch_strategy_id GROUP BY "ct"."ticket_id", "ct"."ticket_type") "tlc" ON tlc.ticket_id = ct.ticket_id AND tlc.ticket_type = ct.ticket_type WHERE "ct"."engineer_id"='5064' ORDER BY ct.start_at DESC, ct.ticket_id DESC LIMIT 40
12:53:41.1955.2 msyii\db\Command::querySELECT COUNT(*) FROM (SELECT ct.ticket_id, ct.ticket_type, ct.ticket_type_name, ct.ticket_no, ct.case_id, ct.case_no, ct.project_id, p.project_title, ct.client_id, c.name as client_name, ct.sales_rep_id, sr.name as sales_rep_name, ct.engineer_id, e.name as engineer_name, ROUND(ct.work_hours::numeric, 2) as work_hours, ROUND(COALESCE(tlc.erp_labor_cost_amount, 0)::numeric, 2) as erp_labor_cost_amount, CASE WHEN ROUND(ct.work_hours::numeric, 2) = TRUNC(ROUND(ct.work_hours::numeric, 2)) THEN TRUNC(ROUND(ct.work_hours::numeric, 2))::text || 'h' ELSE ROUND(ct.work_hours::numeric, 2)::text || 'h' END as hours_spent_display, ct.start_at, to_char(ct.start_at, 'YYYY/MM/DD HH24:MI') as start_at_display, ct.end_at, to_char(ct.end_at, 'YYYY/MM/DD HH24:MI') as end_at_display FROM ((SELECT p.id as ticket_id, 'preSales' as ticket_type, '售前' as ticket_type_name, p.ticket_no, p.case_id, c.case_no, COALESCE(p.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, p.engineer_id, p.start_at, p.end_at, date_trunc('month', p.start_at)::date as settle_month, EXTRACT(EPOCH FROM (p.end_at - p.start_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_pre_sales" "p" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = p.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(p.client_id, c.client_id) WHERE (p.start_at IS NOT NULL) AND (p.end_at IS NOT NULL) AND (p.end_at > p.start_at) AND (p.engineer_id IS NOT NULL) AND (("p"."is_draft"=FALSE) OR (p.is_draft IS NULL)) AND ("p"."start_at" >= '2026-01-01 00:00:00') AND ("p"."start_at" <= '2026-12-31 23:59:59')) UNION ALL ( SELECT i.id as ticket_id, 'implementRecords' as ticket_type, '实施' as ticket_type_name, i.ticket_no, i.case_id, c.case_no, COALESCE(i.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, c.last_engineer as engineer_id, i.arrived_at as start_at, i.left_at as end_at, date_trunc('month', i.arrived_at)::date as settle_month, EXTRACT(EPOCH FROM (i.left_at - i.arrived_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_implement_records" "i" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = i.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(i.client_id, c.client_id) WHERE (i.arrived_at IS NOT NULL) AND (i.left_at IS NOT NULL) AND (i.left_at > i.arrived_at) AND (c.last_engineer IS NOT NULL) AND (("i"."is_draft"=FALSE) OR (i.is_draft IS NULL)) AND ("i"."arrived_at" >= '2026-01-01 00:00:00') AND ("i"."arrived_at" <= '2026-12-31 23:59:59') )) "ct" LEFT JOIN "a57be577deb434"."tbl_clients" "c" ON c.id = ct.client_id LEFT JOIN "a57be577deb434"."tbl_projects" "p" ON p.id = ct.project_id LEFT JOIN "a57be577deb434"."tbl_users" "sr" ON sr.id = ct.sales_rep_id LEFT JOIN "a57be577deb434"."tbl_users" "e" ON e.id = ct.engineer_id LEFT JOIN (SELECT ct.ticket_id, ct.ticket_type, COALESCE(sum(CASE WHEN ct.work_hours > 0 THEN COALESCE(payroll.amount, 0) / GREATEST(( SELECT COUNT(1) FROM generate_series(ct.settle_month::timestamp, (ct.settle_month + interval '1 month - 1 day')::timestamp, interval '1 day') AS work_dates(work_date) LEFT JOIN a57be577deb434.tbl_legal_holidays lh ON lh.edate = work_dates.work_date::date LEFT JOIN a57be577deb434.tbl_punch_strategy_schedules pss ON pss.edate = work_dates.work_date::date AND pss.punch_strategy_id = ps.id WHERE CASE WHEN ps.id IS NULL THEN EXTRACT(ISODOW FROM work_dates.work_date)::integer BETWEEN 1 AND 5 WHEN pss.id IS NOT NULL THEN pss.need_work WHEN ps.legal_holiday AND lh.id IS NOT NULL THEN lh.is_exchange ELSE (ps.week::integer & (1 << (EXTRACT(ISODOW FROM work_dates.work_date)::integer - 1))) <> 0 END ), 1) / GREATEST((CASE WHEN ps.id IS NULL THEN 8 WHEN ps.punch_type = 0 THEN 8 WHEN ps.work_hour IS NOT NULL AND ps.work_hour > 0 THEN ps.work_hour ELSE 8 END), 1) * ct.work_hours ELSE 0 END), 0) as erp_labor_cost_amount FROM ((SELECT p.id as ticket_id, 'preSales' as ticket_type, '售前' as ticket_type_name, p.ticket_no, p.case_id, c.case_no, COALESCE(p.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, p.engineer_id, p.start_at, p.end_at, date_trunc('month', p.start_at)::date as settle_month, EXTRACT(EPOCH FROM (p.end_at - p.start_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_pre_sales" "p" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = p.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(p.client_id, c.client_id) WHERE (p.start_at IS NOT NULL) AND (p.end_at IS NOT NULL) AND (p.end_at > p.start_at) AND (p.engineer_id IS NOT NULL) AND (("p"."is_draft"=FALSE) OR (p.is_draft IS NULL)) AND ("p"."start_at" >= '2026-01-01 00:00:00') AND ("p"."start_at" <= '2026-12-31 23:59:59')) UNION ALL ( SELECT i.id as ticket_id, 'implementRecords' as ticket_type, '实施' as ticket_type_name, i.ticket_no, i.case_id, c.case_no, COALESCE(i.client_id, c.client_id) as client_id, c.project_id, cl.sales_rep as sales_rep_id, c.last_engineer as engineer_id, i.arrived_at as start_at, i.left_at as end_at, date_trunc('month', i.arrived_at)::date as settle_month, EXTRACT(EPOCH FROM (i.left_at - i.arrived_at)) / 3600 as work_hours FROM "a57be577deb434"."tbl_implement_records" "i" LEFT JOIN "a57be577deb434"."tbl_cases" "c" ON c.id = i.case_id LEFT JOIN "a57be577deb434"."tbl_clients" "cl" ON cl.id = COALESCE(i.client_id, c.client_id) WHERE (i.arrived_at IS NOT NULL) AND (i.left_at IS NOT NULL) AND (i.left_at > i.arrived_at) AND (c.last_engineer IS NOT NULL) AND (("i"."is_draft"=FALSE) OR (i.is_draft IS NULL)) AND ("i"."arrived_at" >= '2026-01-01 00:00:00') AND ("i"."arrived_at" <= '2026-12-31 23:59:59') )) "ct" LEFT JOIN (SELECT pay.user_id, pay.settle_month, COALESCE(sum(pay.amount), 0) as amount FROM ((SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_wage_ticket_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_wage_tickets" "t" ON am.erp_wage_ticket_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month") UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_social_insurance_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_social_insurances" "t" ON am.erp_social_insurance_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" ) UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_provident_fund_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_provident_funds" "t" ON am.erp_provident_fund_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" ) UNION ALL ( SELECT am.user_id, t.settle_month::date as settle_month, COALESCE(sum(am.amount), 0) as amount FROM "a57be577deb434"."tbl_erp_personal_tax_amounts" "am" LEFT JOIN "a57be577deb434"."tbl_erp_personal_taxs" "t" ON am.erp_personal_tax_id = t.id WHERE ("t"."status"=2) AND (am.user_id IS NOT NULL) GROUP BY "am"."user_id", "t"."settle_month" )) "pay" GROUP BY "pay"."user_id", "pay"."settle_month") "payroll" ON payroll.user_id = ct.engineer_id AND payroll.settle_month = ct.settle_month LEFT JOIN "a57be577deb434"."tbl_punch_strategy_resource_rels" "psrr" ON psrr.user_id = ct.engineer_id LEFT JOIN "a57be577deb434"."tbl_punch_strategies" "ps" ON ps.id = psrr.punch_strategy_id GROUP BY "ct"."ticket_id", "ct"."ticket_type") "tlc" ON tlc.ticket_id = ct.ticket_id AND tlc.ticket_type = ct.ticket_type WHERE "ct"."engineer_id"='5064' ORDER BY ct.start_at DESC, ct.ticket_id DESC) "c"
12:53:41.2110.9 msyii\db\Command::queryINSERT INTO "global"."tbl_api_log" ("code", "schema", "user_id", "device_type", "url", "request", "response", "php_error", "time", "duration") VALUES (200, 'a57be577deb434', 1001, 5, 'vue/erp-analysis/list-case-ticket', '{"user_id":"5064","created_at_period":"erpcurrentfascalyear","created_at_to":"","created_at_from":"","page":"1","pageSize":"40","listReload":"true","web_access_token":"YNQKwEYJYN8muCSh8ExnNlBf2oepDAlv"}', '{"code":2000,"result":{"erp_labor_cost_amount":"201.07","work_hours":"2.00","average_labor_cost_per_hour":"100.54","list":[{"ticket_id":1945,"ticket_type":"preSales","ticket_type_name":"\u552e\u524d","ticket_no":"PS260601001001","case_id":9260,"case_no":"PS260601001","project_id":4173,"project_title":"\u6d4b\u8bd5\u5de5\u5355\u4eba\u5de5\u6210\u672c\u95ee\u9898","client_id":3311,"client_name":"\u5317\u4eac\u534e\u8fb0\u60a6\u79d1\u6280\u6709\u9650\u516c\u53f8","sales_rep_id":1001,"sales_rep_name":"\u5218\u4eba\u8bda","engineer_id":5064,"engineer_name":"\u59da\u96ea\u7eaf","work_hours":"2.00","erp_labor_cost_amount":"201.07","hours_spent_display":"2h","start_at":"2026-06-01 00:00:00","start_at_display":"2026\/06\/01 00:00","end_at":"2026-06-01 02:00:00","end_at_display":"2026\/06\/01 02:00","salesRep":{"id":1001,"key":1001,"name":"\u5218\u4eba\u8bda"}}],"pagenation":{"totalcount":1,"thispage":1,"pagesize":40}},"status":1,"msg":[{"name":"success","success":"\u6210\u529f\u83b7\u53d6\u6570\u636e","error":""}],"mod":0,"ip":"221.216.117.119","ua":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.15; rv:151.0) Gecko\/20100101 Firefox\/151.0"}', FALSE, '2026-06-01 12:53:41', 36632064) RETURNING "id"
12:53:41.1760.6 msyii\db\Command::querySELECT * FROM "global"."vw_user_login" WHERE "id"=1001
12:53:41.1770.4 msyii\db\Command::querySELECT * FROM "a57be577deb434"."tbl_users" WHERE "id"=1001
12:53:41.1810.2 msyii\db\Command::querySELECT * FROM "a57be577deb434"."tbl_erp_settles" WHERE ("date"='2025-12-01') AND ("is_settle"=TRUE)
12:53:41.1760.2 msyii\db\Connection::openOpening DB connection: pgsql:host=postgresql.server.local;port=5432;dbname=beta
12:53:41.1810.2 msyii\db\Command::querySELECT * FROM "a57be577deb434"."tbl_erp_settles" WHERE ("date"='2026-12-01') AND ("is_settle"=TRUE)