| | |
| | | <select id="listPage" resultType="com.ruoyi.basic.vo.CustomerVo"> |
| | | select |
| | | c.*, |
| | | u.user_name usage_user_name, |
| | | u.nick_name usage_user_name, |
| | | ( |
| | | select group_concat(u2.user_name separator ', ') |
| | | from customer_user cu |
| | |
| | | </where> |
| | | order by c.id desc |
| | | </select> |
| | | <!-- |
| | | 客户往来(回款台账主表): |
| | | 应收金额 = 各销售台账的应收金额之和, |
| | | 单条台账应收金额 = 该台账已出库金额 − 已退货款 − 已回款金额(不小于 0)。 |
| | | 即「回款金额」是累计回款,「应收金额」是还没收回来的部分。 |
| | | 注意 出库金额 = sum(出库数量 * 6位小数的含税单价),会带有「分」以下的零头, |
| | | 而回款是按分录入的整数金额,两者相减会出现 0.0045、0.004 这类无意义的尾差, |
| | | 因此单条台账的应收金额按分计算,分以下的尾差不计入。 |
| | | 注意 必须先按台账算好应收、再按客户汇总(与 customewTransactionsDetails 口径一致)。 |
| | | 若先按客户汇总再取整,各家台账的尾差会累加,出现「主表 0.01、明细全是 0」的对不上问题。 |
| | | 注意 出库金额按台账 (sales_ledger.id) 聚合,同一发货单多批号出库时不会重复计数。 |
| | | --> |
| | | <select id="customewTransactions" resultType="com.ruoyi.sales.vo.CustomerTransactionsVo"> |
| | | select T1.customer_id, |
| | | c.customer_name, |
| | | T1.contractAmounts, |
| | | IFNULL(T2.receiptPaymentAmount, 0) AS receiptPaymentAmount, |
| | | IFNULL(T3.outboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS receiptableAmount |
| | | IFNULL(T5.receiptableAmount, 0) AS receiptableAmount |
| | | from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1 |
| | | left join (select customer_id, sum(collection_amount) as receiptPaymentAmount from account_sales_collection group by customer_id) T2 on T1.customer_id = T2.customer_id |
| | | left join ( |
| | | SELECT |
| | | sl.customer_id, |
| | | sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount |
| | | FROM stock_out_record sor |
| | | LEFT join shipping_info s on sor.record_id = s.id |
| | | LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id |
| | | LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id |
| | | WHERE sor.record_type='13' |
| | | and sor.approval_status=1 |
| | | and slp.type = 1 |
| | | group by sl.customer_id |
| | | ) T3 on T3.customer_id=T1.customer_id |
| | | left join ( |
| | | select |
| | | sl.customer_id, |
| | | sum(rm.refund_amount) as returnAmount |
| | | from return_management rm |
| | | left join shipping_info si on rm.shipping_id = si.id |
| | | left join sales_ledger sl on si.sales_ledger_id = sl.id |
| | | where rm.status=1 |
| | | sum(GREATEST( |
| | | TRUNCATE(IFNULL(T3.outboundAmount, 0) - IFNULL(T4.returnAmount, 0) |
| | | - IFNULL(T6.receiptPaymentAmount, 0), 2), |
| | | 0)) AS receiptableAmount |
| | | from sales_ledger sl |
| | | left join ( |
| | | select |
| | | sl.id, |
| | | sum(t.collection_amount) as receiptPaymentAmount |
| | | from ( |
| | | select |
| | | ascc.collection_amount, |
| | | s.sales_ledger_id |
| | | from account_sales_collection ascc |
| | | left join stock_out_record sor on FIND_IN_SET(sor.id, ascc.stock_out_record_ids) > 0 |
| | | left join shipping_info s on sor.record_id = s.id |
| | | where sor.record_type='13' |
| | | and sor.approval_status=1 |
| | | group by ascc.id, s.sales_ledger_id |
| | | ) t |
| | | left join sales_ledger sl on t.sales_ledger_id = sl.id |
| | | group by sl.id |
| | | ) T6 on T6.id = sl.id |
| | | left join ( |
| | | SELECT |
| | | sl.id, |
| | | sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount |
| | | FROM stock_out_record sor |
| | | left join shipping_info s on sor.record_id = s.id |
| | | LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id |
| | | LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id |
| | | WHERE sor.record_type='13' |
| | | and sor.approval_status=1 |
| | | and slp.type = 1 |
| | | group by sl.id |
| | | ) T3 on T3.id = sl.id |
| | | left join ( |
| | | select |
| | | sl.id, |
| | | sum(rm.refund_amount) as returnAmount |
| | | from return_management rm |
| | | left join shipping_info si on rm.shipping_id = si.id |
| | | left join sales_ledger sl on si.sales_ledger_id = sl.id |
| | | where rm.status=1 |
| | | group by sl.id |
| | | ) T4 on T4.id = sl.id |
| | | group by sl.customer_id |
| | | ) T4 on T4.customer_id=T1.customer_id |
| | | ) T5 on T5.customer_id = T1.customer_id |
| | | left join customer c on T1.customer_id = c.id |
| | | <where> |
| | | <if test="customerName!=null and customerName!=''"> |
| | |
| | | </where> |
| | | order by T1.customer_id desc |
| | | </select> |
| | | <!-- |
| | | 客户往来明细(按销售台账):应收金额 = 该台账已出库 − 已退货 − 已回款。 |
| | | 单条回款只统计一次:同一回款可能同时命中该台账的多条出库记录, |
| | | 先用 GROUP BY ascc.id, sl.id 去重,再按台账求和。 |
| | | 金额同样按分(2 位小数)计算,分以下的尾差不计入。 |
| | | --> |
| | | <select id="customewTransactionsDetails" |
| | | resultType="com.ruoyi.sales.vo.CustomerTransactionsDetailsVo"> |
| | | select sl.id salesLedgerId, |
| | |
| | | sl.execution_date, |
| | | sl.contract_amount, |
| | | IFNULL(T1.receiptPaymentAmount, 0) AS receiptPaymentAmount, |
| | | IFNULL(T2.outboundAmount, 0) - IFNULL(T3.returnAmount, 0) AS receiptableAmount |
| | | GREATEST( |
| | | TRUNCATE(IFNULL(T2.outboundAmount, 0) - IFNULL(T3.returnAmount, 0) |
| | | - IFNULL(T1.receiptPaymentAmount, 0), 2), |
| | | 0) AS receiptableAmount |
| | | from sales_ledger sl |
| | | left join ( |
| | | select |