我使用的是当前最火的AI豆包
以下是我输入的AI语句:
用spring boot为框架 java script,前端与后端分开,前端运用html,后端有controller ,services,mapper,pojo,生成一个仓储管理系统原型系统,WEB管理系统界面要求采用统一风格的模板,该系统支持多个仓库的设立,统一设立物资台账,物资台账需包含物资编码、物资名称、规格、材质、供应商、品牌、物资分类,用户可以自定义物资的物资分类需限制不同的物资名称、规格、材质的物资不能设立相同的物资编码。仓库人员可进行入库作业、出库作业业务。入库单、出库单的业务单据编码系统自动生成,不能手工录入,可以采用年月日+流水号的方式。系统可查询按物资编码的库存信息、按物资分类汇总的库存信息、入库单信息、出库单信息,用MySQL生成完成下列表字段的设计:
(1)仓库表(支持多个仓库,每个仓库具有唯一编码);
(2)物资台账明细表(除了需求描述的要求外,需要有台账编号(唯一标识,四位年两位月两位日+顺序号(四位)例如:202402210022),操作类别(入库或者出库)数量,计量单位,存放地点(仓库号)等基本信息);
(3)物资类别表:需要满足不同的物资名称、规格、材质的物资不能设立相同的物资编码;页面要求:管理员、仓库管理人员统一登录界面登录后,显示各自不同的菜单项。
(2)管理员功能页:管理员可以实现仓库的新增、删除、修改基本信息管理,可以实现对物资类别的新增、删除、修改基本信息管理;
(3)仓库管理人员:入库操作,出库操作,统计查询功能。(1)新增仓库:增加新的仓库信息;(2分)
(2)删除仓库:删除仓库基本信息时,必须验证没有相关物资存储在该仓库中,提示用户不允许删除。(2分)
(3)修改仓库:仓库编号唯一不允许修改,并且验证没有相关物资存储在该仓库中,否则不允许修改仓库信息。(2分)
(4)新增物资类别:需要验证物资分类编码唯一,不同的物资名称、规格、材质的物资不能设立相同的物资编码两个条件,满足才可添加;(2分)
(5)删除物资类别信息:删除物资类别基本信息时,验证物资台账明细表中是否存在该类物资,如果存在提示用户不允许删除。(2分)
(6)修改物资类别基本信息:物资类别编号唯一不允许修改,并且验证物资台账明细表中是否存在该类物资,如果存在不允许修改该物资类别信息。(2分)
(7)入库操作:每类物资进行入库操作时,需要单独生成一条台账明细记录,保证相同的物资存放到同一仓库中,新物资入库时,则需要仓库人员选择存放仓库。(4分)
(8)出库操作:仓库人员进行出库操作时,选择物资类别,自动显示该类物资的数量余额,如果输入出库数量大于库存余额,提示用户无法进行出库,要求修改出库数量,单独生成一条台账明细记录。(4分)
(9)统计查询:仓库人员可输入物资编码查询该类物资的库存信息,显示物资类别编码、库存余额、计量单位,存放仓库等基本信息,点击该类物资编码,可以查看该类物资的详细入库单信息和出库单信息。(5分)
我重新构建了一下项目要求和使用的构建方法,以便能适配我自己的变成习惯
下面是AI的回复构建框架
src
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── warehouse
│ │ ├── WarehouseApplication.java
│ │ ├── controller
│ │ │ ├── AdminController.java
│ │ │ └── WarehouseController.java
│ │ ├── service
│ │ │ ├── AdminService.java
│ │ │ └── WarehouseService.java
│ │ ├── mapper
│ │ │ ├── WarehouseMapper.java
│ │ │ ├── MaterialCategoryMapper.java
│ │ │ └── MaterialLedgerMapper.java
│ │ └── pojo
│ │ ├── Warehouse.java
│ │ ├── MaterialCategory.java
│ │ └── MaterialLedger.java
│ └── resources
│ ├── application.properties
│ └── mapper
│ ├── WarehouseMapper.xml
│ ├── MaterialCategoryMapper.xml
│ └── MaterialLedgerMapper.xml
下面是控制ai生成符合要求的sql建表语句:
!
WarehouseApplication.java
java
package com.example.warehouse;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WarehouseApplication {
public static void main(String[] args) {
SpringApplication.run(WarehouseApplication.class, args);
}
}
pojo 包下的实体类示例
java
// Warehouse.java
package com.example.warehouse.pojo;
public class Warehouse {
private String warehouseId;
private String warehouseName;
private String location;
// Getters and Setters
public String getWarehouseId() {return warehouseId;
}public void setWarehouseId(String warehouseId) {this.warehouseId = warehouseId;
}public String getWarehouseName() {return warehouseName;
}public void setWarehouseName(String warehouseName) {this.warehouseName = warehouseName;
}public String getLocation() {return location;
}public void setLocation(String location) {this.location = location;
}
}
// MaterialCategory.java
package com.example.warehouse.pojo;
public class MaterialCategory {
private String categoryId;
private String materialName;
private String specification;
private String material;
private String supplier;
private String brand;
// Getters and Setters
public String getCategoryId() {return categoryId;
}public void setCategoryId(String categoryId) {this.categoryId = categoryId;
}public String getMaterialName() {return materialName;
}public void setMaterialName(String materialName) {this.materialName = materialName;
}public String getSpecification() {return specification;
}public void setSpecification(String specification) {this.specification = specification;
}public String getMaterial() {return material;
}public void setMaterial(String material) {this.material = material;
}public String getSupplier() {return supplier;
}public void setSupplier(String supplier) {this.supplier = supplier;
}public String getBrand() {return brand;
}public void setBrand(String brand) {this.brand = brand;
}
}
// MaterialLedger.java
package com.example.warehouse.pojo;
import java.math.BigDecimal;
public class MaterialLedger {
private String ledgerId;
private String materialCode;
private String operationType;
private BigDecimal quantity;
private String unit;
private String warehouseId;
// Getters and Setters
public String getLedgerId() {return ledgerId;
}public void setLedgerId(String ledgerId) {this.ledgerId = ledgerId;
}public String getMaterialCode() {return materialCode;
}public void setMaterialCode(String materialCode) {this.materialCode = materialCode;
}public String getOperationType() {return operationType;
}public void setOperationType(String operationType) {this.operationType = operationType;
}public BigDecimal getQuantity() {return quantity;
}public void setQuantity(BigDecimal quantity) {this.quantity = quantity;
}public String getUnit() {return unit;
}public void setUnit(String unit) {this.unit = unit;
}public String getWarehouseId() {return warehouseId;
}public void setWarehouseId(String warehouseId) {this.warehouseId = warehouseId;
}
}
mapper 包下的 Mapper 接口示例
java
// WarehouseMapper.java
package com.example.warehouse.mapper;
import com.example.warehouse.pojo.Warehouse;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface WarehouseMapper {
void addWarehouse(Warehouse warehouse);
void deleteWarehouse(String warehouseId);
void updateWarehouse(Warehouse warehouse);
Warehouse getWarehouseById(String warehouseId);
List
}
// MaterialCategoryMapper.java
package com.example.warehouse.mapper;
import com.example.warehouse.pojo.MaterialCategory;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MaterialCategoryMapper {
void addMaterialCategory(MaterialCategory category);
void deleteMaterialCategory(String categoryId);
void updateMaterialCategory(MaterialCategory category);
MaterialCategory getMaterialCategoryById(String categoryId);
List
}
// MaterialLedgerMapper.java
package com.example.warehouse.mapper;
import com.example.warehouse.pojo.MaterialLedger;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MaterialLedgerMapper {
void addMaterialLedger(MaterialLedger ledger);
List
}
service 包下的 Service 接口及实现示例
java
// AdminService.java
package com.example.warehouse.service;
import com.example.warehouse.pojo.Warehouse;
import com.example.warehouse.pojo.MaterialCategory;
import java.util.List;
public interface AdminService {
void addWarehouse(Warehouse warehouse);
void deleteWarehouse(String warehouseId);
void updateWarehouse(Warehouse warehouse);
Warehouse getWarehouseById(String warehouseId);
List
void addMaterialCategory(MaterialCategory category);
void deleteMaterialCategory(String categoryId);
void updateMaterialCategory(MaterialCategory category);
MaterialCategory getMaterialCategoryById(String categoryId);
List<MaterialCategory> getAllMaterialCategories();
}
// AdminServiceImpl.java
package com.example.warehouse.service.impl;
import com.example.warehouse.mapper.WarehouseMapper;
import com.example.warehouse.mapper.MaterialCategoryMapper;
import com.example.warehouse.pojo.Warehouse;
import com.example.warehouse.pojo.MaterialCategory;
import com.example.warehouse.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private WarehouseMapper warehouseMapper;@Autowired
private MaterialCategoryMapper materialCategoryMapper;@Override
public void addWarehouse(Warehouse warehouse) {warehouseMapper.addWarehouse(warehouse);
}@Override
public void deleteWarehouse(String warehouseId) {// 验证没有相关物资存储在该仓库中// 这里需要添加相应的验证逻辑warehouseMapper.deleteWarehouse(warehouseId);
}@Override
public void updateWarehouse(Warehouse warehouse) {// 验证没有相关物资存储在该仓库中// 这里需要添加相应的验证逻辑warehouseMapper.updateWarehouse(warehouse);
}@Override
public Warehouse getWarehouseById(String warehouseId) {return warehouseMapper.getWarehouseById(warehouseId);
}@Override
public List<Warehouse> getAllWarehouses() {return warehouseMapper.getAllWarehouses();
}@Override
public void addMaterialCategory(MaterialCategory category) {// 验证物资分类编码唯一,不同的物资名称、规格、材质的物资不能设立相同的物资编码// 这里需要添加相应的验证逻辑materialCategoryMapper.addMaterialCategory(category);
}@Override
public void deleteMaterialCategory(String categoryId) {// 验证物资台账明细表中是否存在该类物资// 这里需要添加相应的验证逻辑materialCategoryMapper.deleteMaterialCategory(categoryId);
}@Override
public void updateMaterialCategory(MaterialCategory category) {// 验证物资台账明细表中是否存在该类物资// 这里需要添加相应的验证逻辑materialCategoryMapper.updateMaterialCategory(category);
}@Override
public MaterialCategory getMaterialCategoryById(String categoryId) {return materialCategoryMapper.getMaterialCategoryById(categoryId);
}@Override
public List<MaterialCategory> getAllMaterialCategories() {return materialCategoryMapper.getAllMaterialCategories();
}
}
// WarehouseService.java
package com.example.warehouse.service;
import com.example.warehouse.pojo.MaterialLedger;
import java.math.BigDecimal;
import java.util.List;
public interface WarehouseService {
void inboundOperation(String materialCode, BigDecimal quantity, String warehouseId);
void outboundOperation(String materialCode, BigDecimal quantity, String warehouseId);
List
}
// WarehouseServiceImpl.java
package com.example.warehouse.service.impl;
import com.example.warehouse.mapper.MaterialLedgerMapper;
import com.example.warehouse.pojo.MaterialLedger;
import com.example.warehouse.service.WarehouseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
@Service
public class WarehouseServiceImpl implements WarehouseService {
@Autowired
private MaterialLedgerMapper materialLedgerMapper;@Override
public void inboundOperation(String materialCode, BigDecimal quantity, String warehouseId) {// 生成台账明细记录MaterialLedger ledger = new MaterialLedger();// 生成唯一的 ledgerIdledger.setMaterialCode(materialCode);ledger.setOperationType("入库");ledger.setQuantity(quantity);ledger.setWarehouseId(warehouseId);// 设置计量单位等其他信息materialLedgerMapper.addMaterialLedger(ledger);
}@Override
public void outboundOperation(String materialCode, BigDecimal quantity, String warehouseId) {// 验证出库数量是否大于库存余额List<MaterialLedger> ledgers = materialLedgerMapper.getLedgerByMaterialCode(materialCode);BigDecimal balance = BigDecimal.ZERO;for (MaterialLedger ledger : ledgers) {if ("入库".equals(ledger.getOperationType())) {balance = balance.add(ledger.getQuantity());} else {balance = balance.subtract(ledger.getQuantity());}}if (quantity.compareTo(balance) > 0) {throw new RuntimeException("出库数量大于库存余额,无法进行出库");}// 生成台账明细记录MaterialLedger ledger = new MaterialLedger();// 生成唯一的 ledgerIdledger.setMaterialCode(materialCode);ledger.setOperationType("出库");ledger.setQuantity(quantity);ledger.setWarehouseId(warehouseId);// 设置计量单位等其他信息materialLedgerMapper.addMaterialLedger(ledger);
}@Override
public List<MaterialLedger> getInventoryByMaterialCode(String materialCode) {return materialLedgerMapper.getLedgerByMaterialCode(materialCode);
}
}
controller 包下的 Controller 示例
java
// AdminController.java
package com.example.warehouse.controller;
import com.example.warehouse.pojo.Warehouse;
import com.example.warehouse.pojo.MaterialCategory;
import com.example.warehouse.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;@PostMapping("/warehouse")
public void addWarehouse(@RequestBody Warehouse warehouse) {adminService.addWarehouse(warehouse);
}@DeleteMapping("/warehouse/{warehouseId}")
public void deleteWarehouse(@PathVariable String warehouseId) {adminService.deleteWarehouse(warehouseId);
}@PutMapping("/warehouse")
public void updateWarehouse(@RequestBody Warehouse warehouse) {adminService.updateWarehouse(warehouse);
}@GetMapping("/warehouse/{warehouseId}")
public Warehouse getWarehouseById(@PathVariable String warehouseId) {return adminService.getWarehouseById(warehouseId);
}@GetMapping("/warehouses")
public List<Warehouse> getAllWarehouses() {return adminService.getAllWarehouses();
}@PostMapping("/material-category")
public void addMaterialCategory(@RequestBody MaterialCategory category) {adminService.addMaterialCategory(category);
}@DeleteMapping("/material-category/{categoryId}")
public void deleteMaterialCategory(@PathVariable String categoryId) {adminService.deleteMaterialCategory(categoryId);
}@PutMapping("/material-category")
public void updateMaterialCategory(@RequestBody MaterialCategory category) {adminService.updateMaterialCategory(category);
}@GetMapping("/material-category/{categoryId}")
public MaterialCategory getMaterialCategoryById(@PathVariable String categoryId) {return adminService.getMaterialCategoryById(categoryId);
}@GetMapping("/material-categories")
public List<MaterialCategory> getAllMaterialCategories() {return adminService.getAllMaterialCategories();
}
}
经过一段时间的调试后效果如下: