forked from BaoKaiWms/202501-Wms-Kate-Wuxi
1. 增加补打标签功能
This commit is contained in:
parent
3868180fee
commit
89099c5fcb
|
|
@ -153,3 +153,12 @@ export const closeCurrentWorks = (params) => {
|
|||
timeout: 5000
|
||||
})
|
||||
}
|
||||
// 请求料盒标签数据
|
||||
export const requestPrintBoxTags = (params) => {
|
||||
return request({
|
||||
url: '/kate/requestPrintBoxTags',
|
||||
method: 'post',
|
||||
data: params,
|
||||
timeout: 5000
|
||||
})
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
<el-row>
|
||||
<el-form-item label="计划开工日期" prop="planStartDate">
|
||||
<el-date-picker v-model="workFormEntity.planStartDate" type="date"
|
||||
placeholder="选择开工日期" :shortcuts="shortcuts" style="width: 196px;" clearable />
|
||||
placeholder="选择开工日期" :shortcuts="shortcuts" style="width: 196px;" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工单号" prop="workOrder">
|
||||
<el-select v-model="workFormEntity.workOrder" filterable default-first-option
|
||||
|
|
@ -19,14 +19,14 @@
|
|||
initWorkOptions()
|
||||
}" remote-show-suffix reserve-keyword clearable>
|
||||
<el-option v-for="item in workOptions.workOrder" :key="item" :label="item"
|
||||
:value="item" />
|
||||
:value="item"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="原始成品号" prop="productIdOrigin">
|
||||
<el-input v-model="workFormEntity.productIdOrigin" placeholder="原始成品号" disabled />
|
||||
<el-input v-model="workFormEntity.productIdOrigin" placeholder="原始成品号" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="过滤成品号" prop="productId">
|
||||
<el-input v-model="workFormEntity.productId" placeholder="过滤成品号" disabled />
|
||||
<el-input v-model="workFormEntity.productId" placeholder="过滤成品号" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单片号" prop="singleProductId">
|
||||
<el-select v-model="workFormEntity.singleProductId" filterable default-first-option
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
initWorkOptions()
|
||||
}" remote-show-suffix reserve-keyword clearable>
|
||||
<el-option v-for="item in workOptions.singleProductId" :key="item" :label="item"
|
||||
:value="item" />
|
||||
:value="item"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="料盒号" prop="boxNo">
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
initWorkOptions()
|
||||
}" remote-show-suffix reserve-keyword clearable>
|
||||
<el-option v-for="item in workOptions.boxNo" :key="item" :label="item"
|
||||
:value="item" />
|
||||
:value="item"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="原材料号" prop="goodsId">
|
||||
|
|
@ -58,17 +58,19 @@
|
|||
initWorkOptions()
|
||||
}" remote-show-suffix reserve-keyword clearable>
|
||||
<el-option v-for="item in workOptions.goodsId" :key="item" :label="item"
|
||||
:value="item" />
|
||||
:value="item"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-button type="success"
|
||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
||||
@click="confirmStart()">确认配料</el-button>
|
||||
@click="confirmStart()">确认配料
|
||||
</el-button>
|
||||
<el-button type="warning"
|
||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
||||
@click="resetWorkFormQuery()">清除选择</el-button>
|
||||
@click="resetWorkFormQuery()">清除选择
|
||||
</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
|
|
@ -80,54 +82,57 @@
|
|||
<el-row>
|
||||
<el-row style="border-bottom: dashed 1px black;">
|
||||
<el-form-item label="工单号" prop="workOrder">
|
||||
<el-input v-model="confirmEntity.workOrder" disabled />
|
||||
<el-input v-model="confirmEntity.workOrder" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="成品号" prop="productId">
|
||||
<el-input v-model="confirmEntity.productId" disabled />
|
||||
<el-input v-model="confirmEntity.productId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单片号" prop="singleProductId">
|
||||
<el-input v-model="confirmEntity.singleProductId" disabled />
|
||||
<el-input v-model="confirmEntity.singleProductId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料号" prop="goodsId">
|
||||
<el-input v-model="confirmEntity.goodsId" disabled />
|
||||
<el-input v-model="confirmEntity.goodsId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="料盒号" prop="boxNo">
|
||||
<el-input v-model="confirmEntity.boxNo" disabled />
|
||||
<el-input v-model="confirmEntity.boxNo" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划拣选数量" prop="planPickQty">
|
||||
<el-input v-model="confirmEntity.planPickQty" disabled />
|
||||
<el-input v-model="confirmEntity.planPickQty" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际拣选数量" prop="realPickQty">
|
||||
<el-input-number v-model.number="confirmEntity.realPickQty"
|
||||
controls-position="right" :min="0" clearable @change="changePlanQty()" />
|
||||
controls-position="right" :min="0" clearable @change="changePlanQty()"/>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-form-item label="箱号" prop="vehicleId">
|
||||
<el-input v-model="confirmEntity.vehicleId" disabled />
|
||||
<el-input v-model="confirmEntity.vehicleId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="存放区域" prop="putArea">
|
||||
<el-input v-model="confirmEntity.putArea" disabled />
|
||||
<el-input v-model="confirmEntity.putArea" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划剩余数量" prop="planRemainQty" v-if="confirmEntity.isOut != 1">
|
||||
<el-input v-model="confirmEntity.planRemainQty" disabled />
|
||||
<el-input v-model="confirmEntity.planRemainQty" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际剩余数量" prop="realRemainQty" v-if="confirmEntity.isOut != 1">
|
||||
<el-input-number v-model.number="confirmEntity.realRemainQty"
|
||||
controls-position="right" :min="0" clearable />
|
||||
controls-position="right" :min="0" clearable/>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-button type="primary"
|
||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
||||
@click="showBoxSummary()">显示料盒</el-button>
|
||||
@click="showBoxSummary()">显示料盒
|
||||
</el-button>
|
||||
<el-button type="success" ref="confirmReleaseBtn"
|
||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
||||
@click="confirmOrRelease()">确认/放行</el-button>
|
||||
@click="confirmOrRelease()">确认/放行
|
||||
</el-button>
|
||||
<el-button type="warning"
|
||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
||||
@click="requestPrint()">打印标签</el-button>
|
||||
@click="requestPrint()">打印标签
|
||||
</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
|
|
@ -137,38 +142,38 @@
|
|||
highlight-current-row :header-cell-style="{ 'text-align': 'center' }"
|
||||
:cell-style="{ 'text-align': 'center' }" @sort-change="handleSortChange">
|
||||
<el-table-column prop="goodsId" label="料号" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="needNum" label="需求数量" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="finishNum" label="已完成数量" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
</el-table>
|
||||
<br />
|
||||
<br/>
|
||||
<el-pagination v-model:current-page="baseTableQuery.currentPage"
|
||||
v-model:page-size="baseTableQuery.pageSize" :page-sizes="[5, 10, 15]" :small="false"
|
||||
:disabled="false" :background="false" :default-page-size="5" @size-change="searchKittingGoods"
|
||||
@current-change="searchKittingGoods" layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="baseTableQuery.total" />
|
||||
:total="baseTableQuery.total"/>
|
||||
</div>
|
||||
<el-dialog v-model="boxShowFlag" title="料盒总览" width="50%" center :close="closeBoxSummary">
|
||||
<span>料盒信息</span>
|
||||
<el-table :data="boxSummary" stripe border class="table-class" max-height="200px"
|
||||
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }">
|
||||
<el-table-column prop="workOrder" label="工单号" fixed="left" />
|
||||
<el-table-column prop="taoQty" label="套数" />
|
||||
<el-table-column prop="productId" label="总成号" />
|
||||
<el-table-column prop="singleProductId" label="成品/单片" />
|
||||
<el-table-column prop="boxNo" label="料盒号" />
|
||||
<el-table-column prop="boxQty" label="料盒数量" />
|
||||
<el-table-column prop="workOrder" label="工单号" fixed="left"/>
|
||||
<el-table-column prop="taoQty" label="套数"/>
|
||||
<el-table-column prop="productId" label="总成号"/>
|
||||
<el-table-column prop="singleProductId" label="成品/单片"/>
|
||||
<el-table-column prop="boxNo" label="料盒号"/>
|
||||
<el-table-column prop="boxQty" label="料盒数量"/>
|
||||
</el-table>
|
||||
<span>缺料信息</span>
|
||||
<el-table :data="goodsLackSummary" stripe border class="table-class" max-height="450px"
|
||||
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }">
|
||||
<el-table-column prop="goodsId" label="料号" fixed="left" />
|
||||
<el-table-column prop="needNum" label="需求数量" />
|
||||
<el-table-column prop="stockNum" label="库存数量" />
|
||||
<el-table-column prop="lackNum" label="缺料数量" />
|
||||
<el-table-column prop="remark" label="备注" />
|
||||
<el-table-column prop="goodsId" label="料号" fixed="left"/>
|
||||
<el-table-column prop="needNum" label="需求数量"/>
|
||||
<el-table-column prop="stockNum" label="库存数量"/>
|
||||
<el-table-column prop="lackNum" label="缺料数量"/>
|
||||
<el-table-column prop="remark" label="备注"/>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
<div style="width: 0;height: 0;overflow: hidden">
|
||||
|
|
@ -190,7 +195,7 @@
|
|||
<div class="print-tab-image">
|
||||
<qrcode-vue
|
||||
:value="item.imageId"
|
||||
:size="size" :foreground="color" level="H" />
|
||||
:size="size" :foreground="color" level="H"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -200,7 +205,7 @@
|
|||
v-print="getPrintObj('printLackGoodsArea')"></button>
|
||||
<div id="printLackGoodsArea" class="objectDialogFlowPrint">
|
||||
<div class="pageWarp" v-for="item in lackGoodsForPrint">
|
||||
<div class="print-tab-full">
|
||||
<div class="print-tab-full" style="margin-left: 30px">
|
||||
<div class="print-row-big">料盒:{{ item.boxNo }}</div>
|
||||
<div class="print-row-big">料号:{{ item.goodsId }}</div>
|
||||
<div class="print-row-big">需求:{{ item.needNum }}</div>
|
||||
|
|
@ -218,15 +223,24 @@
|
|||
import store from '@/store'
|
||||
import QrcodeVue from 'qrcode.vue'
|
||||
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
||||
import { queryKateWorks, initWorks, getCurrentWorks, confirmCurrentWork, getBoxesAndLacks, queryWorkingGoodsByPage, getLackGoods } from '@/api/kateWork.js'
|
||||
import { errorBox, successBox, warningBox } from '@/utils/myMessageBox.js'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { dateFormatter } from '@/utils/formatter.js'
|
||||
import { nextTick, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'
|
||||
import { printObj, labelPosition, shortcuts, getPrintObj } from '@/constant/form'
|
||||
import { loading } from '@/utils/loading'
|
||||
import { genTableRequest } from '@/utils/generator.js'
|
||||
import { useRoute } from 'vue-router'
|
||||
import {
|
||||
queryKateWorks,
|
||||
initWorks,
|
||||
getCurrentWorks,
|
||||
confirmCurrentWork,
|
||||
getBoxesAndLacks,
|
||||
queryWorkingGoodsByPage,
|
||||
getLackGoods
|
||||
} from '@/api/kateWork.js'
|
||||
import {errorBox, successBox, warningBox} from '@/utils/myMessageBox.js'
|
||||
import {ElMessage} from 'element-plus'
|
||||
import {dateFormatter} from '@/utils/formatter.js'
|
||||
import {nextTick, onBeforeUnmount, onMounted, reactive, ref, watch} from 'vue'
|
||||
import {printObj, labelPosition, shortcuts, getPrintObj} from '@/constant/form'
|
||||
import {loading} from '@/utils/loading'
|
||||
import {genTableRequest} from '@/utils/generator.js'
|
||||
import {useRoute} from 'vue-router'
|
||||
|
||||
const standId = store.getters.getStandId
|
||||
const userName = store.getters.getUserName
|
||||
let storeKittingWork = store.getters.getKittingWork
|
||||
|
|
@ -256,7 +270,7 @@ let workFormQuery = reactive({
|
|||
})
|
||||
const rules = reactive({
|
||||
workOrder: [
|
||||
{ required: true, message: '请选择工单号。' }
|
||||
{required: true, message: '请选择工单号。'}
|
||||
]
|
||||
})
|
||||
let confirmRef = ref()
|
||||
|
|
@ -791,10 +805,7 @@ const printLacks = (workOrder, productId, singleProductId, boxNo) => {
|
|||
@media print {
|
||||
@page {
|
||||
size: auto;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body,
|
||||
|
|
|
|||
|
|
@ -12,10 +12,16 @@
|
|||
:options="summaryTypeOptions" @change="search()"></el-select-v2>
|
||||
</el-form-item>
|
||||
<el-form-item label="工单号">
|
||||
<el-input v-model="searchQueryFormEntity.workOrder" @keyup.enter="search()" clearable />
|
||||
<el-input v-model="searchQueryFormEntity.workOrder" @keyup.enter="search()" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="料盒号">
|
||||
<el-input v-model="searchQueryFormEntity.boxNo" @keyup.enter="search()" clearable />
|
||||
<el-input v-model="searchQueryFormEntity.boxNo" @keyup.enter="search()" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="成品号">
|
||||
<el-input v-model="searchQueryFormEntity.productId" @keyup.enter="search()" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单片号">
|
||||
<el-input v-model="searchQueryFormEntity.singleProductId" @keyup.enter="search()" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作状态">
|
||||
<el-select-v2 v-model="searchQueryFormEntity.workStatus" placeholder="工作状态"
|
||||
|
|
@ -34,8 +40,12 @@
|
|||
<el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-button style="background-color: #00CED1;" class="btn-search"
|
||||
@click="() => { showPrintDialog = true }">打印标签
|
||||
</el-button>
|
||||
<el-button type="success" class="btn-search"
|
||||
@click="exportExcel()">导出excel</el-button>
|
||||
@click="exportExcel()">导出excel
|
||||
</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -52,41 +62,41 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="workIndex" label="数据编号" fixed="left" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="workOrder" label="工单" fixed="left" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="boxNo" label="料盒号" fixed="left" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="productId" label="成品号" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="singleProductId" label="单片号" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="goodsId" label="料号" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="planStartDate" label="计划开工日期" min-width="120px" :formatter="dateFormat"
|
||||
sortable="custom" show-overflow-tooltip />
|
||||
sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column prop="needNum" label="需求数量" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="distributeNum" label="已分配数量" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="finishNum" label="已完成数量" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="workStand" label="工作站台" min-width="120px" sortable="custom"
|
||||
show-overflow-tooltip />
|
||||
show-overflow-tooltip/>
|
||||
<el-table-column prop="workUser" 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" show-overflow-tooltip />
|
||||
sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column prop="finishTime" label="完成时间" :formatter="timeFormat" min-width="120px"
|
||||
sortable="custom" show-overflow-tooltip />
|
||||
sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column prop="isOut" label="库外料" :formatter="outGoodsFormat" min-width="120px"
|
||||
sortable="custom" show-overflow-tooltip />
|
||||
sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column prop="productType" label="成品类型" :formatter="productTypeFormat"
|
||||
min-width="120px" sortable="custom" show-overflow-tooltip />
|
||||
min-width="120px" sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column prop="lackStatus" label="缺料状态" :formatter="lackStatusFormat" fixed="right"
|
||||
min-width="120px" sortable="custom" show-overflow-tooltip />
|
||||
min-width="120px" sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column prop="workStatus" label="工作状态" :formatter="workStatusFormat" fixed="right"
|
||||
min-width="120px" sortable="custom" show-overflow-tooltip />
|
||||
min-width="120px" sortable="custom" show-overflow-tooltip/>
|
||||
<el-table-column fixed="right" label="操作" width="170px" v-if="searchQueryFormEntity.summaryType == 1">
|
||||
<template v-slot="scope">
|
||||
<div style="display: inline-block; align-content: center;">
|
||||
|
|
@ -96,49 +106,50 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<br />
|
||||
<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" />
|
||||
:total="baseTableQuery.total"/>
|
||||
</div>
|
||||
<el-dialog v-model="rowEditFlag" title="工作信息" width="40%" draggable :show-close="false">
|
||||
<el-dialog v-model="rowEditFlag" title="工作信息" width="40%" draggable :show-close="false"
|
||||
:close-on-click-modal="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-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-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-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-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-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-input v-model="rowFormEntity.goodsId" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -146,13 +157,13 @@
|
|||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="需求数量">
|
||||
<el-input-number v-model.number="rowFormEntity.needNum" controls-position="right"
|
||||
:min="0" disabled />
|
||||
: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 />
|
||||
controls-position="right" :min="0" :max="rowFormEntity.needNum" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -160,7 +171,7 @@
|
|||
<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 />
|
||||
controls-position="right" :min="0" :max="rowFormEntity.needNum" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -188,6 +199,70 @@
|
|||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showPrintDialog" title="打印标签" width="40%" draggable :close-on-click-modal="false">
|
||||
<fieldset class="search-area">
|
||||
<el-form ref="printRequestFormRef" :model="printRequestFormEntity" :label-position="labelPosition"
|
||||
label-width="158px" style="max-width: 100%" status-icon>
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<el-row>
|
||||
<el-form-item label="工单号(必须)">
|
||||
<el-input v-model="printRequestFormEntity.workOrder" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="料盒号(必须)">
|
||||
<el-input v-model="printRequestFormEntity.boxNo" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单片号(非必须)">
|
||||
<el-input v-model="printRequestFormEntity.singleProductId" clearable/>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<div style="align-content: center;">
|
||||
<el-row>
|
||||
<el-button type="primary" class="btn-search" @click="printBoxTags()">打印料盒标签</el-button>
|
||||
<el-button type="warning" class="btn-search" @click="printLackTags()">打印缺料标签</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</fieldset>
|
||||
</el-dialog>
|
||||
<div style="width: 0;height: 0;overflow: hidden">
|
||||
<button ref="printBtn" style="display: none;" v-print="printObj"></button>
|
||||
<div id="printArea" class="objectDialogFlowPrint">
|
||||
<div class="pageWarp" v-for="item in printTabs">
|
||||
<div class="print-tab-text">
|
||||
<div class="print-row-normal">工单:{{ item.workOrder }}</div>
|
||||
<div class="print-row-normal">总成:{{ item.productId }}</div>
|
||||
<div class="print-row-normal">单片:{{ item.singleProductId }}</div>
|
||||
<div class="print-row-normal">配料:{{ item.kittingDate }}</div>
|
||||
</div>
|
||||
<div class="print-tab-text">
|
||||
<div class="print-row-normal">测试台:{{ item.testNo }}</div>
|
||||
<div class="print-row-normal">产量:{{ item.productionQty }}</div>
|
||||
<div class="print-row-normal">料盒号:{{ item.boxNo }}</div>
|
||||
<div class="print-row-normal">生产:{{ item.produceDate }}</div>
|
||||
</div>
|
||||
<div class="print-tab-image">
|
||||
<qrcode-vue
|
||||
:value="item.imageId"
|
||||
:size="size" :foreground="color" level="H"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width: 0;height: 0;overflow: hidden">
|
||||
<button ref="printLackGoodsBtn" style="display: none;"
|
||||
v-print="getPrintObj('printLackGoodsArea')"></button>
|
||||
<div id="printLackGoodsArea" class="objectDialogFlowPrint">
|
||||
<div class="pageWarp" v-for="item in lackGoodsForPrint">
|
||||
<div class="print-tab-full" style="margin-left: 30px">
|
||||
<div class="print-row-big">料盒:{{ item.boxNo }}</div>
|
||||
<div class="print-row-big">料号:{{ item.goodsId }}</div>
|
||||
<div class="print-row-big">需求:{{ item.needNum }}</div>
|
||||
<div class="print-row-big">缺料:{{ item.needNum - item.finishNum }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-container>
|
||||
</el-config-provider>
|
||||
|
|
@ -196,16 +271,24 @@
|
|||
<script setup>
|
||||
import store from '@/store'
|
||||
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
||||
import { queryWorkSummaryByPage, updateKateWorks, closeCurrentWorks } from '@/api/kateWork.js'
|
||||
import { dateFormatter, timeFormatter, yesOrNoFormatter } from '@/utils/formatter.js'
|
||||
import { ref, reactive, onMounted, nextTick, onBeforeUnmount } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { genTableRequest } from '@/utils/generator.js'
|
||||
import { labelPosition } from '@/constant/form.js'
|
||||
import { summaryTypeOptions, workStatusOptions, lackStatusOptions } from '@/constant/options.js'
|
||||
import { exportWorkSummaryExcel } from '@/api/excel.js'
|
||||
import { addAllOptionOfOptions } from '@/utils/generator.js'
|
||||
import { loading } from '@/utils/loading'
|
||||
import {
|
||||
queryWorkSummaryByPage,
|
||||
updateKateWorks,
|
||||
closeCurrentWorks,
|
||||
requestPrintBoxTags,
|
||||
getLackGoods
|
||||
} from '@/api/kateWork.js'
|
||||
import {dateFormatter, timeFormatter, yesOrNoFormatter} from '@/utils/formatter.js'
|
||||
import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue'
|
||||
import {ElMessage} from 'element-plus'
|
||||
import {genTableRequest} from '@/utils/generator.js'
|
||||
import {getPrintObj, labelPosition, printObj} from '@/constant/form.js'
|
||||
import {summaryTypeOptions, workStatusOptions, lackStatusOptions} from '@/constant/options.js'
|
||||
import {exportWorkSummaryExcel} from '@/api/excel.js'
|
||||
import {addAllOptionOfOptions} from '@/utils/generator.js'
|
||||
import {loading} from '@/utils/loading'
|
||||
import QrcodeVue from "qrcode.vue";
|
||||
|
||||
/**
|
||||
* 常量定义
|
||||
*/
|
||||
|
|
@ -228,6 +311,8 @@ let baseTableQuery = reactive({
|
|||
let searchQueryFormEntity = reactive({
|
||||
summaryType: 1,
|
||||
workOrder: '',
|
||||
productId: '',
|
||||
singleProductId: '',
|
||||
boxNo: '',
|
||||
lackStatus: -99,
|
||||
workStatus: -99
|
||||
|
|
@ -237,6 +322,21 @@ let rowEditFlag = ref(false)
|
|||
let workIndex = ''
|
||||
let rowEditFormRef = ref()
|
||||
let rowFormEntity = reactive({})
|
||||
|
||||
let showPrintDialog = ref(false)
|
||||
let printRequestFormRef = ref()
|
||||
let printRequestFormEntity = reactive({
|
||||
workOrder: '',
|
||||
productId: '',
|
||||
singleProductId: '',
|
||||
boxNo: '',
|
||||
})
|
||||
let printTabs = ref([])
|
||||
let lackGoodsForPrint = ref([])
|
||||
const printBtn = ref()
|
||||
const printLackGoodsBtn = ref()
|
||||
const size = ref(35)
|
||||
const color = ref('#000000')
|
||||
/**
|
||||
* 系统方法
|
||||
*/
|
||||
|
|
@ -265,6 +365,8 @@ const search = () => {
|
|||
request.summaryType = searchQueryFormEntity.summaryType
|
||||
request.workOrder = searchQueryFormEntity.workOrder.trim()
|
||||
request.boxNo = searchQueryFormEntity.boxNo.trim()
|
||||
request.productId = searchQueryFormEntity.productId.trim()
|
||||
request.singleProductId = searchQueryFormEntity.singleProductId.trim()
|
||||
request.workStatus = searchQueryFormEntity.workStatus == -99 ? null : searchQueryFormEntity.workStatus
|
||||
request.lackStatus = searchQueryFormEntity.lackStatus == -99 ? null : searchQueryFormEntity.lackStatus
|
||||
queryWorkSummaryByPage(request).then((res) => {
|
||||
|
|
@ -290,6 +392,9 @@ const search = () => {
|
|||
}
|
||||
const clearQuery = () => {
|
||||
searchQueryFormEntity.workOrder = ''
|
||||
searchQueryFormEntity.productId = ''
|
||||
searchQueryFormEntity.singleProductId = ''
|
||||
searchQueryFormEntity.boxNo = ''
|
||||
}
|
||||
const handleSortChange = (data) => {
|
||||
if (baseTableQuery.sortBy.has(data.prop)) {
|
||||
|
|
@ -347,7 +452,10 @@ const outGoodsFormat = (row, column, cellValue, index) => {
|
|||
const exportExcel = () => {
|
||||
const params = {
|
||||
summaryType: searchQueryFormEntity.summaryType,
|
||||
workOrder: searchQueryFormEntity.workOrder,
|
||||
workOrder: searchQueryFormEntity.workOrder.trim(),
|
||||
boxNo: searchQueryFormEntity.boxNo.trim(),
|
||||
productId: searchQueryFormEntity.productId.trim(),
|
||||
singleProductId: searchQueryFormEntity.singleProductId.trim(),
|
||||
workStatus: searchQueryFormEntity.workStatus == -99 ? null : searchQueryFormEntity.workStatus,
|
||||
lackStatus: searchQueryFormEntity.lackStatus == -99 ? null : searchQueryFormEntity.lackStatus,
|
||||
standId: STAND_ID,
|
||||
|
|
@ -446,6 +554,91 @@ const submitUpdateRow = (rowFormEntity) => {
|
|||
loading.close()
|
||||
})
|
||||
}
|
||||
// 打印料盒标签
|
||||
const printBoxTags = () => {
|
||||
if (printRequestFormEntity.workOrder.trim() == '' || printRequestFormEntity.boxNo.trim() == '') {
|
||||
ElMessage.error("工单号、料盒号必须。")
|
||||
return
|
||||
}
|
||||
const requestParam = {
|
||||
workOrder: printRequestFormEntity.workOrder.trim(),
|
||||
boxNo: printRequestFormEntity.boxNo.trim(),
|
||||
productId: printRequestFormEntity.productId.trim(),
|
||||
singleProductId: printRequestFormEntity.singleProductId.trim(),
|
||||
standId: STAND_ID,
|
||||
userName: USER_NAME
|
||||
}
|
||||
loading.open('请求标签数据中...')
|
||||
requestPrintBoxTags(requestParam).then(res => {
|
||||
const response = res.data
|
||||
if (response.code == 0) {
|
||||
getPrintTabs(response.data)
|
||||
nextTick(() => {
|
||||
printBtn.value.click()
|
||||
});
|
||||
} else {
|
||||
ElMessage.error(response.message)
|
||||
}
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
ElMessage.error("请求发生异常")
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
// 打印缺料标签
|
||||
const printLackTags = () => {
|
||||
if (printRequestFormEntity.workOrder.trim() == '' || printRequestFormEntity.boxNo.trim() == '') {
|
||||
ElMessage.error("工单号、料盒号必须。")
|
||||
return
|
||||
}
|
||||
const requestParam = {
|
||||
workOrder: printRequestFormEntity.workOrder.trim(),
|
||||
boxNo: printRequestFormEntity.boxNo.trim(),
|
||||
productId: printRequestFormEntity.productId.trim(),
|
||||
singleProductId: printRequestFormEntity.singleProductId.trim(),
|
||||
standId: STAND_ID,
|
||||
userName: USER_NAME
|
||||
}
|
||||
loading.open('请求缺料数据中...')
|
||||
getLackGoods(requestParam).then(res => {
|
||||
const response = res.data
|
||||
if (response.code == 0) {
|
||||
lackGoodsForPrint.value = response.data
|
||||
nextTick(() => {
|
||||
printLackGoodsBtn.value.click()
|
||||
});
|
||||
} else {
|
||||
ElMessage.error(response.message)
|
||||
}
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
ElMessage.error("请求发生异常")
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
// 获得打印数据
|
||||
const getPrintTabs = (boxSummary) => {
|
||||
printTabs.value = []
|
||||
if (boxSummary != undefined) {
|
||||
for (let i = 1; i <= boxSummary.boxQty; i++) {
|
||||
printTabs.value.push(
|
||||
{
|
||||
workOrder: boxSummary.workOrder,
|
||||
productId: boxSummary.productIdOrigin,
|
||||
singleProductId: boxSummary.singleProductId,
|
||||
boxNo: boxSummary.boxNo,
|
||||
kittingDate: boxSummary.kittingDate,
|
||||
produceDate: boxSummary.produceDate,
|
||||
testNo: boxSummary.testNo,
|
||||
productionQty: boxSummary.productionQty,
|
||||
imageId: boxSummary.imageId,
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.content {
|
||||
|
|
@ -539,8 +732,65 @@ const submitUpdateRow = (rowFormEntity) => {
|
|||
|
||||
.btn-search {
|
||||
height: 30px;
|
||||
width: 80px;
|
||||
width: 100px;
|
||||
margin: auto 5px 5px auto;
|
||||
color: black;
|
||||
}
|
||||
|
||||
@media print {
|
||||
@page {
|
||||
size: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body,
|
||||
html {
|
||||
height: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
.objectDialogFlowPrint {
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.objectDialogFlowPrint .pageWarp {
|
||||
/*这句话很重要,控制时候强制分页 https://www.w3school.com.cn/cssref/pr_page-break-after.asp*/
|
||||
page-break-after: always;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
.print-tab-text {
|
||||
width: 40%;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.print-tab-image {
|
||||
width: 20%;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.print-row-normal {
|
||||
margin: 8px 3px 8px 3px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.print-tab-full {
|
||||
width: 90%;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.print-row-big {
|
||||
margin: 8px 3px 8px 3px;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.wms_main.controller.wms;
|
||||
|
||||
import com.wms_main.model.bo.wms.BoxSummary;
|
||||
import com.wms_main.model.dto.query.*;
|
||||
import com.wms_main.model.dto.request.wms.*;
|
||||
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
|
||||
|
|
@ -164,12 +165,12 @@ public class KateWorkController {
|
|||
|
||||
/**
|
||||
* 查询当前站台待工作的物料列表
|
||||
* @param workSummaryQuery 查询参数
|
||||
* @param kateWorksQuery 查询参数
|
||||
* @return 查询结果
|
||||
*/
|
||||
@PostMapping("/getLackGoods")
|
||||
public WmsApiResponse<List<KateWorkVo>> getLackGoods(@RequestBody WorkSummaryQuery workSummaryQuery) {
|
||||
return kateWorkControllerService.getLackGoods(workSummaryQuery);
|
||||
public WmsApiResponse<List<KateWorkVo>> getLackGoods(@RequestBody KateWorksQuery kateWorksQuery) {
|
||||
return kateWorkControllerService.getLackGoods(kateWorksQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -191,4 +192,14 @@ public class KateWorkController {
|
|||
public BaseWmsApiResponse closeCurrentWorks(@RequestBody UpdateWorkRequest closeWorkRequest) {
|
||||
return kateWorkControllerService.closeCurrentWorks(closeWorkRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求打印料盒标签
|
||||
* @param kateWorksQuery 查询参数
|
||||
* @return 需要打印的料盒标签
|
||||
*/
|
||||
@PostMapping("/requestPrintBoxTags")
|
||||
WmsApiResponse<BoxSummary> requestPrintBoxTags(@RequestBody KateWorksQuery kateWorksQuery) {
|
||||
return kateWorkControllerService.requestPrintBoxTags(kateWorksQuery);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -180,6 +180,9 @@ public class ExportExcelEasyPoi extends BaseExportExcelEasyPoi implements IExpor
|
|||
// 未关闭订单
|
||||
List<TAppWork> poList = appWorkService.list(new LambdaQueryWrapper<TAppWork>()
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkOrder()), TAppWork::getWorkOrder, workSummaryQuery.getWorkOrder())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getProductId()), TAppWork::getProductId, workSummaryQuery.getProductId())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getSingleProductId()), TAppWork::getSingleProductId, workSummaryQuery.getSingleProductId())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getBoxNo()), TAppWork::getBoxNo, workSummaryQuery.getBoxNo())
|
||||
.eq(workSummaryQuery.getWorkStatus() != null, TAppWork::getWorkStatus, workSummaryQuery.getWorkStatus())
|
||||
.eq(workSummaryQuery.getLackStatus() != null, TAppWork::getLackStatus, workSummaryQuery.getLackStatus()));
|
||||
// excel模版列表
|
||||
|
|
@ -215,6 +218,9 @@ public class ExportExcelEasyPoi extends BaseExportExcelEasyPoi implements IExpor
|
|||
// 已关闭订单
|
||||
List<TAppWorkRecord> poList = appWorkRecordService.list(new LambdaQueryWrapper<TAppWorkRecord>()
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkOrder()), TAppWorkRecord::getWorkOrder, workSummaryQuery.getWorkOrder())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getProductId()), TAppWorkRecord::getProductId, workSummaryQuery.getProductId())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getSingleProductId()), TAppWorkRecord::getSingleProductId, workSummaryQuery.getSingleProductId())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getBoxNo()), TAppWorkRecord::getBoxNo, workSummaryQuery.getBoxNo())
|
||||
.eq(workSummaryQuery.getWorkStatus() != null, TAppWorkRecord::getWorkStatus, workSummaryQuery.getWorkStatus())
|
||||
.eq(workSummaryQuery.getLackStatus() != null, TAppWorkRecord::getLackStatus, workSummaryQuery.getLackStatus()));
|
||||
// excel模版列表
|
||||
|
|
|
|||
|
|
@ -416,6 +416,8 @@ public class ImportExcelEasyPoi extends BaseImportExcelEasyPoi implements IImpor
|
|||
return BaseWmsApiResponse.error("符合条件数据行为0。");
|
||||
}
|
||||
try {
|
||||
// 先清除数据
|
||||
tAppGoodsService.remove(new LambdaQueryWrapper<>());
|
||||
// 保存数据
|
||||
tAppGoodsService.saveOrUpdateBatch(goodsList);
|
||||
// 更新common
|
||||
|
|
@ -468,7 +470,7 @@ public class ImportExcelEasyPoi extends BaseImportExcelEasyPoi implements IImpor
|
|||
}
|
||||
try {
|
||||
// 先移除这些物料的看板
|
||||
tAppKanbanService.remove(new LambdaQueryWrapper<TAppKanban>().in(TAppKanban::getGoodsId, kanbanListMap.keySet()));
|
||||
tAppKanbanService.remove(new LambdaQueryWrapper<>());
|
||||
// 转换保存数据
|
||||
List<TAppKanban> kanbanList = new ArrayList<>();
|
||||
kanbanListMap.values().forEach(kanbanList::addAll);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 数据库出库单表映射
|
||||
*/
|
||||
|
|
@ -66,4 +68,9 @@ public class TAppOuts {
|
|||
*/
|
||||
@TableField(value = "reason")
|
||||
private String reason;
|
||||
/**
|
||||
* 请求时间
|
||||
*/
|
||||
@TableField(value = "request_time")
|
||||
private LocalDateTime requestTime;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 数据库出库单表映射
|
||||
*/
|
||||
|
|
@ -66,4 +68,9 @@ public class TAppOutsRecord {
|
|||
*/
|
||||
@TableField(value = "reason")
|
||||
private String reason;
|
||||
/**
|
||||
* 请求时间
|
||||
*/
|
||||
@TableField(value = "request_time")
|
||||
private LocalDateTime requestTime;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.wms_main.service.controller;
|
||||
|
||||
import com.wms_main.model.bo.wms.BoxSummary;
|
||||
import com.wms_main.model.dto.query.*;
|
||||
import com.wms_main.model.dto.request.wms.*;
|
||||
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
|
||||
|
|
@ -112,10 +113,10 @@ public interface IKateWorkControllerService {
|
|||
|
||||
/**
|
||||
* 查询当前站台待工作的物料列表
|
||||
* @param workSummaryQuery 查询参数
|
||||
* @param kateWorksQuery 查询参数
|
||||
* @return 查询结果---分页
|
||||
*/
|
||||
WmsApiResponse<List<KateWorkVo>> getLackGoods(WorkSummaryQuery workSummaryQuery);
|
||||
WmsApiResponse<List<KateWorkVo>> getLackGoods(KateWorksQuery kateWorksQuery);
|
||||
|
||||
/**
|
||||
* 更新当前工作流
|
||||
|
|
@ -130,4 +131,11 @@ public interface IKateWorkControllerService {
|
|||
* @return 关闭结果
|
||||
*/
|
||||
BaseWmsApiResponse closeCurrentWorks(UpdateWorkRequest closeWorkRequest);
|
||||
|
||||
/**
|
||||
* 请求打印料盒标签
|
||||
* @param kateWorksQuery 查询参数
|
||||
* @return 需要打印的料盒标签
|
||||
*/
|
||||
WmsApiResponse<BoxSummary> requestPrintBoxTags(KateWorksQuery kateWorksQuery);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -929,6 +929,9 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
|
|||
Page<TAppWorkRecord> page = workSummaryQuery.toMpPage();
|
||||
LambdaQueryWrapper<TAppWorkRecord> lambdaQueryWrapper = new LambdaQueryWrapper<TAppWorkRecord>()
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkOrder()), TAppWorkRecord::getWorkOrder, workSummaryQuery.getWorkOrder())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getProductId()), TAppWorkRecord::getProductId, workSummaryQuery.getProductId())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getSingleProductId()), TAppWorkRecord::getSingleProductId, workSummaryQuery.getSingleProductId())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getBoxNo()), TAppWorkRecord::getBoxNo, workSummaryQuery.getBoxNo())
|
||||
.eq(workSummaryQuery.getWorkStatus() != null, TAppWorkRecord::getWorkStatus, workSummaryQuery.getWorkStatus())
|
||||
.eq(workSummaryQuery.getLackStatus() != null, TAppWorkRecord::getLackStatus, workSummaryQuery.getLackStatus());
|
||||
Page<TAppWorkRecord> pagePo = appWorkRecordService.page(page, lambdaQueryWrapper);
|
||||
|
|
@ -973,19 +976,19 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
|
|||
/**
|
||||
* 查询缺料列表
|
||||
*
|
||||
* @param workSummaryQuery 查询参数
|
||||
* @param kateWorksQuery 查询参数
|
||||
* @return 查询结果
|
||||
*/
|
||||
@Override
|
||||
public WmsApiResponse<List<KateWorkVo>> getLackGoods(WorkSummaryQuery workSummaryQuery) {
|
||||
if (workSummaryQuery == null) {
|
||||
public WmsApiResponse<List<KateWorkVo>> getLackGoods(KateWorksQuery kateWorksQuery) {
|
||||
if (kateWorksQuery == null) {
|
||||
return WmsApiResponse.error("查询参数为空。", null);
|
||||
}
|
||||
LambdaQueryWrapper<TAppWork> lambdaQueryWrapper = new LambdaQueryWrapper<TAppWork>()
|
||||
.eq(TAppWork::getWorkOrder, workSummaryQuery.getWorkOrder())
|
||||
.eq(TAppWork::getProductId, workSummaryQuery.getProductId())
|
||||
.eq(StringUtils.isNotEmpty(workSummaryQuery.getSingleProductId()), TAppWork::getSingleProductId, workSummaryQuery.getSingleProductId())
|
||||
.eq(TAppWork::getBoxNo, workSummaryQuery.getBoxNo())
|
||||
.eq(TAppWork::getWorkOrder, kateWorksQuery.getWorkOrder())
|
||||
.eq(StringUtils.isNotEmpty(kateWorksQuery.getProductId()), TAppWork::getProductId, kateWorksQuery.getProductId())
|
||||
.eq(StringUtils.isNotEmpty(kateWorksQuery.getSingleProductId()), TAppWork::getSingleProductId, kateWorksQuery.getSingleProductId())
|
||||
.eq(TAppWork::getBoxNo, kateWorksQuery.getBoxNo())
|
||||
.eq(TAppWork::getLackStatus, 1);
|
||||
List<TAppWork> poList = appWorkService.list(lambdaQueryWrapper);
|
||||
if (poList == null || poList.isEmpty()) {
|
||||
|
|
@ -1070,6 +1073,116 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
|
|||
return BaseWmsApiResponse.success("关闭缺料工作成功。");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取料盒打印标签数量
|
||||
* @param kateWorksQuery 查询参数
|
||||
* @return 标签信息
|
||||
*/
|
||||
@Override
|
||||
public WmsApiResponse<BoxSummary> requestPrintBoxTags(KateWorksQuery kateWorksQuery) {
|
||||
if (kateWorksQuery == null) {
|
||||
// 站台号不能为空
|
||||
return WmsApiResponse.error("请求为空。", null);
|
||||
}
|
||||
if (StringUtils.isEmpty(kateWorksQuery.getWorkOrder())) {
|
||||
return WmsApiResponse.error("请求缺少工单号。", null);
|
||||
}
|
||||
if (StringUtils.isEmpty(kateWorksQuery.getBoxNo())) {
|
||||
return WmsApiResponse.error("请求缺少料盒号。", null);
|
||||
}
|
||||
// 查询对应的dbs
|
||||
List<TAppDbs> dbsList = appDbsService.list(new LambdaQueryWrapper<TAppDbs>()
|
||||
.eq(TAppDbs::getWorkOrder, kateWorksQuery.getWorkOrder()));
|
||||
if (dbsList == null || dbsList.isEmpty()) {
|
||||
return WmsApiResponse.error("DBS数据异常:不存在工单" + kateWorksQuery.getWorkOrder() + "。", null);
|
||||
}
|
||||
TAppDbs thisDbs = dbsList.getFirst();
|
||||
// 计划产量
|
||||
int planProduction = thisDbs.getPlanProduction();
|
||||
// 结果集
|
||||
BoxSummary boxSummary = new BoxSummary();
|
||||
boxSummary.setWorkOrder(thisDbs.getWorkOrder());
|
||||
boxSummary.setTaoQty(planProduction);
|
||||
boxSummary.setSingleProductId(kateWorksQuery.getSingleProductId());
|
||||
boxSummary.setBoxNo(kateWorksQuery.getBoxNo());
|
||||
// 设置打印标签相关的信息
|
||||
boxSummary.setProductIdOrigin(thisDbs.getProductIdOrigin());
|
||||
boxSummary.setKittingDate(thisDbs.getTestPlanStartDate());
|
||||
boxSummary.setProduceDate(thisDbs.getPntPlanStartDate());
|
||||
boxSummary.setTestNo(thisDbs.getTestNo());
|
||||
boxSummary.setProductionQty(planProduction);
|
||||
// 服务件
|
||||
List<TAppSingleProduct> singleProductList;
|
||||
// 非服务件
|
||||
List<TAppProduct> productList = new ArrayList<>();
|
||||
// 查询对应料盒信息
|
||||
String queryProductId = thisDbs.getProductIdOrigin();
|
||||
if (StringUtils.isNotEmpty(kateWorksQuery.getSingleProductId())) {
|
||||
// 输入单片号
|
||||
queryProductId = kateWorksQuery.getSingleProductId();
|
||||
// 查询服务件
|
||||
singleProductList = appSingleProductService.list(new LambdaQueryWrapper<TAppSingleProduct>()
|
||||
.eq(TAppSingleProduct::getProductId, queryProductId)
|
||||
.eq(TAppSingleProduct::getBoxNo, kateWorksQuery.getBoxNo()));
|
||||
if (singleProductList.isEmpty()) {
|
||||
// 查询非服务件
|
||||
productList = appProductService.list(new LambdaQueryWrapper<TAppProduct>()
|
||||
.eq(TAppProduct::getProductId, queryProductId)
|
||||
.eq(TAppProduct::getBoxNo, kateWorksQuery.getBoxNo()));
|
||||
}
|
||||
} else {
|
||||
// 查询服务件
|
||||
singleProductList = appSingleProductService.list(new LambdaQueryWrapper<TAppSingleProduct>()
|
||||
.eq(TAppSingleProduct::getProductId, queryProductId)
|
||||
.eq(TAppSingleProduct::getBoxNo, kateWorksQuery.getBoxNo()));
|
||||
if (singleProductList.isEmpty()) {
|
||||
queryProductId = thisDbs.getProductId();
|
||||
// 查询非服务件
|
||||
productList = appProductService.list(new LambdaQueryWrapper<TAppProduct>()
|
||||
.eq(TAppProduct::getProductId, queryProductId)
|
||||
.eq(TAppProduct::getBoxNo, kateWorksQuery.getBoxNo()));
|
||||
}
|
||||
}
|
||||
if (singleProductList.isEmpty() && productList.isEmpty()) {
|
||||
return WmsApiResponse.error("数据异常:配料单信息缺失。", null);
|
||||
}
|
||||
// 查询到对应的图纸信息
|
||||
List<TAppImage> imageList = appImageService.list(new LambdaQueryWrapper<TAppImage>()
|
||||
.eq(TAppImage::getProductId, queryProductId)
|
||||
.eq(TAppImage::getBoxNo, kateWorksQuery.getBoxNo()));
|
||||
if (imageList != null && !imageList.isEmpty()) {
|
||||
boxSummary.setImageId(imageList.getFirst().getImageId());
|
||||
}
|
||||
// 最大料盒数量
|
||||
int maxBoxQty = 0;
|
||||
if (!singleProductList.isEmpty()) {
|
||||
boxSummary.setProductId(thisDbs.getProductIdOrigin());
|
||||
// 处理服务件
|
||||
for (TAppSingleProduct singleProduct : singleProductList) {
|
||||
// 设置料盒数量
|
||||
int tempBoxQty = Math.ceilDiv(planProduction, singleProduct.getQuantityOfPair());
|
||||
if (tempBoxQty > maxBoxQty) {
|
||||
maxBoxQty = tempBoxQty;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!productList.isEmpty()) {
|
||||
// 处理非服务件
|
||||
boxSummary.setProductId(thisDbs.getProductId());
|
||||
for (TAppProduct product : productList) {
|
||||
// 设置料盒数量
|
||||
int tempBoxQty = Math.ceilDiv(planProduction, product.getQuantityOfPair());
|
||||
if (tempBoxQty > maxBoxQty) {
|
||||
maxBoxQty = tempBoxQty;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 设置料盒数量
|
||||
boxSummary.setBoxQty(maxBoxQty);
|
||||
return WmsApiResponse.success("获取料盒标签数据成功。", boxSummary);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务件成品号的物料需求
|
||||
*
|
||||
|
|
@ -1296,8 +1409,14 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
|
|||
.set(TAppStandWork::getPutArea, "")
|
||||
.eq(TAppStandWork::getStandId, confirmWorkRequest.getStandId()));
|
||||
// 清除拣选计划
|
||||
appPickPlanService.remove(new LambdaQueryWrapper<TAppPickPlan>()
|
||||
.eq(TAppPickPlan::getWorkIndex, confirmWorkRequest.getOrderConfirm().getWorkIndex()));
|
||||
// 清除拣选计划
|
||||
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
||||
.eq(TAppPickPlan::getWorkIndex, confirmWorkRequest.getOrderConfirm().getWorkIndex());
|
||||
if (confirmWorkRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmWorkRequest.getStockConfirm().getVehicleId())) {
|
||||
// 箱号
|
||||
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmWorkRequest.getStockConfirm().getVehicleId());
|
||||
}
|
||||
appPickPlanService.remove(pickPlanQueryWrapper);
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -316,7 +316,8 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
|||
stockOutRequest.getOutType(),
|
||||
stockOutRequest.getDestination(),
|
||||
stockOutRequest.getUserName(),
|
||||
stockOutRequest.getReason()
|
||||
stockOutRequest.getReason(),
|
||||
LocalDateTime.now()
|
||||
);
|
||||
appOutsService.save(task);
|
||||
return BaseWmsApiResponse.success("添加出库请求成功。");
|
||||
|
|
@ -381,7 +382,8 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
|||
WmsOutTypeEnums.FOR_IN.getCode(),
|
||||
"R1",
|
||||
voiRequest.getUserName(),
|
||||
""
|
||||
"",
|
||||
LocalDateTime.now()
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -773,7 +775,8 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
|||
outs.getOutType(),
|
||||
outs.getDestination(),
|
||||
outs.getUserName(),
|
||||
outs.getReason()
|
||||
outs.getReason(),
|
||||
outs.getRequestTime()
|
||||
);
|
||||
// 删除出库单
|
||||
appOutsService.removeById(outs.getTaskId());
|
||||
|
|
@ -784,8 +787,13 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
|||
appOutsService.updateById(outs);
|
||||
}
|
||||
// 清除拣选计划
|
||||
appPickPlanService.remove(new LambdaQueryWrapper<TAppPickPlan>()
|
||||
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId()));
|
||||
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
||||
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId());
|
||||
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) {
|
||||
// 箱号
|
||||
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId());
|
||||
}
|
||||
appPickPlanService.remove(pickPlanQueryWrapper);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1207,7 +1207,8 @@ public class OutsExecutorServiceImpl implements IOutsExecutorService {
|
|||
thisOuts.getOutType(),
|
||||
thisOuts.getDestination(),
|
||||
thisOuts.getUserName(),
|
||||
thisOuts.getReason()
|
||||
thisOuts.getReason(),
|
||||
thisOuts.getRequestTime()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,10 @@ spring:
|
|||
# url: jdbc:mysql://112.4.208.194:3001/wms_kate_wuxi?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
# username: developer
|
||||
# password: developer
|
||||
# 本地
|
||||
# url: jdbc:mysql://localhost:3306/wms_kate_wuxi_test?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
# username: root
|
||||
# password: liangzhou
|
||||
# 卡特服务器
|
||||
url: jdbc:mysql://10.90.83.37:3306/wms_kate_wuxi?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
username: developer
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user