廠務
🌡️ 溫度監控與警報系統
📌 功能簡介
此專案透過 Flask 網站 + SQLite 資料庫,定時從 210.62.179.209/Data.txt 抓取冷凍冷藏室的即時溫度,並具備 超標警報與 Gmail API 通知功能。
同時支援歷史查詢、Excel 匯出與排程紀錄。
🔧 系統架構
-
語言:Python + Flask
-
資料庫:SQLite (
temperatures.db) -
功能模組:
-
requests:抓取即時溫度 -
schedule+threading:背景定時任務 -
pandas:Excel 匯出 -
googleapiclient:Gmail API 寄送通知
-
-
服務監控點:
-
1F前室
-
魚翅保存庫
-
原物料保存庫
-
成品保存庫
-
急速冷凍室
-
製成品預冷室
-
2F冷藏室
-
3F冷藏室
-
📑 功能說明
1. 定時紀錄與警報
-
每 10 分鐘自動抓取一次溫度數據並存入資料庫。
-
若溫度高於設定值(排除除霜時段),會透過 Gmail API 發送異常警報。
-
記錄冷卻時間 (
alert_cooldown_hours),避免重複通知。
2. 設定檔 (config.json)
{
"notifications": {
"enabled": true,
"sender": "zfuntw@gmail.com",
"recipients": ["example@mail.com"],
"alert_cooldown_hours": 3
},
"temperature_settings": {
"1F前室": {"enabled": true, "threshold": 10, "defrost_hours": [3, 15]},
"魚翅保存庫": {"enabled": true, "threshold": -5, "defrost_hours": []}
}
}
3. 前端介面
-
/即時監控頁面,顯示當前溫度 -
/history歷史紀錄查詢,可篩選日期區間 -
/export_excel將指定日期區間匯出 Excel -
/settings設定通知收件人、警報值與除霜時段
4. Gmail API 通知
-
使用
token.json儲存授權憑證。 -
異常時寄送 Email 通知指定人員。
5. 簡易版資料採集程式
另附加 get_temperature_data 腳本:
-
每 10 秒抓取一次溫度資料
-
僅儲存前 4 筆溫度數據至資料庫
📂 資料表結構
temperatures
| 欄位 | 說明 |
|---|---|
| id | 主鍵 |
| timestamp | 紀錄時間 |
| temp_front_room | 1F前室 |
| temp_shark_fin | 魚翅保存庫 |
| temp_raw_material | 原物料保存庫 |
| temp_finished_product | 成品保存庫 |
| temp_blast_freezer | 急速冷凍室 |
| temp_precooling_room | 製成品預冷室 |
| temp_2f | 2F冷藏室 |
| temp_3f | 3F冷藏室 |
▶️ 啟動方式
python app.py
網站預設服務於
👉 https://temp.zfun.com.tw/login
⚠️ 注意事項
-
需先完成 Gmail API OAuth 授權並放置
token.json。 -
除霜時間需在設定檔中明確設定,避免誤報。
-
若無法連線
210.62.179.209,會回傳空值並略過紀錄。
冷凍倉儲管理系統
本系統為一套以 Flask + SQLite 為基礎開發的冷凍倉儲管理系統,支援產品管理、庫存進出、位置視覺化與資料匯出入等功能,適合中小型冷鏈倉儲作業使用。
系統功能簡述
📦 商品管理
-
新增 / 編輯 / 查詢商品(SKU、品名、分類、備註)
-
匯入/匯出商品資料(CSV)
📍 倉儲位置管理
-
建立儲位資料(名稱、描述)
-
支援位置編碼格式解析(如:冷凍A區-A1-L1-前)
🧊 庫存管理
-
入庫(新增批號或補貨至既有批號)
-
出庫(支援多批次出貨,加入出庫車、建立出庫單)
-
庫存轉移(不同儲位間移動批號)
📑 出庫單管理
-
建立 / 檢視 / 確認 / 取消出庫單
-
出庫時自動更新庫存數量
📊 倉儲視覺化
-
依照區域 → 區段 → 層 → 子區 顯示各儲位庫存狀況
-
支援位置階層資料視覺化呈現
🔍 商品定位查詢
-
透過 SKU 或品名查詢現有庫存與對應儲位
🧪 API 提供
-
/api/location_inventory/<location_id>:查詢指定儲位之商品庫存清單(JSON 格式)
使用技術
-
後端:Flask + SQLAlchemy
-
資料庫:SQLite
-
前端樣板:Jinja2 + HTML/CSS
-
Session 控制:Flask Session(儲存出庫購物車)
-
檔案處理:CSV 匯入/匯出功能
正航依批號查詢庫存及倉儲管理系統 API 介接
功能概述
本系統整合 正航 ERP 與 倉儲管理系統 (WMS),提供以 產品 SKU 與批號 為基準的庫存查詢與儲位管理。
透過 Web 介面與 API,可快速查詢指定商品的批號、庫存數量及所在倉庫,並同步連接倉儲系統取得實際儲位資訊。
查詢來源
-
資料庫:正航 ERP (MSSQL)
-
表格:
comProduct、comBatchAmount -
條件:
BCQty > 0且WareID <> 'B'
-
-
外部 API:倉儲管理系統
-
URL:
https://stock.zfun.com.tw/wp-json/batch/v1/get-pallet -
參數:
-
sku: 商品代號 (ProdID) -
batch_number: 批號 (BatchID)
-
-
前台查詢顯示欄位
| 欄位名稱 | 說明 |
|---|---|
| SKU | 商品代號 (ProdID) |
| 品名規格 | 產品名稱 (ProdName) |
| 批號 | 批號 (BatchID) |
| 倉庫 | 倉庫代號 (WareID) |
| 數量 | 庫存數量 (BCQty) |
| 製造日期 | 生產日期 (ProduceDate) |
| 有效期限 | 有效日期 (ValidDate) |
| 儲位 | 來自倉儲系統 API 的 location 清單 |
API 介接說明
1. ERP 批號查詢 API
-
路由:
GET /api/sku/<sku> -
回傳格式:
{
"SKU001": [
{
"no": "20250801",
"inbound_date": "2025-08-01",
"expiry_date": "2026-08-01",
"quantity": 100
}
]
}
2. 倉儲儲位查詢 API
- 外部 API URL:
{
"success": true,
"data": [
{
"product_name": "烏骨雞1.1-1.2K(12隻/箱)",
"sku": "R07-001-00",
"batch_number": "20250730",
"pallet_number": "20250730132412",
"quantity": 600,
"unit": "隻",
"location": "B11-1-1"
}
]
}
- 整合顯示:
B11-1-1
B11-1-2
B11-1-3
系統流程
-
使用者輸入 SKU 或產品名稱。
-
系統從 正航 ERP 查詢符合條件的批號與庫存。
-
針對每一個批號,系統再呼叫 WMS API,取得儲位資訊。
-
前端頁面自動列出 庫存與儲位對應清單。
注意事項
-
倉庫代號
B不列入查詢。 -
僅顯示 庫存數量大於 0 的批號。
-
儲位資訊完全由 外部倉儲管理系統 API 提供。
-
建議設定 API timeout 機制,避免查詢卡死。
正航批號管理功能 Plus(加增儲位版)
版本定位:在原本「依批號查庫存」基礎上,加上「儲位管理」與「異動總帳」。
資料源:正航 ERP(MSSQL) + 本地儲位資料庫(SQLite)。
一、系統目標
-
以 SKU(ProdID)+批號(BatchID) 為主軸查詢庫存。
-
僅顯示 庫存數量 > 0 且 排除倉庫 B(WareID <> 'B') 的批號。
-
透過 SQLite 擴充「儲位(Location)」管理,並提供:
-
儲位新增 / 編輯 / 刪除
-
儲位庫存異動單(暫存 → 執行)
-
異動總帳(Inventory Ledger)追蹤每筆更動
-
二、系統架構
1) 後端
-
Flask(port:
5202) -
MSSQL(正航 ERP):查 SKU/批號/數量/日期
-
主要表:
comProduct、comBatchAmount -
查詢條件:
BCQty > 0且WareID <> 'B'
-
-
SQLite(本地儲位資料庫):儲位與異動紀錄
-
batch_locations:儲位主表(以prod_id + batch_id + location唯一) -
inventory_ledger:儲位庫存異動總帳
-
2) 前端頁面(Jinja2 模板)
-
/:依商品關鍵字查批號庫存(含各批號的儲位清單) -
/locations:儲位管理(可切換以「商品」或「儲位」關鍵字查) -
/transfer_slip:異動單檢視(暫存清單) -
/history:異動總帳查詢 -
/edit_location/<id>:儲位編輯頁
三、資料表(SQLite)
1) batch_locations
| 欄位 | 型別 | 說明 |
|---|---|---|
| id | INTEGER PK | 儲位記錄主鍵 |
| prod_id | TEXT | SKU(對應正航 ProdID) |
| batch_id | TEXT | 批號(對應正航 BatchID) |
| location | TEXT | 儲位(例:A20-1-1) |
| quantity | INTEGER | 此儲位現有量(可為空) |
| remark | TEXT | 備註 |
| created_at | TIMESTAMP | 建立時間(預設 NOW) |
外鍵:
FOREIGN KEY(location_id) REFERENCES batch_locations(id) ON DELETE CASCADE
四、主要業務規則
-
ERP 查詢條件
-
只抓 庫存 > 0(
BCQty > 0) 的批號 -
排除倉庫 B(
WareID <> 'B') -
只顯示欄位:SKU(ProdID)、品名規格(ProdName)、批號(BatchID)、倉庫(WareID)、數量(BCQty)、製造日期(ProduceDate)、有效期限(ValidDate)
-
-
儲位管理
-
新增儲位:若同 SKU+批號+儲位 不存在,建立記錄;若有初始量會同時寫入總帳(
INITIAL_STOCK)。 -
編輯儲位:若數量變動,寫入總帳(
MANUAL_EDIT)。 -
刪除儲位:僅允許庫存=0 時刪除,否則阻擋。
-
-
異動單(Transfer Slip)
-
可從搜尋結果將儲位加入「待處理異動」。
-
執行異動時,每筆會:
-
驗證目前量是否足夠扣減
-
更新儲位量、寫入總帳(
TRANSFER_DEDUCTION) -
產生參考單號:
MV-YYYYMMDDHHMMSS
-
-
-
總帳(Ledger)
-
任何造成儲位量變化的操作都寫入此表。
-
可於
/history依時間序檢視。
-