质量看板成品不合格率计算修改

master
杨万里 2 days ago
parent fb0a2e5e76
commit 5f759484f2

@ -146,7 +146,7 @@ public class QcInterfaceController {
* @return
*/
@PostMapping("/getMonthOfYearContrast")
public List<QcInterface> getMonthOfYearContrast(@RequestBody QcInterface qcInterface) {
public Map getMonthOfYearContrast(@RequestBody QcInterface qcInterface) {
return qcInterfaceService.getMonthOfYearContrast(qcInterface);
}
@ -154,5 +154,4 @@ public class QcInterfaceController {
public QcLineChartDto getLineQcData(QcInterface qcInterface) {
return qcInterfaceService.getLineQcData(qcInterface);
}
}

@ -170,4 +170,6 @@ public interface QcStaticTableMapper {
List<Map> classNameMapTotal(QcStaticTable qcStaticTable);
BigDecimal getCpDefectTypeMapabcMapsNoOkQty(QcStaticTable qcStaticTable);
}

@ -18,6 +18,7 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Year;
import java.util.*;
/**
@ -350,73 +351,25 @@ public class QcInterfaceServiceImpl implements IQcInterfaceService {
}
@Override
@DS("#header.poolName")
public List<QcInterface> getMonthOfYearContrast(QcInterface qcInterface) {
List<QcInterface> dtos = new ArrayList<>();
QcInterface nowYM = new QcInterface();
QcInterface lastYM = new QcInterface();
String nowYMD = DateUtils.getDate();
String[] nowYMDs = nowYMD.split("-");
int nowYear = Integer.parseInt(nowYMDs[0]);
int lastYear = nowYear - 1;
List<String> daystr1 = new ArrayList<>();
List<String> daystr0 = new ArrayList<>();
for (int m = 1; m <= 12; m++) {
daystr0.add(lastYear + "-" + String.format("%02d", m));
daystr1.add(nowYear + "-" + String.format("%02d", m));
}
lastYM.setDayStr(daystr0);
nowYM.setDayStr(daystr1);
//生产打开
qcInterface.setYmd("'" + nowYear + "','" + lastYear + "'");
Map<String, QcInterface> noOkNum = qcInterfaceMapper.getMothNoOkNum(qcInterface);
if (noOkNum == null) {
return null;
}
List<String> dataBar0 = new ArrayList<>();//不合规数量
List<String> dataLine0 = new ArrayList<>();//不合格率
for (String day0 : daystr0) {
QcInterface last = noOkNum.get(day0);
if (last != null&& !"0.00".equals(last.getQuality())) {
dataBar0.add(last.getNoOkQuality());
BigDecimal norate0 = new BigDecimal(last.getNoOkQuality()).multiply(new BigDecimal(100))
.divide(new BigDecimal(last.getQuality()), 2, RoundingMode.HALF_UP);
dataLine0.add(norate0.toString());
} else {
dataBar0.add("0");
dataLine0.add("0.00");
}
}
List<String> dataBar1 = new ArrayList<>();//不合规数量
List<String> dataLine1 = new ArrayList<>();//不合格率
for (String day1 : daystr1) {
QcInterface now = noOkNum.get(day1);
if (now != null && !"0.00".equals(now.getQuality())) {
dataBar1.add(now.getNoOkQuality());
BigDecimal norate0 = new BigDecimal(now.getNoOkQuality()).multiply(new BigDecimal(100))
.divide(new BigDecimal(now.getQuality()), 2, RoundingMode.HALF_UP);
dataLine1.add(norate0.toString());
} else {
dataBar1.add("0");
dataLine1.add("0.00");
}
}
lastYM.setDataBarArrays(dataBar0);
lastYM.setDataLineArrays(dataLine0);
nowYM.setDataBarArrays(dataBar1);
nowYM.setDataLineArrays(dataLine1);
dtos.add(lastYM);
dtos.add(nowYM);
return dtos;
public Map getMonthOfYearContrast(QcInterface qcInterface) {
Map map= new HashMap();
// DynamicDataSourceContextHolder.push("ds_1000");
DynamicDataSourceContextHolder.push("ds_" + qcInterface.getFactoryCode());
try {
int currentYear = Year.now().getValue();
int previousYear = currentYear - 1;
//今年数据
List<Map> mapListCurrentYear = qcInterfaceMapper.NoncompliantProduct(currentYear);
//去年数据
List<Map> mapListPreviousYear= qcInterfaceMapper.NoncompliantProduct(previousYear);
map.put("mapListCurrentYear",mapListCurrentYear);
map.put("mapListPreviousYear",mapListPreviousYear);
}catch (Exception e){
e.printStackTrace();
}finally {
DynamicDataSourceContextHolder.poll();
}
return map;
}
@Override
@ -493,6 +446,4 @@ public class QcInterfaceServiceImpl implements IQcInterfaceService {
}
return days;
}
}

@ -9,6 +9,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Month;
import java.time.Year;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -2551,9 +2552,10 @@ public class QcStaticTableServiceImpl implements IQcStaticTableService {
map.put("noOKQtyTotal",noOKQtyTotal);
map.put("classNameMap",classNameMap);
map.put("noOkNumRate",percentageStr);
map.put("noOkNumRate",percentageStr);
map.put("okNumRate",OKresultabcRate);
return map;
}
}

@ -360,4 +360,56 @@
order by qctd.update_time desc
</select>
<select id="NoncompliantProduct" resultType="java.util.Map">
WITH Months AS (
-- 生成所有月份的序列,格式为'YYYY-MM'
SELECT FORMAT(DATEFROMPARTS(#{currentYear}, number, 1), 'yyyy-MM') AS month
FROM master..spt_values
WHERE type = 'P'
AND number BETWEEN 1 AND 12
)
SELECT
m.month,
ISNULL(SUM(sub.noOkQty), 0) AS total_noOkQty,
MAX(suc.sampleQty) AS sampleQty,
CASE
WHEN MAX(suc.sampleQty) > 0
THEN CAST(ROUND(ISNULL(SUM(sub.noOkQty), 0) * 100.0 / MAX(suc.sampleQty), 4) AS DECIMAL(10,2))
ELSE CAST(0 AS DECIMAL(10,2))
END AS defect_ratio
FROM Months m
LEFT JOIN (
SELECT
CONVERT(varchar(7), qct.create_time, 120) AS month,
qctd.defect_subclass,
SUM(qctd.noOk_quality) * CASE
WHEN qctd.defect_subclass = 'A类' THEN 1
WHEN qctd.defect_subclass = 'B类' THEN 0.65
WHEN qctd.defect_subclass = 'C类' THEN 0.35
ELSE 1
END AS noOkQty
FROM qc_check_task qct
LEFT JOIN qc_check_task_defect qctd ON qct.record_id = qctd.belong_to
LEFT JOIN qc_defect_type_class qdtc ON qdtc.id = qctd.class_id
WHERE
qct.del_flag = '0'
AND qct.check_type = 'checkTypeCPPC'
AND YEAR(qct.create_time) = #{currentYear}
GROUP BY
CONVERT(varchar(7), qct.create_time, 120),
qctd.defect_subclass
) AS sub ON m.month = sub.month
LEFT JOIN (SELECT
CONVERT(varchar(7), create_time, 120) AS month,
SUM(sample_quality) AS sampleQty
FROM qc_check_task
WHERE del_flag = '0'
AND check_type = 'checkTypeCPPC'
AND YEAR(create_time) = #{currentYear}
GROUP BY CONVERT(varchar(7), create_time, 120)
) AS suc ON m.month = suc.month
GROUP BY m.month
ORDER BY m.month;
</select>
</mapper>

@ -1515,12 +1515,12 @@
LEFT JOIN qc_defect_type_class qdtc ON qdtc.id = qctd.class_id
WHERE
qct.del_flag = '0'
AND qdtc.class_name IS NOT NULL
AND qct.check_type = 'checkTypeCPPC'
AND CONVERT(varchar(7), qct.create_time, 120) = '2026-01'
AND CONVERT(varchar(7), qct.create_time, 120) = #{yearMonth}
GROUP BY qctd.defect_subclass
) AS subquery;
</select>
</mapper>

Loading…
Cancel
Save