发货-发货详情(新)
发货详情报表模块(ShipV2)功能解析
1. 模块架构
1.1 前端架构
核心文件 : wimoor-ui/src/views/amazon/report/shipv2/detail/index.vue
技术栈 :Vue 3、Element Plus、Vite、Axios
状态管理 :Vue 3 Composition API(reactive、ref)
API接口 : wimoor-ui/src/api/amazon/inbound/reportV2Api.js
1.2 后端架构
控制器 : ShipInboundReportV2Controller.java
服务层 : IShipInboundPlanService.java 、 ShipInboundPlanServiceImpl.java
数据访问 : ShipInboundPlanV2Mapper.java 、 ShipInboundPlanV2Mapper.xml
技术栈 :Spring Boot、MyBatis Plus、MySQL
1.3 数据流
前端用户操作 → 筛选条件设置 → API调用 → 后端控制器处理 → 服务层业务逻辑 → Mapper数据查询 → 数据库 → 数据返回 → 前端渲染
2. 前端实现
2.1 核心组件结构
2.2 核心数据结构
2.2.1 响应式状态
const state = reactive({
selecttype: 'shipment', // 当前选择的视图类型
dateRange: [], // 日期范围
queryParam: {
groupid: undefined, // 店铺ID
datetype: 'createdate', // 日期类型
fromdate: '', // 开始日期
enddate: '', // 结束日期
warehouseid: 'all', // 仓库ID
search: '', // 搜索关键词
hasexceptionnum: '', // 接收异常
carrierName: '' // 承运商
},
tableData: {
records: [], // 表格数据
total: 0 // 总记录数
},
isLoading: false, // 加载状态
skutableData: {
records: [], // SKU表格数据
total: 0 // SKU总记录数
},
sumQty: 0, // 总发货数量
sumReceivedQty: 0, // 总接收数量
selectList: [] // 选中的记录
});
2.2.2 API接口
// reportV2Api.js
export default {
getShipmentReportByLoistics, // 按物流商获取货件报表
getShipmentReportByWarehouseLoistics, // 按仓库和物流商获取货件报表
getShipmentDetailReport, // 获取货件详情报表
getShipmentReport, // 获取货件报表
downShipmentExcel, // 导出货件Excel
downExcelShipmentReportByLoistics, // 导出物流商货件报表
getShipmentReportByWarehouseLoistics
};
2.3 核心方法
2.3.1 数据加载方法
// 加载货件汇总数据
function loadTableData(params) {
state.isLoading = true;
reportApi.getShipmentReport(params).then((res) => {
state.isLoading = false;
state.tableData.records = res.data.records;
state.tableData.total = res.data.total;
});
}
// 加载SKU汇总数据
function skuloadTableData(params) {
state.isLoading = true;
reportApi.getShipmentDetailReport(params).then((res) => {
state.isLoading = false;
state.skutableData.records = res.data.records;
state.skutableData.total = res.data.total;
// 统计总发货和总接收数量
state.sumQty = res.data.records.reduce((sum, item) => sum + (item.sendqty || 0), 0);
state.sumReceivedQty = res.data.records.reduce((sum, item) => sum + (item.receivedqty || 0), 0);
});
}
2.3.2 筛选条件处理
function handleQuery() {
if (state.selecttype === 'shipment') {
state.queryParam.pageNum = 1;
loadTableData(state.queryParam);
} else {
state.queryParam.pageNum = 1;
skuloadTableData(state.queryParam);
}
}
function handleSizeChange(val) {
state.queryParam.pageSize = val;
handleQuery();
}
function handleCurrentChange(val) {
state.queryParam.pageNum = val;
handleQuery();
}
2.3.3 导出方法
function downloadList(ftype) {
if (ftype == "shiptask") {
// 导出发货处理任务量
findProcessHandle({"fromdate":state.queryParam.fromdate,"enddate":state.queryParam.enddate});
} else if (ftype == "shipqty") {
// 导出发货数量简约版
inventoryRptApi.downloadOutstockformOut({"fromdate":state.queryParam.fromdate,"enddate":state.queryParam.enddate});
} else {
// 其他导出类型
state.queryParam.downloadType = ftype;
reportApi.downShipmentExcel(state.queryParam, () => {
state.downLoading = false;
});
}
}
2.4 前端交互逻辑
视图切换 :通过 selecttype 状态和标签页切换,调用不同的数据加载方法
筛选条件 :所有筛选条件变更都会触发 handleQuery 方法重新加载数据
分页 :分页操作通过 handleSizeChange 和 handleCurrentChange 方法处理
导出 :根据不同的导出类型调用不同的API接口
数据统计 :SKU汇总视图下自动计算总发货和总接收数量
3. 后端实现
3.1 控制器层
3.1.1 核心API接口
API路径
方法
功能
/api/v2/ship/report/getShipmentReport
POST
获取货件汇总报表
/api/v2/ship/report/getShipmentDetailReport
POST
获取SKU汇总报表
/api/v2/ship/report/downShipmentExcel
POST
导出货件报表Excel
/api/v2/ship/report/getShipmentReportByLoistics
POST
按物流商获取货件报表
/api/v2/ship/report/getShipmentReportByWarehouseLoistics
POST
按仓库和物流商获取货件报表
/api/v2/ship/report/downExcelShipmentReportByLoistics
POST
导出物流商货件报表Excel
3.1.2 控制器方法实现
@PostMapping(value = "/getShipmentReport")
public Result>> getShipmentReport(@RequestBody ShipInboundShipmenSummaryDTO dto) {
Map param = new HashMap<>();
// 参数处理
UserInfo user = UserInfoContext.get();
param.put("shopid", user.getCompanyid());
param.put("marketplaceid", dto.getMarketplaceid());
param.put("groupid", dto.getGroupid());
param.put("search", dto.getSearch());
param.put("datetype", dto.getDatetype());
param.put("fromDate", dto.getFromdate());
param.put("endDate", dto.getEnddate());
param.put("warehouseid", dto.getWarehouseid());
param.put("company", dto.getCompany());
param.put("companyid", dto.getCompanyid());
param.put("iserror", dto.getHasexceptionnum());
// 调用服务层
IPage