1. 增加已开始工单的物料需求

2. 增加库位监控界面
This commit is contained in:
梁州 2025-05-09 17:00:28 +08:00
parent 64f1067a8d
commit 78eb0460b0
11 changed files with 15688 additions and 7118 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,40 +1,9 @@
import request from "@/http/request"; import request from "@/http/request";
const getLocations = (params) => { export const queryLocationsByPage = (params) => {
return request({ return request({
url: '/location/getLocationsByPage', url: '/location/queryLocationsByPage',
method: 'post', method: 'post',
data: params data: params
}) })
}
const updateLocation = (params) => {
return request({
url: '/location/updateLocation',
method: 'post',
data: params
})
}
const getELocationsByPage = (params) => {
return request({
url: '/location/getELocationsByPage',
method: 'post',
data: params
})
}
const updateELocationInfo = (params) => {
return request({
url: '/location/updateELocationInfo',
method: 'post',
data: params
})
}
export {
getLocations,
updateLocation,
getELocationsByPage,
updateELocationInfo
} }

View File

@ -42,7 +42,6 @@ const closeTag = (tag) => {
const handleClose = (tag, index) => { const handleClose = (tag, index) => {
// //
if (router.currentRoute.value.path === tag.path) { if (router.currentRoute.value.path === tag.path) {
console.log(index + ':' + tags.value.length)
if (index === (tags.value.length - 1)) { // , if (index === (tags.value.length - 1)) { // ,
router.push('/home') router.push('/home')
} else { // } else { //

View File

@ -263,4 +263,26 @@ export const outTypeOptions = [
value: 9, value: 9,
label: '紧急出库' label: '紧急出库'
} }
]
// 是否锁定枚举
export const lockOptions = [
{
value: 0,
label: '未锁定'
},
{
value: 1,
label: '已锁定'
}
]
// 是否空闲枚举
export const occupyOptions = [
{
value: 0,
label: '空闲'
},
{
value: 1,
label: '占用'
}
] ]

View File

@ -7,23 +7,33 @@
label-width="158px" style="max-width: 100%" status-icon> label-width="158px" style="max-width: 100%" status-icon>
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<el-row> <el-row>
<el-form-item label="任务类型">
<el-select-v2 style="width: 196px" v-model="searchQueryFormEntity.outType" placeholder="任务类型"
:options="addAllOptionOfOptions(outTypeOptions)"
@change="search()"></el-select-v2>
</el-form-item>
<el-form-item label="箱号"> <el-form-item label="箱号">
<el-input v-model="searchQueryFormEntity.vehicleId" @keyup.enter="search()" clearable/> <el-input v-model="searchQueryFormEntity.vehicleId" @keyup.enter="search()" clearable/>
</el-form-item> </el-form-item>
<el-form-item label="料号"> <el-form-item label="料号">
<el-input v-model="searchQueryFormEntity.goodsId" @keyup.enter="search()" clearable/> <el-input v-model="searchQueryFormEntity.goodsId" @keyup.enter="search()" clearable/>
</el-form-item> </el-form-item>
<el-form-item label="创建时间from">
<el-date-picker v-model="searchQueryFormEntity.fromTime" type="datetime"
placeholder="请选择from时间" :shortcuts="shortcuts"
style="width: 196px;" clearable/>
</el-form-item>
<el-form-item label="创建时间to">
<el-date-picker v-model="searchQueryFormEntity.toTime" type="datetime"
placeholder="请选择to时间" :shortcuts="shortcuts"
style="width: 196px;" clearable/>
</el-form-item>
</el-row> </el-row>
<div style="align-content: center;"> <div style="align-content: center;">
<el-row> <el-row>
<el-button type="primary" class="btn-search" @click="search()">查询</el-button> <el-button type="primary" class="btn-search" @click="search()">查询</el-button>
<el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button> <el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button>
</el-row> </el-row>
<el-row>
<el-button type="success" class="btn-search"
@click="exportExcel()">导出excel
</el-button>
</el-row>
</div> </div>
</div> </div>
</el-form> </el-form>
@ -40,36 +50,42 @@
</el-table-column> </el-table-column>
<el-table-column prop="taskId" label="任务号" fixed="left" min-width="120px" sortable="custom" <el-table-column prop="taskId" label="任务号" fixed="left" min-width="120px" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="outType" label="任务类型" fixed="left" :formatter="outsTypeFormat" min-width="120px" <el-table-column prop="taskType" label="任务类型" :formatter="taskTypeFormat" min-width="120px"
sortable="custom" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="taskStatus" label="任务状态" :formatter="taskStatusFormat" min-width="120px"
sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="taskPriority" label="优先级" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="vehicleId" label="箱号" fixed="left" min-width="120px" sortable="custom" <el-table-column prop="vehicleId" label="箱号" fixed="left" min-width="120px" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="goodsId" label="料号" min-width="120px" sortable="custom" <el-table-column prop="goodsId" label="料号" min-width="120px" fixed="left" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="needNum" label="需求数量" <el-table-column prop="goodsDesc" label="物料描述"
min-width="120px" sortable="custom" show-overflow-tooltip/> min-width="120px" sortable="custom" show-overflow-tooltip/>
<el-table-column prop="distributeNum" label="已分配数量" min-width="120px" sortable="custom" <el-table-column prop="opNum" label="操作数量" min-width="120px" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="pickNum" label="已拣选数量" min-width="120px" <el-table-column prop="stockNum" label="库存数量" min-width="120px"
sortable="custom" show-overflow-tooltip/> sortable="custom" show-overflow-tooltip/>
<el-table-column prop="destination" label="目标站台" min-width="120px" sortable="custom" <el-table-column prop="origin" label="起点" min-width="120px" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="userName" label="用户" min-width="120px" <el-table-column prop="destination" label="终点" min-width="120px"
sortable="custom" show-overflow-tooltip/> sortable="custom" show-overflow-tooltip/>
<el-table-column prop="reason" label="原因" min-width="120px" sortable="custom" <el-table-column prop="wcsTaskId" label="wcs任务号" min-width="120px" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="requestTime" label="请求时间" :formatter="timeFormat" min-width="120px" <el-table-column prop="createTime" label="创建时间" :formatter="timeFormat" fixed="right" min-width="120px"
sortable="custom" sortable="custom"
show-overflow-tooltip/> show-overflow-tooltip/>
<!-- <el-table-column fixed="right" label="操作" width="170px"> <el-table-column prop="finishTime" label="完成时间" :formatter="timeFormat" fixed="right" min-width="120px"
<template v-slot="scope"> sortable="custom"
<div style="display: inline-block; align-content: center;"> show-overflow-tooltip/>
<el-button type="primary" <el-table-column prop="opUser" label="操作用户" min-width="120px"
@click="editCurrentRowFormEntity(scope.row)">编辑</el-button> sortable="custom" show-overflow-tooltip/>
</div> <el-table-column prop="remark" label="备注" min-width="120px"
</template> sortable="custom" show-overflow-tooltip/>
</el-table-column> --> <el-table-column prop="callStand" label="呼叫站台" min-width="120px"
sortable="custom" show-overflow-tooltip/>
</el-table> </el-table>
<br/> <br/>
<el-pagination v-model:current-page="baseTableQuery.currentPage" <el-pagination v-model:current-page="baseTableQuery.currentPage"
@ -86,15 +102,13 @@
<script setup> <script setup>
import store from '@/store' import store from '@/store'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import {queryOutsByPage} from '@/api/taskQuery.js' import {queryInTaskRecordByPage} from '@/api/taskQuery.js'
import {timeFormatter, outTaskTypeFormatter} from '@/utils/formatter.js' import {timeFormatter, wmsTaskTypeFormatter, wmsTaskStatusFormatter, dateFormatter} from '@/utils/formatter.js'
import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue' import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue'
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import {genTableRequest} from '@/utils/generator.js' import {genTableRequest} from '@/utils/generator.js'
import {labelPosition} from '@/constant/form.js' import {labelPosition, shortcuts} from '@/constant/form.js'
import {outTypeOptions} from '@/constant/options.js' import {exportInTaskRecordExcel} from '@/api/excel.js'
import {addAllOptionOfOptions} from '@/utils/generator.js'
import {loading} from '@/utils/loading'
/** /**
* 常量定义 * 常量定义
@ -111,14 +125,15 @@ let baseTableQuery = reactive({
currentPage: 1, currentPage: 1,
pageSize: 10, pageSize: 10,
total: 0, total: 0,
sortBy: new Map([['requestTime', true]]),// sortBy: new Map([['createTime', false]]),//
standId: STAND_ID, standId: STAND_ID,
userName: USER_NAME userName: USER_NAME
}) })
let searchQueryFormEntity = reactive({ let searchQueryFormEntity = reactive({
vehicleId: '', vehicleId: '',
goodsId: '', goodsId: '',
outType: -99 fromTime: null,
toTime: null
}) })
let searchQueryFormRef = ref() let searchQueryFormRef = ref()
let taskId = '' let taskId = ''
@ -149,8 +164,9 @@ const search = () => {
// //
request.vehicleId = searchQueryFormEntity.vehicleId.trim() request.vehicleId = searchQueryFormEntity.vehicleId.trim()
request.goodsId = searchQueryFormEntity.goodsId.trim() request.goodsId = searchQueryFormEntity.goodsId.trim()
request.out = searchQueryFormEntity.outType === -99 ? null : searchQueryFormEntity.outType request.fromTime = searchQueryFormEntity.fromTime == null ? null : timeFormatter(searchQueryFormEntity.fromTime)
queryOutsByPage(request).then((res) => { request.toTime = searchQueryFormEntity.toTime == null ? null : timeFormatter(searchQueryFormEntity.toTime)
queryInTaskRecordByPage(request).then((res) => {
const response = res.data const response = res.data
if (response.code === 0) { if (response.code === 0) {
const data = response.data const data = response.data
@ -174,12 +190,14 @@ const search = () => {
const clearQuery = () => { const clearQuery = () => {
searchQueryFormEntity.vehicleId = '' searchQueryFormEntity.vehicleId = ''
searchQueryFormEntity.goodsId = '' searchQueryFormEntity.goodsId = ''
searchQueryFormEntity.fromTime = null
searchQueryFormEntity.toTime = null
} }
const handleSortChange = (data) => { const handleSortChange = (data) => {
if (baseTableQuery.sortBy.has(data.prop)) { if (baseTableQuery.sortBy.has(data.prop)) {
baseTableQuery.sortBy.delete(data.prop) baseTableQuery.sortBy.delete(data.prop)
} }
baseTableQuery.sortBy.set(data.prop, data.order === 'ascending') baseTableQuery.sortBy.set(data.prop, data.order == 'ascending')
search() search()
} }
const getCurrentRow = (row) => { const getCurrentRow = (row) => {
@ -188,8 +206,45 @@ const getCurrentRow = (row) => {
const timeFormat = (row, column, cellValue, index) => { const timeFormat = (row, column, cellValue, index) => {
return timeFormatter(cellValue) return timeFormatter(cellValue)
} }
const outsTypeFormat = (row, column, cellValue, index) => { const taskTypeFormat = (row, column, cellValue, index) => {
return outTaskTypeFormatter(cellValue) return wmsTaskTypeFormatter(cellValue)
}
const taskStatusFormat = (row, column, cellValue, index) => {
return wmsTaskStatusFormatter(cellValue)
}
const exportExcel = () => {
const params = {
goodsId: searchQueryFormEntity.goodsId,
vehicleId: searchQueryFormEntity.vehicleId,
fromTime: searchQueryFormEntity.fromTime == null ? null : timeFormatter(searchQueryFormEntity.fromTime),
toTime: searchQueryFormEntity.toTime == null ? null : timeFormatter(searchQueryFormEntity.toTime),
userName: USER_NAME
}
exportInTaskRecordExcel(params).then(res => {
const link = document.createElement('a');//a
try {
// let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); //blobblobtypexls
let blob = res.data //blob
// let _fileName = res.headers['content-disposition'].split(';')[1].split('=')[1]; //
let _fileName = '入库记录' + dateFormatter(new Date) + '.xlsx'
link.style.display = 'none'//
// URL
const url = window.URL || window.webkitURL || window.moxURL
link.href = url.createObjectURL(blob)
link.setAttribute('download', _fileName.substring(_fileName.lastIndexOf('_') + 1))
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
url.revokeObjectURL(link.href)//url
} catch (e) {
console.log(e)
ElMessage.error('下载文件失败')
}
}).catch(err => {
console.log(err)
ElMessage.error('导出失败')
})
} }
</script> </script>
<style scoped> <style scoped>
@ -250,34 +305,6 @@ const outsTypeFormat = (row, column, cellValue, index) => {
padding-left: 5px; padding-left: 5px;
} }
.my-autocomplete li {
width: 196px;
line-height: normal;
padding: 7px;
}
.my-autocomplete li .name {
text-overflow: ellipsis;
overflow: hidden;
}
.my-autocomplete li .addr {
font-size: 12px;
color: #b4b4b4;
}
.my-autocomplete li .highlighted .addr {
color: #ddd;
}
.my-autocomplete li .goods_id {
color: brown;
}
.my-autocomplete li .goods_name {
color: cornflowerblue;
}
.btn-search { .btn-search {
height: 30px; height: 30px;
width: 80px; width: 80px;

View File

@ -1,185 +0,0 @@
<template>
<div style="margin-bottom: 10px">
<el-config-provider :locale="zhCn">
<el-row style="align-items: center;">
<!-- <span>选择库区</span>
<el-select v-model="areaId" placeholder="请选择库区" style="width: 120px;" @change="getAllLocations">
<el-option label="3楼库区" :value='1' />
<el-option label="2楼库区" :value='2' />
</el-select> -->
<span style="margin-left: 5px;">状态说明</span>
<el-button color="green">空闲</el-button>
<el-button color="red">占用</el-button>
<el-button color="yellow">锁定</el-button>
<el-button color="#00BFFF" style="margin: 0 0 0 auto;" @click="getAllLocations">刷新</el-button>
</el-row>
<hr style="border: 1px solid #ff0000" />
<div>
<el-scrollbar max-height="760px">
<div v-for="currentRowLocation in allLocations">
<span>{{ currentRowLocation.row }}</span>
<div class="row" v-for="currentLayerLocation in currentRowLocation.currentLayerLocations">
<div class="col" v-for="currentColLocation in currentLayerLocation.currentColLocations">
<el-button :color="getLocationStatus(currentColLocation)"
@click="showDialog(currentColLocation)">
<span style="font-size: 15px;">{{ currentColLocation.queue }}{{ currentColLocation.line}}{{ currentColLocation.layer}}</span>
</el-button>
</div>
</div>
<hr style="border: 1px solid #000000" />
</div>
</el-scrollbar>
<el-dialog v-model="dialogVisible" :title="currentLocationTitle" width="30%" draggable :show-close="false">
<el-form :model="location">
<el-form-item label="占用/解除占用库位" :label-width="140">
<el-select v-model="location.locationStatus" placeholder="库位是否占用" style="width: 70%;">
<el-option label="空闲" :value='0' />
<el-option label="占用" :value='1' />
</el-select>
</el-form-item>
<el-form-item label="锁定/解锁库位" :label-width="140">
<el-select v-model="location.isLock" placeholder="库位是否锁定" style="width: 70%;">
<el-option label="解锁" :value='0' />
<el-option label="锁定" :value='1' />
</el-select>
</el-form-item>
<el-form-item label="载具" :label-width="140">
<el-input v-model="location.vehicleId" style="width: 70%;" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitLocationStatus()">
确定
</el-button>
</span>
</template>
</el-dialog>
</div>
</el-config-provider>
</div>
</template>
<script setup>
import store from '@/store'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import { getLocations, updateLocation } from '@/api/location.js'
import { ElMessage, ElLoading } from 'element-plus'
import { errorBox } from '@/utils/myMessageBox.js'
import { reactive } from 'vue'
</script>
<script>
export default {
name: 'location',
data() {
return {
dialogVisible: false,
currentSelectedLocation: {},
allLocations: [],
location: reactive({
locationStatus: '',
isLock: '',
vehicleId: ''
}),
currentLocationTitle: '',
areaId: 1
}
},
mounted() {
this.getAllLocations()
},
methods: {
getLocationStatus: (currentColLocation) => {
if (currentColLocation.isLock === 1) {
return 'yellow'
}
if (currentColLocation.locationStatus === 1) {
return 'red'
}
return 'green'
},
getAllLocations() {
const loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
})
const data = { areaId: this.areaId }
getLocations(data).then(res => {
loading.close()
if (res.data.code == 0) {
console.log(res.data.returnData)
this.allLocations = res.data.returnData
} else {
ElMessage.error(res.data.message)
}
}).catch(err => {
loading.close()
ElMessage.error('查询库位失败!')
})
},
showDialog(currentColLocation) {
this.dialogVisible = true
this.currentSelectedLocation = currentColLocation
this.setCurrentLocationTitle()
this.location.locationStatus = this.currentSelectedLocation.locationStatus
this.location.isLock = this.currentSelectedLocation.isLock
this.location.vehicleId = this.currentSelectedLocation.vehicleId
},
submitLocationStatus() {
const loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
})
this.currentSelectedLocation.locationStatus = this.location.locationStatus
this.currentSelectedLocation.isLock = this.location.isLock
this.currentSelectedLocation.vehicleId = this.location.vehicleId
updateLocation(this.currentSelectedLocation).then(res => {
if (res.data.code == 0) {
loading.close()
this.dialogVisible = false
ElMessage({
message: '更新库位信息成功!',
type: 'success',
})
this.getAllLocations()
} else {
ElMessage.error(res.data.message)
}
}).catch(err => {
loading.close()
ElMessage.error('更新库位信息失败')
})
},
setCurrentLocationTitle() {
this.currentLocationTitle = '当前选择库位:' + this.currentSelectedLocation.queue + '排' + this.currentSelectedLocation.line + '列' + this.currentSelectedLocation.layer + '层'
}
}
}
</script>
<style scoped>
.el-pagination {
padding-left: 5px;
}
.row {
display: flex;
justify-content: space-between;
margin: 5px;
}
.col {
/* width: 100px; */
/* height: 40px; */
padding: 1px;
margin: 1px;
}
.col .el-button {
width: 100px;
height: 50px;
}
</style>

View File

@ -1,200 +1,190 @@
<template> <template>
<el-config-provider :locale="zhCn"> <el-config-provider :locale="zhCn">
<el-container class="content"> <el-container class="content">
<div class="work-area"> <div class="work-area">
<fieldset class="search-area"> <fieldset class="search-area">
<el-form ref="searchQueryFormRef" :model="searchQueryFormEntity" :label-position="labelPosition" <el-form ref="searchQueryFormRef" :model="searchQueryFormEntity" :label-position="labelPosition"
label-width="158px" style="max-width: 100%" status-icon> label-width="158px" style="max-width: 100%" status-icon>
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<el-row> <el-row>
<el-form-item label="任务类型"> <el-form-item label="锁定状态">
<el-select-v2 v-model="searchQueryFormEntity.taskType" placeholder="任务类型" <el-select-v2 style="width: 196px;" v-model="searchQueryFormEntity.isLock" placeholder="锁定状态"
:options="addAllOptionOfOptions(taskTypeOptions)" :options="addAllOptionOfOptions(lockOptions)"
@change="search()"></el-select-v2> @change="search()"></el-select-v2>
</el-form-item> </el-form-item>
<el-form-item label="任务状态"> <el-form-item label="占用状态">
<el-select-v2 v-model="searchQueryFormEntity.taskStatus" placeholder="任务状态" <el-select-v2 style="width: 196px;" v-model="searchQueryFormEntity.isOccupy" placeholder="占用状态"
:options="addAllOptionOfOptions(wmsTaskStatusOptions)" :options="addAllOptionOfOptions(occupyOptions)"
@change="search()"></el-select-v2> @change="search()"></el-select-v2>
</el-form-item> </el-form-item>
<el-form-item label="箱号"> <el-form-item label="库位号">
<el-input v-model="searchQueryFormEntity.vehicleId" @keyup.enter="search()" clearable /> <el-input v-model="searchQueryFormEntity.locationId" @keyup.enter="search()" clearable/>
</el-form-item> </el-form-item>
<el-form-item label="料号"> <el-form-item label="箱号">
<el-input v-model="searchQueryFormEntity.goodsId" @keyup.enter="search()" clearable /> <el-input v-model="searchQueryFormEntity.vehicleId" @keyup.enter="search()" clearable/>
</el-form-item> </el-form-item>
</el-row> </el-row>
<div style="align-content: center;"> <div style="align-content: center;">
<el-row> <el-row>
<el-button type="primary" class="btn-search" @click="search()">查询</el-button> <el-button type="primary" class="btn-search" @click="search()">查询</el-button>
<el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button> <el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button>
</el-row> </el-row>
</div> </div>
</div> </div>
</el-form> </el-form>
</fieldset> </fieldset>
<div class="table-area"> <div class="table-area">
<el-table :data="tableData" stripe border v-loading="tableLoading" class="table-class" <el-table :data="tableData" stripe border v-loading="tableLoading" class="table-class"
:max-height="maxHeight" highlight-current-row @row-click="getCurrentRow" :max-height="maxHeight" highlight-current-row @row-click="getCurrentRow"
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }" :header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }"
@sort-change="handleSortChange"> @sort-change="handleSortChange">
<el-table-column width="65px" fixed="left"> <el-table-column width="65px" fixed="left">
<template v-slot="scope"> <template v-slot="scope">
<el-radio :label="scope.row.taskId" v-model="taskId">&nbsp;</el-radio> <el-radio :label="scope.row.locationId" v-model="locationId">&nbsp;</el-radio>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskId" label="任务号" fixed="left" min-width="120px" sortable="custom" <el-table-column prop="locationId" label="库位号" fixed="left" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="taskType" label="任务类型" fixed="left" :formatter="taskTypeFormat" min-width="120px" sortable="custom" <el-table-column prop="vehicleId" label="箱号" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="taskStatus" label="任务状态" :formatter="taskStatusFormat" fixed="right" min-width="120px" sortable="custom" <el-table-column prop="isLock" label="锁定状态" min-width="120px" :formatter="isLockFormat"
show-overflow-tooltip /> sortable="custom"
<el-table-column prop="taskPriority" label="优先级" min-width="120px" sortable="custom" show-overflow-tooltip/>
show-overflow-tooltip /> <el-table-column prop="isOccupy" label="占用状态" :formatter="isOccupyFormat"
<el-table-column prop="vehicleId" label="箱号" fixed="left" min-width="120px" sortable="custom" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="goodsId" label="料号" min-width="120px" sortable="custom" <el-table-column prop="equipmentId" label="设备号" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="goodsDesc" label="物料描述" <el-table-column prop="tunnelId" label="巷道号" min-width="120px" sortable="custom"
min-width="120px" sortable="custom" show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="opNum" label="操作数量" min-width="120px" sortable="custom" <el-table-column prop="lRow" label="排" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="stockNum" label="库存数量" min-width="120px" <el-table-column prop="lCol" label="列"
sortable="custom" show-overflow-tooltip /> min-width="120px" sortable="custom" show-overflow-tooltip/>
<el-table-column prop="origin" label="起点" min-width="120px" sortable="custom" <el-table-column prop="lLayer" label="层" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="destination" label="终点" min-width="120px" <el-table-column prop="lDepth" label="深度" min-width="120px"
sortable="custom" show-overflow-tooltip /> sortable="custom" show-overflow-tooltip/>
<el-table-column prop="wcsTaskId" label="wcs任务号" min-width="120px" sortable="custom" <el-table-column prop="subArea" label="子区域" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="createTime" label="创建时间" :formatter="timeFormat" min-width="120px" sortable="custom" <!-- <el-table-column fixed="right" label="操作" width="170px">
show-overflow-tooltip /> <template v-slot="scope">
<el-table-column prop="finishTime" label="完成时间" :formatter="timeFormat" min-width="120px" sortable="custom" <div style="display: inline-block; align-content: center;">
show-overflow-tooltip /> <el-button type="primary"
<el-table-column prop="opUser" label="操作用户" min-width="120px" @click="editCurrentRowFormEntity(scope.row)">编辑</el-button>
sortable="custom" show-overflow-tooltip /> </div>
<el-table-column prop="remark" label="备注" min-width="120px" </template>
sortable="custom" show-overflow-tooltip /> </el-table-column> -->
<el-table-column prop="callStand" label="呼叫站台" min-width="120px" </el-table>
sortable="custom" show-overflow-tooltip /> <br/>
<!-- <el-table-column fixed="right" label="操作" width="170px"> <el-pagination v-model:current-page="baseTableQuery.currentPage"
<template v-slot="scope"> v-model:page-size="baseTableQuery.pageSize" :page-sizes="[10, 25, 50]" :small="false"
<div style="display: inline-block; align-content: center;"> :disabled="false" :background="false" :default-page-size="10" @size-change="search"
<el-button type="primary" @current-change="search" layout="total, sizes, prev, pager, next, jumper"
@click="editCurrentRowFormEntity(scope.row)">编辑</el-button> :total="baseTableQuery.total"/>
</div> </div>
</template> <el-dialog v-model="rowEditFlag" title="工作信息" width="40%" draggable :show-close="false">
</el-table-column> --> <el-form ref="rowEditFormRef" :model="rowFormEntity" :label-position="labelPosition"
</el-table> label-width="100px" style="max-width: 100%" status-icon>
<br /> <el-row :gutter="16">
<el-pagination v-model:current-page="baseTableQuery.currentPage" <el-col :span="12" :offset="0">
v-model:page-size="baseTableQuery.pageSize" :page-sizes="[10, 25, 50]" :small="false" <el-form-item label="工作编号">
:disabled="false" :background="false" :default-page-size="10" @size-change="search" <el-input v-model="rowFormEntity.workIndex" disabled/>
@current-change="search" layout="total, sizes, prev, pager, next, jumper" </el-form-item>
:total="baseTableQuery.total" /> </el-col>
</div> <el-col :span="12">
<el-dialog v-model="rowEditFlag" title="工作信息" width="40%" draggable :show-close="false"> <el-form-item label="工单号">
<el-form ref="rowEditFormRef" :model="rowFormEntity" :label-position="labelPosition" <el-input v-model="rowFormEntity.workOrder" disabled/>
label-width="100px" style="max-width: 100%" status-icon> </el-form-item>
<el-row :gutter="16"> </el-col>
<el-col :span="12" :offset="0"> </el-row>
<el-form-item label="工作编号"> <el-row :gutter="16">
<el-input v-model="rowFormEntity.workIndex" disabled /> <el-col :span="12" :offset="0">
</el-form-item> <el-form-item label="总成号">
</el-col> <el-input v-model="rowFormEntity.productId" disabled/>
<el-col :span="12"> </el-form-item>
<el-form-item label="工单号"> </el-col>
<el-input v-model="rowFormEntity.workOrder" disabled /> <el-col :span="12">
</el-form-item> <el-form-item label="成品号">
</el-col> <el-input v-model="rowFormEntity.singleProductId" disabled/>
</el-row> </el-form-item>
<el-row :gutter="16"> </el-col>
<el-col :span="12" :offset="0"> </el-row>
<el-form-item label="总成号"> <el-row :gutter="16">
<el-input v-model="rowFormEntity.productId" disabled /> <el-col :span="12" :offset="0">
</el-form-item> <el-form-item label="料盒号">
</el-col> <el-input v-model="rowFormEntity.boxNo" disabled/>
<el-col :span="12"> </el-form-item>
<el-form-item label="成品号"> </el-col>
<el-input v-model="rowFormEntity.singleProductId" disabled /> <el-col :span="12">
</el-form-item> <el-form-item label="料号">
</el-col> <el-input v-model="rowFormEntity.goodsId" disabled/>
</el-row> </el-form-item>
<el-row :gutter="16"> </el-col>
<el-col :span="12" :offset="0"> </el-row>
<el-form-item label="料盒号"> <el-row :gutter="16">
<el-input v-model="rowFormEntity.boxNo" disabled /> <el-col :span="12" :offset="0">
</el-form-item> <el-form-item label="需求数量">
</el-col> <el-input-number v-model.number="rowFormEntity.needNum" controls-position="right"
<el-col :span="12"> :min="0" disabled/>
<el-form-item label="料号"> </el-form-item>
<el-input v-model="rowFormEntity.goodsId" disabled /> </el-col>
</el-form-item> <el-col :span="12">
</el-col> <el-form-item label="已完成数量">
</el-row> <el-input-number v-model.number="rowFormEntity.finishNum" controls-position="right"
<el-row :gutter="16"> :min="0" :max="rowFormEntity.needNum" clearable/>
<el-col :span="12" :offset="0"> </el-form-item>
<el-form-item label="需求数量"> </el-col>
<el-input-number v-model.number="rowFormEntity.needNum" controls-position="right" </el-row>
:min="0" disabled /> <el-row :gutter="16">
</el-form-item> <el-col :span="12" :offset="0">
</el-col> <el-form-item label="已分配数量">
<el-col :span="12"> <el-input-number v-model.number="rowFormEntity.distributeNum"
<el-form-item label="已完成数量"> controls-position="right" :min="0" :max="rowFormEntity.needNum" clearable/>
<el-input-number v-model.number="rowFormEntity.finishNum" controls-position="right" </el-form-item>
:min="0" :max="rowFormEntity.needNum" clearable /> </el-col>
</el-form-item> </el-row>
</el-col> <el-row :gutter="16">
</el-row> <el-col :span="12" :offset="0">
<el-row :gutter="16"> <el-form-item label="工作状态">
<el-col :span="12" :offset="0"> <el-select-v2 v-model="rowFormEntity.workStatus" placeholder="请选择工作状态"
<el-form-item label="已分配数量"> :options="workStatusOptions"></el-select-v2>
<el-input-number v-model.number="rowFormEntity.distributeNum" </el-form-item>
controls-position="right" :min="0" :max="rowFormEntity.needNum" clearable /> </el-col>
</el-form-item> <el-col :span="12">
</el-col> <el-form-item label="缺料状态">
</el-row> <el-select-v2 v-model="rowFormEntity.lackStatus" placeholder="请选择缺料状态"
<el-row :gutter="16"> :options="lackStatusOptions"></el-select-v2>
<el-col :span="12" :offset="0"> </el-form-item>
<el-form-item label="工作状态"> </el-col>
<el-select-v2 v-model="rowFormEntity.workStatus" placeholder="请选择工作状态" </el-row>
:options="workStatusOptions"></el-select-v2> </el-form>
</el-form-item> <template #footer>
</el-col>
<el-col :span="12">
<el-form-item label="缺料状态">
<el-select-v2 v-model="rowFormEntity.lackStatus" placeholder="请选择缺料状态"
:options="lackStatusOptions"></el-select-v2>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button type="primary" @click="rowEditFlag = false">取消</el-button> <el-button type="primary" @click="rowEditFlag = false">取消</el-button>
<el-button type="success" @click="submitUpdateRow(rowFormEntity)"> <el-button type="success" @click="submitUpdateRow(rowFormEntity)">
确定 确定
</el-button> </el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
</el-container> </el-container>
</el-config-provider> </el-config-provider>
</template> </template>
<script setup> <script setup>
import store from '@/store' import store from '@/store'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import { queryTasksByPage } from '@/api/taskQuery.js' import {timeFormatter} from '@/utils/formatter.js'
import { timeFormatter, wmsTaskTypeFormatter, wmsTaskStatusFormatter } from '@/utils/formatter.js' import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue'
import { ref, reactive, onMounted, nextTick, onBeforeUnmount } from 'vue' import {ElMessage} from 'element-plus'
import { ElMessage } from 'element-plus' import {genTableRequest, addAllOptionOfOptions} from '@/utils/generator.js'
import { genTableRequest } from '@/utils/generator.js' import {labelPosition} from '@/constant/form.js'
import { labelPosition } from '@/constant/form.js' import {loading} from '@/utils/loading'
import { taskTypeOptions, wmsTaskStatusOptions } from '@/constant/options.js' import {queryLocationsByPage} from "@/api/location";
import { addAllOptionOfOptions } from '@/utils/generator.js' import {lockOptions, occupyOptions} from "@/constant/options";
import { loading } from '@/utils/loading'
/** /**
* 常量定义 * 常量定义
*/ */
@ -207,259 +197,259 @@ let maxHeight = ref(window.innerHeight * 0.55)
let tableLoading = ref(false) let tableLoading = ref(false)
let tableData = ref([]) let tableData = ref([])
let baseTableQuery = reactive({ let baseTableQuery = reactive({
currentPage: 1, currentPage: 1,
pageSize: 10, pageSize: 10,
total: 0, total: 0,
sortBy: new Map([['createTime', true]]),// sortBy: new Map([['lDepth', true], ['lLayer', true], ['lCol', true], ['lRow', true]]),//
standId: STAND_ID, standId: STAND_ID,
userName: USER_NAME userName: USER_NAME
}) })
let searchQueryFormEntity = reactive({ let searchQueryFormEntity = reactive({
vehicleId: '', locationId: '',
goodsId: '', vehicleId: '',
taskType: -99, isLock: -99,
taskStatus: -99 isOccupy: -99
}) })
let searchQueryFormRef = ref() let searchQueryFormRef = ref()
let rowEditFlag = ref(false) let rowEditFlag = ref(false)
let taskId = '' let locationId = ''
let rowEditFormRef = ref() let rowEditFormRef = ref()
let rowFormEntity = reactive({}) let rowFormEntity = reactive({})
/** /**
* 系统方法 * 系统方法
*/ */
onMounted(() => { onMounted(() => {
nextTick(() => { nextTick(() => {
window.addEventListener('resize', resizeHeight) window.addEventListener('resize', resizeHeight)
search() search()
}) })
}) })
onBeforeUnmount(() => { onBeforeUnmount(() => {
nextTick(() => { nextTick(() => {
window.removeEventListener('resize', resizeHeight) window.removeEventListener('resize', resizeHeight)
}) })
}) })
const resizeHeight = () => { const resizeHeight = () => {
maxHeight.value = window.innerHeight * 0.55 maxHeight.value = window.innerHeight * 0.55
} }
/** /**
* 自定义方法 * 自定义方法
*/ */
// //
const search = () => { const search = () => {
tableLoading.value = true tableLoading.value = true
let request = genTableRequest(baseTableQuery) let request = genTableRequest(baseTableQuery)
// //
request.vehicleId = searchQueryFormEntity.vehicleId.trim() request.locationId = searchQueryFormEntity.locationId.trim()
request.goodsId = searchQueryFormEntity.goodsId.trim() request.vehicleId = searchQueryFormEntity.vehicleId.trim()
request.taskType = searchQueryFormEntity.taskType == -99 ? null : searchQueryFormEntity.taskType request.isLock = searchQueryFormEntity.isLock === -99 ? null : searchQueryFormEntity.isLock
request.taskStatus = searchQueryFormEntity.taskStatus == -99 ? null : searchQueryFormEntity.taskStatus request.isOccupy = searchQueryFormEntity.isOccupy === -99 ? null : searchQueryFormEntity.isOccupy
queryTasksByPage(request).then((res) => { queryLocationsByPage(request).then((res) => {
const response = res.data const response = res.data
if (response.code == 0) { if (response.code === 0) {
const data = response.data const data = response.data
if (data != null) { if (data != null) {
tableData.value = data.lists tableData.value = data.lists
baseTableQuery.total = data.total baseTableQuery.total = data.total
} else { } else {
tableData.value = [] tableData.value = []
baseTableQuery.total = 0 baseTableQuery.total = 0
} }
} else { } else {
ElMessage.error(response.message) ElMessage.error(response.message)
} }
}).catch(err => { }).catch(err => {
console.log(err) console.log(err)
ElMessage.error('查询数据异常。') ElMessage.error('查询数据异常。')
}).finally(() => { }).finally(() => {
tableLoading.value = false tableLoading.value = false
}) })
} }
const clearQuery = () => { const clearQuery = () => {
searchQueryFormEntity.vehicleId = '' searchQueryFormEntity.locationId = ''
searchQueryFormEntity.goodsId = '' searchQueryFormEntity.vehicleId = ''
} }
const handleSortChange = (data) => { const handleSortChange = (data) => {
if (baseTableQuery.sortBy.has(data.prop)) { if (baseTableQuery.sortBy.has(data.prop)) {
baseTableQuery.sortBy.delete(data.prop) baseTableQuery.sortBy.delete(data.prop)
} }
baseTableQuery.sortBy.set(data.prop, data.order == 'ascending') baseTableQuery.sortBy.set(data.prop, data.order.toLowerCase() === 'ascending')
search() search()
} }
const getCurrentRow = (row) => { const getCurrentRow = (row) => {
taskId = row.taskId locationId = row.locationId
} }
const timeFormat = (row, column, cellValue, index) => { const timeFormat = (row, column, cellValue, index) => {
return timeFormatter(cellValue) return timeFormatter(cellValue)
} }
const taskTypeFormat = (row, column, cellValue, index) => { const isLockFormat = (row, column, cellValue, index) => {
return wmsTaskTypeFormatter(cellValue) return cellValue === 1 ? '已锁定' : '未锁定'
} }
const taskStatusFormat = (row, column, cellValue, index) => { const isOccupyFormat = (row, column, cellValue, index) => {
return wmsTaskStatusFormatter(cellValue) return cellValue === 1 ? '占用' : '空闲'
} }
// //
const editCurrentRowFormEntity = (row) => { const editCurrentRowFormEntity = (row) => {
// form // form
rowFormEntity.workIndex = row.workIndex rowFormEntity.workIndex = row.workIndex
rowFormEntity.workOrder = row.workOrder rowFormEntity.workOrder = row.workOrder
rowFormEntity.productId = row.productId rowFormEntity.productId = row.productId
rowFormEntity.singleProductId = row.singleProductId rowFormEntity.singleProductId = row.singleProductId
rowFormEntity.boxNo = row.boxNo rowFormEntity.boxNo = row.boxNo
rowFormEntity.goodsId = row.goodsId rowFormEntity.goodsId = row.goodsId
rowFormEntity.needNum = row.needNum rowFormEntity.needNum = row.needNum
rowFormEntity.distributeNum = row.distributeNum rowFormEntity.distributeNum = row.distributeNum
rowFormEntity.finishNum = row.finishNum rowFormEntity.finishNum = row.finishNum
rowFormEntity.workStatus = row.workStatus rowFormEntity.workStatus = row.workStatus
rowFormEntity.lackStatus = row.lackStatus rowFormEntity.lackStatus = row.lackStatus
// //
rowEditFlag.value = true rowEditFlag.value = true
} }
// //
const closeLackWork = (row) => { const closeLackWork = (row) => {
const request = { const request = {
workIndex: row.workIndex, workIndex: row.workIndex,
standId: STAND_ID, standId: STAND_ID,
userName: USER_NAME userName: USER_NAME
}
loading.open('关闭中...')
closeCurrentWorks(request).then(res => {
const response = res.data
if (response.code == 0) {
ElMessage.success(response.message)
search()
} else {
ElMessage.error(response.message)
} }
loading.open('关闭中...') }).catch(err => {
closeCurrentWorks(request).then(res => { console.log(err)
const response = res.data ElMessage.error('请求异常。')
if (response.code == 0) { }).finally(() => {
ElMessage.success(response.message) loading.close()
search() })
} else {
ElMessage.error(response.message)
}
}).catch(err => {
console.log(err)
ElMessage.error('请求异常。')
}).finally(() => {
loading.close()
})
} }
// //
const submitUpdateRow = (rowFormEntity) => { const submitUpdateRow = (rowFormEntity) => {
const request = { const request = {
workIndex: rowFormEntity.workIndex, workIndex: rowFormEntity.workIndex,
distributeNum: rowFormEntity.distributeNum, distributeNum: rowFormEntity.distributeNum,
finishNum: rowFormEntity.finishNum, finishNum: rowFormEntity.finishNum,
workStatus: rowFormEntity.workStatus, workStatus: rowFormEntity.workStatus,
lackStatus: rowFormEntity.lackStatus, lackStatus: rowFormEntity.lackStatus,
standId: STAND_ID, standId: STAND_ID,
userName: USER_NAME userName: USER_NAME
}
loading.open('更新中...')
updateKateWorks(request).then(res => {
if (res.data.code == 0) {
ElMessage.success('更新数据成功。')
rowEditFlag.value = false
search()
} else {
ElMessage.error('更新数据失败。')
} }
loading.open('更新中...') }).catch(err => {
updateKateWorks(request).then(res => { console.log(err)
if (res.data.code == 0) { ElMessage.error('更新数据异常。')
ElMessage.success('更新数据成功。') }).finally(() => {
rowEditFlag.value = false loading.close()
search() })
} else {
ElMessage.error('更新数据失败。')
}
}).catch(err => {
console.log(err)
ElMessage.error('更新数据异常。')
}).finally(() => {
loading.close()
})
} }
</script> </script>
<style scoped> <style scoped>
.content { .content {
display: flex; display: flex;
width: 100%; width: 100%;
} }
.work-area { .work-area {
width: 100%; width: 100%;
/* padding: 5px; */ /* padding: 5px; */
} }
.search-area { .search-area {
margin: auto; margin: auto;
min-height: fit-content; min-height: fit-content;
max-height: 40%; max-height: 40%;
margin-bottom: 10px; margin-bottom: 10px;
min-width: inherit; min-width: inherit;
border: solid 1px; border: solid 1px;
border-radius: 10px; border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000; box-shadow: 0px 15px 10px -15px #000;
overflow: auto; overflow: auto;
padding: 10px; padding: 10px;
} }
.table-area { .table-area {
margin: auto; margin: auto;
min-height: fit-content; min-height: fit-content;
max-height: 60%; max-height: 60%;
margin-bottom: 10px; margin-bottom: 10px;
min-width: inherit; min-width: inherit;
border: solid 1px; border: solid 1px;
border-radius: 10px; border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000; box-shadow: 0px 15px 10px -15px #000;
overflow: auto; overflow: auto;
padding: 10px; padding: 10px;
} }
.el-form-item { .el-form-item {
margin: 5px 5px 5px 5px; margin: 5px 5px 5px 5px;
} }
.el-form-item .el-input { .el-form-item .el-input {
width: 196px; width: 196px;
} }
.el-form-item .el-input-number { .el-form-item .el-input-number {
width: 196px; width: 196px;
} }
.el-form-item .el-select-v2 { .el-form-item .el-select-v2 {
width: 196px; width: 196px;
} }
.table-class { .table-class {
margin: 5px 5px 5px 5px; margin: 5px 5px 5px 5px;
width: inherit; width: inherit;
} }
.el-pagination { .el-pagination {
padding-left: 5px; padding-left: 5px;
} }
.my-autocomplete li { .my-autocomplete li {
width: 196px; width: 196px;
line-height: normal; line-height: normal;
padding: 7px; padding: 7px;
} }
.my-autocomplete li .name { .my-autocomplete li .name {
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
} }
.my-autocomplete li .addr { .my-autocomplete li .addr {
font-size: 12px; font-size: 12px;
color: #b4b4b4; color: #b4b4b4;
} }
.my-autocomplete li .highlighted .addr { .my-autocomplete li .highlighted .addr {
color: #ddd; color: #ddd;
} }
.my-autocomplete li .goods_id { .my-autocomplete li .goods_id {
color: brown; color: brown;
} }
.my-autocomplete li .goods_name { .my-autocomplete li .goods_name {
color: cornflowerblue; color: cornflowerblue;
} }
.btn-search { .btn-search {
height: 30px; height: 30px;
width: 80px; width: 80px;
margin: auto 5px 5px auto; margin: auto 5px 5px auto;
color: black; color: black;
} }
</style> </style>

View File

@ -1,337 +1,455 @@
<template> <template>
<div style="margin-bottom: 10px; height: 100%; padding-left: 1%; padding-right: 1%;"> <el-config-provider :locale="zhCn">
<el-config-provider :locale="zhCn"> <el-container class="content">
<div class="work-area">
<fieldset class="search-area">
<el-form ref="searchQueryFormRef" :model="searchQueryFormEntity" :label-position="labelPosition"
label-width="158px" style="max-width: 100%" status-icon>
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<el-row>
<el-form-item label="锁定状态">
<el-select-v2 style="width: 196px;" v-model="searchQueryFormEntity.isLock" placeholder="锁定状态"
:options="addAllOptionOfOptions(lockOptions)"
@change="search()"></el-select-v2>
</el-form-item>
<el-form-item label="占用状态">
<el-select-v2 style="width: 196px;" v-model="searchQueryFormEntity.isOccupy" placeholder="占用状态"
:options="addAllOptionOfOptions(occupyOptions)"
@change="search()"></el-select-v2>
</el-form-item>
<el-form-item label="库位号">
<el-input v-model="searchQueryFormEntity.locationId" @keyup.enter="search()" clearable/>
</el-form-item>
<el-form-item label="箱号">
<el-input v-model="searchQueryFormEntity.vehicleId" @keyup.enter="search()" clearable/>
</el-form-item>
</el-row>
<div style="align-content: center;">
<el-row> <el-row>
<el-input v-model="standIdQuery" style="width: 158px; margin-right: 10px;" placeholder="站台号" <el-button type="primary" class="btn-search" @click="search()">查询</el-button>
:suffix-icon="Search" /> <el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button>
<el-select-v2 v-model="standTypeQuery" style="width: 158px; margin-right: 10px;"
placeholder="请选择站台类型" :options="standTypeOptions" @change="search()"></el-select-v2>
<el-button type="primary" @click="search()">搜索</el-button>
<el-button type="warning" @click="reset()">重置</el-button>
</el-row> </el-row>
</div>
</div> </div>
<br /> </el-form>
<el-table :data="standList" stripe border v-loading="loading" class="table-class" highlight-current-row </fieldset>
max-height="650px" @row-click="getCurrentRow" :header-cell-style="{ 'text-align': 'center' }" <div class="table-area">
:cell-style="{ 'text-align': 'center' }"> <el-table :data="tableData" stripe border v-loading="tableLoading" class="table-class"
<el-table-column width="65px" fixed="left"> :max-height="maxHeight" highlight-current-row @row-click="getCurrentRow"
<template v-slot="scope"> :header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }"
<el-radio :label="scope.row.standId" v-model="standId">&nbsp;</el-radio> @sort-change="handleSortChange">
</template> <el-table-column width="65px" fixed="left">
</el-table-column> <template v-slot="scope">
<el-table-column prop="standId" label="id" fixed="left" min-width="120px" show-overflow-tooltip /> <el-radio :label="scope.row.locationId" v-model="locationId">&nbsp;</el-radio>
<el-table-column prop="allowIn" label="允许入库" min-width="120px" show-overflow-tooltip /> </template>
<el-table-column prop="allowOut" label="允许出库" min-width="120px" show-overflow-tooltip /> </el-table-column>
<el-table-column prop="isLock" label="锁定" :formatter="isLockFormat" min-width="120px" <el-table-column prop="locationId" label="库位号" fixed="left" min-width="120px" sortable="custom"
show-overflow-tooltip /> show-overflow-tooltip/>
<el-table-column prop="standStatus" label="状态" :formatter="standStatusFormat" show-overflow-tooltip <el-table-column prop="vehicleId" label="箱号" min-width="120px" sortable="custom"
min-width="120px" /> show-overflow-tooltip/>
<el-table-column prop="equipmentId" label="设备号" min-width="120px" show-overflow-tooltip /> <el-table-column prop="isLock" label="锁定状态" min-width="120px" :formatter="isLockFormat"
<el-table-column prop="areaId" label="区域" min-width="120px" /> sortable="custom"
<el-table-column prop="standType" label="类型" :formatter="standTypeFormat" min-width="120px" /> show-overflow-tooltip/>
<el-table-column prop="standIp" label="电脑ip地址" min-width="120px" /> <el-table-column prop="isOccupy" label="占用状态" :formatter="isOccupyFormat"
<el-table-column prop="outerId" label="外部编号" min-width="120px" /> min-width="120px" sortable="custom"
<el-table-column prop="lastUseTime" label="上次使用时间" :formatter="timeFormat" min-width="120px" show-overflow-tooltip/>
show-overflow-tooltip /> <el-table-column prop="equipmentId" label="设备号" min-width="120px" sortable="custom"
<el-table-column prop="pickGoods" label="拣选料号" show-overflow-tooltip min-width="120px" /> show-overflow-tooltip/>
<el-table-column prop="pickVehicle" label="拣选箱号" show-overflow-tooltip min-width="120px" /> <el-table-column prop="tunnelId" label="巷道号" min-width="120px" sortable="custom"
<el-table-column prop="pickTip" label="提示" show-overflow-tooltip min-width="120px" /> show-overflow-tooltip/>
<el-table-column prop="pickVehicleCount" label="站台料箱数量" min-width="120px" /> <el-table-column prop="lRow" label="排" min-width="120px" sortable="custom"
<el-table-column fixed="right" label="操作" width="120px"> show-overflow-tooltip/>
<template v-slot="scope"> <el-table-column prop="lCol" label="列"
<el-button plain type="primary" @click="editCurrentRow(scope.row)">编辑</el-button> min-width="120px" sortable="custom" show-overflow-tooltip/>
</template> <el-table-column prop="lLayer" label="层" min-width="120px" sortable="custom"
</el-table-column> show-overflow-tooltip/>
</el-table> <el-table-column prop="lDepth" label="深度" min-width="120px"
<br /> sortable="custom" show-overflow-tooltip/>
<el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :page-sizes="[10, 25, 50]" <el-table-column prop="subArea" label="子区域" min-width="120px" sortable="custom"
:small="false" :disabled="false" :background="false" :default-page-size="10" show-overflow-tooltip/>
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="search" <!-- <el-table-column fixed="right" label="操作" width="170px">
@current-change="search" /> <template v-slot="scope">
<el-dialog v-model="dialogVisible" title="编辑站台信息" width="40%" draggable :show-close="false"> <div style="display: inline-block; align-content: center;">
<div <el-button type="primary"
style="max-width: 100%; max-height: 500px; overflow: auto; display: flex; justify-content: center;"> @click="editCurrentRowFormEntity(scope.row)">编辑</el-button>
<el-form ref="standFormRef" :model="standFormEntity" :label-position="labelPosition" </div>
label-width="100px" style="width: 95%;" :rules="rules" status-icon>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="站台号" prop="standId">
<el-input v-model="standFormEntity.standId" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="isLock">
<el-select-v2 v-model="standFormEntity.standType" placeholder="请选择类型"
:options="standTypeOptions" disabled></el-select-v2>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="锁定" prop="isLock">
<el-select-v2 v-model="standFormEntity.isLock" placeholder="请选择是否锁定"
:options="isLockOptions"></el-select-v2>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="standStatus">
<el-select-v2 v-model="standFormEntity.standStatus" placeholder="请选择站台状态"
:options="standStatusOptions"></el-select-v2>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="上次使用时间" prop="lastUseTime">
<el-input v-model="standFormEntity.lastUseTime" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="站台料箱数量" prop="pickVehicleCount">
<el-input-number v-model.number="standFormEntity.pickVehicleCount"
controls-position="right" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitInfo(standFormEntity)">
确定
</el-button>
</span>
</template> </template>
</el-dialog> </el-table-column> -->
</el-config-provider> </el-table>
</div> <br/>
<el-pagination v-model:current-page="baseTableQuery.currentPage"
v-model:page-size="baseTableQuery.pageSize" :page-sizes="[10, 25, 50]" :small="false"
:disabled="false" :background="false" :default-page-size="10" @size-change="search"
@current-change="search" layout="total, sizes, prev, pager, next, jumper"
:total="baseTableQuery.total"/>
</div>
<el-dialog v-model="rowEditFlag" title="工作信息" width="40%" draggable :show-close="false">
<el-form ref="rowEditFormRef" :model="rowFormEntity" :label-position="labelPosition"
label-width="100px" style="max-width: 100%" status-icon>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="工作编号">
<el-input v-model="rowFormEntity.workIndex" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工单号">
<el-input v-model="rowFormEntity.workOrder" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="总成号">
<el-input v-model="rowFormEntity.productId" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成品号">
<el-input v-model="rowFormEntity.singleProductId" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="料盒号">
<el-input v-model="rowFormEntity.boxNo" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="料号">
<el-input v-model="rowFormEntity.goodsId" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="需求数量">
<el-input-number v-model.number="rowFormEntity.needNum" controls-position="right"
:min="0" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="已完成数量">
<el-input-number v-model.number="rowFormEntity.finishNum" controls-position="right"
:min="0" :max="rowFormEntity.needNum" clearable/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="已分配数量">
<el-input-number v-model.number="rowFormEntity.distributeNum"
controls-position="right" :min="0" :max="rowFormEntity.needNum" clearable/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="工作状态">
<el-select-v2 v-model="rowFormEntity.workStatus" placeholder="请选择工作状态"
:options="workStatusOptions"></el-select-v2>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="缺料状态">
<el-select-v2 v-model="rowFormEntity.lackStatus" placeholder="请选择缺料状态"
:options="lackStatusOptions"></el-select-v2>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="rowEditFlag = false">取消</el-button>
<el-button type="success" @click="submitUpdateRow(rowFormEntity)">
确定
</el-button>
</span>
</template>
</el-dialog>
</div>
</el-container>
</el-config-provider>
</template> </template>
<script setup> <script setup>
import store from '@/store' import store from '@/store'
import { getStandsByPage, updateStandInfo } from '@/api/stand.js'
import { errorBox } from '@/utils/myMessageBox.js'
import { ElMessage } from 'element-plus'
import { ref, reactive } from 'vue'
import { dateFormatter, timeFormatter } from '@/utils/formatter.js'
import { Search } from '@element-plus/icons-vue'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
</script> import {timeFormatter} from '@/utils/formatter.js'
<script> import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue'
export default { import {ElMessage} from 'element-plus'
name: 'standSettings', import {genTableRequest, addAllOptionOfOptions} from '@/utils/generator.js'
data() { import {labelPosition} from '@/constant/form.js'
return { import {loading} from '@/utils/loading'
standList: [], import {queryLocationsByPage} from "@/api/location";
currentPage: 1, import {lockOptions, occupyOptions} from "@/constant/options";
pageSize: 10,
total: 0, /**
standIdQuery: '', * 常量定义
standTypeQuery: -99, */
loading: true, const STAND_ID = store.getters.getStandId
dialogVisible: false, const USER_NAME = store.getters.getUserName
standId: '', /**
standFormEntity: reactive({}), * 变量定义
standFormRef: ref(), */
labelPosition: 'top', let maxHeight = ref(window.innerHeight * 0.55)
rules: reactive({}), let tableLoading = ref(false)
standTypeOptions: [ let tableData = ref([])
{ let baseTableQuery = reactive({
value: -99, currentPage: 1,
label: '全部' pageSize: 10,
}, total: 0,
{ sortBy: new Map([['lDepth', true], ['lLayer', true], ['lCol', true], ['lRow', true]]),//
value: 1, standId: STAND_ID,
label: '入库站台' userName: USER_NAME
}, })
{ let searchQueryFormEntity = reactive({
value: 2, locationId: '',
label: '备料站台' vehicleId: '',
}, isLock: -99,
{ isOccupy: -99
value: 3, })
label: '堆垛机' let searchQueryFormRef = ref()
} let rowEditFlag = ref(false)
], let locationId = ''
isLockOptions: [ let rowEditFormRef = ref()
{ let rowFormEntity = reactive({})
value: 0, /**
label: '未锁定' * 系统方法
}, */
{ onMounted(() => {
value: 1, nextTick(() => {
label: '已锁定' window.addEventListener('resize', resizeHeight)
}, search()
], })
standStatusOptions: [ })
{ onBeforeUnmount(() => {
value: 0, nextTick(() => {
label: '可用' window.removeEventListener('resize', resizeHeight)
}, })
{ })
value: 1, const resizeHeight = () => {
label: '不可用' maxHeight.value = window.innerHeight * 0.55
}, }
], /**
} * 自定义方法
}, */
mounted() { //
this.search() const search = () => {
}, tableLoading.value = true
methods: { let request = genTableRequest(baseTableQuery)
search() { //
this.loading = true request.locationId = searchQueryFormEntity.locationId.trim()
const request = { request.vehicleId = searchQueryFormEntity.vehicleId.trim()
pageNo: this.currentPage, request.isLock = searchQueryFormEntity.isLock === -99 ? null : searchQueryFormEntity.isLock
pageSize: this.pageSize, request.isOccupy = searchQueryFormEntity.isOccupy === -99 ? null : searchQueryFormEntity.isOccupy
standId: this.standIdQuery.trim(), queryLocationsByPage(request).then((res) => {
standType: this.standTypeQuery == -99 ? null : this.standTypeQuery, const response = res.data
userName: store.getters.getUserName if (response.code === 0) {
} const data = response.data
getStandsByPage(request).then(res => { if (data != null) {
const tableResponse = res.data tableData.value = data.lists
if (tableResponse.code == 0) { baseTableQuery.total = data.total
this.standList = tableResponse.returnData.lists } else {
this.total = tableResponse.returnData.total tableData.value = []
} else { baseTableQuery.total = 0
errorBox(tableResponse.message) }
} } else {
}).catch(err => { ElMessage.error(response.message)
console.log(err) }
errorBox('查询站台信息错误') }).catch(err => {
}) console.log(err)
this.loading = false ElMessage.error('查询数据异常。')
}, }).finally(() => {
dateFormat: (row, column, cellValue, index) => { tableLoading.value = false
return dateFormatter(cellValue) })
}, }
timeFormat: (row, column, cellValue, index) => { const clearQuery = () => {
return timeFormatter(cellValue) searchQueryFormEntity.locationId = ''
}, searchQueryFormEntity.vehicleId = ''
standTypeFormat: (row, column, cellValue, index) => { }
switch (cellValue) { const handleSortChange = (data) => {
case 1: if (baseTableQuery.sortBy.has(data.prop)) {
return '入库站台' baseTableQuery.sortBy.delete(data.prop)
case 2: }
return '备料站台' baseTableQuery.sortBy.set(data.prop, data.order.toLowerCase() === 'ascending')
case 3: search()
return '堆垛机' }
default: const getCurrentRow = (row) => {
return '未知' locationId = row.locationId
} }
}, const timeFormat = (row, column, cellValue, index) => {
isLockFormat: (row, column, cellValue, index) => { return timeFormatter(cellValue)
switch (cellValue) { }
case 0: const isLockFormat = (row, column, cellValue, index) => {
return '未锁定' return cellValue === 1 ? '已锁定' : '未锁定'
case 1: }
return '已锁定' const isOccupyFormat = (row, column, cellValue, index) => {
default: return cellValue === 1 ? '占用' : '空闲'
return '未知' }
} //
}, const editCurrentRowFormEntity = (row) => {
standStatusFormat: (row, column, cellValue, index) => { // form
switch (cellValue) { rowFormEntity.workIndex = row.workIndex
case 0: rowFormEntity.workOrder = row.workOrder
return '可用' rowFormEntity.productId = row.productId
case 1: rowFormEntity.singleProductId = row.singleProductId
return '不可用' rowFormEntity.boxNo = row.boxNo
default: rowFormEntity.goodsId = row.goodsId
return '未知' rowFormEntity.needNum = row.needNum
} rowFormEntity.distributeNum = row.distributeNum
}, rowFormEntity.finishNum = row.finishNum
reset() { rowFormEntity.workStatus = row.workStatus
this.standIdQuery = '' rowFormEntity.lackStatus = row.lackStatus
this.standTypeQuery = -99 //
this.search() rowEditFlag.value = true
}, }
editCurrentRow(row) { //
this.standId = row.standId const closeLackWork = (row) => {
this.standFormEntity = { const request = {
standId: row.standId, workIndex: row.workIndex,
standType: row.standType, standId: STAND_ID,
isLock: row.isLock, userName: USER_NAME
standStatus: row.standStatus, }
lastUseTime: row.lastUseTime, loading.open('关闭中...')
pickVehicleCount: row.pickVehicleCount, closeCurrentWorks(request).then(res => {
} const response = res.data
this.dialogVisible = true if (response.code == 0) {
}, ElMessage.success(response.message)
submitInfo(formData) { search()
const params = { } else {
standId: formData.standId, ElMessage.error(response.message)
standType: formData.standType, }
isLock: formData.isLock, }).catch(err => {
standStatus: formData.standStatus, console.log(err)
lastUseTime: formData.lastUseTime, ElMessage.error('请求异常。')
pickVehicleCount: formData.pickVehicleCount, }).finally(() => {
userName: store.getters.getUserName loading.close()
} })
updateStandInfo(params).then(res => { }
if (res.data.code == 0) { //
this.dialogVisible = false const submitUpdateRow = (rowFormEntity) => {
ElMessage.success('更新站台信息成功。') const request = {
this.search() workIndex: rowFormEntity.workIndex,
} else { distributeNum: rowFormEntity.distributeNum,
errorBox(res.data.message) finishNum: rowFormEntity.finishNum,
} workStatus: rowFormEntity.workStatus,
}).catch(err => { lackStatus: rowFormEntity.lackStatus,
console.log(err) standId: STAND_ID,
errorBox('更新站台信息失败。') userName: USER_NAME
}) }
}, loading.open('更新中...')
getCurrentRow(row) { updateKateWorks(request).then(res => {
this.standId = row.standId if (res.data.code == 0) {
}, ElMessage.success('更新数据成功。')
}, rowEditFlag.value = false
search()
} else {
ElMessage.error('更新数据失败。')
}
}).catch(err => {
console.log(err)
ElMessage.error('更新数据异常。')
}).finally(() => {
loading.close()
})
} }
</script> </script>
<style scoped> <style scoped>
.el-pagination { .content {
padding-left: 5px; display: flex;
width: 100%;
} }
.el-row .el-button { .work-area {
width: 72px; width: 100%;
margin-left: 0px; /* padding: 5px; */
margin-right: 5px; }
.search-area {
margin: auto;
min-height: fit-content;
max-height: 40%;
margin-bottom: 10px;
min-width: inherit;
border: solid 1px;
border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000;
overflow: auto;
padding: 10px;
}
.table-area {
margin: auto;
min-height: fit-content;
max-height: 60%;
margin-bottom: 10px;
min-width: inherit;
border: solid 1px;
border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000;
overflow: auto;
padding: 10px;
}
.el-form-item {
margin: 5px 5px 5px 5px;
}
.el-form-item .el-input {
width: 196px;
}
.el-form-item .el-input-number {
width: 196px;
}
.el-form-item .el-select-v2 {
width: 196px;
} }
.table-class { .table-class {
width: 100%; margin: 5px 5px 5px 5px;
width: inherit;
} }
.el-row .el-form-item { .el-pagination {
width: 10% inherit; padding-left: 5px;
justify-content: center;
} }
.el-row .el-form-item .el-select-v2 { .my-autocomplete li {
width: 100% !important; width: 196px;
line-height: normal;
padding: 7px;
} }
.el-row .el-form-item .el-input-number { .my-autocomplete li .name {
width: 100% !important; text-overflow: ellipsis;
overflow: hidden;
} }
.el-row .el-form-item .el-button { .my-autocomplete li .addr {
margin: auto; font-size: 12px;
color: #b4b4b4;
} }
.title-area { .my-autocomplete li .highlighted .addr {
display: flex; color: #ddd;
/* min-height: 10%; */ }
max-height: max-content;
margin-bottom: 10px; .my-autocomplete li .goods_id {
min-width: inherit; color: brown;
border: solid 1px; }
border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000; .my-autocomplete li .goods_name {
overflow: auto; color: cornflowerblue;
flex-direction: column; }
padding: 10px;
.btn-search {
height: 30px;
width: 80px;
margin: auto 5px 5px auto;
color: black;
} }
</style> </style>

View File

@ -10,7 +10,7 @@
<el-form-item label="料号"> <el-form-item label="料号">
<el-input v-model="searchQueryFormEntity.goodsId" clearable/> <el-input v-model="searchQueryFormEntity.goodsId" clearable/>
</el-form-item> </el-form-item>
<el-form-item label="载具号"> <el-form-item label="号">
<el-input v-model="searchQueryFormEntity.vehicleId" clearable/> <el-input v-model="searchQueryFormEntity.vehicleId" clearable/>
</el-form-item> </el-form-item>
<el-form-item label="创建时间from"> <el-form-item label="创建时间from">

View File

@ -0,0 +1,76 @@
package com.wms_main.model.vo.wms;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* 盘点记录Vo
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class InventoryRecordVo {
/**
* 盘点id
*/
private String inventoryId;
/**
* 料号
*/
private String goodsId;
/**
* 载具号
*/
private String vehicleId;
/**
* 库存数量
* 只记录盘点确认时间点
*/
private Integer stockNum;
/**
* 确认数量
*/
private Integer confirmNum;
/**
* 盘点站台
*/
private String invStand;
/**
* 盘点人
*/
private String invUser;
/**
* 盘点类型1明盘2盲盘
*/
private Integer invType;
/**
* 盘点状态
* 1. 初始化
* 2. 已解析
* 3. 数量确认
* 4. 盘点关闭
*/
private Integer invStatus;
/**
* 盘点结果
* -1: 盘亏
* 0: 正常
* 1: 盘盈
*/
private Integer invResult;
/**
* 盘点任务创建时间
*/
private LocalDateTime invCreateTime;
/**
* 盘点确认时间
*/
private LocalDateTime invConfirmTime;
/**
* 这个字段用于合并哪些任务是同一时间下发的
*/
private String invOrderId;
}

View File

@ -1364,16 +1364,25 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
Map<String, Integer> goodsRequireMap = new HashMap<>(); Map<String, Integer> goodsRequireMap = new HashMap<>();
// 查找到这个工单下未完成的工作 // 查找到这个工单下未完成的工作
List<TAppWork> workList = appWorkService.list(new LambdaQueryWrapper<TAppWork>() List<TAppWork> workList = appWorkService.list(new LambdaQueryWrapper<TAppWork>()
.eq(TAppWork::getWorkOrder, workOrder) .eq(TAppWork::getWorkOrder, workOrder));
.ne(TAppWork::getWorkStatus, 2));
if (workList == null || workList.isEmpty()) { if (workList == null || workList.isEmpty()) {
return goodsRequireMap; return goodsRequireMap;
} }
for (TAppWork work : workList) { for (TAppWork work : workList) {
if (goodsRequireMap.containsKey(work.getGoodsId())) { if (work.getWorkStatus() == 2 && work.getLackStatus() == 0) {
goodsRequireMap.replace(work.getGoodsId(), goodsRequireMap.get(work.getGoodsId()) + work.getNeedNum() - work.getFinishNum()); // 已完成且不缺料
continue;
}
int remainNeedNum;
if (work.getWorkStatus() == 2) {
remainNeedNum = work.getNeedNum() - work.getFinishNum();
} else { } else {
goodsRequireMap.put(work.getGoodsId(), work.getNeedNum() - work.getFinishNum()); remainNeedNum = work.getNeedNum() - work.getDistributeNum();
}
if (goodsRequireMap.containsKey(work.getGoodsId())) {
goodsRequireMap.replace(work.getGoodsId(), goodsRequireMap.get(work.getGoodsId()) + remainNeedNum);
} else {
goodsRequireMap.put(work.getGoodsId(), remainNeedNum);
} }
} }
return goodsRequireMap; return goodsRequireMap;