李興華 李玉平 陶明
?
基于WebAPI的全流程條碼系統(tǒng)設計和實現(xiàn)
李興華 李玉平 陶明
(廣東省智能制造研究所)
某些工廠實行條碼化管理,針對產(chǎn)品在生產(chǎn)、儲運、分銷和售后等環(huán)節(jié)的物流走向情況,提出運用WebAPI標準接口框架實現(xiàn)全流程條碼系統(tǒng)的方案。標準接口分為寫入條碼物流走向和查詢條碼信息2個接口,接口參數(shù)以JSON格式傳輸。工廠不同系統(tǒng)通過HTTP請求方式調(diào)用標準接口,使全流程條碼系統(tǒng)實現(xiàn)了條碼關系和物流走向的數(shù)據(jù)共享。
WebAPI;RESTful;條碼化;數(shù)據(jù)接口;JSON
在工廠生產(chǎn)條碼化的管理中,條碼在企業(yè)資源計劃(ERP)、制造執(zhí)行系統(tǒng)(MES)、倉庫管理系統(tǒng)(WMS)、客戶關系管理(CRM)等系統(tǒng)中起著中間聯(lián)系的作用。由于各個系統(tǒng)對條碼的操作相互獨立,如在MES產(chǎn)生的條碼包裝層級關系,只能在MES中查詢;在WMS產(chǎn)生的入庫、出庫和倉庫調(diào)撥等業(yè)務物流走向,只能在WMS中查詢。若后端系統(tǒng)需獲取條碼關系和物流走向數(shù)據(jù)時,前端系統(tǒng)需提供接口才能使前后端不同系統(tǒng)間的數(shù)據(jù)交互。由于數(shù)據(jù)接口不統(tǒng)一,使整個工廠IT系統(tǒng)的運維工作量隨著接入防偽查詢系統(tǒng)的增加而翻倍,浪費了較多的管理資源。
基于條碼信息在整個工廠IT系統(tǒng)中數(shù)據(jù)接口交互不統(tǒng)一的問題,本文提出基于WebAPI標準接口開發(fā)全流程條碼系統(tǒng),包括寫入條碼物流走向和查詢條碼信息2個接口。服務接口宿主在IIS上供外部系統(tǒng)調(diào)用,接口參數(shù)以JSON格式傳入,同時描述了系統(tǒng)設計和關鍵技術。全流程條碼系統(tǒng)作為一個獨立的系統(tǒng),外部系統(tǒng)調(diào)用統(tǒng)一的標準接口獲取共享數(shù)據(jù),并實時更新條碼異動狀態(tài)。
全流程條碼系統(tǒng)的數(shù)據(jù)源頭從MES開始,在生產(chǎn)下線時開始記錄,同時將條碼包裝層級關系也寫入系統(tǒng);然后在WMS將條碼的入庫、出庫、調(diào)撥、發(fā)貨等步驟寫入系統(tǒng);最后在銷售系統(tǒng)將條碼從出貨到最終用戶的銷售路徑寫入系統(tǒng)。從生產(chǎn)到銷售全流程的條碼物流走向數(shù)據(jù)都以接口的形式寫入系統(tǒng)。售后系統(tǒng)通過查詢接口獲取對應的條碼信息,通過條碼查詢可跟蹤產(chǎn)品的物流走向情況。系統(tǒng)數(shù)據(jù)流向圖如圖1所示。
圖1 系統(tǒng)數(shù)據(jù)流向圖
系統(tǒng)按照標準RESTful的WebAPI接口方式供外部系統(tǒng)調(diào)用,參數(shù)以JSON格式傳輸。在WebAPI服務端調(diào)用數(shù)據(jù)庫存儲過程與數(shù)據(jù)庫進行交互,通過存儲過程寫入條碼信息,也可將條碼物流信息返回給接口。系統(tǒng)數(shù)據(jù)交互圖如圖2所示。
圖2 系統(tǒng)數(shù)據(jù)交互圖
系統(tǒng)記錄了操作者何時在哪個系統(tǒng)對條碼的相關操作。在不同的業(yè)務場景下,對條碼操作各有不同。其中記錄的基本信息有條碼數(shù)量、單位、父級條碼、單據(jù)類型、單據(jù)名稱、源系統(tǒng)。根據(jù)后端系統(tǒng)的內(nèi)外網(wǎng)情況,系統(tǒng)置于外網(wǎng)云服務。
系統(tǒng)功能包括寫入條碼信息和查詢條碼信息2個接口。根據(jù)需要查詢當前和歷史記錄情況,系統(tǒng)設計有當前記錄表和明細表。當條碼寫入到當前記錄表時,若無此條碼記錄則插入相關字段信息,有則更新處理。在寫入當前表的同時需將寫入信息插入到明細表。系統(tǒng)功能結(jié)構(gòu)圖如圖3所示。
圖3 系統(tǒng)功能結(jié)構(gòu)圖
WebAPI是用在.NET Framework上構(gòu)建RESTful應用程序的理想平臺,為構(gòu)建HTTP服務提供強大的數(shù)據(jù)服務[1]。WebAPI服務采用JSON方式進行數(shù)據(jù)傳遞,與WCF和Web Service相比較是一種輕量級的框架。由于WebAPI RESTful采用統(tǒng)一的接口,所以其成員體現(xiàn)為針對同一資源的操作。對于Web來說,針對資源的操作通過HTTP方式來體現(xiàn)[2]。在PC端、網(wǎng)頁端、移動端都可通過HTTP的方式調(diào)用WebAPI服務接口,從而提高系統(tǒng)的擴展性。
系統(tǒng)的表設計主要包含條碼物流走向記錄當前表和明細表,其中當前表是記錄每個條碼當前的物流走向情況;明細表是條碼物流走向的全流程記錄情況。當前表可按照半年或一年的時間進行刪除,而明細表可按照時間進行分區(qū)處理,以便后續(xù)數(shù)據(jù)量較大時提高查詢效率。當前表和明細表的表結(jié)構(gòu)相同,如表1所示。
表1 當前表和明細表的表結(jié)構(gòu)
ASP.NET WebAPI 為OData(open data protocol)提供直接支持,OData通過HTTP協(xié)議提供對數(shù)據(jù)源的CRUD訪問[3]。由于系統(tǒng)數(shù)據(jù)量較大,直接通過OData進行數(shù)據(jù)庫操作會造成查詢和更新數(shù)據(jù)時間較長,因此WebAPI服務接口與數(shù)據(jù)庫通過存儲過程的方式進行交互。通過ADO.NET封裝Sql類和OleDB類,使用命令對象來調(diào)用存儲過程。
WebAPI項目包含Models、Views、Controllers等文件夾。Models主要創(chuàng)建實體類,用于保持Service和Client之間通信的對象,這些對象以JSON格式進行數(shù)據(jù)傳輸。Views一般不起作用,因為接口服務不需要提供視圖界面文件。Controllers中的Controller對Webservice來說是一個Resource,用于提供服務,在Controller下創(chuàng)建的類繼承于ApiController類,在其中實現(xiàn)處理各種Get、Post、Put、Delete類型HTTP請求的方法。
在Controller下添加Writebarcodetrendinfo方法,返回一個由字符串類型Messgae和布爾類型Success兩個字段構(gòu)成的對象,參數(shù)為寫入條碼信息的相關字段,通過封裝的ADO.NET類執(zhí)行存儲過程調(diào)用。在方法調(diào)用過程中,若數(shù)據(jù)庫未有異常信息拋出或者方法執(zhí)行無異常時,返回值設置Message為空且Success為True,此時條碼信息寫入成功,否則寫入失敗。
在Models構(gòu)建一個查詢返回的類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方法,參數(shù)為條碼和查詢類型,調(diào)用存儲過程返回結(jié)果集為ResultDataObj類集合。
WebAPI服務接口部署在IIS,外部系統(tǒng)通過HTTP協(xié)議的處理流程調(diào)用服務接口。客戶端發(fā)送HTTP Request(請求)后,服務器接收到請求包后開始處理,返回HTTP Response(響應)包。
以下是以C#為例的服務接口調(diào)用處理流程,首先聲明一個HttpWebRequest類的對象request對接口服務地址進行請求,請求方式為POST,參數(shù)形式為application/json。相關代碼如下:
HttpWebRequest request = WebRequest.Create(formUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
然后通過聲明一個HttpWebResponse類的對象response來接收請求的響應數(shù)據(jù),相關代碼如下:
HttpWebResponse response;
Stream responseStream;
StreamReader reader;
response = request.GetResponse() as HttpWebResponse;
最后根據(jù)response返回的結(jié)果,將JOSN格式的數(shù)據(jù)轉(zhuǎn)化為構(gòu)建的結(jié)果類對象,相關代碼如下:
ApiRepDtp res = JsonConvert.DeserializeObject< ApiRepDtp>(retjson);
通過Fiddler抓包工具,查看寫入條碼信息和查詢條碼信息兩個接口的調(diào)用情況,分別如圖4和圖5所示。
圖4 寫入條碼信息接口抓包圖
圖5 查詢條碼信息接口抓包圖
外部系統(tǒng)通過WebAPI接口對條碼的操作信息進行記錄。在統(tǒng)一標準接口下,提高了數(shù)據(jù)交互的性能,降低了各系統(tǒng)間的耦合度。JSON格式的數(shù)據(jù)傳輸處理,能夠簡易、快速地在不同平臺交互數(shù)據(jù),提高系統(tǒng)的擴展性。通過全流程條碼系統(tǒng)可將各系統(tǒng)對條碼的操作信息整合,為各系統(tǒng)提供查詢接口,實現(xiàn)條碼物流全流程共享。
[1] MricoSoft. MSDN Library for ASP.NET [DB/OL]. 2013.
[2] 蔣金楠.ASP.NET Web API 2框架揭秘[M].北京:電子工業(yè)出版,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