From af49b3dead6d349792f0114db604932e99cfd231 Mon Sep 17 00:00:00 2001 From: zhaoxiaolin Date: Thu, 4 Jul 2024 09:21:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A8=E9=87=8FCPK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QcStaticTableController.java | 6 ++ .../op/quality/mapper/QcProCheckMapper.java | 3 + .../service/IQcStaticTableService.java | 2 + .../service/impl/QcProCheckServiceImpl.java | 5 + .../impl/QcStaticTableServiceImpl.java | 96 +++++++++++++++++++ .../quality/QcCheckReportIncomeMapper.xml | 8 +- .../mapper/quality/QcProCheckMapper.xml | 10 +- .../resources/mapper/system/SysUserMapper.xml | 3 +- 8 files changed, 124 insertions(+), 9 deletions(-) diff --git a/op-modules/op-quality/src/main/java/com/op/quality/controller/QcStaticTableController.java b/op-modules/op-quality/src/main/java/com/op/quality/controller/QcStaticTableController.java index b524141b..11aa1cbf 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/controller/QcStaticTableController.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/controller/QcStaticTableController.java @@ -343,6 +343,12 @@ public class QcStaticTableController extends BaseController { return qcStaticTableService.getDLTableAvgInfo(qcStaticTable); } + @GetMapping("/getDLTableCPKInfo") + @Log(title = "定量值分析CPK", businessType = BusinessType.QUERY) + public QcStaticTable getDLTableCPKInfo(QcStaticTable qcStaticTable) { + return qcStaticTableService.getDLTableCPKInfo(qcStaticTable); + } + @PostMapping("/exportDLTable") public void exportDLTable(HttpServletResponse response, QcStaticTable qcStaticTable) { diff --git a/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcProCheckMapper.java b/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcProCheckMapper.java index 11e6fe89..13df1054 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcProCheckMapper.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcProCheckMapper.java @@ -8,6 +8,7 @@ import com.op.quality.domain.QcProCheck; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; import java.util.List; /** @@ -43,4 +44,6 @@ public interface QcProCheckMapper { List getHFnames(QcProCheck qcProCheck); String getWeightInfo(QcCheckTaskDetail qcCheckTaskDetail); + + BigDecimal getMesReportQuality(String orderNo); } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/IQcStaticTableService.java b/op-modules/op-quality/src/main/java/com/op/quality/service/IQcStaticTableService.java index afda12b5..08bae2c2 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/IQcStaticTableService.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/IQcStaticTableService.java @@ -46,5 +46,7 @@ public interface IQcStaticTableService { QcStaticTable getDLTableAvgInfo(QcStaticTable qcStaticTable); + QcStaticTable getDLTableCPKInfo(QcStaticTable qcStaticTable); + List getProjectList(String checkType); } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcProCheckServiceImpl.java b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcProCheckServiceImpl.java index 75cfa072..f2c56fe2 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcProCheckServiceImpl.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcProCheckServiceImpl.java @@ -133,7 +133,12 @@ public class QcProCheckServiceImpl implements QcProCheckService { if (StringUtils.isEmpty(dto.getWorkorderCodeSap())) { dto.setWorkorderCodeSap(dto.getOrderNo()); } + + if("checkTypeCP".equals(qcCheckTaskIncome.getCheckType())){//成品检验数量取实际产量 + dto.setQuality(qcProCheckMapper.getMesReportQuality(qcCheckTaskIncome.getOrderNo())); + } } + return dtos; } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcStaticTableServiceImpl.java b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcStaticTableServiceImpl.java index f5048b84..48bc40b8 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcStaticTableServiceImpl.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcStaticTableServiceImpl.java @@ -558,6 +558,102 @@ public class QcStaticTableServiceImpl implements IQcStaticTableService { return dto; } + @Override + @DS("#header.poolName") + public QcStaticTable getDLTableCPKInfo(QcStaticTable qcStaticTable) { + QcStaticTable dto = new QcStaticTable(); + //第一列日期 + List days = this.getDays(qcStaticTable.getYmArrayStart(), + qcStaticTable.getYmArrayEnd(), "ymd"); + qcStaticTable.setDataType("ymd"); + + List titleList = qcStaticTableMapper.getDLTableTitle(qcStaticTable); + Map titleMap = titleList.stream().collect(Collectors.toMap(QcStaticTable::getYearMonth, (a) -> a)); + //表头:第一行 + List colName1 = titleList.stream().map(QcStaticTable::getMaterialName).distinct().collect(Collectors.toList()); + List colCode1 = titleList.stream().map(QcStaticTable::getMaterialCode).distinct().collect(Collectors.toList()); + dto.setTitleCol1(colName1); + //表头:第二行 + List colName2 = titleList.stream().map(QcStaticTable::getRuleName).distinct().collect(Collectors.toList()); + List colCode2 = titleList.stream().map(QcStaticTable::getProjectNo).distinct().collect(Collectors.toList()); + dto.setTitleCol2(colName2); + + //给折线图取上下限制 + if(qcStaticTable.getProjectNoArray()!=null){ + qcStaticTable.setProjectNo(qcStaticTable.getProjectNoArray()[0]); + QcStaticTable upandown = qcStaticTableMapper.getUpAndDown(qcStaticTable); + if(upandown!=null){ + dto.setUpperDiff(upandown.getUpperDiff()); + dto.setDownDiff(upandown.getDownDiff()); + }else{ + dto.setUpperDiff(BigDecimal.ZERO); + dto.setDownDiff(BigDecimal.ZERO); + } + } + + //cpk列表 + List dxData = new ArrayList<>(); + + for (String day : days) { + HashMap result = new HashMap(); + + result.put("ymdms", day + " AVG"); + int i = 0, j = 0; + for (int m = 0; m < colCode1.size(); m++) { + for (int n = 0; n < colCode2.size(); n++) { + String key = colCode1.get(m) + "-" + colCode2.get(n) + "-" + day; + QcStaticTable avgdto = titleMap.get(key); + if (avgdto != null) { + String avgArrayStr = avgdto.getQuality().replace("[", "") + .replace("]", "") + .replace("\"", ""); + List avgArray = Arrays.asList(avgArrayStr.split(",")); + double[] data = avgArray.stream() + .mapToDouble(Double::parseDouble) // 将String转换为double + .toArray(); // 转换为double数组 ; + double USL = dto.getUpperDiff().doubleValue(); + double LSL = dto.getDownDiff().doubleValue(); + double cpk = calculateCpk(data,USL,LSL); + BigDecimal cpkVal = new BigDecimal(Double.toString(cpk)).setScale(2, BigDecimal.ROUND_HALF_UP); + result.put("mcode" + m + "Pcode" + n, cpkVal); + } else { + result.put("mcode" + m + "Pcode" + n, "0.00"); + + } + } + } + dxData.add(result); + } + dto.setDxData(dxData); + return dto; + } + + // 计算CPK + public static double calculateCpk(double[] data, double USL, double LSL) { + double mean = calculateMean(data); + double stdDev = calculateStandardDeviation(data); + double cpkUpper = (USL - mean) / (3 * stdDev); + double cpkLower = (mean - LSL) / (3 * stdDev); + return Math.min(cpkUpper, cpkLower); + } + // 计算均值 + public static double calculateMean(double[] data) { + double sum = 0.0; + for (double a : data) { + sum += a; + } + return sum / data.length; + } + + // 计算标准差 + public static double calculateStandardDeviation(double[] data) { + double mean = calculateMean(data); + double temp = 0; + for (double a : data) { + temp += (a - mean) * (a - mean); + } + return Math.sqrt(temp / (data.length - 1)); + } @Override @DS("#header.poolName") public List getProjectList(String checkType) { diff --git a/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckReportIncomeMapper.xml b/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckReportIncomeMapper.xml index 632cf58a..3c43be89 100644 --- a/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckReportIncomeMapper.xml +++ b/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckReportIncomeMapper.xml @@ -204,7 +204,7 @@ from qc_check_task where record_id = #{recordId} + + diff --git a/op-modules/op-system/src/main/resources/mapper/system/SysUserMapper.xml b/op-modules/op-system/src/main/resources/mapper/system/SysUserMapper.xml index 773f5703..c7352643 100644 --- a/op-modules/op-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/op-modules/op-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -49,7 +49,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.wx_id, + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, + u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.wx_id, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u