feat(成品库存管理 和 子卷包装):

- 修复子卷包装 未按查询时间进行导出问题。
- 移除导出功能断点
- 修复WQL查询语句中的字段引用错误。
- 物性字段拆分功能,兼容历史数据。
- 添加新的物性值字段映射,包括客户要求规格幅宽。
This commit is contained in:
yangyufu
2026-02-11 16:21:07 +08:00
parent 9bddcd1638
commit 0ed95fb435
4 changed files with 223 additions and 9 deletions

View File

@@ -389,7 +389,8 @@ public class StructivtServiceImpl implements StructivtService {
}
mp.put("库龄", json.getString("stock_age"));
mp.put("生产时长", json.getString("produce_age"));
mp.put("产品规格幅宽", json.getString("width"));
mp.put("产品实际规格幅宽", json.getString("width"));
mp.put("客户要求规格幅宽", json.getString("width_standard"));
mp.put("产品厚度", json.getString("thickness"));
mp.put("单位面积重量", json.getString("mass_per_unit_area"));
mp.put("净重", json.getString("net_weight"));
@@ -397,7 +398,20 @@ public class StructivtServiceImpl implements StructivtService {
mp.put("长度", json.getString("length"));
mp.put("接头数", json.getString("joint_type"));
mp.put("计划外分切的子卷", json.getString("is_un_plan_production"));
mp.put("子卷的物性值1", json.getString("un_plan_product_property1"));
String unPlanProductProperty1 = json.getString("un_plan_product_property1");
mp.put("子卷的物性值1", unPlanProductProperty1);
Object parsedData = parseJsonData(unPlanProductProperty1);
if (parsedData instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) parsedData;
if (!jsonArray.isEmpty()) {
JSONObject firstItem = jsonArray.getJSONObject(0);
buildMap(mp, firstItem,true);
}else{
buildMap(mp, null,false);
}
}else {
buildMap(mp, null,false);
}
mp.put("子卷的物性值2", json.getString("un_plan_product_property2"));
mp.put("子卷的物性值3", json.getString("un_plan_product_property3"));
if ("1".equals(json.getString("remark"))) {
@@ -412,7 +426,6 @@ public class StructivtServiceImpl implements StructivtService {
mp.put("是否管控", json.getString("lock_type").equals("88") ? "" : "");
mp.put("是否需要重打外包装标签", json.getString("isreprintpackageboxlabel"));
mp.put("是否需要拆包重打子卷标签", json.getString("isunpackbox"));
mp.put("客户要求规格幅宽", json.getString("width_standard"));
mp.put("物料标准厚度", json.getString("thickness_request"));
mp.put("管件类型", json.getString("paper_type"));
mp.put("管件编码", json.getString("paper_code"));
@@ -422,6 +435,94 @@ public class StructivtServiceImpl implements StructivtService {
FileUtil.downloadExcel(list, response);
}
/**
* @description: 如果是jsonObject 格式,则进行数据封装
**/
public void buildMap(Map<String, Object> map, JSONObject data,boolean flag){
//为了兼容历史数据导出
if(!flag){
map.put("厚度/μm", "");
map.put("单位面积质量/g/m²", "");
map.put("单位面积质量极差/g/m²", "");
map.put("拉伸强度/Mpa", "");
map.put("(高温拉伸强度/Mpa", "");
map.put("延伸率/%", "");
map.put("高温拉伸强度/Mpa", "");
map.put("S面粗糙度Ra/μm", "");
map.put("M面粗糙度Rz/μm", "");
map.put("M面光泽度/GU", "");
map.put("铜箔卷曲高度/mm", "");
map.put("铬含量/ppm", "");
map.put("抗氧化性能/150℃|10min", "");
map.put("抗氧化性能/213℃30min", "");
map.put("表面能/mN/m", "");
map.put("剥离强度/N/mm", "");
map.put("铜粉(一级、二级、三级)", "");
map.put("可焊性", "");
return;
}
//厚度/μm、
map.put("厚度/μm",StrUtil.isNotBlank(data.getString("厚度/μm")) ? data.getString("厚度/μm") : "");
//单位面积质量/g/m²、
map.put("单位面积质量/g/m²",StrUtil.isNotBlank(data.getString("单位面积质量/g/m²")) ? data.getString("单位面积质量/g/m²") : "");
//单位面积质量极差/g/m²、
map.put("单位面积质量极差/g/m²",StrUtil.isNotBlank(data.getString("单位面积质量极差/g/m²")) ? data.getString("单位面积质量极差/g/m²") : "");
//抗拉强度/Mpa
map.put("抗拉强度/Mpa",StrUtil.isNotBlank(data.getString("抗拉强度/Mpa")) ? data.getString("抗拉强度/Mpa") : "");
//(高温拉伸强度/Mpa
map.put("高温拉伸强度/Mpa",StrUtil.isNotBlank(data.getString("高温拉伸强度/Mpa")) ? data.getString("高温拉伸强度/Mpa") : "");
//延伸率/%
map.put("延伸率/%",StrUtil.isNotBlank(data.getString("延伸率/%")) ? data.getString("延伸率/%") : "");
// (高温延伸率/%
map.put("(高温延伸率/%",StrUtil.isNotBlank(data.getString("(高温延伸率/%")) ? data.getString("(高温延伸率/%") : "");
//S面粗糙度Ra/μm
map.put("S面粗糙度Ra/μm",StrUtil.isNotBlank(data.getString("S面粗糙度Ra/μm")) ? data.getString("S面粗糙度Ra/μm") : "");
//M面粗糙度Rz/μm
map.put("M面粗糙度Rz/μm",StrUtil.isNotBlank(data.getString("M面粗糙度Rz/μm")) ? data.getString("M面粗糙度Rz/μm") : "");
//M面光泽度/GU
map.put("M面光泽度/GU",StrUtil.isNotBlank(data.getString("M面光泽度/GU")) ? data.getString("M面光泽度/GU") : "");
//铜箔卷曲高度/mm
map.put("铜箔卷曲高度/mm",StrUtil.isNotBlank(data.getString("铜箔卷曲高度/mm")) ? data.getString("铜箔卷曲高度/mm") : "");
//铬含量/ppm
map.put("铬含量/ppm",StrUtil.isNotBlank(data.getString("铬含量/ppm")) ? data.getString("铬含量/ppm") : "");
//抗氧化性能/150℃|10min
map.put("抗氧化性能/150℃|10min",StrUtil.isNotBlank(data.getString("抗氧化性能/150℃|10min")) ? data.getString("抗氧化性能/150℃|10min") : "");
// 抗氧化性能/213℃30min
map.put("抗氧化性能/213℃30min",StrUtil.isNotBlank(data.getString("抗氧化性能/213℃30min")) ? data.getString("抗氧化性能/213℃30min") : "");
//表面能/mN/m
map.put("表面能/mN/m",StrUtil.isNotBlank(data.getString("表面能/mN/m")) ? data.getString("表面能/mN/m") : "");
// 剥离强度/N/mm
map.put("剥离强度/N/mm",StrUtil.isNotBlank(data.getString("剥离强度/N/mm")) ? data.getString("剥离强度/N/mm") : "");
//铜粉(一级、二级、三级)
map.put("铜粉(一级、二级、三级)",StrUtil.isNotBlank(data.getString("铜粉(一级、二级、三级)")) ? data.getString("铜粉(一级、二级、三级)") : "");
//可焊性
map.put("可焊性",StrUtil.isNotBlank(data.getString("可焊性")) ? data.getString("可焊性") : "");
};
public static Object parseJsonData(String jsonData) {
if (isValidArray(jsonData)) {
// 返回 JSONArray
return JSON.parseArray(jsonData);
} else {
// 返回原始字符串
return jsonData;
}
}
/**
* @description: 判断是否为数组
* @author ManMan.Yang
* @date: 2026/2/11 11:49
**/
public static boolean isValidArray(String jsonData) {
try {
JSONArray array = JSON.parseArray(jsonData);
// 如果解析成功且不为 null则是有效数组
return array != null;
} catch (Exception e) {
// 解析失败则不是有效数组
return false;
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(JSONObject whereJson) {

View File

@@ -272,7 +272,22 @@ public class SubpackagerelationServiceImpl implements SubpackagerelationService
mp.put("入库日期", json.getString("date_of_fg_inbound"));
mp.put("木箱自身重量", json.getString("box_weight"));
mp.put("保质期", json.getString("quality_guaran_period"));
mp.put("子卷的物性值1", json.getString("un_plan_product_property1"));
String unPlanProductProperty1 = json.getString("un_plan_product_property1");
mp.put("子卷的物性值1", unPlanProductProperty1);
Object parsedData = parseJsonData(unPlanProductProperty1);
if (parsedData instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) parsedData;
if (!jsonArray.isEmpty()) {
// 获取第一个元素
JSONObject firstItem = jsonArray.getJSONObject(0);
// 动态遍历 JSONObject 的所有键值对
buildMap(mp, firstItem,true);
}else{
buildMap(mp, null,false);
}
}else {
buildMap(mp, null,false);
}
mp.put("子卷的物性值2", json.getString("un_plan_product_property2"));
mp.put("子卷的物性值3", json.getString("un_plan_product_property3"));
mp.put("木箱料号", json.getString("box_type"));
@@ -292,4 +307,94 @@ public class SubpackagerelationServiceImpl implements SubpackagerelationService
FileUtil.downloadExcel(list, response);
}
/**
* @description: 如果是jsonObject 格式,则进行数据封装
* @author ManMan.Yang
* @date: 2026/2/11 13:32
**/
public void buildMap(Map<String, Object> map, JSONObject data,boolean flag){
//为了兼容历史数据导出
if(!flag){
map.put("厚度/μm", "");
map.put("单位面积质量/g/m²", "");
map.put("单位面积质量极差/g/m²", "");
map.put("拉伸强度/Mpa", "");
map.put("(高温拉伸强度/Mpa", "");
map.put("延伸率/%", "");
map.put("高温拉伸强度/Mpa", "");
map.put("S面粗糙度Ra/μm", "");
map.put("M面粗糙度Rz/μm", "");
map.put("M面光泽度/GU", "");
map.put("铜箔卷曲高度/mm", "");
map.put("铬含量/ppm", "");
map.put("抗氧化性能/150℃|10min", "");
map.put("抗氧化性能/213℃30min", "");
map.put("表面能/mN/m", "");
map.put("剥离强度/N/mm", "");
map.put("铜粉(一级、二级、三级)", "");
map.put("可焊性", "");
return;
}
//厚度/μm、
map.put("厚度/μm",StrUtil.isNotBlank(data.getString("厚度/μm")) ? data.getString("厚度/μm") : "");
//单位面积质量/g/m²、
map.put("单位面积质量/g/m²",StrUtil.isNotBlank(data.getString("单位面积质量/g/m²")) ? data.getString("单位面积质量/g/m²") : "");
//单位面积质量极差/g/m²、
map.put("单位面积质量极差/g/m²",StrUtil.isNotBlank(data.getString("单位面积质量极差/g/m²")) ? data.getString("单位面积质量极差/g/m²") : "");
//抗拉强度/Mpa
map.put("抗拉强度/Mpa",StrUtil.isNotBlank(data.getString("抗拉强度/Mpa")) ? data.getString("抗拉强度/Mpa") : "");
//(高温拉伸强度/Mpa
map.put("高温拉伸强度/Mpa",StrUtil.isNotBlank(data.getString("高温拉伸强度/Mpa")) ? data.getString("高温拉伸强度/Mpa") : "");
//延伸率/%
map.put("延伸率/%",StrUtil.isNotBlank(data.getString("延伸率/%")) ? data.getString("延伸率/%") : "");
// (高温延伸率/%
map.put("(高温延伸率/%",StrUtil.isNotBlank(data.getString("(高温延伸率/%")) ? data.getString("(高温延伸率/%") : "");
//S面粗糙度Ra/μm
map.put("S面粗糙度Ra/μm",StrUtil.isNotBlank(data.getString("S面粗糙度Ra/μm")) ? data.getString("S面粗糙度Ra/μm") : "");
//M面粗糙度Rz/μm
map.put("M面粗糙度Rz/μm",StrUtil.isNotBlank(data.getString("M面粗糙度Rz/μm")) ? data.getString("M面粗糙度Rz/μm") : "");
//M面光泽度/GU
map.put("M面光泽度/GU",StrUtil.isNotBlank(data.getString("M面光泽度/GU")) ? data.getString("M面光泽度/GU") : "");
//铜箔卷曲高度/mm
map.put("铜箔卷曲高度/mm",StrUtil.isNotBlank(data.getString("铜箔卷曲高度/mm")) ? data.getString("铜箔卷曲高度/mm") : "");
//铬含量/ppm
map.put("铬含量/ppm",StrUtil.isNotBlank(data.getString("铬含量/ppm")) ? data.getString("铬含量/ppm") : "");
//抗氧化性能/150℃|10min
map.put("抗氧化性能/150℃|10min",StrUtil.isNotBlank(data.getString("抗氧化性能/150℃|10min")) ? data.getString("抗氧化性能/150℃|10min") : "");
// 抗氧化性能/213℃30min
map.put("抗氧化性能/213℃30min",StrUtil.isNotBlank(data.getString("抗氧化性能/213℃30min")) ? data.getString("抗氧化性能/213℃30min") : "");
//表面能/mN/m
map.put("表面能/mN/m",StrUtil.isNotBlank(data.getString("表面能/mN/m")) ? data.getString("表面能/mN/m") : "");
// 剥离强度/N/mm
map.put("剥离强度/N/mm",StrUtil.isNotBlank(data.getString("剥离强度/N/mm")) ? data.getString("剥离强度/N/mm") : "");
//铜粉(一级、二级、三级)
map.put("铜粉(一级、二级、三级)",StrUtil.isNotBlank(data.getString("铜粉(一级、二级、三级)")) ? data.getString("铜粉(一级、二级、三级)") : "");
//可焊性
map.put("可焊性",StrUtil.isNotBlank(data.getString("可焊性")) ? data.getString("可焊性") : "");
};
public static Object parseJsonData(String jsonData) {
if (isValidArray(jsonData)) {
// 返回 JSONArray
return JSON.parseArray(jsonData);
} else {
// 返回原始字符串
return jsonData;
}
}
/**
* @description: 判断是否为数组
* @author ManMan.Yang
* @date: 2026/2/11 11:49
**/
public static boolean isValidArray(String jsonData) {
try {
JSONArray array = JSON.parseArray(jsonData);
// 如果解析成功且不为 null则是有效数组
return array != null;
} catch (Exception e) {
// 解析失败则不是有效数组
return false;
}
}
}

View File

@@ -299,11 +299,11 @@
ENDOPTION
OPTION 输入.begin_time <> ""
sub.date_of_FG_inbound>= 输入.begin_time
date_of_FG_inbound>= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
sub.date_of_FG_inbound <= 输入.end_time
date_of_FG_inbound <= 输入.end_time
ENDOPTION
OPTION 输入.status <> ""

View File

@@ -62,6 +62,7 @@
>
<el-option
v-for="item in isPlanProducList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
@@ -98,6 +99,7 @@
>
<el-option
v-for="item in dict.sub_package_relation"
:key="item.value"
:label="item.label"
:value="item.value"
/>
@@ -144,6 +146,7 @@
>
<el-option
v-for="item in typeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
@@ -798,9 +801,7 @@ import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { download } from '@/api/data'
import { downloadFile } from '@/utils'
import crudUserStor from '@/views/wms/basedata/st/userStor/userStor'
import crudPastivtquery from '@/views/wms/stat/pastivt/pastivtquery'
import { format } from 'date-fns'
const defaultForm = {
workorder_id: null,
@@ -944,6 +945,14 @@ export default {
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
const rangeTime = this.query.createTime
if (rangeTime && Array.isArray(rangeTime) && rangeTime.length === 2) {
this.query.begin_time = this.query.createTime[0]
this.query.end_time = this.query.createTime[1]
} else {
this.query.begin_time = null
this.query.end_time = null
}
return true
},
toView(data) {
@@ -1002,7 +1011,6 @@ export default {
if (this.currentRow !== null) {
this.showDtlLoading = true
download('/api/subpackagerelation/download', this.crud.query).then(result => {
debugger
downloadFile(result, '子卷包装', 'xlsx')
this.showDtlLoading = false
}).catch(() => {