出库任务批量修改日期

This commit is contained in:
杨学谦 2025-11-25 16:35:46 +08:00
parent c7eebdab59
commit b75fceca38
6 changed files with 222 additions and 5 deletions

View File

@ -27,6 +27,14 @@ export const editDate = (params) => {
})
}
export const batchEditDate = (params) => {
return request({
url: '/taskQuery/batchEditDate',
method: 'post',
data: params
})
}
/**
* 根据物料id查询物料信息
*/

View File

@ -1,8 +1,8 @@
import axios from 'axios'
const request = axios.create({
baseURL: 'http://172.18.222.253:12315/wms',
//baseURL: 'http://localhost:12315/wms',
//baseURL: 'http://172.18.222.253:12315/wms',
baseURL: 'http://localhost:12315/wms',
timeout: 5000
})
// 172.18.222.253

View File

@ -43,8 +43,21 @@
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }"
@sort-change="handleSortChange">
<el-table-column width="65px" fixed="left">
<template #header>
<el-checkbox
v-model="isSelectAll"
@change="handleSelectAllChange">
&nbsp;
</el-checkbox>
</template>
<template v-slot="scope">
<el-radio :label="scope.row.goodsId" v-model="goodsId">&nbsp;</el-radio>
<!-- 单选改为多选 -->
<el-checkbox
:label="scope.row.goodsId"
v-model="scope.row.checked"
@change="handleSelectionChange(scope.row)">
&nbsp;
</el-checkbox>
</template>
</el-table-column>
<el-table-column prop="workOrder" label="工单详情" fixed="left" min-width="120px" sortable="custom"
@ -87,6 +100,19 @@
<el-button size="default" type="warning" @click.stop="handleDelete(scope.row)">加急</el-button>
</div>
</template>
<template #header>
<div style="display: flex; flex-direction: column; align-items: center;">
<span>操作</span>
<el-button
size="small"
type="primary"
@click="handleBatchEdit"
:disabled="selectedRows.length === 0"
style="margin-top: 5px;">
批量修改时间({{ selectedRows.length }})
</el-button>
</div>
</template>
</el-table-column>
</el-table>
@ -117,7 +143,25 @@
</span>
</template>
</el-dialog>
<el-dialog v-model="showBatchEditDialog" title="批量修改执行日期" width="30%" draggable>
<el-form ref="batchEditFormRef" :model="batchEditForm" label-width="100px">
<el-form-item label="执行时间">
<el-date-picker
v-model="batchEditForm.pickingDate"
type="date"
placeholder="请选择执行时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD" style="width: 100%">
</el-date-picker>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="showBatchEditDialog = false">取消</el-button>
<el-button type="primary" @click="saveBatchEdit(batchEditForm)">确定</el-button>
</span>
</template>
</el-dialog>
</div>
</el-container>
</el-config-provider>
@ -126,7 +170,7 @@
<script setup>
import store from '@/store'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import {editDate, getGoodsInfoByPage, upOutsType} from '@/api/goods.js'
import {batchEditDate, editDate, getGoodsInfoByPage, upOutsType} from '@/api/goods.js'
import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue'
import {ElMessage} from 'element-plus'
import {genTableRequest} from '@/utils/generator.js'
@ -160,6 +204,11 @@ let searchQueryFormEntity = reactive({
goodsDesc: '',
workOrder: '',
})
let selectedRows = ref([]) //
let showBatchEditDialog = ref(false) //
const batchEditForm = reactive({
pickingDate: ''
}) //
let searchQueryFormRef = ref()
let rowEditFlag = ref(false)
let goodsId = ''
@ -184,6 +233,75 @@ const resizeHeight = () => {
maxHeight.value = window.innerHeight * 0.55
}
//
const handleSelectionChange = (row) => {
if (row.checked) {
//
if (!selectedRows.value.some(item => item.goodsId === row.goodsId)) {
selectedRows.value.push(row)
}
} else {
//
selectedRows.value = selectedRows.value.filter(item => item.goodsId !== row.goodsId)
}
}
//
const handleBatchEdit = () => {
if (selectedRows.value.length === 0) {
ElMessage.warning('请至少选择一条记录')
return
}
batchEditForm.pickingDate = ''
showBatchEditDialog.value = true
}
const handleSelectAllChange = (val) => {
tableData.value.forEach(row => {
row.checked = val
})
if (val) {
//
selectedRows.value = [...tableData.value]
} else {
//
selectedRows.value = []
}
}
//
const saveBatchEdit = (form) => {
if (!form.pickingDate) {
ElMessage.warning('请选择执行时间')
return
}
const taskIds = selectedRows.value.map(row => row.taskId)
const request = {
taskIds: taskIds,
pickingDate: form.pickingDate
}
// API
batchEditDate(request).then((res) => {
if (res.data.code === 0) {
ElMessage.success('批量修改成功')
showBatchEditDialog.value = false
search()
//
selectedRows.value.forEach(row => {
row.checked = false
})
selectedRows.value = []
} else {
ElMessage.error(res.data.message)
}
}).catch(() => {
ElMessage.error('批量修改失败')
})
}
//
const saveEdit = (editForm) => {
let request = {

View File

@ -0,0 +1,16 @@
package com.wms_main.model.vo.wms;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OutsBatchEditDateVo {
private List<String> taskIds; // 任务ID列表
private Date pickingDate; // 统一设置的执行时间
}

View File

@ -62,6 +62,11 @@ public interface ITaskQueryControllerService {
WmsApiResponse<String> editDate(OutsVo outsVo);
// ITaskQueryControllerService.java
WmsApiResponse<String> batchEditDate(OutsBatchEditDateVo batchEditDateVo);
/**
* 更新出库单信息
*

View File

@ -297,6 +297,76 @@ public class TaskQueryControllerServiceImpl implements ITaskQueryControllerServi
}
}
@Override
public WmsApiResponse<String> batchEditDate(OutsBatchEditDateVo batchEditDateVo) {
// 1. 参数校验
if (batchEditDateVo == null || batchEditDateVo.getTaskIds() == null || batchEditDateVo.getTaskIds().isEmpty()) {
return WmsApiResponse.error("任务ID列表不能为空", null);
}
if (StringUtils.isEmpty(String.valueOf(batchEditDateVo.getPickingDate()))) {
return WmsApiResponse.error("请选择执行时间", null);
}
int successCount = 0;
int failCount = 0;
StringBuilder errorMsg = new StringBuilder();
// 2. 遍历任务ID列表逐个更新
for (String taskId : batchEditDateVo.getTaskIds()) {
try {
// 查询原任务
TAppOuts existingOuts = appOutsService.getOne(new LambdaQueryWrapper<TAppOuts>()
.eq(TAppOuts::getTaskId, taskId));
if (existingOuts == null) {
errorMsg.append("任务ID: ").append(taskId).append(" 未找到对应的任务; ");
failCount++;
continue;
}
if (existingOuts.getDistributeNum() > 0) {
errorMsg.append("任务ID: ").append(taskId).append(" 已经开始执行; ");
failCount++;
continue;
}
// 检查是否重复修改
if (existingOuts.getPickingDate() != null && existingOuts.getPickingDate().equals(batchEditDateVo.getPickingDate())) {
errorMsg.append("任务ID: ").append(taskId).append(" 请勿重复修改; ");
failCount++;
continue;
}
// 更新执行时间
existingOuts.setPickingDate(batchEditDateVo.getPickingDate());
// 执行更新操作
boolean updateSuccess = appOutsService.updateById(existingOuts);
if (updateSuccess) {
successCount++;
} else {
errorMsg.append("任务ID: ").append(taskId).append(" 更新失败; ");
failCount++;
}
} catch (Exception e) {
errorMsg.append("任务ID: ").append(taskId).append(" 更新异常: ").append(e.getMessage()).append("; ");
failCount++;
}
}
// 3. 返回结果
if (successCount > 0 && failCount == 0) {
return WmsApiResponse.success("全部执行时间更新成功,共更新" + successCount + "条记录", null);
} else if (successCount > 0 && failCount > 0) {
return WmsApiResponse.success("部分执行时间更新成功,成功" + successCount + "条,失败" + failCount + "条。失败原因:" + errorMsg.toString(), null);
} else {
return WmsApiResponse.error("执行时间更新全部失败。失败原因:" + errorMsg.toString(), null);
}
}
@Override
public WmsApiResponse<String> updateOutsInfo(TAppPickTask appTask) {
if (appTask == null || StringUtils.isEmpty(appTask.getPickId())) {