Compare commits
No commits in common. "4d35a2a33796a1809bdf6b871667e95c2476273e" and "5293f68ae44e13f986511d5726f9b0637b7979da" have entirely different histories.
4d35a2a337
...
5293f68ae4
|
|
@ -36,9 +36,6 @@ import PickP2 from "@/views/PickP2.vue";
|
||||||
import PickP3 from "@/views/PickP3.vue";
|
import PickP3 from "@/views/PickP3.vue";
|
||||||
import InboundP2 from "@/views/InboundP2.vue";
|
import InboundP2 from "@/views/InboundP2.vue";
|
||||||
import InboundP3 from "@/views/InboundP3.vue";
|
import InboundP3 from "@/views/InboundP3.vue";
|
||||||
import QualityP7 from "@/views/QualityP7.vue";
|
|
||||||
import QualityP9 from "@/views/QualityP9.vue";
|
|
||||||
import QualityP8 from "@/views/QualityP8.vue";
|
|
||||||
|
|
||||||
const debounce = (fn, delay) => {
|
const debounce = (fn, delay) => {
|
||||||
let timer = null;
|
let timer = null;
|
||||||
|
|
@ -67,10 +64,7 @@ export default {
|
||||||
InboundP3,
|
InboundP3,
|
||||||
PickP1,
|
PickP1,
|
||||||
PickP2,
|
PickP2,
|
||||||
PickP3,
|
PickP3
|
||||||
QualityP7,
|
|
||||||
QualityP8,
|
|
||||||
QualityP9
|
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
@ -84,15 +78,12 @@ export default {
|
||||||
|
|
||||||
// 动态标题映射
|
// 动态标题映射
|
||||||
const titleMapping = {
|
const titleMapping = {
|
||||||
'1': ' 立库 1 号入库',
|
'1': ' 1 号入库',
|
||||||
'2': ' 立库 2 号入库',
|
'2': ' 2 号入库',
|
||||||
'3': ' 立库 3 号入库',
|
'3': ' 3 号入库',
|
||||||
'4': '立库 P1 站台拣选',
|
'4': 'P1 站台拣选',
|
||||||
'5': '立库 P2 站台拣选',
|
'5': 'P2 站台拣选',
|
||||||
'6': '立库 P3 站台拣选',
|
'6': 'P3 站台拣选',
|
||||||
'7': '海关 P7 站台收货质检',
|
|
||||||
'8': '海关 P8 站台收货质检',
|
|
||||||
'9': '海关 P9 站台收货质检',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 动态标题
|
// 动态标题
|
||||||
|
|
@ -104,7 +95,7 @@ export default {
|
||||||
}
|
}
|
||||||
const operation = titleMapping[standId];
|
const operation = titleMapping[standId];
|
||||||
if (operation) {
|
if (operation) {
|
||||||
return `丰尚 ${operation} 状态一览表`;
|
return `丰尚立库 ${operation} 状态一览表`;
|
||||||
}
|
}
|
||||||
// 如果standId不在映射中,显示默认标题
|
// 如果standId不在映射中,显示默认标题
|
||||||
return '丰尚立库 状态一览表';
|
return '丰尚立库 状态一览表';
|
||||||
|
|
@ -119,9 +110,6 @@ export default {
|
||||||
if (standId === '4') return 'PickP1';
|
if (standId === '4') return 'PickP1';
|
||||||
if (standId === '5') return 'PickP2';
|
if (standId === '5') return 'PickP2';
|
||||||
if (standId === '6') return 'PickP3';
|
if (standId === '6') return 'PickP3';
|
||||||
if (standId === '7') return 'QualityP7';
|
|
||||||
if (standId === '8') return 'QualityP8';
|
|
||||||
if (standId === '9') return 'QualityP9';
|
|
||||||
return 'Inbound'; // 默认显示入库组件
|
return 'Inbound'; // 默认显示入库组件
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<DataTable :columns="columns" :data="rows" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, onMounted, onUnmounted } from 'vue';
|
|
||||||
import DataTable from '../components/DataTable.vue';
|
|
||||||
|
|
||||||
// 入库字段
|
|
||||||
const columns = [
|
|
||||||
{ key: 'vehicleId', title: '托盘号' },
|
|
||||||
{ key: 'matNo', title: '物料号' },
|
|
||||||
{ key: 'inspectStatus', title: '是否质检' },
|
|
||||||
{ key: 'inspectCode', title: '质检结果' },
|
|
||||||
];
|
|
||||||
|
|
||||||
const rows = ref([]);
|
|
||||||
let timer = null;
|
|
||||||
|
|
||||||
// 获取托盘号
|
|
||||||
async function getContainerNos() {
|
|
||||||
try {
|
|
||||||
// 获取106位置的托盘号
|
|
||||||
const response106 = await fetch('http://172.18.222.253:9980/api/upper/pub/getStandCode?standId=106');
|
|
||||||
const data106 = await response106.json();
|
|
||||||
const containerNo106 = data106.returnData || '';
|
|
||||||
|
|
||||||
// 获取108位置的托盘号
|
|
||||||
const response108 = await fetch('http://172.18.222.253:9980/api/upper/pub/getStandCode?standId=108');
|
|
||||||
const data108 = await response108.json();
|
|
||||||
const containerNo108 = data108.returnData || '';
|
|
||||||
|
|
||||||
return [containerNo106, containerNo108].filter(no => no !== '');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('获取托盘号失败:', error);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取质检数据
|
|
||||||
async function getQualityData(containerNos) {
|
|
||||||
const qualityData = [];
|
|
||||||
|
|
||||||
for (const containerNo of containerNos) {
|
|
||||||
try {
|
|
||||||
// 向EWM系统请求数据
|
|
||||||
const response = await fetch('http://your-ewm-api-endpoint/data', { // 这里替换为实际的API地址
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Authorization': 'Basic ' + btoa('asrs:mom@123456') // Basic Auth认证
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ containerNo })
|
|
||||||
});
|
|
||||||
|
|
||||||
if (response.ok) {
|
|
||||||
const data = await response.json();
|
|
||||||
// 处理返回的数据
|
|
||||||
if (data.grInfoList && Array.isArray(data.grInfoList)) {
|
|
||||||
data.grInfoList.forEach(item => {
|
|
||||||
qualityData.push({
|
|
||||||
vehicleId: data.containerNo,
|
|
||||||
matNo: item.matNo,
|
|
||||||
inspectStatus: item.inspectStatus ? '是' : '否',
|
|
||||||
inspectCode: item.inspectStatus ? (item.firstDemo ? '首样合格' : '质检合格') : '未质检'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`获取托盘${containerNo}的质检数据失败:`, error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return qualityData;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function load() {
|
|
||||||
try {
|
|
||||||
// 获取托盘号
|
|
||||||
const containerNos = await getContainerNos();
|
|
||||||
|
|
||||||
if (containerNos.length > 0) {
|
|
||||||
// 获取质检数据
|
|
||||||
const qualityData = await getQualityData(containerNos);
|
|
||||||
rows.value = qualityData;
|
|
||||||
} else {
|
|
||||||
rows.value = [];
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('加载质检数据失败:', error);
|
|
||||||
rows.value = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
load();
|
|
||||||
timer = setInterval(load, 5000);
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
if (timer) {
|
|
||||||
clearInterval(timer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.title-center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 增大表格整体字体 */
|
|
||||||
:deep(.table-wrapper) {
|
|
||||||
font-size: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(thead th) {
|
|
||||||
font-size: 40px; /* 表头字体稍大 */
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(tbody td) {
|
|
||||||
font-size: 40px; /* 表格内容字体 */
|
|
||||||
padding: 16px 12px; /* 同时增加内边距使布局更舒适 */
|
|
||||||
}
|
|
||||||
/* 设置第一列(料箱号)宽度为30% */
|
|
||||||
:deep(th:nth-child(1)),
|
|
||||||
:deep(td:nth-child(1)) {
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置第二列(起点)宽度为10% */
|
|
||||||
:deep(th:nth-child(2)),
|
|
||||||
:deep(td:nth-child(2)) {
|
|
||||||
width: 20%;
|
|
||||||
}
|
|
||||||
/* 设置第三列(终点)宽度 */
|
|
||||||
:deep(th:nth-child(3)),
|
|
||||||
:deep(td:nth-child(3)) {
|
|
||||||
width: 15%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置第四列(优先级)宽度 */
|
|
||||||
:deep(th:nth-child(4)),
|
|
||||||
:deep(td:nth-child(4)) {
|
|
||||||
width: 25%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,133 +0,0 @@
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<DataTable :columns="columns" :data="rows" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, onMounted, onUnmounted } from 'vue';
|
|
||||||
import DataTable from '../components/DataTable.vue';
|
|
||||||
|
|
||||||
// 入库字段
|
|
||||||
const columns = [
|
|
||||||
{ key: 'vehicleId', title: '托盘号' },
|
|
||||||
{ key: 'matNo', title: '物料号' },
|
|
||||||
{ key: 'inspectStatus', title: '是否质检' },
|
|
||||||
{ key: 'inspectCode', title: '质检结果' },
|
|
||||||
];
|
|
||||||
|
|
||||||
const rows = ref([]);
|
|
||||||
let timer = null;
|
|
||||||
|
|
||||||
// 获取托盘号
|
|
||||||
async function getContainerNos() {
|
|
||||||
try {
|
|
||||||
// 获取114位置的托盘号
|
|
||||||
const response114 = await fetch('http://172.18.222.253:9980/api/upper/pub/getStandCode?standId=114');
|
|
||||||
const data114 = await response114.json();
|
|
||||||
const containerNo114 = data114.returnData || '';
|
|
||||||
|
|
||||||
// 获取116位置的托盘号
|
|
||||||
const response116 = await fetch('http://172.18.222.253:9980/api/upper/pub/getStandCode?standId=116');
|
|
||||||
const data116 = await response116.json();
|
|
||||||
const containerNo116 = data116.returnData || '';
|
|
||||||
|
|
||||||
return [containerNo114, containerNo116].filter(no => no !== '');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('获取托盘号失败:', error);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取质检数据(模拟实现,根据实际需求调整)
|
|
||||||
async function getQualityData(containerNos) {
|
|
||||||
const qualityData = [];
|
|
||||||
|
|
||||||
for (const containerNo of containerNos) {
|
|
||||||
try {
|
|
||||||
// 模拟数据结构,实际应根据接口文档调整
|
|
||||||
qualityData.push({
|
|
||||||
vehicleId: containerNo,
|
|
||||||
matNo: 'MAT-' + Math.floor(Math.random() * 10000),
|
|
||||||
inspectStatus: Math.random() > 0.5 ? '是' : '否',
|
|
||||||
inspectCode: Math.random() > 0.5 ? '合格' : '不合格'
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`处理托盘${containerNo}数据失败:`, error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return qualityData;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function load() {
|
|
||||||
try {
|
|
||||||
// 获取托盘号
|
|
||||||
const containerNos = await getContainerNos();
|
|
||||||
|
|
||||||
if (containerNos.length > 0) {
|
|
||||||
// 获取质检数据
|
|
||||||
const qualityData = await getQualityData(containerNos);
|
|
||||||
rows.value = qualityData;
|
|
||||||
} else {
|
|
||||||
rows.value = [];
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('加载质检数据失败:', error);
|
|
||||||
rows.value = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
load();
|
|
||||||
timer = setInterval(load, 5000);
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
if (timer) {
|
|
||||||
clearInterval(timer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.title-center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 增大表格整体字体 */
|
|
||||||
:deep(.table-wrapper) {
|
|
||||||
font-size: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(thead th) {
|
|
||||||
font-size: 40px; /* 表头字体稍大 */
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(tbody td) {
|
|
||||||
font-size: 40px; /* 表格内容字体 */
|
|
||||||
padding: 16px 12px; /* 同时增加内边距使布局更舒适 */
|
|
||||||
}
|
|
||||||
/* 设置第一列(料箱号)宽度为30% */
|
|
||||||
:deep(th:nth-child(1)),
|
|
||||||
:deep(td:nth-child(1)) {
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置第二列(起点)宽度为10% */
|
|
||||||
:deep(th:nth-child(2)),
|
|
||||||
:deep(td:nth-child(2)) {
|
|
||||||
width: 20%;
|
|
||||||
}
|
|
||||||
/* 设置第三列(终点)宽度 */
|
|
||||||
:deep(th:nth-child(3)),
|
|
||||||
:deep(td:nth-child(3)) {
|
|
||||||
width: 15%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置第四列(优先级)宽度 */
|
|
||||||
:deep(th:nth-child(4)),
|
|
||||||
:deep(td:nth-child(4)) {
|
|
||||||
width: 25%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,133 +0,0 @@
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<DataTable :columns="columns" :data="rows" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, onMounted, onUnmounted } from 'vue';
|
|
||||||
import DataTable from '../components/DataTable.vue';
|
|
||||||
|
|
||||||
// 入库字段
|
|
||||||
const columns = [
|
|
||||||
{ key: 'vehicleId', title: '托盘号' },
|
|
||||||
{ key: 'matNo', title: '物料号' },
|
|
||||||
{ key: 'inspectStatus', title: '是否质检' },
|
|
||||||
{ key: 'inspectCode', title: '质检结果' },
|
|
||||||
];
|
|
||||||
|
|
||||||
const rows = ref([]);
|
|
||||||
let timer = null;
|
|
||||||
|
|
||||||
// 获取托盘号
|
|
||||||
async function getContainerNos() {
|
|
||||||
try {
|
|
||||||
// 获取114位置的托盘号
|
|
||||||
const response114 = await fetch('http://172.18.222.253:9980/api/upper/pub/getStandCode?standId=122');
|
|
||||||
const data114 = await response114.json();
|
|
||||||
const containerNo114 = data114.returnData || '';
|
|
||||||
|
|
||||||
// 获取116位置的托盘号
|
|
||||||
const response116 = await fetch('http://172.18.222.253:9980/api/upper/pub/getStandCode?standId=124');
|
|
||||||
const data116 = await response116.json();
|
|
||||||
const containerNo116 = data116.returnData || '';
|
|
||||||
|
|
||||||
return [containerNo114, containerNo116].filter(no => no !== '');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('获取托盘号失败:', error);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取质检数据(模拟实现,根据实际需求调整)
|
|
||||||
async function getQualityData(containerNos) {
|
|
||||||
const qualityData = [];
|
|
||||||
|
|
||||||
for (const containerNo of containerNos) {
|
|
||||||
try {
|
|
||||||
// 模拟数据结构,实际应根据接口文档调整
|
|
||||||
qualityData.push({
|
|
||||||
vehicleId: containerNo,
|
|
||||||
matNo: 'MAT-' + Math.floor(Math.random() * 10000),
|
|
||||||
inspectStatus: Math.random() > 0.5 ? '是' : '否',
|
|
||||||
inspectCode: Math.random() > 0.5 ? '合格' : '不合格'
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`处理托盘${containerNo}数据失败:`, error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return qualityData;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function load() {
|
|
||||||
try {
|
|
||||||
// 获取托盘号
|
|
||||||
const containerNos = await getContainerNos();
|
|
||||||
|
|
||||||
if (containerNos.length > 0) {
|
|
||||||
// 获取质检数据
|
|
||||||
const qualityData = await getQualityData(containerNos);
|
|
||||||
rows.value = qualityData;
|
|
||||||
} else {
|
|
||||||
rows.value = [];
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('加载质检数据失败:', error);
|
|
||||||
rows.value = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
load();
|
|
||||||
timer = setInterval(load, 5000);
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
if (timer) {
|
|
||||||
clearInterval(timer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.title-center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 增大表格整体字体 */
|
|
||||||
:deep(.table-wrapper) {
|
|
||||||
font-size: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(thead th) {
|
|
||||||
font-size: 40px; /* 表头字体稍大 */
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(tbody td) {
|
|
||||||
font-size: 40px; /* 表格内容字体 */
|
|
||||||
padding: 16px 12px; /* 同时增加内边距使布局更舒适 */
|
|
||||||
}
|
|
||||||
/* 设置第一列(料箱号)宽度为30% */
|
|
||||||
:deep(th:nth-child(1)),
|
|
||||||
:deep(td:nth-child(1)) {
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置第二列(起点)宽度为10% */
|
|
||||||
:deep(th:nth-child(2)),
|
|
||||||
:deep(td:nth-child(2)) {
|
|
||||||
width: 20%;
|
|
||||||
}
|
|
||||||
/* 设置第三列(终点)宽度 */
|
|
||||||
:deep(th:nth-child(3)),
|
|
||||||
:deep(td:nth-child(3)) {
|
|
||||||
width: 15%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 设置第四列(优先级)宽度 */
|
|
||||||
:deep(th:nth-child(4)),
|
|
||||||
:deep(td:nth-child(4)) {
|
|
||||||
width: 25%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -179,7 +179,6 @@ import UploadExcelBaseGoods from '@/excel/UploadExcelBaseGoods.vue'
|
||||||
import UploadExcelKanban from '@/excel/UploadExcelKanban.vue'
|
import UploadExcelKanban from '@/excel/UploadExcelKanban.vue'
|
||||||
import {exportGoodsExcel} from "@/api/excel";
|
import {exportGoodsExcel} from "@/api/excel";
|
||||||
import {dateFormatter} from "@/utils/formatter";
|
import {dateFormatter} from "@/utils/formatter";
|
||||||
import { getUserPermission } from '@/api/user.js'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 常量定义
|
* 常量定义
|
||||||
|
|
@ -246,38 +245,14 @@ const handleSelectionChange = (row) => {
|
||||||
selectedRows.value = selectedRows.value.filter(item => item.goodsId !== row.goodsId)
|
selectedRows.value = selectedRows.value.filter(item => item.goodsId !== row.goodsId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 修改批量编辑处理函数
|
// 批量编辑处理
|
||||||
const handleBatchEdit = () => {
|
const handleBatchEdit = () => {
|
||||||
const permissionParams = {
|
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount,
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: USER_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
getUserPermission(permissionParams).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"D"(批量修改时间权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (!permissionStr.includes('B')) {
|
|
||||||
// 无批量修改时间权限提示
|
|
||||||
ElMessage.error('您没有批量修改时间的权限')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有权限,继续执行原有逻辑
|
|
||||||
if (selectedRows.value.length === 0) {
|
if (selectedRows.value.length === 0) {
|
||||||
ElMessage.warning('请至少选择一条记录')
|
ElMessage.warning('请至少选择一条记录')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
batchEditForm.pickingDate = ''
|
batchEditForm.pickingDate = ''
|
||||||
showBatchEditDialog.value = true
|
showBatchEditDialog.value = true
|
||||||
} else {
|
|
||||||
ElMessage.error(res.data.message || '权限检查失败')
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
console.log(err)
|
|
||||||
ElMessage.error('权限检查失败')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSelectAllChange = (val) => {
|
const handleSelectAllChange = (val) => {
|
||||||
|
|
@ -353,25 +328,9 @@ const saveEdit = (editForm) => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 修改加急处理函数
|
// 添加优先级
|
||||||
const handleDelete = (row) => {
|
const handleDelete = (row) => {
|
||||||
const permissionParams = {
|
//
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount,
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: USER_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
getUserPermission(permissionParams).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"C"(加急权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (!permissionStr.includes('B')) {
|
|
||||||
// 无加急权限提示
|
|
||||||
ElMessage.error('您没有加急操作的权限')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有权限,继续执行原有逻辑
|
|
||||||
let request = {
|
let request = {
|
||||||
taskId: row.taskId,
|
taskId: row.taskId,
|
||||||
}
|
}
|
||||||
|
|
@ -389,13 +348,6 @@ const handleDelete = (row) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
|
||||||
ElMessage.error(res.data.message || '权限检查失败')
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
console.log(err)
|
|
||||||
ElMessage.error('权限检查失败')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// 编辑弹窗相关
|
// 编辑弹窗相关
|
||||||
const showEditDialog = ref(false)
|
const showEditDialog = ref(false)
|
||||||
|
|
@ -407,27 +359,11 @@ const editFormRef = ref()
|
||||||
|
|
||||||
// 打开编辑弹窗
|
// 打开编辑弹窗
|
||||||
const handleEdit = (row) => {
|
const handleEdit = (row) => {
|
||||||
const permissionParams = {
|
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount,
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: USER_NAME
|
|
||||||
}
|
|
||||||
getUserPermission(permissionParams).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"C"(下发盘点权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (!permissionStr.includes('B')) {
|
|
||||||
// 无下发盘点权限提示
|
|
||||||
ElMessage.error('您没有编辑时间的权限')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
editForm.taskId = row.taskId
|
editForm.taskId = row.taskId
|
||||||
// 使用 formatDateToDay 处理日期,避免时区问题
|
// 使用 formatDateToDay 处理日期,避免时区问题
|
||||||
editForm.pickingDate = row.pickingDate ? formatDateToDay(row.pickingDate) : ''
|
editForm.pickingDate = row.pickingDate ? formatDateToDay(row.pickingDate) : ''
|
||||||
showEditDialog.value = true
|
showEditDialog.value = true
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const formatDateToDay = (dateString) => {
|
const formatDateToDay = (dateString) => {
|
||||||
if (!dateString) return '';
|
if (!dateString) return '';
|
||||||
|
|
|
||||||
|
|
@ -2,59 +2,59 @@
|
||||||
<el-config-provider :locale="zhCn">
|
<el-config-provider :locale="zhCn">
|
||||||
<el-container class="content">
|
<el-container class="content">
|
||||||
<div class="work-area">
|
<div class="work-area">
|
||||||
<fieldset class="search-area">
|
<!-- <fieldset class="search-area">-->
|
||||||
<el-form ref="outTaskRef" :model="outTaskEntity" :label-position="labelPosition" label-width="158px"
|
<!-- <el-form ref="outTaskRef" :model="outTaskEntity" :label-position="labelPosition" label-width="158px"-->
|
||||||
style="max-width: 100%" :rules="requestRules" status-icon>
|
<!-- style="max-width: 100%" :rules="requestRules" status-icon>-->
|
||||||
<div style="display: flex; justify-content: space-between;">
|
<!-- <div style="display: flex; justify-content: space-between;">-->
|
||||||
<el-row>
|
<!-- <el-row>-->
|
||||||
<!-- <el-form-item label="出库类型" prop="outType">
|
<!-- <!– <el-form-item label="出库类型" prop="outType">-->
|
||||||
<el-select-v2 style="width: 196px" v-model="outTaskEntity.outType" placeholder="请选择入库类型"
|
<!-- <el-select-v2 style="width: 196px" v-model="outTaskEntity.outType" placeholder="请选择入库类型"-->
|
||||||
:options="outTypeOptions"></el-select-v2>
|
<!-- :options="outTypeOptions"></el-select-v2>-->
|
||||||
</el-form-item> -->
|
<!-- </el-form-item> –>-->
|
||||||
<el-form-item label="料号" prop="goodsId">
|
<!-- <el-form-item label="料号" prop="goodsId">-->
|
||||||
<el-input v-model="outTaskEntity.goodsId" @blur="getLackQty()" clearable/>
|
<!-- <el-input v-model="outTaskEntity.goodsId" @blur="getLackQty()" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
|
|
||||||
<el-form-item label="数量" prop="needNum">
|
<!-- <el-form-item label="数量" prop="needNum">-->
|
||||||
<el-input-number style="width: 196px" v-model.number="outTaskEntity.needNum"
|
<!-- <el-input-number style="width: 196px" v-model.number="outTaskEntity.needNum"-->
|
||||||
controls-position="right" :min="1" clearable/>
|
<!-- controls-position="right" :min="1" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
<el-form-item label="箱号" prop="vehicleId">
|
<!-- <el-form-item label="箱号" prop="vehicleId">-->
|
||||||
<el-input v-model="outTaskEntity.vehicleId" clearable/>
|
<!-- <el-input v-model="outTaskEntity.vehicleId" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
<el-form-item label="特殊库存" prop="specialStock">
|
<!-- <el-form-item label="特殊库存" prop="specialStock">-->
|
||||||
<el-input v-model="outTaskEntity.specialStock" ref="specialStock" clearable/>
|
<!-- <el-input v-model="outTaskEntity.specialStock" ref="specialStock" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
<el-form-item label="特殊库存号" prop="specialStockNo">
|
<!-- <el-form-item label="特殊库存号" prop="specialStockNo">-->
|
||||||
<el-input v-model="outTaskEntity.specialStockNo" ref="specialStockNo" clearable/>
|
<!-- <el-input v-model="outTaskEntity.specialStockNo" ref="specialStockNo" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
<el-form-item label="特殊库存item号" prop="specialStockItemNo">
|
<!-- <el-form-item label="特殊库存item号" prop="specialStockItemNo">-->
|
||||||
<el-input v-model="outTaskEntity.specialStockItemNo" ref="specialStockItemNo" clearable/>
|
<!-- <el-input v-model="outTaskEntity.specialStockItemNo" ref="specialStockItemNo" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
<el-form-item label="批次号" prop="batchNo">
|
<!-- <el-form-item label="批次号" prop="batchNo">-->
|
||||||
<el-input v-model="outTaskEntity.batchNo" ref="batchNo" clearable/>
|
<!-- <el-input v-model="outTaskEntity.batchNo" ref="batchNo" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
<!-- <el-form-item label="原因" prop="reason" v-if="outTaskEntity.outType === 9">
|
<!-- <!– <el-form-item label="原因" prop="reason" v-if="outTaskEntity.outType === 9">-->
|
||||||
<el-select-v2 style="width: 196px" v-model="outTaskEntity.reason" placeholder="请选择紧急出库原因"
|
<!-- <el-select-v2 style="width: 196px" v-model="outTaskEntity.reason" placeholder="请选择紧急出库原因"-->
|
||||||
:options="reasonOptions"></el-select-v2>
|
<!-- :options="reasonOptions"></el-select-v2>-->
|
||||||
</el-form-item> -->
|
<!-- </el-form-item> –>-->
|
||||||
<el-form-item label="工单" prop="workOrder" v-if="outTaskEntity.reason === '缺料'">
|
<!-- <el-form-item label="工单" prop="workOrder" v-if="outTaskEntity.reason === '缺料'">-->
|
||||||
<el-input v-model="outTaskEntity.workOrder" @blur="getLackQty()" clearable/>
|
<!-- <el-input v-model="outTaskEntity.workOrder" @blur="getLackQty()" clearable/>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
</el-row>
|
<!-- </el-row>-->
|
||||||
<el-row>
|
<!-- <el-row>-->
|
||||||
<el-button type="primary"
|
<!-- <el-button type="primary"-->
|
||||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
<!-- style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"-->
|
||||||
@click="confirmOut()">确认出库
|
<!-- @click="confirmOut()">确认出库-->
|
||||||
</el-button>
|
<!-- </el-button>-->
|
||||||
<el-button type="warning"
|
<!-- <el-button type="warning"-->
|
||||||
style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"
|
<!-- style="height: 50px; width: 100px; margin: auto 5px auto 5px; font-size: large; color: black;"-->
|
||||||
@click="clearInput()">清除输入
|
<!-- @click="clearInput()">清除输入-->
|
||||||
</el-button>
|
<!-- </el-button>-->
|
||||||
</el-row>
|
<!-- </el-row>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</el-form>
|
<!-- </el-form>-->
|
||||||
</fieldset>
|
<!-- </fieldset>-->
|
||||||
<!-- 修改confirm-area为竖直布局,表单项两两一排 -->
|
<!-- 修改confirm-area为竖直布局,表单项两两一排 -->
|
||||||
<!-- 修改confirm-area为竖直布局,表单项两两一排 -->
|
<!-- 修改confirm-area为竖直布局,表单项两两一排 -->
|
||||||
<div style="display: flex; margin-top: 10px;">
|
<div style="display: flex; margin-top: 10px;">
|
||||||
|
|
|
||||||
|
|
@ -118,9 +118,6 @@ import {confirmInventory, getInventoryConfirm, requestInventory} from "@/api/tas
|
||||||
import {labelPosition} from "@/constant/form";
|
import {labelPosition} from "@/constant/form";
|
||||||
import UploadExcelInventory from "@/excel/UploadExcelInventory.vue";
|
import UploadExcelInventory from "@/excel/UploadExcelInventory.vue";
|
||||||
import {loading} from "@/utils/loading";
|
import {loading} from "@/utils/loading";
|
||||||
// 在文件顶部导入必要的模块(如果还没有导入的话)
|
|
||||||
import { getUserPermission } from '@/api/user.js'
|
|
||||||
|
|
||||||
|
|
||||||
const STAND_ID = store.getters.getStandId
|
const STAND_ID = store.getters.getStandId
|
||||||
const USER_NAME = store.getters.getUserName
|
const USER_NAME = store.getters.getUserName
|
||||||
|
|
@ -297,36 +294,16 @@ const clearConfirmEntity = (index) => {
|
||||||
|
|
||||||
// 下发盘点任务
|
// 下发盘点任务
|
||||||
const sendInventoryRequest = () => {
|
const sendInventoryRequest = () => {
|
||||||
// 先检查用户是否有下发盘点权限(A权限)
|
|
||||||
const permissionParams = {
|
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount,
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: USER_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
getUserPermission(permissionParams).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"A"(下发盘点权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (!permissionStr.includes('A')) {
|
|
||||||
// 无下发盘点权限提示
|
|
||||||
ElMessage.error('您没有下发盘点任务的权限')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有权限,继续执行原有逻辑
|
|
||||||
inventoryRequestFormEntity.goodsId = inventoryRequestFormEntity.goodsId.trim().toUpperCase()
|
inventoryRequestFormEntity.goodsId = inventoryRequestFormEntity.goodsId.trim().toUpperCase()
|
||||||
inventoryRequestFormEntity.vehicleId = inventoryRequestFormEntity.vehicleId.trim().toUpperCase()
|
inventoryRequestFormEntity.vehicleId = inventoryRequestFormEntity.vehicleId.trim().toUpperCase()
|
||||||
inventoryRequestFormEntity.specialStock = inventoryRequestFormEntity.specialStock.trim().toUpperCase()
|
inventoryRequestFormEntity.specialStock = inventoryRequestFormEntity.specialStock.trim().toUpperCase()
|
||||||
inventoryRequestFormEntity.specialStockNo = inventoryRequestFormEntity.specialStockNo.trim().toUpperCase()
|
inventoryRequestFormEntity.specialStockNo = inventoryRequestFormEntity.specialStockNo.trim().toUpperCase()
|
||||||
inventoryRequestFormEntity.specialStockItemNo = inventoryRequestFormEntity.specialStockItemNo.trim().toUpperCase()
|
inventoryRequestFormEntity.specialStockItemNo = inventoryRequestFormEntity.specialStockItemNo.trim().toUpperCase()
|
||||||
inventoryRequestFormEntity.batchNo = inventoryRequestFormEntity.batchNo.trim().toUpperCase()
|
inventoryRequestFormEntity.batchNo = inventoryRequestFormEntity.batchNo.trim().toUpperCase()
|
||||||
|
|
||||||
if (inventoryRequestFormEntity.goodsId === '') {
|
if (inventoryRequestFormEntity.goodsId === '') {
|
||||||
ElMessage.error("料号为必须项。")
|
ElMessage.error("料号为必须项。")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const request = {
|
const request = {
|
||||||
goodsId: inventoryRequestFormEntity.goodsId,
|
goodsId: inventoryRequestFormEntity.goodsId,
|
||||||
vehicleId: inventoryRequestFormEntity.vehicleId,
|
vehicleId: inventoryRequestFormEntity.vehicleId,
|
||||||
|
|
@ -337,7 +314,6 @@ const sendInventoryRequest = () => {
|
||||||
standId: STAND_ID,
|
standId: STAND_ID,
|
||||||
userName: USER_NAME
|
userName: USER_NAME
|
||||||
}
|
}
|
||||||
|
|
||||||
loading.open('处理中...')
|
loading.open('处理中...')
|
||||||
requestInventory(request).then(res => {
|
requestInventory(request).then(res => {
|
||||||
const response = res.data
|
const response = res.data
|
||||||
|
|
@ -353,15 +329,7 @@ const sendInventoryRequest = () => {
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
loading.close()
|
loading.close()
|
||||||
})
|
})
|
||||||
} else {
|
|
||||||
ElMessage.error(res.data.message || '权限检查失败')
|
|
||||||
}
|
}
|
||||||
}).catch(err => {
|
|
||||||
console.log(err)
|
|
||||||
ElMessage.error('权限检查失败')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 确认/放行 (修改为支持索引)
|
// 确认/放行 (修改为支持索引)
|
||||||
const confirmOrRelease = (index) => {
|
const confirmOrRelease = (index) => {
|
||||||
|
|
@ -372,10 +340,6 @@ const confirmOrRelease = (index) => {
|
||||||
goodsId: entity.goodsId,
|
goodsId: entity.goodsId,
|
||||||
vehicleId: entity.vehicleId,
|
vehicleId: entity.vehicleId,
|
||||||
confirmNum: entity.confirmNum,
|
confirmNum: entity.confirmNum,
|
||||||
specialStock: entity.specialStock,
|
|
||||||
specialStockNo: entity.specialStockNo,
|
|
||||||
specialStockItemNo: entity.specialStockItemNo,
|
|
||||||
batchNo: entity.batchNo,
|
|
||||||
standId: getChildStandIdByIndex(index),
|
standId: getChildStandIdByIndex(index),
|
||||||
userName: USER_NAME
|
userName: USER_NAME
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,12 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="22" :offset="1">
|
<el-col :span="22" :offset="1">
|
||||||
<el-form-item label="本次实际拣选:" required>
|
<el-form-item label="本次实际拣选:" required>
|
||||||
<el-input class="form-input large-center-input" v-model="bindingData.planPickQty" clearable readonly/>
|
<el-input class="form-input large-center-input" v-model="bindingData.planPickQty" clearable/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="22" :offset="1">
|
<el-col :span="22" :offset="1">
|
||||||
<el-form-item label="实际剩余数量:" required>
|
<el-form-item label="实际剩余数量:" required>
|
||||||
<el-input class="form-input large-center-input" v-model="bindingData.realRemainQty" clearable readonly/>
|
<el-input class="form-input large-center-input" v-model="bindingData.realRemainQty" clearable/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="22" :offset="1">
|
<el-col :span="22" :offset="1">
|
||||||
|
|
@ -204,10 +204,6 @@ export default {
|
||||||
realRemainQty: this.bindingData.realRemainQty,
|
realRemainQty: this.bindingData.realRemainQty,
|
||||||
isOut: this.bindingData.isOut,
|
isOut: this.bindingData.isOut,
|
||||||
putArea: this.bindingData.putArea,
|
putArea: this.bindingData.putArea,
|
||||||
specialStock: this.bindingData.specialStock,
|
|
||||||
specialStockNo: this.bindingData.specialStockNo,
|
|
||||||
specialStockItemNo: this.bindingData.specialStockItemNo,
|
|
||||||
batchNo: this.bindingData.batchNo
|
|
||||||
},
|
},
|
||||||
standId: this.bindingData.standId,
|
standId: this.bindingData.standId,
|
||||||
userName: USER_NAME
|
userName: USER_NAME
|
||||||
|
|
@ -317,10 +313,6 @@ export default {
|
||||||
this.bindingData.putArea = result.stockConfirm.putArea || ''
|
this.bindingData.putArea = result.stockConfirm.putArea || ''
|
||||||
this.bindingData.warningQty = result.stockConfirm.warningQty
|
this.bindingData.warningQty = result.stockConfirm.warningQty
|
||||||
this.bindingData.remark = result.stockConfirm.remark
|
this.bindingData.remark = result.stockConfirm.remark
|
||||||
this.bindingData.specialStock = result.stockConfirm.specialStock
|
|
||||||
this.bindingData.specialStockNo = result.stockConfirm.specialStockNo
|
|
||||||
this.bindingData.specialStockItemNo = result.stockConfirm.specialStockItemNo
|
|
||||||
this.bindingData.batchNo = result.stockConfirm.batchNo
|
|
||||||
}
|
}
|
||||||
console.log(this.bindingData)
|
console.log(this.bindingData)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,6 @@ import {pickingTaskStatusOptions} from '@/constant/options.js'
|
||||||
import { addAllOptionOfOptions } from '@/utils/generator.js'
|
import { addAllOptionOfOptions } from '@/utils/generator.js'
|
||||||
import { loading } from '@/utils/loading'
|
import { loading } from '@/utils/loading'
|
||||||
import {errorBox} from "@/utils/myMessageBox";
|
import {errorBox} from "@/utils/myMessageBox";
|
||||||
import { getUserPermission } from '@/api/user.js'
|
|
||||||
/**
|
/**
|
||||||
* 常量定义
|
* 常量定义
|
||||||
*/
|
*/
|
||||||
|
|
@ -178,24 +177,6 @@ const resizeHeight = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const editCurrentRowFormEntity = (row) => {
|
const editCurrentRowFormEntity = (row) => {
|
||||||
// 检查用户是否有编辑拣选任务权限(F权限)
|
|
||||||
const permissionParams = {
|
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount,
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: USER_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
getUserPermission(permissionParams).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"F"(编辑拣选任务权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (!permissionStr.includes('D')) {
|
|
||||||
// 无编辑权限提示
|
|
||||||
ElMessage.error('您没有编辑拣选任务的权限')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有权限,继续执行原有逻辑
|
|
||||||
pickId = row.pickId
|
pickId = row.pickId
|
||||||
Object.assign(pickTaskFormEntity, {
|
Object.assign(pickTaskFormEntity, {
|
||||||
pickId: row.pickId,
|
pickId: row.pickId,
|
||||||
|
|
@ -205,15 +186,7 @@ const editCurrentRowFormEntity = (row) => {
|
||||||
})
|
})
|
||||||
console.log('编辑行数据:', pickTaskFormEntity) // 调试信息
|
console.log('编辑行数据:', pickTaskFormEntity) // 调试信息
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
} else {
|
|
||||||
ElMessage.error(res.data.message || '权限检查失败')
|
|
||||||
}
|
}
|
||||||
}).catch(err => {
|
|
||||||
console.log(err)
|
|
||||||
ElMessage.error('权限检查失败')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const submitInfo = (formData) => {
|
const submitInfo = (formData) => {
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,6 @@ import { addAllOptionOfOptions } from '@/utils/generator.js'
|
||||||
import { loading } from '@/utils/loading'
|
import { loading } from '@/utils/loading'
|
||||||
import {requireStockOutEmpty} from "@/api/task";
|
import {requireStockOutEmpty} from "@/api/task";
|
||||||
import {errorBox} from "@/utils/myMessageBox";
|
import {errorBox} from "@/utils/myMessageBox";
|
||||||
import { getUserPermission } from '@/api/user.js'
|
|
||||||
// 修改导入语句,添加正确的API函数
|
// 修改导入语句,添加正确的API函数
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -329,34 +328,8 @@ const submitUpdateRow = (rowFormEntity) => {
|
||||||
/**
|
/**
|
||||||
* 出空箱功能相关方法
|
* 出空箱功能相关方法
|
||||||
*/
|
*/
|
||||||
// 修改出空箱对话框打开函数
|
|
||||||
const openEmptyBoxDialog = () => {
|
const openEmptyBoxDialog = () => {
|
||||||
// 检查用户是否有出空箱权限(E权限)
|
|
||||||
const permissionParams = {
|
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount,
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: USER_NAME
|
|
||||||
}
|
|
||||||
|
|
||||||
getUserPermission(permissionParams).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"E"(出空箱权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (!permissionStr.includes('C')) {
|
|
||||||
// 无出空箱权限提示
|
|
||||||
ElMessage.error('您没有出空箱操作的权限')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有权限,继续执行原有逻辑
|
|
||||||
emptyBoxDialogVisible.value = true
|
emptyBoxDialogVisible.value = true
|
||||||
} else {
|
|
||||||
ElMessage.error(res.data.message || '权限检查失败')
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
console.log(err)
|
|
||||||
ElMessage.error('权限检查失败')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const cancelEmptyBox = () => {
|
const cancelEmptyBox = () => {
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import router from '@/router'
|
import router from '@/router'
|
||||||
import { getUserPermission } from '@/api/user.js'
|
|
||||||
import { ElMessage } from 'element-plus'
|
|
||||||
|
|
||||||
const user = store.getters.getUserName// 用户名
|
const user = store.getters.getUserName// 用户名
|
||||||
const token = store.getters.getToken// 密码
|
const token = store.getters.getToken// 密码
|
||||||
|
|
@ -41,31 +39,7 @@ const loginToWms = () => {
|
||||||
}
|
}
|
||||||
// 登录到PDA系统
|
// 登录到PDA系统
|
||||||
const PdaToWms = () => {
|
const PdaToWms = () => {
|
||||||
// 先检查用户是否有PDA权限
|
|
||||||
const params = {
|
|
||||||
loginAccountUpdate: store.getters.getUser.loginAccount, // 使用登录账户
|
|
||||||
roleIdOp: store.getters.getUser.roleId,
|
|
||||||
userName: user
|
|
||||||
}
|
|
||||||
|
|
||||||
getUserPermission(params).then(res => {
|
|
||||||
if (res.data.code === 0) {
|
|
||||||
// 解析权限字符串,检查是否包含"E"(PDA权限)
|
|
||||||
const permissionStr = res.data.message || ''
|
|
||||||
if (permissionStr.includes('E')) {
|
|
||||||
// 有PDA权限,允许进入PDA系统
|
|
||||||
router.replace({ path: '/pda' })
|
router.replace({ path: '/pda' })
|
||||||
} else {
|
|
||||||
// 无PDA权限提示
|
|
||||||
ElMessage.error('您没有访问PDA系统的权限')
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ElMessage.error(res.data.message || '权限检查失败')
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
console.log(err)
|
|
||||||
ElMessage.error('权限检查失败')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// 登录到工作图纸系统
|
// 登录到工作图纸系统
|
||||||
const loginToImage = () => {
|
const loginToImage = () => {
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.wms_main.constant.enums.wms.WmsPickTaskStatusEnum;
|
import com.wms_main.constant.enums.wms.WmsPickTaskStatusEnum;
|
||||||
import com.wms_main.dao.ITAppPickTaskService;
|
import com.wms_main.dao.ITAppPickTaskService;
|
||||||
import com.wms_main.dao.ITAppStockCompareService;
|
import com.wms_main.dao.ITAppStockCompareService;
|
||||||
import com.wms_main.dao.ITAppStockService;
|
|
||||||
import com.wms_main.dao.ITempEwmInboundDataService;
|
import com.wms_main.dao.ITempEwmInboundDataService;
|
||||||
import com.wms_main.model.bo.wcs.WcsStackerTask;
|
import com.wms_main.model.bo.wcs.WcsStackerTask;
|
||||||
import com.wms_main.model.bo.wms.StockConfirmEntity;
|
|
||||||
import com.wms_main.model.dto.request.ewm.*;
|
import com.wms_main.model.dto.request.ewm.*;
|
||||||
import com.wms_main.model.dto.request.wcs.WcsBoxArriveRequest;
|
import com.wms_main.model.dto.request.wcs.WcsBoxArriveRequest;
|
||||||
import com.wms_main.model.dto.request.wcs.WcsTaskResultRequest;
|
import com.wms_main.model.dto.request.wcs.WcsTaskResultRequest;
|
||||||
|
|
@ -21,11 +19,9 @@ import com.wms_main.model.dto.response.wcs.WcsApiResponse;
|
||||||
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
|
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
|
||||||
import com.wms_main.model.dto.response.wms.WmsApiResponse;
|
import com.wms_main.model.dto.response.wms.WmsApiResponse;
|
||||||
import com.wms_main.model.po.TAppPickTask;
|
import com.wms_main.model.po.TAppPickTask;
|
||||||
import com.wms_main.model.po.TAppStock;
|
|
||||||
import com.wms_main.model.po.TAppStockCompare;
|
import com.wms_main.model.po.TAppStockCompare;
|
||||||
import com.wms_main.model.vo.wms.InventoryConfirmVo;
|
import com.wms_main.model.vo.wms.InventoryConfirmVo;
|
||||||
import com.wms_main.model.vo.wms.TaskConfirmVo;
|
import com.wms_main.model.vo.wms.TaskConfirmVo;
|
||||||
import com.wms_main.repository.utils.StringUtils;
|
|
||||||
import com.wms_main.service.api.IEwmApiService;
|
import com.wms_main.service.api.IEwmApiService;
|
||||||
import com.wms_main.service.controller.ITaskControllerService;
|
import com.wms_main.service.controller.ITaskControllerService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
@ -45,7 +41,7 @@ public class TaskController {
|
||||||
private final ITaskControllerService taskControllerService;
|
private final ITaskControllerService taskControllerService;
|
||||||
private final IEwmApiService ewmApiService;
|
private final IEwmApiService ewmApiService;
|
||||||
private final ITAppPickTaskService appPickTaskService;// 拣选任务服务
|
private final ITAppPickTaskService appPickTaskService;// 拣选任务服务
|
||||||
private final ITAppStockService appStockService;// 库存服务
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求入库
|
* 请求入库
|
||||||
|
|
@ -62,7 +58,7 @@ public class TaskController {
|
||||||
* @param stockOutRequest 请求信息
|
* @param stockOutRequest 请求信息
|
||||||
* @return 处理结果
|
* @return 处理结果
|
||||||
*/
|
*/
|
||||||
@PostMapping("/requireStockOut")
|
//@PostMapping("/requireStockOut")
|
||||||
public BaseWmsApiResponse requireStockOut(@RequestBody StockOutRequest stockOutRequest) {
|
public BaseWmsApiResponse requireStockOut(@RequestBody StockOutRequest stockOutRequest) {
|
||||||
return taskControllerService.requireStockOut(stockOutRequest);
|
return taskControllerService.requireStockOut(stockOutRequest);
|
||||||
}
|
}
|
||||||
|
|
@ -137,67 +133,11 @@ public class TaskController {
|
||||||
* test
|
* test
|
||||||
*/
|
*/
|
||||||
@PostMapping("/status")
|
@PostMapping("/status")
|
||||||
public EwmApiBackResponse test(@RequestBody StockConfirmEntity stockConfirm) {
|
public EwmApiBackResponse test(@RequestBody SendWarehouseOutCompletedRequest request) {
|
||||||
//return taskControllerService.ewmInformationBack(wcsVehicleInRequest);
|
//return taskControllerService.ewmInformationBack(wcsVehicleInRequest);
|
||||||
// return ewmApiService.getEwmStock(request);
|
// return ewmApiService.getEwmStock(request);
|
||||||
//return ewmApiService.sendWarehouseOutCompleted(request);
|
return ewmApiService.sendWarehouseOutCompleted(request);
|
||||||
//return ewmApiService.sendWarehouseInCompleted(new SendWarehouseInCompletedRequest());
|
//return ewmApiService.sendWarehouseInCompleted(new SendWarehouseInCompletedRequest());
|
||||||
// 查询对应的库存信息
|
|
||||||
List<TAppStock> stockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
|
|
||||||
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
|
|
||||||
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
|
|
||||||
// 特殊库存字段精确匹配 - 根据传入值决定匹配条件
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getSpecialStock())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getSpecialStock)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getSpecialStock, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getSpecialStock, stockConfirm.getSpecialStock());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getSpecialStockNo())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getSpecialStockNo)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getSpecialStockNo, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getSpecialStockNo, stockConfirm.getSpecialStockNo());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getSpecialStockItemNo())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getSpecialStockItemNo)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getSpecialStockItemNo, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getSpecialStockItemNo, stockConfirm.getSpecialStockItemNo());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getBatchNo())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getBatchNo)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getBatchNo, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getBatchNo, stockConfirm.getBatchNo());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.orderByDesc(TAppStock::getFirstInTime)
|
|
||||||
);
|
|
||||||
|
|
||||||
return EwmApiBackResponse.success(
|
|
||||||
"查询成功",
|
|
||||||
stockList
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -34,28 +34,4 @@ public class InventoryConfirmRequest extends BaseWmsRequest {
|
||||||
*/
|
*/
|
||||||
@JsonProperty("confirmNum")
|
@JsonProperty("confirmNum")
|
||||||
private Integer confirmNum;
|
private Integer confirmNum;
|
||||||
|
|
||||||
/**
|
|
||||||
* 特殊库存
|
|
||||||
*/
|
|
||||||
@JsonProperty("specialStock")
|
|
||||||
private String specialStock;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批次号
|
|
||||||
*/
|
|
||||||
@JsonProperty("batchNo")
|
|
||||||
private String batchNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 特殊库存号
|
|
||||||
*/
|
|
||||||
@JsonProperty("specialStockNo")
|
|
||||||
private String specialStockNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 特殊库存item号
|
|
||||||
*/
|
|
||||||
@JsonProperty("specialStockItemNo")
|
|
||||||
private String specialStockItemNo;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public interface IStockDataService {
|
||||||
* @param userName 用户名
|
* @param userName 用户名
|
||||||
* @param inventoryId 盘点任务号
|
* @param inventoryId 盘点任务号
|
||||||
*/
|
*/
|
||||||
boolean updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId);
|
void updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询库存预警值
|
* 查询库存预警值
|
||||||
|
|
|
||||||
|
|
@ -260,7 +260,7 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
|
||||||
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OUTING.getCode())
|
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OUTING.getCode())
|
||||||
);
|
);
|
||||||
// 更新当前载具到达当前点位的拣选任务为已到达
|
// 更新当前载具到达当前点位的拣选任务为已到达
|
||||||
//updateVehicleArriveStatus(targetPickTask);
|
updateVehicleArriveStatus(targetPickTask);
|
||||||
}
|
}
|
||||||
// 更新拣选任务信息,添加拣选任务记录信息
|
// 更新拣选任务信息,添加拣选任务记录信息
|
||||||
pickRecords.add(new TAppPickTaskBak(
|
pickRecords.add(new TAppPickTaskBak(
|
||||||
|
|
@ -549,20 +549,6 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
|
||||||
return resultVo;
|
return resultVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建包含特殊库存属性的复合键
|
|
||||||
* @param stock 库存对象
|
|
||||||
* @return 复合键字符串
|
|
||||||
*/
|
|
||||||
private String buildCompositeKey(TAppStock stock) {
|
|
||||||
return stock.getGoodsId() + "_" +
|
|
||||||
(stock.getSpecialStock() != null ? stock.getSpecialStock() : "") + "_" +
|
|
||||||
(stock.getBatchNo() != null ? stock.getBatchNo() : "") + "_" +
|
|
||||||
(stock.getSpecialStockNo() != null ? stock.getSpecialStockNo() : "") + "_" +
|
|
||||||
(stock.getSpecialStockItemNo() != null ? stock.getSpecialStockItemNo() : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取这个载具的盘点确认信息
|
* 获取这个载具的盘点确认信息
|
||||||
* @param vehicleId 载具号
|
* @param vehicleId 载具号
|
||||||
|
|
@ -584,45 +570,28 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
|
||||||
if (stockList == null || stockList.isEmpty()) {
|
if (stockList == null || stockList.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 将这些库存根据料号Map一下, 并汇总库存数量(相同特殊库存属性的才汇总)
|
// 将这些库存根据料号Map一下, 并汇总库存数量
|
||||||
Map<String, Integer> sumNumByGoodsMap = new HashMap<>();
|
Map<String, Integer> sumNumByGoodsMap = new HashMap<>();
|
||||||
Map<String, TAppStock> firstStockByGoodsMap = new HashMap<>();
|
|
||||||
|
|
||||||
for (TAppStock stock : stockList) {
|
for (TAppStock stock : stockList) {
|
||||||
// 构建包含特殊库存属性的复合键
|
if (sumNumByGoodsMap.containsKey(stock.getGoodsId())) {
|
||||||
String compositeKey = buildCompositeKey(stock);
|
sumNumByGoodsMap.replace(stock.getGoodsId(), sumNumByGoodsMap.get(stock.getGoodsId()) + stock.getRealNum());
|
||||||
|
|
||||||
// 为每个goodsId+特殊属性组合只保留一个代表性的库存记录用于获取特殊库存信息
|
|
||||||
if (!firstStockByGoodsMap.containsKey(compositeKey)) {
|
|
||||||
firstStockByGoodsMap.put(compositeKey, stock);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 只汇总相同特殊库存属性的库存数量
|
|
||||||
if (sumNumByGoodsMap.containsKey(compositeKey)) {
|
|
||||||
sumNumByGoodsMap.replace(compositeKey, sumNumByGoodsMap.get(compositeKey) + stock.getRealNum());
|
|
||||||
} else {
|
} else {
|
||||||
sumNumByGoodsMap.put(compositeKey, stock.getRealNum());
|
sumNumByGoodsMap.put(stock.getGoodsId(), stock.getRealNum());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
List<TAppPickTask> pickTasks = appPickTaskService.list(new LambdaQueryWrapper<TAppPickTask>()
|
List<TAppPickTask> pickTasks = appPickTaskService.list(new LambdaQueryWrapper<TAppPickTask>()
|
||||||
.eq(TAppPickTask::getVehicleId, vehicleId)
|
.eq(TAppPickTask::getVehicleId, vehicleId)
|
||||||
.eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode())
|
.eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode())
|
||||||
);
|
);
|
||||||
|
|
||||||
for (TAppInventory inventory : inventoryList) {
|
for (TAppInventory inventory : inventoryList) {
|
||||||
// 使用相同的复合键逻辑来匹配库存
|
if (sumNumByGoodsMap.containsKey(inventory.getGoodsId())) {
|
||||||
String inventoryCompositeKey = buildCompositeKeyForInventory(inventory);
|
|
||||||
|
|
||||||
if (sumNumByGoodsMap.containsKey(inventoryCompositeKey)) {
|
|
||||||
// 返回盘点确认信息
|
// 返回盘点确认信息
|
||||||
InventoryConfirmVo inventoryConfirmVo = new InventoryConfirmVo();
|
InventoryConfirmVo inventoryConfirmVo = new InventoryConfirmVo();
|
||||||
inventoryConfirmVo.setInventoryId(inventory.getInventoryId());
|
inventoryConfirmVo.setInventoryId(inventory.getInventoryId());
|
||||||
inventoryConfirmVo.setGoodsId(inventory.getGoodsId());
|
inventoryConfirmVo.setGoodsId(inventory.getGoodsId());
|
||||||
inventoryConfirmVo.setVehicleId(inventory.getVehicleId());
|
inventoryConfirmVo.setVehicleId(inventory.getVehicleId());
|
||||||
inventoryConfirmVo.setStockNum(sumNumByGoodsMap.get(inventoryCompositeKey));
|
inventoryConfirmVo.setStockNum(sumNumByGoodsMap.get(inventory.getGoodsId()));
|
||||||
inventoryConfirmVo.setConfirmNum(sumNumByGoodsMap.get(inventoryCompositeKey));
|
inventoryConfirmVo.setConfirmNum(sumNumByGoodsMap.get(inventory.getGoodsId()));
|
||||||
inventoryConfirmVo.setChildStandId(pickTasks.getFirst().getPickStand());
|
inventoryConfirmVo.setChildStandId(pickTasks.getFirst().getPickStand());
|
||||||
inventoryConfirmVo.setSpecialStock(inventory.getSpecialStock());
|
inventoryConfirmVo.setSpecialStock(inventory.getSpecialStock());
|
||||||
inventoryConfirmVo.setSpecialStockNo(inventory.getSpecialStockNo());
|
inventoryConfirmVo.setSpecialStockNo(inventory.getSpecialStockNo());
|
||||||
|
|
@ -632,21 +601,6 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
|
||||||
return inventoryConfirmVo;
|
return inventoryConfirmVo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建包含特殊库存属性的复合键(用于Inventory对象)
|
|
||||||
* @param inventory 盘点对象
|
|
||||||
* @return 复合键字符串
|
|
||||||
*/
|
|
||||||
private String buildCompositeKeyForInventory(TAppInventory inventory) {
|
|
||||||
return inventory.getGoodsId() + "_" +
|
|
||||||
(inventory.getSpecialStock() != null ? inventory.getSpecialStock() : "") + "_" +
|
|
||||||
(inventory.getBatchNo() != null ? inventory.getBatchNo() : "") + "_" +
|
|
||||||
(inventory.getSpecialStockNo() != null ? inventory.getSpecialStockNo() : "") + "_" +
|
|
||||||
(inventory.getSpecialStockItemNo() != null ? inventory.getSpecialStockItemNo() : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -591,20 +591,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
appTaskService.save(outTask);
|
appTaskService.save(outTask);
|
||||||
|
|
||||||
// 添加到达即删除的拣选任务
|
|
||||||
TAppPickTask pickTask = new TAppPickTask(
|
|
||||||
UUIDUtils.getNewUUID(),
|
|
||||||
"P21", // 与出库任务的目标站台一致
|
|
||||||
vehicleId,
|
|
||||||
WmsPickTaskStatusEnum.TEMP.getCode(),
|
|
||||||
LocalDateTime.now(),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
3 // 类型设置为3,表示到达即删除
|
|
||||||
);
|
|
||||||
appPickTaskService.save(pickTask);
|
|
||||||
}else {
|
}else {
|
||||||
log.info("调用EWM系统接口成功,请求参数: {}", request);
|
log.info("调用EWM系统接口成功,请求参数: {}", request);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|
@ -41,78 +42,17 @@ public class StockDataServiceImpl implements IStockDataService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId) {
|
public void updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId) {
|
||||||
if (stockConfirm == null || StringUtils.isEmpty(stockConfirm.getVehicleId()) || StringUtils.isEmpty(stockConfirm.getGoodsId())
|
if (stockConfirm == null || StringUtils.isEmpty(stockConfirm.getVehicleId()) || StringUtils.isEmpty(stockConfirm.getGoodsId())
|
||||||
|| stockConfirm.getRealRemainQty() == null) {
|
|| stockConfirm.getRealRemainQty() == null) {
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
// 查询对应的库存信息
|
// 查询对应的库存信息
|
||||||
List<TAppStock> stockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
|
List<TAppStock> stockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
|
||||||
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
|
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
|
||||||
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
|
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
|
||||||
// 特殊库存字段精确匹配 - 根据传入值决定匹配条件
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getSpecialStock())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getSpecialStock)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getSpecialStock, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getSpecialStock, stockConfirm.getSpecialStock());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getSpecialStockNo())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getSpecialStockNo)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getSpecialStockNo, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getSpecialStockNo, stockConfirm.getSpecialStockNo());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getSpecialStockItemNo())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getSpecialStockItemNo)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getSpecialStockItemNo, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getSpecialStockItemNo, stockConfirm.getSpecialStockItemNo());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.and(wrapper -> {
|
|
||||||
if (StringUtils.isEmpty(stockConfirm.getBatchNo())) {
|
|
||||||
// 如果传入null或空字符串,匹配数据库中为null或空字符串的记录
|
|
||||||
wrapper.isNull(TAppStock::getBatchNo)
|
|
||||||
.or()
|
|
||||||
.eq(TAppStock::getBatchNo, "");
|
|
||||||
} else {
|
|
||||||
// 如果传入有值,精确匹配该值
|
|
||||||
wrapper.eq(TAppStock::getBatchNo, stockConfirm.getBatchNo());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.orderByDesc(TAppStock::getFirstInTime)
|
.orderByDesc(TAppStock::getFirstInTime)
|
||||||
);
|
);
|
||||||
|
|
||||||
// 添加查询相同载具号和料号但remainNum小于realNum的数据
|
|
||||||
List<TAppStock> additionalStockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
|
|
||||||
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
|
|
||||||
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
|
|
||||||
.apply("remain_num < real_num")
|
|
||||||
);
|
|
||||||
// 合并两个列表
|
|
||||||
if (additionalStockList != null && !additionalStockList.isEmpty()) {
|
|
||||||
stockList.addAll(additionalStockList);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stockList == null || stockList.isEmpty()){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新列表
|
// 更新列表
|
||||||
List<TAppStock> removeStocks = new ArrayList<>();
|
List<TAppStock> removeStocks = new ArrayList<>();
|
||||||
List<TAppStock> updateStocks = new ArrayList<>();
|
List<TAppStock> updateStocks = new ArrayList<>();
|
||||||
|
|
@ -198,7 +138,6 @@ public class StockDataServiceImpl implements IStockDataService {
|
||||||
if (!stockUpdateList.isEmpty()) {
|
if (!stockUpdateList.isEmpty()) {
|
||||||
appStockUpdateService.saveBatch(stockUpdateList);
|
appStockUpdateService.saveBatch(stockUpdateList);
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1092,63 +1092,8 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 将EWM返回的数据保存到临时表中
|
|
||||||
// * @param response EWM接口返回的数据
|
|
||||||
// * @param vehicleNo 载具号
|
|
||||||
// */
|
|
||||||
// private void saveEwmDataToTempTable(EwmApiLocalResponse response, String vehicleNo) {
|
|
||||||
// if (response == null || response.getContent() == null || response.getContent().toString().isEmpty()) {
|
|
||||||
// log.warn("EWM返回数据为空或无任务明细,载具号: {}", vehicleNo);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// try {
|
|
||||||
// boolean deletedCount = tempEwmInboundDataService.remove(new LambdaQueryWrapper<TAppTempEwmInboundData>()
|
|
||||||
// .eq(TAppTempEwmInboundData::getContainerNo, vehicleNo)
|
|
||||||
// .eq(TAppTempEwmInboundData::getProcessStatus, 0));
|
|
||||||
//
|
|
||||||
// log.info("删除旧的EWM临时数据: {} 条,载具号: {}", deletedCount, vehicleNo);
|
|
||||||
//
|
|
||||||
// // 转换并保存数据
|
|
||||||
// List<TAppTempEwmInboundData> dataList = new ArrayList<>();
|
|
||||||
// EwmApiLocalResponse.Content content = response.getContent();
|
|
||||||
//
|
|
||||||
// for (TaskDetailInfo taskDetail : content.getTaskDetailInfo()) {
|
|
||||||
// TAppTempEwmInboundData data = new TAppTempEwmInboundData();
|
|
||||||
// data.setId(UUIDUtils.getNewUUID()); // 不要使用固定值"123"
|
|
||||||
// data.setBillNo(content.getBillNo());
|
|
||||||
// data.setBillType(content.getBillType());
|
|
||||||
// data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
|
|
||||||
// data.setTaskNo(taskDetail.getTaskNo());
|
|
||||||
// data.setOrderNo(taskDetail.getOrderNo());
|
|
||||||
// data.setOrderType(taskDetail.getOrderType());
|
|
||||||
// data.setMatNo(taskDetail.getMatNo());
|
|
||||||
// data.setMatDesc(taskDetail.getMatDesc());
|
|
||||||
// data.setSkuQty(taskDetail.getSkuQty());
|
|
||||||
// data.setSkuUnit(taskDetail.getSkuUnit());
|
|
||||||
// data.setRemark(taskDetail.getRemark());
|
|
||||||
// data.setSpecialStock(taskDetail.getSpecialStock());
|
|
||||||
// data.setSpecialStockNo(taskDetail.getSpecialStockNo());
|
|
||||||
// data.setSpecialStockItemNo(taskDetail.getSpecialStockItemNo());
|
|
||||||
// data.setBatchNo(taskDetail.getBatchNo());
|
|
||||||
// data.setProcessStatus(0); // 待处理状态
|
|
||||||
// data.setCreateTime(LocalDateTime.now());
|
|
||||||
// data.setUpdateTime(LocalDateTime.now());
|
|
||||||
// dataList.add(data);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!dataList.isEmpty()) {
|
|
||||||
// // 批量插入时指定合理的批次大小
|
|
||||||
// boolean saveResult = tempEwmInboundDataService.saveBatch(dataList);
|
|
||||||
// log.info("保存EWM数据结果: {},载具号: {},记录数: {}", saveResult, vehicleNo, dataList.size());
|
|
||||||
// }
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// log.error("保存EWM数据到临时表失败,载具号: {}", vehicleNo, e);
|
|
||||||
// throw e; // 重新抛出异常以便上层处理
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
/**
|
/**
|
||||||
* 将EWM返回的数据保存到临时表中,并根据goodsId、specialStock、specialStockNo、specialStockItemNo、batchNo进行合并
|
* 将EWM返回的数据保存到临时表中
|
||||||
* @param response EWM接口返回的数据
|
* @param response EWM接口返回的数据
|
||||||
* @param vehicleNo 载具号
|
* @param vehicleNo 载具号
|
||||||
*/
|
*/
|
||||||
|
|
@ -1165,28 +1110,11 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
log.info("删除旧的EWM临时数据: {} 条,载具号: {}", deletedCount, vehicleNo);
|
log.info("删除旧的EWM临时数据: {} 条,载具号: {}", deletedCount, vehicleNo);
|
||||||
|
|
||||||
// 转换并保存数据
|
// 转换并保存数据
|
||||||
Map<String, TAppTempEwmInboundData> dataMap = new HashMap<>();
|
List<TAppTempEwmInboundData> dataList = new ArrayList<>();
|
||||||
EwmApiLocalResponse.Content content = response.getContent();
|
EwmApiLocalResponse.Content content = response.getContent();
|
||||||
|
|
||||||
for (TaskDetailInfo taskDetail : content.getTaskDetailInfo()) {
|
for (TaskDetailInfo taskDetail : content.getTaskDetailInfo()) {
|
||||||
// 构建唯一键用于识别相同记录
|
|
||||||
String key = String.join("|",
|
|
||||||
taskDetail.getMatNo() != null ? taskDetail.getMatNo() : "",
|
|
||||||
taskDetail.getSpecialStock() != null ? taskDetail.getSpecialStock() : "",
|
|
||||||
taskDetail.getSpecialStockNo() != null ? taskDetail.getSpecialStockNo() : "",
|
|
||||||
taskDetail.getSpecialStockItemNo() != null ? taskDetail.getSpecialStockItemNo() : "",
|
|
||||||
taskDetail.getBatchNo() != null ? taskDetail.getBatchNo() : "");
|
|
||||||
|
|
||||||
if (dataMap.containsKey(key)) {
|
|
||||||
// 合并相同记录的数量
|
|
||||||
TAppTempEwmInboundData existingData = dataMap.get(key);
|
|
||||||
existingData.setSkuQty(existingData.getSkuQty().add(taskDetail.getSkuQty()));
|
|
||||||
existingData.setUpdateTime(LocalDateTime.now());
|
|
||||||
dataMap.put(key, existingData);
|
|
||||||
} else {
|
|
||||||
// 创建新记录
|
|
||||||
TAppTempEwmInboundData data = new TAppTempEwmInboundData();
|
TAppTempEwmInboundData data = new TAppTempEwmInboundData();
|
||||||
data.setId(UUIDUtils.getNewUUID());
|
data.setId(UUIDUtils.getNewUUID()); // 不要使用固定值"123"
|
||||||
data.setBillNo(content.getBillNo());
|
data.setBillNo(content.getBillNo());
|
||||||
data.setBillType(content.getBillType());
|
data.setBillType(content.getBillType());
|
||||||
data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
|
data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
|
||||||
|
|
@ -1205,12 +1133,8 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
data.setProcessStatus(0); // 待处理状态
|
data.setProcessStatus(0); // 待处理状态
|
||||||
data.setCreateTime(LocalDateTime.now());
|
data.setCreateTime(LocalDateTime.now());
|
||||||
data.setUpdateTime(LocalDateTime.now());
|
data.setUpdateTime(LocalDateTime.now());
|
||||||
dataMap.put(key, data);
|
dataList.add(data);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 将Map中的值转换为List
|
|
||||||
List<TAppTempEwmInboundData> dataList = new ArrayList<>(dataMap.values());
|
|
||||||
|
|
||||||
if (!dataList.isEmpty()) {
|
if (!dataList.isEmpty()) {
|
||||||
// 批量插入时指定合理的批次大小
|
// 批量插入时指定合理的批次大小
|
||||||
|
|
@ -1351,9 +1275,6 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
if (!response.isSuccess()) {
|
if (!response.isSuccess()) {
|
||||||
return WcsApiResponse.error(response.getMessage(), null);
|
return WcsApiResponse.error(response.getMessage(), null);
|
||||||
}
|
}
|
||||||
if (response.getContent().getTaskDetailInfo().size() > 1){
|
|
||||||
return WcsApiResponse.error("该容器绑定了多个料,请检查。", null);
|
|
||||||
}
|
|
||||||
// 判断是否为空箱
|
// 判断是否为空箱
|
||||||
if (response.getContent().isEmptyContainer()) {
|
if (response.getContent().isEmptyContainer()) {
|
||||||
if (!outsCheckList.isEmpty() || !stockList.isEmpty()){
|
if (!outsCheckList.isEmpty() || !stockList.isEmpty()){
|
||||||
|
|
@ -1827,10 +1748,7 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 更新库存信息
|
// 更新库存信息
|
||||||
if (!stockDataService.updateStockInfo(confirmTaskRequest.getStockConfirm(), confirmTaskRequest.getStandId(), confirmTaskRequest.getUserName(), "出库拣选", null)){
|
stockDataService.updateStockInfo(confirmTaskRequest.getStockConfirm(), confirmTaskRequest.getStandId(), confirmTaskRequest.getUserName(), "出库拣选", null);
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
||||||
return BaseWmsApiResponse.error("库存发生变化,更新失败,请联系管理员确认!");
|
|
||||||
}
|
|
||||||
if (conveyTaskService.releaseStandVehicle(thisPickTask)) {
|
if (conveyTaskService.releaseStandVehicle(thisPickTask)) {
|
||||||
if (requestForCompleted.getPickingDetail() != null && !requestForCompleted.getPickingDetail().isEmpty()){
|
if (requestForCompleted.getPickingDetail() != null && !requestForCompleted.getPickingDetail().isEmpty()){
|
||||||
//1. 回告EWM系统出库完成
|
//1. 回告EWM系统出库完成
|
||||||
|
|
@ -1890,12 +1808,13 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
log.info("容器置空调用EWM系统接口成功,请求参数: {}", request);
|
log.info("容器置空调用EWM系统接口成功,请求参数: {}", request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if (appPickTaskService.exists(new LambdaQueryWrapper<TAppPickTask>()
|
|
||||||
// .eq(TAppPickTask::getVehicleId, thisPickTask.getVehicleId())
|
if (appPickTaskService.exists(new LambdaQueryWrapper<TAppPickTask>()
|
||||||
// .eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode())
|
.eq(TAppPickTask::getVehicleId, thisPickTask.getVehicleId())
|
||||||
// )){
|
.eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode())
|
||||||
// return BaseWmsApiResponse.success("继续拣选");
|
)){
|
||||||
// }
|
return BaseWmsApiResponse.success("继续拣选");
|
||||||
|
}
|
||||||
return BaseWmsApiResponse.success("确认成功。");
|
return BaseWmsApiResponse.success("确认成功。");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2215,16 +2134,8 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
stockConfirm.setVehicleId(targetInventory.getVehicleId());
|
stockConfirm.setVehicleId(targetInventory.getVehicleId());
|
||||||
stockConfirm.setGoodsId(targetInventory.getGoodsId());
|
stockConfirm.setGoodsId(targetInventory.getGoodsId());
|
||||||
stockConfirm.setRealRemainQty(inventoryConfirmRequest.getConfirmNum());
|
stockConfirm.setRealRemainQty(inventoryConfirmRequest.getConfirmNum());
|
||||||
stockConfirm.setSpecialStock(inventoryConfirmRequest.getSpecialStock());
|
|
||||||
stockConfirm.setSpecialStockNo(inventoryConfirmRequest.getSpecialStockNo());
|
|
||||||
stockConfirm.setSpecialStockItemNo(inventoryConfirmRequest.getSpecialStockItemNo());
|
|
||||||
stockConfirm.setBatchNo(inventoryConfirmRequest.getBatchNo());
|
|
||||||
// 更新库存信息
|
// 更新库存信息
|
||||||
boolean updateStockInfo = stockDataService.updateStockInfo(stockConfirm, inventoryConfirmRequest.getStandId(), inventoryConfirmRequest.getUserName(), "盘点确认", targetInventory.getInventoryId());
|
stockDataService.updateStockInfo(stockConfirm, inventoryConfirmRequest.getStandId(), inventoryConfirmRequest.getUserName(), "盘点确认", targetInventory.getInventoryId());
|
||||||
if (!updateStockInfo) {
|
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
||||||
return BaseWmsApiResponse.error("库存发生变化,更新失败,请联系管理员确认!");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return BaseWmsApiResponse.error("请求的盘点任务号未查到对应的盘点任务。");
|
return BaseWmsApiResponse.error("请求的盘点任务号未查到对应的盘点任务。");
|
||||||
}
|
}
|
||||||
|
|
@ -2419,21 +2330,13 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
requestForCompleted.setWaveNo(thisOut.getFirst().getWaveNo());
|
requestForCompleted.setWaveNo(thisOut.getFirst().getWaveNo());
|
||||||
requestForCompleted.setPickingType(thisOut.getFirst().getPickingType());
|
requestForCompleted.setPickingType(thisOut.getFirst().getPickingType());
|
||||||
|
|
||||||
|
|
||||||
int isEmpty = confirmTaskRequest.getTaskConfirm().getIsEmpty();
|
|
||||||
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper;
|
|
||||||
if (isEmpty == 0){
|
|
||||||
pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
|
||||||
.eq(TAppPickPlan::getPlanId, thisOut.getFirst().getPickPlanId());
|
|
||||||
}else{
|
|
||||||
// 清除拣选计划
|
// 清除拣选计划
|
||||||
pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
||||||
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId());
|
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId());
|
||||||
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) {
|
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) {
|
||||||
// 箱号
|
// 箱号
|
||||||
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId());
|
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
appPickPlanService.remove(pickPlanQueryWrapper);
|
appPickPlanService.remove(pickPlanQueryWrapper);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user