加入辅料备件

This commit is contained in:
2026-01-20 15:20:19 +08:00
parent 9eceebb637
commit 5efe8c730c
6 changed files with 208 additions and 8 deletions

View File

@@ -104,6 +104,8 @@ public class EnergyCostReportController extends BaseController {
vo.setCurrentCoilNo(item.getCurrentCoilNo());
vo.setEnergyCost(item.getTotalEnergyCost());
vo.setStockCost(item.getStockCost());
vo.setAuxCost(item.getAuxCost());
vo.setSpareCost(item.getSpareCost());
vo.setTotalCost(item.getTotalCost());
return vo;
}).collect(Collectors.toList());

View File

@@ -25,10 +25,17 @@ public class CoilTotalCostVo implements Serializable {
private Double totalEnergyCost;
/** 囤积成本(当日/按 stock 计算) */
private Double stockCost;
/** 辅料成本 */
private Double auxCost;
/** 备件成本 */
private Double spareCost;
/** 净重 */
private Double totalNetWeight;
/** 毛重 */
private Double totalGrossWeight;
/** 总成本(能源+囤积) */
/** 总成本(能源+囤积+辅料+备件 */
private Double totalCost;
}

View File

@@ -23,6 +23,12 @@ public class CoilTotalMergedExportVo implements Serializable {
@ExcelProperty("囤积成本")
private Double stockCost;
@ExcelProperty("辅料成本")
private Double auxCost;
@ExcelProperty("备件成本")
private Double spareCost;
@ExcelProperty("总成本")
private Double totalCost;
}

View File

@@ -40,9 +40,11 @@
e.total_consumption AS totalConsumption,
e.energy_cost AS totalEnergyCost,
IFNULL(s.stock_cost, 0) AS stockCost,
IFNULL(x.aux_cost, 0) AS auxCost,
IFNULL(x.spare_cost, 0) AS spareCost,
IFNULL(s.total_net_weight, 0) AS totalNetWeight,
IFNULL(s.total_gross_weight, 0) AS totalGrossWeight,
(IFNULL(e.energy_cost, 0) + IFNULL(s.stock_cost, 0)) AS totalCost
(IFNULL(e.energy_cost, 0) + IFNULL(s.stock_cost, 0) + IFNULL(x.aux_cost, 0) + IFNULL(x.spare_cost, 0)) AS totalCost
FROM (
SELECT enter_coil_no FROM (
SELECT DISTINCT c.enter_coil_no
@@ -222,6 +224,82 @@
</if>
GROUP BY m.enter_coil_no
) s ON aid.enter_coil_no = s.enter_coil_no
LEFT JOIN (
SELECT
dm.enter_coil_no,
SUM(
CASE
WHEN dm.total_minutes > 0
THEN IFNULL(a.aux_amount, 0) * (dm.coil_minutes / dm.total_minutes)
ELSE 0
END
) AS aux_cost,
SUM(
CASE
WHEN dm.total_minutes > 0
THEN IFNULL(p.spare_amount, 0) * (dm.coil_minutes / dm.total_minutes)
ELSE 0
END
) AS spare_cost
FROM (
SELECT
DATE(pa.create_time) AS day_key,
c.enter_coil_no,
SUM(
CASE
WHEN pa.create_time < COALESCE(pa.complete_time, NOW())
THEN TIMESTAMPDIFF(MINUTE, pa.create_time, COALESCE(pa.complete_time, NOW()))
ELSE 0
END
) AS coil_minutes,
td.total_minutes
FROM wms_coil_pending_action pa
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
LEFT JOIN (
SELECT
DATE(pa_all.create_time) AS day_key,
SUM(
CASE
WHEN pa_all.create_time < COALESCE(pa_all.complete_time, NOW())
THEN TIMESTAMPDIFF(MINUTE, pa_all.create_time, COALESCE(pa_all.complete_time, NOW()))
ELSE 0
END
) AS total_minutes
FROM wms_coil_pending_action pa_all
WHERE pa_all.action_status IN (0,1,2)
AND pa_all.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa_all.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa_all.create_time)
) td ON td.day_key = DATE(pa.create_time)
WHERE pa.action_status IN (0,1,2)
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa.create_time), c.enter_coil_no, td.total_minutes
) dm
LEFT JOIN (
SELECT
DATE(change_time) AS day_key,
SUM(IFNULL(amount, 0)) AS aux_amount
FROM eqp_auxiliary_material_change
WHERE del_flag = '0'
AND change_type = '减少'
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(change_time)
) a ON dm.day_key = a.day_key
LEFT JOIN (
SELECT
DATE(change_time) AS day_key,
SUM(IFNULL(amount, 0)) AS spare_amount
FROM eqp_spare_parts_change
WHERE del_flag = '0'
AND change_type = '减少'
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(change_time)
) p ON dm.day_key = p.day_key
GROUP BY dm.enter_coil_no
) x ON aid.enter_coil_no = x.enter_coil_no
ORDER BY totalCost DESC
LIMIT #{offset}, #{pageSize}
</select>
@@ -278,9 +356,11 @@
e.total_consumption AS totalConsumption,
e.energy_cost AS totalEnergyCost,
IFNULL(s.stock_cost, 0) AS stockCost,
IFNULL(x.aux_cost, 0) AS auxCost,
IFNULL(x.spare_cost, 0) AS spareCost,
IFNULL(s.total_net_weight, 0) AS totalNetWeight,
IFNULL(s.total_gross_weight, 0) AS totalGrossWeight,
(IFNULL(e.energy_cost, 0) + IFNULL(s.stock_cost, 0)) AS totalCost
(IFNULL(e.energy_cost, 0) + IFNULL(s.stock_cost, 0) + IFNULL(x.aux_cost, 0) + IFNULL(x.spare_cost, 0)) AS totalCost
FROM (
SELECT enter_coil_no FROM (
SELECT DISTINCT c.enter_coil_no
@@ -412,6 +492,82 @@
AND m.del_flag = 0
GROUP BY m.enter_coil_no
) s ON aid.enter_coil_no = s.enter_coil_no
LEFT JOIN (
SELECT
dm.enter_coil_no,
SUM(
CASE
WHEN dm.total_minutes > 0
THEN IFNULL(a.aux_amount, 0) * (dm.coil_minutes / dm.total_minutes)
ELSE 0
END
) AS aux_cost,
SUM(
CASE
WHEN dm.total_minutes > 0
THEN IFNULL(p.spare_amount, 0) * (dm.coil_minutes / dm.total_minutes)
ELSE 0
END
) AS spare_cost
FROM (
SELECT
DATE(pa.create_time) AS day_key,
c.enter_coil_no,
SUM(
CASE
WHEN pa.create_time < COALESCE(pa.complete_time, NOW())
THEN TIMESTAMPDIFF(MINUTE, pa.create_time, COALESCE(pa.complete_time, NOW()))
ELSE 0
END
) AS coil_minutes,
td.total_minutes
FROM wms_coil_pending_action pa
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
LEFT JOIN (
SELECT
DATE(pa_all.create_time) AS day_key,
SUM(
CASE
WHEN pa_all.create_time < COALESCE(pa_all.complete_time, NOW())
THEN TIMESTAMPDIFF(MINUTE, pa_all.create_time, COALESCE(pa_all.complete_time, NOW()))
ELSE 0
END
) AS total_minutes
FROM wms_coil_pending_action pa_all
WHERE pa_all.action_status IN (0,1,2)
AND pa_all.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa_all.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa_all.create_time)
) td ON td.day_key = DATE(pa.create_time)
WHERE pa.action_status IN (0,1,2)
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa.create_time), c.enter_coil_no, td.total_minutes
) dm
LEFT JOIN (
SELECT
DATE(change_time) AS day_key,
SUM(IFNULL(amount, 0)) AS aux_amount
FROM eqp_auxiliary_material_change
WHERE del_flag = '0'
AND change_type = '减少'
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(change_time)
) a ON dm.day_key = a.day_key
LEFT JOIN (
SELECT
DATE(change_time) AS day_key,
SUM(IFNULL(amount, 0)) AS spare_amount
FROM eqp_spare_parts_change
WHERE del_flag = '0'
AND change_type = '减少'
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(change_time)
) p ON dm.day_key = p.day_key
GROUP BY dm.enter_coil_no
) x ON aid.enter_coil_no = x.enter_coil_no
ORDER BY totalCost DESC
</select>

View File

@@ -39,15 +39,15 @@
<el-col :xs="24" :md="6">
<div class="summary-card">
<div class="label">辅料成本</div>
<div class="value">¥ 0.00</div>
<div class="desc">暂不计</div>
<div class="value">¥ {{ formatNumber(materialSummary.auxCost, 2) }}</div>
<div class="desc">备件 ¥ {{ formatNumber(materialSummary.spareCost, 2) }}</div>
</div>
</el-col>
<el-col :xs="24" :md="6">
<div class="summary-card highlight">
<div class="label">总成本</div>
<div class="value">¥ {{ formatNumber(totalCost, 2) }}</div>
<div class="desc">能源 + 囤积 + 辅料</div>
<div class="desc">能源 + 囤积 + 辅料 + 备件</div>
</div>
</el-col>
</el-row>
@@ -65,6 +65,12 @@
<el-table-column prop="stockCost" label="囤积成本(当日)">
<template slot-scope="scope">¥ {{ formatNumber(scope.row.stockCost, 2) }}</template>
</el-table-column>
<el-table-column prop="auxCost" label="辅料成本">
<template slot-scope="scope">¥ {{ formatNumber(scope.row.auxCost, 2) }}</template>
</el-table-column>
<el-table-column prop="spareCost" label="备件成本">
<template slot-scope="scope">¥ {{ formatNumber(scope.row.spareCost, 2) }}</template>
</el-table-column>
<el-table-column prop="totalCost" label="总成本">
<template slot-scope="scope">¥ {{ formatNumber(scope.row.totalCost, 2) }}</template>
</el-table-column>
@@ -192,6 +198,10 @@ export default {
totalNetWeight: 0,
totalGrossWeight: 0
},
materialSummary: {
auxCost: 0,
spareCost: 0
},
energyLoading: false,
stockLoading: false,
detailVisible: false,
@@ -204,7 +214,9 @@ export default {
totalCost() {
const energy = Number(this.energySummary.totalEnergyCost) || 0
const stock = Number(this.stockSummary.todayCost ?? this.stockSummary.totalCost) || 0
return energy + stock
const aux = Number(this.materialSummary.auxCost) || 0
const spare = Number(this.materialSummary.spareCost) || 0
return energy + stock + aux + spare
}
},
mounted() {
@@ -246,6 +258,12 @@ export default {
fetchCoilTotalMerged(params).then(res => {
this.mergedRows = res.rows || []
this.mergedTotal = res.total || 0
const rows = this.mergedRows || []
this.materialSummary = {
auxCost: rows.reduce((sum, r) => sum + (Number(r.auxCost) || 0), 0),
spareCost: rows.reduce((sum, r) => sum + (Number(r.spareCost) || 0), 0)
}
})
},
loadEnergy() {

View File

@@ -11,6 +11,8 @@ CREATE TABLE `eqp_auxiliary_material` (
`unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '计量单位',
`equipment_id` bigint NULL DEFAULT NULL COMMENT '关联设备ID可为空通用辅料',
`quantity` int NULL DEFAULT 0 COMMENT '当前库存数量',
`unit_price` decimal(18, 6) NULL DEFAULT 0 COMMENT '当前移动加权平均单价',
`total_amount` decimal(18, 2) NULL DEFAULT 0 COMMENT '当前库存总金额(可冗余,= quantity * unit_price',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建者',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新者',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -30,6 +32,9 @@ CREATE TABLE `eqp_auxiliary_material_change` (
`auxiliary_id` bigint NOT NULL COMMENT '关联辅料ID',
`change_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变动类型(增加/减少)',
`change_quantity` int NOT NULL COMMENT '变动数量',
`in_unit_price` decimal(18, 6) NULL DEFAULT NULL COMMENT '入库单价(仅增加时有意义)',
`unit_price_snapshot` decimal(18, 6) NULL DEFAULT NULL COMMENT '单价快照(减少时必填,增加时可记录入库后单价)',
`amount` decimal(18, 2) NULL DEFAULT NULL COMMENT '本次变动金额(建议减少时=unit_price_snapshot*change_quantity',
`reason` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '变动原因',
`change_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '变动时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建者',
@@ -53,6 +58,8 @@ CREATE TABLE `eqp_spare_part` (
`unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '计量单位',
`equipment_id` bigint DEFAULT NULL COMMENT '关联设备ID可为空通用备件',
`quantity` int DEFAULT '0' COMMENT '当前库存数量',
`unit_price` decimal(18, 6) NULL DEFAULT 0 COMMENT '当前移动加权平均单价',
`total_amount` decimal(18, 2) NULL DEFAULT 0 COMMENT '当前库存总金额(可冗余,= quantity * unit_price',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建者',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新者',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -70,6 +77,9 @@ CREATE TABLE `eqp_spare_parts_change` (
`part_id` bigint NOT NULL COMMENT '关联备件ID',
`change_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变动类型(增加/减少)',
`change_quantity` int NOT NULL COMMENT '变动数量',
`in_unit_price` decimal(18, 6) NULL DEFAULT NULL COMMENT '入库单价(仅增加时有意义)',
`unit_price_snapshot` decimal(18, 6) NULL DEFAULT NULL COMMENT '单价快照(减少时必填,增加时可记录入库后单价)',
`amount` decimal(18, 2) NULL DEFAULT NULL COMMENT '本次变动金额(建议减少时=unit_price_snapshot*change_quantity',
`reason` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变动原因',
`change_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '变动时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建者',
@@ -80,4 +90,5 @@ CREATE TABLE `eqp_spare_parts_change` (
`remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '备注',
PRIMARY KEY (`change_id`) USING BTREE,
KEY `fk_change_part` (`part_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1980201774324969474 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='备品备件变动记录表';
) ENGINE=InnoDB AUTO_INCREMENT=1980201774324969474 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='备品备件变动记录表';