概述
公司的项目为药事项目,医生开处方的药品单位不规范导致表报数据统计不准确,此段代码只为解决目前项目中处方填写中存入的单位不规范,需要一个统一的单位来处理表报的问题。
1.UnitObject.java实体类,用来封装单位转后结果的对象。
package com.immor.hpms.unitconvert.entity;
/**
* @author 李白的粉
*
用来封装返回的单位转换的对象
*
num 值
*
unit 单位
*/
public class UnitObject {
private double num;
private String unit;
@Override
public String toString() {
return "UnitObject [num=" + num + ", unit=" + unit + "]";
}
public UnitObject() {
}
public UnitObject(double num, String unit) {
this.num = num;
this.unit = unit;
}
public double getNum() {
return num;
}
public void setNum(double num) {
this.num = num;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
}
2.实体类BaseUnitInfo.java:单位转换涉及到的参数实体类。
package com.immor.hpms.unitconvert.entity;
/**
* 单位转换需要的参数
* @author 李白的粉
*
*/
public class BaseUnitInfo {
private double component;
private String componentUnit;
private double volume;
private String volumeUnit;
private String packingUnit;
private String miniUnit;
private double ratio;
public BaseUnitInfo() {
}
public BaseUnitInfo(double component, String componentUnit, double volume,
String volumeUnit, String packingUnit, String miniUnit, double ratio) {
this.component = component;
this.componentUnit = componentUnit;
this.volume = volume;
this.volumeUnit = volumeUnit;
this.packingUnit = packingUnit;
this.miniUnit = miniUnit;
this.ratio = ratio;
}
public double getComponent() {
return component;
}
public void setComponent(double component) {
this.component = component;
}
public String getComponentUnit() {
return componentUnit;
}
public void setComponentUnit(String componentUnit) {
this.componentUnit = componentUnit;
}
public double getVolume() {
return volume;
}
public void setVolume(double volume) {
this.volume = volume;
}
public String getVolumeUnit() {
return volumeUnit;
}
public void setVolumeUnit(String volumeUnit) {
this.volumeUnit = volumeUnit;
}
public String getPackingUnit() {
return packingUnit;
}
public void setPackingUnit(String packingUnit) {
this.packingUnit = packingUnit;
}
public String getMiniUnit() {
return miniUnit;
}
public void setMiniUnit(String miniUnit) {
this.miniUnit = miniUnit;
}
public double getRatio() {
return ratio;
}
public void setRatio(double ratio) {
this.ratio = ratio;
}
}
3.ConversionRatioUtil.java获取转换比的工具类
package com.immor.hpms.unitconvert.utils;
/**
* 转化比
* @author 李白的粉
* @version 1.0
*
*/
public class ConversionRatioUtil {
public static void main(String[] args) {
String unit = "kg";
String toUnit = "mg";
double d = getRatio(unit, toUnit);
if(d == 0){
System.out.println("传入单位参数: 从
"+unit+ "
到
"+toUnit+"
不对!!");
}else{
System.out.println(d);
}
System.out.println("nnnn----------------------------------");
double ss = getRatio("公斤","g");
System.out.println(ss);
}
/**
* 获取转换比
* @param unit
开始单位
* @param toUnit 结束单位
* @return 返回比率
*/
public static double getRatio(String unit, String toUnit) {
int power = -1;
if (unit == null || "".equals(unit) || toUnit == null
|| "".equals(toUnit)) {
power = -1;
} else {
int start = getPower(unit);
int end = getPower(toUnit);
if (start == 0 || end == 0) {
power = -1;
}else if(start == end){
power = 0;
}else {
power = start - end;
}
}
if(power == -1){
return 0;
}
return Math.pow(10, power);
}
/**
* 获取值最小单位的比率
*
重量单位只能计算至微克
*
体积单位只能计算至微升
* @param unit
*
传入的单位
* @return 返回比率是次幂
*/
private static int getPower(String unit) {
if ("kg".equalsIgnoreCase(unit) || "公斤".equals(unit) || "千克".equals(unit)) {
return 12;
}
if ("g".equalsIgnoreCase(unit) || "克".equals(unit)) {
return 9;
}
if ("mg".equalsIgnoreCase(unit) || "毫克".equals(unit)) {
return 6;
}
if ("ug".equalsIgnoreCase(unit) || "微克".equals(unit)) {
return 3;
}
if ("l".equalsIgnoreCase(unit) || "升".equals(unit)) {
return 9;
}
if ("ml".equalsIgnoreCase(unit) || "毫升".equals(unit)) {
return 6;
}
if ("ul".equalsIgnoreCase(unit) || "微升".equals(unit)) {
return 3;
}
if ("百万iu".equals(unit) || "百万单位".equals(unit) || "百万u".equals(unit)) {
return 9;
}
if ("万iu".equals(unit) || "万单位".equals(unit) || "万u".equals(unit)) {
return 7;
}
if ("iu".equalsIgnoreCase(unit) || "单位".equals(unit)) {
return 3;
}
if ("cm".equalsIgnoreCase(unit)) {
return 3;
}
return 0;
}
}
4.UnitConvert.java 主类:对插入参数不规范的一些处理以及正则获取UnitObject对象
package com.immor.hpms.unitconvert.main;
import java.util.ArrayList;
import java.util.List;
import com.immor.hpms.unitconvert.entity.BaseUnitInfo;
import com.immor.hpms.unitconvert.entity.UnitObject;
import com.immor.hpms.unitconvert.utils.ConversionRatioUtil;
/**
* @author 李白的粉
*
*/
public class UnitConvert {
public static void main(String[] args) {
List<BaseUnitInfo> lists = getBaseUnitInfoLists();
String value ="2盒";
UnitObject obj =get2MiniUnit(lists.get(0), value);
System.out.println(obj.getNum()+""+obj.getUnit());
}
/**
* 正则匹配
把要转换的String转换为值、单位的对象
* @param value
* @param ratio
* @param packingUnit
* @param componentUnit
* @return
*/
private static UnitObject getUO(String value,double ratio, String packingUnit, String componentUnit){
String num = value.replaceAll("[a-zA-Z]", "").replaceAll("[u4e00-u9fa5]", ""); //去掉字母与中文
String unit = value.replace(num, ""); //获取单位
if("".equals(unit)){
unit=componentUnit;
}
if(packingUnit.equals(unit)){ //如果出入的单位等于包装单位
UnitObject uo = new UnitObject();
uo.setNum(Double.valueOf(num)*ratio); //数目乘以比率
uo.setUnit(componentUnit); //单位设置为剂量单位
return uo;
}
UnitObject uo1 = new UnitObject();
uo1.setNum(Double.valueOf(num));
uo1.setUnit(unit);
return uo1;
}
/**
* 获取转化成最小单位UnitObject
* @return
*/
public static UnitObject get2MiniUnit(BaseUnitInfo baseUserInfo, String val){
UnitObject uo = new UnitObject();
String miniUnit = baseUserInfo.getMiniUnit();
UnitObject uObj = getUO(val, baseUserInfo.getRatio(), baseUserInfo.getPackingUnit(), baseUserInfo.getComponentUnit());
Double num = uObj.getNum();
String unit = uObj.getUnit();
double power = ConversionRatioUtil.getRatio(unit, miniUnit);
if(power==0){
uObj = getUO(num+baseUserInfo.getComponentUnit(), baseUserInfo.getRatio(), baseUserInfo.getPackingUnit(), baseUserInfo.getComponentUnit());
num = uObj.getNum();
unit = uObj.getUnit();
power = ConversionRatioUtil.getRatio(unit, miniUnit);
}
double dval = num*power;
uo.setNum(dval);
uo.setUnit(miniUnit);
return uo;
}
/**
* 获取转化为剂量单位UnitObject
* @return
*/
public static UnitObject get2ComponentUnit(BaseUnitInfo baseUserInfo, String val){
UnitObject uo = new UnitObject();
return uo;
}
/**
* 模拟数据集合
* @return
*/
private static List<BaseUnitInfo> getBaseUnitInfoLists(){
List<BaseUnitInfo> lists = new ArrayList<BaseUnitInfo>();
BaseUnitInfo bui = new BaseUnitInfo();
bui.setComponent(1.5);
bui.setComponentUnit("g");
bui.setVolume(0);
bui.setVolumeUnit("");
bui.setMiniUnit("mg");
bui.setPackingUnit("盒");
bui.setRatio(10);
lists.add(bui);
BaseUnitInfo bui2 = new BaseUnitInfo();
bui2.setComponent(0);
bui2.setComponentUnit("g");
bui2.setVolume(1);
bui2.setVolumeUnit("ml");
bui2.setMiniUnit("l");
bui2.setPackingUnit("支");
bui2.setRatio(10);
lists.add(bui2);
return lists;
}
}
最后
以上就是清新鸡翅为你收集整理的java中质量、体积的单位转换(药品相关的单位转换)的全部内容,希望文章能够帮你解决java中质量、体积的单位转换(药品相关的单位转换)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复