加入辅料备件
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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='备品备件变动记录表';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user