1432 lines
		
	
	
		
			62 KiB
		
	
	
	
		
			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";
 | |
|     }
 | |
| } |