李興華 李玉平 陶明
?
基于WebAPI的全流程條碼系統設計和實現
李興華 李玉平 陶明
(廣東省智能制造研究所)
某些工廠實行條碼化管理,針對產品在生產、儲運、分銷和售后等環節的物流走向情況,提出運用WebAPI標準接口框架實現全流程條碼系統的方案。標準接口分為寫入條碼物流走向和查詢條碼信息2個接口,接口參數以JSON格式傳輸。工廠不同系統通過HTTP請求方式調用標準接口,使全流程條碼系統實現了條碼關系和物流走向的數據共享。
WebAPI;RESTful;條碼化;數據接口;JSON
在工廠生產條碼化的管理中,條碼在企業資源計劃(ERP)、制造執行系統(MES)、倉庫管理系統(WMS)、客戶關系管理(CRM)等系統中起著中間聯系的作用。由于各個系統對條碼的操作相互獨立,如在MES產生的條碼包裝層級關系,只能在MES中查詢;在WMS產生的入庫、出庫和倉庫調撥等業務物流走向,只能在WMS中查詢。若后端系統需獲取條碼關系和物流走向數據時,前端系統需提供接口才能使前后端不同系統間的數據交互。由于數據接口不統一,使整個工廠IT系統的運維工作量隨著接入防偽查詢系統的增加而翻倍,浪費了較多的管理資源。
基于條碼信息在整個工廠IT系統中數據接口交互不統一的問題,本文提出基于WebAPI標準接口開發全流程條碼系統,包括寫入條碼物流走向和查詢條碼信息2個接口。服務接口宿主在IIS上供外部系統調用,接口參數以JSON格式傳入,同時描述了系統設計和關鍵技術。全流程條碼系統作為一個獨立的系統,外部系統調用統一的標準接口獲取共享數據,并實時更新條碼異動狀態。
全流程條碼系統的數據源頭從MES開始,在生產下線時開始記錄,同時將條碼包裝層級關系也寫入系統;然后在WMS將條碼的入庫、出庫、調撥、發貨等步驟寫入系統;最后在銷售系統將條碼從出貨到最終用戶的銷售路徑寫入系統。從生產到銷售全流程的條碼物流走向數據都以接口的形式寫入系統。售后系統通過查詢接口獲取對應的條碼信息,通過條碼查詢可跟蹤產品的物流走向情況。系統數據流向圖如圖1所示。

圖1 系統數據流向圖
系統按照標準RESTful的WebAPI接口方式供外部系統調用,參數以JSON格式傳輸。在WebAPI服務端調用數據庫存儲過程與數據庫進行交互,通過存儲過程寫入條碼信息,也可將條碼物流信息返回給接口。系統數據交互圖如圖2所示。

圖2 系統數據交互圖
系統記錄了操作者何時在哪個系統對條碼的相關操作。在不同的業務場景下,對條碼操作各有不同。其中記錄的基本信息有條碼數量、單位、父級條碼、單據類型、單據名稱、源系統。根據后端系統的內外網情況,系統置于外網云服務。
系統功能包括寫入條碼信息和查詢條碼信息2個接口。根據需要查詢當前和歷史記錄情況,系統設計有當前記錄表和明細表。當條碼寫入到當前記錄表時,若無此條碼記錄則插入相關字段信息,有則更新處理。在寫入當前表的同時需將寫入信息插入到明細表。系統功能結構圖如圖3所示。

圖3 系統功能結構圖
WebAPI是用在.NET Framework上構建RESTful應用程序的理想平臺,為構建HTTP服務提供強大的數據服務[1]。WebAPI服務采用JSON方式進行數據傳遞,與WCF和Web Service相比較是一種輕量級的框架。由于WebAPI RESTful采用統一的接口,所以其成員體現為針對同一資源的操作。對于Web來說,針對資源的操作通過HTTP方式來體現[2]。在PC端、網頁端、移動端都可通過HTTP的方式調用WebAPI服務接口,從而提高系統的擴展性。
系統的表設計主要包含條碼物流走向記錄當前表和明細表,其中當前表是記錄每個條碼當前的物流走向情況;明細表是條碼物流走向的全流程記錄情況。當前表可按照半年或一年的時間進行刪除,而明細表可按照時間進行分區處理,以便后續數據量較大時提高查詢效率。當前表和明細表的表結構相同,如表1所示。

表1 當前表和明細表的表結構
ASP.NET WebAPI 為OData(open data protocol)提供直接支持,OData通過HTTP協議提供對數據源的CRUD訪問[3]。由于系統數據量較大,直接通過OData進行數據庫操作會造成查詢和更新數據時間較長,因此WebAPI服務接口與數據庫通過存儲過程的方式進行交互。通過ADO.NET封裝Sql類和OleDB類,使用命令對象來調用存儲過程。
WebAPI項目包含Models、Views、Controllers等文件夾。Models主要創建實體類,用于保持Service和Client之間通信的對象,這些對象以JSON格式進行數據傳輸。Views一般不起作用,因為接口服務不需要提供視圖界面文件。Controllers中的Controller對Webservice來說是一個Resource,用于提供服務,在Controller下創建的類繼承于ApiController類,在其中實現處理各種Get、Post、Put、Delete類型HTTP請求的方法。
在Controller下添加Writebarcodetrendinfo方法,返回一個由字符串類型Messgae和布爾類型Success兩個字段構成的對象,參數為寫入條碼信息的相關字段,通過封裝的ADO.NET類執行存儲過程調用。在方法調用過程中,若數據庫未有異常信息拋出或者方法執行無異常時,返回值設置Message為空且Success為True,此時條碼信息寫入成功,否則寫入失敗。
在Models構建一個查詢返回的類ResultDataObj,并在此類標識有序列化特性。
[Serializable]
public class ResultDataObj
{
public string sn { get; set; }
public string itemcode { get; set; }
public string itemname { get; set; }
public string sourcesystem { get; set; }
public string billtype { get; set; }
public string billname { get; set; }
public string billno { get; set; }
public string businesstype { get; set; }
public int snstatusorder { get; set; }
public DateTime operationdate { get; set; }
public string snparentno { get; set; }
}
在Controller下添加Querybarcodetrendinfo方法,參數為條碼和查詢類型,調用存儲過程返回結果集為ResultDataObj類集合。
WebAPI服務接口部署在IIS,外部系統通過HTTP協議的處理流程調用服務接口。客戶端發送HTTP Request(請求)后,服務器接收到請求包后開始處理,返回HTTP Response(響應)包。
以下是以C#為例的服務接口調用處理流程,首先聲明一個HttpWebRequest類的對象request對接口服務地址進行請求,請求方式為POST,參數形式為application/json。相關代碼如下:
HttpWebRequest request = WebRequest.Create(formUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
然后通過聲明一個HttpWebResponse類的對象response來接收請求的響應數據,相關代碼如下:
HttpWebResponse response;
Stream responseStream;
StreamReader reader;
response = request.GetResponse() as HttpWebResponse;
最后根據response返回的結果,將JOSN格式的數據轉化為構建的結果類對象,相關代碼如下:
ApiRepDtp res = JsonConvert.DeserializeObject< ApiRepDtp>(retjson);
通過Fiddler抓包工具,查看寫入條碼信息和查詢條碼信息兩個接口的調用情況,分別如圖4和圖5所示。

圖4 寫入條碼信息接口抓包圖

圖5 查詢條碼信息接口抓包圖
外部系統通過WebAPI接口對條碼的操作信息進行記錄。在統一標準接口下,提高了數據交互的性能,降低了各系統間的耦合度。JSON格式的數據傳輸處理,能夠簡易、快速地在不同平臺交互數據,提高系統的擴展性。通過全流程條碼系統可將各系統對條碼的操作信息整合,為各系統提供查詢接口,實現條碼物流全流程共享。
[1] MricoSoft. MSDN Library for ASP.NET [DB/OL]. 2013.
[2] 蔣金楠.ASP.NET Web API 2框架揭秘[M].北京:電子工業出版,2014.
[3] Christian Nagel, Jay Glynn, Morgan Skinner. C#高級編程——C# 5.0 & .NET 4.5.1 [M].李銘,譯.9版.北京:清華大學出版社, 2014.
Design and Implementation of Whole Process Barcode System Based on WebAPI
Li Xinghua Li Yuping Tao Ming
(Guangdong Institute of Intelligent Manufacturing)
At present, factory production practices bar code management, products through production, storage and transportation, distribution and then to a series of after-sales processes. Aiming at the logistics trend of products in various links, this paper proposes a scheme to implement the whole process bar code system by using the standard interface framework of WebAPI. The standard interface is divided into two interfaces: writing bar code logistics direction and inquiring bar code information. The interface parameters are transmitted in JSON format. Different systems in the whole factory call standard interfaces through HTTP requests, so that the whole process of bar code system to achieve the bar code relationship and logistics direction of data sharing.
WebAPI; Restful; Barcode; Data Interface; JSON
李興華,男,1987年生,本科,主要研究方向:智能制造信息化。E-mail: xh.li@giim.ac.cn