feat(hwmom-mes): 新增良率汇总与趋势分析接口新增以下两个报表功能:

- 良率汇总(按机台):统计各机台的总产量、合格数、不良数及良率,并按良率排序。
- 良率趋势(日维度):按日期统计每日的产量、合格数、不良数及良率变化趋势。涉及文件:
- IProdReportService.java:新增接口定义- ProdReportController.java:新增控制器方法
- ProdReportMapper.java:新增 Mapper 接口- ProdReportMapper.xml:新增 SQL 查询语句- ProdReportServiceImpl.java:实现新增接口逻辑
master
zangch@mesnac.com 3 months ago
parent c0830a46d6
commit 4d14ea4268

@ -104,4 +104,22 @@ public class ProdReportController extends BaseController {
return R.ok(vos);
}
/**
*
*/
@GetMapping("/yieldSummaryByMachine")
public R<List<HashMap<String, Object>>> yieldSummaryByMachine(@RequestParam(required = false) Map hashMap) {
List<HashMap<String, Object>> vos = prodReportService.yieldSummaryByMachine(hashMap);
return R.ok(vos);
}
/**
*
*/
@GetMapping("/yieldTrendByDate")
public R<List<HashMap<String, Object>>> yieldTrendByDate(@RequestParam(required = false) Map hashMap) {
List<HashMap<String, Object>> vos = prodReportService.yieldTrendByDate(hashMap);
return R.ok(vos);
}
}

@ -62,4 +62,18 @@ public interface ProdReportMapper {
*/
List<HashMap<String, Object>> designDailyOutputInformation(@Param("map") Map hashMap, @Param("tableName") String tableName);
/**
*
* @param hashMap
* @return
*/
List<HashMap<String, Object>> yieldSummaryByMachine(@Param("map") Map hashMap);
/**
*
* @param hashMap
* @return
*/
List<HashMap<String, Object>> yieldTrendByDate(@Param("map") Map hashMap);
}

@ -58,4 +58,17 @@ public interface IProdReportService {
*/
List<HashMap<String, Object>> designDailyOutputInformation(Map hashMap);
}
/**
*
* @param hashMap
* @return */
List<HashMap<String, Object>> yieldSummaryByMachine(Map hashMap);
/**
*
* @param hashMap
* @return
*/
List<HashMap<String, Object>> yieldTrendByDate(Map hashMap);
}

@ -131,4 +131,20 @@ public class ProdReportServiceImpl implements IProdReportService {
return prodReportMapper.designDailyOutputInformation(hashMap, tableName);
}
/**
*
*/
@Override
public List<HashMap<String, Object>> yieldSummaryByMachine(Map hashMap) {
return prodReportMapper.yieldSummaryByMachine(hashMap);
}
/**
*
*/
@Override
public List<HashMap<String, Object>> yieldTrendByDate(Map hashMap) {
return prodReportMapper.yieldTrendByDate(hashMap);
}
}

@ -117,4 +117,62 @@
ORDER BY productionDate
</select>
<select id="yieldSummaryByMachine" resultType="java.util.HashMap">
SELECT bm.machine_name AS machineName,
COUNT(1) AS totalCount,
SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) AS okCount,
SUM(CASE WHEN t.scan_result IS NULL THEN 0 WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 0 ELSE 1 END) AS ngCount,
CAST(IIF(COUNT(1) = 0, 0, (SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) * 100.0 / COUNT(1))) AS DECIMAL(10,2)) AS yieldRateNum,
CONCAT(CAST(IIF(COUNT(1) = 0, 0, (SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) * 100.0 / COUNT(1))) AS DECIMAL(10,2)), '%') AS yieldRate
FROM prod_output_scan_info t
LEFT JOIN prod_base_machine_info bm ON bm.machine_id = t.machine_id
LEFT JOIN prod_base_process_info pi ON pi.process_id = t.process_id
LEFT JOIN base_material_info bmi ON bmi.material_id = t.materiel_id
<where>
<if test="map.beginDate != null and map.beginDate != '' and map.endDate != null and map.endDate != ''">
AND FORMAT(t.create_time, 'yyyy-MM-dd') BETWEEN #{map.beginDate} AND #{map.endDate}
</if>
<if test="map.processId != null and map.processId != ''">
AND t.process_id = #{map.processId}
</if>
<if test="map.machineId != null and map.machineId != ''">
AND t.machine_id = #{map.machineId}
</if>
<if test="map.materialName != null and map.materialName != ''">
AND bmi.material_name LIKE CONCAT('%', #{map.materialName}, '%')
</if>
</where>
GROUP BY bm.machine_name
ORDER BY yieldRateNum DESC, machineName
</select>
<select id="yieldTrendByDate" resultType="java.util.HashMap">
SELECT CONVERT(DATE, t.create_time) AS productionDate,
COUNT(1) AS totalCount,
SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) AS okCount,
SUM(CASE WHEN t.scan_result IS NULL THEN 0 WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 0 ELSE 1 END) AS ngCount,
CAST(IIF(COUNT(1) = 0, 0, (SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) * 100.0 / COUNT(1))) AS DECIMAL(10,2)) AS yieldRateNum,
CONCAT(CAST(IIF(COUNT(1) = 0, 0, (SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) * 100.0 / COUNT(1))) AS DECIMAL(10,2)), '%') AS yieldRate
FROM prod_output_scan_info t
LEFT JOIN prod_base_machine_info bm ON bm.machine_id = t.machine_id
LEFT JOIN prod_base_process_info pi ON pi.process_id = t.process_id
LEFT JOIN base_material_info bmi ON bmi.material_id = t.materiel_id
<where>
<if test="map.beginDate != null and map.beginDate != '' and map.endDate != null and map.endDate != ''">
AND FORMAT(t.create_time, 'yyyy-MM-dd') BETWEEN #{map.beginDate} AND #{map.endDate}
</if>
<if test="map.processId != null and map.processId != ''">
AND t.process_id = #{map.processId}
</if>
<if test="map.machineId != null and map.machineId != ''">
AND t.machine_id = #{map.machineId}
</if>
<if test="map.materialName != null and map.materialName != ''">
AND bmi.material_name LIKE CONCAT('%', #{map.materialName}, '%')
</if>
</where>
GROUP BY CONVERT(DATE, t.create_time)
ORDER BY productionDate
</select>
</mapper>

Loading…
Cancel
Save