387 lines
15 KiB
PHP
387 lines
15 KiB
PHP
<?php namespace Gdoo\Customer\Services;
|
|
|
|
use DB;
|
|
|
|
class CustomerService
|
|
{
|
|
/**
|
|
* 获取开票单位锁定金额
|
|
*
|
|
* @tax_id 开票单位id
|
|
*/
|
|
public static function getLockMoney($tax_id = 0)
|
|
{
|
|
return DB::select("select sum(money) money from (
|
|
select a.order_id, {$tax_id} as tax_id, isnull(a.money, 0) - isnull(b.money, 0) as money
|
|
from (
|
|
SELECT sd.order_id, SUM(ISNULL(sd.money, 0)) money
|
|
FROM customer_order_data sd
|
|
LEFT JOIN customer_order sm ON sm.id = sd.order_id
|
|
where isnull(sd.use_close, 0) = 0 and tax_id = {$tax_id}
|
|
GROUP BY sd.order_id
|
|
) as a
|
|
left join (
|
|
SELECT d.sale_id, ISNULL(sum(d.money), 0) money
|
|
FROM stock_delivery_data d
|
|
LEFT JOIN stock_delivery m ON d.delivery_id = m.id
|
|
WHERE ISNULL(m.status, 0) = 1
|
|
and d.sale_id in(select distinct a.id from customer_order a where tax_id = {$tax_id})
|
|
group by d.sale_id
|
|
) as b on a.order_id = b.sale_id
|
|
where isnull(a.money, 0) - isnull(b.money, 0) > 0
|
|
) a");
|
|
}
|
|
|
|
/**
|
|
* 获取开票单位锁定金额
|
|
*
|
|
* @tax_id 开票单位id
|
|
*/
|
|
public static function getAccList($customer_id, $from_dt, $to_dt)
|
|
{
|
|
$start_dt = '2018-01-01';
|
|
|
|
$sql = "SUM(isnull(df, 0)) - SUM(isnull(jf, 0)) - SUM(isnull(bcsyfy, 0)) as qcye
|
|
from (
|
|
--费用部分
|
|
select
|
|
sum(case when b.is_cal=0 then d.money else null end) qtfy,--其他费用
|
|
sum(case when b.is_cal=1 and ISNULL(a.adjust_type, 0)=0 and ISNULL(d.use_close,0)=0 then d.money else null end) xzfy,--本期新增费用
|
|
sum(case when b.is_cal=1 and ISNULL(a.adjust_type, 0)=1 then d.money else null end) bcsyfy,
|
|
0 as jf,
|
|
0 as df, 0 as sl
|
|
From customer_cost a --with (nolock)
|
|
left join customer_cost_category b on a.category_id = b.id
|
|
left join customer_cost_data d on a.id = d.cost_id
|
|
left join customer c on c.id = d.customer_id
|
|
left join model_bill t on t.id = d.src_type_id
|
|
where a.category_id <> 1
|
|
and a.status = 1
|
|
and a.date < '$from_dt'
|
|
and a.date >= '$start_dt'
|
|
and c.id = $customer_id
|
|
|
|
union all
|
|
|
|
--发货单(不含费用使用部分)
|
|
select null qtfy,null xzfy,null bcsyfy,sum(isnull(d.money,0)) as jf,0 as df,SUM(d.quantity) sl
|
|
from stock_delivery m
|
|
left join stock_delivery_data d on m.id = d.delivery_id
|
|
left join product p on p.id = d.product_id
|
|
left join customer_cost_category ccc on ccc.id = d.fee_category_id
|
|
left join model_bill t on t.id= d.fee_src_type_id
|
|
left join customer c on c.id = m.customer_id
|
|
where m.invoice_dt < '$from_dt'
|
|
and m.invoice_dt >= '$start_dt'
|
|
and left(p.code, 2) <> '99'
|
|
and m.status = 1 and c.id = $customer_id
|
|
|
|
union all
|
|
|
|
select 0 qtfy, 0 xzfy, 0 bcsyfy,sum(isnull(d.money,0)) as jf,0 as df, SUM(d.quantity) sl
|
|
from stock_direct m
|
|
left join stock_direct_data d on m.id = d.direct_id
|
|
left join product p on p.id = d.product_id
|
|
left join customer c on c.id = m.customer_id
|
|
where m.invoice_dt < '$from_dt'
|
|
and m.invoice_dt >= '$start_dt'
|
|
--and isnull(d.CustFreesrcBillCode,'')=''
|
|
--and isnull(d.ApplyProCode,'')=''
|
|
and left(p.code,2) <> '99'
|
|
and m.status = 1 and c.id = $customer_id
|
|
|
|
union all
|
|
|
|
--发货单(使用客户费用部分)
|
|
select null qtfy,null xzfy,SUM(d.money) bcsyfy,null as jf,0 as df,null as sl
|
|
from stock_delivery m
|
|
left join stock_delivery_data d on m.id=d.delivery_id
|
|
left join customer_cost_category ccc on ccc.id = d.fee_category_id
|
|
left join model_bill t on t.id = d.fee_src_type_id
|
|
left join customer c on c.id = m.customer_id
|
|
where m.invoice_dt < '$from_dt'
|
|
and m.invoice_dt >= '$start_dt'
|
|
and (isnull(d.fee_src_sn, '') <> '') and isnull(d.money, 0) < 0
|
|
-- and (d.fee_category_id <> 6 or (d.fee_category_id =6 and d.fee_src_type_id =46))
|
|
and m.status = 1 and c.id = $customer_id
|
|
|
|
union all
|
|
|
|
--发货单(使用促销申请赠品部分)
|
|
select 0 qtfy,0 xzfy, SUM(0-d.money) bcsyfy, 0 as jf,0 as df,0 as sl
|
|
from stock_delivery m
|
|
left join stock_delivery_data d on m.id=d.delivery_id
|
|
left join model_bill t on t.id = 17
|
|
left join promotion p on p.sn = d.promotion_sn
|
|
left join customer c on c.id = m.customer_id
|
|
where m.invoice_dt < '$from_dt'
|
|
and m.invoice_dt >= '$start_dt'
|
|
and isnull(d.promotion_sn,'') <> ''
|
|
and m.status = 1 and c.id = $customer_id
|
|
|
|
union all
|
|
|
|
--退货申请单
|
|
select 0 qtfy,0 xzfy,0 bcsyfy,sum(d.money) as jf,0 as df, SUM(d.quantity) sl
|
|
from stock_cancel m
|
|
left join stock_cancel_data d on m.id=d.cancel_id
|
|
left join customer c on c.id = m.customer_id
|
|
where m.invoice_dt < '$from_dt'
|
|
and m.invoice_dt >= '$start_dt'
|
|
and c.id = $customer_id
|
|
) as a";
|
|
$qcye = DB::query()->selectRaw($sql)->value('qcye');
|
|
|
|
// 发生额
|
|
$sql = "2 orderNum, orderD,dDate,cdwcode,cdwname,cdwabbname,cdlcode,dgst,vtype,qtfy,xzfy,bcsyfy,jf,df,sl,0 ye,srcMasterBillType,srcMasterBID, tax_id
|
|
from (
|
|
--费用部分
|
|
select 1 as orderD,
|
|
a.date as dDate,
|
|
c.code as cdwcode,c.name cdwname, c.name as cdwabbname, a.sn as cdlcode,
|
|
case when isnull(d.src_sn,'') = '' then a.remark else concat(t.name, isnull(d.src_sn,'')) end as dgst,
|
|
b.name as vtype,
|
|
case when b.is_cal=0 then d.money else null end qtfy,--其他费用
|
|
case when b.is_cal=1 and ISNULL(a.adjust_type,0)=0 and ISNULL(d.use_close,0)=0 then d.money else null end xzfy,--本期新增费用
|
|
case when b.is_cal=1 and ISNULL(a.adjust_type,0)=1 then d.money else null end bcsyfy,
|
|
0 as jf,
|
|
null as df, null as sl,
|
|
d.src_type_id as srcMasterBillType,
|
|
d.src_id as srcMasterBID,
|
|
null as tax_id
|
|
from customer_cost a
|
|
left join customer_cost_category b on a.category_id = b.id
|
|
left join customer_cost_data d on a.id=d.cost_id
|
|
left join customer c on c.id = d.customer_id
|
|
left join model_bill t on t.id=d.src_type_id
|
|
where a.category_id <> 1
|
|
and a.status=1
|
|
and a.date >= '$from_dt'
|
|
and a.date >= '$start_dt'
|
|
and a.date <= '$to_dt'
|
|
and c.id = $customer_id
|
|
|
|
--促销申请部分(物资、赠品)
|
|
union all
|
|
select 1 as orderD,
|
|
".sql_year_month_day('a.created_at', 'ts')." as dDate,
|
|
c.code as cdwcode,c.name cdwname,c.name as cdwabbname, a.sn as cdlcode,
|
|
concat('促销申请', case when a.type_id = 1 then '物资' else '赠品' end, a.sn) as dgst,
|
|
'促销费' as vtype,
|
|
0,--其他费用
|
|
undertake_money as xzfy,--本期新增费用
|
|
0 bcsyfy,
|
|
0 as jf,
|
|
0 as df, 0 as sl,
|
|
17 as srcMasterBillType,
|
|
a.id as srcMasterBID, a.tax_id
|
|
from promotion a
|
|
left join customer c on c.id = a.customer_id
|
|
where a.status = 1 and a.type_id < 3 -- AND ISNULL(a.use_close, 0) = 0
|
|
and ".sql_year_month_day('a.created_at', 'ts')." >= '$from_dt'
|
|
and ".sql_year_month_day('a.created_at', 'ts')." >= '$start_dt'
|
|
and ".sql_year_month_day('a.created_at', 'ts')." <= '$to_dt'
|
|
and c.id = $customer_id
|
|
|
|
union all
|
|
|
|
--发货单(不含费用使用部分)
|
|
select 3 as orderD,
|
|
m.invoice_dt as dDate,
|
|
c.code as cdwcode,c.name as cdwname,c.name as cdwabbname,m.sn as cdlcode,
|
|
'发货' as dgst,
|
|
'发货单' as vtype,
|
|
0 qtfy,
|
|
0 xzfy,
|
|
0 bcsyfy,
|
|
sum(isnull(d.money,0)) as jf,0 as df,
|
|
SUM(d.quantity) sl,
|
|
43 as srcMasterBillType,
|
|
m.id as srcMasterBID,
|
|
m.tax_id
|
|
from stock_delivery m
|
|
left join stock_delivery_data d on m.id=d.delivery_id
|
|
left join product p on p.id=d.product_id
|
|
left join customer_cost_category ccc on ccc.id = d.fee_category_id
|
|
left join customer c on c.id=m.customer_id
|
|
left join model_bill t on t.id=d.fee_src_type_id
|
|
where m.invoice_dt >= '$from_dt' and
|
|
m.invoice_dt <= '$to_dt' and
|
|
m.invoice_dt >= '$start_dt' and
|
|
left(p.code,2)<>'99' and
|
|
m.status >=1 and
|
|
c.id = $customer_id
|
|
group by m.invoice_dt,c.code,c.name,m.sn,m.id,m.tax_id
|
|
|
|
UNION ALL
|
|
|
|
--发货单(不含费用使用部分-直营)
|
|
select 3 as orderD,
|
|
m.invoice_dt as dDate,
|
|
c.code as cdwcode,c.name as cdwname,c.name as cdwabbname,m.sn as cdlcode,
|
|
'发货' as dgst,
|
|
'直营发货单' as vtype,
|
|
0 qtfy,
|
|
0 xzfy,
|
|
0 bcsyfy,
|
|
sum(isnull(d.money,0)) as jf,0 as df,
|
|
SUM(d.quantity) sl,
|
|
65 as srcMasterBillType,
|
|
m.id as srcMasterBID,
|
|
m.tax_id
|
|
from stock_direct m
|
|
left join stock_direct_data d on m.id = d.direct_id
|
|
left join product p on p.id=d.product_id
|
|
left join customer c on c.id=m.customer_id
|
|
where m.invoice_dt >= '$from_dt' and
|
|
m.invoice_dt <= '$to_dt' and
|
|
m.invoice_dt >= '$start_dt' and
|
|
left(p.code,2)<>'99' and
|
|
m.status = 1 and
|
|
c.id = $customer_id
|
|
group by m.invoice_dt,c.code,c.name,m.sn,m.id,m.tax_id
|
|
|
|
union all
|
|
|
|
--发货单(使用客户费用部分)
|
|
select 4 as orderD,
|
|
m.invoice_dt as dDate,
|
|
c.code as cdwcode,c.name as cdwname,c.name as cdwabbname,m.sn as cdlcode,
|
|
concat('发货使用', t.name, isnull(d.fee_src_sn,'')) as dgst,
|
|
'发货单' as vtype,
|
|
0 qtfy,
|
|
0 xzfy,
|
|
SUM(d.money) bcsyfy,
|
|
0 as jf,0 as df,0 as sl,
|
|
d.fee_src_type_id as srcMasterBillType,
|
|
d.fee_src_id as srcMasterBID,
|
|
m.tax_id
|
|
from stock_delivery m
|
|
left join stock_delivery_data d on m.id = d.delivery_id
|
|
left join customer_cost_category ccc on ccc.ID = d.fee_category_id
|
|
left join model_bill t on t.id = d.fee_src_type_id
|
|
left join customer c on c.id=m.customer_id
|
|
where m.invoice_dt >= '$from_dt' and
|
|
m.invoice_dt <= '$to_dt' and
|
|
m.invoice_dt >= '$start_dt' and
|
|
(isnull(d.fee_src_sn,'') <> '') and isnull(d.money, 0) < 0 and
|
|
m.status>=1 and
|
|
c.id = $customer_id
|
|
group by m.invoice_dt,c.code,c.name,m.sn,d.fee_src_type_id,d.fee_src_id,d.fee_src_sn,t.name,c.name,m.tax_id
|
|
|
|
union all
|
|
|
|
--发货单(使用促销申请赠品部分)
|
|
select 4 as orderD,
|
|
m.invoice_dt as dDate,
|
|
c.code as cdwcode,c.name as cdwname,c.name as cdwabbname,m.sn as cdlcode,
|
|
concat('发货使用', t.name, '赠品', isnull(d.fee_src_sn,'')) as dgst,
|
|
'发货单' as vtype,
|
|
0 qtfy,
|
|
0 xzfy,
|
|
SUM(0 - d.money) bcsyfy,
|
|
0 as jf,0 as df,0 as sl,
|
|
t.id as srcMasterBillType,
|
|
p.id as srcMasterBID,
|
|
m.tax_id
|
|
from stock_delivery m
|
|
left join stock_delivery_data d on m.id=d.delivery_id
|
|
left join model_bill t on t.id = 17
|
|
left join promotion p on p.sn=d.promotion_sn
|
|
left join customer c on c.id=m.customer_id
|
|
where m.invoice_dt >= '$from_dt' and
|
|
m.invoice_dt <= '$to_dt' and
|
|
m.invoice_dt >= '$start_dt' and
|
|
isnull(d.promotion_sn,'')<>'' and
|
|
m.status>=1 and
|
|
c.id = $customer_id
|
|
group by m.invoice_dt,c.code,c.name,m.sn,t.id,p.id,d.promotion_sn,t.name,d.fee_src_sn,m.tax_id
|
|
|
|
union all
|
|
|
|
--退货申请单
|
|
select 4 as orderD,
|
|
m.invoice_dt as dDate,
|
|
c.code as cdwcode,c.name as cdwname,c.name as cdwabbname,m.sn as cdlcode,
|
|
'退货' as dgst,
|
|
'退货申请单' as vtype,
|
|
0 qtfy,
|
|
0 xzfy,
|
|
0 bcsyfy,
|
|
sum(d.money) as jf,
|
|
0 as df,
|
|
SUM(d.quantity) sl,
|
|
47 as srcMasterBillType,
|
|
m.id as srcMasterBID,
|
|
m.tax_id
|
|
from stock_cancel m
|
|
left join stock_cancel_data d on m.id=d.cancel_id
|
|
left join customer c on c.id=m.customer_id
|
|
where m.invoice_dt >= '$from_dt' and
|
|
m.invoice_dt <= '$to_dt' and
|
|
m.invoice_dt >= '$start_dt' and
|
|
c.id = $customer_id
|
|
group by m.invoice_dt,c.code,c.name,m.sn,m.id,m.tax_id
|
|
) as a";
|
|
$items = DB::query()->selectRaw($sql)->get();
|
|
|
|
$rows = [[
|
|
'orderNum' => 1,
|
|
'orderD' => '',
|
|
'dDate' => '', // 日期
|
|
'cdwcode' => '', // 客户编码
|
|
'cdwname' => '', // 客户
|
|
'cdwabbname' => '',
|
|
'cdlcode' => '', // 单据号
|
|
'dgst' => '期初余额', // 摘要
|
|
'srcMasterBillType' => '', // 单据类型ID
|
|
'srcMasterBID' => '', // 单据ID
|
|
'vtype' => '', // 单据
|
|
'qtfy' => 0, // 其他费用
|
|
'xzfy' => 0, // 本次新增费用
|
|
'bcsyfy' => 0, // 其中使用费用金额
|
|
'jf' => 0, // 发货总金额
|
|
'sl' => 0, // 发货数量
|
|
'df' => 0, // 收款金额
|
|
'ye' => $qcye, // 余额
|
|
'tax_id' => ''
|
|
]];
|
|
|
|
$ye = $qcye;
|
|
|
|
foreach($items as $item) {
|
|
|
|
$item['qtfy'] = (float)$item['qtfy'];
|
|
$item['xzfy'] = (float)$item['xzfy'];
|
|
$item['bcsyfy'] = (float)$item['bcsyfy'];
|
|
$item['jf'] = (float)$item['jf'];
|
|
$item['df'] = (float)$item['df'];
|
|
$item['sl'] = (float)$item['sl'];
|
|
|
|
$ye = $ye + ($item['df'] - $item['jf'] - $item['bcsyfy']);
|
|
|
|
$rows[] = [
|
|
'orderNum' => 2,
|
|
'orderD' => $item['orderD'],
|
|
'dDate' => $item['dDate'],
|
|
'cdwcode' => $item['cdwcode'],
|
|
'cdwname' => $item['cdwname'],
|
|
'cdwabbname' => $item['cdwabbname'],
|
|
'cdlcode' => $item['cdlcode'],
|
|
'dgst' => $item['dgst'],
|
|
'srcMasterBillType' => $item['srcMasterBillType'],
|
|
'srcMasterBID' => $item['srcMasterBID'],
|
|
'vtype' => $item['vtype'],
|
|
'qtfy' => $item['qtfy'],
|
|
'xzfy' => $item['xzfy'],
|
|
'bcsyfy' => $item['bcsyfy'],
|
|
'jf' => $item['jf'],
|
|
'sl' => $item['sl'],
|
|
'df' => $item['df'],
|
|
'ye' => $ye,
|
|
'tax_id' => $item['tax_id']
|
|
];
|
|
}
|
|
return $rows;
|
|
}
|
|
} |