mac
2024-10-15 4e4310edcc77cbcad18f4c0ee03095562aace055
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
package com.hdl.photovoltaic.other;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.SystemClock;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.google.gson.JsonObject;
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.linkpm.sdk.user.HDLLinkPMUser;
import com.hdl.photovoltaic.config.ConstantManage;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
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 org.json.JSONObject;
 
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Hashtable;
 
/**
 * 公共逻辑
 */
public class HdlCommonLogic {
 
    private static volatile HdlCommonLogic sHdlCommonLogic;
 
 
    /**
     * 模块类型(首页,电站,消息,我的)
     */
    public static LowerTagType lowerTagType = LowerTagType.home;
 
 
    /**
     * 获取当前对象
     *
     * @return HdlCommonLogic
     */
    public static synchronized HdlCommonLogic getInstance() {
        if (sHdlCommonLogic == null) {
            synchronized (HdlCommonLogic.class) {
                if (sHdlCommonLogic == null) {
                    sHdlCommonLogic = new HdlCommonLogic();
                }
            }
 
        }
        return sHdlCommonLogic;
    }
 
    public static String getConvertDoubleUnit(String value) {
        if (TextUtils.isEmpty(value)) {
            return UnitType.noValue;
        }
        BigDecimal formattedValue = getBigDecimal(value);
        return formattedValue.toString();
 
    }
 
    public static String getConvertDoubleUnit(int value) {
        if (value == 0) {
            return UnitType.noValue;
        }
        BigDecimal formattedValue = getBigDecimal(value + "");
        return formattedValue.toString();
    }
 
 
    /**
     * @param value 值
     * @param unit  例如:UnitType.kWh
     * @return 带单位值返回
     */
    public static String getConvertDoubleUnit(String value, String unit) {
        if (TextUtils.isEmpty(value)) {
            return UnitType.noValue + unit;
        }
        if (unit.equals(UnitType.kW)) {
            return divideByOneThousandAndFormat(value).toString() + unit;
        }
        return getBigDecimal(value).toString() + unit;
 
    }
 
    /**
     * @param value     值
     * @param unitValue 例如:UnitType.kWh
     * @param isUnit    true表示有单位返回
     * @return 带单位值返回
     */
    public static String getConvertDoubleUnit(String value, String unitValue, boolean isUnit) {
        if (TextUtils.isEmpty(value)) {
            return UnitType.noValue + (isUnit ? unitValue : "");
        }
        if (unitValue.equals(UnitType.kW)) {
            return divideByOneThousandAndFormat(value).toString() + (isUnit ? unitValue : "");
        }
        return getBigDecimal(value).toString() + (isUnit ? unitValue : "");
 
    }
 
 
    /**
     * @param value 值
     * @param unit  例如:UnitType.kWh
     * @return 带单位值返回
     */
    public static String getConvertDoubleUnit(int value, String unit) {
        if (value == 0) {
            return UnitType.noValue + unit;
        }
        BigDecimal formattedValue = getBigDecimal(value + "");
        return formattedValue.toString() + unit;
    }
 
 
    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) {
        double doubleValue = Double.parseDouble(value);
        BigDecimal bigDecimal = new BigDecimal(doubleValue);
        return bigDecimal.divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN);
    }
 
 
    /**
     * 生成二维码
     *
     * @param content                字符串内容
     * @param width                  二维码宽度
     * @param height                 二维码高度
     * @param character_set          编码方式(一般使用UTF-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的encode方法生成BitMatrix(位矩阵)对象 */
            BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
 
            /** 3.创建像素数组,并根据BitMatrix(位矩阵)对象为数组元素赋颜色值 */
            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每个像素点的颜色值,并返回Bitmap对象 */
            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);
 
        }
    }
 
 
    /**
     * 发布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);
    }
 
}