现场调试更改
This commit is contained in:
152
pda/_pages.json
Normal file
152
pda/_pages.json
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
{
|
||||||
|
"pages": [{
|
||||||
|
"path": "pages/login",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "登录"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/register",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "注册"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "WMS 仓储管理",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/work/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "工作台"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "我的"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/avatar/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "修改头像"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/info/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "个人信息"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/info/edit",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "编辑资料"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/pwd/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "修改密码"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/setting/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "应用设置"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/help/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "常见问题"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/mine/about/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "关于我们"
|
||||||
|
}
|
||||||
|
} , {
|
||||||
|
"path": "pages/warehouse/inbound/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "入库管理"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/inbound/bindTray",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "入库绑盘"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/inbound/emptyTray",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "空托入库"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/inbound/supply",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "补料入库"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/outbound/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "出库管理"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/outbound/confirm",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "版辊出库确认"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/outbound/trayConfirm",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "托盘出库确认"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/outbound/exception",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "出库异常确认"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/inventory/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "盘点管理"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/warehouse/stock/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "库存统计"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/common/webview/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "浏览网页"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"path": "pages/common/textview/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "浏览文本"
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
"tabBar": {
|
||||||
|
"color": "#000000",
|
||||||
|
"selectedColor": "#000000",
|
||||||
|
"borderStyle": "white",
|
||||||
|
"backgroundColor": "#ffffff",
|
||||||
|
"list": [{
|
||||||
|
"pagePath": "pages/index",
|
||||||
|
"iconPath": "static/images/tabbar/home.png",
|
||||||
|
"selectedIconPath": "static/images/tabbar/home_.png",
|
||||||
|
"text": "首页"
|
||||||
|
}, {
|
||||||
|
"pagePath": "pages/work/index",
|
||||||
|
"iconPath": "static/images/tabbar/work.png",
|
||||||
|
"selectedIconPath": "static/images/tabbar/work_.png",
|
||||||
|
"text": "工作台"
|
||||||
|
}, {
|
||||||
|
"pagePath": "pages/mine/index",
|
||||||
|
"iconPath": "static/images/tabbar/mine.png",
|
||||||
|
"selectedIconPath": "static/images/tabbar/mine_.png",
|
||||||
|
"text": "我的"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"globalStyle": {
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"navigationBarTitleText": "RuoYi",
|
||||||
|
"navigationBarBackgroundColor": "#FFFFFF"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -64,13 +64,13 @@
|
|||||||
<uni-icons type="plus" size="22" color="#52c41a"></uni-icons>
|
<uni-icons type="plus" size="22" color="#52c41a"></uni-icons>
|
||||||
<text class="quick-label">空托入库</text>
|
<text class="quick-label">空托入库</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="quick-item" @click="navigateTo('/pages/warehouse/outbound/confirm')">
|
<view class="quick-item" @click="navigateTo('/pages/warehouse/outbound/trayConfirm')">
|
||||||
<uni-icons type="checkmarkempty" size="22" color="#fa8c16"></uni-icons>
|
<uni-icons type="checkmarkempty" size="22" color="#fa8c16"></uni-icons>
|
||||||
<text class="quick-label">出库确认</text>
|
<text class="quick-label">出库确认</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="quick-item" @click="navigateTo('/pages/warehouse/outbound/exception')">
|
<view class="quick-item" @click="navigateTo('/pages/warehouse/outbound/container')">
|
||||||
<uni-icons type="info" size="22" color="#f5222d"></uni-icons>
|
<uni-icons type="info" size="22" color="#f5222d"></uni-icons>
|
||||||
<text class="quick-label">出库异常</text>
|
<text class="quick-label">呼叫空托</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
441
pda/pages/warehouse/inbound/cancelBindTray.vue
Normal file
441
pda/pages/warehouse/inbound/cancelBindTray.vue
Normal file
@@ -0,0 +1,441 @@
|
|||||||
|
<template>
|
||||||
|
<view class="page-container">
|
||||||
|
<!-- 任务信息 -->
|
||||||
|
<view class="task-info" v-if="taskNo">
|
||||||
|
<text class="task-label">任务编号</text>
|
||||||
|
<text class="task-value">{{ taskNo }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 扫码添加物料 -->
|
||||||
|
<view class="scan-section">
|
||||||
|
<view class="scan-header">
|
||||||
|
<text class="scan-title">版辊信息</text>
|
||||||
|
<view class="scan-btn" @click="startScan">
|
||||||
|
<uni-icons type="scan" size="18" color="#1890ff"></uni-icons>
|
||||||
|
<text class="scan-btn-text">扫码</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-wrap">
|
||||||
|
<input class="scan-input" v-model="barcode" placeholder="请输入或扫描版辊编号"
|
||||||
|
@confirm="handleBarcode" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 当前扫码物料信息(待添加) -->
|
||||||
|
<view class="form-section" v-if="currentMaterial">
|
||||||
|
<text class="form-title">物料信息</text>
|
||||||
|
<!-- <view class="info-row">
|
||||||
|
<text class="info-label">物料编码</text>
|
||||||
|
<text class="info-value">{{ currentMaterial.productId }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">物料名称</text>
|
||||||
|
<text class="info-value">{{ currentMaterial.productName }}</text>
|
||||||
|
</view> -->
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">辊号</text>
|
||||||
|
<text class="info-value">{{ currentMaterial.rollerNumber }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">托盘号</text>
|
||||||
|
<text class="info-value">{{ currentMaterial.trayCode }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">绑定数量</text>
|
||||||
|
<input class="form-input" v-model="currentQty" disabled type="number" placeholder="请输入绑定数量" />
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<view class="btn-section">
|
||||||
|
<button class="btn btn-danger" :disabled="!this.barcode || this.barcode.trim() === ''" @click="submitCancelTrayAction">
|
||||||
|
确认取消绑定<!-- ({{ items.length }} 种物料) -->
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button class="btn btn-default" @click="resetAll">全部重置</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getMaterialByDetailId, getTrayMsgByRollerNumber, submitCancelTray, submitCancelTrayMsg } from '@/api/warehouse/inbound'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
taskNo: '',
|
||||||
|
trayCode: '',
|
||||||
|
// 当前扫码
|
||||||
|
barcode: '',
|
||||||
|
currentMaterial: null,
|
||||||
|
currentQty: '',
|
||||||
|
// 已加入列表的物料
|
||||||
|
items: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
if (options.taskNo) {
|
||||||
|
this.taskNo = options.taskNo
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 调用摄像头扫码
|
||||||
|
startScan() {
|
||||||
|
var that = this
|
||||||
|
uni.scanCode({
|
||||||
|
onlyFromCamera: false,
|
||||||
|
scanType: ['barCode', 'qrCode'],
|
||||||
|
success: function(res) {
|
||||||
|
that.barcode = res.result
|
||||||
|
that.handleBarcode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 根据入库明细ID查询物料
|
||||||
|
handleBarcode() {
|
||||||
|
if (!this.barcode) {
|
||||||
|
// this.$modal.msg('请输入入库子单号')
|
||||||
|
this.$modal.msg('请输入版辊信息')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var that = this
|
||||||
|
getTrayMsgByRollerNumber(this.barcode).then(function(res) {
|
||||||
|
that.currentMaterial = res.data
|
||||||
|
that.currentQty = res.data.quantity ? String(res.data.quantity) : ''
|
||||||
|
that.$modal.msgSuccess('物料信息获取成功')
|
||||||
|
}).catch(function() {
|
||||||
|
that.currentMaterial = null
|
||||||
|
that.currentQty = ''
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// 从列表中移除某条物料
|
||||||
|
removeItem(index) {
|
||||||
|
this.items.splice(index, 1)
|
||||||
|
},
|
||||||
|
|
||||||
|
// 提交绑盘
|
||||||
|
submitCancelTrayAction() {
|
||||||
|
if (!this.barcode || this.barcode.trim() === "") {
|
||||||
|
this.$modal.msg('请输入辊号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var data = {
|
||||||
|
barcode: this.barcode,
|
||||||
|
items: this.items.map(function(i) {
|
||||||
|
return {
|
||||||
|
stockinDetailId: i.stockinDetailId,
|
||||||
|
productId: i.rollerNumber,
|
||||||
|
rollerNumber: i.rollerNumber,
|
||||||
|
colorSequence: i.colorSequence,
|
||||||
|
color: i.color,
|
||||||
|
spec: i.spec,
|
||||||
|
quantity: i.quantity
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var that = this
|
||||||
|
// submitBindTray(data).then(function(res) {
|
||||||
|
submitCancelTrayMsg(this.barcode).then(function(res) {
|
||||||
|
that.$modal.msgSuccess(res.msg || '入库绑盘信息已作废')
|
||||||
|
that.resetAll()
|
||||||
|
}).catch(function() {})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 全部重置
|
||||||
|
resetAll() {
|
||||||
|
this.trayCode = ''
|
||||||
|
this.barcode = ''
|
||||||
|
this.currentMaterial = null
|
||||||
|
this.currentQty = ''
|
||||||
|
this.items = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
padding: 24rpx;
|
||||||
|
padding-bottom: 60rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 任务信息 */
|
||||||
|
.task-info {
|
||||||
|
background: #e6f7ff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 20rpx 24rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-label {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #1890ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-value {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 扫码区 */
|
||||||
|
.scan-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8rpx 20rpx;
|
||||||
|
border: 1rpx solid #1890ff;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #1890ff;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-wrap {
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-input {
|
||||||
|
font-size: 28rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
word-break: break-all;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 通用 form-section */
|
||||||
|
.form-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
width: 160rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
word-break: break-all;
|
||||||
|
min-width: 0;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
border-bottom: 1rpx solid #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 加入列表按钮 */
|
||||||
|
.btn-add {
|
||||||
|
margin-top: 24rpx;
|
||||||
|
background: #1890ff;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-add-text {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #fff;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 已添加物料列表 */
|
||||||
|
.list-section {
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-card {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 24rpx 28rpx;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-body {
|
||||||
|
flex: 1;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 8rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-label {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-value {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-value.highlight {
|
||||||
|
color: #1890ff;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-delete {
|
||||||
|
padding: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 空状态 */
|
||||||
|
.empty-state {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 60rpx 0;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-text {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 底部按钮 */
|
||||||
|
.btn-section {
|
||||||
|
padding: 8rpx 0 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
font-size: 30rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
background: #1890ff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-danger {
|
||||||
|
background: #d42427;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-success {
|
||||||
|
background: #0fe825;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary[disabled] {
|
||||||
|
background: #b0d4f5;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-default {
|
||||||
|
background: #fff;
|
||||||
|
color: #666;
|
||||||
|
border: 1rpx solid #d9d9d9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
269
pda/pages/warehouse/inbound/emptyTray.vue
Normal file
269
pda/pages/warehouse/inbound/emptyTray.vue
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
<template>
|
||||||
|
<view class="page-container">
|
||||||
|
<!-- 任务信息 -->
|
||||||
|
<view class="task-info" v-if="taskNo">
|
||||||
|
<text class="task-label">任务编号</text>
|
||||||
|
<text class="task-value">{{ taskNo }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 扫码区域 -->
|
||||||
|
<view class="scan-section">
|
||||||
|
<view class="scan-header">
|
||||||
|
<text class="scan-title">托盘条码</text>
|
||||||
|
<view class="scan-btn" @click="startScan">
|
||||||
|
<uni-icons type="scan" size="18" color="#52c41a"></uni-icons>
|
||||||
|
<text class="scan-btn-text green">扫码</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-wrap">
|
||||||
|
<input class="scan-input" v-model="barcode" placeholder="请输入或扫描托盘条码"
|
||||||
|
@confirm="handleBarcode" focus />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<view class="btn-section">
|
||||||
|
<button class="btn btn-success" @click="submitSupply">生成绑定信息</button>
|
||||||
|
<button class="btn btn-default" @click="resetForm">重置</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getMaterialByBarcode, submitSupplyInbound, submitAddEmptyTrayJob} from '@/api/warehouse/inbound'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
taskNo: '',
|
||||||
|
barcode: '',
|
||||||
|
materialInfo: null,
|
||||||
|
form: {
|
||||||
|
lineCode: '',
|
||||||
|
stationCode: '',
|
||||||
|
quantity: '',
|
||||||
|
reason: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
if (options.taskNo) {
|
||||||
|
this.taskNo = options.taskNo
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
startScan() {
|
||||||
|
var that = this
|
||||||
|
uni.scanCode({
|
||||||
|
onlyFromCamera: false,
|
||||||
|
scanType: ['barCode', 'qrCode'],
|
||||||
|
success: function(res) {
|
||||||
|
that.barcode = res.result
|
||||||
|
that.handleBarcode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleBarcode() {
|
||||||
|
if (!this.barcode) {
|
||||||
|
this.$modal.msg('请输入物料条码')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var that = this
|
||||||
|
getMaterialByBarcode(this.barcode).then(function(res) {
|
||||||
|
that.materialInfo = res.data
|
||||||
|
that.$modal.msgSuccess('物料信息获取成功')
|
||||||
|
}).catch(function() {
|
||||||
|
that.materialInfo = null
|
||||||
|
})
|
||||||
|
},
|
||||||
|
submitSupply() {
|
||||||
|
if (!this.barcode) {
|
||||||
|
this.$modal.msg('请输入托盘条码')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
barcode: this.barcode,
|
||||||
|
}
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
submitAddEmptyTrayJob(data).then(function() {
|
||||||
|
that.$modal.msgSuccess('绑定操作成功')
|
||||||
|
that.resetForm()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
this.barcode = ''
|
||||||
|
this.materialInfo = null
|
||||||
|
this.form = {
|
||||||
|
lineCode: '',
|
||||||
|
stationCode: '',
|
||||||
|
quantity: '',
|
||||||
|
reason: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
padding: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-info {
|
||||||
|
background: #f6ffed;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 20rpx 24rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-label {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #52c41a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-value {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8rpx 20rpx;
|
||||||
|
border: 1rpx solid #52c41a;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #1890ff;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text.green {
|
||||||
|
color: #52c41a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-wrap {
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 5rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-input {
|
||||||
|
font-size: 28rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
word-break: break-all;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
width: 160rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
border-bottom: 1rpx solid #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-section {
|
||||||
|
padding: 24rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
font-size: 30rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-success {
|
||||||
|
background: #52c41a;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-default {
|
||||||
|
background: #fff;
|
||||||
|
color: #666;
|
||||||
|
border: 1rpx solid #d9d9d9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
274
pda/pages/warehouse/outbound/container.vue
Normal file
274
pda/pages/warehouse/outbound/container.vue
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
<template>
|
||||||
|
<view class="page-container">
|
||||||
|
<!-- 任务信息 -->
|
||||||
|
<view class="task-info" v-if="taskNo">
|
||||||
|
<text class="task-label">出库任务编号</text>
|
||||||
|
<text class="task-value">{{ taskNo }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 扫码区域 -->
|
||||||
|
<view class="scan-section">
|
||||||
|
<view class="scan-header">
|
||||||
|
<text class="scan-title">1.选择立库区域</text>
|
||||||
|
</view>
|
||||||
|
<picker mode="selector" :range="cargoAreaOptions" @change="onCargoAreaChange">
|
||||||
|
<view class="form-input picker-text">
|
||||||
|
{{ selectedCargoArea || '请选择库区' }}
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="scan-section">
|
||||||
|
<view class="scan-header">
|
||||||
|
<text class="scan-title">2.选择托盘类型</text>
|
||||||
|
</view>
|
||||||
|
<picker mode="selector" :range="palletTypeOptions" @change="onPalletTypeChange">
|
||||||
|
<view class="form-input picker-text">
|
||||||
|
{{ selectedPalletType || '请选择托盘类型' }}
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<view class="btn-section" >
|
||||||
|
<button class="btn btn-orange" @click="handleCallContainer">呼叫容器出库</button>
|
||||||
|
<button class="btn btn-default" @click="resetForm">重置</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getOutboundDetail, callStockOutForContainer, confirmOutbound } from '@/api/warehouse/outbound'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
taskNo: '',
|
||||||
|
barcode: '',
|
||||||
|
traCode: '',
|
||||||
|
outboundInfo: null,
|
||||||
|
confirmQty: '',
|
||||||
|
form: {
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
// 新增:下拉框选项与选中状态
|
||||||
|
cargoAreaOptions: ['01', '02', '03', '04'],
|
||||||
|
palletTypeOptions: [1, 2, 3],
|
||||||
|
selectedCargoArea: '', // 库区
|
||||||
|
selectedPalletType: '' // 托盘类型
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
if (options.taskNo) {
|
||||||
|
this.taskNo = options.taskNo
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 处理库区选择
|
||||||
|
onCargoAreaChange(e) {
|
||||||
|
this.selectedCargoArea = this.cargoAreaOptions[e.detail.value]
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理托盘类型选择
|
||||||
|
onPalletTypeChange(e) {
|
||||||
|
this.selectedPalletType = this.palletTypeOptions[e.detail.value]
|
||||||
|
},
|
||||||
|
|
||||||
|
// 呼叫空托出库逻辑
|
||||||
|
handleCallContainer() {
|
||||||
|
if (!this.selectedCargoArea || !this.selectedPalletType) {
|
||||||
|
this.$modal.msg('请先选择库区和托盘类型')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
uni.showLoading({ title: '呼叫中...' })
|
||||||
|
callStockOutForContainer(this.selectedCargoArea, this.selectedPalletType)
|
||||||
|
.then(res => {
|
||||||
|
uni.hideLoading()
|
||||||
|
this.$modal.msgSuccess('呼叫空托出库成功')
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
uni.hideLoading()
|
||||||
|
// this.$modal.msg('网络异常,请稍后重试')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
resetForm() {
|
||||||
|
this.selectedCargoArea = ''
|
||||||
|
this.selectedPalletType = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
padding: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-info {
|
||||||
|
background: #fff7e6;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 20rpx 24rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-label {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #fa8c16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-value {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8rpx 20rpx;
|
||||||
|
border: 1rpx solid #fa8c16;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text.orange {
|
||||||
|
color: #fa8c16;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.scan-input {
|
||||||
|
font-size: 28rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
word-break: break-all;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
width: 160rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
border-bottom: 1rpx solid #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value.highlight {
|
||||||
|
color: #fa8c16;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-section {
|
||||||
|
padding: 24rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
font-size: 30rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-orange {
|
||||||
|
background: #fa8c16;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-default {
|
||||||
|
background: #fff;
|
||||||
|
color: #666;
|
||||||
|
border: 1rpx solid #d9d9d9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picker-text {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #767676;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
440
pda/pages/warehouse/outbound/trayConfirm.vue
Normal file
440
pda/pages/warehouse/outbound/trayConfirm.vue
Normal file
@@ -0,0 +1,440 @@
|
|||||||
|
<template>
|
||||||
|
<view class="page-container">
|
||||||
|
<!-- 任务信息 -->
|
||||||
|
<view class="task-info" v-if="taskNo">
|
||||||
|
<text class="task-label">出库任务编号</text>
|
||||||
|
<text class="task-value">{{ taskNo }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 扫码区域 -->
|
||||||
|
<view class="scan-section">
|
||||||
|
<view class="scan-header">
|
||||||
|
<text class="scan-title">扫描出库托盘条码</text>
|
||||||
|
<view class="scan-btn" @click="startScan">
|
||||||
|
<uni-icons type="scan" size="18" color="#fa8c16"></uni-icons>
|
||||||
|
<text class="scan-btn-text orange">扫码</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-wrap">
|
||||||
|
<input class="scan-input" v-model="barcode" placeholder="请输入或扫描托盘条码"
|
||||||
|
@confirm="handleBarcode" focus />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 出库信息 -->
|
||||||
|
<view class="form-section" v-for="(item, index) in outboundList" :key="index">
|
||||||
|
<view class="scan-header">
|
||||||
|
<text class="scan-title">出库信息</text>
|
||||||
|
<view class="info-btn">
|
||||||
|
<button class="scan-btn-text orange" @click="confirmSingleOutbound(item)">确认出库</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">版辊编号</text>
|
||||||
|
<text class="info-value">{{ item.rollerNumber }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">托盘库存数量</text>
|
||||||
|
<text class="info-value">{{ item.stockQuantity }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">出库数量</text>
|
||||||
|
<!-- <text class="info-value">{{ item.outQuantity }}</text> -->
|
||||||
|
<input
|
||||||
|
class="form-section-input"
|
||||||
|
type="number"
|
||||||
|
v-model="item.outQuantity"
|
||||||
|
:value="item.outQuantity || 0"
|
||||||
|
placeholder="0"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
<view class="btn-group">
|
||||||
|
<button class="btn-max btn-reset" @click="resetItemQty(item)">重置</button>
|
||||||
|
<button class="btn-max" @click="setMaxQty(item)">最大</button>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<view class="btn-section" >
|
||||||
|
<button class="btn btn-orange" v-if="outboundList" @click="stockoutComplete">托盘确认出库</button>
|
||||||
|
<button class="btn btn-default" @click="resetForm">重置</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getOutboundDetail, getTrayCodeDetail, confirmOutbound, stockoutTrayCodeComplete } from '@/api/warehouse/outbound'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
taskNo: '',
|
||||||
|
barcode: '',
|
||||||
|
traCode: '',
|
||||||
|
outboundInfo: null,
|
||||||
|
outboundList: [],
|
||||||
|
confirmQty: '',
|
||||||
|
form: {
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
if (options.taskNo) {
|
||||||
|
this.taskNo = options.taskNo
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
startScan() {
|
||||||
|
var that = this
|
||||||
|
uni.scanCode({
|
||||||
|
onlyFromCamera: false,
|
||||||
|
scanType: ['barCode', 'qrCode'],
|
||||||
|
success: function(res) {
|
||||||
|
that.barcode = res.result
|
||||||
|
that.handleBarcode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
handleBarcode() {
|
||||||
|
if (!this.barcode) {
|
||||||
|
this.$modal.msg('请输入托盘条码')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
// var params = { taskNo: this.taskNo, barcode: this.barcode }
|
||||||
|
var params = { barcode: this.barcode }
|
||||||
|
|
||||||
|
getTrayCodeDetail(this.barcode).then(function(res) {
|
||||||
|
if (Array.isArray(res.data)) {
|
||||||
|
that.outboundList = res.data
|
||||||
|
} else if (res.data) {
|
||||||
|
that.outboundList = [res.data]
|
||||||
|
} else {
|
||||||
|
that.outboundList = []
|
||||||
|
}
|
||||||
|
|
||||||
|
if (that.outboundList.length > 0) {
|
||||||
|
that.$modal.msgSuccess('获取到 ' + that.outboundList.length + ' 条出库信息')
|
||||||
|
} else {
|
||||||
|
that.$modal.msg('未找到该托盘信息')
|
||||||
|
}
|
||||||
|
}).catch(function() {
|
||||||
|
that.outboundList = []
|
||||||
|
// that.$modal.msg('未找到该托盘信息,可能是未分配单据或已出库完成')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增:确认单条出库请求
|
||||||
|
confirmSingleOutbound(item) {
|
||||||
|
// 构造你需要的参数
|
||||||
|
var params = {
|
||||||
|
barcode: item.rollerNumber,
|
||||||
|
outQuantity: item.outQuantity
|
||||||
|
}
|
||||||
|
|
||||||
|
uni.showLoading({ title: '提交中...' })
|
||||||
|
// TODO: 替换为你实际的后端确认接口
|
||||||
|
confirmOutbound(params).then(res => {
|
||||||
|
uni.hideLoading()
|
||||||
|
this.$modal.msgSuccess('版辊 ' + item.rollerNumber + ' 出库成功')
|
||||||
|
|
||||||
|
// 可选:出库成功后从列表中移除该项,避免重复点击
|
||||||
|
this.outboundList = this.outboundList.filter(i => i.rollerNumber !== item.rollerNumber)
|
||||||
|
}).catch(err => {
|
||||||
|
// uni.hideLoading()
|
||||||
|
// this.$modal.msg('出库失败', err)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
//版辊出库数量确认
|
||||||
|
confirmOutbound() {
|
||||||
|
if (!this.barcode) {
|
||||||
|
this.$modal.msg('请输入托盘号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// if (!this.confirmQty) {
|
||||||
|
// this.$modal.msg('请输入实际数量')
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
taskNo: this.taskNo,
|
||||||
|
barcode: this.barcode,
|
||||||
|
quantity: this.confirmQty,
|
||||||
|
remark: this.form.remark
|
||||||
|
}
|
||||||
|
var that = this
|
||||||
|
confirmOutbound(data).then(function() {
|
||||||
|
that.$modal.msg('出库确认完成')
|
||||||
|
that.resetForm()
|
||||||
|
}).catch(() => {
|
||||||
|
// 全局拦截器通常已处理错误弹窗,这里可只处理状态重置
|
||||||
|
console.log('出库确认失败')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
//托盘物料出库完成确认
|
||||||
|
stockoutComplete() {
|
||||||
|
if (!this.barcode) {
|
||||||
|
this.$modal.msg('请输入托盘号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// var data = {
|
||||||
|
// // taskNo: this.taskNo,
|
||||||
|
// barcode: this.barcode,
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log(this.barcode)
|
||||||
|
// var that = this
|
||||||
|
stockoutTrayCodeComplete(this.barcode).then(() => {
|
||||||
|
that.$modal.msgSuccess(this.barcode + '出库确认成功')
|
||||||
|
that.resetForm()
|
||||||
|
}).catch(() => {
|
||||||
|
// 全局拦截器通常已处理错误弹窗,这里可只处理状态重置
|
||||||
|
// console.log('出库确认失败')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
resetItemQty(item) {
|
||||||
|
item.outQuantity = 0; // 或者重置为后端返回的默认数量
|
||||||
|
},
|
||||||
|
|
||||||
|
setMaxQty(item) {
|
||||||
|
// 假设最大数量就是 item 初始带的某个字段,比如 maxQuantity
|
||||||
|
// 如果没有这个字段,你可以写死一个值,或者使用 item.outQuantity 的某个上限
|
||||||
|
if (item.maxQuantity !== undefined) {
|
||||||
|
item.outQuantity = item.maxQuantity;
|
||||||
|
} else {
|
||||||
|
// 兜底逻辑:如果后端没传最大数量字段,你可以自定义一个默认最大值
|
||||||
|
item.outQuantity = 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
resetForm() {
|
||||||
|
this.barcode = ''
|
||||||
|
this.outboundInfo = null
|
||||||
|
this.outboundList = []
|
||||||
|
this.confirmQty = ''
|
||||||
|
this.form = {
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
padding: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-info {
|
||||||
|
background: #fff7e6;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 20rpx 24rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-label {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #fa8c16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-value {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8rpx 20rpx;
|
||||||
|
border: 1rpx solid #fa8c16;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-btn-text.orange {
|
||||||
|
color: #fa8c16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-wrap {
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scan-input {
|
||||||
|
font-size: 28rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
word-break: break-all;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 28rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-section-input {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 28rpx; /* ✅ 关键:字体大小必须与 label 一致 */
|
||||||
|
color: #333;
|
||||||
|
text-align: right; /* ✅ 关键:内容靠右对齐 */
|
||||||
|
height: 28rpx; /* ✅ 关键:明确设置高度 */
|
||||||
|
line-height: 28rpx; /* ✅ 关键:行高必须与 label 完全一致,解决多端对齐差异 */
|
||||||
|
padding: 0; /* ✅ 关键:清除 input 默认的 padding,防止错位 */
|
||||||
|
margin: 0; /* 清除默认 margin */
|
||||||
|
border: none; /* 如果需要无边框效果 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 16rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
width: 160rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border: 1rpx solid #e8e8e8;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 16rpx;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 12rpx 0;
|
||||||
|
border-bottom: 1rpx solid #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value.highlight {
|
||||||
|
color: #fa8c16;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-section {
|
||||||
|
padding: 24rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
font-size: 30rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-orange {
|
||||||
|
background: #fa8c16;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-default {
|
||||||
|
background: #fff;
|
||||||
|
color: #666;
|
||||||
|
border: 1rpx solid #d9d9d9;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ✅ 新增:按钮组容器,让两个按钮并排 */
|
||||||
|
.btn-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 16rpx; /* 与输入框的间距 */
|
||||||
|
margin-top: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 按钮基础样式(最大按钮) */
|
||||||
|
.btn-max {
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #fafafa;
|
||||||
|
background-color: #fa8c16;
|
||||||
|
border: 1rpx solid #fa8c16;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 0 100rpx;
|
||||||
|
height: 50rpx;
|
||||||
|
line-height: 50rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ✅ 新增:重置按钮样式(与最大按钮之间留一点间距) */
|
||||||
|
.btn-reset {
|
||||||
|
color: #fa8c16;
|
||||||
|
margin-right: 12rpx;
|
||||||
|
background-color: #fff7e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -10,10 +10,9 @@ import com.ruoyi.common.core.domain.AjaxResult;
|
|||||||
import com.ruoyi.log.domain.RequestLog;
|
import com.ruoyi.log.domain.RequestLog;
|
||||||
import com.ruoyi.log.service.IRequestLogService;
|
import com.ruoyi.log.service.IRequestLogService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import java.util.Map;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/wmsService/wcs")
|
@RequestMapping("/api/wmsService/wcs")
|
||||||
@@ -37,6 +36,19 @@ public class WcsServiceController extends BaseController {
|
|||||||
return ajaxResult;
|
return ajaxResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手动指定货位出库
|
||||||
|
*/
|
||||||
|
@PostMapping("/stockoutByManual")
|
||||||
|
public AjaxResult stockoutByManual(@RequestBody Map<String, String> params) {
|
||||||
|
AjaxResult ajaxResult = apiWcsService.stockoutByManual(params);
|
||||||
|
RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(params), "创建入库任务请求", ajaxResult);
|
||||||
|
requestLogService.insertRequestLog(requestLog);
|
||||||
|
return ajaxResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求补码作业
|
* 请求补码作业
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public interface IApiWcsService {
|
|||||||
* 呼叫可用容器出库
|
* 呼叫可用容器出库
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public AjaxResult callContainerOut(String cargoAreaId, Integer type);
|
public AjaxResult callContainerOut(Map<String, Object> params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 响应wcs请求-下发入库任务
|
* 响应wcs请求-下发入库任务
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.ruoyi.bas.stock.service.IBasStockInfoService;
|
|||||||
import com.ruoyi.bas.stock.service.IBasStockService;
|
import com.ruoyi.bas.stock.service.IBasStockService;
|
||||||
import com.ruoyi.common.*;
|
import com.ruoyi.common.*;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.common.core.text.Convert;
|
||||||
import com.ruoyi.common.utils.MessageUtils;
|
import com.ruoyi.common.utils.MessageUtils;
|
||||||
import com.ruoyi.in.bind.domain.InTrayMsg;
|
import com.ruoyi.in.bind.domain.InTrayMsg;
|
||||||
import com.ruoyi.in.bind.service.IInTrayMsgService;
|
import com.ruoyi.in.bind.service.IInTrayMsgService;
|
||||||
@@ -38,6 +39,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -85,26 +87,29 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public AjaxResult callContainerOut(String cargoAreaId, Integer type){
|
public AjaxResult callContainerOut(Map<String, Object> params){
|
||||||
|
|
||||||
|
String cargoAreaId = (String) params.get("cargoAreaId");
|
||||||
|
int type = Convert.toInt(params.get("palletType"), 0);
|
||||||
|
|
||||||
//获取立库区域和托盘类型
|
//获取立库区域和托盘类型
|
||||||
List<BasCargoSpace> basCargoSpaces = basCargoSpaceService.selectAllBasCargoSpaceForStockout(
|
List<BasCargoSpace> basCargoSpaceEmptyTray = basCargoSpaceService.selectBasCargoSpaceListForEmptyTray(
|
||||||
new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).build()
|
new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).build()
|
||||||
);
|
);
|
||||||
|
// List<BasCargoSpace> basCargoSpaceContainer = basCargoSpaceService.selectBasCargoSpaceListForContainer(
|
||||||
|
// new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).build()
|
||||||
|
// );
|
||||||
|
|
||||||
List<BasStock> stocks = basStockService.selectBasStockList(
|
if (basCargoSpaceEmptyTray.isEmpty()) {
|
||||||
new BasStock().builder().productId("KTP0001").stockStatus("1").build()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (stocks.isEmpty()) {
|
|
||||||
log.info("【呼叫容器】空容器呼叫失败,无可用的空容器库存");
|
log.info("【呼叫容器】空容器呼叫失败,无可用的空容器库存");
|
||||||
|
|
||||||
//todo 此处可查存放库存较少的托盘出库
|
//todo 此处可查存放库存较少的托盘出库
|
||||||
}else{
|
}else{
|
||||||
BasStock stock = stocks.get(0);
|
//要执行容器出库的货位
|
||||||
|
BasCargoSpace cargoSpaceCurrent = basCargoSpaceEmptyTray.get(0);
|
||||||
|
|
||||||
//检查出库货位是否触发移库作业 - 双伸货位出库查询单伸是否有货
|
//检查出库货位是否触发移库作业 - 双伸货位出库查询单伸是否有货
|
||||||
BasCargoSpace cargoSpaceCurrent = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId());//要出库的货位
|
|
||||||
if (cargoSpaceCurrent.getIssDouble().equals(CargoSpaceCode.CARGOSPACE_ISDOUBLE_Y)){//是否处于双伸位
|
if (cargoSpaceCurrent.getIssDouble().equals(CargoSpaceCode.CARGOSPACE_ISDOUBLE_Y)){//是否处于双伸位
|
||||||
BasCargoSpace cargoSpaceInSide = basCargoSpaceService.selectAnotherBasCargoSpaceBySameGroup(cargoSpaceCurrent);//获取【要出库货位】对应的【单伸货位】
|
BasCargoSpace cargoSpaceInSide = basCargoSpaceService.selectAnotherBasCargoSpaceBySameGroup(cargoSpaceCurrent);//获取【要出库货位】对应的【单伸货位】
|
||||||
//如果外侧有货,先执行移库
|
//如果外侧有货,先执行移库
|
||||||
@@ -159,9 +164,14 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
"【空托出库-移库】推送成功,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId()
|
"【空托出库-移库】推送成功,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(cargoSpaceCurrent.getTrayCode());
|
||||||
|
if (!stocks.isEmpty()){
|
||||||
|
for (BasStock stock : stocks) {
|
||||||
//更新库存表货位【占用】状态
|
//更新库存表货位【占用】状态
|
||||||
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
|
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
|
||||||
basStockService.updateBasStock(stock);
|
basStockService.updateBasStock(stock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//更新货位表【预占用】状态
|
//更新货位表【预占用】状态
|
||||||
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpaceInSide.getCargoSpaceId(),cargoSpaceInSide.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpaceInSide.getCargoSpaceId(),cargoSpaceInSide.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
||||||
@@ -174,34 +184,40 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (basCargoSpaces.stream().anyMatch(s -> s.getCargoSpaceId().equals(stock.getCargoSpaceId()))) {
|
//生成容器出库作业
|
||||||
//生成空托出库作业
|
MydoJob job = mydoJobService.selectMydoJobByTrayCode(cargoSpaceCurrent.getTrayCode());
|
||||||
if (mydoJobService.selectMydoJobByTrayCode(stock.getTrayCode()) == null) {
|
if (ObjUtil.isNull(job)) {
|
||||||
//库存号 - 用于获取托盘号
|
|
||||||
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByStockId(stock.getStockId());
|
//库存号 - 用于判断容器是【空托】或者【带货托盘】
|
||||||
//作业号
|
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(cargoSpaceCurrent.getTrayCode());
|
||||||
|
|
||||||
|
//判断托盘【未满】或【空】区分任务类型
|
||||||
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT_EMPTY_PALLET);
|
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT_EMPTY_PALLET);
|
||||||
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT_EMPTY_PALLET);
|
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT_EMPTY_PALLET);
|
||||||
//判断托盘【未满】或【空】区分任务类型
|
|
||||||
int taskType = TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY;
|
int taskType = TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY;
|
||||||
|
if (stockInfo.getEmptyStatus() > 0){
|
||||||
|
taskType = TaskType.TASKTYPE_STOCKOUT_CONTAINER;
|
||||||
|
}
|
||||||
|
|
||||||
MydoJob mydoJob = new MydoJob().builder()
|
MydoJob mydoJob = new MydoJob().builder()
|
||||||
.jobId(jobId)
|
.jobId(jobId)
|
||||||
.taskNo(taskNo)
|
.taskNo(taskNo)
|
||||||
.inOrOut(taskType)
|
.inOrOut(taskType)
|
||||||
.trayCode(stockInfo.getTrayCode())
|
.trayCode(cargoSpaceCurrent.getTrayCode())
|
||||||
.status(TaskStatusEnum.READY.getCode())
|
.status(TaskStatusEnum.READY.getCode())
|
||||||
.cargoSpaceId(stock.getCargoSpaceId())
|
.cargoSpaceId(cargoSpaceCurrent.getCargoSpaceId())
|
||||||
.trayType(type)
|
.trayType(type)
|
||||||
.executionPhase("0")
|
.executionPhase("0")
|
||||||
.warehouseId("01")
|
.warehouseId("01")
|
||||||
.build();
|
.build();
|
||||||
mydoJobService.insertMydoJob(mydoJob);
|
mydoJobService.insertMydoJob(mydoJob);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -245,27 +261,16 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
return AjaxResult.error("未找到该托盘的绑定信息,请确认是否有绑定操作");
|
return AjaxResult.error("未找到该托盘的绑定信息,请确认是否有绑定操作");
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------- 入库货位分配 ---------------------------
|
|
||||||
//区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘
|
//检查当前条码是否已经生成作业
|
||||||
BasCargoSpace cargoParam;
|
MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(wcsStockinReiceive.getTrayCode());
|
||||||
if (wcsStockinReiceive.getHeight() == 1){
|
|
||||||
//低货位380H - 不限制高度
|
|
||||||
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
|
|
||||||
}else{
|
|
||||||
//高货位510H - 只能放指定层高的货位
|
|
||||||
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).theHeight(wcsStockinReiceive.getHeight()).build();
|
|
||||||
}
|
|
||||||
BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam);
|
|
||||||
if (cargoParam == null) {
|
|
||||||
log.warn("【货位分配】该类型托盘立库中无可用货位");
|
|
||||||
return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位");
|
|
||||||
}
|
|
||||||
|
|
||||||
String jobId;
|
String jobId;
|
||||||
String taskNo;
|
String taskNo;
|
||||||
int taskType;
|
int taskType;
|
||||||
String instockinId;
|
String instockinId;
|
||||||
String instockinDetailId;
|
String instockinDetailId;
|
||||||
|
BasCargoSpace basCargoSpace;
|
||||||
|
|
||||||
//>>>判断入库类型
|
//>>>判断入库类型
|
||||||
if (trayMsgs.stream().anyMatch(s -> s.getProductId().equals(ProductType.EMPTY_TRAY))){
|
if (trayMsgs.stream().anyMatch(s -> s.getProductId().equals(ProductType.EMPTY_TRAY))){
|
||||||
@@ -288,11 +293,25 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//检查当前条码是否已经生成作业
|
|
||||||
MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(wcsStockinReiceive.getTrayCode());
|
|
||||||
|
|
||||||
if (ObjUtil.isEmpty(mydoJob)) {
|
if (ObjUtil.isEmpty(mydoJob)) {
|
||||||
|
|
||||||
|
//--------------------------- 入库货位分配 ---------------------------
|
||||||
|
//区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘
|
||||||
|
BasCargoSpace cargoParam;
|
||||||
|
if (wcsStockinReiceive.getHeight() == 1){
|
||||||
|
//低货位380H - 不限制高度
|
||||||
|
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
|
||||||
|
}else{
|
||||||
|
//高货位510H - 只能放指定层高的货位
|
||||||
|
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).theHeight(wcsStockinReiceive.getHeight()).build();
|
||||||
|
}
|
||||||
|
BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam);
|
||||||
|
basCargoSpace = cargoStockin;
|
||||||
|
if (cargoParam == null) {
|
||||||
|
log.warn("【货位分配】该类型托盘立库中无可用货位");
|
||||||
|
return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位");
|
||||||
|
}
|
||||||
|
|
||||||
//>>>生成wms的入库主作业
|
//>>>生成wms的入库主作业
|
||||||
MydoJob mydoJobNew = new MydoJob().builder()
|
MydoJob mydoJobNew = new MydoJob().builder()
|
||||||
.jobId(jobId)
|
.jobId(jobId)
|
||||||
@@ -314,6 +333,7 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
log.info("【wms生成入库】<空托入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobNew.getJobId() ,mydoJobNew.getTaskNo() ,mydoJobNew.getTrayCode(), cargoStockin.getCargoSpaceId());
|
log.info("【wms生成入库】<空托入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobNew.getJobId() ,mydoJobNew.getTaskNo() ,mydoJobNew.getTrayCode(), cargoStockin.getCargoSpaceId());
|
||||||
}else{
|
}else{
|
||||||
log.info("【提示】<常规入库>wms已存在该条码作业,托盘号:{}",mydoJob.getTrayCode());
|
log.info("【提示】<常规入库>wms已存在该条码作业,托盘号:{}",mydoJob.getTrayCode());
|
||||||
|
basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
|
||||||
}
|
}
|
||||||
|
|
||||||
//>>>根据绑定物料信息条数循环生成子作业,单条绑定信息对应一条子任务
|
//>>>根据绑定物料信息条数循环生成子作业,单条绑定信息对应一条子任务
|
||||||
@@ -347,7 +367,6 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
.build();
|
.build();
|
||||||
mydoJobDetailService.insertMydoJobDetail(detail);
|
mydoJobDetailService.insertMydoJobDetail(detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
instockinId = trayMsg.getStockinId();
|
instockinId = trayMsg.getStockinId();
|
||||||
instockinDetailId = trayMsg.getStockinDetailId() + sum;
|
instockinDetailId = trayMsg.getStockinDetailId() + sum;
|
||||||
@@ -368,7 +387,7 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
.stockinId(instockinId)
|
.stockinId(instockinId)
|
||||||
.stockinDetailId(instockinDetailId)
|
.stockinDetailId(instockinDetailId)
|
||||||
.status(0)
|
.status(0)
|
||||||
.trayType(cargoStockin.getTheType())
|
.trayType(type)
|
||||||
.build();
|
.build();
|
||||||
mydoJobDetailService.insertMydoJobDetail(detail);
|
mydoJobDetailService.insertMydoJobDetail(detail);
|
||||||
}
|
}
|
||||||
@@ -378,8 +397,8 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//货位状态更新为【入库预占用】
|
//货位状态更新为【入库预占用】
|
||||||
cargoStockin.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN);
|
basCargoSpace.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN);
|
||||||
basCargoSpaceService.updateBasCargoSpace(cargoStockin);
|
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
|
||||||
|
|
||||||
//返回wcs的响应信息
|
//返回wcs的响应信息
|
||||||
WcsStockinResponse response = new WcsStockinResponse()
|
WcsStockinResponse response = new WcsStockinResponse()
|
||||||
@@ -389,10 +408,10 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
.taskNo(taskNo)
|
.taskNo(taskNo)
|
||||||
.taskType(taskType)
|
.taskType(taskType)
|
||||||
.trayCode(wcsStockinReiceive.getTrayCode())
|
.trayCode(wcsStockinReiceive.getTrayCode())
|
||||||
.cargoSpaceId(cargoStockin.getCargoSpaceId())
|
.cargoSpaceId(basCargoSpace.getCargoSpaceId())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
log.info("【wms请求响应】<常规入库>响应信息,作业号:{},任务号:{},分配货位:{}",jobId ,taskNo, cargoStockin.getCargoSpaceId());
|
log.info("【wms请求响应】<常规入库>响应信息,作业号:{},任务号:{},分配货位:{}",jobId ,taskNo, basCargoSpace.getCargoSpaceId());
|
||||||
|
|
||||||
return AjaxResult.success(response);
|
return AjaxResult.success(response);
|
||||||
|
|
||||||
@@ -401,28 +420,31 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 指定货位出库
|
* 指定货位出库
|
||||||
* @param cargoSpaceId
|
* @param params
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public AjaxResult stockoutByManual(String cargoSpaceId){
|
public AjaxResult stockoutByManual(Map<String, String> params){
|
||||||
|
|
||||||
|
String cargoSpaceId = params.get("cargoSpaceId");
|
||||||
|
|
||||||
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId);
|
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId);
|
||||||
if (ObjUtil.isNull(cargoSpace)){
|
if (ObjUtil.isNull(cargoSpace)){
|
||||||
log.warn("【操作失败】找不到该货位,可能是货位信息错误,请联系管理员,货位号:", cargoSpaceId);
|
log.warn("【操作失败】找不到该货位,可能是货位异常或参数错误,请联系管理员,货位号:", cargoSpaceId);
|
||||||
return AjaxResult.error("找不到该货位信息");
|
return AjaxResult.error("找不到该货位信息");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cargoSpace.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){
|
// if (!cargoSpace.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){
|
||||||
log.warn("【操作失败】该货位已被其它任务预占用,请等待任务执行完成后重试,货位号:", cargoSpaceId);
|
// log.warn("【操作失败】该货位已被其它任务预占用,请等待任务执行完成后重试,货位号:", cargoSpaceId);
|
||||||
return AjaxResult.error("该货位已被其它任务预占用,请等待任务执行完成后重试");
|
// return AjaxResult.error("该货位已被其它任务预占用,请等待任务执行完成后重试");
|
||||||
}
|
// }
|
||||||
|
|
||||||
MydoJob job = mydoJobService.selectMydoJobByTrayCode(cargoSpace.getTrayCode());
|
MydoJob job = mydoJobService.selectMydoJobByTrayCode(cargoSpace.getTrayCode());
|
||||||
if (ObjUtil.isNull(job)){
|
if (ObjUtil.isNull(job)){
|
||||||
|
|
||||||
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKIN_EMPTY_PALLET);
|
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT_MANUAL);
|
||||||
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_EMPTY_PALLET);
|
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT);
|
||||||
int taskType = TaskType.TASKTYPE_STOCKIN_EMPTY_TRAY;
|
int taskType = TaskType.TASKTYPE_STOCKOUT_MANUAL;
|
||||||
|
|
||||||
MydoJob mydoJob = new MydoJob().builder()
|
MydoJob mydoJob = new MydoJob().builder()
|
||||||
.jobId(jobId)
|
.jobId(jobId)
|
||||||
@@ -441,7 +463,7 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
mydoJobService.insertMydoJob(mydoJob);
|
mydoJobService.insertMydoJob(mydoJob);
|
||||||
log.info("【wms生成出库】<指定货位出库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJob.getJobId() ,mydoJob.getTaskNo() ,mydoJob.getTrayCode(), cargoSpaceId);
|
log.info("【wms生成出库】<指定货位出库>作业,作业号:{},任务号:{},托盘号:{},出库货位:{}",mydoJob.getJobId() ,mydoJob.getTaskNo() ,mydoJob.getTrayCode(), cargoSpaceId);
|
||||||
|
|
||||||
List<BasStock> stocks = basStockService.selectBasStockList(
|
List<BasStock> stocks = basStockService.selectBasStockList(
|
||||||
new BasStock().builder().cargoSpaceId(cargoSpaceId).build()
|
new BasStock().builder().cargoSpaceId(cargoSpaceId).build()
|
||||||
|
|||||||
@@ -29,6 +29,22 @@ public interface BasCargoSpaceMapper
|
|||||||
*/
|
*/
|
||||||
public List<BasCargoSpace> selectBasCargoSpaceList(BasCargoSpace basCargoSpace);
|
public List<BasCargoSpace> selectBasCargoSpaceList(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询货位信息列表 - 空托盘
|
||||||
|
*
|
||||||
|
* @param basCargoSpace 货位信息
|
||||||
|
* @return 货位信息集合
|
||||||
|
*/
|
||||||
|
public List<BasCargoSpace> selectBasCargoSpaceListForEmptyTray(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询货位信息列表 - 带货容器
|
||||||
|
*
|
||||||
|
* @param basCargoSpace 货位信息
|
||||||
|
* @return 货位信息集合
|
||||||
|
*/
|
||||||
|
public List<BasCargoSpace> selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增货位信息
|
* 新增货位信息
|
||||||
*
|
*
|
||||||
@@ -66,6 +82,7 @@ public interface BasCargoSpaceMapper
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<BasCargoSpaceStatus> selectBasCargoSpaceListByGroupByStatus(BasCargoSpace basCargoSpace);
|
List<BasCargoSpaceStatus> selectBasCargoSpaceListByGroupByStatus(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询排列表
|
* 查询排列表
|
||||||
* @param basCargoSpace
|
* @param basCargoSpace
|
||||||
|
|||||||
@@ -29,6 +29,24 @@ public interface IBasCargoSpaceService
|
|||||||
public List<BasCargoSpace> selectBasCargoSpaceList(BasCargoSpace basCargoSpace);
|
public List<BasCargoSpace> selectBasCargoSpaceList(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询货位信息列表 - 空托盘
|
||||||
|
*
|
||||||
|
* @param basCargoSpace 货位信息
|
||||||
|
* @return 货位信息集合
|
||||||
|
*/
|
||||||
|
public List<BasCargoSpace> selectBasCargoSpaceListForEmptyTray(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询货位信息列表 - 非空载货托盘
|
||||||
|
*
|
||||||
|
* @param basCargoSpace 货位信息
|
||||||
|
* @return 货位信息集合
|
||||||
|
*/
|
||||||
|
public List<BasCargoSpace> selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增货位信息
|
* 新增货位信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -46,6 +46,30 @@ public class BasCargoSpaceServiceImpl implements IBasCargoSpaceService
|
|||||||
return basCargoSpaceMapper.selectBasCargoSpaceList(basCargoSpace);
|
return basCargoSpaceMapper.selectBasCargoSpaceList(basCargoSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询货位信息列表 - 空托盘
|
||||||
|
*
|
||||||
|
* @param basCargoSpace 货位信息
|
||||||
|
* @return 货位信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<BasCargoSpace> selectBasCargoSpaceListForEmptyTray(BasCargoSpace basCargoSpace)
|
||||||
|
{
|
||||||
|
return basCargoSpaceMapper.selectBasCargoSpaceListForEmptyTray(basCargoSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询货位信息列表 - 非空载货托盘
|
||||||
|
*
|
||||||
|
* @param basCargoSpace 货位信息
|
||||||
|
* @return 货位信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<BasCargoSpace> selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace)
|
||||||
|
{
|
||||||
|
return basCargoSpaceMapper.selectBasCargoSpaceListForContainer(basCargoSpace);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增货位信息
|
* 新增货位信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -29,6 +29,15 @@ public interface BasStockMapper
|
|||||||
public List<BasStock> selectBasStockList(BasStock basStock);
|
public List<BasStock> selectBasStockList(BasStock basStock);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询库存信息列表
|
||||||
|
*
|
||||||
|
* @param basStock 库存信息
|
||||||
|
* @return 库存信息集合
|
||||||
|
*/
|
||||||
|
public List<BasStock> selectBasStockListForEmptyTray(BasStock basStock);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询指定物料的所有库存信息
|
* 查询指定物料的所有库存信息
|
||||||
* @param productId
|
* @param productId
|
||||||
|
|||||||
@@ -56,6 +56,14 @@ public interface IBasStockService
|
|||||||
*/
|
*/
|
||||||
public List<BasStock> selectBasStockList(BasStock basStock);
|
public List<BasStock> selectBasStockList(BasStock basStock);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询空托盘库存信息列表
|
||||||
|
*
|
||||||
|
* @param basStock 库存信息
|
||||||
|
* @return 库存信息集合
|
||||||
|
*/
|
||||||
|
public List<BasStock> selectBasStockListForEmptyTray(BasStock basStock);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增库存信息
|
* 新增库存信息
|
||||||
|
|||||||
@@ -91,6 +91,17 @@ public class BasStockServiceImpl implements IBasStockService
|
|||||||
return basStockMapper.selectBasStockList(basStock);
|
return basStockMapper.selectBasStockList(basStock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询空托盘库存信息列表
|
||||||
|
*
|
||||||
|
* @param basStock 库存信息
|
||||||
|
* @return 库存信息集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<BasStock> selectBasStockListForEmptyTray(BasStock basStock){
|
||||||
|
return basStockMapper.selectBasStockListForEmptyTray(basStock);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增库存信息
|
* 新增库存信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -38,6 +38,11 @@ public class JobIdType {
|
|||||||
*/
|
*/
|
||||||
public static final String MYDOJOB_STOCKOUT = "CK";
|
public static final String MYDOJOB_STOCKOUT = "CK";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定货位出库任务
|
||||||
|
*/
|
||||||
|
public static final String MYDOJOB_STOCKOUT_MANUAL = "ZC";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 移库任务
|
* 移库任务
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -465,7 +465,8 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
if (type == TaskType.TASKTYPE_STOCKOUT || type == TaskType.TASKTYPE_STOCKOUT_PICKING || type == TaskType.TASKTYPE_STOCKOUT_MANUAL){
|
if (type == TaskType.TASKTYPE_STOCKOUT ||
|
||||||
|
type == TaskType.TASKTYPE_STOCKOUT_PICKING){
|
||||||
|
|
||||||
//子任务
|
//子任务
|
||||||
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(jobId);
|
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(jobId);
|
||||||
@@ -494,7 +495,6 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
|
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
|
||||||
|
|
||||||
log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber());
|
log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -507,12 +507,6 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
//--------------------处理任务表和子任务表--------------------
|
//--------------------处理任务表和子任务表--------------------
|
||||||
//1.更新任务主表状态并移除作业
|
//1.更新任务主表状态并移除作业
|
||||||
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
|
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
|
||||||
// mydoJobMapper.updateMydoJob(mydoJob);
|
|
||||||
// deleteMydoJobByJobId(jobId);
|
|
||||||
//
|
|
||||||
// //2.并移除所有子作业
|
|
||||||
// mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId);
|
|
||||||
// mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId);
|
|
||||||
|
|
||||||
log.info("【账务处理】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
log.info("【账务处理】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
||||||
|
|
||||||
@@ -520,6 +514,7 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
//>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
//>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
@@ -561,6 +556,37 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
if (type == TaskType.TASKTYPE_STOCKOUT_MANUAL){
|
||||||
|
//--------------------处理库存信息--------------------
|
||||||
|
//移除指定辊号的库存明细
|
||||||
|
basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode());
|
||||||
|
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
//--------------------更新货位状态--------------------
|
||||||
|
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
|
||||||
|
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
|
||||||
|
log.info("【账务处理-手动出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
//--------------------处理任务表和子任务表--------------------
|
||||||
|
//1.更新任务主表状态并移除作业
|
||||||
|
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
|
||||||
|
mydoJobMapper.updateMydoJob(mydoJob);
|
||||||
|
deleteMydoJobByJobId(jobId);
|
||||||
|
|
||||||
|
//2.并移除所有子作业
|
||||||
|
mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId);
|
||||||
|
mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId);
|
||||||
|
|
||||||
|
log.info("【账务处理-手动出库】任务完成,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
return AjaxResult.success();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,13 +607,6 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
log.warn("【任务完成】查不到该作业,请检查作业状态,作业号:" + jobId);
|
log.warn("【任务完成】查不到该作业,请检查作业状态,作业号:" + jobId);
|
||||||
return AjaxResult.error("查不到该作业,请检查作业状态");
|
return AjaxResult.error("查不到该作业,请检查作业状态");
|
||||||
}
|
}
|
||||||
//子任务
|
|
||||||
// List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(jobId);
|
|
||||||
// if (details.isEmpty()){
|
|
||||||
// log.warn("【任务完成】查不到该作业对应的子单明细,请检查子单状态,任务号:" + jobId);
|
|
||||||
// return AjaxResult.error("查不到该作业对应的子单明细,请检查子单状态");
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------处理库存信息--------------------
|
//--------------------处理库存信息--------------------
|
||||||
//>>>>>>>>>>>>>>>>>>>>>>> 空托入库 <<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>>>> 空托入库 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
@@ -640,7 +659,6 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
);
|
);
|
||||||
log.info("【账务处理-空托盘】新增库存明细,作业号:{},库存编号:{},托盘号:{}", jobId, stockId, mydoJob.getTrayCode());
|
log.info("【账务处理-空托盘】新增库存明细,作业号:{},库存编号:{},托盘号:{}", jobId, stockId, mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
|
||||||
//--------------------更新货位状态--------------------
|
//--------------------更新货位状态--------------------
|
||||||
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
|
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
|
||||||
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
|
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
|
||||||
@@ -659,7 +677,80 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
|
|
||||||
//3.移除当前托盘的绑定信息
|
//3.移除当前托盘的绑定信息
|
||||||
inTrayMsgService.deleteInTrayMsgByTrayCode(mydoJob.getTrayCode());
|
inTrayMsgService.deleteInTrayMsgByTrayCode(mydoJob.getTrayCode());
|
||||||
log.info("【账务处理-空托盘】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
log.info("【账务处理-载货容器出库】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
return AjaxResult.success();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>>带货托盘出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
if (type == TaskType.TASKTYPE_STOCKOUT_CONTAINER){
|
||||||
|
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
//获取托盘剩余库存
|
||||||
|
String trayCode = mydoJob.getTrayCode();
|
||||||
|
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(trayCode);
|
||||||
|
int trayType = getTrayTypeByTrayCode(trayCode);
|
||||||
|
//空托盘回流
|
||||||
|
if (stocks.isEmpty()){
|
||||||
|
inTrayMsgService.insertInTrayMsg(
|
||||||
|
new InTrayMsg().builder()
|
||||||
|
.trayCode(trayCode)
|
||||||
|
.quantity(BigDecimal.ONE)
|
||||||
|
.productId(ProductType.EMPTY_TRAY)
|
||||||
|
.warehouseId("01")
|
||||||
|
.rollerNumber(ProductType.EMPTY_TRAY)
|
||||||
|
.trayType(trayType)
|
||||||
|
.status(1)
|
||||||
|
.createTime(DateUtil.date())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
|
log.info("【非空容器绑定回流】<非空容器入库>生成绑定信息成功,托盘号:{}", trayCode);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
for (BasStock stock : stocks){
|
||||||
|
inTrayMsgService.insertInTrayMsg(
|
||||||
|
new InTrayMsg().builder()
|
||||||
|
.trayCode(trayCode)
|
||||||
|
.quantity(stock.getQuantity())
|
||||||
|
.warehouseId("01")
|
||||||
|
.rollerNumber(stock.getRollerNumber())
|
||||||
|
.trayType(trayType)
|
||||||
|
.status(2)
|
||||||
|
.createTime(DateUtil.date())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
|
basStockService.deleteBasStockByRollerNumber(stock.getRollerNumber());
|
||||||
|
log.info("【非空容器绑定回流】<非空容器入库>移除当前版辊库存明细,生成绑定信息成功,托盘号:{},辊号:{}", trayCode, stock.getRollerNumber());
|
||||||
|
}
|
||||||
|
basStockInfoService.deleteBasStockInfoByTrayCode(trayCode);
|
||||||
|
log.info("【非空容器绑定回流】<非空容器入库>移除主表库存信息,托盘号:{}}", trayCode);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------处理库存信息--------------------
|
||||||
|
//移除指定辊号的库存明细
|
||||||
|
basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode());
|
||||||
|
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
//--------------------更新货位状态--------------------
|
||||||
|
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
|
||||||
|
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
|
||||||
|
log.info("【账务处理-载货容器出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode());
|
||||||
|
|
||||||
|
//--------------------处理任务表和子任务表--------------------
|
||||||
|
//1.更新任务主表状态并移除作业
|
||||||
|
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
|
||||||
|
mydoJobMapper.updateMydoJob(mydoJob);
|
||||||
|
deleteMydoJobByJobId(jobId);
|
||||||
|
|
||||||
|
//2.并移除所有子作业
|
||||||
|
mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId);
|
||||||
|
mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId);
|
||||||
|
|
||||||
|
log.info("【账务处理-载货容器出库】任务完成,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
||||||
|
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
|
|
||||||
|
|||||||
@@ -316,13 +316,13 @@ public class PdaController extends BaseController {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 呼叫空托出库
|
* 呼叫空托出库
|
||||||
* @param palletType 托盘类型
|
* @param params 货位区域,托盘类型
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@PostMapping("/callStockOutForContainer")
|
@PostMapping("/callStockOutForContainer")
|
||||||
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
|
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
|
||||||
public AjaxResult callStockOutForEmptyPallet(String cargoAreaId, Integer palletType) {
|
public AjaxResult callStockOutForEmptyPallet(@RequestBody Map<String, Object> params) {
|
||||||
return pdaService.callContainerStockOut(cargoAreaId, palletType);
|
return pdaService.callContainerStockOut(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -130,10 +130,10 @@ public interface IPdaService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 呼叫空托盘出库
|
* 呼叫空托盘出库
|
||||||
* @param palletType 托盘类型
|
* @param params 托盘类型
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
AjaxResult callContainerStockOut(String cargoAreaId, Integer palletType);
|
AjaxResult callContainerStockOut(Map<String, Object> params);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -489,10 +489,9 @@ public class PdaServiceImpl implements IPdaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AjaxResult callContainerStockOut(String cargoAreaId, Integer palletType){
|
public AjaxResult callContainerStockOut(Map<String, Object> params){
|
||||||
return apiWcsService.callContainerOut(cargoAreaId, palletType);
|
return apiWcsService.callContainerOut(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -638,8 +637,6 @@ public class PdaServiceImpl implements IPdaService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//移除剩余库存 - 生成回流任务和任务明细绑定信息
|
//移除剩余库存 - 生成回流任务和任务明细绑定信息
|
||||||
|
|
||||||
return AjaxResult.success("确认成功");
|
return AjaxResult.success("确认成功");
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public class MydoJobHandler {
|
|||||||
@Autowired
|
@Autowired
|
||||||
IInTrayMsgService intrayMsgService;
|
IInTrayMsgService intrayMsgService;
|
||||||
|
|
||||||
|
|
||||||
private static final int TIMEINTERVAL_DEFAULT = 1000;
|
private static final int TIMEINTERVAL_DEFAULT = 1000;
|
||||||
private static final int TIMEINTERVAL_2000 = 2000;
|
private static final int TIMEINTERVAL_2000 = 2000;
|
||||||
private static final int TIMEINTERVAL_5000 = 5000;
|
private static final int TIMEINTERVAL_5000 = 5000;
|
||||||
@@ -104,6 +105,9 @@ public class MydoJobHandler {
|
|||||||
basStockInfoService.updateBasStockInfo(stockInfo);
|
basStockInfoService.updateBasStockInfo(stockInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
|
||||||
|
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||||
|
|
||||||
log.info(
|
log.info(
|
||||||
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
|
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
|
||||||
);
|
);
|
||||||
@@ -120,11 +124,18 @@ public class MydoJobHandler {
|
|||||||
for (MydoJobDetail mydoJobDetail : details){
|
for (MydoJobDetail mydoJobDetail : details){
|
||||||
//还原子单数量
|
//还原子单数量
|
||||||
InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(mydoJobDetail.getRollerNumber());
|
InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(mydoJobDetail.getRollerNumber());
|
||||||
|
if (ObjUtil.isNotNull(inStockinDetail)){
|
||||||
inStockinDetail.setScanNum(BigDecimal.ZERO);
|
inStockinDetail.setScanNum(BigDecimal.ZERO);
|
||||||
inStockinDetail.setAssignNum(BigDecimal.ZERO);
|
inStockinDetail.setAssignNum(BigDecimal.ZERO);
|
||||||
inStockinDetail.setStatus(0);
|
inStockinDetail.setStatus(0);
|
||||||
inStockinDetailService.updateInStockinDetail(inStockinDetail);
|
inStockinDetailService.updateInStockinDetail(inStockinDetail);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
|
||||||
|
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||||
|
|
||||||
|
// apiWcsService.cancelWcsMydojob()
|
||||||
|
|
||||||
log.info("【账务处理-入库】任务作废,更新货位信息,作业号:{}", mydoJob.getJobId());
|
log.info("【账务处理-入库】任务作废,更新货位信息,作业号:{}", mydoJob.getJobId());
|
||||||
return;
|
return;
|
||||||
@@ -143,11 +154,16 @@ public class MydoJobHandler {
|
|||||||
for (MydoJobDetail mydoJobDetail : details){
|
for (MydoJobDetail mydoJobDetail : details){
|
||||||
//还原子单数量
|
//还原子单数量
|
||||||
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber());
|
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber());
|
||||||
|
if(ObjUtil.isNotNull(outStockoutDetail)){
|
||||||
outStockoutDetail.setAllotNum(BigDecimal.ZERO);
|
outStockoutDetail.setAllotNum(BigDecimal.ZERO);
|
||||||
outStockoutDetail.setAssignNum(BigDecimal.ZERO);
|
outStockoutDetail.setAssignNum(BigDecimal.ZERO);
|
||||||
outStockoutDetail.setStatus(0);
|
outStockoutDetail.setStatus(0);
|
||||||
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
|
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
|
||||||
|
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||||
|
|
||||||
log.info("【账务处理-出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId());
|
log.info("【账务处理-出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,55 @@ public class RequestWcsHandler {
|
|||||||
AjaxResult ajaxResult = apiWcsService.sendEmptyTrayOutMydoJob(paramMap);
|
AjaxResult ajaxResult = apiWcsService.sendEmptyTrayOutMydoJob(paramMap);
|
||||||
|
|
||||||
if (ajaxResult.isSuccess()){
|
if (ajaxResult.isSuccess()){
|
||||||
log.info("【推送出库】<容器>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode());
|
log.info("【推送出库】<空容器>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode());
|
||||||
|
mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode());
|
||||||
|
mydoJobService.updateMydoJob(mydoJob);
|
||||||
|
|
||||||
|
//更新库存状态【占用中】
|
||||||
|
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
|
||||||
|
for (BasStock stock : stocks) {
|
||||||
|
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
|
||||||
|
basStockService.updateBasStock(stock);
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新货位状态【出库预占用】
|
||||||
|
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 推送wcs带货容器出库作业
|
||||||
|
*/
|
||||||
|
@Scheduled(fixedRate = TIMEINTERVAL_2000)
|
||||||
|
public void sendWcsContainerTask(){
|
||||||
|
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
|
||||||
|
new MydoJob().builder()
|
||||||
|
.inOrOut(TaskType.TASKTYPE_STOCKOUT_CONTAINER)
|
||||||
|
.status(TaskStatusEnum.READY.getCode())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (mydoJobs.isEmpty()) return;
|
||||||
|
|
||||||
|
for (MydoJob mydoJob : mydoJobs) {
|
||||||
|
|
||||||
|
//初始化参数
|
||||||
|
HashMap<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("reqCode", UUID.randomUUID().toString());//请求码
|
||||||
|
paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号
|
||||||
|
paramMap.put("taskNo", mydoJob.getTaskNo());//容器编号
|
||||||
|
paramMap.put("jobId", mydoJob.getJobId());
|
||||||
|
paramMap.put("inOrOut", mydoJob.getInOrOut());
|
||||||
|
paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId());
|
||||||
|
|
||||||
|
AjaxResult ajaxResult = apiWcsService.sendEmptyTrayOutMydoJob(paramMap);
|
||||||
|
|
||||||
|
if (ajaxResult.isSuccess()){
|
||||||
|
log.info("【推送出库】<带货容器>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode());
|
||||||
mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode());
|
mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode());
|
||||||
mydoJobService.updateMydoJob(mydoJob);
|
mydoJobService.updateMydoJob(mydoJob);
|
||||||
|
|
||||||
@@ -121,10 +169,12 @@ public class RequestWcsHandler {
|
|||||||
|
|
||||||
//更新库存状态【占用中】
|
//更新库存状态【占用中】
|
||||||
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
|
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
|
||||||
|
if (!stocks.isEmpty()){
|
||||||
for (BasStock stock : stocks) {
|
for (BasStock stock : stocks) {
|
||||||
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
|
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
|
||||||
basStockService.updateBasStock(stock);
|
basStockService.updateBasStock(stock);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//更新货位状态【出库预占用】
|
//更新货位状态【出库预占用】
|
||||||
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectBasCargoSpaceVo"/>
|
<include refid="selectBasCargoSpaceVo"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||||
|
<if test="cargoSpaceId != null and cargoSpaceId != ''"> and cargo_space_id = #{cargoSpaceId}</if>
|
||||||
<if test="roadwayId != null and roadwayId != ''"> and roadway_id = #{roadwayId}</if>
|
<if test="roadwayId != null and roadwayId != ''"> and roadway_id = #{roadwayId}</if>
|
||||||
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
||||||
<if test="theType != null and theType != ''"> and the_type = #{theType}</if>
|
<if test="theType != null and theType != ''"> and the_type = #{theType}</if>
|
||||||
@@ -65,6 +66,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
order by cargo_space_id asc
|
order by cargo_space_id asc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectBasCargoSpaceListForEmptyTray" parameterType="BasCargoSpace" resultMap="BasCargoSpaceResult">
|
||||||
|
select bcs.cargo_space_id, bcs.warehouse_id, bcs.roadway_id, bcs.cargo_area_id, bcs.the_type, bcs.the_type_name,
|
||||||
|
bcs.cargo_space_name, bcs.the_platoon, bcs.the_column, bcs.the_floor, bcs.status, bcs.locked, bcs.tray_code,
|
||||||
|
bcs.iss_double, bcs.group_coding_no, bcs.group_coding, bcs.cargo_space_logo, bcs.this_cargo_area,
|
||||||
|
bcs.dept_id, bcs.dept_name, bcs.the_weight, bcs.the_height,
|
||||||
|
bs.product_id, bs.stock_status
|
||||||
|
from bas_cargo_space bcs
|
||||||
|
inner join bas_stock_detail bs on bs.cargo_space_id = bcs.cargo_space_id and bs.product_id = 'KTP0001' and bs.stock_status = '1'
|
||||||
|
where
|
||||||
|
bcs.cargo_area_id = #{cargoAreaId}
|
||||||
|
and bcs.the_type = #{theType}
|
||||||
|
and bcs.status = '2'
|
||||||
|
and bcs.locked = 'N'
|
||||||
|
order by bcs.iss_double asc, bcs.cargo_space_id asc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectBasCargoSpaceListForContainer" parameterType="BasCargoSpace" resultMap="BasCargoSpaceResult">
|
||||||
|
select bcs.cargo_space_id, bcs.warehouse_id, bcs.roadway_id, bcs.cargo_area_id, bcs.the_type, bcs.the_type_name,
|
||||||
|
bcs.cargo_space_name, bcs.the_platoon, bcs.the_column, bcs.the_floor, bcs.status, bcs.locked, bcs.tray_code,
|
||||||
|
bcs.iss_double, bcs.group_coding_no, bcs.group_coding, bcs.cargo_space_logo, bcs.this_cargo_area,
|
||||||
|
bcs.dept_id, bcs.dept_name, bcs.the_weight, bcs.the_height,
|
||||||
|
bs.empty_status
|
||||||
|
from bas_cargo_space bcs
|
||||||
|
inner join bas_stock bs on bs.cargo_space_id = bcs.cargo_space_id
|
||||||
|
where
|
||||||
|
bcs.cargo_area_id = #{cargoAreaId}
|
||||||
|
and bcs.the_type = #{theType}
|
||||||
|
and bcs.status = '2'
|
||||||
|
and bcs.locked = 'N'
|
||||||
|
order by bcs.iss_double asc, bcs.cargo_space_id asc, bs.empty_status asc
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="selectBasCargoSpaceByCargoSpaceId" parameterType="String" resultMap="BasCargoSpaceResult">
|
<select id="selectBasCargoSpaceByCargoSpaceId" parameterType="String" resultMap="BasCargoSpaceResult">
|
||||||
<include refid="selectBasCargoSpaceVo"/>
|
<include refid="selectBasCargoSpaceVo"/>
|
||||||
where cargo_space_id = #{cargoSpaceId}
|
where cargo_space_id = #{cargoSpaceId}
|
||||||
@@ -106,6 +139,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectBasCargoSpaceVoTop1"/>
|
<include refid="selectBasCargoSpaceVoTop1"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||||
|
<if test="cargoSpaceId != null and cargoSpaceId != ''"> and cargo_space_id = #{cargoSpaceId}</if>
|
||||||
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
||||||
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
||||||
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
||||||
@@ -134,6 +168,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectBasCargoSpaceVo"/>
|
<include refid="selectBasCargoSpaceVo"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||||
|
<if test="cargoSpaceId != null and cargoSpaceId != ''"> and cargo_space_id = #{cargoSpaceId}</if>
|
||||||
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
||||||
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
||||||
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
||||||
@@ -162,6 +197,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectBasCargoSpaceVoTop1"/>
|
<include refid="selectBasCargoSpaceVoTop1"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||||
|
<if test="cargoSpaceId != null and cargoSpaceId != ''"> and cargo_space_id = #{cargoSpaceId}</if>
|
||||||
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
||||||
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
||||||
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
||||||
@@ -190,6 +226,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectBasCargoSpaceVo"/>
|
<include refid="selectBasCargoSpaceVo"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||||
|
<if test="cargoSpaceId != null and cargoSpaceId != ''"> and cargo_space_id = #{cargoSpaceId}</if>
|
||||||
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
<if test="cargoAreaId != null and cargoAreaId != ''"> and cargo_area_id = #{cargoAreaId}</if>
|
||||||
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
<if test="theTypeName != null and theTypeName != ''"> and the_type_name like concat('%', #{theTypeName}, '%')</if>
|
||||||
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
<if test="cargoSpaceName != null and cargoSpaceName != ''"> and cargo_space_name like concat('%', #{cargoSpaceName}, '%')</if>
|
||||||
|
|||||||
@@ -75,6 +75,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
${params.warehouseScope}
|
${params.warehouseScope}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectBasStockListForEmptyTray" parameterType="BasStock" resultMap="BasStockResult">
|
||||||
|
select bs.stock_id, bs.stock_detail_id, bs.cargo_space_id, bs.stock_status, bs.product_status,
|
||||||
|
bs.lot_no, bs.in_date, bs.back_date, bs.product_id, bs.product_name,bs.roller_number,
|
||||||
|
bs.quantity, bs.job_id, bs.job_detail_id, bs.tray_code, bs.out_quantity,
|
||||||
|
bs.stockin_detail_id, bs.stockin_id, bs.in_type, bs.warehouse_id, bs.warehouse_name,
|
||||||
|
bs.user_id, bs.user_name, bs.dept_id, bs.dept_name, bs.supplier_id, bs.supplier_name, bcs.iss_double, bcs.cargo_area_id, bcs.the_type
|
||||||
|
from bas_stock_detail bs
|
||||||
|
left join bas_cargo_space bcs on bs.cargo_space_id = bcs.cargo_space_id
|
||||||
|
where
|
||||||
|
bcs.status = '2' and
|
||||||
|
bs.product_id = 'KTP0001' and
|
||||||
|
bs.stock_status = '1'
|
||||||
|
<if test="cargoSpaceId != null and cargoSpaceId != ''"> and bs.cargo_space_id = #{cargoSpaceId}</if>
|
||||||
|
<if test="productStatus != null and productStatus != ''"> and bs.product_status = #{productStatus}</if>
|
||||||
|
<if test="lotNo != null and lotNo != ''"> and bs.lot_no = #{lotNo}</if>
|
||||||
|
<if test="params.beginInDate != null and params.beginInDate != '' and params.endInDate != null and params.endInDate != ''"> and bs.in_date between #{params.beginInDate} and #{params.endInDate}</if>
|
||||||
|
<if test="params.beginBackDate != null and params.beginBackDate != '' and params.endBackDate != null and params.endBackDate != ''"> and bs.back_date between #{params.beginBackDate} and #{params.endBackDate}</if>
|
||||||
|
<if test="productName != null and productName != ''"> and bs.product_name like concat('%', #{productName}, '%')</if>
|
||||||
|
<if test="rollerNumber != null and rollerNumber != ''"> and bs.roller_number like concat('%', #{rollerNumber}, '%')</if>
|
||||||
|
<if test="quantity != null "> and bs.quantity = #{quantity}</if>
|
||||||
|
<if test="jobId != null and jobId != ''"> and bs.job_id = #{jobId}</if>
|
||||||
|
<if test="jobDetailId != null and jobDetailId != ''"> and bs.job_detail_id = #{jobDetailId}</if>
|
||||||
|
<if test="trayCode != null and trayCode != ''"> and bs.tray_code = #{trayCode}</if>
|
||||||
|
<if test="outQuantity != null "> and bs.out_quantity = #{outQuantity}</if>
|
||||||
|
<if test="stockinDetailId != null and stockinDetailId != ''"> and bs.stockin_detail_id = #{stockinDetailId}</if>
|
||||||
|
<if test="stockinId != null and stockinId != ''"> and bs.stockin_id = #{stockinId}</if>
|
||||||
|
<if test="inType != null and inType != ''"> and bs.in_type = #{inType}</if>
|
||||||
|
<if test="warehouseName != null and warehouseName != ''"> and bs.warehouse_name like concat('%', #{warehouseName}, '%')</if>
|
||||||
|
<if test="userName != null and userName != ''"> and bs.user_name like concat('%', #{userName}, '%')</if>
|
||||||
|
<if test="deptName != null and deptName != ''"> and bs.dept_name like concat('%', #{deptName}, '%')</if>
|
||||||
|
<if test="supplierName != null and supplierName != ''"> and bs.supplier_name like concat('%', #{supplierName}, '%')</if>
|
||||||
|
ORDER BY bcs.iss_double asc, bcs.cargo_space_id asc
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="selectBasStockByStockId" parameterType="String" resultMap="BasStockResult">
|
<select id="selectBasStockByStockId" parameterType="String" resultMap="BasStockResult">
|
||||||
<include refid="selectBasStockVo"/>
|
<include refid="selectBasStockVo"/>
|
||||||
where stock_id = #{stockId}
|
where stock_id = #{stockId}
|
||||||
|
|||||||
@@ -52,3 +52,13 @@ export function delCargospace(cargoSpaceId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 指定货位出库
|
||||||
|
export function stockoutByManual(cargoSpaceId) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmsService/wcs/stockoutByManual',
|
||||||
|
method: 'post',
|
||||||
|
data: { cargoSpaceId: cargoSpaceId }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
52
ruoyi-ui/src/api/in/bindTrayMsg.js
Normal file
52
ruoyi-ui/src/api/in/bindTrayMsg.js
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询入库信息列表
|
||||||
|
export function listBindTrayMsg(query) {
|
||||||
|
return request({
|
||||||
|
url: '/in/bindMsg/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询入库信息详细
|
||||||
|
export function getBindTrayMsg(id) {
|
||||||
|
return request({
|
||||||
|
url: '/in/bindMsg/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增入库信息
|
||||||
|
export function addBindTrayMsg(data) {
|
||||||
|
return request({
|
||||||
|
url: '/pda/bindMsg',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改入库信息
|
||||||
|
export function updateBindTrayMsg(data) {
|
||||||
|
return request({
|
||||||
|
url: '/in/bindMsg',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除入库信息
|
||||||
|
export function delBindTrayMsg(id) {
|
||||||
|
return request({
|
||||||
|
url: '/in/bindMsg/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除入库信息
|
||||||
|
export function delBindTrayMsgByRollerNumber(rollerNumbers) {
|
||||||
|
return request({
|
||||||
|
url: '/in/bindMsg/delete/' + rollerNumbers,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="仓库id" prop="warehouseId">
|
<el-form-item label="货位id" prop="cargoSpaceId">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.warehouseId"
|
v-model="queryParams.cargoSpaceId"
|
||||||
placeholder="请输入仓库id"
|
placeholder="请输入货位id"
|
||||||
clearable
|
clearable
|
||||||
@keyup.enter.native="handleQuery"
|
@keyup.enter.native="handleQuery"
|
||||||
/>
|
/>
|
||||||
@@ -83,22 +83,6 @@
|
|||||||
@keyup.enter.native="handleQuery"
|
@keyup.enter.native="handleQuery"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="部门名称" prop="deptName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.deptName"
|
|
||||||
placeholder="请输入部门名称"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="重量" prop="theWeight">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.theWeight"
|
|
||||||
placeholder="请输入重量"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="高度" prop="theHeight">
|
<el-form-item label="高度" prop="theHeight">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.theHeight"
|
v-model="queryParams.theHeight"
|
||||||
@@ -120,8 +104,8 @@
|
|||||||
plain
|
plain
|
||||||
icon="el-icon-plus"
|
icon="el-icon-plus"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="handleAdd"
|
@click="stockoutByManualHandle"
|
||||||
v-hasPermi="['bas:cargospace:add']"
|
:disabled="multiple"
|
||||||
>指定货位出库</el-button>
|
>指定货位出库</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
@@ -190,8 +174,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="托盘条码" align="center" prop="trayCode" />
|
<el-table-column label="托盘条码" align="center" prop="trayCode" />
|
||||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
|
||||||
<el-table-column label="重量" align="center" prop="theWeight" />
|
|
||||||
<el-table-column label="高度" align="center" prop="theHeight" />
|
<el-table-column label="高度" align="center" prop="theHeight" />
|
||||||
<el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@@ -226,8 +208,8 @@
|
|||||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="仓库id" prop="warehouseId">
|
<el-form-item label="货位id" prop="cargoSpaceId">
|
||||||
<el-input v-model="form.warehouseId" placeholder="请输入仓库id" />
|
<el-input v-model="form.cargoSpaceId" placeholder="请输入货位id" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@@ -343,7 +325,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listCargospace, getCargospace, delCargospace, addCargospace, updateCargospace } from "@/api/bas/cargospace"
|
import { listCargospace, getCargospace, delCargospace, addCargospace, updateCargospace, stockoutByManual } from "@/api/bas/cargospace"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Cargospace",
|
name: "Cargospace",
|
||||||
@@ -372,6 +354,7 @@ export default {
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
cargoSpeceId: null,
|
||||||
warehouseId: null,
|
warehouseId: null,
|
||||||
roadwayId: null,
|
roadwayId: null,
|
||||||
cargoAreaId: null,
|
cargoAreaId: null,
|
||||||
@@ -396,6 +379,9 @@ export default {
|
|||||||
roadwayId: [
|
roadwayId: [
|
||||||
{ required: true, message: "巷道id不能为空", trigger: "blur" }
|
{ required: true, message: "巷道id不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
|
cargoSpaceId: [
|
||||||
|
{ required: true, message: "货位id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
cargoSpaceName: [
|
cargoSpaceName: [
|
||||||
{ required: true, message: "货位名称不能为空", trigger: "blur" }
|
{ required: true, message: "货位名称不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
@@ -476,9 +462,29 @@ export default {
|
|||||||
// 多选框选中数据
|
// 多选框选中数据
|
||||||
handleSelectionChange(selection) {
|
handleSelectionChange(selection) {
|
||||||
this.ids = selection.map(item => item.cargoSpaceId)
|
this.ids = selection.map(item => item.cargoSpaceId)
|
||||||
|
this.cargoSpaces = selection.map(item => item.cargoSpaceId)
|
||||||
this.single = selection.length !== 1
|
this.single = selection.length !== 1
|
||||||
this.multiple = !selection.length
|
this.multiple = !selection.length
|
||||||
},
|
},
|
||||||
|
|
||||||
|
stockoutByManualHandle() {
|
||||||
|
if (!this.cargoSpaces || this.cargoSpaces.length === 0) {
|
||||||
|
this.$modal.msgWarning("请至少选择一个货位执行手动出库操作");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cargoSpaceId = this.ids[0]
|
||||||
|
var data ={
|
||||||
|
cargoSpaceId: cargoSpaceId
|
||||||
|
}
|
||||||
|
this.$modal.confirm('是否确认将货位编号为"' + cargoSpaceId + '"货位库存手动出库?').then(() => {
|
||||||
|
return stockoutByManual(cargoSpaceId)
|
||||||
|
}).then(() => {
|
||||||
|
this.getList()
|
||||||
|
this.$modal.msgSuccess("操作成功")
|
||||||
|
}).catch(() => {})
|
||||||
|
},
|
||||||
|
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.reset()
|
this.reset()
|
||||||
|
|||||||
438
ruoyi-ui/src/views/in/bindTrayMsg/index.vue
Normal file
438
ruoyi-ui/src/views/in/bindTrayMsg/index.vue
Normal file
@@ -0,0 +1,438 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<el-form-item label="入库主单" prop="stockinId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.stockinId"
|
||||||
|
placeholder="请输入入库主单号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="入库子单" prop="stockinDetailId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.stockinDetailId"
|
||||||
|
placeholder="请输入入库子单码"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="托盘码" prop="trayCode">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.trayCode"
|
||||||
|
placeholder="请输入托盘码"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料编码" prop="productId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.productId"
|
||||||
|
placeholder="请输入物料编码"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="版辊编号" prop="rollerNumber">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.rollerNumber"
|
||||||
|
placeholder="请输入版辊编号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="入库数量" prop="quantity">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.quantity"
|
||||||
|
placeholder="请输入入库数量"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户编码" prop="userId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.userId"
|
||||||
|
placeholder="请输入用户编码"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="部门编码" prop="deptId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.deptId"
|
||||||
|
placeholder="请输入部门编码"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="颜色" prop="color">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.color"
|
||||||
|
placeholder="请输入颜色"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['in:bindMsg:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<!-- <el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single"
|
||||||
|
@click="handleUpdate"
|
||||||
|
v-hasPermi="['in:bindTrayMsg:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
</el-col> -->
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete"
|
||||||
|
v-hasPermi="['in:bindMsg:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<!-- <el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['in:bindTrayMsg:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-col> -->
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="bindTrayMsgList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="托盘码" align="center" prop="trayCode" />
|
||||||
|
<el-table-column label="入库主单" align="center" prop="stockinId" />
|
||||||
|
<el-table-column label="入库子单" align="center" prop="stockinDetailId" />
|
||||||
|
<el-table-column label="物料编码" align="center" prop="productId" />
|
||||||
|
<el-table-column label="版辊编号" align="center" prop="rollerNumber" />
|
||||||
|
<el-table-column label="入库数量" align="center" prop="quantity" />
|
||||||
|
<el-table-column label="用户编码" align="center" prop="userId" />
|
||||||
|
<el-table-column label="部门编码" align="center" prop="deptId" />
|
||||||
|
<el-table-column label="托盘类型" align="center" prop="trayType" />
|
||||||
|
<el-table-column label="状态" align="center" prop="status" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.in_tray_msg_status" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column label="${comment}" align="center" prop="jobId" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="jobDetailId" /> -->
|
||||||
|
<!-- <el-table-column label="${comment}" align="center" prop="supplierId" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="spec" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="rollerNumber" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="diameter" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="splicingLength" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="plugHole" /> -->
|
||||||
|
<el-table-column label="颜色" align="center" prop="color" />
|
||||||
|
<!-- <el-table-column label="${comment}" align="center" prop="productName" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="warehouseName" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="userName" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="deptName" />
|
||||||
|
<el-table-column label="${comment}" align="center" prop="supplierName" /> -->
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
@click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['in:bindMsg:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['in:bindMsg:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- 添加或修改入库信息对话框 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="托盘码" prop="trayCode">
|
||||||
|
<el-input v-model="form.trayCode" placeholder="请输入托盘码" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="版辊编号" prop="rollerNumber">
|
||||||
|
<el-input v-model="form.rollerNumber" placeholder="请输入版辊编号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="入库数量" prop="quantity">
|
||||||
|
<el-input v-model="form.quantity" disabled placeholder="1" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { listBindTrayMsg, getBindTrayMsg, delBindTrayMsg, delBindTrayMsgByRollerNumber, addBindTrayMsg, updateBindTrayMsg } from "@/api/in/bindTrayMsg"
|
||||||
|
import { data } from "vue-barcode";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "BindTrayMsg",
|
||||||
|
dicts: ['in_tray_msg_status'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 入库信息表格数据
|
||||||
|
bindTrayMsgList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
trayCode: null,
|
||||||
|
stockinDetailId: null,
|
||||||
|
productId: null,
|
||||||
|
quantity: null,
|
||||||
|
warehouseId: null,
|
||||||
|
userId: null,
|
||||||
|
deptId: null,
|
||||||
|
trayType: null,
|
||||||
|
trayLocation: null,
|
||||||
|
status: null,
|
||||||
|
jobId: null,
|
||||||
|
jobDetailId: null,
|
||||||
|
stockinId: null,
|
||||||
|
supplierId: null,
|
||||||
|
spec: null,
|
||||||
|
rollerNumber: null,
|
||||||
|
diameter: null,
|
||||||
|
splicingLength: null,
|
||||||
|
plugHole: null,
|
||||||
|
colorSequence: null,
|
||||||
|
color: null,
|
||||||
|
productName: null,
|
||||||
|
warehouseName: null,
|
||||||
|
userName: null,
|
||||||
|
deptName: null,
|
||||||
|
supplierName: null
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "$comment不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/** 查询入库信息列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true
|
||||||
|
listBindTrayMsg(this.queryParams).then(response => {
|
||||||
|
this.bindTrayMsgList = response.rows
|
||||||
|
this.total = response.total
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false
|
||||||
|
this.reset()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
trayCode: null,
|
||||||
|
stockinDetailId: null,
|
||||||
|
productId: null,
|
||||||
|
quantity: null,
|
||||||
|
warehouseId: null,
|
||||||
|
userId: null,
|
||||||
|
deptId: null,
|
||||||
|
createTime: null,
|
||||||
|
trayType: null,
|
||||||
|
trayLocation: null,
|
||||||
|
status: null,
|
||||||
|
jobId: null,
|
||||||
|
jobDetailId: null,
|
||||||
|
stockinId: null,
|
||||||
|
supplierId: null,
|
||||||
|
spec: null,
|
||||||
|
rollerNumber: null,
|
||||||
|
diameter: null,
|
||||||
|
splicingLength: null,
|
||||||
|
plugHole: null,
|
||||||
|
colorSequence: null,
|
||||||
|
color: null,
|
||||||
|
productName: null,
|
||||||
|
warehouseName: null,
|
||||||
|
userName: null,
|
||||||
|
deptName: null,
|
||||||
|
supplierName: null
|
||||||
|
}
|
||||||
|
this.resetForm("form")
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.resetForm("queryForm")
|
||||||
|
this.handleQuery()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
// this.ids = selection.map(item => item.id)
|
||||||
|
this.rollerNumbers = selection.map(item => item.rollerNumber)
|
||||||
|
this.single = selection.length !== 1
|
||||||
|
this.multiple = !selection.length
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset()
|
||||||
|
this.open = true
|
||||||
|
this.title = "添加入库信息"
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.reset()
|
||||||
|
const id = row.id || this.ids
|
||||||
|
getBindTrayMsg(id).then(response => {
|
||||||
|
this.form = response.data
|
||||||
|
this.open = true
|
||||||
|
this.title = "修改入库信息"
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
if (!this.form.trayCode) {
|
||||||
|
this.$modal.msg('请输入托盘号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.form.rollerNumber) {
|
||||||
|
this.$modal.msg('请输入版辊编号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
trayCode: this.form.trayCode,
|
||||||
|
rollerNumber: this.form.rollerNumber,
|
||||||
|
quantity: this.form.quantity,
|
||||||
|
}
|
||||||
|
|
||||||
|
addBindTrayMsg(data).then(() => {
|
||||||
|
this.$modal.msgSuccess("新增成功")
|
||||||
|
this.open = false
|
||||||
|
this.getList()
|
||||||
|
}).catch(() => {})
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
// handleDelete(row) {
|
||||||
|
// // 统一将单条数据转为数组,方便后端 String[] 接收
|
||||||
|
// const ids = row.id || row.ids;
|
||||||
|
|
||||||
|
// this.$modal.confirm('是否确认删除编号为"' + ids + '"的数据项?').then(function() {
|
||||||
|
// return delBindTrayMsg(ids)
|
||||||
|
// }).then(() => {
|
||||||
|
// this.getList()
|
||||||
|
// this.$modal.msgSuccess("删除成功")
|
||||||
|
// }).catch(() => {})
|
||||||
|
// },
|
||||||
|
handleDelete(row) {
|
||||||
|
// 统一将单条数据转为数组,方便后端 String[] 接收
|
||||||
|
const rollerNumbers = row.rollerNumber ? [row.rollerNumber] : this.rollerNumbers;
|
||||||
|
console.log(row)
|
||||||
|
console.log(rollerNumbers)
|
||||||
|
this.$modal.confirm('是否确认删除版辊编号为"' + rollerNumbers.join(",") + '"的数据项?').then(() => {
|
||||||
|
return delBindTrayMsgByRollerNumber(rollerNumbers)
|
||||||
|
}).then(() => {
|
||||||
|
this.getList()
|
||||||
|
this.$modal.msgSuccess("删除成功")
|
||||||
|
}).catch(() => {
|
||||||
|
this.getList()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('in/bindTrayMsg/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `bindTrayMsg_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -2162,7 +2162,7 @@ GO
|
|||||||
INSERT INTO [dbo].[gen_table] ([table_id], [table_name], [table_comment], [sub_table_name], [sub_table_fk_name], [class_name], [tpl_category], [tpl_web_type], [package_name], [module_name], [business_name], [function_name], [function_author], [form_col_num], [gen_type], [gen_path], [options], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'6', N'in_stockin', N'入库单据主信息表', NULL, NULL, N'InStockin', N'crud', N'element-ui', N'com.ruoyi.in.stockin', N'in', N'stockin', N'入库单据主信息', N'ruoyi', N'1', N'0', N'/', N'{"genView":"0","parentMenuId":2000}', N'admin', N'2026-05-11 11:08:00.000', N'', N'2026-05-11 11:24:01.000', NULL)
|
INSERT INTO [dbo].[gen_table] ([table_id], [table_name], [table_comment], [sub_table_name], [sub_table_fk_name], [class_name], [tpl_category], [tpl_web_type], [package_name], [module_name], [business_name], [function_name], [function_author], [form_col_num], [gen_type], [gen_path], [options], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'6', N'in_stockin', N'入库单据主信息表', NULL, NULL, N'InStockin', N'crud', N'element-ui', N'com.ruoyi.in.stockin', N'in', N'stockin', N'入库单据主信息', N'ruoyi', N'1', N'0', N'/', N'{"genView":"0","parentMenuId":2000}', N'admin', N'2026-05-11 11:08:00.000', N'', N'2026-05-11 11:24:01.000', NULL)
|
||||||
GO
|
GO
|
||||||
|
|
||||||
INSERT INTO [dbo].[gen_table] ([table_id], [table_name], [table_comment], [sub_table_name], [sub_table_fk_name], [class_name], [tpl_category], [tpl_web_type], [package_name], [module_name], [business_name], [function_name], [function_author], [form_col_num], [gen_type], [gen_path], [options], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'7', N'in_stockin_detail', N'入库单据子信息表', NULL, NULL, N'InStockinDetail', N'crud', N'element-ui', N'com.ruoyi.in.stockindetail', N'in', N'sotckindetail', N'入库单据子信息', N'ruoyi', N'1', N'0', N'/', N'{"genView":"0","parentMenuId":2000}', N'admin', N'2026-05-11 11:08:00.000', N'', N'2026-05-11 11:29:04.000', NULL)
|
INSERT INTO [dbo].[gen_table] ([table_id], [table_name], [table_comment], [sub_table_name], [sub_table_fk_name], [class_name], [tpl_category], [tpl_web_type], [package_name], [module_name], [business_name], [function_name], [function_author], [form_col_num], [gen_type], [gen_path], [options], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'7', N'in_stockin_detail', N'入库单据子信息表', NULL, NULL, N'InStockinDetail', N'crud', N'element-ui', N'com.ruoyi.in.stockindetail', N'in', N'stockindetail', N'入库单据子信息', N'ruoyi', N'1', N'0', N'/', N'{"genView":"0","parentMenuId":2000}', N'admin', N'2026-05-11 11:08:00.000', N'', N'2026-05-11 11:29:04.000', NULL)
|
||||||
GO
|
GO
|
||||||
|
|
||||||
INSERT INTO [dbo].[gen_table] ([table_id], [table_name], [table_comment], [sub_table_name], [sub_table_fk_name], [class_name], [tpl_category], [tpl_web_type], [package_name], [module_name], [business_name], [function_name], [function_author], [form_col_num], [gen_type], [gen_path], [options], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'8', N'in_stockin_detail_finish', N'入库单据子信息表', NULL, NULL, N'InStockinDetailFinish', N'crud', N'element-ui', N'com.ruoyi.system', N'system', N'finish', N'入库单据子信息', N'ruoyi', N'1', N'0', N'/', NULL, N'admin', N'2026-05-11 11:08:00.000', N'', NULL, NULL)
|
INSERT INTO [dbo].[gen_table] ([table_id], [table_name], [table_comment], [sub_table_name], [sub_table_fk_name], [class_name], [tpl_category], [tpl_web_type], [package_name], [module_name], [business_name], [function_name], [function_author], [form_col_num], [gen_type], [gen_path], [options], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'8', N'in_stockin_detail_finish', N'入库单据子信息表', NULL, NULL, N'InStockinDetailFinish', N'crud', N'element-ui', N'com.ruoyi.system', N'system', N'finish', N'入库单据子信息', N'ruoyi', N'1', N'0', N'/', NULL, N'admin', N'2026-05-11 11:08:00.000', N'', NULL, NULL)
|
||||||
@@ -8864,7 +8864,7 @@ GO
|
|||||||
INSERT INTO [dbo].[sys_menu] ([menu_id], [menu_name], [parent_id], [order_num], [path], [component], [query], [route_name], [is_frame], [is_cache], [menu_type], [visible], [status], [perms], [icon], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2113', N'添加入库单据', N'2056', N'0', N'', NULL, NULL, N'', N'1', N'0', N'F', N'0', N'0', N'in:stockin:add', N'#', N'admin', N'2026-05-20 09:57:59.127', N'', NULL, N'')
|
INSERT INTO [dbo].[sys_menu] ([menu_id], [menu_name], [parent_id], [order_num], [path], [component], [query], [route_name], [is_frame], [is_cache], [menu_type], [visible], [status], [perms], [icon], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2113', N'添加入库单据', N'2056', N'0', N'', NULL, NULL, N'', N'1', N'0', N'F', N'0', N'0', N'in:stockin:add', N'#', N'admin', N'2026-05-20 09:57:59.127', N'', NULL, N'')
|
||||||
GO
|
GO
|
||||||
|
|
||||||
INSERT INTO [dbo].[sys_menu] ([menu_id], [menu_name], [parent_id], [order_num], [path], [component], [query], [route_name], [is_frame], [is_cache], [menu_type], [visible], [status], [perms], [icon], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2114', N'查询子单据', N'2044', N'6', N'', NULL, NULL, N'', N'1', N'0', N'F', N'0', N'0', N'in:sotckindetail:list', N'#', N'admin', N'2026-05-20 10:02:52.333', N'', NULL, N'')
|
INSERT INTO [dbo].[sys_menu] ([menu_id], [menu_name], [parent_id], [order_num], [path], [component], [query], [route_name], [is_frame], [is_cache], [menu_type], [visible], [status], [perms], [icon], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2114', N'查询子单据', N'2044', N'6', N'', NULL, NULL, N'', N'1', N'0', N'F', N'0', N'0', N'in:stockindetail:list', N'#', N'admin', N'2026-05-20 10:02:52.333', N'', NULL, N'')
|
||||||
GO
|
GO
|
||||||
|
|
||||||
INSERT INTO [dbo].[sys_menu] ([menu_id], [menu_name], [parent_id], [order_num], [path], [component], [query], [route_name], [is_frame], [is_cache], [menu_type], [visible], [status], [perms], [icon], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2115', N'手动作废', N'2044', N'0', N'', NULL, NULL, N'', N'1', N'0', N'F', N'0', N'0', N'in:stockin:cancel', N'#', N'admin', N'2026-05-20 10:03:54.427', N'', NULL, N'')
|
INSERT INTO [dbo].[sys_menu] ([menu_id], [menu_name], [parent_id], [order_num], [path], [component], [query], [route_name], [is_frame], [is_cache], [menu_type], [visible], [status], [perms], [icon], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2115', N'手动作废', N'2044', N'0', N'', NULL, NULL, N'', N'1', N'0', N'F', N'0', N'0', N'in:stockin:cancel', N'#', N'admin', N'2026-05-20 10:03:54.427', N'', NULL, N'')
|
||||||
@@ -9785,7 +9785,7 @@ GO
|
|||||||
INSERT INTO [dbo].[sys_oper_log] ([oper_id], [title], [business_type], [method], [request_method], [operator_type], [oper_name], [dept_name], [oper_url], [oper_ip], [oper_location], [oper_param], [json_result], [status], [error_msg], [oper_time], [cost_time]) VALUES (N'97', N'菜单管理', N'3', N'com.ruoyi.web.controller.system.SysMenuController.remove()', N'DELETE', N'1', N'admin', N'天津一重', N'/system/menu/2049', N'127.0.0.1', N'内网IP', N'2049 ', N'{"msg":"菜单已分配,不允许删除","code":601}', N'0', NULL, N'2026-05-20 10:02:35.570', N'24')
|
INSERT INTO [dbo].[sys_oper_log] ([oper_id], [title], [business_type], [method], [request_method], [operator_type], [oper_name], [dept_name], [oper_url], [oper_ip], [oper_location], [oper_param], [json_result], [status], [error_msg], [oper_time], [cost_time]) VALUES (N'97', N'菜单管理', N'3', N'com.ruoyi.web.controller.system.SysMenuController.remove()', N'DELETE', N'1', N'admin', N'天津一重', N'/system/menu/2049', N'127.0.0.1', N'内网IP', N'2049 ', N'{"msg":"菜单已分配,不允许删除","code":601}', N'0', NULL, N'2026-05-20 10:02:35.570', N'24')
|
||||||
GO
|
GO
|
||||||
|
|
||||||
INSERT INTO [dbo].[sys_oper_log] ([oper_id], [title], [business_type], [method], [request_method], [operator_type], [oper_name], [dept_name], [oper_url], [oper_ip], [oper_location], [oper_param], [json_result], [status], [error_msg], [oper_time], [cost_time]) VALUES (N'98', N'菜单管理', N'1', N'com.ruoyi.web.controller.system.SysMenuController.add()', N'POST', N'1', N'admin', N'天津一重', N'/system/menu', N'127.0.0.1', N'内网IP', N'{"children":[],"createBy":"admin","isCache":"0","isFrame":"1","menuName":"查询子单据","menuType":"F","orderNum":6,"params":{},"parentId":2044,"perms":"in:sotckindetail:list","status":"0","visible":"0"} ', N'{"msg":"操作成功","code":200}', N'0', NULL, N'2026-05-20 10:02:52.357', N'19')
|
INSERT INTO [dbo].[sys_oper_log] ([oper_id], [title], [business_type], [method], [request_method], [operator_type], [oper_name], [dept_name], [oper_url], [oper_ip], [oper_location], [oper_param], [json_result], [status], [error_msg], [oper_time], [cost_time]) VALUES (N'98', N'菜单管理', N'1', N'com.ruoyi.web.controller.system.SysMenuController.add()', N'POST', N'1', N'admin', N'天津一重', N'/system/menu', N'127.0.0.1', N'内网IP', N'{"children":[],"createBy":"admin","isCache":"0","isFrame":"1","menuName":"查询子单据","menuType":"F","orderNum":6,"params":{},"parentId":2044,"perms":"in:stockindetail:list","status":"0","visible":"0"} ', N'{"msg":"操作成功","code":200}', N'0', NULL, N'2026-05-20 10:02:52.357', N'19')
|
||||||
GO
|
GO
|
||||||
|
|
||||||
INSERT INTO [dbo].[sys_oper_log] ([oper_id], [title], [business_type], [method], [request_method], [operator_type], [oper_name], [dept_name], [oper_url], [oper_ip], [oper_location], [oper_param], [json_result], [status], [error_msg], [oper_time], [cost_time]) VALUES (N'99', N'角色管理', N'2', N'com.ruoyi.web.controller.system.SysRoleController.edit()', N'PUT', N'1', N'admin', N'天津一重', N'/system/role', N'127.0.0.1', N'内网IP', N'{"admin":false,"createTime":"2026-05-11 09:49:00","dataScope":"1","delFlag":"0","deptCheckStrictly":true,"flag":false,"menuCheckStrictly":true,"menuIds":[2000,2056,2110,2111,2112,2113,2044,2045,2046,2047,2048,2049,2114],"params":{},"roleId":100,"roleKey":"el:common:role","roleName":"二联合普通人员","roleSort":0,"status":"0","updateBy":"admin"} ', N'{"msg":"操作成功","code":200}', N'0', NULL, N'2026-05-20 10:03:01.850', N'77')
|
INSERT INTO [dbo].[sys_oper_log] ([oper_id], [title], [business_type], [method], [request_method], [operator_type], [oper_name], [dept_name], [oper_url], [oper_ip], [oper_location], [oper_param], [json_result], [status], [error_msg], [oper_time], [cost_time]) VALUES (N'99', N'角色管理', N'2', N'com.ruoyi.web.controller.system.SysRoleController.edit()', N'PUT', N'1', N'admin', N'天津一重', N'/system/role', N'127.0.0.1', N'内网IP', N'{"admin":false,"createTime":"2026-05-11 09:49:00","dataScope":"1","delFlag":"0","deptCheckStrictly":true,"flag":false,"menuCheckStrictly":true,"menuIds":[2000,2056,2110,2111,2112,2113,2044,2045,2046,2047,2048,2049,2114],"params":{},"roleId":100,"roleKey":"el:common:role","roleName":"二联合普通人员","roleSort":0,"status":"0","updateBy":"admin"} ', N'{"msg":"操作成功","code":200}', N'0', NULL, N'2026-05-20 10:03:01.850', N'77')
|
||||||
|
|||||||
Reference in New Issue
Block a user