开学测试

仓储管理系统
(卷面成绩40分,占课程过程考核20分)

1、需求描述:
请设计一个仓储管理系统原型系统,该系统支持多个仓库的设立。统一设立物资台账,物资台账需包含物资编码、物资名称、规格、材质、供应商、品牌、物资分类,用户可以自定义物资的物资分类。需限制不同的物资名称、规格、材质的物资不能设立相同的物资编码。仓库人员可进行入库作业、出库作业业务。入库单、出库单的业务单据编码系统自动生成,不能手工录入,可以采用年月日+流水号的方式。系统可查询按物资编码的库存信息、按物资分类汇总的库存信息、入库单信息、出库单信息。
2、数据库设计:(5分)
按照需求描述要求完成下列表字段的设计:
(1)仓库表(支持多个仓库,每个仓库具有唯一编码);(1分)
(2)物资台账明细表(除了需求描述的要求外,需要有台账编号(唯一标识,四位年两位月两位日+顺序号(四位)例如:202402210022),操作类别(入库或者出库)数量,计量单位,存放地点(仓库号)等基本信息);(3分)
(3)物资类别表:需要满足不同的物资名称、规格、材质的物资不能设立相同的物资编码;(1分)
2、功能需求
2.1、页面要求
(1)WEB管理系统界面要求采用统一风格的模板。(5分,如果没有采用模板扣除5分);
(2)管理员、仓库管理人员统一登录界面登录后,显示各自不同的菜单项。(5分)
(2)管理员功能页:管理员可以实现仓库的新增、删除、修改基本信息管理,可以实现对物资类别的新增、删除、修改基本信息管理;(12分)
(3)仓库管理人员:入库操作,出库操作,统计查询功能。(13分)
2.2功能要求:
(1)新增仓库:增加新的仓库信息;(2分)
(2)删除仓库:删除仓库基本信息时,必须验证没有相关物资存储在该仓库中,提示用户不允许删除。(2分)
(3)修改仓库:仓库编号唯一不允许修改,并且验证没有相关物资存储在该仓库中,否则不允许修改仓库信息。(2分)
(4)新增物资类别:需要验证物资分类编码唯一,不同的物资名称、规格、材质的物资不能设立相同的物资编码两个条件,满足才可添加;(2分)
(5)删除物资类别信息:删除物资类别基本信息时,验证物资台账明细表中是否存在该类物资,如果存在提示用户不允许删除。(2分)
(6)修改物资类别基本信息:物资类别编号唯一不允许修改,并且验证物资台账明细表中是否存在该类物资,如果存在不允许修改该物资类别信息。(2分)
(7)入库操作:每类物资进行入库操作时,需要单独生成一条台账明细记录,保证相同的物资存放到同一仓库中,新物资入库时,则需要仓库人员选择存放仓库。(4分)
(8)出库操作:仓库人员进行出库操作时,选择物资类别,自动显示该类物资的数量余额,如果输入出库数量大于库存余额,提示用户无法进行出库,要求修改出库数量,单独生成一条台账明细记录。(4分)
(9)统计查询:仓库人员可输入物资编码查询该类物资的库存信息,显示物资类别编码、库存余额、计量单位,存放仓库等基本信息,点击该类物资编码,可以查看该类物资的详细入库单信息和出库单信息。(5分)

  1. 数据库设计
    1.1 仓库表 (warehouse)
    sql
    复制
    CREATE TABLE warehouse (
    warehouse_id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    address VARCHAR(200),
    manager VARCHAR(50),
    create_time DATETIME,
    update_time DATETIME
    );
    1.2 物资分类表 (material_class)
    sql
    复制
    CREATE TABLE material_class (
    class_id INT AUTO_INCREMENT PRIMARY KEY,
    class_name VARCHAR(50) UNIQUE NOT NULL
    );
    1.3 物资类别表 (material_category)
    sql
    复制
    CREATE TABLE material_category (
    material_code VARCHAR(50) PRIMARY KEY,
    material_name VARCHAR(100) NOT NULL,
    specification VARCHAR(100),
    material_type VARCHAR(100),
    supplier VARCHAR(100),
    brand VARCHAR(100),
    class_id INT,
    unit VARCHAR(20),
    default_warehouse_id VARCHAR(20),
    FOREIGN KEY (class_id) REFERENCES material_class(class_id),
    FOREIGN KEY (default_warehouse_id) REFERENCES warehouse(warehouse_id),
    UNIQUE (material_name, specification, material_type)
    );
    1.4 单据表 (document)
    sql
    复制
    CREATE TABLE document (
    document_no VARCHAR(20) PRIMARY KEY,
    document_type ENUM('IN', 'OUT') NOT NULL,
    warehouse_id VARCHAR(20) NOT NULL,
    operator VARCHAR(50) NOT NULL,
    operation_time DATETIME NOT NULL,
    FOREIGN KEY (warehouse_id) REFERENCES warehouse(warehouse_id)
    );
    1.5 物资台账明细表 (material_ledger)
    sql
    复制
    CREATE TABLE material_ledger (
    ledger_id VARCHAR(20) PRIMARY KEY,
    document_no VARCHAR(20) NOT NULL,
    material_code VARCHAR(50) NOT NULL,
    operation_type ENUM('IN', 'OUT') NOT NULL,
    quantity DECIMAL(10,2) NOT NULL,
    unit VARCHAR(20) NOT NULL,
    warehouse_id VARCHAR(20) NOT NULL,
    operation_time DATETIME NOT NULL,
    operator VARCHAR(50) NOT NULL,
    FOREIGN KEY (document_no) REFERENCES document(document_no),
    FOREIGN KEY (material_code) REFERENCES material_category(material_code),
    FOREIGN KEY (warehouse_id) REFERENCES warehouse(warehouse_id)
    );
    1.6 物资库存表 (material_stock)
    sql
    复制
    CREATE TABLE material_stock (
    stock_id INT AUTO_INCREMENT PRIMARY KEY,
    material_code VARCHAR(50) NOT NULL,
    warehouse_id VARCHAR(20) NOT NULL,
    quantity DECIMAL(10,2) NOT NULL,
    UNIQUE (material_code, warehouse_id),
    FOREIGN KEY (material_code) REFERENCES material_category(material_code),
    FOREIGN KEY (warehouse_id) REFERENCES warehouse(warehouse_id)
    );
  2. Spring Boot 后端实现
    2.1 实体类
    仓库实体 (Warehouse.java):

java
复制
@Entity
public class Warehouse {
@Id
private String warehouseId;
private String name;
private String address;
private String manager;
private LocalDateTime createTime;
private LocalDateTime updateTime;
// Getters and Setters
}
物资分类实体 (MaterialClass.java):

java
复制
@Entity
public class MaterialClass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long classId;
private String className;
// Getters and Setters
}
物资类别实体 (MaterialCategory.java):

java
复制
@Entity
public class MaterialCategory {
@Id
private String materialCode;
private String materialName;
private String specification;
private String materialType;
private String supplier;
private String brand;
@ManyToOne
private MaterialClass materialClass;
private String unit;
@ManyToOne
private Warehouse defaultWarehouse;
// Getters and Setters
}
3. 功能实现示例
3.1 生成单据编号
java
复制
@Service
public class DocumentNumberGenerator {
@Autowired
private DocumentRepository documentRepository;

public String generate(DocumentType type) {
    String prefix = type == DocumentType.IN ? "IN" : "OUT";
    LocalDate today = LocalDate.now();
    String datePart = today.format(DateTimeFormatter.BASIC_ISO_DATE); // yyyyMMdd
    String maxDocNo = documentRepository.findMaxDocumentNoByPrefixAndDate(prefix, datePart);
    int sequence = maxDocNo == null ? 1 : Integer.parseInt(maxDocNo.substring(10)) + 1;
    return prefix + datePart + String.format("%04d", sequence);
}

}
3.2 入库操作
java
复制
@Service
public class StockInService {
@Transactional
public void stockIn(StockInRequest request) {
// 验证物资是否存在
MaterialCategory material = materialCategoryRepository.findById(request.getMaterialCode())
.orElseThrow(() -> new RuntimeException("Material not found"));

    // 确定存放仓库
    Warehouse warehouse = determineWarehouse(material, request.getWarehouseId());

    // 生成单据编号
    String docNo = documentNumberGenerator.generate(DocumentType.IN);

    // 保存单据
    Document document = new Document(docNo, DocumentType.IN, warehouse, request.getOperator());
    documentRepository.save(document);

    // 生成台账编号
    String ledgerId = generateLedgerId();

    // 保存台账明细
    MaterialLedger ledger = new MaterialLedger(ledgerId, docNo, material, OperationType.IN, 
            request.getQuantity(), material.getUnit(), warehouse, LocalDateTime.now(), request.getOperator());
    materialLedgerRepository.save(ledger);

    // 更新库存
    updateStock(material, warehouse, request.getQuantity(), OperationType.IN);
}

}
4. 前端界面示例 (Thymeleaf)
4.1 仓库列表页面
html
复制

仓库管理

运行 HTML
posted @   申shen  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示