庫存管理系統(ERP)-詳細設計文檔
1. 引言
1.1 编制目的
本文档在体系结构概要设计的基础上,对ERP系统进行详细设计说明,以便用户和项目开发人员了解产品的详细设计与实现,为开发人员提供开发参考书。本报告的预期读者为开发人员、总经理、项目经理、财务人员、销售人员、人力资源人员、库存管理人员等。
1.2 项目背景
(1)项目名称:ERP
(2)开发者:洪子贤、曾光、朱磊、孙思涵
(3)用户:某著名开关品牌的南京地区总代理
2. 总体设计
2.1 需求概述:
功能需求:
(1)账户管理:财务人员可以对客户的账户进行管理。
(2)制定收款、付款、工资单:财务人员可以制定收款、付款、工资单并由总经理审核。
(3)查看销售明细表、经营历程表、经营情况表:财务人员和总经理可以查看销售明细表、经营历程表和经营情况表。
(4)员工管理:人力资源人员可以对员工进行新建、查看等操作。
(5)员工打卡:员工可以在登录系统后进行打卡,人力资源人员可以查看打卡信息。
(6)薪酬规则制定:人力资源人员可以制定薪酬规则。
(7)促销策略制定:总经理可以制定促销策略。
非功能需求:
(1)数据需求:用户输入的信息需要及时更新到数据库并与数据库保持类型的一致
(2)性能需求:用户名、密码和表中数据有相应的精度要求。对于响应时间、更新处理时间和数据的转换及传送时间有相应的时间限制。
(3)运行需求:用户界面在用户操作后发出相应的响应。软件接口和硬件接口提供限制。
2.2 软件结构:
ERP系统的软件结构
ERP系统的物理体系结构
3. 模块描述
3.1 模块基本信息
名称 | 编号 | 所在文件 | 所在包 |
---|---|---|---|
账户管理模块 | 1.1 | ../controller/CustomerController | web.controller |
制定收款单模块 | 1.2 | ../controller/BankController | web.controller |
制定付款单模块 | 1.3 | ../controller/PaymentController | web.controller |
制定工资单模块 | 1.4 | ../controller/SalaryController | web.controller |
查看销售明细表 | 1.5 | ../controller/SearchSheetController | web.controller |
查看经营历程表 | 1.6 | ../controller/SearchSheetController | web.controller |
查看经营情况表 | 1.7 | ../controller/SearchSheetController | web.controller |
员工管理 | 2.1 | ../controller/HumanresourceController | web.controller |
员工打卡 | 2.2 | ../controller/HumanresourceController | web.controller |
薪酬规则制定 | 2.3 | ../controller/HumanresourceController | web.controller |
促销策略模块 | 3.1 | ../controller/HumanresourceController | web.controller |
3.2 算法描述
促销策略算法如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37public void makeDiscount(DiscountPO discountPO) {
BigDecimal discount = discountPO.getDiscount();
BigDecimal voucherAmount = discountPO.getVoucherAmount();
Integer level = discountPO.getCustomerLevel();
List<DiscountPO> listLess = discountDao.getLessL(level);
List<DiscountPO> listLarger = discountDao.getLargerL(level);
if(listLess != null) {
for (DiscountPO i : listLess) {
if (i.getDiscount().compareTo(discount) == -1) {
voucherAmount = i.getVoucherAmount();
}
if (i.getVoucherAmount().compareTo(voucherAmount) == 1) {
voucherAmount = i.getVoucherAmount();
}
}
}
if(listLarger != null) {
for (DiscountPO i : listLarger) {
if (i.getDiscount().compareTo(discount) == 1) {
discount = i.getDiscount();
}
if (i.getVoucherAmount().compareTo(voucherAmount) == -1) {
voucherAmount = i.getVoucherAmount();
}
}
}
discountPO.setDiscount(discount);
discountPO.setVoucherAmount(voucherAmount);
if(discountDao.getByLevel(level) != null) {
discountDao.updateByLevel(discountPO);
} else {
discountDao.createDiscount(discountPO);
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public void makeDiscount(DiscountPO discountPO) {
List<Integer> list = discountDao.getBagId();
Integer tempId = 0;
for (Integer i : list) {
List<String> list1 = discountDao.getBagInfo(i);
if (list1 != null && bagContent != null) {
if (list1.containsAll(bagContent) && bagContent.containsAll(list1)) {
tempId = i;
break;
}
}
}
if (tempId != 0) {
discountPO.setId(tempId);
discountDao.updateById(discountPO);
} else {
discountDao.createDiscount(discountPO);
Integer id = discountDao.getLatest();
for (String i : bagContent) {
discountDao.addBagContent(id, i);
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38public void makeDiscount(DiscountPO discountPO) {
BigDecimal discount = discountPO.getDiscount();
BigDecimal voucher = discountPO.getVoucherAmount();
BigDecimal amount = discountPO.getTotalAmount();
List<DiscountPO> listLessA = discountDao.getLessA(amount);
List<DiscountPO> listLargerA = discountDao.getLargerA(amount);
if (listLessA != null) {
for (DiscountPO i : listLessA) {
if (i.getDiscount().compareTo(discount) == -1) {
discount = i.getDiscount();
}
if (i.getVoucherAmount() != null && i.getVoucherAmount().compareTo(voucher) == 1) {
voucher = i.getVoucherAmount();
}
}
}
if (listLargerA != null) {
for (DiscountPO i : listLargerA) {
if (i.getDiscount().compareTo(discount) == 1) {
discount = i.getDiscount();
}
if (voucher != null && i.getVoucherAmount().compareTo(voucher) == -1) {
voucher = i.getVoucherAmount();
}
}
}
discountPO.setDiscount(discount);
discountPO.setVoucherAmount(voucher);
if (discountDao.getByAmount(amount) != null) {
discountDao.updateByAmount(discountPO);
} else {
discountDao.createDiscount(discountPO);
}
}
3.3 接口
接口 | 服务调用方 | 服务提供方 |
---|---|---|
network.commodity,network.auth, |
network.product,
network.purchase,
network.sale,
network.warehouse | 前端views | 后端Controller |
| service.CatogoryService
service.CustomerService
service.ProductService
service.PurchaseyService
service.SaleService
service.SaleReturnService
service.UserService
service.WarehouseService | 后端controller | 后端serviceImpl |
| dao.CategoryDao
dao.CustomerDao
dao.DiscountDao
dao.HumanResourceDao
dao.ProductDao
dao.PurchaseSheetDao
dao.PurchaseReturnsSheetDao
dao.SaleSheetDao
dao.SaleReturnsSheetDao
dao.UserDao
dao.WarehouseDao
dao.WarehouseInputSheetDao
dao.WarehouseOutputSheetDao | 后端serviceImpl | mybatis |
3.4 性能
时间特性:
(1)响应时间:用户任意操作后5秒内系统给予反馈信息。
(2)更新处理时间:由系统运行状态来决定。
(3)数据的转换和传送时间:能够在20秒内完成。
灵活性:
当需求发生某些变化时,该软件的基本操作、数据结构、运行环境等等基本不会发生变化,只是对系统的数据库的文件和记录进行处理,就可以满足需求。