package com.ruoyi.quality.utils; import java.math.BigDecimal; /** * 质检参数判断工具类 */ public class QualityJudgeUtil { public static final String JUDGE_TYPE_GREATER_EQUAL = "大于等于"; public static final String JUDGE_TYPE_LESS_EQUAL = "小于等于"; public static final String JUDGE_TYPE_RANGE = "范围"; public static final String JUDGE_TYPE_TEXT_DESCRIPTION = "文字描述"; /** * 判断参数项是否合格 * * @param testValue 检验值 * @param standardValue 标准值(大于等于、小于等于类型使用) * @param minValue 范围下限值(范围类型使用) * @param maxValue 范围上限值(范围类型使用) * @param judgeType 判断类型 * @return 判断结果对象 */ public static JudgeResult judge(String testValue, String standardValue, BigDecimal minValue, BigDecimal maxValue, String judgeType) { JudgeResult result = new JudgeResult(); // 文字描述类型不自动判断 if (JUDGE_TYPE_TEXT_DESCRIPTION.equals(judgeType)) { result.setQualified(null); result.setMessage("文字描述类型需手动判断"); return result; } // 检验值为空时无法判断 if (testValue == null || testValue.trim().isEmpty()) { result.setQualified(null); result.setMessage("检验值为空,无法判断"); return result; } try { BigDecimal testVal = new BigDecimal(testValue.trim()); switch (judgeType) { case JUDGE_TYPE_GREATER_EQUAL: return judgeGreaterEqual(testVal, standardValue); case JUDGE_TYPE_LESS_EQUAL: return judgeLessEqual(testVal, standardValue); case JUDGE_TYPE_RANGE: return judgeRange(testVal, minValue, maxValue); default: result.setQualified(null); result.setMessage("未知的判断类型:" + judgeType); return result; } } catch (NumberFormatException e) { result.setQualified(null); result.setMessage("检验值格式不正确,无法转换为数值"); return result; } } /** * 大于等于判断 */ private static JudgeResult judgeGreaterEqual(BigDecimal testValue, String standardValue) { JudgeResult result = new JudgeResult(); try { BigDecimal standardVal = new BigDecimal(standardValue.trim()); boolean qualified = testValue.compareTo(standardVal) >= 0; result.setQualified(qualified); result.setMessage(String.format("检验值%s >= 标准值%s,%s", testValue, standardVal, qualified ? "合格" : "不合格")); } catch (Exception e) { result.setQualified(null); result.setMessage("标准值格式不正确:" + standardValue); } return result; } /** * 小于等于判断 */ private static JudgeResult judgeLessEqual(BigDecimal testValue, String standardValue) { JudgeResult result = new JudgeResult(); try { BigDecimal standardVal = new BigDecimal(standardValue.trim()); boolean qualified = testValue.compareTo(standardVal) <= 0; result.setQualified(qualified); result.setMessage(String.format("检验值%s <= 标准值%s,%s", testValue, standardVal, qualified ? "合格" : "不合格")); } catch (Exception e) { result.setQualified(null); result.setMessage("标准值格式不正确:" + standardValue); } return result; } /** * 范围判断 */ private static JudgeResult judgeRange(BigDecimal testValue, BigDecimal minValue, BigDecimal maxValue) { JudgeResult result = new JudgeResult(); if (minValue == null || maxValue == null) { result.setQualified(null); result.setMessage("范围类型的上下限值不能为空"); return result; } boolean qualified = testValue.compareTo(minValue) >= 0 && testValue.compareTo(maxValue) <= 0; result.setQualified(qualified); result.setMessage(String.format("检验值%s在范围[%s, %s]%s,%s", testValue, minValue, maxValue, qualified ? "内" : "外", qualified ? "合格" : "不合格")); return result; } /** * 判断结果对象 */ public static class JudgeResult { private Boolean qualified; private String message; public Boolean getQualified() { return qualified; } public void setQualified(Boolean qualified) { this.qualified = qualified; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } }