| | |
| | | package com.hdl.photovoltaic.other; |
| | | |
| | | import android.content.Context; |
| | | import android.graphics.Bitmap; |
| | | import android.text.SpannableStringBuilder; |
| | | import android.text.TextPaint; |
| | | import android.text.TextUtils; |
| | | import android.text.style.ClickableSpan; |
| | | import android.view.View; |
| | | import android.widget.ImageView; |
| | | import android.widget.TextView; |
| | | |
| | | import com.dcloud.zxing2.WriterException; |
| | | import androidx.annotation.NonNull; |
| | | |
| | | import com.google.zxing.BarcodeFormat; |
| | | import com.google.zxing.EncodeHintType; |
| | | import com.google.zxing.common.BitMatrix; |
| | | import com.google.zxing.qrcode.QRCodeWriter; |
| | | import com.hdl.photovoltaic.HDLApp; |
| | | import com.hdl.photovoltaic.R; |
| | | import com.hdl.photovoltaic.enums.LowerTagType; |
| | | import com.hdl.photovoltaic.enums.UnitType; |
| | | import com.hdl.photovoltaic.utils.GlideUtils; |
| | | import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; |
| | | |
| | | import org.greenrobot.eventbus.EventBus; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.Hashtable; |
| | | |
| | | /** |
| | |
| | | public class HdlCommonLogic { |
| | | |
| | | private static volatile HdlCommonLogic sHdlCommonLogic; |
| | | |
| | | |
| | | /** |
| | | * 模块类型(首页,电站,消息,我的) |
| | | */ |
| | | public static LowerTagType lowerTagType = LowerTagType.home; |
| | | |
| | | |
| | | /** |
| | | * 获取当前对象 |
| | |
| | | |
| | | |
| | | /** |
| | | * @param value 值 |
| | | * @param unitType 需要转的单位(kW,kWh) |
| | | * @return 字符串值返回 |
| | | */ |
| | | public static String convertDoubleValue(String value, String unitType) { |
| | | if (TextUtils.isEmpty(value)) { |
| | | return UnitType.noValue; |
| | | } |
| | | return divideByOneThousandAndFormat(value,unitType).toString(); |
| | | } |
| | | |
| | | /** |
| | | * @param value 值 |
| | | * @param diploidValue 倍数 |
| | | * @return 字符串 |
| | | */ |
| | | public static String convertDoubleValue(String value, int diploidValue) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | BigDecimal bigDecimal = new BigDecimal(doubleValue); |
| | | return bigDecimal.divide(new BigDecimal(diploidValue), 2, RoundingMode.HALF_EVEN).toString(); |
| | | } catch (Exception e) { |
| | | return "0.00"; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param value 值 |
| | | * @param diploidValue 倍数 |
| | | * @return 字符串 |
| | | */ |
| | | public static BigDecimal convertBigDecimal(String value, int diploidValue) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | BigDecimal bigDecimal = new BigDecimal(doubleValue); |
| | | return bigDecimal.divide(new BigDecimal(diploidValue), 2, RoundingMode.HALF_EVEN); |
| | | } catch (Exception e) { |
| | | return new BigDecimal(0); |
| | | } |
| | | } |
| | | |
| | | public static String convertString(Object value) { |
| | | return String.valueOf(value); |
| | | } |
| | | |
| | | |
| | | public static BigDecimal getBigDecimal(String value) { |
| | | if (TextUtils.isEmpty(value)) { |
| | | return new BigDecimal(0); |
| | | } |
| | | double doubleValue = Double.parseDouble(value); |
| | | return BigDecimal.valueOf(doubleValue).setScale(2, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 除以一千和格式 |
| | | * |
| | | * @param value 值 |
| | | * @return BigDecimal |
| | | */ |
| | | public static BigDecimal divideByOneThousandAndFormat(String value, String unitType) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | long mDoubleValue = doubleValue(value,unitType); |
| | | if (mDoubleValue == 0) { |
| | | return getBigDecimal(value); |
| | | } else { |
| | | BigDecimal bigDecimal = new BigDecimal(doubleValue); |
| | | return bigDecimal.divide(new BigDecimal(mDoubleValue), 2, RoundingMode.HALF_EVEN); |
| | | } |
| | | } catch (Exception e) { |
| | | BigDecimal bigDecimal = new BigDecimal(0); |
| | | return bigDecimal.divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取倍数 |
| | | * |
| | | * @param value 值 |
| | | */ |
| | | public static long doubleValue(String value, String unitType) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | if (unitType.equals(UnitType.kW)) { |
| | | if (doubleValue > 1000 && doubleValue < 1000 * 1000) { |
| | | return 1000 ; |
| | | } else if (doubleValue >= 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { |
| | | return 1000 * 1000 ; |
| | | } else if (doubleValue >= 1000 * 1000 * 1000) { |
| | | return 1000L * 1000 * 1000 ; |
| | | } else { |
| | | return 1000; |
| | | } |
| | | } else { |
| | | if (doubleValue >= 1000 && doubleValue < 1000 * 1000) { |
| | | return 1000; |
| | | } else if (doubleValue >= 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { |
| | | return 1000 * 1000; |
| | | } else if (doubleValue >= 1000 * 1000 * 1000) { |
| | | return 1000 * 1000 * 1000; |
| | | } else { |
| | | return 0; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | return 0; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 转换电量(kWh)单位 |
| | | * |
| | | * @param value 值 |
| | | */ |
| | | public static String convertKWHUnit(String value) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | if (doubleValue >= 1000 && doubleValue < 1000 * 1000) { |
| | | return UnitType.mWh; |
| | | } else if (doubleValue >= 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { |
| | | return UnitType.gWh; |
| | | } else if (doubleValue >= 1000 * 1000 * 1000) { |
| | | return UnitType.tWh; |
| | | } else { |
| | | return UnitType.kWh; |
| | | } |
| | | } catch (Exception e) { |
| | | return UnitType.kWh; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 转换功率(kW)单位 |
| | | * |
| | | * @param value 值 |
| | | */ |
| | | public static String convertKWUnit(String value) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | if (doubleValue > 1000 && doubleValue < 1000 * 1000) { |
| | | return UnitType.kW; |
| | | } else if (doubleValue >= 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { |
| | | return UnitType.mW; |
| | | } else if (doubleValue >= 1000 * 1000 * 1000&&doubleValue < 1000 * 1000 * 1000*1000L) { |
| | | return UnitType.gW; |
| | | } else if (doubleValue >= 1000 * 1000 * 1000*1000L) { |
| | | return UnitType.tW; |
| | | } else { |
| | | return UnitType.kW; |
| | | } |
| | | } catch (Exception e) { |
| | | return UnitType.kW; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 转换(kWp)单位 |
| | | * |
| | | * @param value 值 |
| | | */ |
| | | public static String convertKWPUnit(String value) { |
| | | try { |
| | | double doubleValue = Double.parseDouble(value); |
| | | if (doubleValue >= 1000 && doubleValue < 1000 * 1000) { |
| | | return UnitType.MWp; |
| | | } else if (doubleValue >= 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { |
| | | return UnitType.GWp; |
| | | } else if (doubleValue >= 1000 * 1000 * 1000) { |
| | | return UnitType.TWp; |
| | | } else { |
| | | return UnitType.kWp; |
| | | } |
| | | } catch (Exception e) { |
| | | return UnitType.kWp; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 生成二维码 |
| | | * |
| | | * @param content 字符串内容 |
| | |
| | | * @param color_white 白色色块 |
| | | * @return BitMap |
| | | */ |
| | | public Bitmap createQRCodeBitmap(String content, int width, int height, |
| | | String character_set, String error_correction_level, |
| | | String margin, int color_black, int color_white) { |
| | | public Bitmap createQRCodeBitmap(String content, int width, int height, String character_set, String error_correction_level, String margin, int color_black, int color_white) { |
| | | // 字符串内容判空 |
| | | if (TextUtils.isEmpty(content)) { |
| | | return null; |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 没有数据界面的样式 |
| | | * |
| | | * @param is_data true有数据,false没数据 |
| | | * @param parent 父容器 |
| | | * @param imageView 显示gif控件 |
| | | * @param str 描述文本 |
| | | */ |
| | | public void nullDataUpdateUi(Context mContext, View parent, ImageView imageView, TextView textView, String str, boolean is_data) { |
| | | if (is_data) { |
| | | parent.setVisibility(View.GONE); |
| | | } else { |
| | | parent.setVisibility(View.VISIBLE); |
| | | GlideUtils.getDrawableGifAnimation(mContext, imageView); |
| | | textView.setText(str); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 设置字体的富文本已经下划线 |
| | | * |
| | | * @param view 当前组件 |
| | | * @param str 内容字符串 |
| | | * @param isUnderline 是否显示下划线(true=显示) |
| | | * @param spanCallBack 点击文本后回调事件,不需要回调事件填null |
| | | */ |
| | | public void setSpan(TextView view, String str, boolean isUnderline, SpanCallBack spanCallBack) { |
| | | |
| | | if (view == null || TextUtils.isEmpty(str)) { |
| | | return; |
| | | } |
| | | try { |
| | | SpannableStringBuilder registerTvStrSpannable = new SpannableStringBuilder(str); |
| | | registerTvStrSpannable.setSpan(new ClickableSpan() { |
| | | @Override |
| | | public void onClick(@NonNull View widget) { |
| | | if (spanCallBack != null) { |
| | | spanCallBack.onClick(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateDrawState(@NonNull TextPaint ds) { |
| | | super.updateDrawState(ds); |
| | | //设置字体颜色 |
| | | ds.setColor(HDLApp.getInstance().getResources().getColor(R.color.text_FFACACAC, null)); |
| | | // 去掉下划线 |
| | | ds.setUnderlineText(isUnderline); |
| | | } |
| | | |
| | | |
| | | }, 0, str.length(), 0); |
| | | view.setText(registerTvStrSpannable); |
| | | } catch (Exception ignored) { |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发布EventBus粘性事件 |
| | | * <p> |
| | | * 注意:要取消粘性事件EventBus.getDefault().removeStickyEvent(eventBus); |
| | | * |
| | | * @param topic 主题 |
| | | * @param type 事件 |
| | | */ |
| | | public void postEventBusSticky(String topic, String type) { |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(topic); |
| | | baseEventBus.setType(type); |
| | | EventBus.getDefault().postSticky(baseEventBus); |
| | | } |
| | | |
| | | /** |
| | | * 发布EventBus粘性事件 |
| | | * <p> |
| | | * 注意:要取消粘性事件EventBus.getDefault().removeStickyEvent(eventBus); |
| | | * |
| | | * @param topic 主题 |
| | | * @param type 事件 |
| | | */ |
| | | public void postEventBusSticky(String topic, String type, Object o) { |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(topic); |
| | | baseEventBus.setType(type); |
| | | baseEventBus.setData(o); |
| | | EventBus.getDefault().postSticky(baseEventBus); |
| | | } |
| | | |
| | | /** |
| | | * 发布EventBus事件 |
| | | * |
| | | * @param topic 主题 |
| | | * @param type 事件 |
| | | */ |
| | | public void postEventBus(String topic, String type) { |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(topic); |
| | | baseEventBus.setType(type); |
| | | EventBus.getDefault().post(baseEventBus); |
| | | } |
| | | |
| | | /** |
| | | * 发布EventBus事件 |
| | | * |
| | | * @param topic 主题 |
| | | * @param type 事件 |
| | | */ |
| | | public void postEventBus(String topic, String type, Object o) { |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(topic); |
| | | baseEventBus.setType(type); |
| | | baseEventBus.setData(o); |
| | | EventBus.getDefault().post(baseEventBus); |
| | | } |
| | | |
| | | public interface SpanCallBack { |
| | | void onClick(); |
| | | } |
| | | |
| | | } |