390 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			390 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php namespace Gdoo\Order\Services;
 | 
						|
 | 
						|
use DB;
 | 
						|
use Gdoo\Index\Services\BadgeService;
 | 
						|
use Gdoo\Stock\Services\StockService;
 | 
						|
 | 
						|
class OrderService
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * 获取待审订单
 | 
						|
     */
 | 
						|
    public static function getBadge()
 | 
						|
    {
 | 
						|
        return BadgeService::getModelTodo('customer_order');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
	 * 自定义查询打印数据
 | 
						|
	 */
 | 
						|
    public static function getPrintData($id)
 | 
						|
    {
 | 
						|
		$master = DB::table('customer_order as co')->where('co.id', $id)
 | 
						|
        ->leftJoin('customer as c', 'c.id', '=', 'co.customer_id')
 | 
						|
        ->leftJoin('customer_tax as ct', 'ct.id', '=', 'co.tax_id')
 | 
						|
        ->leftJoin('sale_type as st', 'st.id', '=', 'co.type_id')
 | 
						|
        ->selectRaw('co.*, ct.name as tax_name, c.name as customer_name, st.name as type_name')
 | 
						|
        ->first();
 | 
						|
 | 
						|
        $rows = DB::table('customer_order_data as cod')
 | 
						|
        ->leftJoin('customer_order as co', 'co.id', '=', 'cod.order_id')
 | 
						|
        ->leftJoin('product as p', 'p.id', '=', 'cod.product_id')
 | 
						|
        ->leftJoin('product_unit as pu', 'pu.id', '=', 'p.unit_id')
 | 
						|
        ->leftJoin('customer_order_type as cot', 'cot.id', '=', 'cod.type_id')
 | 
						|
        ->where('co.id', $id)
 | 
						|
        ->selectRaw('
 | 
						|
            cod.*,
 | 
						|
            cod.delivery_quantity * p.weight as total_weight,
 | 
						|
            p.name as product_name,
 | 
						|
            p.spec as product_spec,
 | 
						|
            cot.name as type_name,
 | 
						|
            pu.name as product_unit,
 | 
						|
            p.material_type,
 | 
						|
            p.product_type
 | 
						|
        ')
 | 
						|
        ->get();
 | 
						|
 | 
						|
        $master['fee_money'] = 0;
 | 
						|
		return [
 | 
						|
			'master' => $master,
 | 
						|
			'rows' => $rows,
 | 
						|
		];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取销售未发订单
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public static function getSaleOrderDataSql() 
 | 
						|
    {
 | 
						|
        return "SELECT f.sn AS delivery_sn,
 | 
						|
        f.invoice_dt AS delivery_date,
 | 
						|
        sd.id AS sale_data_id,
 | 
						|
        sd.order_id,
 | 
						|
        sd.order_id AS sale_id,
 | 
						|
        sd.product_id,
 | 
						|
        p.name AS product_name,
 | 
						|
        p.barcode AS product_barcode,
 | 
						|
        p.spec AS product_spec,
 | 
						|
        p.unit_id,
 | 
						|
        p.product_type,
 | 
						|
        p.material_type,
 | 
						|
        u.name AS product_unit,
 | 
						|
        sd.quantity,
 | 
						|
        sd.delivery_quantity,
 | 
						|
        sd.price,
 | 
						|
        sd.money,
 | 
						|
        p.code AS product_code,
 | 
						|
        isnull(r.quantity, 0) AS stock_quantity,
 | 
						|
        sd.weight,
 | 
						|
        (sd.weight * sd.delivery_quantity) AS total_weight,
 | 
						|
        isnull(sd.use_close, 0) AS use_close,
 | 
						|
        sm.customer_id,
 | 
						|
        c.type_id AS customer_type_id,
 | 
						|
        c.is_direct,
 | 
						|
        c.is_allocate,
 | 
						|
        CASE WHEN isnull(sd.use_close, 0) = 0 THEN '否' ELSE '是' END AS use_close_name,
 | 
						|
        isnull(sd.delivery_quantity, 0) - isnull(f.quantity, 0) AS wf_num,
 | 
						|
        f.quantity AS yf_num,
 | 
						|
        sd.type_id,
 | 
						|
        cot.name AS type_id_name,
 | 
						|
        sd.customer_stock,
 | 
						|
        sd.other_money,
 | 
						|
        p.is_produce_plan,
 | 
						|
        pc.code AS category_code,
 | 
						|
        p.barcode,
 | 
						|
        isnull(sd.money, 0) + isnull(sd.other_money, 0) AS hj_money,
 | 
						|
        sd.remark,
 | 
						|
        u.code AS unit_code,
 | 
						|
        CASE WHEN sd.type_id <= 1 THEN 1 ELSE CASE WHEN sd.type_id = 2 THEN 2 ELSE CASE WHEN sd.type_id = 3 THEN 3 ELSE 4 END END END AS cstcode,
 | 
						|
        sd.batch_sn,
 | 
						|
        sd.batch_date,
 | 
						|
        sd.fee_data_id,
 | 
						|
        sd.fee_src_id,
 | 
						|
        sd.fee_src_type_id,
 | 
						|
        sd.fee_src_sn,
 | 
						|
        sd.promotion_sn,
 | 
						|
        sd.promotion_data_id,
 | 
						|
        sd.fee_category_id,
 | 
						|
        bt.name AS fee_category_id_name,
 | 
						|
        sd.customer_stock_dt
 | 
						|
        FROM customer_order_data sd
 | 
						|
        LEFT JOIN customer_order sm ON sm.id = sd.order_id
 | 
						|
        LEFT JOIN customer_order_type cot ON cot.id = sd.type_id
 | 
						|
        LEFT JOIN product p ON p.id = sd.product_id
 | 
						|
        LEFT JOIN product_category pc ON pc.id = p.category_id
 | 
						|
        LEFT JOIN product_unit u ON u.id = p.unit_id
 | 
						|
        LEFT JOIN customer c ON sm.customer_id = c.id
 | 
						|
             
 | 
						|
        LEFT JOIN (SELECT sum(isnull(ky_num, 0)) AS quantity, product_id
 | 
						|
            FROM (".StockService::getStockSelectSql().") ss
 | 
						|
            GROUP BY product_id
 | 
						|
        ) r ON sd.product_id = r.product_id
 | 
						|
            
 | 
						|
        LEFT JOIN (SELECT sum(d.quantity) AS quantity,d.sale_data_id, min(m.invoice_dt) AS invoice_dt, min(m.sn) AS sn
 | 
						|
            FROM stock_delivery_data d
 | 
						|
            JOIN stock_delivery m ON d.delivery_id = m.id
 | 
						|
            WHERE m.status = 1
 | 
						|
            GROUP BY d.sale_data_id
 | 
						|
        ) f ON sd.id = f.sale_data_id
 | 
						|
 | 
						|
        LEFT JOIN customer_cost_category bt ON sd.fee_category_id = bt.id";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取销售订单未发货
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public static function getSaleOrderSelectDetailNotDeliverySql() 
 | 
						|
    {
 | 
						|
        return "SELECT d.sale_id,
 | 
						|
        d.sale_data_id,
 | 
						|
        d.product_id,
 | 
						|
        d.quantity AS num,
 | 
						|
        (d.quantity - d.delivery_quantity) - isnull(yf.yf_num, 0) AS wf_num,
 | 
						|
        d.delivery_quantity + isnull(yf.yf_num, 0) AS yf_num,
 | 
						|
        d.price,
 | 
						|
        CASE WHEN isnull(d.type_id, 0) = 2 THEN '1' ELSE '0' END AS is_gift,
 | 
						|
        d.batch_sn,
 | 
						|
        d.batch_date,
 | 
						|
        d.promotion_sn,
 | 
						|
        d.promotion_data_id,
 | 
						|
        d.remark,
 | 
						|
        d.product_code,
 | 
						|
        d.product_spec,
 | 
						|
        d.product_name,
 | 
						|
        d.product_barcode,
 | 
						|
        d.product_unit,
 | 
						|
        d.weight,
 | 
						|
        d.total_weight,
 | 
						|
        d.fee_data_id,
 | 
						|
        d.fee_src_id,
 | 
						|
        d.fee_src_type_id,
 | 
						|
        d.fee_src_sn,
 | 
						|
        d.fee_category_id,
 | 
						|
        d.fee_category_id_name,
 | 
						|
        d.type_id,
 | 
						|
        d.type_id_name
 | 
						|
        FROM (".static::getSaleOrderDataSql().") d
 | 
						|
        LEFT JOIN (SELECT dd.ref_sale_data_id, dd.product_id, sum(dd.quantity) AS yf_num
 | 
						|
            FROM customer_order_data dd
 | 
						|
            GROUP BY dd.ref_sale_data_id, dd.product_id
 | 
						|
        ) yf ON d.sale_data_id = yf.ref_sale_data_id AND d.product_id = yf.product_id
 | 
						|
 | 
						|
        WHERE (d.quantity - d.delivery_quantity) - isnull(yf.yf_num, 0) > 0 AND isnull(d.use_close, 0) = 0";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取销售订单发货表
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public static function getSaleOrderSelectDetailSql() 
 | 
						|
    {
 | 
						|
        return "
 | 
						|
        SELECT isnull(temp.wf_num, 0) * isnull(temp.weight, 0) AS total_weight,
 | 
						|
        temp.*
 | 
						|
        FROM (
 | 
						|
			SELECT isnull(d.delivery_quantity, 0) AS quantity,
 | 
						|
			isnull(sdd.quantity, 0) AS yf_num,
 | 
						|
			isnull(sdd.bs, 0) AS yf_bs,
 | 
						|
			isnull(d.delivery_quantity, 0) - isnull(sdd.quantity, 0) AS wf_num,
 | 
						|
            isnull(e.ky_num, 0) AS ky_num,
 | 
						|
            d.product_id,
 | 
						|
            d.sale_id,
 | 
						|
            d.sale_data_id,
 | 
						|
            d.type_id,
 | 
						|
            d.type_id_name,
 | 
						|
            d.other_money,
 | 
						|
            d.price,
 | 
						|
            d.money,
 | 
						|
            m.sn AS sale_sn,
 | 
						|
			CASE WHEN (isnull(d.type_id, 0) = 2) THEN '1' ELSE '0' END AS is_gift,
 | 
						|
            d.batch_sn,
 | 
						|
            d.batch_date,
 | 
						|
            d.fee_data_id,
 | 
						|
            d.fee_src_id,
 | 
						|
            d.fee_src_type_id,
 | 
						|
            d.fee_src_sn,
 | 
						|
            d.fee_category_id,
 | 
						|
            d.fee_category_id_name,
 | 
						|
            d.promotion_sn,
 | 
						|
            d.promotion_data_id,
 | 
						|
            d.product_name,
 | 
						|
            d.product_spec,
 | 
						|
            d.product_code,
 | 
						|
            d.product_unit,
 | 
						|
            d.product_barcode,
 | 
						|
            d.material_type,
 | 
						|
            d.weight
 | 
						|
           FROM (".static::getSaleOrderDataSql().") d
 | 
						|
           LEFT JOIN customer_order m ON d.order_id = m.id
 | 
						|
						 
 | 
						|
           LEFT JOIN (SELECT sum(isnull(quantity, 0)) AS quantity, count(*) AS bs, product_id, sale_data_id
 | 
						|
                FROM stock_delivery_data
 | 
						|
               GROUP BY sale_data_id, product_id
 | 
						|
		    ) sdd ON d.sale_data_id = sdd.sale_data_id
 | 
						|
									
 | 
						|
           LEFT JOIN (SELECT product_id, sum(isnull(ky_num, 0)) AS ky_num
 | 
						|
                FROM (".StockService::getStockSelectSql().") ss
 | 
						|
                WHERE (warehouse_name like '%成品%' OR warehouse_code = '07') AND warehouse_code <> '25'
 | 
						|
                GROUP BY product_id
 | 
						|
			) e ON d.product_id = e.product_id
 | 
						|
									
 | 
						|
            WHERE isnull(d.use_close, 0) = 0 AND (isnull(d.is_allocate, 0) = 0 OR (isnull(d.is_allocate, 0) = 1 AND isnull(d.material_type, 0) > 0))
 | 
						|
	    ) temp
 | 
						|
        WHERE isnull(temp.wf_num, 0) > 0 OR (isnull(temp.yf_bs, 0) = 0 AND temp.product_code like '99%')";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取销售订单调拨发货
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public static function getSaleOrderSelectDetailReqSql() 
 | 
						|
    {
 | 
						|
        return "
 | 
						|
        SELECT isnull(temp.wf_num, 0) * isnull(temp.weight, 0) AS total_weight,
 | 
						|
        temp.quantity,
 | 
						|
        temp.yf_num,
 | 
						|
        temp.yf_bs,
 | 
						|
        temp.wf_num,
 | 
						|
        temp.ky_num,
 | 
						|
        temp.product_id,
 | 
						|
        temp.sale_id,
 | 
						|
        temp.sale_data_id,
 | 
						|
        temp.type_id,
 | 
						|
        temp.type_id_name,
 | 
						|
        temp.other_money,
 | 
						|
        temp.price,
 | 
						|
        temp.money,
 | 
						|
        temp.sale_sn,
 | 
						|
        temp.is_gift,
 | 
						|
        temp.batch_sn,
 | 
						|
        temp.batch_date,
 | 
						|
        temp.fee_data_id,
 | 
						|
        temp.fee_src_id,
 | 
						|
        temp.fee_src_type_id,
 | 
						|
        temp.fee_src_sn,
 | 
						|
        temp.fee_category_id,
 | 
						|
        temp.fee_category_id_name,
 | 
						|
        temp.promotion_sn,
 | 
						|
        temp.promotion_data_id,
 | 
						|
        temp.product_name,
 | 
						|
        temp.product_spec,
 | 
						|
        temp.product_code,
 | 
						|
        temp.product_unit,
 | 
						|
        temp.product_barcode,
 | 
						|
        temp.product_type,
 | 
						|
        temp.material_type,
 | 
						|
        temp.weight
 | 
						|
        FROM (SELECT isnull(d.delivery_quantity, 0) AS quantity,
 | 
						|
            isnull(sdd.quantity, 0) AS yf_num,
 | 
						|
            isnull(sdd.bs, 0) AS yf_bs,
 | 
						|
            isnull(d.delivery_quantity, 0) - isnull(sdd.quantity, 0) AS wf_num,
 | 
						|
            isnull(e.ky_num, 0) AS ky_num,
 | 
						|
            d.product_id,
 | 
						|
            d.sale_id,
 | 
						|
            d.sale_data_id,
 | 
						|
            d.type_id,
 | 
						|
            d.type_id_name,
 | 
						|
            d.other_money,
 | 
						|
            d.price,
 | 
						|
            d.money,
 | 
						|
            m.sn AS sale_sn,
 | 
						|
            CASE WHEN (isnull(d.type_id, 0) = 2) THEN '1' ELSE '0' END AS is_gift,
 | 
						|
            d.batch_sn,
 | 
						|
            d.batch_date,
 | 
						|
            d.fee_data_id,
 | 
						|
            d.fee_src_id,
 | 
						|
            d.fee_src_type_id,
 | 
						|
            d.fee_src_sn,
 | 
						|
            d.fee_category_id,
 | 
						|
            d.fee_category_id_name,
 | 
						|
            d.promotion_sn,
 | 
						|
            d.promotion_data_id,
 | 
						|
            d.product_name,
 | 
						|
            d.product_spec,
 | 
						|
            d.product_code,
 | 
						|
            d.product_unit,
 | 
						|
            d.product_barcode,
 | 
						|
            d.product_type,
 | 
						|
            d.material_type,
 | 
						|
            d.weight
 | 
						|
            FROM (".static::getSaleOrderDataSql().") d
 | 
						|
            LEFT JOIN customer_order m ON d.order_id = m.id
 | 
						|
            LEFT JOIN (SELECT sum(isnull(quantity, 0)) AS quantity,
 | 
						|
                count(*) AS bs,
 | 
						|
                product_id,
 | 
						|
                sale_data_id
 | 
						|
                FROM stock_allocation_data
 | 
						|
                GROUP BY sale_data_id, product_id
 | 
						|
            ) sdd ON d.sale_data_id = sdd.sale_data_id
 | 
						|
                                        
 | 
						|
            LEFT JOIN (SELECT product_id,
 | 
						|
                sum(isnull(ky_num, 0)) AS ky_num
 | 
						|
                FROM (".StockService::getStockSelectSql().") ss
 | 
						|
                WHERE (warehouse_name like '%成品%') AND warehouse_code <> '25'
 | 
						|
                GROUP BY product_id
 | 
						|
            ) e ON d.product_id = e.product_id
 | 
						|
 | 
						|
            WHERE isnull(d.use_close, 0) = 0 AND isnull(d.is_allocate, 0) = 1
 | 
						|
        ) temp
 | 
						|
        WHERE isnull(temp.wf_num, 0) > 0";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取赠品其他出库单明细
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public static function getSampleSelectDetailSql() 
 | 
						|
    {
 | 
						|
        return "
 | 
						|
        SELECT temp.quantity,
 | 
						|
        temp.yc_num,
 | 
						|
        temp.wc_num,
 | 
						|
        temp.ky_num,
 | 
						|
        temp.product_id,
 | 
						|
        temp.sample_id,
 | 
						|
        temp.sample_data_id,
 | 
						|
        temp.price,
 | 
						|
        temp.money,
 | 
						|
        temp.sample_sn,
 | 
						|
        temp.use_close,
 | 
						|
        isnull(p.weight, 0) AS weight,
 | 
						|
        p.name AS product_name,
 | 
						|
        p.code AS product_code,
 | 
						|
        pc.code AS category_code,
 | 
						|
        p.spec AS product_spec,
 | 
						|
        pu.name AS product_unit,
 | 
						|
        isnull(temp.wc_num, 0) * isnull(p.weight, 0) AS total_weight
 | 
						|
        FROM (SELECT isnull(d.quantity, 0) AS quantity,
 | 
						|
            isnull(srd.quantity, 0) AS yc_num,
 | 
						|
            isnull(d.quantity, 0) - isnull(srd.quantity, 0) AS wc_num,
 | 
						|
            isnull(e.ky_num, 0) AS ky_num,
 | 
						|
            d.product_id,
 | 
						|
            d.sample_id,
 | 
						|
            d.id AS sample_data_id,
 | 
						|
            d.price,
 | 
						|
            d.money,
 | 
						|
            m.sn AS sample_sn,
 | 
						|
            d.use_close
 | 
						|
            FROM sample_apply_data d
 | 
						|
            LEFT JOIN sample_apply m ON m.id = d.sample_id
 | 
						|
            LEFT JOIN (SELECT sum(isnull(quantity, 0)) AS quantity,product_id,sample_data_id
 | 
						|
                FROM stock_record09_data
 | 
						|
                WHERE sample_data_id <> 0
 | 
						|
                GROUP BY sample_data_id, product_id
 | 
						|
            ) srd ON d.id = srd.sample_data_id
 | 
						|
                            
 | 
						|
            LEFT JOIN (SELECT product_id,sum(isnull(ky_num, 0)) AS ky_num
 | 
						|
                FROM (".StockService::getStockSelectSql().") ss
 | 
						|
                GROUP BY product_id
 | 
						|
            ) e ON d.product_id = e.product_id
 | 
						|
                            
 | 
						|
            WHERE m.status = 1
 | 
						|
        ) temp
 | 
						|
        LEFT JOIN product p ON temp.product_id = p.id
 | 
						|
        LEFT JOIN product_unit pu ON p.unit_id = pu.id
 | 
						|
        LEFT JOIN product_category pc ON pc.id = p.category_id
 | 
						|
        WHERE isnull(temp.wc_num, 0) > 0";
 | 
						|
    }
 | 
						|
} |