|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|