在这篇文章中,我们将看看一个零售管理系统需要提供的关键功能,它的高层、低层设计,数据库设计,以及一些已经存在的零售管理系统。
目录
零售管理系统
零售管理系统(RMS)是一个平台,汇集了对零售业务所有流程的控制:从库存流到员工管理和会计软件。将不同的模块结合在一个系统中,有利于改善部门之间的协作,最重要的是,可以更好地控制内部流程,提高整体业务效率。
模块的具体数量和内容因企业而异,但一般来说,RMS包括或允许与以下模块整合。
- 销售点(POS)功能
- 客户关系管理(CRM)
- 电子商务
- 库存管理
- 员工管理
- 会计
- 分析和报告
系统要求
一个适当的零售管理系统有助于提高业务收入和客户满意度,并通过引入一系列关键功能和在一个地方整合数据和控制流程来提高管理经验。零售管理系统的主要要求是基于商业期望,由此产生的功能和非功能要求。
功能性要求
零售管理系统具有模块化的特点,因此,将需求落实到不同的模块是符合逻辑的(有些模块可以作为独立的解决方案整合到RMS中)。
-
销售点- 管理零售商店的销售情况
- 扫描商品条码并从系统中加载商品信息
- 允许手动输入和搜索销售物品
- 将销售、退货和换货记录到数据库中
- 接受现金、信用卡、iPay等支付方式
- 打印发票
-
客户关系管理- 整合客户的信息
- 保存和存储客户信息(姓名、出生日期、联系信息、客户ID、密码)。
- 应用客户的折扣水平
- 自动化营销和客户满意度分析
-
电子商务--管理一个网上商店
- 将商品添加到目录中(手动或从文件中)。
- 更新目录中的商品
- 显示销售商品信息
- 记录在线订单
- 允许在线支付
- 连接客户与销售经理进行咨询
-
库存管理--在整个供应链中跟踪货物
- 从商店中删除或添加物品
- 移除或添加物品到仓库
- 在商店之间运送物品
- 将物品运送给客户
- 订购用品
-
员工管理--自动化人力资源任务
- 存储员工的信息
- 跟踪员工的出勤情况
- 管理缺勤和休假申请
- 收集生产力数据
- 管理付款
- 管理员工账户权限
-
会计- 将数据转移到会计部门/软件,并导入已批准的报告
- 与会计软件整合
-
分析和报告--整合所有活动模块的数据,用于报告和仪表板
- 从模块中收集数据
- 运行内容丰富的仪表盘
- 为定期报告提供模板
- 允许创建自定义报告
下面的用例图总结了零售管理系统的应用概念领域以及客户、销售部门、仓库、会计部门和零售业务经理之间的互动。

非功能需求
非功能需求定义了对整个系统的要求,在接近架构阶段之前应该注意考虑,因为在后期阶段引入变化会很困难。
可用性
零售管理系统需要有一个简单和用户友好的界面,并允许为个人用户定制界面和仪表盘。系统必须完全支持商业运作的语言,并允许导入和导出.csv和电子表格文件格式的数据。
互操作性
该系统必须允许整合和部分替换子模块。
数据完整性
所有关于销售、订单、客户信息和其他的数据在整个生命周期内必须是准确和一致的。
环境性
系统的维护必须要求最低限度的资源使用,以符合可持续发展的原则。
安全性
系统限制只有授权用户才能访问客户数据、分析和报告。必须限制个别员工添加或更正数据的权利。财务数据必须通过双因素认证来保证安全。与最近业务年度有关的数据必须在一个备用服务器上进行复制。
可维护性
系统维护必须在非工作时间内不关闭或以自动模式运行。
容量
系统必须能够每天处理100个雇员账户和10000个订单而不影响其性能。
可用性
在零售业工作时间内,系统的可用性必须不低于99.999%,电子商务模块的可用性不低于95%。
可扩展性
系统必须支持实施新的功能和模块而不中断现有的流程。系统必须支持横向扩展,以推出具有多个POS的新零售店。
软件要求
软件需求规格(SRS)是对将要开发的软件系统的描述,它是在分析的最新阶段,在功能和非功能需求之后提出的。这个文件应该给出系统的详细描述,并作为客户(系统是为谁开发的)和开发团队之间建立协议的基础。在进入设计阶段之前,花时间写软件需求是很重要的,可以事先澄清未来的误解,使产品能最好地满足客户的需求。
零售管理系统的目标是为零售系统工作人员和业主提供一个应用程序,以控制零售连锁店和网上商店的业务流程。RMS系统整合了从编目和跟踪库存的业务流程,管理商店和网上商店的销售,以及存储客户和人员的信息。该系统被细分为RMS POS、RMS CRM、RMS E-commerce、RMS IM、RMS EM、RMS AC和RMS AR等可替换模块。
该系统需要一个稳定的互联网连接来处理网上商店的请求,以及不同部门和数据库服务器之间的通信。同时支持的员工数量不少于100人,对于中等规模的零售连锁店,需要支持的POS终端数量不少于50台。性能--从客户端调用的90%的数据库事务应在1秒以内处理完毕。
RMS的行为者在打开应用程序时应看到登录页面,员工的登录账户和密码将由企业主/管理员创建,客户可以在网上商店注册。
应用程序的主视图应显示一个可定制的仪表板,对模块的访问应根据员工所在的部门进行限制。帮助按钮应能立即访问产品文档。
该系统的开发是基于以下技术的:
- 为了运行该系统,需要配备Windows Server/Linux操作系统的服务器。
- 对于后端部分,需要支持多线程的可扩展编程语言,如Java、Node.js或PHP。
- 用户界面应该用现代的前端框架开发,如React/AngularVue/jQuery。
- 数据应该存储在关系型DBMS PostgreSQL/MySQL/Microsoft SQL Server中。
高级别的设计
在分析完需求后,高层设计阶段就开始了,这时系统架构被描述出来,而没有深入到细节。
对于小型零售商
对于小型零售商来说,一个简单的架构可以满足需求而不增加预算的负担。
方案1--企业内部系统架构

在这个例子中,实施包括一个网络服务器,用于管理来自外部网络对网络商店的请求和来自内部/外部网络对RMS应用程序的人员请求,运行应用程序的后端服务器,以及存储和备份数据的数据库集群。
另一个更可取的选择是切断所有与硬件有关的工作(购买、设置、管理服务器、运行更新),并基于云服务来组织系统。例如,亚马逊网络服务(AWS)提供可靠和可扩展的上下游基础设施。
方案2--基于云的系统架构

这个例子的设置包括通过Amazone Route 53的DNS服务,CloudFront(内容交付网络),这是一个全球的边缘位置网络,将请求路由到最近的边缘,以及静态内容的持久存储资源(Amazone bucket S3)。动态请求通过一个负载平衡器被路由到亚马逊网络服务器(亚马逊EC2),另一个负载平衡器管理网络服务器和应用服务器(亚马逊EC2)之间的通信。最后,亚马逊RDS存储作为一个具有同步复制功能的数据库工作。这个架构的每一个元素在失效时都得到支持(例如,如果一个网络服务器失效,另一个就会接替它的工作),而且服务器是可自动扩展的。
对于大中型连锁零售企业
大型和中型零售商的管理系统应该包括随着客户/部门数量的增加而增长的潜力,以及从经济的角度来看是有效的。基本的企业内部架构无法满足客户和门店数量增长的需求,因为垂直升级在资金/效率增长方面有上限。基于云的架构扩展性好,但对于大量的客户要求来说,可能会变得过于昂贵。因此,根据零售商的规模和增长潜力,必须使用另一种设计方法。
企业内部系统架构

通过上面的例子架构,水平可扩展性是通过添加诸如请求负载均衡器、多集群服务器和数据服务器的分割位置等关键元素来提供的。
- 负载平衡器将请求路由到网络服务器(可以增加多个网络服务器,支持故障服务器),网络服务器连接到应用服务器(后端,也可以增加多个服务器,支持故障服务器)。
- 应用服务器要求并在主数据库中存储数据,另一个数据库存储同步的数据副本。
- 应用服务器和数据存储之间的附加层是缓存数据,这有助于加快数据加载速度。
- 另一个关键组件是用于认证的独立服务器,它以最佳速度处理认证请求。
这样的架构允许向上和向下扩展,并且不依赖第三方云服务,如果云服务是在一个法律不同的国家,这一点尤其重要。
低层设计
在零售管理系统的应用中,不同的类代表了真实的业务流程和类别。主要的行动者和行动由以下的类来代表。
/**
* Person abstract class represents all participants of the retail business from customer to staff side.
*/
abstract class Person {
int ID;
String firstName;
String lastName;
String birthday;
String phoneNumber;
String email;
String registrationDate;
String login;
String passwordHash;
public void login(String ID, String password) {};
public void logout() {};
}
/**
* Customer can order and buy items from the store on place or online
*/
class Customer extends Person {
List<Item> cart;
public void order(List<Item> items) {};
public void buy(List<Item> items) {};
}
/**
* Retail system personnel is represented by Staff abstract class
*/
abstract class Staff extends Person {
String position;
Double kpi;
}
/**
* Sales representative can serve customers in the store and manage store inventory.
*/
class Salesman extends Staff {
SaleService saleService;
public boolean addItem(Item item) {};
public Item updateItem(Item item) {};
public Item removeItem(Item item) {};
public Customer registerNewCustomer(){};
}
/**
* SaleService class represents an interaction between sales staff and customers.
*/
class SaleService{
public BigDecimal calculateTotal(Customer customer) {};
public BigDecimal calculateTotal(List<Items> items) {};
public ReturnDetail returnItem(Item item) {};
public ExchangeDetail exchangeItem(Item item) {};
public SaleDetail saleItem(Item item) {};
}
/**
* Members of the sales department can be assigned to update the online catalog
* and connect with customers
*/
class OnlineSalesman extends Salesman {
public boolean updateCatalogue() {};
public void consult (Customer customer) {};
}
/**
* Logistic services are controlled by Warehouse staff
*/
class WarehouseMan extends Staff {
ShipService shipServise;
}
/**
* ShipService class represents the delivery of items to clients and shipment between storages.
*/
class ShipService{
public ShipDetail shipItem(Item item) {};
}
/**
* Accounting department gets additional privileges to view Data from other departments
*/
class Accountant extends Staff {
public void viewData() {};
}
/**
* Manager/owner of the retail system has a unique set of functions to control personnel
*/
class Manager extends Staff {
public void hire (Staff staff, Accountant accountant) {};
public void giveRaise (Staff staff, Accountant accountant) {};
}
主要功能建筑包括仓库、商店和作为商店组成部分的销售点:
/**
* Store class represents a single store from the retail chain, identified with a unique ID
*/
class Store {
String storeID;
String address;
String phone;
String firstOpen;
Staff manager;
List<PointOfSale> pos;
List <Staff> staff;
List <Item> itemsInStore;
}
/**
* Each of the points of sales in the store is assigned to the sales operator.
*/
class PointOfSale{
String id;
Salesman salesman;
PointOfSale(Salesman salesman){};
public Item scanBarecode() {};
public Item searchItem() {};
}
/**
* Warehouse class represents a single warehouse at a unique address.
*/
class Warehouse {
String warehouseID;
String address;
List <Staff> staff;
List <Item> itemsInWarehouse;
}
零售系统销售产品,每个产品都被添加到目录中,有关它的信息可以通过网上商店或在POS系统中访问。主要字段包括ID、描述、制造商信息、照片和价格:
/**
* Item of sale, can be entered into the system manually or exported in bulk from spreadsheets.
*/
class Item {
String itemId;
String name;
String description;
String producer;
BufferedImage img;
BigDecimal price;
}
操作细节系统允许创建、更新和检索有关销售或发货的客户与工作人员之间的互动信息:
/**
* Possible outcomes of running a business operation
*/
enum OperationStatus{
COMPLETE,
IN_PROGRESS,
CANCELLED
}
/**
* OperationDetail represents information about a single operation,
* can be printed on the invoice or sent via email.
*/
class OperationDetail{
String date;
String time;
OperationStatus status;
}
/**
* Subclass of OperationDetail specifying sale.
*/
class SaleDetail extends OperationDetail{
Item item;
BigDecimal salePrice;
}
/**
* Subclass of OperationDetail specifying shipment.
*/
class ShipDetail extends OperationDetail{
Item item;
String destination;
String deliveryDate;
String deliveryTime;
}
/**
* Subclass of OperationDetail specifying item return.
*/
class ReturnDetail extends OperationDetail{
Item itemReturned;
String returnReason;
}
/**
* Subclass of OperationDetail specifying item exchange.
*/
class ExchangeDetail extends ReturnDetail{
Item itemExchanged;
}
Java中的继承性允许在不改变现有类和接口的情况下向应用程序添加新的功能,这对应用程序的长生命周期是很有用的。
零售管理系统的数据库设计
零售管理系统使用基于SQL的数据库,如MySQL或Postgre,包括主要业务实体的表和它们之间的链接表:

产品关系存储了零售目录中所有物品的信息,以及产品的当前价格。
客户关系存储了零售商的客户群,一些客户可以在网上商店注册并设置用户名和密码。在网上商店,他们可以自由地将物品添加到虚拟购物车中,这些物品将被储存在数据库中供以后的订单使用。
每个客户可以购买或订购一个或多个产品,这些产品将被登记在订单和订单-产品关系中。关于支付状态的详细信息被存储在支付关系中。如果客户要求交货,它将被注册为发货关系中的一项任务。
员工关系包含关于雇员的数据,他们中的每一个人都可以被放在一个商店中,并被分配一个经理。
商店关系包含关于正在运行的商店和仓库的数据,库存关系
显示每个商店中的产品。
产品和库存关系是最经常被要求的,所以它们将被编入索引,以提高按产品名称、描述或商店搜索的速度。
领先的零售管理系统
谈到零售管理系统,有两种选择,都是有利有弊的:要么投入时间和金钱开发自己的系统,完美地满足企业的所有需求,要么依靠现有的软件解决方案。而对于第二种选择,市场上有数百种产品可供选择:有些比较简单,针对小企业,有些针对更大更大规模的零售连锁店,有些是完全基于云的解决方案,月薪不菲,有些则承诺给予支持,以适应企业需求的产品。
以下是最受评论的零售管理系统的简短描述。
Heartland Retail- 用户友好的云POS和零售管理平台,有全面的工具来促进发展。允许扩大和缩小规模,并具有良好的功能,如移动POS,多店库存查询,实时销售仪表板,自定义字段和报告。
类似的基于云的解决方案有Rain Retail和Lightspeed Retail。
微软的Dynamics 365- 该产品结合了销售管理、营销参与、服务交付、灵活的财务管理以及管理供应链的解决方案,由人工智能提供支持。这是一个相当复杂的产品,提供多种工具,但有一个陡峭的学习曲线,需要快速的以太网连接。基于云的RMS的另一个问题是,如果想转移到另一个RMS,检索数据,因为在某些情况下,供应商不提供这样的选择。
Retail Pro是一个软件平台,具有自适应的用户界面和POS、库存管理、客户管理、业绩和KPI报告等功能。最棒的是,产品允许利用API与第三方解决方案连接。
CIN7是另一个基于云的解决方案,定位为一个库存和订单管理软件。其主要特点是与第三方产品如电子商务市场(亚马逊、eBay等)、装运服务(SOS物流、Shipwire、Shiphero等)或其他工具集成。
总的来说,有大量的零售管理系统产品可供选择,所以根据业务的不同,这可能是第一个要看的选择。
通过OpenGenus的这篇文章,你一定对零售管理系统的系统设计有了深刻的认识。