From 8cf747d3a72e4a55998f33e97b3000a032d46dfc Mon Sep 17 00:00:00 2001 From: zxy Date: Mon, 19 Jan 2026 16:46:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=8D=B3=E5=87=BA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/heli/enums/ErrorCodeConstants.java | 1 + .../admin/storage/StorageController.java | 11 ++++++- .../heli/service/storage/StorageService.java | 2 ++ .../service/storage/StorageServiceImpl.java | 18 +++++++++++ .../src/api/heli/storage/index.ts | 4 +++ .../src/views/heli/storage/StorageForm.vue | 29 ++++++++++++++++-- .../src/views/heli/storage/StorageOut.vue | 30 +++++++++++++++++-- .../src/views/heli/storage/StorageOutsp.vue | 30 +++++++++++++++++-- .../src/views/heli/storage/outdex.vue | 23 ++++++++++++-- 9 files changed, 136 insertions(+), 12 deletions(-) diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 36e7c972..79d2aad1 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -169,5 +169,6 @@ public interface ErrorCodeConstants { ErrorCode TASK_IN_REPORT_NOT_EXISTS = new ErrorCode(1_013_005 , "该报工信息不存在,请退出刷新界面"); ErrorCode TASK_IN_REPORT_IS_FINISH = new ErrorCode(1_013_006 , "该报工已完成,不允许删除,请确认"); ErrorCode TASK_IN_REPORT_NOT_REWORK = new ErrorCode(1_013_007 , "该报工没有完成,不允许返工,请确认"); + ErrorCode THIS_SHIPMENT_CANNOT_BE_INVALIDATED = new ErrorCode(1_013_008 , "该出库不允许作废,请刷新界面"); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java index b2684e2d..086aacb1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java @@ -130,6 +130,15 @@ public class StorageController { storageService.updateStorageok(updateReqVO); return success(true); } + + @PostMapping("/returnOutBound") + @Operation(summary = "出库单作废") + @PreAuthorize("@ss.hasPermission('heli:storage:update')") + public CommonResult returnOutBound(@RequestParam("id") Long id) { + storageService.returnOutBound(id); + return success(true); + } + @PutMapping("/update-status") @Operation(summary = "更新入/出库") @Transactional @@ -158,7 +167,7 @@ public class StorageController { } updateReqVO = BeanUtils.toBean(targetDo, StorageSaveReqVO.class); - //出库即审核 + //提交即审核 if (updateReqVO.getStockType() == 2) { updateReqVO.setStatus(4); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java index a887a8a4..1a48c24e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java @@ -83,4 +83,6 @@ public interface StorageService { Workbook exportExcelNew(String stockNo); Workbook exportExcelOut(String stockNo); + + void returnOutBound(Long id); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java index 2a3a22cb..36de36c7 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java @@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanko.yunxi.mes.framework.common.exception.ErrorCode; +import com.chanko.yunxi.mes.framework.common.exception.ServiceException; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.web.core.util.WebFrameworkUtils; import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.StorageInventoryController; import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatSaveReqVO; @@ -966,4 +968,20 @@ private StorageLogService storageLogService; } return unitMap; } + + @Override + public void returnOutBound(Long id) { + StorageDO storageDO = storageMapper.selectById(id); + if (storageDO == null) { + throw new ServiceException(THE_DATA_DOES_NOT_EXIST); + } + if (storageDO.getStatus() != 1){ + throw new ServiceException(THIS_SHIPMENT_CANNOT_BE_INVALIDATED); + } + storageDO.setStatus(3); + Long userId = WebFrameworkUtils.getLoginUserId(); + storageDO.setCancel(userId); + storageDO.setCancelTime(LocalDateTime.now()); + storageMapper.updateById(storageDO); + } } diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts index 0ce06e61..da93e03a 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts @@ -69,3 +69,7 @@ export const procurementAndStorage = async (data) => { export const isPrint = async (id: number) => { return await request.get({ url: `/heli/storage/isPrint?id=` + id }) } + +export const returnOutBound = async (id: number) => { + return await request.post({ url: `/heli/storage/returnOutBound?id=` + id }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue index 3443f8b4..c703d0f3 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue @@ -314,9 +314,11 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete"
系统信息 取 消 打 印 - 保 存 + 保 存 提 交 - 作 废 + + 作 废 + @@ -552,6 +554,29 @@ const matOpenFormRef1 = ref() const proOpenFormRef = ref() const materialOpenFormRef = ref() + + +/** 作废操作 */ +const handleDelete = async () => { + try { + // 二次确认 + await message.confirm('确认要作废吗?') + + // 调用API作废 + await StorageApi.returnOutBound(formData.value.id) + + message.success('作废成功') + if (sumbefore.value == 0) { + reload() + } + } catch (error) { + // 用户取消操作时不显示错误 + if (error !== 'cancel') { + console.error('作废失败:', error) + } + } +} + const openMatForm = () => { // if (formData.value.whId == undefined || formData.value.whId == '') { // message.alertWarning('请选择入库仓库') diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOut.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOut.vue index 27d9fd8e..f42598f7 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOut.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOut.vue @@ -339,11 +339,13 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete" @@ -518,6 +520,26 @@ const openProjectForm = (scope) => { proOpenFormRef.value.open(scope) } +/** 作废操作 */ +const handleDelete = async ( ) => { + try { + // 二次确认 + await message.confirm('确认要作废吗?') + + // 调用API作废 + await StorageApi.returnOutBound(formData.value.id) + message.success('作废成功') + if (sumbefore.value == 0) { + reload() + } + } catch (error) { + // 用户取消操作时不显示错误 + if (error !== 'cancel') { + console.error('作废失败:', error) + } + } +} + const getList = async (arrMat) => { arrMat.forEach((row) => { @@ -636,6 +658,8 @@ const deleteStorage = async() =>{ } centerDialogVisible.value = false } + + const handleStatus = async (num) => { formData.value.status = num const data = formData.value as unknown as StorageApi.StorageVO diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue index 9ee8c470..fb8d2553 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue @@ -324,13 +324,15 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete" @@ -552,6 +554,28 @@ const getProject = async (pro, scope) => { // ) } +/** 作废操作 */ +const handleDelete = async () => { + try { + // 二次确认 + await message.confirm('确认要作废吗?') + + // 调用API作废 + await StorageApi.returnOutBound(formData.value.id) + + message.success('作废成功') + if (sumbefore.value == 0) { + reload() + } + } catch (error) { + // 用户取消操作时不显示错误 + if (error !== 'cancel') { + console.error('作废失败:', error) + } + } +} + + // 根据出库类型显示上游单号 const enableHeadNo = ref(false) const handleStockType = async (typeid) => { diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue index 35f2ceb8..2e5f9f96 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/outdex.vue @@ -187,9 +187,6 @@ 编辑 - - - 查看详情 @@ -295,6 +292,26 @@ const openForm = (type: string, id?: number) => { const openDetail = (active: string, id?: number) => { router.push({ path: '/inventory/storageoutdetail', query: { type: active, id: id } }) } + +/** 作废操作 */ +const handleDelete = async (id: number) => { + try { + // 二次确认 + await message.confirm('确认要作废吗?') + + // 调用API作废 + await StorageApi.returnOutBound(id) + + message.success('作废成功') + await getList() + } catch (error) { + // 用户取消操作时不显示错误 + if (error !== 'cancel') { + console.error('作废失败:', error) + } + } +} + /** 导出按钮操作 */ const handleExport = async () => { if (!queryParams.stockNo){