黑蚊香成品排列图开发完成

master
杨万里 4 days ago
parent 2948e25e84
commit 54c8fb9681

@ -19,6 +19,7 @@ import com.op.common.core.utils.poi.ExcelMapUtil;
import com.op.common.core.utils.poi.ExcelReportMapUtil;
import com.op.common.core.web.domain.AjaxResult;
import com.op.quality.domain.*;
import com.op.quality.domain.query.QcHWXCPBZTitleQuery;
import com.op.system.api.domain.mes.ProLineDTO;
import com.op.system.api.domain.quality.ChartDTO;
import com.op.system.api.domain.quality.ChartSeriesDTO;
@ -1089,14 +1090,18 @@ public class QcStaticTableController extends BaseController {
}
}
@Log(title = "黑蚊香成品分类汇总--表头", businessType = BusinessType.QUERY)
@GetMapping("/getCpDateTitle")
public List<String> getCpDateTitle(QcStaticTable qcStaticTable) {
return qcStaticTableService.getCpDateTitle(qcStaticTable);
}
@Log(title = "黑蚊香成品分类汇总--数据", businessType = BusinessType.QUERY)
@GetMapping("/getCpDefectDate")
public List<Map<String, String>> getCpDefectDate(QcStaticTable qcStaticTable) {
return qcStaticTableService.getCpDefectDate(qcStaticTable);
}
@GetMapping("/getHWXCPBZTitle")
public Map getHWXCPBZTitle(QcHWXCPBZTitleQuery qcHWXCPBZTitleQuery) {
return qcStaticTableService.getHWXCPBZTitle(qcHWXCPBZTitleQuery);
}
}

@ -0,0 +1,13 @@
package com.op.quality.domain.query;
public class QcHWXCPBZTitleQuery {
private String yearMonth;
public String getYearMonth() {
return yearMonth;
}
public void setYearMonth(String yearMonth) {
this.yearMonth = yearMonth;
}
}

@ -1,5 +1,6 @@
package com.op.quality.mapper;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@ -165,4 +166,8 @@ public interface QcStaticTableMapper {
List<QcCheckTaskDefect> getBPDefectMothMapV2(QcStaticTable qcStaticTable);
List<QcCheckTaskDefect> getBPDefectMothPCMapV2(QcStaticTable qcStaticTable);
List<Map> classNameMapTotal(QcStaticTable qcStaticTable);
BigDecimal getCpDefectTypeMapabcMapsNoOkQty(QcStaticTable qcStaticTable);
}

@ -5,6 +5,7 @@ import java.util.List;
import java.util.Map;
import com.op.quality.domain.*;
import com.op.quality.domain.query.QcHWXCPBZTitleQuery;
import com.op.system.api.domain.mes.ProLineDTO;
import com.op.system.api.domain.quality.ChartSeriesDTO;
import com.op.system.api.domain.quality.FactoryDto;
@ -109,5 +110,5 @@ public interface IQcStaticTableService {
List<Map<String, String>> getDefectItemDataV2(QcStaticTable qcStaticTable);
Map getHWXCPBZTitle(QcHWXCPBZTitleQuery qcHWXCPBZTitleQuery);
}

@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@ -17,6 +18,7 @@ import com.alibaba.fastjson2.JSONArray;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.common.core.utils.StringUtils;
import com.op.quality.domain.*;
import com.op.quality.domain.query.QcHWXCPBZTitleQuery;
import com.op.quality.mapper.QMSFileMapper;
import com.op.system.api.domain.mes.ProLineDTO;
import com.op.system.api.domain.quality.ChartDTO;
@ -2469,8 +2471,89 @@ public class QcStaticTableServiceImpl implements IQcStaticTableService {
return dateList;
}
public static void main(String args[]){
String ymd = "1、0.4016";
System.out.println(ymd.substring(2));
@Override
@DS("#header.poolName")
public Map getHWXCPBZTitle(QcHWXCPBZTitleQuery qcHWXCPBZTitleQuery) {
Map map=new HashMap();
map.put("ProductName","黑蚊香");
map.put("workCenter","黑蚊香车间");
QcStaticTable qcStaticTable =new QcStaticTable();
qcStaticTable.setYearMonth(qcHWXCPBZTitleQuery.getYearMonth());
//抽样总数map
Map<String,QcStaticTable> sampMaps = qcStaticTableMapper.getCpSampMap(qcStaticTable);
BigDecimal totalQty = sampMaps.values().stream()
.map(table -> new BigDecimal(table.getSampleQty()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
//不良品详细
Map<String,QcStaticTable> abcMaps = qcStaticTableMapper.getCpDefectTypeMap(qcStaticTable);
//不良数 = SUM(A类*1+B类*0.65+C类*0.35)
BigDecimal abcMapsNoOkQty = qcStaticTableMapper.getCpDefectTypeMapabcMapsNoOkQty(qcStaticTable);
//不良率 = (A类*1+B类*0.65+C类*0.35)/抽样总数
BigDecimal resultabc = abcMapsNoOkQty.divide(totalQty, 4, BigDecimal.ROUND_HALF_UP);
BigDecimal OKresultabc = new BigDecimal("1").subtract(resultabc);
// 100剪掉将其转换为合格率
// 使用NumberFormat进行格式化保留两位小数并显示为百分比形式
NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMaximumFractionDigits(2);
String percentageStr = percentFormat.format(resultabc.doubleValue());
String OKresultabcRate = percentFormat.format(OKresultabc.doubleValue());
//不良品总数
BigDecimal noOKQtyTotal = abcMaps.values().stream()
.map(table -> new BigDecimal(table.getNoOkQty()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
//不良品总数
List<Map> classNameMap = qcStaticTableMapper.classNameMapTotal(qcStaticTable);
//所有不良品类
qcStaticTable.setCheckType("checkTypeCPPC");
// List<String> titles = qcStaticTableMapper.getCpDefects(qcStaticTable);
// // 确保 classNameMap 不为 null
// if (classNameMap == null) {
// classNameMap = new ArrayList<>();
// }
//
// List<Map> tempList = new ArrayList<>(); // 临时存储新增元素
// for (String s : titles) {
// if (s == null) {
// continue; // 跳过 null 标题
// }
// boolean exists = false;
for (Map ma : classNameMap) {
// 安全获取 class_name避免 null
Object classNameObj = ma.get("class_name");
String className = (classNameObj != null) ? classNameObj.toString() : "";
// if (s.equals(className)) {
// exists = true;
// 1. 安全获取被除数noOk_quality并转为BigDecimal
BigDecimal noOkQuality = new BigDecimal(String.valueOf(ma.get("noOk_quality")));
// 2. 确保除数totalQty为BigDecimal类型假设totalQty为数值类型如int/double
BigDecimal totalQtyBig = new BigDecimal(String.valueOf(noOKQtyTotal));
// 3. 执行除法示例保留4位小数四舍五入
BigDecimal result = noOkQuality.divide(totalQtyBig, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));;
ma.put("rate",result);
// break;
// }
}
// if (!exists) {
// Map newMap = new HashMap();
// newMap.put("class_name", s);
// newMap.put("noOk_quality", new BigDecimal("0.00"));
// newMap.put("rate",new BigDecimal("0.00"));
// tempList.add(newMap);
// }
// }
// classNameMap.addAll(tempList); // 合并新增元素
//抽样数、不良品数、不良率、合格率
//不良率 = (A类*1+B类*0.65+C类*0.35)/抽样总数
map.put("sampleQty",totalQty);
map.put("noOKQtyTotal",noOKQtyTotal);
map.put("classNameMap",classNameMap);
map.put("noOkNumRate",percentageStr);
map.put("noOkNumRate",percentageStr);
map.put("okNumRate",OKresultabcRate);
return map;
}
}

@ -1486,5 +1486,41 @@
GROUP BY
t.defectSubclass
</select>
<select id="classNameMapTotal" resultType="java.util.Map">
select
qdtc.class_name,
SUM(qctd.noOk_quality) as noOk_quality
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 qdtc.class_name is not null and qct.check_type ='checkTypeCPPC'
and CONVERT(varchar(7),qct.create_time, 120) = #{yearMonth}
GROUP BY qdtc.class_name
</select>
<select id="getCpDefectTypeMapabcMapsNoOkQty" resultType="java.math.BigDecimal">
SELECT SUM(noOkQty) AS total_noOkQty
FROM (
SELECT
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 -- 其他类型默认乘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 qdtc.class_name IS NOT NULL
AND qct.check_type = 'checkTypeCPPC'
AND CONVERT(varchar(7), qct.create_time, 120) = '2026-01'
GROUP BY qctd.defect_subclass
) AS subquery;
</select>
</mapper>

Loading…
Cancel
Save