From 94c0a729da1b88ab4a0067f1e14a00264e0447cf Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期一, 15 十二月 2025 17:04:05 +0800
Subject: [PATCH] bom管理中空胶计算调整
---
north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue | 87 ++++++++++++++++++++++++++++++++++++-------
north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml | 14 +++++-
north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java | 4 +
3 files changed, 87 insertions(+), 18 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue b/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
index 2fdef27..7ecad75 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
@@ -478,6 +478,9 @@
selectOrderList()
}
+//鎬讳环
+const totalPriceSum = ref()
+
//椤甸潰璺宠浆鏇存柊鎴栬�呭垹闄よ鍗�
const getTableRow = (row,type) => {
switch (type) {
@@ -493,23 +496,82 @@
orderBomDetails.value=res.data.data
orderBomData.value.productName.forEach((product, i) => {
const details = orderBomDetails.value[i]?.data || []
+ const perimeter = Number(product.perimeter || 0)
+
+ // hollow锛氶噸绠� consume銆乵aterialPric
+ details.forEach(d => {
+ if (d.detail_type === 'hollow') {
+ const glueDepth = Number(d.glueDepth || 0)
+ const thickness = Number(d.thickness || 0)
+ const price = Number(d.price || 0)
+
+ // consume 淇濇寔涓烘暟瀛�
+ const consume = (glueDepth / 100) * (thickness / 100) * perimeter
+ d.consume = Number(consume.toFixed(2)) // 闇�瑕佷繚鐣�2浣嶅氨杞洖 number
+
+ // materialPric 涔熶繚鎸佷负鏁板瓧
+ d.materialPric = Number((d.consume * price).toFixed(2))
+ }
+ })
// 鐢熸垚 parts
const parts = product.product_name.split(/[*+]/)
parts.push("鍏跺畠")
product.product_parts = parts.map((p, idx) => {
- // 鎵惧嚭鎵�鏈� product_layer == idx+1 鐨� detail
- const assignedDetails = details.filter(d => d.product_layer === idx + 1)
-
- return {
- name: p,
- details: assignedDetails
- }
+ const assignedDetails = details.filter(d => Number(d.product_layer) === idx + 1)
+ return { name: p, details: assignedDetails }
})
- // 璁$畻鎬讳环
- product.totalPrice = details.reduce((sum, d) => sum + (d.materialPric || 0) , 0)
+
+ // 姣忎釜 product 鐨勬�讳环锛堜繚璇佹暟瀛楃浉鍔狅級
+ product.totalPrice = details.reduce(
+ (sum, d) => sum + Number(d.materialPric || 0),
+ 0
+ )
})
+
+ // 鎴愬搧鍚堣锛氫粠 details 姹囨��
+ const totalMap = new Map()
+
+ orderBomDetails.value.forEach(block => {
+ const details = block?.data || []
+ details.forEach(d => {
+ const consume = Number(d.consume || 0)
+ const price = Number(d.price || 0)
+ const key = `${Number(d.material_id)}|${String(d.detail_type || '')}|${price}`
+
+ if (!totalMap.has(key)) {
+ totalMap.set(key, {
+ material_id: d.material_id,
+ material: d.material,
+ detail_type: d.detail_type,
+ price,
+ unit: d.unit,
+ type: d.type,
+ consume: 0,
+ materialPrice: 0
+ })
+ }
+
+ const row = totalMap.get(key)
+ row.consume += consume
+ })
+ })
+
+ const totalSumDatilsData = Array.from(totalMap.values()).map(r => ({
+ ...r,
+ consume: Number(r.consume.toFixed(2)),
+ materialPrice: Number(r.materialPrice.toFixed(2))
+ }))
+
+ bomSum.value.sumDatilsData = totalSumDatilsData
+
+ // 姹囨�绘�婚噾棰�
+ totalPriceSum.value = orderBomData.value.productName.reduce(
+ (sum, p) => sum + Number(p.totalPrice || 0),
+ 0
+ )
+
dialogTableVisible.value = true
}
})
@@ -581,10 +643,7 @@
}
}
-//鎬讳环
-const totalPrice = computed(() => {
- return bomSum.value.sumDatilsData.reduce((sum, d) => sum + d.materialPrice, 0)
-})
+
</script>
<template>
@@ -729,7 +788,7 @@
<!-- footer -->
<template #footer>
- 鍚堣 楼{{ totalPrice }}
+ 鍚堣 楼{{ totalPriceSum }}
</template>
</el-card>
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java b/north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java
index 7d10a9d..77427d6 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java
@@ -71,8 +71,10 @@
Object produceId = row.get("produceId");
Object tabId = row.get("tabId");
Object layer = row.get("layer");
+ if (tabId!=null){
+ bomDataMapper.saveProductBOMMp(produceId,tabId,layer);
+ }
- bomDataMapper.saveProductBOMMp(produceId,tabId,layer);
}
}
}
diff --git a/north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml
index 86f0d35..abfe0af 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml
@@ -34,10 +34,14 @@
</select>
<select id="getBOMDetails">
- select bp.*,bb.*,(consume*price) as materialPric,od.quantity from sd.bom_product as bp
+ select bp.*,bb.*,(consume*price) as materialPric,od.quantity,pdd.detail_type,
+ IFNULL(JSON_UNQUOTE(JSON_EXTRACT(pdd.separation, '$.GlueDepth')),0) as glueDepth,
+ CAST(SUBSTRING_INDEX(IFNULL(JSON_UNQUOTE(JSON_EXTRACT(pdd.separation, '$.thickness')), '0mm'), 'mm', 1) AS DECIMAL(10, 2)) AS thickness
+ from sd.bom_product as bp
left join sd.bom_base as bb on bb.id=bp.base_id
left join ( select order_id,product_id,SUM(quantity) as quantity from sd.order_detail GROUP BY order_id,product_id
) as od on od.product_id = bp.product_id
+ left join sd.product_detail as pdd on pdd.prod_id = bp.product_id and pdd.sort_num = bp.product_layer
where bp.product_id = #{productId} and od.order_id = #{orderId} ORDER BY product_layer
</select>
@@ -57,14 +61,18 @@
sum(bb.consume) as consume,
sum(bb.price) as price,
sum(bb.consume * bb.price) AS materialPrice,
- od.quantity
+ od.quantity,
+ pdd.detail_type,
+ IFNULL( JSON_UNQUOTE( JSON_EXTRACT( pdd.separation, '$.GlueDepth' )), 0 ) AS glueDepth,
+ CAST(
+ SUBSTRING_INDEX( IFNULL( JSON_UNQUOTE( JSON_EXTRACT( pdd.separation, '$.thickness' )), '0mm' ), 'mm', 1 ) AS DECIMAL ( 10, 2 )) AS thickness
FROM
sd.bom_product AS bp
LEFT JOIN sd.bom_base AS bb ON bb.id = bp.base_id
LEFT JOIN (
select order_id,product_id,SUM(quantity) as quantity from sd.order_detail GROUP BY order_id,product_id
) as od on od.product_id = bp.product_id
-
+ LEFT JOIN sd.product_detail AS pdd ON pdd.prod_id = bp.product_id AND pdd.sort_num = bp.product_layer
WHERE od.order_id=#{orderId}
GROUP BY bb.material_id
ORDER BY bp.product_layer
--
Gitblit v1.8.0