gdoo/app/Gdoo/Stock/Services/StockService.php

1432 lines
62 KiB
PHP

<?php namespace Gdoo\Stock\Services;
use DB;
class StockService
{
/**
* 商品批次选择
*
* @warehouse_id 仓库ID
* @product_ids 存货档案ID
* @value 存货档案编码, 存货档案名称、批次、地区标
* @customer_id 客户ID
*/
public static function getBatchSelect($warehouse_id = 0, $product_ids = '', $value = '', $customer_id = 0)
{
$model = DB::query()->selectRaw('* FROM('.static::getStockSelectSql().') ss')
->whereRaw("ISNULL(ky_num, 0) > 0");
// 获取产品id
if ($product_ids) {
$model->whereIn('product_id', explode(',', $product_ids));
}
if ($value) {
$v = join("','", explode(',', $value));
$model->whereRaw("(
product_code LIKE '%{$value}%'
OR product_name LIKE '%{$value}%'
OR batch_sn IN('{$v}')
)");
}
// 只取成品库和物料库,不包括成品待检验库
$model->whereRaw("
(warehouse_name LIKE '%成品%' or warehouse_code LIKE '07')
and warehouse_code <> '25' -- 成品待检验库
");
// 取仓库
if ($warehouse_id > 0) {
$model->where("warehouse_id", $warehouse_id);
}
$model->orderByRaw('warehouse_code asc, product_code ASC, batch_sn ASC');
return $model->get();
}
/**
* 商品批次选择
*
* @warehouse_id 仓库ID
* @product_ids 存货档案ID
* @value 存货档案编码, 存货档案名称、批次、地区标
* @customer_id 客户ID
*/
public static function getBatchSelectAll($warehouse_id = 0, $product_id = 0, $value = '', $customer_id = 0)
{
$model = DB::query()->selectRaw('* FROM('.static::getStockSelectSql().') ss')
->whereRaw("ISNULL(ky_num, 0) > 0");
// 获取产品id
if ($product_id) {
$model->where('product_id', $product_id);
}
if ($value) {
$model->whereRaw("(
product_code LIKE '%{$value}%'
OR product_name LIKE '%{$value}%'
OR batch_sn LIKE '%{$value}%'
)");
}
// 取仓库
if ($warehouse_id > 0) {
$model->where("warehouse_id", $warehouse_id);
}
$model->orderByRaw('warehouse_code asc, product_code ASC, batch_sn ASC');
return $model->get();
}
/**
* 商品批次选择(直营)
*
* @warehouse_id 仓库ID
* @product_ids 存货档案ID
* @value 存货档案编码, 存货档案名称、批次、地区标
* @customer_id 客户ID
*/
public static function getBatchSelectZY($warehouse_id = 0, $product_ids = '', $value = '')
{
$model = DB::query()->selectRaw('* FROM('.static::getStockSelectSql().') ss')
->whereRaw("ISNULL(ky_num, 0) > 0");
// 获取产品id
if ($product_ids) {
$model->whereIn('product_id', explode(',', $product_ids));
}
if ($value) {
$v = join("','", explode(',', $value));
$model->whereRaw("(
product_code LIKE '%{$value}%'
OR product_name LIKE '%{$value}%'
OR batch_sn IN('{$v}')
)");
}
// 取仓库
if ($warehouse_id > 0) {
$model->where("warehouse_id", $warehouse_id);
}
$model->orderByRaw('product_code ASC, batch_sn');
return $model->get();
}
/**
* 进出存汇总表
*
* @warehouse_id 仓库ID
* @product_code 存货编码
* @NY 内销1 外销2
* @made_start_dt 生产日期起始日期
* @made_end_dt 生产日期截至日期
* @user_id 用户id
* @SFPH 是否显示批号
* @HBBMJ 是否合并不满件
*/
public static function reportOrderStockTotal($warehouse_id = 0, $product_code = '', $ny = '', $made_start_dt = '', $made_end_dt = '', $user_id = 0, $SFPH = 0)
{
$warehouse_id = (int)$warehouse_id;
$SFPH = (int)$SFPH;
$HBBMJ = 1;
$sql = [];
$sql[] = "select warehouse_code,product_code,batch_sn,batch_date,poscode,posname,warehouse_name,
product_name,product_spec,unit_name,product_id,warehouse_id,SUM(Num) num,SUM(ky_Num) kynum,SUM(fh_Num) fhnum,SUM(Ck_Num) cknum,SUM(Rk_Num) rknum,SUM(Max_Num) maxnum
from (
SELECT warehouse_code,
rd.product_code,batch_sn,batch_date,poscode,posname,warehouse_name,
rd.product_name,rd.product_spec,rd.unit_name,rd.product_id,warehouse_id,Num,ky_Num,fh_Num,Ck_Num,Rk_Num,Max_Num
FROM (".StockService::getStockSelectSql().") rd
left join (
select i.product_id, i.product_name,i.product_spec,i.unit_name,invc.NY, i.product_code from (
select id, case substring(name, 0, 3) when '外销' then 2 else 1 end as NY
from product_category) as invc right join (
SELECT a.id as product_id, a.name as product_name,a.spec as product_spec, b.name as unit_name, a.code as product_code, a.category_id
FROM product a
LEFT JOIN product_unit b ON a.unit_id = b.id) i on i.category_id = invc.id
) as ic on rd.product_id = ic.product_id
WHERE (ISNULL(ky_Num,0) <> 0 OR ISNULL(fh_Num,0) <> 0 or Ck_Num<>0 or Rk_Num<>0)";
if ($ny) {
$sql[] = "and (ic.NY = {$ny})";
}
if ($made_start_dt && $made_end_dt) {
$sql[] = "and (batch_date >= '$made_start_dt') and (batch_date <= '$made_end_dt')";
}
$sql[] = "AND (({$warehouse_id} = 0 OR warehouse_id = {$warehouse_id}
) and warehouse_id in (
SELECT uwh.warehouse_id FROM user_warehouse uwh LEFT JOIN warehouse wh ON uwh.warehouse_id = wh.id where uwh.user_id = {$user_id})
)";
if ($product_code) {
$sql[] = "and (rd.product_code LIKE '%{$product_code}%')";
}
$sql[] = ") as a
GROUP BY warehouse_code,product_code,batch_sn,batch_date,poscode,posname,warehouse_name,
product_name,product_spec,unit_name,product_id,warehouse_id
order by warehouse_code desc,product_code,batch_sn";
return DB::select(join(" ", $sql));
}
/**
* 进销存汇总表
*
* @warehouse_id 仓库ID
* @product_id 存货ID
* @batch_sn 批号
* @ny 内销 外销,''-全部
* @start_dt 起始日期
* @end_dt 截至日期
* @user_id 用户ID
* @SFPH 是否显示批号
*/
public static function reportOrderStockInOut($warehouse_id = 0, $product_id = 0, $batch_sn = '', $ny = '', $start_dt = '', $end_dt = '', $user_id = 0, $SFPH = 0)
{
$warehouse_id = (int)$warehouse_id;
$product_id = (int)$product_id;
$SFPH = (int)$SFPH;
$invoice_dt = sql_year_month_day('m.invoice_dt');
// 期初
$sqlqc = "
warehouse_id,
product_id,
isnull(poscode,'') as poscode,
isnull(posname,'') as posname,
isnull(batch_sn,'') as batch_sn,
batch_date,
0 RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
0 Rknum_No,
0 Cknum,
0 Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
0 Cknum_No,
SUM(Num) QcNum
from (
SELECT SUM(d.quantity) AS num, m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_record10 m
LEFT JOIN stock_record10_data d ON m.id = d.record10_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT SUM(d.quantity) AS RkNum, m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_record08 m
LEFT JOIN stock_record08_data d ON m.id = d.record08_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT SUM(0-d.quantity),
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_record09 m
LEFT JOIN stock_record09_data d ON m.id = d.record09_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT SUM(0-d.quantity),
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_record11 m
LEFT JOIN stock_record11_data d ON m.id = d.record11_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' ='' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT SUM(0-d.quantity) AS RkNum, out_warehouse_id,d.product_id,d.batch_sn,d.out_poscode,d.out_posname,d.batch_date
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." < '$start_dt'
and ($warehouse_id = 0 OR m.out_warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.out_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.out_warehouse_id,d.product_id,d.batch_sn,d.out_poscode,d.out_posname,batch_date
UNION ALL
SELECT SUM(d.quantity) AS RkNum, in_warehouse_id,d.product_id,d.batch_sn,d.in_poscode,d.in_posname,d.batch_date
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." < '$start_dt'
and ($warehouse_id = 0 OR m.in_warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.in_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.in_warehouse_id,d.product_id,d.batch_sn,d.in_poscode,d.in_posname,batch_date
UNION ALL
-- 发货数量
SELECT
SUM(0-d.quantity) Cknum,
d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_delivery_data d
LEFT JOIN stock_delivery m on m.id = d.delivery_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR d.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
SELECT
SUM(0-d.quantity) Cknum, m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_direct_data d
LEFT JOIN stock_direct m on m.id = d.direct_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
-- 退货数量
SELECT SUM(0-d.quantity) AS RkNum, d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_cancel_data d
left join stock_cancel m on m.id = d.cancel_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL and m.status = 1
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR d.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
) as a
group by warehouse_id, product_id, isnull(batch_sn,''), isnull(poscode,''), isnull(posname,''), batch_date
having SUM(Num) <> 0";
$sqlfs = "
warehouse_id,
product_id,
isnull(poscode,'') as poscode,
isnull(posname,'') as posname,
isnull(batch_sn,'') as batch_sn,
batch_date,
SUM(RkNum) RkNum,
SUM(Rknum_Sc) Rknum_Sc,
SUM(Rknum_Qt) Rknum_Qt,
SUM(Rknum_Qr) Rknum_Qr,
SUM(Rknum_Th) Rknum_Th,
SUM(Rknum_No) Rknum_No,
SUM(Cknum) Cknum,
SUM(Cknum_Fh) Cknum_Fh,
SUM(Cknum_Zy) Cknum_Zy,
SUM(Cknum_Qt) Cknum_Qt,
SUM(Cknum_Dc) Cknum_Dc,
SUM(Cknum_No) Cknum_No,
0 QcNum
from (
SELECT SUM(d.quantity) AS RkNum,
SUM(d.quantity) Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
SUM(ISNULL(case when ISNULL(m.status, 0) <> 1 then d.quantity ELSE 0 end,0)) Rknum_No,
0 Cknum,
0 Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
0 Cknum_No,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_record10 m
LEFT JOIN stock_record10_data d ON m.ID = d.record10_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT SUM(d.quantity) AS RkNum,
0 Rknum_Sc,
SUM(d.quantity) Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end, 0)) Rknum_No,
0 Cknum,
0 Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
0 Cknum_No,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_record08 m
LEFT JOIN stock_record08_data d ON m.id = d.record08_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn'='' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export,0)=0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT 0 AS RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
0 Rknum_No,
SUM(d.quantity) Cknum,
0 Cknum_Fh,
0 Cknum_Zy,
SUM(d.quantity) Cknum_Qt,
0 Cknum_Dc,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end,0)) Cknum_No,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_record09 m
LEFT JOIN stock_record09_data d ON m.id = d.record09_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT 0 AS RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
0 Rknum_No,
SUM(d.quantity) Cknum,
0 Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
SUM(d.quantity) Cknum_Dc,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end,0)) Cknum_No,
m.out_warehouse_id,d.product_id,d.batch_sn,d.out_poscode,d.out_posname,batch_date
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." >= '$start_dt'
AND ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." <= '$end_dt'
and ($warehouse_id = 0 OR m.out_warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.out_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.out_warehouse_id,d.product_id,d.batch_sn,d.out_poscode,d.out_posname,batch_date
UNION ALL
SELECT SUM(d.quantity) AS RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
SUM(d.quantity) Rknum_Qr,
0 Rknum_Th,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end,0)) Rknum_No,
0 Cknum,
0 Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
0 Cknum_No,
m.in_warehouse_id,d.product_id,d.batch_sn,d.in_poscode,d.in_posname,batch_date
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." >= '$start_dt'
AND ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." <= '$end_dt'
--WHERE CONVERT(varchar(10), case when isnull(m.delivery_dt, '') <> '' then m.delivery_dt else m.invoice_dt end, 121)>=@SdDate
--AND CONVERT(varchar(10), case when isnull(m.delivery_dt, '') <> '' then m.delivery_dt else m.invoice_dt end, 121)<=@EdDate
and ($warehouse_id = 0 OR m.in_warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.in_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.in_warehouse_id,d.product_id,d.batch_sn,d.in_poscode,d.in_posname,batch_date
UNION ALL
-- 发货数量
SELECT 0 AS RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
0 Rknum_No,
SUM(d.quantity) Cknum,
SUM(d.quantity) Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end,0)) Cknum_No,
d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_delivery_data d
LEFT JOIN stock_delivery m on m.id = d.delivery_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR d.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
SELECT 0 AS RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
0 Rknum_No,
SUM(d.quantity) Cknum,
0 Cknum_Fh,
SUM(d.quantity) Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
SUM(ISNULL(case when ISNULL(m.status, 0) <> 1 then d.quantity ELSE 0 end,0)) Cknum_No,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_direct_data d
LEFT JOIN stock_direct m on m.id = d.direct_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
UNION ALL
-- 退货数量
SELECT 0 AS RkNum,
0 Rknum_Sc,
0 Rknum_Qt,
0 Rknum_Qr,
0 Rknum_Th,
0 Rknum_No,
SUM(d.quantity) Cknum,
SUM(d.quantity) Cknum_Fh,
0 Cknum_Zy,
0 Cknum_Qt,
0 Cknum_Dc,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end,0)) Cknum_No,
d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
FROM stock_cancel_data d
left join stock_cancel m on m.id = d.cancel_id
LEFT JOIN product p on p.id=d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL and m.status = 1
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR d.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,batch_date
) as b
group by warehouse_id,product_id,isnull(poscode,''),isnull(posname,''),isnull(batch_sn,''),batch_date";
$sql[] = "
w.id as warehouse_id,
w.code as warehouse_code,
w.name as warehouse_name,
c.product_id,
i.code as product_code,
i.name as product_name,
i.spec as product_spec,
g.name as product_unit,
isnull(c.poscode,'') as poscode,
isnull(c.posname,'') as posname,";
if ($SFPH == 1) {
$sql[] = "isnull(c.batch_sn,'') as batch_sn, c.batch_date,";
}
$sql[] = "sum(QcNum) as qc_num,
SUM(RkNum) rk_num,
SUM(Rknum_Sc) rk_num_sc,
SUM(Rknum_Qt) rk_num_qt,
SUM(Rknum_Qr) rk_num_qr,
SUM(Rknum_Th) rk_num_th,
SUM(Rknum_No) rk_num_no,
SUM(Cknum) ck_num,
SUM(Cknum_Fh) ck_num_fh,
SUM(Cknum_Zy) ck_num_zy,
SUM(Cknum_Qt) ck_num_qt,
SUM(Cknum_Dc) ck_num_dc,
SUM(Cknum_No) ck_num_no,
ISNULL(sum(QcNum),0)+ISNULL(SUM(RkNum),0)-isnull(SUM(CkNum),0) as qm_num
from (
SELECT ".$sqlfs."
union all
SELECT ".$sqlqc."
) as c, product i,product_unit g,warehouse w
where i.id = c.product_id and g.id = i.unit_id AND w.id=c.warehouse_id
group by w.id,w.code,w.name,c.product_id,i.code,i.name,i.spec,g.name,isnull(c.poscode,''),isnull(c.posname,'')
";
if ($SFPH == 1) {
$sql[] = ",isnull(c.batch_sn,''),c.batch_date";
}
$sql[] = "order by w.code,i.code";
if ($SFPH == 1) {
$sql[] = ", isnull(c.batch_sn,'')";
}
$rows = DB::query()->selectRaw(join(" ", $sql))->get();
return $rows;
}
/**
* 库存明细表
*
* @warehouse_id 仓库ID
* @product_id 存货ID
* @batch_sn 批号
* @ny 内销 外销,''-全部
* @start_dt 起始日期
* @end_dt 截至日期
* @user_id 用户ID
*/
public static function reportOrderStockDetail($warehouse_id = 0, $product_id = 0, $batch_sn = '', $ny = '', $start_dt = '', $end_dt = '', $user_id = 0)
{
$warehouse_id = (int)$warehouse_id;
$product_id = (int)$product_id;
$user_id = (int)$user_id;
// 期初
$sql = "isnull(SUM(Num), 0) as qcnum
from (
SELECT SUM(d.quantity) AS Num, m.warehouse_id, d.product_id, d.batch_sn, d.poscode, d.posname, batch_date
FROM stock_record10 m
LEFT JOIN stock_record10_data d ON m.id = d.record10_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
-- 原材料入库
SELECT SUM(d.quantity) AS Num, m.warehouse_id, d.product_id, d.batch_sn, d.poscode, d.posname, batch_date
FROM stock_record01 m
LEFT JOIN stock_record01_data d ON m.id = d.record01_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
SELECT SUM(d.quantity) AS RkNum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_record08 m
LEFT JOIN stock_record08_data d ON m.id = d.record08_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
SELECT SUM(0-d.quantity) as Num,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_record09 m
LEFT JOIN stock_record09_data d ON m.id = d.record09_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
-- 原材料出库
SELECT SUM(0-d.quantity) as Num,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_record11 m
LEFT JOIN stock_record11_data d ON m.id = d.record11_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id= $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date
UNION ALL
-- 调拨出
SELECT SUM(0-d.quantity) AS RkNum,
m.out_warehouse_id,d.product_id,batch_sn,d.out_poscode,d.out_posname,d.batch_date
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." < '$start_dt'
and ($warehouse_id = 0 OR m.out_warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.out_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.product_id,m.out_warehouse_id,d.batch_sn,d.out_poscode,d.out_posname,d.batch_date
UNION ALL
SELECT SUM(d.quantity) AS RkNum,
m.in_warehouse_id,d.product_id,d.batch_sn,d.in_poscode,d.in_posname,d.batch_date
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." < '$start_dt'
and ($warehouse_id = 0 OR m.in_warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.in_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.product_id,m.in_warehouse_id,d.batch_sn,d.in_poscode,d.in_posname,d.batch_date
UNION ALL
-- 发货数量
SELECT
SUM(0-d.quantity) Cknum,
d.warehouse_id,d.product_id, d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_delivery_data d
LEFT JOIN stock_delivery m on m.id = d.delivery_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR d.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.product_id,d.batch_sn,d.warehouse_id,d.poscode,d.posname,d.batch_date
UNION ALL
-- 直营发货
SELECT
SUM(0-d.quantity) Cknum,
m.warehouse_id,d.product_id, d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_direct_data d LEFT JOIN stock_direct m on m.id = d.direct_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
GROUP BY d.product_id,d.batch_sn,m.warehouse_id,d.poscode,d.posname,d.batch_date
UNION ALL
-- 退货数量
SELECT SUM(0-d.quantity) AS RkNum,
d.warehouse_id,d.product_id, d.batch_sn,d.poscode,d.posname,d.batch_date
FROM stock_cancel_data d left join stock_cancel m on m.id = d.cancel_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL and m.status = 1
AND ".sql_year_month_day('m.invoice_dt')." < '$start_dt'
and ($warehouse_id = 0 OR d.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
GROUP BY d.product_id,d.batch_sn,d.warehouse_id,d.poscode,d.posname,d.batch_date
) as a
having SUM(Num) <> 0";
$qcnum = DB::query()->selectRaw($sql)->value('qcnum');
$invoice_dt = sql_year_month_day('m.invoice_dt');
$sql = "
c.product_id,
c.warehouse_id,
c.id,
c.sn,
c.invoice_dt,
w.code as warehouse_code,
w.name as warehouse_name,
p.code as product_code,
p.name as product_name,
p.spec as product_spec,
g.name as unit_name,
isnull(batch_sn,'') as batch_sn,
isnull(c.poscode,'') as poscode,
isnull(c.posname,'') as posname,
isnull(batch_date, null) batch_date,
c.bill_type,
c.bill_name,
c.RkNum as rk_num,
c.CkNum as ck_num,
0 as qm_num
from (
SELECT d.quantity AS RkNum, 0 CkNum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_record10' as bill_type,'产成品入库' as bill_name, m.id, m.sn,
m.invoice_dt
FROM stock_record10 m
LEFT JOIN stock_record10_data d ON m.id = d.record10_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
UNION ALL
SELECT d.quantity AS RkNum, 0 CkNum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_record08' as bill_type,'其他入库' as bill_name,m.id,m.sn,
m.invoice_dt
FROM stock_record08 m
LEFT JOIN stock_record08_data d ON m.id = d.record08_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id=$product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id=$user_id)
UNION ALL
SELECT d.quantity AS RkNum, 0 CkNum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_record01' as bill_type,'原材料入库' as bill_name,m.id,m.sn,
m.invoice_dt
FROM stock_record01 m
LEFT JOIN stock_record01_data d ON m.id = d.record01_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
SELECT 0 AS RkNum, d.quantity CkNum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_record09' as bill_type,'其他出库' as bill_name,m.id,m.sn,m.invoice_dt
FROM stock_record09 m
LEFT JOIN stock_record09_data d ON m.id = d.record09_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
SELECT 0 AS RkNum, d.quantity CkNum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_record11' as bill_type,'原材料出库' as bill_name,m.id,m.sn,m.invoice_dt
FROM stock_record11 m
LEFT JOIN stock_record11_data d ON m.id = d.record11_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
SELECT 0 AS RkNum,
d.quantity Cknum,
m.out_warehouse_id,d.product_id,d.batch_sn,d.out_poscode,d.out_posname,d.batch_date,
'stock_allocation' as bill_type,'产成品调拨' as bill_name, m.id, m.sn, m.invoice_dt
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
where ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." >= '$start_dt'
AND ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." <= '$end_dt'
and ($warehouse_id = 0 OR m.out_warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.out_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
SELECT d.quantity AS RkNum,
0 Cknum,
m.in_warehouse_id,d.product_id,d.batch_sn,d.in_poscode,d.in_posname,d.batch_date,
'stock_allocation' as bill_type,'产成品调拨' as bill_name, m.id,m.sn, m.invoice_dt
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
where ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." >= '$start_dt'
AND ".sql_year_month_day("case when m.delivery_dt <> null then m.delivery_dt else m.invoice_dt end")." <= '$end_dt'
and ($warehouse_id = 0 OR m.in_warehouse_id = $warehouse_id)
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.in_warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
-- 发货数量
SELECT 0 AS RkNum,
d.quantity Cknum,
d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_delivery' as bill_type,'发货' as bill_name, m.id, m.sn,
m.invoice_dt
FROM stock_delivery_data d
LEFT JOIN stock_delivery m on m.id = d.delivery_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR d.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
SELECT 0 AS RkNum,
d.quantity Cknum,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_direct' as bill_type,'发货(直营)' as bill_name,m.id,m.sn,
m.invoice_dt
FROM stock_direct_data d
LEFT JOIN stock_direct m on m.id = d.direct_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR m.warehouse_id = $warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and m.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
UNION ALL
-- 退货数量
SELECT 0 AS RkNum,
d.quantity Cknum,
d.warehouse_id,d.product_id,d.batch_sn,d.poscode,d.posname,d.batch_date,
'stock_cancel' as bill_type,'退货申请' as bill_name,m.id,m.sn,
m.invoice_dt
FROM stock_cancel_data d
left join stock_cancel m on m.id = d.cancel_id
LEFT JOIN product p on p.id = d.product_id
LEFT JOIN product_category pc on p.category_id = pc.id
WHERE d.product_id IS NOT NULL
AND ".$invoice_dt." >= '$start_dt'
AND ".$invoice_dt." <= '$end_dt'
and ($warehouse_id = 0 OR d.warehouse_id=$warehouse_id)
and ('$batch_sn' = '' OR d.batch_sn = '$batch_sn')
and ('$ny' = '' OR (p.is_export = 1 AND '$ny' = '外销') OR (isnull(p.is_export, 0) = 0 AND '$ny' = '内销'))
and ($product_id = 0 OR d.product_id = $product_id)
and d.warehouse_id in (SELECT uwh.warehouse_id FROM user_warehouse uwh where user_id = $user_id)
) as c, product p, product_unit g, warehouse w
where p.id = c.product_id and g.id = p.unit_id and w.id = c.warehouse_id order by c.invoice_dt, c.RkNum";
$rows = DB::query()->selectRaw($sql)->get();
// 插入初期
$rows->prepend(['bill_name' => '期初', 'qm_num' => $qcnum]);
return $rows;
}
/**
* 校验单据批次
* @warehouse_id 仓库编码
* @product_id 存货编码
* @batch_sn 批次
* @poscode 货位
* @delivery_data_id 发货单表体ID
* @sample_data_id 样品单表体ID
* @direct_data_id 直营单表体ID
*/
public static function verfyInvoiceBatch($warehouse_id, $product_id, $batch_sn, $poscode, $delivery_data_id = 0, $sample_data_id = 0, $direct_data_id = 0)
{
$warehouse_id = (int)$warehouse_id;
$product_id = (int)$product_id;
$delivery_data_id = (int)$delivery_data_id;
$sample_data_id = (int)$sample_data_id;
$direct_data_id = (int)$direct_data_id;
return DB::select("
select sum(CAST((ROUND(ISNULL(a.num,0) - ISNULL(a.fh_num,0) ,4)) AS decimal(20,4))) as ky_num
FROM (
-- 合并库存、出入库数量
-- 产成品入库单
SELECT SUM(ISNULL(num, 0)) num, sum(isnull(fh_num, 0)) as fh_num, product_id, warehouse_id, batch_sn,poscode
FROM (
SELECT SUM(ISNULL(d.quantity, 0)) num, 0 as fh_num, m.warehouse_id, d.product_id, d.batch_sn, d.poscode
FROM stock_record10_data d
LEFT JOIN stock_record10 m ON m.id = d.record10_id
WHERE d.product_id IS NOT NULL
GROUP BY m.warehouse_id,d.product_id,d.batch_sn,d.poscode
UNION ALL
-- 采购入库单
SELECT SUM(ISNULL(d.quantity, 0)) num,
NULL AS fh_num, m.warehouse_id, d.product_id, d.batch_sn, d.poscode
FROM stock_record01_data d
LEFT JOIN stock_record01 m ON m.id = d.record01_id
WHERE d.product_id IS NOT NULL
GROUP BY m.warehouse_id, d.product_id, d.batch_sn, d.poscode
UNION ALL
-- 其他入库
SELECT SUM(ISNULL(d.quantity,0)) num, 0 fh_num,warehouse_id,d.product_id,d.batch_sn,poscode
FROM stock_record08 m
LEFT JOIN stock_record08_data d ON m.id = d.record08_id
WHERE d.product_id IS NOT NULL
GROUP BY warehouse_id,d.product_id,d.batch_sn,poscode
UNION ALL
-- 其他出库单
SELECT 0 - SUM(ISNULL(d.quantity,0)) num,0 fh_num,warehouse_id,d.product_id,d.batch_sn,poscode
FROM stock_record09 m
LEFT JOIN stock_record09_data d ON m.id = d.record09_id
WHERE d.product_id IS NOT NULL and d.id <> $sample_data_id
GROUP BY warehouse_id,d.product_id,d.batch_sn,poscode
UNION ALL
-- 调拨出库
SELECT 0 - SUM(ISNULL(quantity,0)) AS num,0 fh_num,out_warehouse_id,product_id,batch_sn,out_poscode
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
GROUP BY product_id, out_warehouse_id, batch_sn, out_poscode
UNION ALL
-- 调拨入库
SELECT SUM(ISNULL(quantity,0)) AS num, 0 fh_num, in_warehouse_id, product_id, batch_sn, in_poscode
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
GROUP BY product_id,in_warehouse_id,batch_sn,in_poscode
UNION ALL
-- 发货数量
SELECT 0 - SUM(ISNULL(case when ISNULL(m.status, 0) = 1 then d.quantity ELSE 0 end,0)) num,
SUM(ISNULL(case when ISNULL(m.status, 0) <> 1 then d.quantity ELSE 0 end, 0)) fh_num,
d.warehouse_id,d.product_id,d.batch_sn,poscode
FROM stock_delivery_data d,stock_delivery m
WHERE m.id = d.delivery_id and d.id <> $delivery_data_id
GROUP BY d.product_id,d.batch_sn,d.warehouse_id,poscode
union all
-- 直营发货数量
SELECT 0 - SUM(ISNULL(case when ISNULL(m.status, 0) = 1 then d.quantity ELSE 0 end,0)) num,
SUM(ISNULL(case when ISNULL(m.status, 0) <> 1 then d.quantity ELSE 0 end, 0)) fh_num,
m.warehouse_id,d.product_id,d.batch_sn,d.poscode
FROM stock_direct_data d,stock_direct m
WHERE m.id = d.direct_id and d.id <> $direct_data_id
GROUP BY d.product_id,d.batch_sn,m.warehouse_id,d.poscode
union all
-- 退货数量
SELECT 0 - SUM(ISNULL(case when ISNULL(m.status, 0) = 1 then d.quantity ELSE 0 end,0)) num,
SUM(ISNULL(case when ISNULL(m.status,0) <> 1 then d.quantity ELSE 0 end,0)) fh_num,
d.warehouse_id,d.product_id,d.batch_sn,poscode
FROM stock_cancel_data d,stock_cancel m
WHERE m.id = d.cancel_id AND m.status = 1
GROUP BY d.product_id,d.batch_sn,d.warehouse_id,poscode
) a1
GROUP BY product_id,warehouse_id,batch_sn,poscode
HAVING SUM(ISNULL(num, 0)) <> 0 OR sum(isnull(fh_num, 0)) <> 0
) a
WHERE a.warehouse_id = $warehouse_id
AND a.product_id = $product_id
AND (ISNULL('$batch_sn', '') = '' or a.batch_sn = '$batch_sn')
AND (ISNULL('$poscode', '') = '' or a.poscode = '$poscode')
");
}
/**
* 查询库存
*/
public static function getStockSelectSql()
{
return "
SELECT w.code AS warehouse_code, p.code AS product_code, a.batch_sn AS batch_sn, a.batch_date,
a.poscode AS poscode, a.posname AS posname, w.type as warehouse_type, w.name AS warehouse_name, p.name AS product_name, p.product_type,
p.spec AS product_spec, u.id AS unit_id, u.name AS product_unit, u.name AS unit_name, p.category_id, p.id AS product_id, w.id AS warehouse_id,
round(a.Num, 4) AS num, p.is_export,
round(isnull(a.Num, 0) - isnull(a.FhNum, 0) - isnull(a.Cknum, 0) + isnull(a.Rknum, 0), 4) AS ky_num,
round(isnull(a.FhNum, 0), 4) AS fh_num,
round(isnull(a.Cknum, 0), 4) AS ck_num,
round(isnull(a.Rknum, 0), 4) AS rk_num,
round(isnull(a.Num, 0) - isnull(a.FhNum, 0), 4) AS max_num
FROM (
SELECT SUM(isnull(a1.Num, 0)) AS Num,
SUM(isnull(a1.FhNum, 0)) AS FhNum,
SUM(isnull(a1.Rknum, 0)) AS Rknum,
SUM(isnull(a1.Cknum, 0)) AS Cknum,
a1.product_id, a1.warehouse_id, a1.batch_sn, a1.batch_date,
CASE WHEN a1.poscode = '' THEN NULL ELSE a1.poscode END AS poscode,
CASE WHEN a1.posname = '' THEN NULL ELSE a1.posname END AS posname
FROM (
-- 采购入库
SELECT SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
NULL AS FhNum,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Rknum,
0 AS Cknum, m.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_record01 m
LEFT JOIN stock_record01_data d ON m.id = d.record01_id
WHERE d.product_id IS NOT NULL
GROUP BY d.product_id, m.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
-- 原材料出库
SELECT
0 - SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
0 AS FhNum, 0 AS Rknum, SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Cknum,
m.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_record11 m
LEFT JOIN stock_record11_data d ON m.id = d.record11_id
WHERE d.product_id IS NOT NULL
GROUP BY d.product_id, m.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
SELECT SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
0 AS FhNum,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Rknum,
0 AS Cknum, m.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_record10 m
LEFT JOIN stock_record10_data d ON m.id = d.record10_id
WHERE d.product_id IS NOT NULL
GROUP BY d.product_id, m.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
SELECT SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
0 AS FhNum,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Rknum,
0 AS Cknum, m.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_record08 m
LEFT JOIN stock_record08_data d ON m.id = d.record08_id
WHERE d.product_id IS NOT NULL
GROUP BY d.product_id, m.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
SELECT
0 - SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
0 AS FhNum, 0 AS Rknum, SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Cknum,
m.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_record09 m
LEFT JOIN stock_record09_data d ON m.id = d.record09_id
WHERE d.product_id IS NOT NULL
GROUP BY d.product_id, m.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
SELECT
0 - SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
0 AS FhNum, 0 AS Rknum,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Cknum,
m.out_warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.out_poscode poscode, d.out_posname posname
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
GROUP BY d.product_id, m.out_warehouse_id, d.batch_sn, d.batch_date, d.out_poscode, d.out_posname
UNION ALL
SELECT SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num, NULL AS FhNum,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Rknum,
0 AS Cknum, m.in_warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.in_poscode poscode, d.in_posname
FROM stock_allocation m
LEFT JOIN stock_allocation_data d ON m.id = d.allocation_id
GROUP BY d.product_id, m.in_warehouse_id, d.batch_sn, d.batch_date, d.in_poscode, d.in_posname
UNION ALL
SELECT
0 - SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS FhNum,
NULL AS Rknum, NULL AS Cknum, d.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_delivery_data d
JOIN stock_delivery m ON m.id = d.delivery_id
GROUP BY d.product_id, d.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
SELECT
0 - SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS FhNum,
0 AS Rknum, 0 AS Cknum, m.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_direct_data d
JOIN stock_direct m ON m.id = d.direct_id
GROUP BY d.product_id, m.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
UNION ALL
SELECT
0 - SUM(isnull(CASE WHEN m.status = 1 THEN d.quantity ELSE 0 END, 0)) AS Num,
0 AS FhNum,
0 - SUM(isnull(CASE WHEN m.status <> 1 THEN d.quantity ELSE 0 END, 0)) AS Rknum,
NULL AS Cknum, d.warehouse_id, d.product_id, d.batch_sn, d.batch_date, d.poscode, d.posname
FROM stock_cancel_data d
JOIN stock_cancel m
ON m.id = d.cancel_id AND m.status = 1
GROUP BY d.product_id, d.warehouse_id, d.batch_sn, d.batch_date, d.poscode, d.posname
) a1
GROUP BY a1.product_id, a1.warehouse_id, a1.batch_sn, a1.batch_date,
CASE WHEN a1.poscode = '' THEN NULL ELSE a1.poscode END,
CASE WHEN a1.posname = '' THEN NULL ELSE a1.posname END
HAVING SUM(isnull(a1.Num, 0)) <> 0 OR SUM(isnull(a1.FhNum, 0)) <> 0 OR SUM(isnull(a1.Cknum, 0)) <> 0 OR SUM(isnull(a1.Rknum, 0)) <> 0
) a
LEFT JOIN product p ON a.product_id = p.id
LEFT JOIN product_unit u ON p.unit_id = u.id
LEFT JOIN warehouse w ON a.warehouse_id = w.id";
}
}