文檔包含用例圖、系統架構圖、系統功能結構圖、實體屬性圖、總體e-r圖。
一.系統開發工具與環境搭建
1.系統設計開發工具
后端
使用Java編程語言的Spring boot框架
項目架構:B/S架構
運行環境:win10/win11、jdk17
前端:
技術:框架Vue.js;UI庫:ElementUI;
開發工具:Visual Studio Code;
后端:
技術:Java語言、mybatis plus、Spring boot框架;
開發工具:IDEA 2023.3.3版本;
數據庫:
數據庫:mysql5.7/8.0
數據庫工具:Navicat12版本;
二.系統實現(部分截圖)
2.1 倉庫人員功能實現
2.1.1 登錄功能實現
倉庫人員,通過輸入賬號、密碼,選擇對應的倉庫管理員角色,輸入圖形驗證碼進行登錄。前端將倉庫人員輸入的參數信息傳遞給后端接口/User/SignIn,執行登錄方法,檢查用戶的信息是否存在于用戶表,不存在,則提示倉庫人員檢查輸入的信息是否正確。校驗通過后,登錄系統,進行操作系統。登錄界面如圖5-1所示。
關鍵代碼:
List<AppUser> items=_AppUserMpper.selectList(queryWrapper);
if(items.stream().count()==0)
{ throw ?new CustomException("請檢查登錄的賬號或者密碼,角色是否都正確!");}
Map<String, String> map = new HashMap<>();
map.put(SysConst.UserIdClaim,items.get(0).getId().toString());
map.put(SysConst.RoleTypeClaim,items.get(0).getRoleType().toString());
String token=JWTUtils.getToken(map);
return token;
2.1.2 商品資料管理功能實現
倉庫商品資料管理,作為倉庫管理人員,可以為倉庫新增商品信息。包含商品、SKU、條碼、品牌等信息,調用/Cargo/CreateOrEdit進行新增商品信息。當倉庫商品有所變動時,可以進行修改,選擇商品進行修改,調用/Cargo/Get獲取商品的原始信息,修改后,調用/Cargo/CreateOrEdit接口進行修改。刪除商品,有這個權限,但是最好不要刪除商品信息。商品資料管理界面如圖5-2所示。
關鍵代碼:
//聲明一個商品資料實體
Cargo Cargo = new Cargo();
//把前端傳入的input參數拷貝到商品資料實體
BeanUtils.copyProperties(Cargo,input);
//調用數據庫的增加或者修改方法
saveOrUpdate(Cargo);
//定義一個返回給前端的商品資料傳輸模型
CargoDto CargoDto=new CargoDto();
//同理把操作的商品資料實體拷貝給商品資料傳輸模型
BeanUtils.copyProperties(CargoDto,Cargo);
//把傳輸模型返回給前端
return CargoDto;
2.1.3 庫區管理功能實現
倉庫人員可以根據倉庫的具體情況,進行設置庫區,包含庫區名稱、庫區編碼。當發生酒類商品出入庫操作時,系統通過業務邏輯層自動關聯庫區數據,系統實時更新該庫區的庫存數量字段。為庫區設置庫位信息,將當前庫區Id傳遞給/WarehouseBin/CreateOrEdit接口,為庫區新增庫位信息。庫區管理界面如圖5-3所示。
關鍵代碼:
if(input.getId()==null)
?{
?????return new WarehouseAreaDto();
?}
?PagedResult<WarehouseAreaDto> ?pagedResult =List(input);
?return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new WarehouseAreaDto();
2.2超級管理員功能實現
2.2.1 數據圖形化分析功能實現
超級管理員可以通過選擇不同倉庫,通過折線圖查看每個倉庫的最近7天出入庫存數,最近7天出入訂單數。環形圖展示最近30天倉庫出入庫統計分析,展示該倉庫的待補商品Top10,商品保質期預警Top10。數據圖形化分析界面如圖5-4所示。
關鍵代碼:
?Map<String, Object> data = new HashMap<>();
data.put("name", "入庫");
data.put("value", Math.abs(sum));
dataList.add(data);
//統計數量小于0的記錄并且求和
double sum1 = inventoryRecords.stream().filter(x -> x.getQty() < 0).mapToDouble(x -> x.getQty()).sum();
Map<String, Object> data1 = new HashMap<>();
data1.put("name", "出庫");
data1.put("value", Math.abs(sum1));
dataList.add(data1);
2.2.2 貨主管理功能實現
超級管理員可以維護所有倉庫的貨主信息,為所有倉添加貨主信息,填寫貨主名稱、貨主編碼、貨主電話、貨主公司地址信息,調用/Customer/CreateOrEdit接口新增。當貨主信息有所更改時,修改貨主信息。當不再合作,可以刪除貨主信息。貨主管理界面如圖5-5所示。
關鍵代碼:
//把Customer實體轉換成Customer傳輸模型
List<CustomerDto> items= Extension.copyBeanList(pageRecords.getRecords(),CustomerDto.class);
for (CustomerDto item : items) {
??//查詢出關聯的創建用戶信息
????AppUserDto ?CreatorAppUserDTO=new AppUserDto();
????AppUser ?CreatorAppUserEntity= _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId,item.getCreatorId()));
???if(CreatorAppUserEntity!=null) {
????????BeanUtils.copyProperties(CreatorAppUserDTO, CreatorAppUserEntity);
????????item.setCreatorAppUserDto(CreatorAppUserDTO);
????} ?
}
//返回一個分頁結構給前端
return PagedResult.GetInstance(items,totalCount);
2.2.3 庫存預警功能實現
超級管理員登錄系統后,庫存預警模塊。可對每一款商品單獨設置庫存預警。點擊具體商品的編輯選項,超級管理輸入商品的下限預警值,調用/EarlyWarning/CreateOrEdit接設置庫存預警。此數值代表商品庫存數量達到該值時,系統將觸發預警。庫存預警界面如圖5-6所示。
關鍵代碼:
//聲明一個庫存預警實體
EarlyWarning EarlyWarning = new EarlyWarning();
//把前端傳入的input參數拷貝到庫存預警實體
BeanUtils.copyProperties(EarlyWarning, input);
//調用數據庫的增加或者修改方法
saveOrUpdate(EarlyWarning);
//定義一個返回給前端的庫存預警傳輸模型
EarlyWarningDto EarlyWarningDto = new EarlyWarningDto();
//同理把操作的庫存預警實體拷貝給庫存預警傳輸模型
BeanUtils.copyProperties(EarlyWarningDto, EarlyWarning);
//把傳輸模型返回給前端
return EarlyWarningDto;