pda入库绑定选择,手动出库确认选择,盘点任务完成账务处理优化

This commit is contained in:
lsymicc
2026-09-15 00:00:55 +08:00
parent 0bd8d92bc0
commit 39632ef960
29 changed files with 1174 additions and 333 deletions

View File

@@ -9,6 +9,15 @@ export function getInboundTaskList(query) {
})
}
// 获取入库单据子单列表
export function getDetailList(query) {
return request({
url: '/pda/getDetailListByStockinId',
method: 'get',
params: query
})
}
// 获取入库待处理单据列表
export function getInboundStockList(query) {
return request({

View File

@@ -18,7 +18,16 @@ export function getOutboundDetail(rollerNumber) {
})
}
// 确认版辊出库数量
// 版辊强制出库确认
export function rollerNumberComplete(data) {
return request({
url: '/pda/rollerNumberComplete',
method: 'post',
data: data
})
}
// 确认版辊出库数量 - 单独出库确认
export function confirmOutbound(data) {
return request({
url: '/pda/stockoutDetailComplete',
@@ -27,7 +36,7 @@ export function confirmOutbound(data) {
})
}
// 确认托盘出库完成
// 确认托盘出库完成 - 单据出库
export function stockoutTrayCodeComplete(trayCode) {
return request({
url: '/pda/stockoutTrayCodeComplete',
@@ -37,8 +46,28 @@ export function stockoutTrayCodeComplete(trayCode) {
})
}
// 确认托盘出库完成 - 手动出库
export function stockoutTrayCodeCompleteManual(trayCode) {
return request({
url: '/pda/stockoutTrayCodeCompleteManual',
method: 'post',
// data: { trayCode: trayCode }
params: { trayCode }
})
}
// 获取出库任务详情
// 确认托盘出库完成 - 一键确认
export function stockoutTrayCodeCompleteAll(trayCode) {
return request({
url: '/pda/stockoutTrayCodeCompleteAll',
method: 'post',
// data: { trayCode: trayCode }
params: { trayCode }
})
}
// 获取出库任务详情 - 拣选/常规出库
export function getTrayCodeDetail(trayCode) {
return request({
url: '/pda/getStockoutInfoByTrayCode',
@@ -47,6 +76,15 @@ export function getTrayCodeDetail(trayCode) {
})
}
// 获取出库任务详情 - 手动指定出库
export function getTrayCodeDetailForManual(trayCode) {
return request({
url: '/pda/getManualStockoutInfoByTrayCode',
method: 'get',
params: { trayCode }
})
}
/**
* 呼叫空托出库

View File

@@ -93,13 +93,18 @@
}, {
"path": "pages/warehouse/outbound/confirm",
"style": {
"navigationBarTitleText": "出库确认"
"navigationBarTitleText": "版辊强制出库确认"
}
}, {
"path": "pages/warehouse/outbound/trayConfirm",
"style": {
"navigationBarTitleText": "托盘出库确认"
}
}, {
"path": "pages/warehouse/outbound/trayConfirmManual",
"style": {
"navigationBarTitleText": "版辊手动出库确认"
}
}, {
"path": "pages/warehouse/outbound/container",
"style": {

View File

@@ -38,13 +38,13 @@
<text class="menu-desc">库存盘点</text>
</view>
<view class="menu-item" @click="navigateTo('/pages/warehouse/stock/index')">
<!-- <view class="menu-item" @click="navigateTo('/pages/warehouse/stock/index')">
<view class="menu-icon stock">
<uni-icons type="bars" size="28" color="#fff"></uni-icons>
</view>
<text class="menu-label">库存统计</text>
<text class="menu-desc">库存数据总览</text>
</view>
</view> -->
</view>
</view>

View File

@@ -30,15 +30,31 @@
<view class="scan-section">
<view class="scan-header">
<text class="scan-title">版辊信息</text>
<view class="scan-btn" @click="startScan">
<!-- <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>
<view class="input-wrap">
<uni-data-select class="sel"
v-model="stockinId"
:localdata="inStockinOptions"
placeholder="请选择入库单据"
@change="handleInStockinChange">
</uni-data-select>
<uni-data-select class="sel"
v-model="barcode"
:localdata="rollerNumberOptions"
placeholder="请选择版辊号"
@change="handleBarcode">
</uni-data-select>
<!-- <view class="input-wrap">
<input class="scan-input" v-model="barcode" placeholder="请输入或扫描版辊编号"
@confirm="handleBarcode" />
</view>
</view> -->
<!-- <button class="btn-add" @click="addItem" :disabled="!this.barcode || !this.trayCode">
<uni-icons type="plus" size="16" color="#fff"></uni-icons>
<text class="btn-add-text">加入列表</text>
</button> -->
</view>
<!-- 当前扫码物料信息(待添加) -->
@@ -60,10 +76,10 @@
<text class="info-label">颜色</text>
<text class="info-value">{{ currentMaterial.color }}</text>
</view>
<view class="info-row">
<!-- <view class="info-row">
<text class="info-label">色序</text>
<text class="info-value">{{ currentMaterial.colorSequence }}</text>
</view>
</view> -->
<view class="info-row">
<text class="info-label">子单号</text>
<text class="info-value">{{ currentMaterial.stockinDetailId }}</text>
@@ -98,10 +114,10 @@
<text class="item-label">辊号</text>
<text class="item-value">{{ item.rollerNumber }}</text>
</view>
<view class="item-row">
<!-- <view class="item-row">
<text class="item-label">色序</text>
<text class="item-value">{{ item.colorSequence }}</text>
</view>
</view> -->
<view class="item-row">
<text class="item-label">颜色</text>
<text class="item-value">{{ item.color }}</text>
@@ -141,7 +157,7 @@
</template>
<script>
import { getMaterialByDetailId, getMaterialByRollerNumber, submitBindTray, submitBindTrayMsg, submitAddInJob } from '@/api/warehouse/inbound'
import { getMaterialByDetailId, getMaterialByRollerNumber, submitBindTray, submitBindTrayMsg, submitAddInJob, getInboundStockList, getDetailList } from '@/api/warehouse/inbound'
export default {
data() {
@@ -150,60 +166,141 @@
trayCode: '',
// 当前扫码
barcode: '',
stockinId:'',
currentMaterial: null,
currentQty: '',
// 已加入列表的物料
items: []
items: [],
inStockinOptions:[],
rollerNumberOptions:[],
}
},
onLoad(options) {
if (options.taskNo) {
this.taskNo = options.taskNo
}
// if (options.taskNo) {
// this.taskNo = options.taskNo
// this.getInStockinList()
// }
this.getInStockinList()
},
methods: {
// 调用摄像头扫码
startScan() {
var that = this
uni.scanCode({
onlyFromCamera: false,
scanType: ['barCode', 'qrCode'],
success: function(res) {
that.barcode = res.result
that.handleBarcode()
}
})
},
startScan() {
var that = this
uni.scanCode({
onlyFromCamera: false,
scanType: ['barCode', 'qrCode'],
success: function(res) {
that.barcode = res.result
that.handleBarcode()
}
})
},
//获取入库单据
async getInStockinList() {
try {
// 发起请求,RuoYi 的分页接口通常返回 { rows: [], total: number }
const res = await getInboundStockList({});
// 将后端返回的 rows 数据转换为 uni-data-select 需要的格式
this.inStockinOptions = (res.rows || []).map(item => {
return {
value: item.stockinId, // 实际传给后端的值(如单据ID)
text: item.stockinId // 显示给用户看的文本(如单据编号)
};
});
} catch (error) {
console.error('获取入库单列表失败:', error);
uni.showToast({ title: '获取数据失败', icon: 'none' });
}
},
handleInStockinChange(value) {
// 1. 参数 value 直接就是选中的 stockinId,无需 e.detail.value
const stockinId = value;
// 2. 使用 v-model 时,组件会自动更新 this.stockinId,无需手动赋值
// this.stockinId = value; (可省略)
// 3. 每次切换单据,清空并重置版辊号下拉框
this.barcode = '';
this.rollerNumberOptions = [];
// 4. 只有选中了值才去请求下级数据,且不要再重复请求入库单列表了
if (stockinId) {
this.fetchRollerNumberOptions(stockinId); // 传入正确的变量名
}
},
// 根据单据号获取版辊号列表
async fetchRollerNumberOptions(stockinId) {
try {
const res = await getDetailList({ stockinId });
// console.log(res)
this.rollerNumberOptions = (res.data || []).map(item => {
return {
value: item.rollerNumber, // 实际传给后端的值(如单据ID)
text: item.rollerNumber // 显示给用户看的文本(如单据编号)
};
});
} catch (error) {
console.error('获取版辊号失败,请检查单据明细:', error);
}
},
handleRollerNumberChange(value) {
// 1. 参数 value 直接就是选中的 stockinId,无需 e.detail.value
const rollerNumber = value;
// 4. 只有选中了值才去请求下级数据,且不要再重复请求入库单列表了
if (value) {
var that = this
// getMaterialByDetailId(this.barcode).then(function(res) {
getMaterialByRollerNumber(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 = ''
// that.$modal.msg('未找到该入库子单信息')
that.$modal.msg('未找到该版辊信息,可能是无单据明细或已绑定完成')
})
}
},
// 根据入库明细ID查询物料
handleBarcode() {
if (!this.barcode) {
// this.$modal.msg('请输入入库子单号')
this.$modal.msg('请输入版辊信息')
return
}
var that = this
// getMaterialByDetailId(this.barcode).then(function(res) {
getMaterialByRollerNumber(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 = ''
// that.$modal.msg('未找到该入库子单信息')
that.$modal.msg('未找到该版辊信息,可能是无单据明细或已绑定完成')
})
},
handleBarcode() {
if (!this.barcode) {
// this.$modal.msg('请输入入库子单号')
this.$modal.msg('请输入版辊信息')
return
}
var that = this
// getMaterialByDetailId(this.barcode).then(function(res) {
getMaterialByRollerNumber(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 = ''
// that.$modal.msg('未找到该入库子单信息')
that.$modal.msg('未找到该版辊信息,可能是无单据明细或已绑定完成')
})
},
// 将当前物料加入绑定列表
addItem() {
if (!this.currentMaterial) {
this.$modal.msg('请先扫码查询物料')
if (!this.trayCode) {
this.$modal.msg('请输入或扫描托盘号')
return
}
if (!this.currentQty || Number(this.currentQty) <= 0) {
this.$modal.msg('请输入有效的绑定数量')
if (!this.barcode) {
this.$modal.msg('请选择要绑定的辊号')
return
}
// 检查是否已存在相同子单
@@ -219,7 +316,7 @@
productId: this.currentMaterial.rollerNumber,
// productName: this.currentMaterial.productName,
rollerNumber: this.currentMaterial.rollerNumber,
colorSequence: this.currentMaterial.colorSequence,
// colorSequence: this.currentMaterial.colorSequence,
color: this.currentMaterial.color,
spec: this.currentMaterial.spec,
quantity: Number(this.currentQty)

View File

@@ -107,7 +107,7 @@
</template>
<script>
import { getOutboundDetail, confirmOutbound } from '@/api/warehouse/outbound'
import { getOutboundDetail, confirmOutbound, rollerNumberComplete } from '@/api/warehouse/outbound'
export default {
data() {
@@ -176,7 +176,7 @@
remark: this.form.remark
}
var that = this
confirmOutbound(data).then(function() {
rollerNumberComplete(data).then(function() {
that.$modal.msgSuccess('出库确认成功')
that.resetForm()
})

View File

@@ -8,8 +8,8 @@
<uni-icons type="checkmarkempty" size="24" color="#fff"></uni-icons>
</view>
<view class="card-info">
<text class="card-title">出库确认</text>
<text class="card-desc">扫描出库物料条码进行出库确认</text>
<text class="card-title">单版辊指定出库确认</text>
<text class="card-desc">扫描版辊编号强行出库</text>
</view>
</view>
<uni-icons type="right" size="18" color="#ccc"></uni-icons>
@@ -21,8 +21,21 @@
<uni-icons type="checkmarkempty" size="24" color="#fff"></uni-icons>
</view>
<view class="card-info">
<text class="card-title">出库确认</text>
<text class="card-desc">扫描出库托盘条码进行出库确认</text>
<text class="card-title">托盘出库确认(需求单据)</text>
<text class="card-desc">扫描托盘确认出库(依赖出库单)</text>
</view>
</view>
<uni-icons type="right" size="18" color="#ccc"></uni-icons>
</view>
<view class="menu-card" @click="navigateTo('/pages/warehouse/outbound/trayConfirmManual')">
<view class="card-left">
<view class="card-icon red">
<uni-icons type="checkmarkempty" size="24" color="#fff"></uni-icons>
</view>
<view class="card-info">
<text class="card-title">托盘出库确认(手动)</text>
<text class="card-desc">扫描托盘手动确认出库(不依赖出库单)</text>
</view>
</view>
<uni-icons type="right" size="18" color="#ccc"></uni-icons>
@@ -35,13 +48,13 @@
</view>
<view class="card-info">
<text class="card-title">容器出库</text>
<text class="card-desc">选择立库区域和托盘类型</text>
<text class="card-desc">选择立库区域和托盘类型呼叫托盘</text>
</view>
</view>
<uni-icons type="right" size="18" color="#ccc"></uni-icons>
</view>
<view class="menu-card" @click="navigateTo('/pages/warehouse/outbound/exception')">
<!-- <view class="menu-card" @click="navigateTo('/pages/warehouse/outbound/exception')">
<view class="card-left">
<view class="card-icon red">
<uni-icons type="info" size="24" color="#fff"></uni-icons>
@@ -52,7 +65,7 @@
</view>
</view>
<uni-icons type="right" size="18" color="#ccc"></uni-icons>
</view>
</view> -->
</view>
<!-- 待处理任务 -->

View File

@@ -58,13 +58,14 @@
<!-- 操作按钮 -->
<view class="btn-section" >
<button class="btn btn-orange" v-if="outboundList" @click="stockoutComplete">托盘确认出库</button>
<button class="btn btn-green" v-if="outboundList" @click="stockoutCompleteAll">一键确认出库</button>
<button class="btn btn-default" @click="resetForm">重置</button>
</view>
</view>
</template>
<script>
import { getOutboundDetail, getTrayCodeDetail, confirmOutbound, stockoutTrayCodeComplete } from '@/api/warehouse/outbound'
import { getOutboundDetail, getTrayCodeDetail, confirmOutbound, stockoutTrayCodeComplete, stockoutTrayCodeCompleteAll } from '@/api/warehouse/outbound'
export default {
data() {
@@ -124,7 +125,7 @@
}
}).catch(function() {
that.outboundList = []
// that.$modal.msg('未找到该托盘信息,可能是未分配单据或已出库完成')
that.$modal.msg('无托盘明细信息,可能是出库单据未分配或已确认出库完成')
})
},
@@ -201,6 +202,44 @@
})
},
stockoutCompleteAll() {
if (!this.barcode) {
this.$modal.msg('请输入托盘号')
return
}
// var data = {
// // taskNo: this.taskNo,
// barcode: this.barcode,
// }
// console.log(this.barcode)
// var that = this
// stockoutTrayCodeCompleteAll(this.barcode).then(() => {
// that.$modal.msgSuccess(this.barcode + '一键出库确认成功')
// that.resetForm()
// }).catch(() => {
// // 全局拦截器通常已处理错误弹窗,这里可只处理状态重置
// // console.log('出库确认失败')
// })
this.$modal.confirm('一键出库操作会自动将该托盘符合条件的版辊确认出库并移除版辊库存,确认执行吗').then(() => {
stockoutTrayCodeCompleteAll(this.barcode).then(() => {
that.$modal.msgSuccess(this.barcode + '一键出库确认成功')
that.resetForm()
}).catch(() => {
// 全局拦截器通常已处理错误弹窗,这里可只处理状态重置
// console.log('出库确认失败')
})
}).then(() => {
this.$modal.msgSuccess(this.barcode + '一键出库确认成功');
this.resetForm();
}).catch(() => {
// 全局拦截器通常已处理错误弹窗,这里可只处理状态重置
// console.log('出库确认失败或用户取消')
});
},
resetItemQty(item) {
item.outQuantity = 0; // 或者重置为后端返回的默认数量
},
@@ -402,6 +441,11 @@
background: #fa8c16;
color: #fff;
}
.btn-green {
background: #0cb306;
color: #fff;
}
.btn-default {
background: #fff;

View File

@@ -143,7 +143,7 @@
textShow() {
// 长文本显示
let text = this.current;
if (text.length > 10) {
if (text.length > 20) {
return text.slice(0, 25) + '...';
}
return text;

View File

@@ -60,12 +60,19 @@ public interface IApiWcsService {
public AjaxResult reMaterial(WmsJobHandler wmsJobHandler);
/**
* 推送入库回流作业
* 推送拣选回流作业
* @param param
* @return
*/
public AjaxResult sendBackMydoJob(Map<String, Object> param);
/**
* 推送盘点回流作业
* @param param
* @return
*/
public AjaxResult sendInventoryBackMydoJob(Map<String, Object> param);
public AjaxResult sendOutMydoJob(Map<String, Object> param);
public AjaxResult sendMoveMydoJob(Map<String, Object> param);

View File

@@ -35,6 +35,7 @@ import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
@@ -46,7 +47,7 @@ import static java.util.Locale.filter;
@Slf4j
@Component
@Service
public class ApiWcsService implements IApiWcsService {
@Autowired
@@ -293,12 +294,15 @@ public class ApiWcsService implements IApiWcsService {
//--------------------------- 入库货位分配 ---------------------------
//区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘
BasCargoSpace cargoParam;
if (wcsStockinReiceive.getHeight() == 1){
//低货位380H - 不限制高度
if (type == 1){
//1500*1200 低货位380H - 不限制高度
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
}else{
//高货位510H - 只能放指定层高的货位
}else if (type == 2){
//1500*1200 高货位510H - 只能放指定层高的货位
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).theHeight(wcsStockinReiceive.getHeight()).build();
}else{
//1500*1350 通用货位510H - 货区3任意层数
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
}
BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam);
basCargoSpace = cargoStockin;
@@ -747,14 +751,8 @@ public class ApiWcsService implements IApiWcsService {
return AjaxResult.success();
}
/**
* 推送入库回流作业
* @param param
* @return
*/
public AjaxResult sendReturnMydoJob(Map<String, Object> param) {
@Override
public AjaxResult sendBackMydoJob(Map<String, Object> param) {
RequestLog requestLog = requestLogService.getRequestLog(WcsUrl.PUSH_IN_MYDO_JOB, JSONUtil.toJsonStr(param), "推送入库回流作业");
requestLog.setResponseBody(JSONUtil.toJsonStr(AjaxResult.success()));
requestLog.setResponseStatus("0");
@@ -769,6 +767,22 @@ public class ApiWcsService implements IApiWcsService {
}
@Override
public AjaxResult sendInventoryBackMydoJob(Map<String, Object> param) {
RequestLog requestLog = requestLogService.getRequestLog(WcsUrl.PUSH_IN_MYDO_JOB, JSONUtil.toJsonStr(param), "推送盘点回流作业");
requestLog.setResponseBody(JSONUtil.toJsonStr(AjaxResult.success()));
requestLog.setResponseStatus("0");
requestLog.setIsSuccessful("1");
requestLogService.insertRequestLog(requestLog);
if ("1".equals(requestLog.getIsSuccessful())) {
return AjaxResult.success();
}
return AjaxResult.error();
}
/**
* 推送出库作业
* @param param

View File

@@ -25,6 +25,17 @@ public class JobIdType {
*/
public static final String JOB_MANUAL_LIST_STOCKOUT = "CKDM";
/**
* 盘点出库本地单据号生成
*/
public static final String JOB_MANUAL_LIST_INVENTORY_STOCKOUT = "PC";
/**
* 盘点出库本地单据号生成
*/
public static final String JOB_MANUAL_LIST_INVENTORY_STOCKIN = "PR";
@@ -63,7 +74,15 @@ public class JobIdType {
*/
public static final String MYDOJOB_STOCKOUT_EMPTY_PALLET = "KTCK";
/**
* 盘点入库任务
*/
public static final String MYDOJOB_INVENTORY_STOCKIN = "PR";
/**
* 盘点出库任务
*/
public static final String MYDOJOB_INVENTORY_STOCKOUT = "PC";
/** 库存 */
public static final String STOCK = "KC";

View File

@@ -20,11 +20,17 @@ public class TaskType {
public static final int TASKTYPE_PICK_BACK = 3;
public static final String TASKTYPE_PICK_BACK_STR = "3";
/**
* 拣选回流
*/
public static final int TASKTYPE_INVENTORY_BACK = 4;
public static final String TASKTYPE_INVENTORY_BACK_STR = "4";
/**
* 移库
*/
public static final int TASKTYPE_PICK_STOCK_MOVE = 4;
public static final String TASKTYPE_PICK_STOCK_MOVE_STR = "4";
public static final int TASKTYPE_PICK_STOCK_MOVE = 5;
public static final String TASKTYPE_PICK_STOCK_MOVE_STR = "5";
/**
* 常规/整托出库
@@ -44,12 +50,6 @@ public class TaskType {
public static final int TASKTYPE_STOCKOUT_EMPTY_TRAY = 22;
public static final String TASKTYPE_STOCKOUT_EMPTY_TRAY_STR = "22";
/**
* 有托盘余位的容器出库
*/
public static final int TASKTYPE_STOCKOUT_CONTAINER = 27;
public static final String TASKTYPE_STOCKOUT_CONTAINER_STR = "27";
/**
* 指定货位出库
*/
@@ -59,8 +59,14 @@ public class TaskType {
/**
* 盘点
*/
public static final int TASKTYPE_INVENTORY = 26;
public static final String TASKTYPE_INVENTORY_STR = "26";
public static final int TASKTYPE_STOCKOUT_INVENTORY = 26;
public static final String TASKTYPE_STOCKOUT_INVENTORY_STR = "26";
/**
* 有托盘余位的容器出库
*/
public static final int TASKTYPE_STOCKOUT_CONTAINER = 27;
public static final String TASKTYPE_STOCKOUT_CONTAINER_STR = "27";
}

View File

@@ -117,6 +117,6 @@ public class InMydoJobController extends BaseController
@PutMapping("/complete/{jobId}")
public AjaxResult complete(@PathVariable("jobId") String jobId)
{
return mydoJobService.manualCompleteJob(jobId,1);
return mydoJobService.manualCompleteJob(jobId);
}
}

View File

@@ -259,7 +259,7 @@ public class MydoJobServiceImpl implements IMydoJobService
log.warn("【手动作废】执行成功,当前作业已标记为<手动作废>,作业号:{}", jobId);
}
return AjaxResult.success();
return AjaxResult.success("操作成功,当前作业已标记为<手动作废>,作业号:" + jobId);
}
@@ -321,14 +321,14 @@ public class MydoJobServiceImpl implements IMydoJobService
}
for (MydoJob mydoJob : jobs){
//任务状态标记为【作废】
//任务状态标记为【手动完成】
mydoJob.setStatus(TaskStatusEnum.MANUAL_FINISHED.getCode());
updateMydoJob(mydoJob);
}
log.warn("【手动操作】执行成功,当前作业已标记为<手动完成>,作业号:{}", jobId);
return AjaxResult.success();
return AjaxResult.success("操作成功,当前作业已标记为<手动完成>,作业号:" + jobId);
}
@@ -402,34 +402,50 @@ public class MydoJobServiceImpl implements IMydoJobService
//每条子任务生成一条库存信息
for (MydoJobDetail detail : details){
//物料数量固定为1,辊号唯一
//插入库存明细信息
basStockService.insertBasStock(
new BasStock().builder()
.stockId(stockId)
.stockDetailId(stockId + "-" + num)
.stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE)
.trayCode(detail.getTrayCode())
.jobId(jobId)
.jobDetailId(jobId + "-" + num++)
.stockinId(inTrayMsgs.get(0).getStockinId())//获取单据号需要从托盘绑定信息表获取
.stockinDetailId(inTrayMsgs.get(0).getStockinDetailId())
.rollerNumber(detail.getRollerNumber())
.quantity(detail.getInQuantity())
.cargoSpaceId(mydoJob.getCargoSpaceId())
.productId(detail.getProductId())
.productName(detail.getProductName())
.inDate(DateUtil.date().now())
.build()
);
BasStock stock = basStockService.selectBasStockByRollerNumber(detail.getRollerNumber());
//常规入库没有当前板棍库存的情况
if (ObjUtil.isNull(stock)){
//物料数量固定为1,辊号唯一
//插入库存明细信息
basStockService.insertBasStock(
new BasStock().builder()
.stockId(stockId)
.stockDetailId(stockId + "-" + num)
.stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE)
.trayCode(detail.getTrayCode())
.jobId(jobId)
.jobDetailId(jobId + "-" + num++)
.stockinId(inTrayMsgs.get(0).getStockinId())//获取单据号需要从托盘绑定信息表获取
.stockinDetailId(inTrayMsgs.get(0).getStockinDetailId())
.rollerNumber(detail.getRollerNumber())
.quantity(detail.getInQuantity())
.cargoSpaceId(mydoJob.getCargoSpaceId())
.productId(detail.getProductId())
.productName(detail.getProductName())
.inDate(DateUtil.date().now())
.build()
);
log.info("【账务处理】新增库存明细,作业号:{},库存编号:{},辊号:{}", jobId, stockId, detail.getRollerNumber());
log.info("【账务处理】新增库存明细,作业号:{},库存编号:{},辊号:{}", jobId, stockId, detail.getRollerNumber());
//更新实际数量 = 当前入库数量
InStockinDetail inStockinDetail = instockinDetailService.selectInStockinDetailByRollerNumber(detail.getRollerNumber());
if (ObjUtil.isNotNull(inStockinDetail)){
inStockinDetail.setAssignNum(detail.getInQuantity());
inStockinDetail.setStatus(1);
instockinDetailService.updateInStockinDetail(inStockinDetail);
}else{
log.info("【账务处理-异常提示】找不到版辊的子单明细,子单号:{},辊号:{}", inStockinDetail.getStockinDetailId(), detail.getRollerNumber());
}
}else{
//回流入库 - 已经有当前板棍的库存 - 更新货位即可
stock.setCargoSpaceId(mydoJob.getCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
stock.setJobId(detail.getJobId());
stock.setJobDetailId(detail.getJobDetailId());
basStockService.updateBasStock(stock);
}
//更新实际数量 = 当前入库数量
InStockinDetail inStockinDetail = instockinDetailService.selectInStockinDetailByRollerNumber(detail.getRollerNumber());
inStockinDetail.setAssignNum(detail.getInQuantity());
inStockinDetail.setStatus(1);
instockinDetailService.updateInStockinDetail(inStockinDetail);
}
@@ -458,9 +474,9 @@ public class MydoJobServiceImpl implements IMydoJobService
}
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 常规(整托)出库\拣选出库 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 常规(整托)出库\拣选出库 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 常规(整托)出库\拣选出库 <<<<<<<<<<<<<<<<<<<<<<<<
if (type == TaskType.TASKTYPE_STOCKOUT ||
type == TaskType.TASKTYPE_STOCKOUT_PICKING){
@@ -557,10 +573,25 @@ public class MydoJobServiceImpl implements IMydoJobService
//>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<<
if (type == TaskType.TASKTYPE_STOCKOUT_MANUAL){
//--------------------处理库存信息--------------------
//移除指定辊号的库存明细
basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode());
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
//子任务
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(jobId);
if (details.isEmpty()){
log.warn("【任务完成】查不到该作业对应的子单明细,请检查子单状态,任务号:" + jobId);
return AjaxResult.error("查不到该作业对应的子单明细,请检查子单状态");
}
//--------------------处理库存信息--------------------
//移除指定辊号的库存信息
for (MydoJobDetail detail : details){
//移除指定辊号的库存明细
basStockService.deleteBasStockByRollerNumber(detail.getRollerNumber());
//如果条码没有库存明细,则移除主表信息
if (basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()).size() == 0){
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
}
}
//--------------------更新货位状态--------------------
BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
@@ -568,21 +599,29 @@ public class MydoJobServiceImpl implements IMydoJobService
log.info("【账务处理-手动出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode());
//--------------------处理任务表和子任务表--------------------
//1.更新任务主表状态并移除作业
//1.更新任务主表状态
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());
return AjaxResult.success();
}
//>>>>>>>>>>>>>>>>>>>>> 盘点出库 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>> 盘点出库 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>> 盘点出库 <<<<<<<<<<<<<<<<<<<<<<<<
if (type == TaskType.TASKTYPE_STOCKOUT_INVENTORY){
//更新任务主表状态
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
log.info("【账务处理-盘点出库】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
return AjaxResult.success();
}
return AjaxResult.error();
}

View File

@@ -115,6 +115,6 @@ public class OutMydoJobController extends BaseController
@PutMapping("/complete/{jobId}")
public AjaxResult complete(@PathVariable("jobId") String jobId)
{
return mydoJobService.manualCompleteJob(jobId,2);
return mydoJobService.manualCompleteJob(jobId);
}
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.pd.job.controller;
import com.ruoyi.common.TaskType;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -22,7 +23,7 @@ import java.util.List;
* @date 2026-05-11
*/
@RestController
@RequestMapping("/pd/outJob")
@RequestMapping("/pd/inJob")
public class PdInMydoJobController extends BaseController
{
@Autowired
@@ -31,16 +32,17 @@ public class PdInMydoJobController extends BaseController
/**
* 查询作业信息列表
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:list')")
@PreAuthorize("@ss.hasPermi('pd:in:job:list')")
@GetMapping("/list")
public TableDataInfo list(MydoJob mydoJob)
{
mydoJob.setInOrOut(TaskType.TASKTYPE_INVENTORY_BACK);
startPage();
List<MydoJob> list;
if (StringUtils.isEmpty(mydoJob.getStatus()) || Convert.toInt(mydoJob.getStatus())<4){
list = mydoJobService.selectOutMydoJobList(mydoJob);
if ((StringUtils.isEmpty(mydoJob.getStatus()) || Convert.toInt(mydoJob.getStatus()) < 4)){
list = mydoJobService.selectInMydoJobList(mydoJob);
}else {
list = mydoJobService.selectOutMydoJobFinishList(mydoJob);
list = mydoJobService.selectInMydoJobFinishList(mydoJob);
}
return getDataTable(list);
}
@@ -48,7 +50,7 @@ public class PdInMydoJobController extends BaseController
/**
* 获取作业信息详细信息
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:query')")
@PreAuthorize("@ss.hasPermi('pd:in:job:query')")
@GetMapping(value = "/{jobId}")
public AjaxResult getInfo(@PathVariable("jobId") String jobId)
{
@@ -58,7 +60,7 @@ public class PdInMydoJobController extends BaseController
/**
* 新增作业信息
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:add')")
@PreAuthorize("@ss.hasPermi('pd:in:job:add')")
@Log(title = "作业信息", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MydoJob mydoJob)
@@ -69,7 +71,7 @@ public class PdInMydoJobController extends BaseController
/**
* 修改作业信息
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:edit')")
@PreAuthorize("@ss.hasPermi('pd:in:job:edit')")
@Log(title = "作业信息", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MydoJob mydoJob)
@@ -80,7 +82,7 @@ public class PdInMydoJobController extends BaseController
/**
* 删除作业信息
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:remove')")
@PreAuthorize("@ss.hasPermi('pd:in:job:remove')")
@Log(title = "作业信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{jobIds}")
public AjaxResult remove(@PathVariable String[] jobIds)
@@ -91,7 +93,7 @@ public class PdInMydoJobController extends BaseController
/**
* 手动作废作业
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:cancel')")
@PreAuthorize("@ss.hasPermi('pd:in:job:cancel')")
@Log(title = "作业信息-手动作废", businessType = BusinessType.UPDATE)
@PutMapping("/cancel/{jobId}")
public AjaxResult cancel(@PathVariable("jobId") String jobId)
@@ -103,7 +105,7 @@ public class PdInMydoJobController extends BaseController
/**
* 手动完成作业
*/
@PreAuthorize("@ss.hasPermi('pd:out:job:complete')")
@PreAuthorize("@ss.hasPermi('pd:in:job:complete')")
@Log(title = "作业信息-手动完成", businessType = BusinessType.UPDATE)
@PutMapping("/complete/{jobId}")
public AjaxResult complete(@PathVariable("jobId") String jobId)

View File

@@ -2,6 +2,7 @@ package com.ruoyi.pd.job.controller;
import java.util.List;
import com.ruoyi.common.TaskType;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.in.job.domain.MydoJob;
@@ -29,7 +30,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
* @date 2026-05-11
*/
@RestController
@RequestMapping("/pd/inJob")
@RequestMapping("/pd/outJob")
public class PdOutMydoJobController extends BaseController
{
@Autowired
@@ -38,13 +39,14 @@ public class PdOutMydoJobController extends BaseController
/**
* 查询作业信息列表
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:list')")
@PreAuthorize("@ss.hasPermi('pd:out:job:list')")
@GetMapping("/list")
public TableDataInfo list(MydoJob mydoJob)
{
mydoJob.setInOrOut(TaskType.TASKTYPE_STOCKOUT_INVENTORY);
startPage();
List<MydoJob> list;
if (StringUtils.isEmpty(mydoJob.getStatus()) || Convert.toInt(mydoJob.getStatus())<4){
if ((StringUtils.isEmpty(mydoJob.getStatus()) || Convert.toInt(mydoJob.getStatus()) < 4)){
list = mydoJobService.selectOutMydoJobList(mydoJob);
}else {
list = mydoJobService.selectOutMydoJobFinishList(mydoJob);
@@ -55,7 +57,7 @@ public class PdOutMydoJobController extends BaseController
/**
* 获取作业信息详细信息
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:query')")
@PreAuthorize("@ss.hasPermi('pd:out:job:query')")
@GetMapping(value = "/{jobId}")
public AjaxResult getInfo(@PathVariable("jobId") String jobId)
{
@@ -65,7 +67,7 @@ public class PdOutMydoJobController extends BaseController
/**
* 新增作业信息
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:add')")
@PreAuthorize("@ss.hasPermi('pd:out:job:add')")
@Log(title = "作业信息", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MydoJob mydoJob)
@@ -76,7 +78,7 @@ public class PdOutMydoJobController extends BaseController
/**
* 修改作业信息
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:edit')")
@PreAuthorize("@ss.hasPermi('pd:out:job:edit')")
@Log(title = "作业信息", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MydoJob mydoJob)
@@ -87,7 +89,7 @@ public class PdOutMydoJobController extends BaseController
/**
* 删除作业信息
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:remove')")
@PreAuthorize("@ss.hasPermi('pd:out:job:remove')")
@Log(title = "作业信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{jobIds}")
public AjaxResult remove(@PathVariable String[] jobIds)
@@ -98,7 +100,7 @@ public class PdOutMydoJobController extends BaseController
/**
* 手动作废作业
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:cancel')")
@PreAuthorize("@ss.hasPermi('pd:out:job:cancel')")
@Log(title = "作业信息-手动作废", businessType = BusinessType.UPDATE)
@PutMapping("/cancel/{jobId}")
public AjaxResult cancel(@PathVariable("jobId") String jobId)
@@ -110,7 +112,7 @@ public class PdOutMydoJobController extends BaseController
/**
* 手动完成作业
*/
@PreAuthorize("@ss.hasPermi('pd:in:job:complete')")
@PreAuthorize("@ss.hasPermi('pd:out:job:complete')")
@Log(title = "作业信息-手动完成", businessType = BusinessType.UPDATE)
@PutMapping("/complete/{jobId}")
public AjaxResult complete(@PathVariable("jobId") String jobId)

View File

@@ -1,5 +1,6 @@
package com.ruoyi.pd.stockpd.service.impl;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Date;
@@ -126,7 +127,7 @@ public class PdStockpdServiceImpl implements IPdStockpdService
map.put("v_status", "5");
map.put("v_result", "");
pdStockpdMapper.updatePdStockpdByProc(map);
String result = (String) map.get("v_result");
String result = String.valueOf(map.get("v_result"));
if ("10".equals(result)) {
return AjaxResult.success("作废成功");
}
@@ -147,7 +148,7 @@ public class PdStockpdServiceImpl implements IPdStockpdService
map.put("v_status", "2");
map.put("v_result", "");
pdStockpdMapper.updatePdStockpdByProc(map);
String result = (String) map.get("v_result");
String result = String.valueOf(map.get("v_result"));
if ("10".equals(result)) {
return AjaxResult.success("审核成功");
}
@@ -168,7 +169,7 @@ public class PdStockpdServiceImpl implements IPdStockpdService
map.put("v_status", "4");
map.put("v_result", "");
pdStockpdMapper.updatePdStockpdByProc(map);
String result = (String) map.get("v_result");
String result = String.valueOf(map.get("v_result"));
if ("10".equals(result)) {
return AjaxResult.success("完成成功");
}
@@ -234,8 +235,8 @@ public class PdStockpdServiceImpl implements IPdStockpdService
if (detail.getStockpdDetailId() == null || detail.getStockpdDetailId().isEmpty()) {
detail.setStockpdDetailId(saveDTO.getStockpdId() + "-" + (count++));
}
detail.setAllotNum(0L);
detail.setAssignNum(0L);
detail.setAllotNum(BigDecimal.ZERO);
detail.setAssignNum(BigDecimal.ZERO);
detail.setStockpdId(saveDTO.getStockpdId());
pdStockpdDetailMapper.insertPdStockpdDetail(detail);
}

View File

@@ -1,16 +1,26 @@
package com.ruoyi.pd.stockpddetail.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 盘点单据子信息对象 pd_stockpd_detail
*
* @author ruoyi
* @date 2026-05-27
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PdStockpdDetail extends BaseEntity
{
private static final long serialVersionUID = 1L;
@@ -36,118 +46,17 @@ public class PdStockpdDetail extends BaseEntity
/** 计划数量 */
@Excel(name = "计划数量")
private Long quantity;
private BigDecimal quantity;
/** 扫码数量 */
@Excel(name = "扫码数量")
private Long allotNum;
private BigDecimal allotNum;
/** 实际数量 */
@Excel(name = "实际数量")
private Long assignNum;
private BigDecimal assignNum;
private String status;
private int status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public void setStockpdDetailId(String stockpdDetailId)
{
this.stockpdDetailId = stockpdDetailId;
}
public String getStockpdDetailId()
{
return stockpdDetailId;
}
public void setStockpdId(String stockpdId)
{
this.stockpdId = stockpdId;
}
public String getStockpdId()
{
return stockpdId;
}
public void setTrayCode(String trayCode)
{
this.trayCode = trayCode;
}
public String getTrayCode()
{
return trayCode;
}
public void setProductId(String productId)
{
this.productId = productId;
}
public String getProductId()
{
return productId;
}
public void setProductName(String productName)
{
this.productName = productName;
}
public String getProductName()
{
return productName;
}
public void setQuantity(Long quantity)
{
this.quantity = quantity;
}
public Long getQuantity()
{
return quantity;
}
public void setAllotNum(Long allotNum)
{
this.allotNum = allotNum;
}
public Long getAllotNum()
{
return allotNum;
}
public void setAssignNum(Long assignNum)
{
this.assignNum = assignNum;
}
public Long getAssignNum()
{
return assignNum;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("stockpdDetailId", getStockpdDetailId())
.append("stockpdId", getStockpdId())
.append("trayCode", getTrayCode())
.append("productId", getProductId())
.append("productName", getProductName())
.append("quantity", getQuantity())
.append("allotNum", getAllotNum())
.append("assignNum", getAssignNum())
.append("remark", getRemark())
.toString();
}
}

View File

@@ -2,6 +2,8 @@ package com.ruoyi.pda.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import com.ruoyi.common.TaskType;
import com.ruoyi.common.Utils.DecimalUtil;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -11,7 +13,9 @@ import com.ruoyi.in.job.domain.MydoJob;
import com.ruoyi.in.job.service.IMydoJobService;
import com.ruoyi.in.jobdetail.domain.MydoJobDetail;
import com.ruoyi.in.stockin.domain.InStockin;
import com.ruoyi.in.stockin.service.IInStockinService;
import com.ruoyi.in.stockindetail.domain.InStockinDetail;
import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail;
import com.ruoyi.pda.domain.AddInJobRequest;
import com.ruoyi.pda.domain.TrayMsgBinding;
@@ -37,9 +41,13 @@ public class PdaController extends BaseController {
@Autowired
private IPdaService pdaService;
@Autowired
IMydoJobService mydoJobService;
@Autowired
IInStockinService inStockinService;
@Autowired
IInStockinDetailService inStockinDetailService;
/**
* 入库待处理任务列表
@@ -52,6 +60,7 @@ public class PdaController extends BaseController {
return getDataTable(list);
}
/**
* 入库待处理单据列表
*/
@@ -75,6 +84,7 @@ public class PdaController extends BaseController {
return getDataTable(list);
}
/**
* 出库待处理任务列表
*/
@@ -134,6 +144,7 @@ public class PdaController extends BaseController {
}
}
/**
* 入库绑盘
*/
@@ -167,7 +178,6 @@ public class PdaController extends BaseController {
}
/**
* 生成入库作业
* @param request
@@ -232,7 +242,7 @@ public class PdaController extends BaseController {
if(ObjUtil.isNull(info)){
return AjaxResult.error("找不到当前辊号信息,请检查入库单据明细");
}else{
if (info.getScanNum().equals(BigDecimal.valueOf(0))){
if (DecimalUtil.eq(info.getScanNum(), BigDecimal.valueOf(0))) {
return AjaxResult.success(info);
}else{
return AjaxResult.warn("该版辊已经执行过绑定操作,请确认绑定信息");
@@ -293,7 +303,7 @@ public class PdaController extends BaseController {
/**
* 出库确认-查询物料信息(辊号查询)
* 出库确认-查询物料信息(托盘号查询) - 仅查询出库单中包含的版辊信息
* @param trayCode 托盘号
* @return
*/
@@ -303,8 +313,8 @@ public class PdaController extends BaseController {
try {
MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode);
List<MydoJobDetail> info = pdaService.getStockoutInfoByTrayCode(trayCode);
if(ObjUtil.isNull(job)){
return AjaxResult.error("找不到当前托盘出库明细,请检查出库作业");
if(ObjUtil.isNull(job) || info.isEmpty()){
return AjaxResult.error("找不到当前托盘出库明细,请检查作业状态");
}else{
return AjaxResult.success(info);
}
@@ -314,6 +324,49 @@ public class PdaController extends BaseController {
}
/**
* 出库确认-查询物料信息(托盘号查询) - 仅查询出库单中包含的版辊信息
* @param trayCode 托盘号
* @return
*/
@GetMapping("/getManualStockoutInfoByTrayCode")
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
public AjaxResult getManualStockoutInfoByTrayCode(String trayCode) {
try {
MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode);
List<MydoJobDetail> info = pdaService.getStockoutInfoByTrayCode(trayCode);
if(ObjUtil.isNull(job) || info.isEmpty() || job.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_MANUAL){
return AjaxResult.error("找不到当前<手动>出库作业明细,请检查作业状态");
}else{
return AjaxResult.success(info);
}
} catch (RuntimeException e) {
return AjaxResult.error(e.getMessage());
}
}
/**
* 入库绑定 - 通过入库单据号获取所有版辊信息集合
* @param stockinId 托盘号
* @return
*/
@GetMapping("/getDetailListByStockinId")
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
public AjaxResult getDetailListByStockinId(String stockinId) {
try {
List<InStockinDetail> details = inStockinDetailService.selectInStockinDetailByStockinId(stockinId);
if(details.isEmpty()){
return AjaxResult.error();
}else{
return AjaxResult.success(details);
}
} catch (RuntimeException e) {
return AjaxResult.error(e.getMessage());
}
}
/**
* 呼叫空托出库
* @param params 货位区域,托盘类型
@@ -321,11 +374,23 @@ public class PdaController extends BaseController {
*/
@PostMapping("/callStockOutForContainer")
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
public AjaxResult callStockOutForEmptyPallet(@RequestBody Map<String, Object> params) {
public AjaxResult callStockOutForContainer(@RequestBody Map<String, Object> params) {
return pdaService.callContainerStockOut(params);
}
/**
* 物料(版辊)手动强制出库
* @param params
* @return
*/
@PostMapping("/rollerNumberComplete")
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
public AjaxResult rollerNumberComplete(@RequestBody Map<String, Object> params) {
return pdaService.rollerNumberComplete(params);
}
/**
* 物料(版辊)出库确认
* @param params
@@ -339,7 +404,7 @@ public class PdaController extends BaseController {
/**
* 物料(版辊)出库确认
* 物料(版辊)单据出库确认 - 版辊单独确认
* @param trayCode
* @return
*/
@@ -350,4 +415,28 @@ public class PdaController extends BaseController {
}
/**
* 手动指定出库确认 - 版辊单独确认
* @param trayCode
* @return
*/
@PostMapping("/stockoutTrayCodeCompleteManual")
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
public AjaxResult stockoutTrayCodeCompleteManual(String trayCode) {
return pdaService.stockoutTrayCodeCompleteManual(trayCode);
}
/**
* 物料(版辊)出库确认 - 一键确认
* @param trayCode
* @return
*/
@PostMapping("/stockoutTrayCodeCompleteAll")
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
public AjaxResult stockoutTrayCodeCompleteAll(String trayCode) {
return pdaService.stockoutTrayCodeCompleteAll(trayCode);
}
}

View File

@@ -91,6 +91,7 @@ public interface IPdaService {
*/
InTrayMsg getTrayMsgByRollerNumber(String rollerNumber);
/**
* 出库确认-查询物料信息
* @param rollerNumber 辊号
@@ -98,6 +99,7 @@ public interface IPdaService {
*/
OutStockoutDetail getStockoutInfoByRollerNumber(String rollerNumber);
/**
* 出库确认-查询物料信息
* @param trayCode 托盘号
@@ -137,6 +139,14 @@ public interface IPdaService {
AjaxResult callContainerStockOut(Map<String, Object> params);
/**
* 托盘扫码 - 版辊单据出库确认
* @param params
* @return
*/
public AjaxResult rollerNumberComplete(Map<String, Object> params);
/**
* 版辊出库确认
* @param params
@@ -145,11 +155,27 @@ public interface IPdaService {
AjaxResult stockoutDetailComplete(@RequestBody Map<String, Object> params);
/**
* 托盘出库确认
* 托盘出库确认 - 版辊逐个确认
* @param trayCode
* @return
*/
AjaxResult stockoutTrayCodeComplete(String trayCode);
/**
* 手动指定托盘出库确认 - 版辊逐个确认
* @param trayCode
* @return
*/
AjaxResult stockoutTrayCodeCompleteManual(String trayCode);
/**
* 托盘出库确认 - 一键确认
* @param trayCode
* @return
*/
AjaxResult stockoutTrayCodeCompleteAll(String trayCode);
}

View File

@@ -213,7 +213,7 @@ public class PdaServiceImpl implements IPdaService {
/**
* 绑定托盘信息(多物料)
* 绑定托盘信息(多托盘)
* @param bindTrayMsg 绑盘请求体,包含托盘号和物料明细列表
* @return
*/
@@ -227,8 +227,8 @@ public class PdaServiceImpl implements IPdaService {
int trayType = mydoJobService.getTrayTypeByTrayCode(trayCode);
if (trayType == 0){
log.warn("【入库绑定失败】托盘类型异常,无法执行绑定操作,请检查当前托盘的条码格式,当前托盘条码:{}", trayCode);
return AjaxResult.error("【入库绑定失败】托盘类型异常,无法执行绑定操作,请检查当前托盘的条码格式,当前托盘条码:" + trayCode);
log.warn("【入库绑定失败】托盘类型异常,无法执行绑定操作,请检查当前托盘的条码格式,当前条码:{}", trayCode);
return AjaxResult.error("【入库绑定失败】托盘类型异常,无法执行绑定操作,请检查当前托盘的条码格式,当前条码:" + trayCode);
}
if (bindTrayMsg.getItems().size() == 0){
@@ -334,7 +334,7 @@ public class PdaServiceImpl implements IPdaService {
/**
* 作废托盘绑定信息(多物料)
* 作废托盘绑定信息(多托盘)
* @param rollerNumber
* @return
*/
@@ -348,13 +348,13 @@ public class PdaServiceImpl implements IPdaService {
}
inTrayMsgService.deleteInTrayMsgByRollerNumber(rollerNumber);
log.info("【操作成功】已经作废辊号:<{}>的版辊信息,子单已扫描数量更新为初始状态", rollerNumber);
log.info("【操作成功】已经作废辊号:<{}>的版辊绑定信息,子单已扫描数量更新为初始状态", rollerNumber);
InStockinDetail detail = inStockinDetailService.selectInStockinDetailByRollerNumber(rollerNumber);
if (ObjUtil.isNotNull(detail)){
detail.setScanNum(BigDecimal.valueOf(0));
inStockinDetailService.updateInStockinDetail(detail);
log.info("【操作成功】辊号:<{}>的子单明细的扫描数量已更新为初始状态", rollerNumber);
log.info("【操作成功】辊号:<{}>的出库子单明细扫描数量已更新为初始状态", rollerNumber);
}
return AjaxResult.success("操作成功");
@@ -496,7 +496,67 @@ public class PdaServiceImpl implements IPdaService {
/**
* 单个版辊出库确认
* 托盘扫码 - 版辊单据出库确认
* @param params
* @return
*/
@Override
public AjaxResult rollerNumberComplete(Map<String, Object> params){
String rollerNumber = (String) params.get("barcode");
BigDecimal quantity = Convert.toBigDecimal(params.get("outQuantity"));
MydoJobDetail detail = mydoJobDetailService.selectMydoJobDetailByRollerNumber(rollerNumber);
if (ObjUtil.isNotNull(detail)){
// mydoJobDetailService.insertMydoJobDetailsForJobFinish(detail.getJobId());
mydoJobDetailService.deleteMydoJobDetailByJobDetailId(detail.getJobDetailId());
log.warn("【版辊出库】移除子单明细,辊号:{},子单号:{}", rollerNumber, detail.getJobDetailId());
}
BasStock stock = basStockService.selectBasStockByRollerNumber(rollerNumber);
if (ObjUtil.isNotNull(stock)){
basStockService.deleteBasStockByStockId(rollerNumber);
log.warn("【版辊出库】移除版辊库存信息,辊号:{},库存数量:{},出库数量:{}", rollerNumber, stock.getQuantity(), quantity);
//检查库存是否归零
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(stock.getTrayCode());
if (stocks.isEmpty()){
//生成一条空托盘库存
basStockService.insertBasStock(
new BasStock().builder()
.stockId(stock.getStockId())
.stockDetailId(stock.getStockId() + "-" + 1)
.stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE)
.trayCode(stock.getTrayCode())
.jobId(stock.getJobId())
.jobDetailId(stock.getJobId() + "-" + 1)
.rollerNumber(ProductType.EMPTY_TRAY)
.quantity(BigDecimal.ONE)
.cargoSpaceId(stock.getCargoSpaceId())
.productId(ProductType.EMPTY_TRAY)
.productName("空托盘")
.inDate(DateUtil.date().now())
.build()
);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(stock.getTrayCode());
stockInfo.setEmptyStatus(0);
basStockInfoService.updateBasStockInfo(stockInfo);
log.info("【版辊出库】托盘库存全部出库,更新<空托盘>库存明细,库存编号:{},托盘号:{}", stock.getStockId(), stock.getTrayCode());
}
}
return AjaxResult.success();
}
/**
* 托盘扫码 - 版辊单据出库确认
* @param params
* @return
*/
@@ -534,7 +594,7 @@ public class PdaServiceImpl implements IPdaService {
/**
* 托盘整体出库确认
* 托盘扫码 - 托盘单据出库确认
* @param trayCode
* @return
*/
@@ -592,7 +652,247 @@ public class PdaServiceImpl implements IPdaService {
mydoJobService.deleteMydoJobByJobId(job.getJobId());
log.info("【出库确认】版辊出库确认完成,移除出库作业,作业号:{}", job.getJobId());
//todo 可能需要未确认版辊提示?
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//获取托盘剩余库存
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(trayCode);
int trayType = mydoJobService.getTrayTypeByTrayCode(trayCode);
//检查当前条码是否已经生成作业
MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode);
if (ObjUtil.isEmpty(mydoJob)) {
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_PICK_RETURN);
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_BACK);
int taskType = TaskType.TASKTYPE_PICK_BACK;
//--------------------------- 入库货位分配 ---------------------------
//区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘
BasCargoSpace cargoParam;
int type = mydoJobService.getTrayTypeByTrayCode(trayCode);
String cargoAreaId = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(job.getCargoSpaceId()).getCargoAreaId();
if (type == 1){
//1500*1200 低货位380H - 不限制高度
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(cargoAreaId).build();
}else if (type == 2){
//1500*1200 高货位510H - 只能放指定层高的货位
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(cargoAreaId).theHeight(510).build();
}else{
//1500*1350 通用货位510H - 货区3任意层数
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(cargoAreaId).build();
}
if (cargoParam == null) {
log.warn("【货位分配】该类型托盘立库中无可用货位");
return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位");
}
BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam);
//>>>生成wms的入库主作业
MydoJob mydoJobBack = new MydoJob().builder()
.jobId(jobId)
.taskNo(taskNo)
.status(TaskStatusEnum.READY.getCode())
.warehouseId(cargoStockin.getWarehouseId())
.warehouseName("立体库")
.executionPhase("0")
.inOrOut(taskType)
.trayCode(trayCode)
// .entranceId(wcsStockinReiceive.getEntranceId())
.roadwayId(cargoStockin.getRoadwayId())
.cargoSpaceId(cargoStockin.getCargoSpaceId())
.cargoSpaceName(cargoStockin.getCargoSpaceName())
.trayType(type)
.build();
mydoJobService.insertMydoJob(mydoJobBack);
log.info("【wms出库回流】<回流入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobBack.getJobId() ,mydoJobBack.getTaskNo() ,mydoJobBack.getTrayCode(), cargoStockin.getCargoSpaceId());
return AjaxResult.success("确认成功");
}else{
log.info("【提示】<常规入库>wms已存在该条码作业,请确认该条码的任务状态后重试,托盘号:{}",mydoJob.getTrayCode());
}
return AjaxResult.success("确认失败");
}
/**
* 托盘扫码 - 手动指定出库确认
* @param trayCode
* @return
*/
@Override
public AjaxResult stockoutTrayCodeCompleteManual(String trayCode){
MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode);
if (ObjUtil.isNull(job)){
log.warn("【操作失败】找不到当前托盘的出库信息,无法执行出库确认操作,请检查任务状态,托盘号:{}", trayCode);
return AjaxResult.error("找不到当前托盘的出库信息,无法执行出库确认操作");
}
List<MydoJobDetail> jobList = mydoJobDetailService.selectMydoJobDetailByJobId(job.getJobId());
if (jobList.isEmpty()){
log.warn("【操作失败】找不到当前托盘的出库明细,无法执行出库确认操作,请检查任务状态,托盘号:{}", trayCode);
return AjaxResult.error("找不到当前托盘的出库信息,无法执行出库确认操作");
}
for (MydoJobDetail jobDetail : jobList){
if (jobDetail.getStatus() == 1){
//获取当前辊号出库明细
String rollerNumber = jobDetail.getRollerNumber();
//移除库存信息
basStockService.deleteBasStockByRollerNumber(rollerNumber);
log.info("【手动指定出库确认】移除版辊库存信息,辊号:{}", rollerNumber);
mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobDetail.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(jobDetail.getJobId());
log.info("【手动指定出库确认】版辊出库确认完成,移除作业明细,作业号:{}", jobDetail.getJobId());
}
}
mydoJobService.insertMydoJobFinish(job.getJobId());
mydoJobService.deleteMydoJobByJobId(job.getJobId());
log.info("【手动指定出库确认】版辊出库确认完成,移除出库作业,作业号:{}", job.getJobId());
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//获取托盘剩余库存
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(trayCode);
int trayType = mydoJobService.getTrayTypeByTrayCode(trayCode);
//检查当前条码是否已经生成作业
MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode);
if (ObjUtil.isEmpty(mydoJob)) {
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_PICK_RETURN);
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_BACK);
int taskType = TaskType.TASKTYPE_PICK_BACK;
//--------------------------- 入库货位分配 ---------------------------
//区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘
BasCargoSpace cargoParam;
String cargoAreaId = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(job.getCargoSpaceId()).getCargoAreaId();
if (trayType == 1){
//1500*1200 低货位380H - 不限制高度
cargoParam = new BasCargoSpace().builder().theType(trayType).cargoAreaId(cargoAreaId).build();
}else if (trayType == 2){
//1500*1200 高货位510H - 只能放指定层高的货位
cargoParam = new BasCargoSpace().builder().theType(trayType).cargoAreaId(cargoAreaId).theHeight(510).build();
}else{
//1500*1350 通用货位510H - 货区3任意层数
cargoParam = new BasCargoSpace().builder().theType(trayType).cargoAreaId(cargoAreaId).build();
}
if (cargoParam == null) {
log.warn("【货位分配】该类型托盘立库中无可用货位");
return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位");
}
BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam);
//>>>生成wms的入库主作业
MydoJob mydoJobBack = new MydoJob().builder()
.jobId(jobId)
.taskNo(taskNo)
.status(TaskStatusEnum.READY.getCode())
.warehouseId(cargoStockin.getWarehouseId())
.warehouseName("立体库")
.executionPhase("0")
.inOrOut(taskType)
.trayCode(trayCode)
// .entranceId(wcsStockinReiceive.getEntranceId())
.roadwayId(cargoStockin.getRoadwayId())
.cargoSpaceId(cargoStockin.getCargoSpaceId())
.cargoSpaceName(cargoStockin.getCargoSpaceName())
.trayType(trayType)
.build();
mydoJobService.insertMydoJob(mydoJobBack);
log.info("【wms手动出库回流】<回流入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobBack.getJobId() ,mydoJobBack.getTaskNo() ,mydoJobBack.getTrayCode(), cargoStockin.getCargoSpaceId());
return AjaxResult.success("确认成功");
}else{
log.info("【提示】<回流入库>wms已存在该条码作业,请确认该条码的任务状态后重试,托盘号:{}",mydoJob.getTrayCode());
}
return AjaxResult.success("确认失败");
}
/**
* 托盘出库确认 - 托盘一键确认
* @param trayCode
* @return
*/
@Override
public AjaxResult stockoutTrayCodeCompleteAll(String trayCode){
MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode);
if (ObjUtil.isNull(job)){
log.warn("【操作失败】找不到当前托盘的出库信息,无法执行出库确认操作,请检查任务状态,托盘号:{}", trayCode);
return AjaxResult.error("找不到当前托盘的出库信息,无法执行出库确认操作");
}
List<MydoJobDetail> jobList = mydoJobDetailService.selectMydoJobDetailByJobId(job.getJobId());
if (jobList.isEmpty()){
log.warn("【操作失败】找不到当前托盘的出库明细,无法执行出库确认操作,请检查任务状态,托盘号:{}", trayCode);
return AjaxResult.error("找不到当前托盘的出库信息,无法执行出库确认操作");
}
for (MydoJobDetail jobDetail : jobList){
if (jobDetail.getStatus() == 0){
jobDetail.setStatus(1);
mydoJobDetailService.updateMydoJobDetail(jobDetail);
//获取当前辊号出库明细
String rollerNumber = jobDetail.getRollerNumber();
OutStockoutDetail stockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(rollerNumber);
if (ObjUtil.isNull(stockoutDetail)){
log.warn("【操作失败】找不到当前版辊对应的出库明细,无法执行出库确认操作,请检查出库单据是否包含当前版辊信息,辊号:{}", rollerNumber);
return AjaxResult.error("出库单明细中找不到该版辊信息");
}
if (stockoutDetail.getAllotNum().equals(BigDecimal.valueOf(0))){
log.warn("【操作失败】该版辊未执行过出库分配操作,无法执行确认出库操作,请先分配出库单据,辊号:{}", rollerNumber);
continue;
}
//移除库存信息
basStockService.deleteBasStockByRollerNumber(rollerNumber);
log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber);
//更新分配数量、实际数量、明细状态
stockoutDetail.setAssignNum(jobDetail.getOutQuantity());
stockoutDetail.setStatus(1);
outStockoutDetailService.updateOutStockoutDetail(stockoutDetail);
log.info("【出库确认】更新出库单据明细状态,单号:{},辊号:{}", stockoutDetail.getStockoutId(), rollerNumber);
mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobDetail.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(jobDetail.getJobId());
log.info("【出库确认】版辊出库确认完成,移除作业明细,作业号:{}", jobDetail.getJobId());
}
}
mydoJobService.insertMydoJobFinish(job.getJobId());
mydoJobService.deleteMydoJobByJobId(job.getJobId());
log.info("【出库确认】托盘版辊出库确认完成,移除出库作业,作业号:{}", job.getJobId());
//>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<<
//获取托盘剩余库存
@@ -613,7 +913,7 @@ public class PdaServiceImpl implements IPdaService {
.build()
);
log.info("【空托绑定回流】<回流入库>生成绑定信息成功,托盘号:{}", trayCode);
log.info("【空托回流绑定】<回流入库>生成绑定信息成功,托盘号:{}", trayCode);
}else{
for (BasStock stock : stocks){
@@ -630,10 +930,10 @@ public class PdaServiceImpl implements IPdaService {
);
basStockService.deleteBasStockByRollerNumber(stock.getRollerNumber());
log.info("【库存绑定回流】<回流入库>移除当前版辊库存明细,生成绑定信息成功,托盘号:{},辊号:{}", trayCode, stock.getRollerNumber());
log.info("【库存回流绑定】<回流入库>移除当前版辊库存明细,生成绑定信息成功,托盘号:{},辊号:{}", trayCode, stock.getRollerNumber());
}
basStockInfoService.deleteBasStockInfoByTrayCode(trayCode);
log.info("【库存绑定回流】<回流入库>移除主表库存信息,托盘号:{}}", trayCode);
log.info("【库存回流绑定】<回流入库>移除主表库存信息,托盘号:{}}", trayCode);
}

View File

@@ -20,6 +20,9 @@ import com.ruoyi.in.stockindetail.domain.InStockinDetail;
import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail;
import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService;
import com.ruoyi.pd.stockpd.service.IPdStockpdService;
import com.ruoyi.pd.stockpddetail.domain.PdStockpdDetail;
import com.ruoyi.pd.stockpddetail.service.IPdStockpdDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -54,6 +57,10 @@ public class MydoJobHandler {
IBasJobIdService basJobIdService;
@Autowired
IInTrayMsgService intrayMsgService;
@Autowired
IPdStockpdService pdStockpdService;
@Autowired
IPdStockpdDetailService pdStockpdDetailService;
private static final int TIMEINTERVAL_DEFAULT = 1000;
@@ -179,7 +186,7 @@ public class MydoJobHandler {
* 账务处理 - 手动作废作业 - 入库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_in(){
public void cancelMydoJobHandler_In(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
@@ -195,7 +202,7 @@ public class MydoJobHandler {
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId());
log.info("【手动作废任务】移除<入库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
@@ -209,7 +216,7 @@ public class MydoJobHandler {
//恢复货位状态
//入库
if (mydoJob.getInOrOut() < 20 && mydoJob.getInOrOut() != TaskType.TASKTYPE_PICK_STOCK_MOVE){
if (mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKIN){
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
@@ -231,7 +238,7 @@ public class MydoJobHandler {
// apiWcsService.cancelWcsMydojob()
log.info("【账务处理-入库】任务作废,更新货位信息,作业号:{}", mydoJob.getJobId());
log.info("【账务处理-入库】任务作废,移除作业信息,更新货位状态,作业号:{}", mydoJob.getJobId());
return;
}
@@ -244,7 +251,7 @@ public class MydoJobHandler {
* 账务处理 - 手动作废作业 - 出库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_out(){
public void cancelMydoJobHandler_Out(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
@@ -260,7 +267,7 @@ public class MydoJobHandler {
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId());
log.info("【手动作废任务】移除<出库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
@@ -274,7 +281,7 @@ public class MydoJobHandler {
//恢复货位状态
//出库
if (mydoJob.getInOrOut() >= 20){
if (mydoJob.getInOrOut() >= 20 && mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY){
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
@@ -309,7 +316,7 @@ public class MydoJobHandler {
* 账务处理 - 手动作废作业 - 移库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_move(){
public void cancelMydoJobHandler_Move(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
@@ -326,7 +333,7 @@ public class MydoJobHandler {
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId());
log.info("【手动作废任务】移除<移库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
@@ -348,17 +355,78 @@ public class MydoJobHandler {
stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId());
basStockInfoService.updateBasStockInfo(stockInfo);
}
log.info(
"【账务处理-移库】任务作废,更新库存和货位信息,托盘号:{},源位置:{},目标位置:{}", mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info(
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
log.info("【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
}
}
/**
* 账务处理 - 手动作废作业 - 盘点
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void cancelMydoJobHandler_Inventory(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.CANCEL.getCode())
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
if (mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY || mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK) continue;
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动作废任务】移除<盘点出库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
//恢复货位状态
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId());
basStockInfoService.updateBasStockInfo(stockInfo);
}
// for (MydoJobDetail mydoJobDetail : details){
// //还原子单数量
// PdStockpdDetail pdStockpdDetail = pdStockpdDetailService.selectPdStockpdDetailList(mydoJobDetail.getRollerNumber());
// if(ObjUtil.isNotNull(pdStockpdDetail)){
// pdStockpdDetail.setAllotNum(BigDecimal.ZERO);
// pdStockpdDetail.setAssignNum(BigDecimal.ZERO);
// pdStockpdDetail.setStatus(0);
// pdStockpdDetailService.updatePdStockpdDetail(pdStockpdDetail);
// }
// }
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info("【账务处理-出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId());
}
}
//====================================================================================================
//====================================================================================================
@@ -411,7 +479,7 @@ public class MydoJobHandler {
}
log.info(
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
"【账务处理-移库】任务完成,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
return;
}
@@ -512,7 +580,7 @@ public class MydoJobHandler {
* 账务处理 - 手动完成作业 - 入库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_in(){
public void manualCompleteMydoJobHandler_In(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
@@ -528,7 +596,7 @@ public class MydoJobHandler {
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId());
log.info("【手动完成】移除<入库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
@@ -542,7 +610,10 @@ public class MydoJobHandler {
//恢复货位状态
//入库
if (mydoJob.getInOrOut() < 20){
if (mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKIN &&
mydoJob.getInOrOut() != TaskType.TASKTYPE_PICK_STOCK_MOVE &&
mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK
){
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
//生成库存编号
@@ -606,9 +677,12 @@ public class MydoJobHandler {
}
intrayMsgService.deleteInTrayMsgByRollerNumber(detail.getRollerNumber());
}
log.info("【账务处理-入库】任务完成,移除绑定信息,更新货位信息,作业号:{}", mydoJob.getJobId());
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info("【账务处理-入库】任务完成,移除作业和绑定信息,更新货位信息,作业号:{}", mydoJob.getJobId());
}
}
@@ -621,7 +695,7 @@ public class MydoJobHandler {
* 账务处理 - 手动完成作业 - 出库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_out(){
public void manualCompleteMydoJobHandler_Out(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
@@ -637,7 +711,7 @@ public class MydoJobHandler {
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId());
log.info("【手动完成任务】移除<出库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
@@ -652,8 +726,7 @@ public class MydoJobHandler {
//恢复货位状态
//整托出库
if (mydoJob.getInOrOut() >= TaskType.TASKTYPE_STOCKOUT ||
mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY ||
mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_MANUAL){
mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY ){
for (MydoJobDetail mydoJobDetail : details){
//还原子单数量
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber());
@@ -664,13 +737,18 @@ public class MydoJobHandler {
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
}
basStockService.deleteBasStockByRollerNumber(mydoJobDetail.getRollerNumber());
}
basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode());
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
log.info("【账务处理-整托出库】任务完成,移除托盘库存,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
log.info("【账务处理-出库】任务完成,移除托盘库存,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info("【账务处理-出库】任务完成,移除作业和绑定信息,更新货位信息,作业号:{}", mydoJob.getJobId());
}else{
log.info("【账务处理-操作失败】当前任务类型<{}>不支持手动完成操作,作业号:{},托盘号:{}", mydoJob.getInOrOut(), mydoJob.getJobId(), mydoJob.getTrayCode());
}
@@ -684,7 +762,7 @@ public class MydoJobHandler {
* 账务处理 - 手动完成作业 - 移库
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_move(){
public void manualCompleteMydoJobHandler_Move(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
@@ -701,7 +779,7 @@ public class MydoJobHandler {
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId());
log.info("【手动完成任务】移除<移库>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
@@ -716,21 +794,73 @@ public class MydoJobHandler {
//恢复货位状态
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getTargetCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
log.info(
"【账务处理-移库】更新库存和货位信息,托盘号:{},源位置:{},目标位置:{}", mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode());
if (ObjUtil.isNotNull(stockInfo)){
stockInfo.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
basStockInfoService.updateBasStockInfo(stockInfo);
}
log.info(
"【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId()
);
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info( "【账务处理-移库】任务完成,移除作业和绑定信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
}
}
/**
* 账务处理 - 手动完成作业 - 盘点
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void manualCompleteMydoJobHandler_Inventory(){
List<MydoJob> mydoJobs = mydoJobService.selectInMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.MANUAL_FINISHED.getCode())
.build()
);
if (mydoJobs.isEmpty()) return;
for (MydoJob mydoJob : mydoJobs) {
//任务子表
if (mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY || mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK) continue;
List<MydoJobDetail> details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId());
if (!details.isEmpty()){
//移除任务子表
mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId());
mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId());
log.info("【手动完成任务】移除<盘点>任务明细,作业号:{}", mydoJob.getJobId());
}
//库存子表
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks){
stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId());
stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE);
basStockService.updateBasStock(stock);
}
}
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED);
log.info("【账务处理-盘点】任务完成,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
mydoJobService.insertMydoJobFinish(mydoJob.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
log.info( "【账务处理-盘点】任务完成,移除作业信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
}
}
//====================================================================================================
//====================================================================================================

View File

@@ -190,7 +190,7 @@ public class RequestWcsHandler {
/**
* 出库确认完成 - 推送wcs回流任务
* 出库确认完成 - 推送wcs拣选回流任务
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void sendWcsBackTask(){
@@ -242,4 +242,57 @@ public class RequestWcsHandler {
}
/**
* 盘点确认完成 - 推送wcs回流任务
*/
@Scheduled(fixedRate = TIMEINTERVAL_2000)
public void sendWcsInventoryBackTask(){
List<MydoJob> mydoJobs = mydoJobService.selectOutMydoJobList(
new MydoJob().builder()
.status(TaskStatusEnum.READY.getCode())
.inOrOut(TaskType.TASKTYPE_INVENTORY_BACK)
.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.sendInventoryBackMydoJob(paramMap);
if (ajaxResult.isSuccess()){
log.info("【推送盘点回流】<盘点回流>入库,更新货位和库存预占用状态,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode());
mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode());
mydoJobService.updateMydoJob(mydoJob);
//更新库存状态【占用中】
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode());
if (!stocks.isEmpty()){
for (BasStock stock : stocks) {
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
stock.setCargoSpaceId(mydoJob.getCargoSpaceId());
basStockService.updateBasStock(stock);
}
}
//更新货位状态【入库预占用】
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN);
}
}
}
}

View File

@@ -118,7 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 存储过程:更新盘点单据状态(作废/审核/完成)-->
<select id="updatePdStockpdByProc" parameterType="java.util.Map" statementType="CALLABLE">
{call proc_update_pdbill_status(
{call proc_pd_bill_update_status(
#{v_stockpd_id,mode=IN,jdbcType=VARCHAR},
#{v_status,mode=IN,jdbcType=INTEGER},
#{v_result,mode=OUT,jdbcType=INTEGER},

View File

@@ -26,6 +26,15 @@ export function addBindTrayMsg(data) {
})
}
// 新增入库信息
export function addBindEmptyTrayMsg(data) {
return request({
url: '/pda/addEmptyTrayJob',
method: 'post',
data: data
})
}
// 修改入库信息
export function updateBindTrayMsg(data) {
return request({

View File

@@ -86,9 +86,19 @@
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
@click="handleAdd('bindMsg')"
v-hasPermi="['in:bindMsg:add']"
>新增</el-button>
>新增版辊绑定</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd('emptyTray')"
v-hasPermi="['in:bindMsg:add']"
>新增空托盘绑定</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
@@ -193,8 +203,8 @@
</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 label="物料编号" prop="rollerNumber">
<el-input v-model="form.rollerNumber" :disabled="isBindEmptyTray" placeholder="请输入版辊编号" />
</el-form-item>
</el-col>
<el-col :span="24">
@@ -213,7 +223,7 @@
</template>
<script>
import { listBindTrayMsg, getBindTrayMsg, delBindTrayMsg, delBindTrayMsgByRollerNumber, addBindTrayMsg, updateBindTrayMsg } from "@/api/in/bindTrayMsg"
import { listBindTrayMsg, getBindTrayMsg, delBindTrayMsgByRollerNumber, addBindTrayMsg, addBindEmptyTrayMsg } from "@/api/in/bindTrayMsg"
import { data } from "vue-barcode";
export default {
@@ -277,7 +287,9 @@ export default {
id: [
{ required: true, message: "$comment不能为空", trigger: "blur" }
],
}
},
isBindEmptyTray: false
}
},
created() {
@@ -355,10 +367,19 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
handleAdd(type) {
this.reset()
this.open = true
this.title = "添加入库信息"
if (type === 'emptyTray') {
// 绑定空托盘逻辑
this.isBindEmptyTray = true;
this.form.rollerNumber = 'KTP0001'; // 默认值
} else {
// 普通版辊绑定逻辑
this.isBindEmptyTray = false;
}
},
/** 修改按钮操作 */
@@ -389,12 +410,20 @@ export default {
rollerNumber: this.form.rollerNumber,
quantity: this.form.quantity,
}
addBindTrayMsg(data).then(() => {
if (this.isBindEmptyTray) {
addBindEmptyTrayMsg(data).then(() => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
}).catch(() => {})
} else {
addBindTrayMsg(data).then(() => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
}).catch(() => {})
}).catch(() => {})
}
},

View File

@@ -9,7 +9,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="任务类型" prop="inOrOut">
<!-- <el-form-item label="任务类型" prop="inOrOut">
<el-select v-model="queryParams.inOrOut" placeholder="请选择任务类型" clearable>
<el-option
v-for="dict in dict.type.mydo_job_status"
@@ -18,7 +18,7 @@
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="执行阶段" prop="executionPhase">
<el-select v-model="queryParams.executionPhase" placeholder="请选择执行阶段" clearable>
<el-option
@@ -106,11 +106,11 @@
<el-table-column label="任务ID" align="center" prop="jobId" />
<el-table-column label="任务状态" align="center" prop="status" />
<el-table-column label="任务号" align="center" prop="taskNo" />
<el-table-column label="任务类型" align="center" prop="inOrOut">
<!-- <el-table-column label="任务类型" align="center" prop="inOrOut">
<template slot-scope="scope">
<dict-tag :options="dict.type.mydo_job_status" :value="scope.row.inOrOut"/>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="执行阶段" align="center" prop="executionPhase">
<template slot-scope="scope">
<dict-tag :options="dict.type.mydo_job_execution_phase" :value="scope.row.executionPhase"/>