From 66e47e221e1c4ac86659d106713d99f6be145613 Mon Sep 17 00:00:00 2001 From: JR <3573153686@qq.com> Date: Mon, 11 Aug 2025 17:21:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9E=E7=89=A9?= =?UTF-8?q?=E6=B5=81=E7=AE=A1=E7=90=86=E5=92=8C=E5=BF=AB=E9=80=92=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加物流预览、快递问题相关API - 实现物流剩余时间、物流状态编辑组件 - 开发设计项目汇报详情页面,包括货物类别自动补全、图片预览等功能- 新增物流类型枚举 --- klp-ui/src/api/wms/express.js | 51 ++ klp-ui/src/api/wms/expressQuestion.js | 44 + klp-ui/src/api/wms/reportDetail.js | 93 +++ klp-ui/src/api/wms/reportSummary.js | 81 ++ klp-ui/src/utils/enums.js | 9 +- .../express/components/ExpressRemainTime.vue | 41 + .../components/ExpressStatusEditor.vue | 95 +++ klp-ui/src/views/wms/express/index.vue | 771 ++++++++++++++++++ .../src/views/wms/expressQuestion/index.vue | 353 ++++++++ klp-ui/src/views/wms/rxgood/detail.vue | 595 ++++++++++++++ klp-ui/src/views/wms/rxgood/index.vue | 378 +++++++++ .../com/klp/mapper/WmsStockLogMapper.java | 2 - .../service/impl/WmsStockLogServiceImpl.java | 52 +- 13 files changed, 2559 insertions(+), 6 deletions(-) create mode 100644 klp-ui/src/api/wms/express.js create mode 100644 klp-ui/src/api/wms/expressQuestion.js create mode 100644 klp-ui/src/api/wms/reportDetail.js create mode 100644 klp-ui/src/api/wms/reportSummary.js create mode 100644 klp-ui/src/views/wms/express/components/ExpressRemainTime.vue create mode 100644 klp-ui/src/views/wms/express/components/ExpressStatusEditor.vue create mode 100644 klp-ui/src/views/wms/express/index.vue create mode 100644 klp-ui/src/views/wms/expressQuestion/index.vue create mode 100644 klp-ui/src/views/wms/rxgood/detail.vue create mode 100644 klp-ui/src/views/wms/rxgood/index.vue diff --git a/klp-ui/src/api/wms/express.js b/klp-ui/src/api/wms/express.js new file mode 100644 index 00000000..65447073 --- /dev/null +++ b/klp-ui/src/api/wms/express.js @@ -0,0 +1,51 @@ +import request from '@/utils/request' + +// 查询物流预览列表 +export function listExpress(query) { + return request({ + url: '/oa/express/list', + method: 'get', + params: query + }) +} + +// 查询物流预览详细 +export function getExpress(expressId) { + return request({ + url: '/oa/express/' + expressId, + method: 'get' + }) +} +// 查询物流预览详细 +export function refreshExpress(expressId) { + return request({ + url: '/oa/express/refresh/' + expressId, + method: 'get' + }) +} + +// 新增物流预览 +export function addExpress(data) { + return request({ + url: '/oa/express', + method: 'post', + data: data + }) +} + +// 修改物流预览 +export function updateExpress(data) { + return request({ + url: '/oa/express', + method: 'put', + data: data + }) +} + +// 删除物流预览 +export function delExpress(expressId) { + return request({ + url: '/oa/express/' + expressId, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/wms/expressQuestion.js b/klp-ui/src/api/wms/expressQuestion.js new file mode 100644 index 00000000..b20a9937 --- /dev/null +++ b/klp-ui/src/api/wms/expressQuestion.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询快递问题列表 +export function listExpressQuestion(query) { +return request({ +url: '/oa/expressQuestion/list', +method: 'get', +params: query +}) +} + +// 查询快递问题详细 +export function getExpressQuestion(questionId) { +return request({ +url: '/oa/expressQuestion/' + questionId, +method: 'get' +}) +} + +// 新增快递问题 +export function addExpressQuestion(data) { +return request({ +url: '/oa/expressQuestion', +method: 'post', +data: data +}) +} + +// 修改快递问题 +export function updateExpressQuestion(data) { +return request({ +url: '/oa/expressQuestion', +method: 'put', +data: data +}) +} + +// 删除快递问题 +export function delExpressQuestion(questionId) { +return request({ +url: '/oa/expressQuestion/' + questionId, +method: 'delete' +}) +} diff --git a/klp-ui/src/api/wms/reportDetail.js b/klp-ui/src/api/wms/reportDetail.js new file mode 100644 index 00000000..0099fba6 --- /dev/null +++ b/klp-ui/src/api/wms/reportDetail.js @@ -0,0 +1,93 @@ +import request from '@/utils/request' + +// 查询设计项目汇报详情列表 +export async function listReportDetail(query) { + // return { + // rows: [ + // { + // reportDetailId: 1, + // deviceCode: 1, + // category: '设备类型2', + // deviceDescription: '设备生产说明', + // reportDetail: '汇报详情', + // ossIds: '1,2', + // images: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php' + // }, + // { + // reportDetailId: 2, + // deviceCode: 1, + // category: '设备类型3', + // deviceDescription: '设备生产说明', + // reportDetail: '汇报详情', + // images: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php', + // ossIds: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php' + // }, + // { + // reportDetailId: 3, + // deviceCode: 1, + // category: '设备类型4', + // deviceDescription: '设备生产说明', + // reportDetail: '汇报详情', + // images: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php', + // ossIds: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php' + // }, + // { + // reportDetailId: 4, + // deviceCode: 1, + // category: '设备类型5', + // deviceDescription: '设备生产说明', + // reportDetail: '汇报详情', + // images: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php', + // ossIds: 'https://api.mtyqx.cn/api/random.php,https://api.mtyqx.cn/xjjapi/random.php' + // }, + // ], + // total: 1 + // } + return request({ + url: '/system/reportDetail/list', + method: 'get', + params: query + }) +} + +// 查询设计项目汇报详情详细 +export function getReportDetail(id) { + return request({ + url: '/system/reportDetail/' + id, + method: 'get' + }) +} + +// 新增设计项目汇报详情 +export function addReportDetail(data) { + return request({ + url: '/system/reportDetail', + method: 'post', + data: data + }) +} + +// 修改设计项目汇报详情 +export function updateReportDetail(data) { + return request({ + url: '/system/reportDetail', + method: 'put', + data: data + }) +} + +// 删除设计项目汇报详情 +export function delReportDetail(id) { + return request({ + url: '/system/reportDetail/' + id, + method: 'delete' + }) +} + + +export function listReportDetailByProjectId(projectId) { + return request({ + url: '/system/reportDetail/project/' + projectId, + method: 'get' + }) +} diff --git a/klp-ui/src/api/wms/reportSummary.js b/klp-ui/src/api/wms/reportSummary.js new file mode 100644 index 00000000..a9193903 --- /dev/null +++ b/klp-ui/src/api/wms/reportSummary.js @@ -0,0 +1,81 @@ +import request from '@/utils/request' + +// 查询设计项目汇报概述列表 +export async function listReportSummary(query) { + // return { + // rows: [ + // { + // reportSummaryId: 1, + // reportTitle: '汇报标题', + // reportDate: '汇报日期', + // reporter: '汇报人', + // projectName: '设计项目', + // projectId: '1' + // }, + // { + // reportSummaryId: 2, + // reportTitle: '汇报标题', + // reportDate: '汇报日期', + // reporter: '汇报人', + // projectName: '设计项目', + // projectId: '1' + // }, + // { + // reportSummaryId: 3, + // reportTitle: '汇报标题', + // reportDate: '汇报日期', + // reporter: '汇报人', + // projectName: '设计项目', + // projectId: '1' + // }, + // { + // reportSummaryId: 4, + // reportTitle: '汇报标题', + // reportDate: '汇报日期', + // reporter: '汇报人', + // projectName: '设计项目', + // projectId: '1' + // }, + // ], + // total: 1, + // } + return request({ + url: '/system/reportSummary/list', + method: 'get', + params: query + }) +} + +// 查询设计项目汇报概述详细 +export function getReportSummary(id) { + return request({ + url: '/system/reportSummary/' + id, + method: 'get' + }) +} + +// 新增设计项目汇报概述 +export function addReportSummary(data) { + return request({ + url: '/system/reportSummary', + method: 'post', + data: data + }) +} + +// 修改设计项目汇报概述 +export function updateReportSummary(data) { + return request({ + url: '/system/reportSummary', + method: 'put', + data: data + }) +} + +// 删除设计项目汇报概述 +export function delReportSummary(id) { + return request({ + url: '/system/reportSummary/' + id, + method: 'delete' + }) +} diff --git a/klp-ui/src/utils/enums.js b/klp-ui/src/utils/enums.js index 1ba04fa7..32495364 100644 --- a/klp-ui/src/utils/enums.js +++ b/klp-ui/src/utils/enums.js @@ -27,4 +27,11 @@ export const EPurchaseDetailStatus = { export const ITEM_TYPE = { RAW_MATERIAL: 'raw_material', // 原材料 PRODUCT: 'product' // 产品 -}; \ No newline at end of file +}; + +export const EExpressType = { + SF: "SF", + ZTO: "ZTO", + BEST: "Best", + STO: "STO", +} diff --git a/klp-ui/src/views/wms/express/components/ExpressRemainTime.vue b/klp-ui/src/views/wms/express/components/ExpressRemainTime.vue new file mode 100644 index 00000000..9d44fb58 --- /dev/null +++ b/klp-ui/src/views/wms/express/components/ExpressRemainTime.vue @@ -0,0 +1,41 @@ + + + diff --git a/klp-ui/src/views/wms/express/components/ExpressStatusEditor.vue b/klp-ui/src/views/wms/express/components/ExpressStatusEditor.vue new file mode 100644 index 00000000..102f2cfd --- /dev/null +++ b/klp-ui/src/views/wms/express/components/ExpressStatusEditor.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/klp-ui/src/views/wms/express/index.vue b/klp-ui/src/views/wms/express/index.vue new file mode 100644 index 00000000..7883d264 --- /dev/null +++ b/klp-ui/src/views/wms/express/index.vue @@ -0,0 +1,771 @@ + + + diff --git a/klp-ui/src/views/wms/expressQuestion/index.vue b/klp-ui/src/views/wms/expressQuestion/index.vue new file mode 100644 index 00000000..cb635733 --- /dev/null +++ b/klp-ui/src/views/wms/expressQuestion/index.vue @@ -0,0 +1,353 @@ + + + diff --git a/klp-ui/src/views/wms/rxgood/detail.vue b/klp-ui/src/views/wms/rxgood/detail.vue new file mode 100644 index 00000000..042b0f94 --- /dev/null +++ b/klp-ui/src/views/wms/rxgood/detail.vue @@ -0,0 +1,595 @@ + + + diff --git a/klp-ui/src/views/wms/rxgood/index.vue b/klp-ui/src/views/wms/rxgood/index.vue new file mode 100644 index 00000000..6f21291d --- /dev/null +++ b/klp-ui/src/views/wms/rxgood/index.vue @@ -0,0 +1,378 @@ + + + diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsStockLogMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsStockLogMapper.java index bf987bff..ebfb3ada 100644 --- a/klp-wms/src/main/java/com/klp/mapper/WmsStockLogMapper.java +++ b/klp-wms/src/main/java/com/klp/mapper/WmsStockLogMapper.java @@ -1,9 +1,7 @@ package com.klp.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.klp.domain.WmsStock; import com.klp.domain.WmsStockLog; import com.klp.domain.vo.WmsStockLogVo; import com.klp.common.core.mapper.BaseMapperPlus; diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsStockLogServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsStockLogServiceImpl.java index 09b255dc..3adffeab 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsStockLogServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsStockLogServiceImpl.java @@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; +import com.klp.domain.WmsWarehouse; +import com.klp.mapper.WmsWarehouseMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsStockLogBo; @@ -16,6 +18,8 @@ import com.klp.domain.WmsStockLog; import com.klp.mapper.WmsStockLogMapper; import com.klp.service.IWmsStockLogService; +import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -31,6 +35,8 @@ import java.util.Collection; public class WmsStockLogServiceImpl implements IWmsStockLogService { private final WmsStockLogMapper baseMapper; + @Resource + private WmsWarehouseMapper warehouseMapper; /** * 查询库存流水 @@ -62,7 +68,15 @@ public class WmsStockLogServiceImpl implements IWmsStockLogService { private QueryWrapper buildQueryWrapperPlus(WmsStockLogBo bo) { QueryWrapper lqw = Wrappers.query(); lqw.eq("sl.del_flag", 0); - lqw.eq(bo.getWarehouseId() != null, "sl.warehouse_id", bo.getWarehouseId()); + // 处理仓库ID查询,支持递归查询子节点 + if (bo.getWarehouseId() != null) { + List warehouseIds = getWarehouseIdsWithChildren(bo.getWarehouseId()); + if (warehouseIds.size() == 1) { + lqw.eq("sl.warehouse_id", warehouseIds.get(0)); + } else { + lqw.in("sl.warehouse_id", warehouseIds); + } + } lqw.eq(bo.getItemId() != null, "sl.item_id", bo.getItemId()); lqw.eq(StringUtils.isNotBlank(bo.getItemType()), "sl.item_type", bo.getItemType()); lqw.eq(bo.getChangeQty() != null, "sl.change_qty", bo.getChangeQty()); @@ -83,8 +97,6 @@ public class WmsStockLogServiceImpl implements IWmsStockLogService { lqw.eq(bo.getChangeQty() != null, WmsStockLog::getChangeQty, bo.getChangeQty()); lqw.eq(bo.getAfterQty() != null, WmsStockLog::getAfterQty, bo.getAfterQty()); lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), WmsStockLog::getChangeType, bo.getChangeType()); -// lqw.eq(bo.getChangeTime() != null, WmsStockLog::getChangeTime, bo.getChangeTime()); - // 根据时间区间查询 lqw.ge(bo.getStartTime() != null, WmsStockLog::getChangeTime, bo.getStartTime()); lqw.le(bo.getEndTime() != null, WmsStockLog::getChangeTime, bo.getEndTime()); @@ -132,4 +144,38 @@ public class WmsStockLogServiceImpl implements IWmsStockLogService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 获取指定仓库ID及其所有子仓库ID + * @param warehouseId 仓库ID + * @return 包含当前仓库ID和所有子仓库ID的列表 + */ + private List getWarehouseIdsWithChildren(Long warehouseId) { + List warehouseIds = new ArrayList<>(); + warehouseIds.add(warehouseId); // 添加当前仓库ID + + // 递归获取所有子仓库ID + getChildWarehouseIds(warehouseId, warehouseIds); + + return warehouseIds; + } + + /** + * 递归获取子仓库ID + * @param parentId 父仓库ID + * @param warehouseIds 仓库ID列表(用于收集结果) + */ + private void getChildWarehouseIds(Long parentId, List warehouseIds) { + // 查询直接子仓库 + List children = warehouseMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsWarehouse::getParentId, parentId) + .eq(WmsWarehouse::getDelFlag, 0) + ); + // 递归处理每个子仓库 + for (WmsWarehouse child : children) { + warehouseIds.add(child.getWarehouseId()); + getChildWarehouseIds(child.getWarehouseId(), warehouseIds); + } + } }