From 87cd5df70918e6ba1af849c5f026d3719bfdb1ac Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期三, 09 四月 2025 09:06:29 +0800 Subject: [PATCH] Merge branch '1.5.2' into dev --- app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java | 417 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 417 insertions(+), 0 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java index 78422a6..4720942 100644 --- a/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java @@ -1,11 +1,47 @@ 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 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; + /** * 鑾峰彇褰撳墠瀵硅薄 @@ -23,4 +59,385 @@ } return sHdlCommonLogic; } + + + /** + * @param value 鍊� + * @return 瀛楃涓插�艰繑鍥� + */ + public static String convertDoubleValue(String value) { + if (TextUtils.isEmpty(value)) { + return UnitType.noValue; + } + return divideByOneThousandAndFormat(value).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) { + try { + double doubleValue = Double.parseDouble(value); + int mDoubleValue = doubleValue(value); + 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 int doubleValue(String value) { + try { + double doubleValue = Double.parseDouble(value); + 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; + } + + } + + /** + * 杞崲鍗曚綅 + * + * @param value 鍊� + * @param unitType 琛ㄧず鏄崟浣嶏紙鍔熺巼锛岀數閲忥級 + */ + public static String convertUnit(String value, String unitType) { + try { + double doubleValue = Double.parseDouble(value); + if (doubleValue > 1000 && doubleValue < 1000 * 1000) { + return unitType.equals(UnitType.kW) ? UnitType.mW : UnitType.mWh; + } else if (doubleValue > 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { + return unitType.equals(UnitType.kW) ? UnitType.gW : UnitType.gWh; + } else if (doubleValue > 1000 * 1000 * 1000) { + return unitType.equals(UnitType.kW) ? UnitType.tW : UnitType.tWh; + } else { + return unitType.equals(UnitType.kW) ? UnitType.kW : UnitType.kWh; + } + } catch (Exception e) { + return unitType.equals(UnitType.kW) ? UnitType.kW : UnitType.kWh; + } + + } + + /** + * 杞崲鐢甸噺(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.mW; + } else if (doubleValue > 1000 * 1000 && doubleValue < 1000 * 1000 * 1000) { + return UnitType.gW; + } else if (doubleValue > 1000 * 1000 * 1000) { + 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 width 浜岀淮鐮佸搴� + * @param height 浜岀淮鐮侀珮搴� + * @param character_set 缂栫爜鏂瑰紡锛堜竴鑸娇鐢║TF-8锛� + * @param error_correction_level 瀹归敊鐜� L锛�7% M锛�15% Q锛�25% H锛�35% + * @param margin 绌虹櫧杈硅窛锛堜簩缁寸爜涓庤竟妗嗙殑绌虹櫧鍖哄煙锛� + * @param color_black 榛戣壊鑹插潡 + * @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) { + // 瀛楃涓插唴瀹瑰垽绌� + if (TextUtils.isEmpty(content)) { + return null; + } + // 瀹藉拰楂�>=0 + if (width < 0 || height < 0) { + return null; + } + try { + /** 1.璁剧疆浜岀淮鐮佺浉鍏抽厤缃� */ + Hashtable<EncodeHintType, String> hints = new Hashtable<>(); + // 瀛楃杞爜鏍煎紡璁剧疆 + if (!TextUtils.isEmpty(character_set)) { + hints.put(EncodeHintType.CHARACTER_SET, character_set); + } + // 瀹归敊鐜囪缃� + if (!TextUtils.isEmpty(error_correction_level)) { + hints.put(EncodeHintType.ERROR_CORRECTION, error_correction_level); + } + // 绌虹櫧杈硅窛璁剧疆 + if (!TextUtils.isEmpty(margin)) { + hints.put(EncodeHintType.MARGIN, margin); + } + /** 2.灏嗛厤缃弬鏁颁紶鍏ュ埌QRCodeWriter鐨別ncode鏂规硶鐢熸垚BitMatrix(浣嶇煩闃�)瀵硅薄 */ + BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); + + /** 3.鍒涘缓鍍忕礌鏁扮粍,骞舵牴鎹瓸itMatrix(浣嶇煩闃�)瀵硅薄涓烘暟缁勫厓绱犺祴棰滆壊鍊� */ + int[] pixels = new int[width * height]; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + //bitMatrix.get(x,y)鏂规硶杩斿洖true鏄粦鑹茶壊鍧楋紝false鏄櫧鑹茶壊鍧� + if (bitMatrix.get(x, y)) { + pixels[y * width + x] = color_black;//榛戣壊鑹插潡鍍忕礌璁剧疆 + } else { + pixels[y * width + x] = color_white;// 鐧借壊鑹插潡鍍忕礌璁剧疆 + } + } + } + /** 4.鍒涘缓Bitmap瀵硅薄,鏍规嵁鍍忕礌鏁扮粍璁剧疆Bitmap姣忎釜鍍忕礌鐐圭殑棰滆壊鍊�,骞惰繑鍥濨itmap瀵硅薄 */ + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, width, 0, 0, width, height); + return bitmap; + } catch (Exception e) { + e.printStackTrace(); + 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> + * 娉ㄦ剰:瑕佸彇娑堢矘鎬т簨浠禘ventBus.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> + * 娉ㄦ剰:瑕佸彇娑堢矘鎬т簨浠禘ventBus.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(); + } + } -- Gitblit v1.8.0