logistics/change_price.ipynb

5.7 KiB

In [ ]:
from utils.gtools import MySQLconnect
import pandas as pd
# 先找出去年八月之后的订单号,订单时间,订单费用,订单所属条目,订单物流成本
with MySQLconnect('ods') as db:
    query = """SELECT
                    DATE_FORMAT( order_date, '%Y-%m-%d' ),
                    order_id,
                    order_price_dollar,
                    order_cate,
                    SUM(pfi.package_fund + pfi.head_way_express_fee + pfi.other_expend + pfi.indemnity)/7 AS `物流成本` 
                FROM
                    ods.order_list ol
                    LEFT JOIN order_express oe ON ol.order_id = oe.`单号`
                    LEFT JOIN package_fee_info pfi ON oe.包裹号 = pfi.package 
                WHERE
                    order_date >= '2024-08-01' 
                    AND order_date <= '2025-01-21' 
                    AND fund_status NOT REGEXP '等待|退款|失败|冻结' 
                    AND site_name = 'Litfad' 
                GROUP BY
                    order_id
                """
    order_df = pd.read_sql(query, db.con)
    print(order_df)
C:\Users\Admin\AppData\Local\Temp\ipykernel_2152\2535791683.py:19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.
  order_df = pd.read_sql(query, db.con)
       DATE_FORMAT(order_date,'%Y-%m-%d')         order_id  \
0                              2024-08-01  240801000602903   
1                              2024-08-01  240801000802198   
2                              2024-08-01  240801001202641   
3                              2024-08-01  240801001402908   
4                              2024-08-01  240801001414785   
...                                   ...              ...   
143421                         2025-01-20  250120235520923   
143422                         2025-01-20  250120235602837   
143423                         2025-01-20  250120235616266   
143424                         2025-01-20  250120235627823   
143425                         2025-01-20  250120235802366   

        order_price_dollar  order_freight_price_dollar order_cate  
0                   201.66                       64.30         家具  
1                   420.65                       53.60         家具  
2                    51.93                       13.66         家具  
3                  2099.55                      112.20         家具  
4                   154.47                       39.78         灯具  
...                    ...                         ...        ...  
143421              496.54                       50.00         家具  
143422              121.50                       17.02         灯具  
143423              281.34                        9.66         家具  
143424              312.36                       73.47         家具  
143425              117.39                       17.21         灯具  

[143426 rows x 5 columns]
In [ ]:
# 取采购价
order_id = order_df['order_id'].tolist()
order_ids = ','.join(f"'{i}'" for i in order_id)
with MySQLconnect('ods') as db:
    query = f"""
with t1 AS (SELECT LEFT
        ( ol.out_detials_outlink_id, 15 ) AS order_id,
        SUM( out_detials_qty * price )/ 7 AS instock_cost,
				NULL AS buy_cost
    FROM
        ods.outstock_list ol
        JOIN ods.instock_list il ON ol.store_in_id = il.id 
    WHERE
        LEFT ( ol.out_detials_outlink_id, 15 ) IN ({order_ids}) 
    GROUP BY
        LEFT ( ol.out_detials_outlink_id, 15 )
UNION ALL
 SELECT
        LEFT ( order_product_id, 15 ) as order_id, 
				NULL as instock_cost,
				SUM(buy_num * actual_price)/ 7 AS buy_cost
    FROM
        `warehouse_purchasing`
    WHERE
        LEFT ( order_product_id, 15 ) IN ({order_ids}) 
        AND buy_audit = "采购完成"
    group by LEFT ( order_product_id, 15 )
		)
		
	SELECT
	order_id,
	SUM(CASE 
	WHEN instock_cost is null THEN
		buy_cost
	ELSE
		instock_cost END) AS pur_cost
	FROM
	t1 
	GROUP BY order_id
	
"""