|
|
|
@ -13,15 +13,20 @@ import java.util.Map; |
|
|
|
|
|
|
|
/** |
|
|
|
* 单位换算工具 |
|
|
|
* |
|
|
|
* @author HanLong |
|
|
|
*/ |
|
|
|
public class UnitTools { |
|
|
|
|
|
|
|
private static String[] unitList = {"pL", "nL", "uL", "mL", "L", "pg", "ng", "ug", "mg", "g", "kg"}; |
|
|
|
|
|
|
|
/** 体积单位 */ |
|
|
|
/** |
|
|
|
* 体积单位 |
|
|
|
*/ |
|
|
|
public static String[] VOLUME_UNIT_LIST = {"pL", "nL", "uL", "mL", "L"}; |
|
|
|
/** 质量单位 */ |
|
|
|
/** |
|
|
|
* 质量单位 |
|
|
|
*/ |
|
|
|
public static String[] WEIGHT_UNIT_LIST = {"pg", "ng", "ug", "mg", "g", "kg"}; |
|
|
|
|
|
|
|
/** |
|
|
|
@ -46,13 +51,14 @@ public class UnitTools { |
|
|
|
|
|
|
|
/** |
|
|
|
* 体积相加 |
|
|
|
* @param kc 当前库存 |
|
|
|
* @param kcdw 当前库存单位 |
|
|
|
* @param addKc 增加库存 |
|
|
|
* @param addKcdw 增加库存单位 |
|
|
|
* |
|
|
|
* @param kc 当前库存 |
|
|
|
* @param kcdw 当前库存单位 |
|
|
|
* @param addKc 增加库存 |
|
|
|
* @param addKcdw 增加库存单位 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public static String addTj(String kc, String kcdw, String addKc, String addKcdw) { |
|
|
|
public static String addTj(String kc, String kcdw, String addKc, String addKcdw) { |
|
|
|
validateUnit(kcdw); |
|
|
|
validateUnit(addKcdw); |
|
|
|
BigDecimal kcValue = formatKc(kc); |
|
|
|
@ -65,13 +71,14 @@ public class UnitTools { |
|
|
|
|
|
|
|
/** |
|
|
|
* 体积相减 |
|
|
|
* @param kc 当前库存 |
|
|
|
* @param kcdw 当前库存单位 |
|
|
|
* @param subKc 扣减库存 |
|
|
|
* @param subKcdw 扣减库存单位 |
|
|
|
* |
|
|
|
* @param kc 当前库存 |
|
|
|
* @param kcdw 当前库存单位 |
|
|
|
* @param subKc 扣减库存 |
|
|
|
* @param subKcdw 扣减库存单位 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public static String subTj(String kc, String kcdw, String subKc, String subKcdw) { |
|
|
|
public static String subTj(String kc, String kcdw, String subKc, String subKcdw) { |
|
|
|
validateUnit(kcdw); |
|
|
|
validateUnit(subKcdw); |
|
|
|
BigDecimal kcValue = formatKc(kc); |
|
|
|
@ -85,10 +92,10 @@ public class UnitTools { |
|
|
|
} |
|
|
|
|
|
|
|
private static BigDecimal formatKc(String kc) { |
|
|
|
if(StringUtils.isEmpty(kc)) { |
|
|
|
if (StringUtils.isEmpty(kc)) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
if(!NumberUtils.isParsable(kc)) { |
|
|
|
if (!NumberUtils.isParsable(kc)) { |
|
|
|
throw new ServiceException("不支持的库存数量" + kc); |
|
|
|
} |
|
|
|
return new BigDecimal(kc); |
|
|
|
@ -96,19 +103,20 @@ public class UnitTools { |
|
|
|
|
|
|
|
/** |
|
|
|
* 体积单位换算 |
|
|
|
* @param value 需要转换的数值 |
|
|
|
* |
|
|
|
* @param value 需要转换的数值 |
|
|
|
* @param fromUnit 原始单位 |
|
|
|
* @param toUnit 目标单位 |
|
|
|
* @param toUnit 目标单位 |
|
|
|
* @return 转换后的数值 |
|
|
|
* @throws IllegalArgumentException 当单位不支持时抛出异常 |
|
|
|
*/ |
|
|
|
public static BigDecimal convert(BigDecimal value, String fromUnit, String toUnit) { |
|
|
|
// 验证单位是否支持 |
|
|
|
if (!UNIT_TO_LITER.containsKey(fromUnit) ) { |
|
|
|
throw new ServiceException( "不支持的单位:" + fromUnit); |
|
|
|
if (!UNIT_TO_LITER.containsKey(fromUnit)) { |
|
|
|
throw new ServiceException("不支持的单位:" + fromUnit); |
|
|
|
} |
|
|
|
if (!UNIT_TO_LITER.containsKey(toUnit) ) { |
|
|
|
throw new ServiceException( "不支持的单位:" + toUnit); |
|
|
|
if (!UNIT_TO_LITER.containsKey(toUnit)) { |
|
|
|
throw new ServiceException("不支持的单位:" + toUnit); |
|
|
|
} |
|
|
|
|
|
|
|
// 如果单位相同,直接返回 |
|
|
|
@ -125,57 +133,63 @@ public class UnitTools { |
|
|
|
|
|
|
|
/** |
|
|
|
* 转换为基础单位 |
|
|
|
* @param value 数值 |
|
|
|
* @param fromUnit 原单位 |
|
|
|
* |
|
|
|
* @param value 数值 |
|
|
|
* @param fromUnit 原单位 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public static BigDecimal convert2Basic(String value, String fromUnit) { |
|
|
|
if(StringUtils.isEmpty(value) || !NumberUtils.isParsable(value)) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 验证单位是否支持 |
|
|
|
if (!UNIT_TO_LITER.containsKey(fromUnit) ) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
try { |
|
|
|
if (StringUtils.isEmpty(value) || !NumberUtils.isParsable(value)) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 验证单位是否支持 |
|
|
|
if (!UNIT_TO_LITER.containsKey(fromUnit)) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
|
|
|
|
String toUnit = ""; |
|
|
|
if(Arrays.asList(VOLUME_UNIT_LIST).contains(fromUnit)) { |
|
|
|
toUnit = "pL"; |
|
|
|
} else if(Arrays.asList(WEIGHT_UNIT_LIST).contains(fromUnit)) { |
|
|
|
toUnit = "pg"; |
|
|
|
} |
|
|
|
String toUnit = ""; |
|
|
|
if (Arrays.asList(VOLUME_UNIT_LIST).contains(fromUnit)) { |
|
|
|
toUnit = "pL"; |
|
|
|
} else if (Arrays.asList(WEIGHT_UNIT_LIST).contains(fromUnit)) { |
|
|
|
toUnit = "pg"; |
|
|
|
} |
|
|
|
|
|
|
|
// 如果单位相同,直接返回 |
|
|
|
if (fromUnit.equals(toUnit)) { |
|
|
|
return new BigDecimal(value); |
|
|
|
} |
|
|
|
// 如果单位相同,直接返回 |
|
|
|
if (fromUnit.equals(toUnit)) { |
|
|
|
return new BigDecimal(value); |
|
|
|
} |
|
|
|
|
|
|
|
// 转换为基准单位 |
|
|
|
BigDecimal valueInLiters = new BigDecimal(value).multiply(UNIT_TO_LITER.get(fromUnit)); |
|
|
|
BigDecimal to = UNIT_TO_LITER.get(toUnit); |
|
|
|
// 从基准单位转换为目标单位 |
|
|
|
return valueInLiters.divide(to); |
|
|
|
// 转换为基准单位 |
|
|
|
BigDecimal valueInLiters = new BigDecimal(value).multiply(UNIT_TO_LITER.get(fromUnit)); |
|
|
|
BigDecimal to = UNIT_TO_LITER.get(toUnit); |
|
|
|
// 从基准单位转换为目标单位 |
|
|
|
return valueInLiters.divide(to); |
|
|
|
} catch (Exception ex) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 从基础单位转换为指定单位 |
|
|
|
* @param value 数值 |
|
|
|
* @param toUnit 原单位 |
|
|
|
* |
|
|
|
* @param value 数值 |
|
|
|
* @param toUnit 原单位 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public static BigDecimal convert(BigDecimal value, String toUnit) { |
|
|
|
if(value == null) { |
|
|
|
if (value == null) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 验证单位是否支持 |
|
|
|
if (!UNIT_TO_LITER.containsKey(toUnit) ) { |
|
|
|
if (!UNIT_TO_LITER.containsKey(toUnit)) { |
|
|
|
return value; |
|
|
|
} |
|
|
|
|
|
|
|
String fromUnit = ""; |
|
|
|
if(Arrays.asList(VOLUME_UNIT_LIST).contains(toUnit)) { |
|
|
|
if (Arrays.asList(VOLUME_UNIT_LIST).contains(toUnit)) { |
|
|
|
fromUnit = "pL"; |
|
|
|
} else if(Arrays.asList(WEIGHT_UNIT_LIST).contains(toUnit)) { |
|
|
|
} else if (Arrays.asList(WEIGHT_UNIT_LIST).contains(toUnit)) { |
|
|
|
fromUnit = "pg"; |
|
|
|
} |
|
|
|
|
|
|
|
@ -191,7 +205,7 @@ public class UnitTools { |
|
|
|
} |
|
|
|
} |
|
|
|
if (!isValid) { |
|
|
|
throw new ServiceException("不支持的单位: " + unit ); |
|
|
|
throw new ServiceException("不支持的单位: " + unit); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|