基于.Net Core MVC架构的WMS智能仓储管理系统

2019-08-16 02:40
物流技术与应用 2019年7期
关键词:视图页面库存

关键字:仓储管理系统、软件架构、前端开发

仓储管理系统(Warehouse Management System,WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息、资源、行为、存货和分销等进行更完美的管理。

仓储管理系统由软件、硬件、流程、管理经验等共同组成。计算机控制下的仓库管理系统,目的是独立实现仓储管理的各种功能:收货、存货管理、定单处理、分拣和配送控制等。WMS将关注的焦点集中于对仓储执行的优化和有效管理,同时延伸到运输配送计划、与上下游供应商客户的信息交互,从而有效提高仓储企业、配送中心和生产企业的仓库的执行效率和生产率,降低成本,提高企业客户满意度,从而提升企业的核心竞争力。

一、仓储管理系统

1. 系统特点

●库存精确、高效流转;

图1: WMS功能模块

●针对现有业务开展及未来需求变更,具备较强的通用性和可扩展性;

●库存合理,能够为生产和销售提供物资实体及可靠有效的智能辅助决策分析数据;

●计算机硬件配置低廉,软件易学易用,维护简单快捷,有降本增效的效果;

●将仓储规划、物流设备、计算机系统、软件算法等相互结合,以优化仓库的入库管理、在库管理、出库管理等分配及执行策略,并最终提高仓库的货位利用率及货物容积率;

●针对历史数据进行数据分析、数据挖掘,以优化和完善仓储管理系统的业务组织和流程驱动。

2. 总体概述

仓储管理系统是通过出入库业务、库存调拨和虚仓管理等功能,对批次管理、物料对应、库存盘点、质检管理、生产和销售管理等功能综合运用的管理系统,有效控制并跟踪仓库业务的物流和成本管理全过程,完成和提升企业的信息化建设。WMS的功能模块,如图1。

本文主要介绍WMS的前端系统,结合仓储管理的业务流程,通过对前端人机交互系统的软件架构、技术选型、功能实现等进行归纳、总结。该系统可以独立执行库存操作,也可与外围信息系统接口交互集成,为企业提供更为完整的工作流和数据流。

二、技术架构选型

1. .Net Core框架

.Net Core是适用于Windows、Linux和Macos操作系统的免费、开源托管的计算机软件框架,是微软开发的第一个官方版本,具有跨平台能力的应用程序开发框架。.Net Core包含.Net Framework的类库,采用包化(Packages)的管理方式。

.Net Core项目的目标如下:

●支持或转移到更多的操作系统平台与芯片架构,将项目跨出Windows平台;

●具有引人注目的性能与高可靠度;

●开发人员能快速与直接地获取.Net Core开发环境。

2. B/S系统

B/S架构即浏览器和服务器架构模式,是随着Internet技术的兴起,对C/S架构的一种改进。在这种架构下,用户工作界面是通过前端(Browser)实现,主要事务逻辑在服务器端(Server)实现,形成完整的三层结构体系。这种模式统一了客户端,将系统功能实现的核心部分集中到Web服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个IE浏览器,数据库服务器安装Oracle等关系数据库,浏览器通过Web Server同数据库进行数据交互。这样就大大简化了客户端电脑的配置及载荷,终端用户无需考虑发布、部署、升级等情况,减轻了系统维护与升级的成本和工作量。

3. MVC架构

MVC全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范,代码组织采用业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

图2:MVC架构

图3:WMS主页面

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。MVC架构,如图2。

MVC分层有助于管理复杂的应用程序,可以在不依赖业务逻辑的情况下专注于视图设计,也可以在不考虑业务逻辑的情况下进行UI设计。MVC分层同时也简化了分组开发,不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

4. 前端框架

Bootstrap是一个基于HTML、CSS、JAVASCRIPT,用于快速开发Web应用程序和网站的前端框架。具体优势如下:

●容易上手:只要具备HTML和CSS的基础知识。

●响应式设计:Bootstrap的响应式CSS能够自适应于台式机、平板电脑和手机,移动设备优先。

●其它:为创建接口提供了简洁统一的解决方案;包含了功能强大的内置组件;提供了基于Web的定制;开源。

三、功能模块

结合仓储管理的领域特征、用户需求及业务流程等,可将WMS划分为以下若干功能模块,每个功能模块为一个功能组,每个功能组包括若干个功能项,每个功能项对应一个TAB页面。系统主页面,如图3。

图4:角色功能授权页面

图5:任务维护详情页面

1. 系统管理

系统管理模块主要包括用户维护、角色维护、参数维护、菜单管理等功能项。

菜单管理,用于配置Web主界面左侧的功能树,并且可以定义每个功能项所对应的页面URL地址,另外通过数据定义的方式可以确定各个页面所能提供的完整的增删查改、确认、完成、取消等操作按钮。

参数维护,用于配置WMS系统的所有配置参数,包括且不限于出入库站台配置、穿梭车充电策略配置、数据展示分页大小配置、专业术语配置、垃圾数据清除配置等。

角色维护,可用于创建角色,管理和控制角色所拥有的功能页面,配置角色在相应功能页面下所具备的操作权限,最终将角色授权至不同用户。

用户维护,目的是为了确保不同的用户可以操作不同的功能页面,同一个功能页面下不同用户具备不同的按钮权限。

以上方式不仅能最大化满足用户、角色、权限的细粒度管理,还能够全面满足军工企业涉密信息系统的三员配置及职责分工。角色功能授权页面,如图4。

2. 基础管理

基础管理模块主要包括物料维护、配盘维护、位置维护等各类仓储基础数据的查询及维护等功能。

物料维护用于管理物料分类、物料名称、规格型号、计量单位、库存上下限、存储有效天数等属性及内容。按照物料的种类及数量等,可以对物料划分为大类和小类,便于数据筛选。通过对库存上下限、存储有效天数等属性的管理,可以全面满足仓储物流系统中物资智能化管理,有效控制库存的合理性、为库存预警模块提供柔性化控制。

结合仓储项目的物流规划和总体设计,可以通过位置维护功能将仓库划为为若干个库区,每个库区又划分为若干个片区、货道及储位。还提供了货道及储位的冻结、禁入、禁出等日常维护操作,便于库管员能够灵活地管理仓库,也能够满足各种场景下的运营需要。

3. 物流管理

物流管理模块主要提供入库管理、出库管理、容器维护、任务维护等功能,以满足物料组盘、人工/自动出入库、批次跟踪、质量控制等业务驱动及流程运转的需要。

物流管理模块下,所有的操作都是主从表操作,为了提高用户体验,在UI设计方面,Index首页展示业务主表的数据。因为业务流水数据量较大,为了加快查询速度,按照参数配置进行分页显示,并提供翻页按钮。每行记录的前2个字段设置了跳转链接,鼠标点击时则跳转至详情页。详情页分为上下两个区间,上半区以Layout布局展示主表内容,下半区则以Detail布局展示明细内容。对于明细数据的新增、编辑等维护操作,则在单击明细数据的链接字段时以弹窗的方式提供具体的输入及维护操作。该方式可以在主页面和详情页面之间轻松自由地切换跳转。

对于页面顶部的操作区,使用Bootstrap自带的图标按钮,以提供查询、删除、保存、确认等操作,当光标落在图标上方时,以tooltip的形式展示按钮的中文描述。该UI设计方式充分考虑用户体验,具备操作简洁、风格统一、易学易用、无二义性等特征。

以任务维护为例,主要用于查询和维护所有的物流任务,当物流设备在搬运过程中出现异常时,提供指令下达、任务取消、任务结束等人工操作,以保证物流系统有条不紊的运行。任务维护详情页面,如图5。

4. 报表管理

主要包括出入库统计、在线库存统计、库存预警统计、收发存统计、货位图表统计等分析报表,对所有的统计结果均提供Excel导出功能,便于用户对数据进行二次加工。货位图表统计,如图6。

收发存统计公式为:期初库存+累计入库-累计出库+盘盈-盘亏=期末库存=在线库存,本期的期末库存自动结转为下期的期初库存。

库存预警统计,可以结合物料主文件表的库存上下限、存储有效天数等属性和参数,计算出当前立体库内超越库存上限、低于库存下限、存储时间超期的所有物料明细及汇总数据。便于库管员对立体库进行合理有效的管控,如补充库存量、降低库存量、提高近效期管理等。将库存预警统计数据上传至SAP、MES等上游系统,可以提高企业的生产管理及销售管理,确保生产和销售的有效衔接,同时也为企业管理层在辅助智能决策分析方面提供最为真实的支撑数据。

图6:立库货位图表统计

图7:功能视图页代码

四、软件设计及实现

1. 业务控制器抽象类规范

在MVC开发中,所有业务逻辑层的控制器都需要继承系统抽象类Controller。对WMS的UI部分的业务处理进行归纳、总结和抽象,定义出抽象类BaseController,该BaseController继承系统抽象类Controller,而具体的业务控制器则继承BaseController,并实现BaseController中的方法。BaseController中提供抽象方法和虚方法,以确保在业务控制器中必须去实现抽象方法或者选择性实现虚方法。

通过上述方式可以有效规范各个业务逻辑控制器的开发,统一方法的命名,明确方法体的具体实现,规范视图层到控制器的HttpPost请求调用,确保业务逻辑控制器将特定的JsonResult、ViewResult返回至视图层。

2. 控制器与视图的规范

结合功能模块的设计说明,每个功能项对应一个控制器,每个控制器对应1至2个视图。控制器命名规范为“前缀 + Controller”,如物料管理则命名为“MaterialController.cs”。对于视图层,主页面命名为“Index.cshtml”,跳转的详情页面则命名为“IndexDetail.cshtml”。对于单表操作的页面,仅提供主页面,不提供跳转页面。提供编辑操作的模态框弹窗,相关代码部署在其所属的视图页面文件中。

按照MVC架构的要求,所有的控制器文件部署在Web项目的Controllers文件夹中,视图文件则部署在Web项目的Views文件夹下,具体包含在以控制器前缀命名的子文件夹中。

控制器与视图层之间是松耦合的,可以达到业务逻辑与UI页面的分离。

3. 权限控制及入侵拦截

针对所有页面的查询及维护操作统一规范数字,即2的N次方,并且定义在静态实体类中,以列举出增删查改、确认、取消、完成等操作所对应数字,具体如下:

public static class OrderCode

{

public static readonly int Query = 2,Add = 4,Edit = 8,Delete =16,Export = 32,Affirm = 64,Cancel =128,Finish = 256;

}

在角色功能权限表中,将角色对应的功能页面的操作权限定义在INT型字段OperateCount中,如为A角色针对任务维护页面授予查询、取消和完成3个操作权限,则确认授权时将对应记录的OperateCount字段设置为386 = 2(Query,查询) | 128(Cancel,取消) | 256(Finish,完成),即C#的按位或。

而在页面初始化时,得到用户角色对应的功能页面的操作权限变量(即角色功能权限表的INT型字段OperateCount)。使用该变量与实体类OrderCode中各个操作属性变量按位进行与运算,如果结果大于0,则说明有权限,否则说明无权限。如B角色针对库存统计页面的OperateCount值为34,34 & 2(Query,查询) > 0,34 & 32(Export,导出) > 0,34 &OrderCode中其它值 = 0。因此B角色针对库存统计页面具有查询和导出权限。

以上方式可以确保不同的用户登录系统后,针对同样的功能页面具有不同的操作权限。逻辑判断在SysRole控制器中完成,提供公共JS方法InitOption向控制器SysRole发送Post请求以得到相应的权限结果,并根据权限结果控制视图页面按钮的隐藏与否。注意事项:在各个视图页面中,操作按钮命名同样遵守OrderCode实体类的命名规范;另外,每个页面加载时调用公共JS方法InitOption。

对于非法入侵,可以使用MVC的拦截器,自定义类GlobalFilter实现接口IActionFilter,并实现拦截器的接口方法OnActionExecuting(Act ionExecutingContext context)。在OnActionExecuting方法体中根据当前登录用户名、控制器名及行为方法名进行操作权限判断,如果权限不满足则跳转至错误页面。该方式即可有效抵御非法入侵。

4. 依赖注入

MVC架构根据路由信息获取控制器名称,由控制器工厂生成控制器的实例。Web项目下Startup类的ConfigureServices方法中,可注册业务控制器的依赖项。如services.AddScoped();注册用户操作类。在业务控制器的构造函数中完成依赖项的参数注入。

通过依赖注入完成控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象引用传递给它,最终充分降低代码之间的耦合度。

5. 公共JS封装

自定义js文件DataOperatorScript.js,提供如初始化、查询、新增、保存、删除等js方法。在方法体中根据输入参数得到Controller名和button id等参数,以HttpPost请求的方式调用相应业务控制器的方法。

在公共视图页_Layout中,引入DataOperatorScript.js文件,即执行。在具体的功能视图页中执行相应的js语句,以完成参数初始化、按钮事件与DataOperatorScript中公共js方法的绑定等。

通过以上方式,即可最终实现增删查改等具体业务。功能视图页的代码,如图7。

在常规主流的视图页中,UI开发人员仅需要调整视图页面布局,不需要深入了解和掌握js,最终保证UI开发人员把精力集中在外观设计上。

五、总结

通过上述的技术选型、软件架构、模块设计,最终形成的智能仓储管理系统,可以全面满足各个行业领域、各种物流规划设计的仓储管理信息系统前端建设。在硬件采购方面,可以降低终端计算机的配置及选型;在软件设计方面,控制器与视图层充分解耦,业务逻辑与外观展示的分离,有利于软件团队的人员分工;在安全性方面,通过拦截器可以有效抵御非法入侵;在项目实施方面,可以提升开发速度、缩短项目交付工期,最终降低项目的实施和维护成本。

该产品已成功运用到若干个不同行业的仓储物流集成项目中,并且得到了业主方及项目干系人的一致好评,对于仓储管理系统的前端设计开发,具有一定的实用和参考价值。

猜你喜欢
视图页面库存
刷新生活的页面
乌克兰谷物和油料作物库存远低于2020年同期
乌克兰谷物和油料作物库存远低于2020年同期
答案
让Word同时拥有横向页和纵向页
房地产去库存中的金融支持探究
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
Django 框架中通用类视图的用法