import time from fastapi import FastAPI import sys import os import datetime import ast from fastapi.responses import JSONResponse, FileResponse from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel import uvicorn from fastapi.staticfiles import StaticFiles import markdown from fastapi import Request, APIRouter from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates templates = Jinja2Templates(directory="templates") def openfile(filename): filepath = os.path.join("page/", filename) with open(filepath, "r", encoding="utf-8") as input_file: text = input_file.read() html = markdown.markdown(text) data = { "page": html } return data description = """ 長慶運通系統設計 ## Items You can **read items**. ## Users ![This image doesn't work](/imgs/datamodel.svg) You will be able to: * **Create users** (_not implemented_). * **Read users** (_not implemented_). """ app = FastAPI(description=description) app.mount("/imgs", StaticFiles(directory="imgs"), name="imgs") origins = [ "http://www.googo.org", "http://www.googo.org:8080", "http://0.0.0.0:8080", "http://googo.org:8080", "http://googo.org", "http://139.162.121.30" ] #uvicorn main:app --host 0.0.0.0 --port 8001 app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/page/{page_name}", response_class=HTMLResponse) async def show_page(request: Request, page_name: str): data = openfile(page_name+".md") print(data) return templates.TemplateResponse("page.html", {"request": request, "data": data}) class q_req(BaseModel): domain_name: str class kw_req(BaseModel): fullurl: str shorturl: str class upload_orders_item(BaseModel): objtype: str channel_id: str customer_contract_id: str shipment_type:str ship_date:str class shipping_details(BaseModel): filed_date: str channel_id: str customer_contract_id: str shipment_type:str ship_date:str @app.post("/op_doc/upload_orders", summary="訂單明細上傳", description= """ parameters: 訂單明細上傳(Excel格式) - current_insite: 收單營業所 - transport_type: 配送類別 - transport_id: 通路代碼 - transport_site: 入單營業所 - transport_contract_id: 客契代碼 - transport_no: 配送單號 - shipment_no: 運單號碼 - shipment_type: 運單種類(一單到底/換單) - shipment_2: 是否二配 - shipment_date: 出貨日期 - package_id: 袋號 - order_id: 訂單編號 - sender_data: 送件人資料 { sender_name: 送件人姓名 sender_mobileno: 送件人手機號碼 sender_addr: 送件人地址 sender_spot_id: 超商代碼 sender_spot_name: 超商名稱 sender_spot_addr: 超商地址 ... } - recipient_data: 收件人資料 { recipient_name: 收件人姓名 recipient_mobileno: 收件人手機號碼 recipient_addr: 收件人地址 recipient_spot_id: 超商代碼 recipient_spot_name: 超商名稱 recipient_spot_addr: 超商地址 ... } - package: 貨件內容 { package_charge: 代收貨款 package_weight: 貨件重量 package_contemt: 內容物 ... } - dInDtime: 建檔日期 - dInUser: 建檔人 - dInFilename: 檔案名稱 ... return: {'success':'1'/'0'} 上傳成功/失敗 """ ) async def upload_orders(req:upload_orders_item): return "OK" @app.post("/op_doc/query_shipping_details", response_model=shipping_details, summary="出貨明細查詢", description= """ parameters: 查詢條件 { ... } return: dataset [{ - dInDtime: 建檔日期 - transport_site: 入單營業所 - current_insite: 收單營業所 - transport_type: 配送類別 - transport_name: 通路商 - shipment_type: 運單種類 - shipment_2: 二配 - dInUser: 建檔人 - dInFilename: 檔案名稱 - upload_dtime: 上傳時間 - upload_account: 傳送帳號 }] """ ) async def query_shipping_details(): return None @app.post("/stock_taking/shipment_out", response_model=shipping_details, summary="出貨面單", description= """ parameters: - transport_id: 通路代碼 - shipment_no: 運單號碼 return: - sender_data: 送件人資料 { sender_name: 送件人姓名 sender_mobileno: 送件人手機號碼 sender_addr: 送件人地址 sender_spot_id: 超商代碼 sender_spot_name: 超商名稱 sender_spot_addr: 超商地址 ... }, - recipient_data: 收件人資料 { recipient_name: 收件人姓名 recipient_mobileno: 收件人手機號碼 recipient_addr: 收件人地址 recipient_spot_id: 超商代碼 recipient_spot_name: 超商名稱 recipient_spot_addr: 超商地址 ... }, - package: 貨件內容 { package_charge: 代收貨款 package_weight: 貨件重量 package_contemt: 內容物 ... } """ ) async def shipment_out(): return None @app.post("/stock_taking/bag_in", response_model=shipping_details, summary="袋進倉", description= """ parameters: - package_id: 袋號 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def bag_in(): return None @app.post("/stock_taking/wh_in", response_model=shipping_details, summary="進站", description= """ parameters: - transport_id: 通路代碼 - transport_no: 配送單號 - if_cancel: 取消刷件 - insite_comment: 其他說明 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def wh_in(): return None @app.post("/stock_taking/wh_out", response_model=shipping_details, summary="出站", description= """ parameters: - transport_id: 通路代碼 - transport_no: 配送單號 - transport_next: 下一站代碼 - if_cancel: 取消刷件 - insite_comment: 其他說明 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def wh_out(): return None @app.post("/stock_taking/deliver_out", response_model=shipping_details, summary="配送", description= """ parameters: - transport_id: 通路代碼 - transport_no: 配送單號 - if_cancel: 取消刷件 - insite_comment: 其他說明 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def deliver_out(): return None @app.post("/stock_taking/sign", response_model=shipping_details, summary="簽收", description= """ parameters: - transport_type: 配送類別 - transport_id: 通路代碼 - transport_no: 配送單號 - transport_sign_status: 簽收類別(成功/異常) - transport_sign: 簽收人(本人/代收/警衛) return: {'success':'1'/'0'} 資料正常/異常 """ ) async def sign(): return None @app.post("/stock_taking/whout_again", response_model=shipping_details, summary="二次出貨", description= """ parameters: - transport_id: 通路代碼 - shipment_no: 運單號碼 return: - sender_data: 送件人資料 { sender_name: 送件人姓名 sender_mobileno: 送件人手機號碼 sender_addr: 送件人地址 sender_spot_id: 超商代碼 sender_spot_name: 超商名稱 sender_spot_addr: 超商地址 ... }, - recipient_data: 收件人資料 { recipient_name: 收件人姓名 recipient_mobileno: 收件人手機號碼 recipient_addr: 收件人地址 recipient_spot_id: 超商代碼 recipient_spot_name: 超商名稱 recipient_spot_addr: 超商地址 ... }, - package: 貨件內容 { package_charge: 代收貨款 package_weight: 貨件重量 package_contemt: 內容物 ... } """ ) async def whout_again(): return None @app.post("/stock_taking/s_return", response_model=shipping_details, summary="退貨", description= """ parameters: - transport_site: 營業所 - transport_id: 通路代碼 - transport_no: 配送單號 - stock_id: 倉別(長慶倉庫) - stock_storage_id: 儲區 - if_cancel: 取消刷件 - insite_comment: 其他說明 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def s_return(): return None @app.post("/stock_taking/reprint", response_model=shipping_details, summary="重印面單", description= """ parameters: - transport_id: 通路代碼 - shipment_no: 運單號碼 return: - sender_data: 送件人資料 { sender_name: 送件人姓名 sender_mobileno: 送件人手機號碼 sender_addr: 送件人地址 sender_spot_id: 超商代碼 sender_spot_name: 超商名稱 sender_spot_addr: 超商地址 ... }, - recipient_data: 收件人資料 { recipient_name: 收件人姓名 recipient_mobileno: 收件人手機號碼 recipient_addr: 收件人地址 recipient_spot_id: 超商代碼 recipient_spot_name: 超商名稱 recipient_spot_addr: 超商地址 ... }, - package: 貨件內容 { package_charge: 代收貨款 package_weight: 貨件重量 package_contemt: 內容物 ... } """ ) async def reprint(): return None @app.post("/stock_taking/batch_print", response_model=shipping_details, summary="面單批次列印", description= """ parameters: 查詢條件 { ... } return: dataset [ - sender_data: 送件人資料 { sender_name: 送件人姓名 sender_mobileno: 送件人手機號碼 sender_addr: 送件人地址 sender_spot_id: 超商代碼 sender_spot_name: 超商名稱 sender_spot_addr: 超商地址 ... }, - recipient_data: 收件人資料 { recipient_name: 收件人姓名 recipient_mobileno: 收件人手機號碼 recipient_addr: 收件人地址 recipient_spot_id: 超商代碼 recipient_spot_name: 超商名稱 recipient_spot_addr: 超商地址 ... }, - package: 貨件內容 { package_charge: 代收貨款 package_weight: 貨件重量 package_contemt: 內容物 ... } ] """ ) async def batch_print(): return None @app.post("/stock_taking/print_return", response_model=shipping_details, summary="刷退條碼", description= """ parameters: - transport_id: 通路代碼 - transport_no: 配送單號 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def print_return(): return None @app.post("/ELPC/stock_in", response_model=shipping_details, summary="入庫", description= """ parameters: - transport_id: 通路代碼 - transport_no: 配送單號 - stock_id: 倉別(長慶倉庫) - stock_storage_id: 儲區 - if_cancel: 取消刷件 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def stock_in(): return None @app.post("/ELPC/shelf", response_model=shipping_details, summary="上架", description= """ parameters: - transport_id: 通路代碼 - transport_no: 配送單號 - stock_id: 倉別(長慶倉庫) - stock_storage_id: 儲區 - if_cancel: 取消刷件 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def shelf(): return None @app.post("/ELPC/stock_out", response_model=shipping_details, summary="出庫", description= """ parameters: - stock_id: 倉庫(長慶倉庫) return: {'success':'1'/'0'} 資料正常/異常 """ ) async def stock_out(): return None @app.post("/ELPC/stock_move", response_model=shipping_details, summary="移動儲位", description= """ parameters: - stock_id: 倉別(長慶倉庫) - source_stock_storage_id: 來源儲區 - target_stock_storage_id: 目的儲區 return: {'success':'1'/'0'} 資料正常/異常 """ ) async def stock_move(): return None @app.post("/ELPC/outstock", response_model=shipping_details, summary="下架", description= """ parameters: - transport_site: 下架營業站 - transport_id: 通路代碼 - stock_id: 倉別(長慶倉庫) return: {'success':'1'/'0'} 資料正常/異常 """ ) async def outstock(): return None @app.post("/ELPC/stock_check", response_model=shipping_details, summary="出庫檢核", description= """ parameters: 匯入檢核單號(Excel格式) dataset [ - transport_no: 配送單號 ] return: {'success':'1'/'0'} 資料正常/異常 """ ) async def outstock(): return None if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=9898)