Compare commits
19 Commits
test.X
...
ba6b2e201f
| Author | SHA1 | Date | |
|---|---|---|---|
| ba6b2e201f | |||
| 7133ac4225 | |||
| 3afc296e40 | |||
|
|
a6efe02046 | ||
| 1862908eb1 | |||
| 9e5e7cf0af | |||
| 927cbf9586 | |||
|
|
da2caa1c46 | ||
|
|
6e909212bf | ||
| e937ff50f6 | |||
| 891ec659de | |||
|
|
730148e966 | ||
| 8927760eb1 | |||
| 328c46b8b8 | |||
| c21f5dc813 | |||
| c5089faaea | |||
| f5017443d5 | |||
|
|
f5904fa7f3 | ||
|
|
3f4ee0fce3 |
@@ -27,3 +27,16 @@ export function delOss(ossId) {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*/
|
||||
export function uploadFile(file) {
|
||||
const form = new FormData()
|
||||
form.append('file', file)
|
||||
return request({
|
||||
url: '/system/oss/upload',
|
||||
method: 'post',
|
||||
data: form,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import request from '@/utils/request'
|
||||
import { tansParams } from "@/utils/klp";
|
||||
|
||||
// 查询钢卷物料表列表
|
||||
export function listMaterialCoil(query) {
|
||||
@@ -345,4 +346,18 @@ export function categoryWidthStatistics() {
|
||||
url: '/wms/materialCoil/statistics/categoryWidthStatistics',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出钢卷的全部字段
|
||||
*/
|
||||
export function exportCoilWithAll(data) {
|
||||
return request({
|
||||
url: '/wms/materialCoil/exportAll',
|
||||
method: 'post',
|
||||
data: data,
|
||||
transformRequest: [(params) => { return tansParams(params) }],
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
@@ -42,3 +42,16 @@ export function delCoilStatisticsSummary(summaryId) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 检查今天是否已经创建过该类型的透视表
|
||||
// 如果已经创建过,返回该透视表的id
|
||||
// 如果没有创建过,返回null
|
||||
export function checkCoilStatisticsSummaryExist(statType) {
|
||||
return request({
|
||||
url: '/wms/coilStatisticsSummary/checkToday',
|
||||
method: 'get',
|
||||
params: {
|
||||
statType
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
Jiaxiang County,Jining City,Shandong Province</span>
|
||||
<br />
|
||||
<span>
|
||||
TEL:0537-6625068 0537-6625067
|
||||
TEL:1905-3728822 1905-3728835
|
||||
</span>
|
||||
</div>
|
||||
<div class="contact-timestamp">
|
||||
|
||||
291
klp-ui/src/views/wms/coil/panels/LabelRender/TuoZhiTag.vue
Normal file
291
klp-ui/src/views/wms/coil/panels/LabelRender/TuoZhiTag.vue
Normal file
@@ -0,0 +1,291 @@
|
||||
<template>
|
||||
<div class="label-container" :style="{ '--print-scale': printScale }">
|
||||
<div class="material-label-grid">
|
||||
<!-- 公司名称行 -->
|
||||
<div class="grid-cell company-cell">嘉祥科伦普重工有限公司</div>
|
||||
|
||||
<!-- 第一行:冷卷号、热卷号 -->
|
||||
<div class="grid-cell label-cell">冷卷号</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.currentCoilNo || '' }}</div>
|
||||
</div>
|
||||
<div class="grid-cell label-cell">热卷号</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.enterCoilNo || '' }}</div>
|
||||
</div>
|
||||
|
||||
<!-- 第二行:规格、钢种 -->
|
||||
<div class="grid-cell label-cell">规格</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.specification || '' }}</div>
|
||||
</div>
|
||||
<div class="grid-cell label-cell">钢种</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.material || '' }}</div>
|
||||
</div>
|
||||
|
||||
<!-- 第三行:净重、下工序 -->
|
||||
<div class="grid-cell label-cell">净重</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.netWeight || '' }}</div>
|
||||
</div>
|
||||
<div class="grid-cell label-cell">下工序</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.nextProcess || '冷轧' }}</div>
|
||||
</div>
|
||||
|
||||
<!-- 第四行:包装要求、切边要求 -->
|
||||
<div class="grid-cell label-cell">包装要求</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.packagingRequirement || '' }}</div>
|
||||
</div>
|
||||
<div class="grid-cell label-cell">切边要求</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.trimmingRequirement || '' }}</div>
|
||||
</div>
|
||||
|
||||
<!-- 第五行:班组、代码(二维码) -->
|
||||
<div class="grid-cell label-cell">班组</div>
|
||||
<div class="grid-cell value-cell">
|
||||
<div class="nob" contenteditable>{{ content.team || '' }}</div>
|
||||
</div>
|
||||
<div class="grid-cell label-cell">代码</div>
|
||||
<div class="grid-cell qrcode-cell">
|
||||
<!-- 二维码容器 -->
|
||||
<QRCode :content="content.qrcodeRecordId" :size="80"/>
|
||||
</div>
|
||||
|
||||
<!-- 第六行:生产日期 -->
|
||||
<div class="grid-cell label-cell">生产日期</div>
|
||||
<div class="grid-cell value-cell date-cell">
|
||||
<div class="nob" contenteditable>{{ content.createTime || '' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import QRCode from '@/components/QRCode/index.vue';
|
||||
|
||||
export default {
|
||||
name: 'ZincRawTag',
|
||||
components: {
|
||||
QRCode
|
||||
},
|
||||
props: {
|
||||
content: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
currentCoilNo: '',
|
||||
entryCoilNo: '',
|
||||
specification: '',
|
||||
material: '',
|
||||
netWeight: '',
|
||||
nextProcess: '',
|
||||
packagingRequirements: '',
|
||||
trimmingRequirements: '',
|
||||
team: '',
|
||||
createTime: '',
|
||||
qrcodeRecordId: '',
|
||||
})
|
||||
},
|
||||
paperWidthMm: {
|
||||
type: Number,
|
||||
default: 100
|
||||
},
|
||||
paperHeightMm: {
|
||||
type: Number,
|
||||
default: 80
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
printScale: 1,
|
||||
printMediaQuery: null
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.printMediaQuery = window.matchMedia('print');
|
||||
this.printMediaQuery.addListener(this.handlePrintMediaChange);
|
||||
window.addEventListener('beforeprint', this.handleBeforePrint);
|
||||
window.addEventListener('afterprint', this.handleAfterPrint);
|
||||
this.$nextTick(() => {
|
||||
this.calculatePrintScale();
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (this.printMediaQuery) {
|
||||
this.printMediaQuery.removeListener(this.handlePrintMediaChange);
|
||||
}
|
||||
window.removeEventListener('beforeprint', this.handleBeforePrint);
|
||||
window.removeEventListener('afterprint', this.handleAfterPrint);
|
||||
},
|
||||
methods: {
|
||||
handlePrintMediaChange(mq) {
|
||||
mq.matches ? this.calculatePrintScale() : this.resetPrintScale();
|
||||
},
|
||||
handleBeforePrint() {
|
||||
setTimeout(() => this.calculatePrintScale(), 100);
|
||||
},
|
||||
handleAfterPrint() {
|
||||
this.resetPrintScale();
|
||||
},
|
||||
calculatePrintScale() {
|
||||
this.$nextTick(() => {
|
||||
const container = this.$el;
|
||||
if (!container) return;
|
||||
|
||||
const dpi = 96;
|
||||
const mmToPx = dpi / 25.4;
|
||||
const paperWidthPx = this.paperWidthMm * mmToPx;
|
||||
const paperHeightPx = this.paperHeightMm * mmToPx;
|
||||
const marginPx = 2 * mmToPx;
|
||||
|
||||
const rect = container.getBoundingClientRect();
|
||||
const contentWidth = rect.width || container.scrollWidth;
|
||||
const contentHeight = rect.height || container.scrollHeight;
|
||||
|
||||
const availableWidth = paperWidthPx - marginPx * 2;
|
||||
const availableHeight = paperHeightPx - marginPx * 2;
|
||||
|
||||
const scaleX = contentWidth > 0 ? availableWidth / contentWidth : 1;
|
||||
const scaleY = contentHeight > 0 ? availableHeight / contentHeight : 1;
|
||||
|
||||
this.printScale = Math.min(scaleX, scaleY, 1);
|
||||
container.style.setProperty('--print-scale', this.printScale);
|
||||
container.style.setProperty('--paper-width', `${this.paperWidthMm}mm`);
|
||||
container.style.setProperty('--paper-height', `${this.paperHeightMm}mm`);
|
||||
});
|
||||
},
|
||||
resetPrintScale() {
|
||||
this.printScale = 1;
|
||||
if (this.$el) {
|
||||
this.$el.style.setProperty('--print-scale', 1);
|
||||
this.$el.style.removeProperty('--paper-width');
|
||||
this.$el.style.removeProperty('--paper-height');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.label-container {
|
||||
width: 45em;
|
||||
height: 25em;
|
||||
padding: 16px;
|
||||
font-family: "SimSun", serif;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 核心Grid布局 */
|
||||
.material-label-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr); /* 4列等宽 */
|
||||
grid-auto-rows: 1fr; /* 行高自适应 */
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 1px solid #333;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.grid-cell {
|
||||
border: 1px solid #333;
|
||||
padding: 4px;
|
||||
font-size: 20px;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
overflow-wrap: break-word;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* 公司名称单元格 */
|
||||
.company-cell {
|
||||
grid-column: span 4; /* 跨4列 */
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
/* background-color: #f5f5f5; */
|
||||
}
|
||||
|
||||
/* 标签单元格(左) */
|
||||
.label-cell {
|
||||
/* background-color: #f5f5f5; */
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 值单元格 */
|
||||
.value-cell {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.date-cell {
|
||||
grid-column: span 2;
|
||||
}
|
||||
|
||||
/* 二维码单元格(跨2列+2行) */
|
||||
.qrcode-cell {
|
||||
grid-row: span 2; /* 跨2行 */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.qrcode-container {
|
||||
width: 80%;
|
||||
height: 80%;
|
||||
border: 1px dashed #999; /* 占位虚线 */
|
||||
}
|
||||
|
||||
/* 内容可编辑区域 */
|
||||
.nob {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
text-align: center;
|
||||
font-size: inherit;
|
||||
word-break: break-all;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* 打印样式 */
|
||||
@media print {
|
||||
@page {
|
||||
size: 100mm 80mm;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
* {
|
||||
-webkit-print-color-adjust: exact !important;
|
||||
print-color-adjust: exact !important;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
body>*:not(.label-container) {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.label-container {
|
||||
page-break-inside: avoid !important;
|
||||
break-inside: avoid !important;
|
||||
transform: scale(var(--print-scale, 1)) !important;
|
||||
transform-origin: top left !important;
|
||||
max-width: var(--paper-width, 100mm) !important;
|
||||
max-height: var(--paper-height, 80mm) !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -36,7 +36,13 @@
|
||||
v-if="tagType === 'ge'"
|
||||
:content="content"
|
||||
:paperWidthMm="180"
|
||||
:paperHeightMm="80"
|
||||
:paperHeightMm="100"
|
||||
/>
|
||||
<TuoZhiTag
|
||||
v-if="tagType === '6'"
|
||||
:content="content"
|
||||
:paperWidthMm="180"
|
||||
:paperHeightMm="100"
|
||||
/>
|
||||
<!-- <SampleTagPreview v-if="labelType === '4'" :content="content" />
|
||||
<ForgeTagPreview v-if="labelType === '5'" :content="content" />
|
||||
@@ -61,6 +67,8 @@ import GalvanizedTag from './GalvanizedTag.vue';
|
||||
import WhereTag from './WhereTag.vue';
|
||||
import ZincRawTag from './ZincRawTag.vue';
|
||||
import DuGeTag from './DuGeTag.vue';
|
||||
import TuoZhiTag from './TuoZhiTag.vue';
|
||||
|
||||
|
||||
// import SampleTagPreview from './SampleTagPreview.vue';
|
||||
// import ForgeTagPreview from './ForgeTagPreview.vue';
|
||||
@@ -75,6 +83,7 @@ export default {
|
||||
WhereTag,
|
||||
ZincRawTag,
|
||||
DuGeTag,
|
||||
TuoZhiTag,
|
||||
// SampleTagPreview,
|
||||
// ForgeTagPreview,
|
||||
// SaltSprayTagPreview,
|
||||
@@ -107,6 +116,10 @@ export default {
|
||||
width: 180,
|
||||
height: 100,
|
||||
},
|
||||
'6': {
|
||||
width: 180,
|
||||
height: 100,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -141,8 +154,12 @@ export default {
|
||||
handler(newVal) {
|
||||
const { itemName, itemType, warehouseId } = newVal;
|
||||
// 在镀锌颜料库的卷使用镀锌原料标签
|
||||
if (itemType == 'raw_material' && warehouseId == '1988150263284953089') {
|
||||
if (itemType == 'raw_material' && (warehouseId == '1988150263284953089' || warehouseId == '1988150487185289217')) {
|
||||
this.labelType = '5';
|
||||
}
|
||||
// 脱脂原料库
|
||||
else if (itemType == 'raw_material' && (warehouseId == '1988150545175736322')) {
|
||||
this.labelType = '6';
|
||||
} else if (itemType == 'raw_material') {
|
||||
this.labelType = '2';
|
||||
} else if (itemType == 'product' && itemName == '冷硬卷') {
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
<template>
|
||||
<div class="hot-zha-raw">
|
||||
<!-- 使用 el-table 展示数据 -->
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="processedData"
|
||||
border
|
||||
style="width: 100%;"
|
||||
:header-cell-style="{background: '#f2f2f2', fontWeight: 600}"
|
||||
>
|
||||
<!-- 类别列 -->
|
||||
<el-table-column
|
||||
label="类别"
|
||||
prop="category"
|
||||
min-width="180"
|
||||
align="left"
|
||||
/>
|
||||
|
||||
<!-- 合并的净边表头 -->
|
||||
<el-table-column
|
||||
label="净边"
|
||||
align="center"
|
||||
>
|
||||
<el-table-column
|
||||
label="1000"
|
||||
prop="width1000"
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="1200"
|
||||
prop="width1200"
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="1220"
|
||||
prop="width1220"
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="1250"
|
||||
prop="width1250"
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 其他宽度及毛边列 -->
|
||||
<el-table-column
|
||||
label="其他宽度及毛边"
|
||||
prop="otherWidth"
|
||||
min-width="120"
|
||||
align="center"
|
||||
/>
|
||||
|
||||
<!-- 合计列 -->
|
||||
<el-table-column
|
||||
label="合计"
|
||||
prop="total"
|
||||
min-width="100"
|
||||
align="center"
|
||||
:cell-style="{fontWeight: 600, color: '#1890ff'}"
|
||||
/>
|
||||
</el-table>
|
||||
|
||||
<!-- 无数据提示(el-table 自带空数据提示,这里可保留统一样式) -->
|
||||
<div v-if="!data || data.length === 0" class="empty-data">
|
||||
暂无数据
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'HotZhaRaw',
|
||||
props: {
|
||||
data: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false // 可根据实际需求控制加载状态
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
processedData() {
|
||||
if (!this.data || !Array.isArray(this.data)) {
|
||||
return [];
|
||||
}
|
||||
console.log(this.data);
|
||||
// 深拷贝避免修改原数据
|
||||
return this.data;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// el-table 专用的数字格式化方法
|
||||
formatTableNumber(row, column) {
|
||||
const num = row[column.prop];
|
||||
if (num === null || num === undefined || num === '') return '0.000';
|
||||
return Number(num).toFixed(3);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.hot-zha-raw {
|
||||
width: 100%;
|
||||
min-height: 200px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.empty-data {
|
||||
text-align: center;
|
||||
padding: 40px;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 覆盖 el-table 样式,保持视觉统一 */
|
||||
:deep(.el-table) {
|
||||
--el-table-header-text-color: #303133;
|
||||
--el-table-row-hover-bg-color: #f8f9fa;
|
||||
}
|
||||
|
||||
:deep(.el-table th) {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
|
||||
:deep(.el-table td) {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
</style>
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="trim-statistics-table">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:data="filteredTableData"
|
||||
border
|
||||
stripe
|
||||
:span-method="objectSpanMethod"
|
||||
@@ -15,7 +15,7 @@
|
||||
align="center"
|
||||
/>
|
||||
|
||||
<!-- 冷硬卷板净边料现货库存 表头组 -->
|
||||
<!-- 冷硬卷板净边料现货库存 独立表头组 -->
|
||||
<el-table-column
|
||||
label="冷硬卷板净边料现货库存"
|
||||
align="center"
|
||||
@@ -27,18 +27,19 @@
|
||||
<el-table-column label="数量(件)" prop="trimmedTotalCount" width="80" align="center" />
|
||||
<el-table-column label="重量(吨)" prop="trimmedTotalWeight" width="80" align="center" />
|
||||
</el-table-column>
|
||||
<!-- 净边料独立宽度列(合并后的分组) -->
|
||||
<el-table-column
|
||||
v-for="width in widthList"
|
||||
:key="'trimmed-' + width"
|
||||
:label="width"
|
||||
v-for="group in trimmedWidthGroups"
|
||||
:key="'trimmed-' + group.key"
|
||||
:label="group.label"
|
||||
align="center"
|
||||
>
|
||||
<el-table-column label="数量(件)" :prop="`trimmed_${width}_count`" width="80" align="center" />
|
||||
<el-table-column label="重量(吨)" :prop="`trimmed_${width}_weight`" width="80" align="center" />
|
||||
<el-table-column label="数量(件)" :prop="`trimmed_${group.key}_count`" width="80" align="center" />
|
||||
<el-table-column label="重量(吨)" :prop="`trimmed_${group.key}_weight`" width="80" align="center" />
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 冷硬卷板毛边料现货库存 表头组 -->
|
||||
<!-- 冷硬卷板毛边料现货库存 独立表头组 -->
|
||||
<el-table-column
|
||||
label="冷硬卷板毛边料现货库存"
|
||||
align="center"
|
||||
@@ -50,14 +51,15 @@
|
||||
<el-table-column label="数量(件)" prop="untrimmedTotalCount" width="80" align="center" />
|
||||
<el-table-column label="重量(吨)" prop="untrimmedTotalWeight" width="80" align="center" />
|
||||
</el-table-column>
|
||||
<!-- 毛边料独立宽度列(合并后的分组) -->
|
||||
<el-table-column
|
||||
v-for="width in widthList"
|
||||
:key="'untrimmed-' + width"
|
||||
:label="width"
|
||||
v-for="group in untrimmedWidthGroups"
|
||||
:key="'untrimmed-' + group.key"
|
||||
:label="group.label"
|
||||
align="center"
|
||||
>
|
||||
<el-table-column label="数量(件)" :prop="`untrimmed_${width}_count`" width="80" align="center" />
|
||||
<el-table-column label="重量(吨)" :prop="`untrimmed_${width}_weight`" width="80" align="center" />
|
||||
<el-table-column label="数量(件)" :prop="`untrimmed_${group.key}_count`" width="80" align="center" />
|
||||
<el-table-column label="重量(吨)" :prop="`untrimmed_${group.key}_weight`" width="80" align="center" />
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -71,69 +73,202 @@ export default {
|
||||
data: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
// 可配置的宽度分组规则(支持自定义)
|
||||
widthGroupRules: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
'1000系列': ['1000', '1000~1005', '1010/1015'],
|
||||
'1200基础系列': ['1200/1202', '1200~1215'],
|
||||
'1218基础系列': ['1218/1220', '1218~1235', '1210/1215'],
|
||||
'1240系列': ['1240/1252'],
|
||||
'1225系列': ['1225/1235'],
|
||||
'1250+系列': ['1250~1265', '1260-1265']
|
||||
})
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 定义表格中需要展示的宽度规格(与图片中一致)
|
||||
widthList() {
|
||||
return [
|
||||
'1000', '1200/1202', '1218/1220', '1240/1252',
|
||||
'1010/1015', '1210/1215', '1225/1235', '1260-1265',
|
||||
'1000~1005', '1200~1215', '1218~1235', '1250~1265'
|
||||
];
|
||||
// ========== 净边料相关计算 ==========
|
||||
// 提取净边料所有原始宽度
|
||||
rawTrimmedWidths() {
|
||||
const widthSet = new Set();
|
||||
this.data?.forEach(item => {
|
||||
item.trimmedList?.forEach(trimmed => {
|
||||
if (trimmed.width) widthSet.add(trimmed.width);
|
||||
});
|
||||
});
|
||||
return Array.from(widthSet);
|
||||
},
|
||||
// 处理后的数据(适配表格列结构)
|
||||
// 净边料宽度分组(合并相近宽度)
|
||||
trimmedWidthGroups() {
|
||||
return this.generateWidthGroups(this.rawTrimmedWidths);
|
||||
},
|
||||
|
||||
// ========== 毛边料相关计算 ==========
|
||||
// 提取毛边料所有原始宽度
|
||||
rawUntrimmedWidths() {
|
||||
const widthSet = new Set();
|
||||
this.data?.forEach(item => {
|
||||
item.untrimmedList?.forEach(untrimmed => {
|
||||
if (untrimmed.width) widthSet.add(untrimmed.width);
|
||||
});
|
||||
});
|
||||
return Array.from(widthSet);
|
||||
},
|
||||
// 毛边料宽度分组(合并相近宽度)
|
||||
untrimmedWidthGroups() {
|
||||
return this.generateWidthGroups(this.rawUntrimmedWidths);
|
||||
},
|
||||
|
||||
// 处理后的原始表格数据
|
||||
tableData() {
|
||||
return this.data.map(item => {
|
||||
const row = {
|
||||
thickness: item.thickness,
|
||||
trimmedTotalCount: 0, // 净边料总计数量
|
||||
trimmedTotalWeight: 0, // 净边料总计重量
|
||||
untrimmedTotalCount: 0, // 毛边料总计数量
|
||||
untrimmedTotalWeight: 0 // 毛边料总计重量
|
||||
trimmedTotalCount: 0,
|
||||
trimmedTotalWeight: 0,
|
||||
untrimmedTotalCount: 0,
|
||||
untrimmedTotalWeight: 0
|
||||
};
|
||||
|
||||
// 初始化所有宽度的数量和重量为0
|
||||
this.widthList.forEach(width => {
|
||||
row[`trimmed_${width}_count`] = 0;
|
||||
row[`trimmed_${width}_weight`] = 0;
|
||||
row[`untrimmed_${width}_count`] = 0;
|
||||
row[`untrimmed_${width}_weight`] = 0;
|
||||
// 初始化净边料分组数据
|
||||
this.trimmedWidthGroups?.forEach(group => {
|
||||
row[`trimmed_${group.key}_count`] = 0;
|
||||
row[`trimmed_${group.key}_weight`] = 0;
|
||||
});
|
||||
|
||||
// 处理净边料数据
|
||||
item.trimmedList.forEach(trimmed => {
|
||||
const widthKey = trimmed.width;
|
||||
if (this.widthList.includes(widthKey)) {
|
||||
row[`trimmed_${widthKey}_count`] = trimmed.coilCount;
|
||||
row[`trimmed_${widthKey}_weight`] = trimmed.totalWeight;
|
||||
// 累加总计
|
||||
row.trimmedTotalCount += trimmed.coilCount;
|
||||
row.trimmedTotalWeight = (Number(row.trimmedTotalWeight) + Number(trimmed.totalWeight)).toFixed(3);
|
||||
}
|
||||
// 初始化毛边料分组数据
|
||||
this.untrimmedWidthGroups?.forEach(group => {
|
||||
row[`untrimmed_${group.key}_count`] = 0;
|
||||
row[`untrimmed_${group.key}_weight`] = 0;
|
||||
});
|
||||
|
||||
// 处理毛边料数据
|
||||
item.untrimmedList.forEach(untrimmed => {
|
||||
const widthKey = untrimmed.width;
|
||||
if (this.widthList.includes(widthKey)) {
|
||||
row[`untrimmed_${widthKey}_count`] = untrimmed.coilCount;
|
||||
row[`untrimmed_${widthKey}_weight`] = untrimmed.totalWeight;
|
||||
// 累加总计
|
||||
row.untrimmedTotalCount += untrimmed.coilCount;
|
||||
row.untrimmedTotalWeight = (Number(row.untrimmedTotalWeight) + Number(untrimmed.totalWeight)).toFixed(3);
|
||||
}
|
||||
// 处理净边料数据(按分组求和)
|
||||
item.trimmedList?.forEach(trimmed => {
|
||||
const width = trimmed.width;
|
||||
const count = Number(trimmed.coilCount) || 0;
|
||||
const weight = Number(trimmed.totalWeight) || 0;
|
||||
|
||||
// 找到宽度所属的分组并累加
|
||||
this.trimmedWidthGroups?.forEach(group => {
|
||||
if (group.includesWidth(width)) {
|
||||
row[`trimmed_${group.key}_count`] += count;
|
||||
row[`trimmed_${group.key}_weight`] = (row[`trimmed_${group.key}_weight`] + weight).toFixed(3);
|
||||
}
|
||||
});
|
||||
|
||||
// 累加总计
|
||||
row.trimmedTotalCount += count;
|
||||
row.trimmedTotalWeight = (Number(row.trimmedTotalWeight) + weight).toFixed(3);
|
||||
});
|
||||
|
||||
// 处理毛边料数据(按分组求和)
|
||||
item.untrimmedList?.forEach(untrimmed => {
|
||||
const width = untrimmed.width;
|
||||
const count = Number(untrimmed.coilCount) || 0;
|
||||
const weight = Number(untrimmed.totalWeight) || 0;
|
||||
|
||||
// 找到宽度所属的分组并累加
|
||||
this.untrimmedWidthGroups?.forEach(group => {
|
||||
if (group.includesWidth(width)) {
|
||||
row[`untrimmed_${group.key}_count`] += count;
|
||||
row[`untrimmed_${group.key}_weight`] = (row[`untrimmed_${group.key}_weight`] + weight).toFixed(3);
|
||||
}
|
||||
});
|
||||
|
||||
// 累加总计
|
||||
row.untrimmedTotalCount += count;
|
||||
row.untrimmedTotalWeight = (Number(row.untrimmedTotalWeight) + weight).toFixed(3);
|
||||
});
|
||||
|
||||
return row;
|
||||
});
|
||||
},
|
||||
|
||||
// 过滤掉全0的行
|
||||
filteredTableData() {
|
||||
return this.tableData.filter(row => {
|
||||
let hasNonZeroData = false;
|
||||
|
||||
// 检查净边料总计
|
||||
if (Number(row.trimmedTotalCount) > 0 || Number(row.trimmedTotalWeight) > 0) {
|
||||
hasNonZeroData = true;
|
||||
}
|
||||
|
||||
// 检查毛边料总计
|
||||
if (Number(row.untrimmedTotalCount) > 0 || Number(row.untrimmedTotalWeight) > 0) {
|
||||
hasNonZeroData = true;
|
||||
}
|
||||
|
||||
// 检查净边料分组列
|
||||
if (!hasNonZeroData) {
|
||||
this.trimmedWidthGroups?.forEach(group => {
|
||||
if (Number(row[`trimmed_${group.key}_count`]) > 0 || Number(row[`trimmed_${group.key}_weight`]) > 0) {
|
||||
hasNonZeroData = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 检查毛边料分组列
|
||||
if (!hasNonZeroData) {
|
||||
this.untrimmedWidthGroups?.forEach(group => {
|
||||
if (Number(row[`untrimmed_${group.key}_count`]) > 0 || Number(row[`untrimmed_${group.key}_weight`]) > 0) {
|
||||
hasNonZeroData = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return hasNonZeroData;
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 合并表头的跨度方法(可选,若需要合并行/列可扩展)
|
||||
// 生成宽度分组(核心方法)
|
||||
generateWidthGroups(rawWidths) {
|
||||
const groups = [];
|
||||
const usedWidths = new Set();
|
||||
|
||||
// 遍历分组规则,匹配原始宽度
|
||||
Object.entries(this.widthGroupRules)?.forEach(([groupLabel, widthList]) => {
|
||||
// 筛选出当前分组包含的原始宽度
|
||||
const matchedWidths = rawWidths.filter(width => widthList.includes(width));
|
||||
if (matchedWidths.length === 0) return;
|
||||
|
||||
// 创建分组对象
|
||||
const groupKey = groupLabel.replace(/[^a-zA-Z0-9]/g, '_');
|
||||
groups.push({
|
||||
key: groupKey,
|
||||
label: groupLabel,
|
||||
widths: matchedWidths,
|
||||
includesWidth: function(width) {
|
||||
return this.widths.includes(width);
|
||||
}
|
||||
});
|
||||
|
||||
// 标记已使用的宽度
|
||||
matchedWidths?.forEach(width => usedWidths.add(width));
|
||||
});
|
||||
|
||||
// 处理未匹配到分组的宽度(单独成组)
|
||||
rawWidths?.forEach(width => {
|
||||
if (!usedWidths.has(width)) {
|
||||
const groupKey = width.replace(/[^a-zA-Z0-9]/g, '_');
|
||||
groups.push({
|
||||
key: groupKey,
|
||||
label: width,
|
||||
widths: [width],
|
||||
includesWidth: function(width) {
|
||||
return this.widths.includes(width);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return groups;
|
||||
},
|
||||
|
||||
// 合并表头的跨度方法
|
||||
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
// 可根据需求实现行/列合并逻辑,例如合并重复的厚度行
|
||||
// 示例:若需合并相同厚度的行,可在此处返回 { rowspan: n, colspan: m }
|
||||
return { rowspan: 1, colspan: 1 };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="el-icon-download" size="mini" @click="handleNewExport" v-if="showNewExport">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -73,6 +74,9 @@
|
||||
<el-button type="info" plain icon="el-icon-printer" size="mini" :disabled="multiple"
|
||||
@click="handleBatchPrintLabel">批量打印标签</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5" v-if="showOrderBy">
|
||||
<el-checkbox v-model="queryParams.orderBy" v-loading="loading" @change="getList" label="orderBy">按实际库区排序</el-checkbox>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
@@ -177,7 +181,8 @@
|
||||
|
||||
<el-table-column label="关联订单" align="center" prop="relatedToOrder" v-if="showRelatedToOrder" width="150">
|
||||
<template slot-scope="scope">
|
||||
<el-switch @change="handleRelatedToOrderChange(scope.row)" v-model="scope.row.isRelatedToOrder" :active-value="1" :inactive-value="0" />
|
||||
<el-switch @change="handleRelatedToOrderChange(scope.row)" v-model="scope.row.isRelatedToOrder"
|
||||
:active-value="1" :inactive-value="0" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -404,7 +409,7 @@ import {
|
||||
exportCoil,
|
||||
cancelExportCoil,
|
||||
checkCoilNo,
|
||||
returnCoil
|
||||
returnCoil,
|
||||
} from "@/api/wms/coil";
|
||||
import { listBoundCoil } from "@/api/wms/deliveryWaybillDetail";
|
||||
import WarehouseSelect from "@/components/KLPService/WarehouseSelect";
|
||||
@@ -529,6 +534,14 @@ export default {
|
||||
showRelatedToOrder: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
showOrderBy: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
showNewExport: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@@ -577,6 +590,7 @@ export default {
|
||||
itemIds: undefined,
|
||||
status: undefined,
|
||||
updateTime: undefined,
|
||||
orderBy: false,
|
||||
...this.querys,
|
||||
},
|
||||
// 表单参数
|
||||
@@ -787,8 +801,31 @@ export default {
|
||||
handlePrintLabel(row) {
|
||||
const item = row.itemType === 'product' ? row.product : row.rawMaterial;
|
||||
const itemName = row.itemType === 'product' ? item?.productName || '' : item?.rawMaterialName || '';
|
||||
|
||||
this.labelRender.type = row.itemType === 'product' ? '3' : '2';
|
||||
const itemType = row.itemType || '';
|
||||
const warehouseId = row.warehouseId || '';
|
||||
// 在镀锌颜料库的卷使用镀锌原料标签
|
||||
if (itemType == 'raw_material' && (warehouseId == '1988150263284953089' || warehouseId == '1988150487185289217')) {
|
||||
this.labelRender.type = '5';
|
||||
}
|
||||
// 脱脂原料库
|
||||
else if (itemType == 'raw_material' && (warehouseId == '1988150545175736322')) {
|
||||
this.labelRender.type = '6';
|
||||
}
|
||||
else if (itemType == 'raw_material') {
|
||||
this.labelRender.type = '2';
|
||||
} else if (itemType == 'product' && itemName == '冷硬卷') {
|
||||
this.labelRender.type = '3';
|
||||
} else if (itemType == 'product' && itemName == '热轧卷板') {
|
||||
this.labelRender.type = '3';
|
||||
} else if (itemType == 'product' && itemName == '镀锌卷') {
|
||||
this.labelRender.type = '4';
|
||||
} else if (itemType == 'product' && itemName == '冷轧卷') {
|
||||
this.labelRender.type = '3';
|
||||
} else if (itemType == 'product' && itemName == '镀铬卷') {
|
||||
this.labelRender.type = 'ge';
|
||||
} else {
|
||||
this.labelRender.type = '3';
|
||||
}
|
||||
this.labelRender.data = {
|
||||
...row,
|
||||
itemName: itemName,
|
||||
@@ -898,12 +935,6 @@ export default {
|
||||
}
|
||||
},
|
||||
handleAbnormal(row) {
|
||||
// this.$router.push({
|
||||
// path: '/quality/detail',
|
||||
// query: {
|
||||
// coilId: row.coilId,
|
||||
// }
|
||||
// })
|
||||
this.currentCoilId = row.coilId;
|
||||
this.abnormalOpen = true;
|
||||
},
|
||||
@@ -1020,6 +1051,31 @@ export default {
|
||||
this.$modal.msgError("发货失败");
|
||||
});
|
||||
},
|
||||
async handleNewExport(row) {
|
||||
this.loading = true
|
||||
let coilIds = ''
|
||||
const query = {
|
||||
...this.queryParams,
|
||||
selectType: 'product',
|
||||
pageSize: 9999,
|
||||
pageNum: 1,
|
||||
}
|
||||
if (this.showWaybill) {
|
||||
const res = await listBoundCoil(query)
|
||||
coilIds = res.rows.map(item => item.coilId).join(',')
|
||||
this.loading = false
|
||||
this.download('/wms/materialCoil/exportDelivery', {
|
||||
coilIds,
|
||||
}, 'coil.xlsx')
|
||||
} else {
|
||||
const { rows: coils } = await listMaterialCoil(query)
|
||||
coilIds = coils.map(item => item.coilId).join(',')
|
||||
this.loading = false
|
||||
this.download('wms/materialCoil/exportAll', {
|
||||
coilIds,
|
||||
}, 'coil.xlsx')
|
||||
}
|
||||
},
|
||||
handleCheck(row) {
|
||||
this.isCheck = true;
|
||||
this.loading = true;
|
||||
@@ -1153,7 +1209,6 @@ export default {
|
||||
...this.queryParams
|
||||
}, `materialCoil_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
|
||||
/** 批量打印标签按钮 */
|
||||
handleBatchPrintLabel() {
|
||||
if (!this.ids || this.ids.length === 0) {
|
||||
|
||||
@@ -577,6 +577,10 @@ export default {
|
||||
width: 180,
|
||||
height: 100,
|
||||
},
|
||||
'6': {
|
||||
width: 180,
|
||||
height: 100,
|
||||
},
|
||||
},
|
||||
stepSpilt: {
|
||||
list: [],
|
||||
@@ -661,9 +665,14 @@ export default {
|
||||
const itemType = row.itemType || '';
|
||||
const warehouseId = row.warehouseId || '';
|
||||
// 在镀锌颜料库的卷使用镀锌原料标签
|
||||
if (itemType == 'raw_material' && warehouseId == '1988150263284953089') {
|
||||
if (itemType == 'raw_material' && (warehouseId == '1988150263284953089' || warehouseId == '1988150487185289217')) {
|
||||
this.labelRender.type = '5';
|
||||
} else if (itemType == 'raw_material') {
|
||||
}
|
||||
// 脱脂原料库
|
||||
else if (itemType == 'raw_material' && (warehouseId == '1988150545175736322')) {
|
||||
this.labelRender.type = '6';
|
||||
}
|
||||
else if (itemType == 'raw_material') {
|
||||
this.labelRender.type = '2';
|
||||
} else if (itemType == 'product' && itemName == '冷硬卷') {
|
||||
this.labelRender.type = '3';
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" class="add-btn">
|
||||
新增
|
||||
</el-button>
|
||||
<el-button type="primary" plain icon="el-icon-refresh" size="mini" @click="getList" class="add-btn">
|
||||
刷新
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 自定义列表(替代表格) -->
|
||||
@@ -32,11 +35,16 @@
|
||||
<!-- 内容区域 -->
|
||||
<div class="item-content">
|
||||
<el-tag type="info">{{ item.statType }}</el-tag>
|
||||
<div style="display: flex;">
|
||||
<div style="display: flex; flex-direction: column;">
|
||||
<!-- 双击后变成输入框,输入框失去焦点触发更新 -->
|
||||
<div class="value">{{ item.title }}</div>
|
||||
<!-- <span class="value">{{ item.createTime }}</span>
|
||||
<span class="value">{{ item.createBy }}</span> -->
|
||||
<div class="value">
|
||||
{{ item.title }}
|
||||
<el-icons title="本次汇总保存了汇总时使用的钢卷明细" v-if="item.attachmentInfo" class="el-icon-link"></el-icons>
|
||||
</div>
|
||||
<div>
|
||||
<span class="value" style="margin-right: 5px;">{{ item.createBy }}</span>
|
||||
<span class="value">{{ item.createTime }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -55,12 +63,10 @@
|
||||
|
||||
<!-- 添加或修改钢卷生产统计对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<div v-for="item in tableType" :key="item.statType" @click="handleCreate(item)" class="type-item">
|
||||
<div class="type-title">{{ item.title }}</div>
|
||||
<div class="type-desc">{{ item.description }}</div>
|
||||
</div>
|
||||
</el-form>
|
||||
<div v-for="item in tableType" :key="item.statType" @click="handleCreate(item)" class="type-item">
|
||||
<div class="type-title">{{ item.title }}</div>
|
||||
<div class="type-desc">{{ item.description }}</div>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
@@ -263,6 +269,7 @@ export default {
|
||||
.item-content {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,32 +5,53 @@
|
||||
<LeftList ref="leftList" @add="handleAdd" @select="handleSelect" />
|
||||
</el-col>
|
||||
|
||||
<el-col :span="18">
|
||||
<el-col :span="18" style="position: relative;">
|
||||
<ul style="float: right; position: absolute; right: 0; top: 0; z-index: 100;">
|
||||
<li v-show="currentRow.attachmentInfo" @click="handleDownload(currentRow)"><el-button
|
||||
icon="el-icon-download">下载明细</el-button></li>
|
||||
</ul>
|
||||
<div style="height: calc(100vh - 124px); overflow-y: scroll; overflow-x: hidden;">
|
||||
<div v-if="currentRow.summaryId">
|
||||
<Preview :data="currentRow.statJson" :statType="currentRow.statType" />
|
||||
</div>
|
||||
<div v-else>
|
||||
<div>钢卷生产统计详情</div>
|
||||
<div>
|
||||
<el-empty description="请点击左侧列表查看或创建透视表" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-dialog v-loading="previewLoading" title="效果预览" :visible.sync="previewOpen" width="100vw" fullscreen append-to-body>
|
||||
<Preview :data="liveData" :statType="form.statType" />
|
||||
<el-button type="primary" @click="handleSave">保存</el-button>
|
||||
<el-dialog v-loading="previewLoading" title="效果预览" :visible.sync="previewOpen" width="80vw" append-to-body>
|
||||
<div>
|
||||
<el-button type="primary" @click="handleSave" :loading="buttonLoading">保存</el-button>
|
||||
<!-- <el-button type="primary" @click="handleDetail" :loading="buttonLoading">查看明细</el-button> -->
|
||||
<el-checkbox style="margin-left: 10px;" v-model="saveDetail"
|
||||
label="orderBy">保存透视表时保存明细,勾选后在保存时会消耗更长的时间且会占用更多内存和存储</el-checkbox>
|
||||
</div>
|
||||
<div style="height: calc(100vh - 300px); overflow-y: scroll; overflow-x: hidden;">
|
||||
<div v-if="liveData">
|
||||
<Preview :data="liveData" :statType="form.statType" />
|
||||
</div>
|
||||
<div v-else>
|
||||
<div>
|
||||
<el-empty description="未知的透视表" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getCoilStatisticsSummary, delCoilStatisticsSummary, addCoilStatisticsSummary, updateCoilStatisticsSummary } from "@/api/wms/coilStatisticsSummary";
|
||||
import { getCoilStatisticsSummary, delCoilStatisticsSummary, addCoilStatisticsSummary, updateCoilStatisticsSummary, checkCoilStatisticsSummaryExist } from "@/api/wms/coilStatisticsSummary";
|
||||
import LeftList from "./components/LeftList.vue";
|
||||
import Preview from "@/views/wms/coil/panels/Perspective/index.vue";
|
||||
|
||||
import { listRawMaterialPerspective } from "@/api/wms/rawMaterial";
|
||||
import { listCoilTrimStatistics, categoryWidthStatistics } from "@/api/wms/coil";
|
||||
import { uploadFile } from "@/api/system/oss";
|
||||
import { listCoilTrimStatistics, categoryWidthStatistics, listMaterialCoil, exportCoilWithAll } from "@/api/wms/coil";
|
||||
|
||||
export default {
|
||||
name: "CoilStatisticsSummary",
|
||||
@@ -67,6 +88,7 @@ export default {
|
||||
title: undefined,
|
||||
statType: undefined,
|
||||
},
|
||||
saveDetail: false,
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
@@ -78,19 +100,7 @@ export default {
|
||||
currentRow: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询钢卷生产统计列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listCoilStatisticsSummary(this.queryParams).then(response => {
|
||||
this.coilStatisticsSummaryList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
@@ -130,9 +140,39 @@ export default {
|
||||
};
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd(form) {
|
||||
this.previewOpen = true;
|
||||
async handleAdd(form) {
|
||||
this.form = form;
|
||||
// 先检查今天是否已经创建过该类型的透视表
|
||||
const {data: existingSummary} = await checkCoilStatisticsSummaryExist(form.statType);
|
||||
// 如果已经创建过
|
||||
if (existingSummary) {
|
||||
// 先提示是否继续创建
|
||||
try {
|
||||
await this.$confirm('该类型已存在透视表,是否继续创建?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
});
|
||||
} catch (error) {
|
||||
return;
|
||||
}
|
||||
// 如果要继续创建,则提示是否要覆盖已经存在的透视表
|
||||
try {
|
||||
await this.$confirm('是否覆盖已存在的透视表?', '提示', {
|
||||
confirmButtonText: '删除并重新创建',
|
||||
cancelButtonText: '保留已有透视表',
|
||||
type: 'warning'
|
||||
});
|
||||
delCoilStatisticsSummary(existingSummary).then(() => {
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
this.getList();
|
||||
});
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
}
|
||||
this.previewOpen = true;
|
||||
|
||||
if (form.statType == '热轧原料') {
|
||||
this.previewLoading = true;
|
||||
listRawMaterialPerspective().then(response => {
|
||||
@@ -183,19 +223,97 @@ export default {
|
||||
}
|
||||
this.previewLoading = false;
|
||||
},
|
||||
handleSave() {
|
||||
addCoilStatisticsSummary({
|
||||
...this.form,
|
||||
statJson: JSON.stringify(this.liveData)
|
||||
}).then(response => {
|
||||
async handleSave() {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '保存中...',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
try {
|
||||
this.buttonLoading = true;
|
||||
|
||||
const { data: summary } = await addCoilStatisticsSummary({
|
||||
...this.form,
|
||||
statJson: JSON.stringify(this.liveData)
|
||||
})
|
||||
|
||||
if (this.saveDetail) {
|
||||
// 获取原始数据,组装coilIds,
|
||||
let coilIds = ''
|
||||
if (this.form.statType == '热轧原料') {
|
||||
const { rows: coils } = await listMaterialCoil({
|
||||
pageNum: 1,
|
||||
pageSize: 9999,
|
||||
selectType: 'raw_material',
|
||||
dataType: 1,
|
||||
status: 0,
|
||||
itemName: '热轧卷板',
|
||||
itemType: 'raw_material',
|
||||
})
|
||||
coilIds = coils.map(item => item.coilId).join(',')
|
||||
} else if (this.form.statType == '冷硬卷板') {
|
||||
const { rows: coils1 } = await listMaterialCoil({
|
||||
pageNum: 1,
|
||||
pageSize: 9999,
|
||||
selectType: 'raw_material',
|
||||
dataType: 1,
|
||||
status: 0,
|
||||
itemName: '冷硬卷',
|
||||
itemType: 'raw_material',
|
||||
})
|
||||
const { rows: coils2 } = await listMaterialCoil({
|
||||
pageNum: 1,
|
||||
pageSize: 9999,
|
||||
selectType: 'product',
|
||||
dataType: 1,
|
||||
status: 0,
|
||||
itemName: '冷硬卷',
|
||||
itemType: 'product',
|
||||
})
|
||||
coilIds = coils1.concat(coils2).map(item => item.coilId).join(',')
|
||||
} else if (this.form.statType == '汇总') {
|
||||
const { rows: coils } = await listMaterialCoil({
|
||||
pageNum: 1,
|
||||
pageSize: 9999,
|
||||
dataType: 1,
|
||||
status: 0,
|
||||
})
|
||||
coilIds = coils.map(item => item.coilId).join(',')
|
||||
}
|
||||
|
||||
// 使用exportCoilWithAll接口传入coilIds获取二进制文件数据
|
||||
const response = await exportCoilWithAll({
|
||||
coilIds: coilIds,
|
||||
})
|
||||
const file = new Blob([response], { type: 'application/vnd.ms-excel' })
|
||||
const fileName = this.form.statType + '明细.xlsx'
|
||||
// 通过new File构建出excel文件
|
||||
const excelFile = new File([file], fileName, { type: 'application/vnd.ms-excel' })
|
||||
|
||||
console.log(excelFile)
|
||||
// 上传文件到minio
|
||||
const uploadResponse = await uploadFile(excelFile)
|
||||
console.log(uploadResponse)
|
||||
|
||||
// 关联附件信息
|
||||
await updateCoilStatisticsSummary({
|
||||
...summary,
|
||||
attachmentInfo: uploadResponse.data.ossId,
|
||||
});
|
||||
}
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.previewOpen = false;
|
||||
this.liveData = [];
|
||||
this.form = {};
|
||||
this.$refs.leftList.getList();
|
||||
}).finally(() => {
|
||||
} finally {
|
||||
this.buttonLoading = false;
|
||||
});
|
||||
loading.close();
|
||||
}
|
||||
},
|
||||
handleDownload(row) {
|
||||
this.$download.oss(row.attachmentInfo)
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
|
||||
@@ -29,7 +29,8 @@ export default {
|
||||
showStatus: true,
|
||||
hideType: true,
|
||||
showLength: true,
|
||||
canExportAll: true
|
||||
canExportAll: true,
|
||||
showOrderBy: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
<BasePage :qrcode="qrcode" :querys="querys" :labelType="labelType" :hideWarehouseQuery="hideWarehouseQuery"
|
||||
:hideType="hideType" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="次品" name="third">
|
||||
<BasePage :qrcode="qrcode" :querys="query3" :labelType="labelType" :hideWarehouseQuery="hideWarehouseQuery"
|
||||
:hideType="hideType" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
@@ -34,6 +38,10 @@ export default {
|
||||
nextWarehouseId: '2019583429955104769', // 废品仓
|
||||
// materialType: '废品'
|
||||
},
|
||||
query3: {
|
||||
dataType: 1,
|
||||
OnlyScrap: true,
|
||||
},
|
||||
hideWarehouseQuery: true,
|
||||
showAbnormal: true,
|
||||
labelType: '2',
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<BasePage
|
||||
:qrcode="qrcode"
|
||||
:showWaybill="showWaybill"
|
||||
:showNewExport="showNewExport"
|
||||
:querys="querys" :labelType="labelType" :showStatus="showStatus" :hideType="hideType" :showControl="showControl" :showExportTime="showExportTime" />
|
||||
</template>
|
||||
|
||||
@@ -27,6 +28,7 @@ export default {
|
||||
hideType: false,
|
||||
showExportTime: false,
|
||||
showWaybill: true,
|
||||
showNewExport: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
38
klp-ui/src/views/wms/delivery/canuse/index.vue
Normal file
38
klp-ui/src/views/wms/delivery/canuse/index.vue
Normal file
@@ -0,0 +1,38 @@
|
||||
<template>
|
||||
<BasePage :qrcode="qrcode"
|
||||
:querys="querys"
|
||||
:labelType="labelType"
|
||||
:showStatus="showStatus"
|
||||
:hideType="hideType"
|
||||
:showLength="showLength"
|
||||
:canExportAll="canExportAll"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BasePage from '@/views/wms/coil/panels/base.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BasePage
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
qrcode: false,
|
||||
querys: {
|
||||
dataType: 1,
|
||||
materialType: '成品',
|
||||
itemType: 'product',
|
||||
status: 0,
|
||||
orderBy: true
|
||||
},
|
||||
labelType: '3',
|
||||
showStatus: true,
|
||||
hideType: true,
|
||||
showLength: true,
|
||||
canExportAll: true,
|
||||
showOrderBy: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -43,13 +43,20 @@
|
||||
<el-table-column label="车牌" align="center" prop="licensePlate" width="100" />
|
||||
<el-table-column label="收货单位" align="center" prop="consigneeUnit" />
|
||||
<!-- <el-table-column label="发货单位" align="center" prop="senderUnit" /> -->
|
||||
<el-table-column label="订单编号" align="center" prop="orderNo" />
|
||||
<el-table-column label="订单编号" align="center" prop="orderNo">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.orderId">{{ scope.row.orderCode }}</span>
|
||||
<span v-else>{{ scope.row.principalPhone }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发货时间" align="center" prop="deliveryTime" width="100">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="负责人" align="center" prop="principal" width="60" />
|
||||
<el-table-column label="备注" align="center" prop="remark" width="100" show-overflow-tooltip/>
|
||||
|
||||
<!-- <el-table-column label="负责人电话" align="center" prop="principalPhone" width="100" /> -->
|
||||
<el-table-column label="完成状态" align="center" prop="status" width="120">
|
||||
<template slot-scope="scope">
|
||||
@@ -109,9 +116,12 @@
|
||||
<el-form-item label="负责人" prop="principal">
|
||||
<el-input v-model="form.principal" placeholder="请输入负责人" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="负责人电话" prop="principalPhone">
|
||||
<el-input v-model="form.principalPhone" placeholder="请输入负责人电话" />
|
||||
</el-form-item> -->
|
||||
<el-form-item label="订单编号" prop="principalPhone" v-if="!form.orderId">
|
||||
<el-input v-model="form.principalPhone" placeholder="请输入订单编号"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单编号" prop="principalPhone" v-else title="当前发货单已绑定订单">
|
||||
<el-input v-model="form.orderCode" placeholder="请输入订单编号" readonly disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
@@ -338,7 +348,10 @@ export default {
|
||||
const waybillId = row.waybillId || this.ids
|
||||
getDeliveryWaybill(waybillId).then(response => {
|
||||
this.loading = false;
|
||||
this.form = response.data;
|
||||
this.form = {
|
||||
...response.data,
|
||||
orderCode: row.orderCode
|
||||
};
|
||||
this.open = true;
|
||||
this.title = "修改发货单";
|
||||
});
|
||||
|
||||
@@ -71,8 +71,8 @@ public class WmsCoilStatisticsSummaryController extends BaseController {
|
||||
@Log(title = "钢卷生产统计汇总(数据透视结果持久化)", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsCoilStatisticsSummaryBo bo) {
|
||||
return toAjax(iWmsCoilStatisticsSummaryService.insertByBo(bo));
|
||||
public R<WmsCoilStatisticsSummaryVo> add(@Validated(AddGroup.class) @RequestBody WmsCoilStatisticsSummaryBo bo) {
|
||||
return R.ok(iWmsCoilStatisticsSummaryService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,4 +96,15 @@ public class WmsCoilStatisticsSummaryController extends BaseController {
|
||||
@PathVariable Long[] summaryIds) {
|
||||
return toAjax(iWmsCoilStatisticsSummaryService.deleteWithValidByIds(Arrays.asList(summaryIds), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查当天是否存在指定类型的统计记录
|
||||
*
|
||||
* @param statType 统计类型
|
||||
* @return 存在的记录ID,不存在则返回null
|
||||
*/
|
||||
@GetMapping("/checkToday")
|
||||
public R<Long> checkTodayExists(@RequestParam String statType) {
|
||||
return R.ok(iWmsCoilStatisticsSummaryService.checkExistsByStatTypeToday(statType));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
package com.klp.controller;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.klp.domain.vo.WmsMaterialCoilExportVo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilLocationGridVo;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.ExcelWriter;
|
||||
import com.alibaba.excel.write.metadata.WriteSheet;
|
||||
import com.klp.domain.vo.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
@@ -22,7 +24,6 @@ import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||
import com.klp.domain.vo.dashboard.CoilTrimStatisticsVo;
|
||||
import com.klp.domain.vo.dashboard.CategoryWidthStatisticsVo;
|
||||
@@ -66,7 +67,7 @@ public class WmsMaterialCoilController extends BaseController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出钢卷物料表列表(完整字段版本)
|
||||
* 导出钢卷物料表列表(精简字段版本)
|
||||
*/
|
||||
@Log(title = "钢卷物料表", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
@@ -74,6 +75,16 @@ public class WmsMaterialCoilController extends BaseController {
|
||||
List<WmsMaterialCoilExportVo> list = iWmsMaterialCoilService.queryExportList(bo);
|
||||
ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilExportVo.class, response);
|
||||
}
|
||||
/**
|
||||
* 导出钢卷物料表列表(完整字段版本)
|
||||
* 导出全部字段
|
||||
*/
|
||||
@Log(title = "钢卷物料表", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/exportAll")
|
||||
public void exportSimple(WmsMaterialCoilBo bo, HttpServletResponse response) {
|
||||
List<WmsMaterialCoilAllExportVo> list = iWmsMaterialCoilService.queryExportListAll(bo);
|
||||
ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilAllExportVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出发货报表(按 coilIds,联查发货单明细/主表/发货计划)
|
||||
@@ -285,19 +296,23 @@ public class WmsMaterialCoilController extends BaseController {
|
||||
* 检查钢卷号是否重复
|
||||
* 前端传入入场钢卷号和当前钢卷号,返回哪个钢卷号重复
|
||||
*
|
||||
* @param coilId 钢卷ID(修改时传入,用于排除自身)
|
||||
* @param enterCoilNo 入场钢卷号
|
||||
* @param currentCoilNo 当前钢卷号
|
||||
* @param supplierCoilNo 厂家原料卷号
|
||||
* @return 返回结果,包含:
|
||||
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "both" (都重复), "none" (都不重复)
|
||||
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "supplier" (厂家原料卷号重复), "both" (都重复), "none" (都不重复)
|
||||
* - enterCoilNoDuplicate: 入场钢卷号是否重复
|
||||
* - currentCoilNoDuplicate: 当前钢卷号是否重复
|
||||
* - supplierCoilNoDuplicate: 厂家原料卷号是否重复
|
||||
*/
|
||||
@GetMapping("/checkCoilNoDuplicate")
|
||||
public R<Map<String, Object>> checkCoilNoDuplicate(
|
||||
@RequestParam(required = false) Long coilId,
|
||||
@RequestParam(required = false) String enterCoilNo,
|
||||
@RequestParam(required = false) String currentCoilNo) {
|
||||
Map<String, Object> result = iWmsMaterialCoilService.checkCoilNoDuplicate(coilId,enterCoilNo, currentCoilNo);
|
||||
@RequestParam(required = false) String currentCoilNo,
|
||||
@RequestParam(required = false) String supplierCoilNo) {
|
||||
Map<String, Object> result = iWmsMaterialCoilService.checkCoilNoDuplicate(coilId, enterCoilNo, currentCoilNo, supplierCoilNo);
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
|
||||
@@ -46,4 +46,7 @@ public class WmsCoilStatisticsSummary extends BaseEntity {
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
// 新增附件字段
|
||||
private String attachmentInfo;
|
||||
|
||||
}
|
||||
|
||||
@@ -42,5 +42,8 @@ public class WmsCoilStatisticsSummaryBo extends BaseEntity {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
// 新增附件字段
|
||||
private String attachmentInfo;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@@ -15,7 +16,7 @@ import lombok.Data;
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class WmsCoilStatisticsSummaryVo {
|
||||
public class WmsCoilStatisticsSummaryVo extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -52,5 +53,7 @@ public class WmsCoilStatisticsSummaryVo {
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
// 新增附件字段
|
||||
private String attachmentInfo;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 钢卷物料导出VO
|
||||
*
|
||||
* @author klp
|
||||
* @date 2025-11-27
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class WmsMaterialCoilAllExportVo {
|
||||
|
||||
/**
|
||||
* 类型(成品/原料)
|
||||
*/
|
||||
@ExcelProperty(value = "类型")
|
||||
private String itemTypeDesc;
|
||||
|
||||
/**
|
||||
* 逻辑库区
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 实际库区
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区")
|
||||
private String actualWarehouseName;
|
||||
|
||||
/**
|
||||
* 入场卷号
|
||||
*/
|
||||
@ExcelProperty(value = "入场卷号")
|
||||
private String enterCoilNo;
|
||||
|
||||
/**
|
||||
* 厂家卷号
|
||||
*/
|
||||
@ExcelProperty(value = "厂家卷号")
|
||||
private String supplierCoilNo;
|
||||
|
||||
/**
|
||||
* 成品卷号
|
||||
*/
|
||||
@ExcelProperty(value = "成品卷号")
|
||||
private String currentCoilNo;
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*/
|
||||
@ExcelProperty(value = "日期")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 发货时间(仅临时存储,不导出)
|
||||
*/
|
||||
@ExcelProperty(value = "发货时间")
|
||||
private Date exportTime;
|
||||
|
||||
// 发货人
|
||||
@ExcelProperty(value = "发货人")
|
||||
private String exportBy;
|
||||
|
||||
/**
|
||||
* 重量(kg)
|
||||
*/
|
||||
@ExcelProperty(value = "重量")
|
||||
private BigDecimal netWeight;
|
||||
|
||||
// 班组
|
||||
private String team;
|
||||
|
||||
/**
|
||||
* 用途
|
||||
*/
|
||||
@ExcelProperty(value = "用途")
|
||||
private String purpose;
|
||||
|
||||
/**
|
||||
* 切边要求
|
||||
*/
|
||||
@ExcelProperty(value = "切边要求")
|
||||
private String trimmingRequirement;
|
||||
|
||||
/**
|
||||
* 包装种类
|
||||
*/
|
||||
@ExcelProperty(value = "包装种类")
|
||||
private String packagingRequirement;
|
||||
|
||||
/**
|
||||
* 产品状态
|
||||
*/
|
||||
@ExcelProperty(value = "产品质量")
|
||||
private String qualityStatus;
|
||||
|
||||
/**
|
||||
* 打包状态
|
||||
*/
|
||||
@ExcelProperty(value = "打包状态")
|
||||
private String packingStatus;
|
||||
|
||||
/**
|
||||
* 库存状态
|
||||
*/
|
||||
@ExcelProperty(value = "库存状态")
|
||||
private String statusDesc;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
@ExcelProperty(value = "名称")
|
||||
private String itemName;
|
||||
|
||||
|
||||
@ExcelProperty(value = "长度")
|
||||
private BigDecimal length;
|
||||
|
||||
/**
|
||||
* 规格
|
||||
*/
|
||||
@ExcelProperty(value = "规格")
|
||||
private String specification;
|
||||
/**
|
||||
* 材质
|
||||
*/
|
||||
@ExcelProperty(value = "材质")
|
||||
private String material;
|
||||
|
||||
/**
|
||||
* 厂家
|
||||
*/
|
||||
@ExcelProperty(value = "厂家")
|
||||
private String manufacturer;
|
||||
|
||||
/**
|
||||
* 表面处理
|
||||
*/
|
||||
@ExcelProperty(value = "表面处理")
|
||||
private String surfaceTreatmentDesc;
|
||||
|
||||
/**
|
||||
* 锌层
|
||||
*/
|
||||
@ExcelProperty(value = "锌层")
|
||||
private String zincLayer;
|
||||
|
||||
/**
|
||||
* 物品ID
|
||||
*/
|
||||
@ExcelProperty(value = "物品ID")
|
||||
private Long itemId;
|
||||
|
||||
|
||||
/**
|
||||
* 更新时间(仅临时存储,不导出,用于发货时间为空时兜底)
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
// 数据类型
|
||||
@Excel(name = "数据类型", readConverterExp = "0=历史,1=当前")
|
||||
private Integer dataType;
|
||||
|
||||
// 调制度
|
||||
@ExcelProperty(value = "调制度")
|
||||
private String temperGrade;
|
||||
// 镀层种类
|
||||
@ExcelProperty(value = "镀层种类")
|
||||
private String coatingType;
|
||||
|
||||
// 业务用途
|
||||
@ExcelProperty(value = "业务用途")
|
||||
private String businessPurpose;
|
||||
|
||||
// 是否与订单相关 readConverterExp
|
||||
@Excel(name = "是否与订单相关", readConverterExp = "0=否,1=是")
|
||||
private Integer isRelatedToOrder;
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.klp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.Excel;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
@@ -174,4 +175,13 @@ public class WmsMaterialCoilExportVo {
|
||||
private String temperGrade;
|
||||
// 镀层种类
|
||||
private String coatingType;
|
||||
|
||||
// 班组
|
||||
private String team;
|
||||
|
||||
// 业务用途
|
||||
private String businessPurpose;
|
||||
|
||||
// 是否与订单相关 readConverterExp
|
||||
private Integer isRelatedToOrder;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public interface IWmsCoilStatisticsSummaryService {
|
||||
/**
|
||||
* 新增钢卷生产统计汇总(数据透视结果持久化)
|
||||
*/
|
||||
Boolean insertByBo(WmsCoilStatisticsSummaryBo bo);
|
||||
WmsCoilStatisticsSummaryVo insertByBo(WmsCoilStatisticsSummaryBo bo);
|
||||
|
||||
/**
|
||||
* 修改钢卷生产统计汇总(数据透视结果持久化)
|
||||
@@ -46,4 +46,11 @@ public interface IWmsCoilStatisticsSummaryService {
|
||||
* 校验并批量删除钢卷生产统计汇总(数据透视结果持久化)信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 检查当天是否存在指定类型的统计记录
|
||||
* @param statType 统计类型
|
||||
* @return 存在的记录ID,不存在则返回null
|
||||
*/
|
||||
Long checkExistsByStatTypeToday(String statType);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.klp.service;
|
||||
|
||||
import com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilLocationGridVo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import com.klp.domain.vo.*;
|
||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
@@ -141,16 +139,19 @@ public interface IWmsMaterialCoilService {
|
||||
|
||||
/**
|
||||
* 检查钢卷号是否重复
|
||||
* 根据入场钢卷号和当前钢卷号查询数据库,判断哪个钢卷号重复
|
||||
* 根据入场钢卷号、当前钢卷号和厂家原料卷号查询数据库,判断哪个钢卷号重复
|
||||
*
|
||||
* @param coilId 钢卷ID(修改时传入,用于排除自身)
|
||||
* @param enterCoilNo 入场钢卷号
|
||||
* @param currentCoilNo 当前钢卷号
|
||||
* @param supplierCoilNo 厂家原料卷号
|
||||
* @return 返回结果Map,包含:
|
||||
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "both" (都重复), "none" (都不重复)
|
||||
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "supplier" (厂家原料卷号重复), "both" (都重复), "none" (都不重复)
|
||||
* - enterCoilNoDuplicate: 入场钢卷号是否重复 (true/false)
|
||||
* - currentCoilNoDuplicate: 当前钢卷号是否重复 (true/false)
|
||||
* - supplierCoilNoDuplicate: 厂家原料卷号是否重复 (true/false)
|
||||
*/
|
||||
Map<String, Object> checkCoilNoDuplicate(Long coilId, String enterCoilNo, String currentCoilNo);
|
||||
Map<String, Object> checkCoilNoDuplicate(Long coilId, String enterCoilNo, String currentCoilNo, String supplierCoilNo);
|
||||
|
||||
/**
|
||||
* 根据入场钢卷号前缀查询最大的入场钢卷号
|
||||
@@ -231,5 +232,7 @@ public interface IWmsMaterialCoilService {
|
||||
String enterCoilNo,
|
||||
String currentCoilNo,
|
||||
String manufacturer);
|
||||
|
||||
List<WmsMaterialCoilAllExportVo> queryExportListAll(WmsMaterialCoilBo bo);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,14 +71,14 @@ public class WmsCoilStatisticsSummaryServiceImpl implements IWmsCoilStatisticsSu
|
||||
* 新增钢卷生产统计汇总(数据透视结果持久化)
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(WmsCoilStatisticsSummaryBo bo) {
|
||||
public WmsCoilStatisticsSummaryVo insertByBo(WmsCoilStatisticsSummaryBo bo) {
|
||||
WmsCoilStatisticsSummary add = BeanUtil.toBean(bo, WmsCoilStatisticsSummary.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setSummaryId(add.getSummaryId());
|
||||
}
|
||||
return flag;
|
||||
return queryById(add.getSummaryId());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,4 +108,22 @@ public class WmsCoilStatisticsSummaryServiceImpl implements IWmsCoilStatisticsSu
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查当天是否存在指定类型的统计记录
|
||||
*/
|
||||
@Override
|
||||
public Long checkExistsByStatTypeToday(String statType) {
|
||||
if (StringUtils.isBlank(statType)) {
|
||||
return null;
|
||||
}
|
||||
LambdaQueryWrapper<WmsCoilStatisticsSummary> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(WmsCoilStatisticsSummary::getStatType, statType);
|
||||
lqw.eq(WmsCoilStatisticsSummary::getDelFlag, 0);
|
||||
lqw.apply("DATE(create_time) = CURDATE()");
|
||||
lqw.select(WmsCoilStatisticsSummary::getSummaryId);
|
||||
lqw.last("LIMIT 1");
|
||||
WmsCoilStatisticsSummary one = baseMapper.selectOne(lqw);
|
||||
return one != null ? one.getSummaryId() : null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2348,7 +2348,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
*/
|
||||
@Override
|
||||
public List<WmsMaterialCoilExportVo> queryExportList(WmsMaterialCoilBo bo) {
|
||||
QueryWrapper<WmsMaterialCoil> lqw = buildQueryWrapper(bo);
|
||||
QueryWrapper<WmsMaterialCoil> lqw = buildQueryWrapperPlus(bo);
|
||||
List<WmsMaterialCoilExportVo> wmsMaterialCoilExportVos = baseMapper.selectExportList(lqw);
|
||||
// 遍历数据,根据状态替换日期字段,并处理空值兜底
|
||||
wmsMaterialCoilExportVos.stream().forEach(vo -> {
|
||||
@@ -2379,7 +2379,25 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
});
|
||||
return wmsMaterialCoilExportVos;
|
||||
}
|
||||
/**
|
||||
* 查询钢卷导出数据列表(完整版)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<WmsMaterialCoilAllExportVo> queryExportListAll(WmsMaterialCoilBo bo) {
|
||||
QueryWrapper<WmsMaterialCoil> lqw = buildQueryWrapperPlus(bo);
|
||||
List<WmsMaterialCoilExportVo> wmsMaterialCoilVos = baseMapper.selectExportList(lqw);
|
||||
List<WmsMaterialCoilAllExportVo> exportVoList = BeanUtil.copyToList(wmsMaterialCoilVos, WmsMaterialCoilAllExportVo.class);
|
||||
if (CollectionUtils.isNotEmpty(exportVoList)) {
|
||||
for (WmsMaterialCoilAllExportVo vo : exportVoList) {
|
||||
if (Objects.equals(vo.getDataType(), 0)) {
|
||||
vo.setActualWarehouseName(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return exportVoList;
|
||||
}
|
||||
/**
|
||||
* 发货报表导出:按 coilIds 查询钢卷 + 发货单明细/主表/计划联查数据
|
||||
*/
|
||||
@@ -2532,86 +2550,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建查询条件
|
||||
*/
|
||||
private QueryWrapper<WmsMaterialCoil> buildQueryWrapper(WmsMaterialCoilBo bo) {
|
||||
QueryWrapper<WmsMaterialCoil> lqw = Wrappers.query();
|
||||
|
||||
// 基础字段筛选
|
||||
lqw.eq(bo.getCoilId() != null, "mc.coil_id", bo.getCoilId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getEnterCoilNo()), "mc.enter_coil_no", bo.getEnterCoilNo());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCurrentCoilNo()), "mc.current_coil_no", bo.getCurrentCoilNo());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getSupplierCoilNo()), "mc.supplier_coil_no", bo.getSupplierCoilNo());
|
||||
lqw.eq(bo.getDataType() != null, "mc.data_type", bo.getDataType());
|
||||
lqw.eq(bo.getWarehouseId() != null, "mc.warehouse_id", bo.getWarehouseId());
|
||||
lqw.eq(bo.getActualWarehouseId() != null, "mc.actual_warehouse_id", bo.getActualWarehouseId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getItemType()), "mc.item_type", bo.getItemType());
|
||||
lqw.eq(bo.getHasMergeSplit() != null, "mc.has_merge_split", bo.getHasMergeSplit());
|
||||
// 修改itemId筛选逻辑,支持逗号分隔的多个ID查询
|
||||
if (StringUtils.isNotBlank(bo.getItemIds())) {
|
||||
String[] itemIdArray = bo.getItemIds().split(",");
|
||||
List<Long> itemIdList = new ArrayList<>();
|
||||
for (String itemIdStr : itemIdArray) {
|
||||
if (StringUtils.isNotBlank(itemIdStr)) {
|
||||
try {
|
||||
itemIdList.add(Long.parseLong(itemIdStr.trim()));
|
||||
} catch (NumberFormatException e) {
|
||||
// 忽略无效的ID格式
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!itemIdList.isEmpty()) {
|
||||
lqw.in("mc.item_id", itemIdList);
|
||||
}
|
||||
} else if (bo.getItemId() != null) {
|
||||
// 兼容原来的itemId单值查询
|
||||
lqw.eq("mc.item_id", bo.getItemId());
|
||||
}
|
||||
|
||||
// 添加coilIds查询条件,支持逗号分隔的多个coilId查询
|
||||
if (StringUtils.isNotBlank(bo.getCoilIds())) {
|
||||
String[] coilIdArray = bo.getCoilIds().split(",");
|
||||
List<Long> coilIdList = new ArrayList<>();
|
||||
for (String coilIdStr : coilIdArray) {
|
||||
if (StringUtils.isNotBlank(coilIdStr)) {
|
||||
try {
|
||||
coilIdList.add(Long.parseLong(coilIdStr.trim()));
|
||||
} catch (NumberFormatException e) {
|
||||
// 忽略无效的ID格式
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!coilIdList.isEmpty()) {
|
||||
lqw.in("mc.coil_id", coilIdList);
|
||||
}
|
||||
}
|
||||
lqw.eq(bo.getStatus() != null, "mc.status", bo.getStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getMaterialType()), "mc.material_type", bo.getMaterialType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getQualityStatus()), "mc.quality_status", bo.getQualityStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPackingStatus()), "mc.packing_status", bo.getPackingStatus());
|
||||
|
||||
// 把team字段作为筛选条件
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getTeam()), "mc.team", bo.getTeam());
|
||||
|
||||
// 根据开始时间和结束时间筛选修改时间
|
||||
lqw.ge(bo.getStartTime() != null, "mc.update_time", bo.getStartTime());
|
||||
lqw.le(bo.getEndTime() != null, "mc.update_time", bo.getEndTime());
|
||||
|
||||
// 根据发货开始和结束筛选发货时间
|
||||
lqw.ge(bo.getByExportTimeStart() != null, "mc.export_time", bo.getByExportTimeStart());
|
||||
lqw.le(bo.getByExportTimeEnd() != null, "mc.export_time", bo.getByExportTimeEnd());
|
||||
// 逻辑删除
|
||||
lqw.eq("mc.del_flag", 0);
|
||||
|
||||
// 根据创建时间倒序
|
||||
lqw.orderByDesc("mc.create_time");
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 批量更新钢卷发货状态
|
||||
*
|
||||
@@ -2846,11 +2784,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
|
||||
/**
|
||||
* 检查钢卷号是否重复
|
||||
* 根据入场钢卷号和当前钢卷号查询数据库,判断哪个钢卷号重复
|
||||
* 根据入场钢卷号、当前钢卷号和厂家原料卷号查询数据库,判断哪个钢卷号重复
|
||||
* 新增逻辑:修改历史记录时不检查重复
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> checkCoilNoDuplicate(Long coilId, String enterCoilNo, String currentCoilNo) {
|
||||
public Map<String, Object> checkCoilNoDuplicate(Long coilId, String enterCoilNo, String currentCoilNo, String supplierCoilNo) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
// 新增核心逻辑:先判断是否操作的是历史记录
|
||||
@@ -2862,12 +2800,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
result.put("duplicateType", "none");
|
||||
result.put("enterCoilNoDuplicate", false);
|
||||
result.put("currentCoilNoDuplicate", false);
|
||||
result.put("supplierCoilNoDuplicate", false);
|
||||
return result; // 直接返回,不执行后续检查
|
||||
}
|
||||
}
|
||||
|
||||
boolean enterCoilNoDuplicate = false;
|
||||
boolean currentCoilNoDuplicate = false;
|
||||
boolean supplierCoilNoDuplicate = false;
|
||||
|
||||
// 检查入场钢卷号是否重复
|
||||
if (StringUtils.isNotBlank(enterCoilNo)) {
|
||||
@@ -2898,14 +2838,31 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
currentCoilNoDuplicate = currentCount > 0;
|
||||
}
|
||||
|
||||
// 检查厂家原料卷号是否重复
|
||||
if (StringUtils.isNotBlank(supplierCoilNo)) {
|
||||
LambdaQueryWrapper<WmsMaterialCoil> supplierWrapper = Wrappers.lambdaQuery();
|
||||
supplierWrapper.eq(WmsMaterialCoil::getSupplierCoilNo, supplierCoilNo)
|
||||
.eq(WmsMaterialCoil::getDelFlag, 0)
|
||||
.eq(WmsMaterialCoil::getDataType, 1);
|
||||
// 如果是修改操作,排除自身
|
||||
if (coilId != null) {
|
||||
supplierWrapper.ne(WmsMaterialCoil::getCoilId, coilId);
|
||||
}
|
||||
|
||||
long supplierCount = baseMapper.selectCount(supplierWrapper);
|
||||
supplierCoilNoDuplicate = supplierCount > 0;
|
||||
}
|
||||
|
||||
// 判断重复类型
|
||||
String duplicateType;
|
||||
if (enterCoilNoDuplicate && currentCoilNoDuplicate) {
|
||||
if (enterCoilNoDuplicate && currentCoilNoDuplicate && supplierCoilNoDuplicate) {
|
||||
duplicateType = "both";
|
||||
} else if (enterCoilNoDuplicate) {
|
||||
duplicateType = "enter";
|
||||
} else if (currentCoilNoDuplicate) {
|
||||
duplicateType = "current";
|
||||
} else if (supplierCoilNoDuplicate) {
|
||||
duplicateType = "supplier";
|
||||
} else {
|
||||
duplicateType = "none";
|
||||
}
|
||||
@@ -2913,6 +2870,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
result.put("duplicateType", duplicateType);
|
||||
result.put("enterCoilNoDuplicate", enterCoilNoDuplicate);
|
||||
result.put("currentCoilNoDuplicate", currentCoilNoDuplicate);
|
||||
result.put("supplierCoilNoDuplicate", supplierCoilNoDuplicate);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -3272,6 +3230,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
actualWarehouseService.updateByBo(releaseBo);
|
||||
}
|
||||
|
||||
// 将被删除的合卷钢卷的二维码设置为失效
|
||||
if (currentCoil.getQrcodeRecordId() != null) {
|
||||
WmsGenerateRecordBo deleteQrBo = new WmsGenerateRecordBo();
|
||||
deleteQrBo.setRecordId(currentCoil.getQrcodeRecordId());
|
||||
deleteQrBo.setStatus(0); // 0=失效
|
||||
generateRecordService.updateByBo(deleteQrBo);
|
||||
}
|
||||
|
||||
// 删除当前合卷钢卷
|
||||
baseMapper.deleteById(currentCoil.getCoilId());
|
||||
|
||||
@@ -3390,6 +3356,13 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
releaseBo.setIsEnabled(1);
|
||||
actualWarehouseService.updateByBo(releaseBo);
|
||||
}
|
||||
// 将被删除的子钢卷的二维码设置为失效
|
||||
if (childCoil.getQrcodeRecordId() != null) {
|
||||
WmsGenerateRecordBo deleteQrBo = new WmsGenerateRecordBo();
|
||||
deleteQrBo.setRecordId(childCoil.getQrcodeRecordId());
|
||||
deleteQrBo.setStatus(0); // 0=失效
|
||||
generateRecordService.updateByBo(deleteQrBo);
|
||||
}
|
||||
baseMapper.deleteById(childCoil.getCoilId());
|
||||
}
|
||||
|
||||
@@ -3495,7 +3468,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
actualWarehouseService.updateByBo(releaseBo);
|
||||
}
|
||||
|
||||
// 2. 删除当前钢卷
|
||||
// 2. 将被删除的当前钢卷的二维码设置为失效
|
||||
if (currentCoil.getQrcodeRecordId() != null) {
|
||||
WmsGenerateRecordBo deleteQrBo = new WmsGenerateRecordBo();
|
||||
deleteQrBo.setRecordId(currentCoil.getQrcodeRecordId());
|
||||
deleteQrBo.setStatus(0); // 0=失效
|
||||
generateRecordService.updateByBo(deleteQrBo);
|
||||
}
|
||||
|
||||
// 3. 删除当前钢卷
|
||||
baseMapper.deleteById(currentCoil.getCoilId());
|
||||
|
||||
// 3. 删除操作记录
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<result property="statType" column="stat_type"/>
|
||||
<result property="statJson" column="stat_json"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="attachmentInfo" column="attachment_info"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
|
||||
@@ -373,10 +373,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
mc.current_coil_no AS currentCoilNo,
|
||||
-- 日期
|
||||
mc.create_time AS createTime,
|
||||
-- 班组
|
||||
mc.team AS team,
|
||||
-- 发货时间
|
||||
mc.export_time AS exportTime,
|
||||
-- 新增:更新时间(用于发货时间为空时兜底)
|
||||
mc.update_time AS updateTime,
|
||||
-- 发货人
|
||||
mc.export_by AS exportBy,
|
||||
-- 重量
|
||||
mc.net_weight AS netWeight,
|
||||
-- 长度
|
||||
|
||||
Reference in New Issue
Block a user