POS.tw/系統開發筆記

POS.tw.通路進銷存資料轉入 編輯

若使用 MySQL 當成轉檔料主要存放位置,當系統逐漸成長後,會造成資料轉入時需要大量運算能力,平常運作卻都空閒的狀況。

所以,使用 AWS DynamoDB 當成主要轉入資料存放位置,可以依轉入資料量及時間點,動態調整執行速度,以因應部份時段大量資料轉入需求。
在兩個轉檔步驟中,使用 AWS SQS 當成中間的緩衝,先將影響到下一階段資料的主鍵值放到 queue 中。

如果直接寫入到 DynamoDB,就必須使用比較高的 Provisioned capacity 來存放下一階段主鍵值。
使用 queue 就可以用較小的 capacity 來執行下一階段統計,因為每一階段統計時間可能都要很長,所以,只要極小量的 capacity 就可以因應大量資料的統計。

且未來如果資料量再增加,就可以把每個階段切割開,把統計量大的交由 AWS EMR 進行統計後,再將資料轉入使用。
若需要與通路或廠商內部系統串接,把 queue 以 API 的方式提供服務,即可跨不同的系統或雲端服務平台,進行資料整合。

  • 執行步驟
  1. 取得進銷存相關資料檔案。
  2. 將檔案資料轉入 DymanoDB 。
  3. 計算進銷存交易明細。
  4. 計算進銷存日檔及平均日銷量。
  5. 計算庫存異常明細。
  6. 計算進銷存週檔。
  7. 計算進銷存月檔。
  8. 計算進銷存月檔商品ABC分類(分金額及數量)及銷售排名(分金額及數量)。

取得進銷存相關資料檔案 編輯

  1. 透過FTP、文字檔或Web的方式,取得資料檔案。
  2. 取得資料後,將檔案傳送到 S3,依檔案內容進行命名。
  3. 將取得的資料傳送到 queueFile(AWS SQS)。先傳到 queueFile 可以避免 DynamoDB 寫入限制,造成要使用比較高的 Provisioned capacity。
  4. 將 queueFile 中的資料寫入 DynamoDB.POStwQueue : DataKey=File_[DataType], RangeKey=[FileName], Attributes 依需求.

將檔案資料轉入 DymanoDB 編輯

  1. 掃描 DynamoDB.POStwQueue 取得需要轉入的檔案名稱及 S3 位置。
  2. 讀取 DynamoDB.POStwMaster 取得檔案上次轉入狀態,以決定是否重新轉入或跳過。
  3. 如果需要轉入,則執行轉入作業;寫入轉檔結果到 DynamoDB.POStwMaster。
  4. 將轉入影響到的資料主鍵值傳送到 queue(AWS SQS),可以避免 DynamoDB 寫入限制。
  5. 將 queue 中的資料寫入到 DynamoDB.POStwQueue,供下一階段轉檔使用 。

PS:因應可以取得的資料內容不同,產生不同的資料主鍵值;例如:有交易明細,則從交易明細算日檔;如果只有交易日檔,則由日檔開始計算;如果只有區間銷售,則使用預估計算每日銷售及庫存;如果只有出貨資料及某天庫存量(可以用預估),則依出貨及庫存推算每日銷售及庫存。

  • 資料主鍵值類型
  1. DataType=InvoicingDetail (進銷存交易明細)
  2. DataType=InvoicingDay (進銷存日檔)
  3. DataType=InvoicingPeriod (進銷存區間資料)
  4. DataType=InvoicingWeek (進銷存週檔)
  5. DataType=InvoicingMonth (進銷存月檔)

庫存異常計算 編輯

  • 庫存異常定義
  1. 負庫存:負庫存一般均為庫存管理出問題造成,除了少數特例外;所以,要特別管理,先從負庫存量高的進行處理,逐步找出負庫存原因,再一一進行作業調整,避免負庫存產生。
  2. 庫存為0:庫存為0有很多原因,若是品項數多的通路,一般先從促銷商品及重點商品先處理;再依商品ABC分類,從A級品項優先處理。
  3. 庫存不足:透過平均日銷量計算,預估缺貨日在三天(可透過參數設定)內的,就當成庫存不足。若是搭配補貨系統,則要考慮下下次送貨日期(下次送貨數量必須要下下次才會再補貨,所以,不能以下次送貨日期計算,否則,下次送貨日期後就會缺貨);如果是生鮮效期短的商品,則要考慮商品到期日,如果有到期前幾天下架的規定,則要考慮替換品數量。如果是效期較長的商品,則可以考慮最高庫存量,以減少送貨次數。
  4. 庫存過多:透過平均日銷量計算,如果需要再30天(可透過參數設定)才能銷售完畢,則當成庫存過多;依通路特性,初期可以先設定60~90天,等長天期的庫存過多處理後,再逐步縮短庫存天數,達到實際控管目標。若商品有效期限不長,則要依最後下架期限進行計算,避免商品過期造成損失。
  5. 滯銷:若30天(可透過參數設定)內都沒有任何銷售,則設定為滯銷。特殊情況要特別設定,例如:促銷商品、重點商品及A級商品,可能要設定3~7天就要處理,避免商品放在庫存區或被其它商品擋住,造成都沒有銷售的情況。

商品ABC分類 編輯

商品ABC分類依各家公司會有不同的設定。

在 POS.tw 中預設值為:A:20% B:60% C:20% D:0% E:0%

A級 編輯

這個等級的商品,屬於重點商品,需要特別進行管理,以避免影響業績。

B級 編輯

這個等級的商品,屬於一般商品,以數量及金額進行排名後,找出前100大商品進行處理即可。

C級 編輯

這個等級的商品,屬於評估商品,每月(或季年,依產品屬性決定。)進行評估後,如果是必備商品(依通路屬性決定)則不處理,否則將其狀況移到DE級商品。

D級 編輯

系統自動計算時會排除這個等級的商品;需要人工作業,調整商品到這個等級。 這個等級的商品,屬於預計停售且不再進貨商品,廠商還有持續生產,只是在公司銷售不佳,在有效期限內還可以進行銷售,也可以退貨的商品,不用急著出清。

E級 編輯

系統自動計算時會排除這個等級的商品;需要人工作業,調整商品到這個等級。 這個等級的商品,屬於停產的商品,若在期限內沒有售完,將無法退貨,應盡早處理以避免庫存損失。