From 04b72977be56e9cca1eb66883d7217237fb8ab9a Mon Sep 17 00:00:00 2001
From: 张海江 <181069201@qq.com>
Date: Fri, 26 Jan 2018 09:52:33 +0800
Subject: [PATCH] 提交代码

---
 app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java |  339 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 260 insertions(+), 79 deletions(-)

diff --git a/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java b/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
index c87006a..6680050 100644
--- a/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
+++ b/app/src/main/java/com/moral/yunfushao/fragment/FragmentMonitor.java
@@ -6,6 +6,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.util.Log;
@@ -44,6 +45,7 @@
 import org.greenrobot.eventbus.ThreadMode;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.HashMap;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -55,22 +57,25 @@
 
 public class FragmentMonitor extends BaseFragment {
     private LinearLayout ll_status;
-    private TextView tv_ljjl, tv_tishi, tv_desc,tv_shishi,tv_status;
+    private TextView tv_ljjl, tv_tishi, tv_desc, tv_shishi, tv_status;
     private PanelView pv;
-    private ImageView iv_his,iv_status,iv_search;
+    private ImageView iv_his, iv_status, iv_search;
     private BluetoothService mBluetoothService;
     private ArrayList<String> realResult = new ArrayList<>();
     //������������
     private ArrayList<RecData> submitResult = new ArrayList<>();
+    private ArrayList<RecData> submitHisResult = new ArrayList<>();
     //������������������������
     private ArrayList<RecData> submitTempResult = new ArrayList<>();
+    private Timer heartTimer, resTimer;
+    Handler handler = new Handler();
 
     /**
      * ������
      *
      * @param msg
      */
-    @Subscribe(threadMode = ThreadMode.MAIN)
+    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
     public void eventComing(EventMessage msg) {
         if (msg.getType() == AppConfig.GET_BLE_SERVICE) {
             pv.setStatusStr("���������");
@@ -114,68 +119,11 @@
                                 getActivity().runOnUiThread(new Runnable() {
                                     @Override
                                     public void run() {
-//                                        Log.d("haijiang","������������===="+String.valueOf(HexUtil.encodeHex(characteristic.getValue())));
                                         Log.d("haijiang", "������������====" + StringUtils.byteArrayToHexStr(characteristic.getValue()));
                                         String result = StringUtils.byteArrayToHexStr(characteristic.getValue());
-                                        if (result.startsWith("5A")) {
-                                            realResult.clear();
-                                            realResult.add(result);
-                                        } else {
-                                            realResult.add(result);
-                                        }
-                                        String nowResult = "";
-                                        for (String s : realResult) {
-                                            nowResult += s;
-                                        }
-                                        Log.d("haijiang", "������������===nowResult=" + nowResult);
-                                        /**
-                                         * 20������������5A������  5B������
-                                         */
-                                        if (!TextUtils.isEmpty(nowResult) && nowResult.length() == 40 && nowResult.startsWith("5A") && nowResult.endsWith("5B")) {
-
-                                            int shunshiValue = Integer.parseInt(nowResult.substring(24, 26), 16) * 256 + Integer.parseInt(nowResult.substring(26, 28), 16);
-                                            int leijiValue = Integer.parseInt(nowResult.substring(28, 30), 16) * 1024 + Integer.parseInt(nowResult.substring(30, 32), 16) * 512 + Integer.parseInt(nowResult.substring(32, 34), 16) * 256 + Integer.parseInt(nowResult.substring(34, 36), 16);
-                                            float level = shunshiValue / 10;
-                                            XLog.d("���������" + shunshiValue + "|���������" + leijiValue);
-                                            tv_ljjl.setText(NumberUtils.getBigDecimalValue(leijiValue*0.10,3) + "");
-                                            double shishiValue = NumberUtils.getBigDecimalValue((shunshiValue-45)/10.0*0.10,3);
-                                            tv_shishi.setText(shishiValue + "");
-
-                                            /**
-                                             * ���������������������
-                                             */
-                                            RecData data = new RecData();
-                                            data.setValue(shishiValue);
-                                            data.setTime(TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
-                                            submitResult.add(data);
-
-                                            if (level >= 0 && level < 15) {
-                                                pv.setPercent(level / 50);
-                                                tv_tishi.setText("������������������");
-                                                tv_desc.setText("���������������������������\n������������������������������������������������");
-                                                showStatus(true);
-                                            } else if (level >= 15 && level < 26) {
-                                                pv.setPercent(level / 50);
-                                                tv_tishi.setText("������������������");
-                                                tv_desc.setText("���������������������������\n���������������������������������������������������");
-                                                showStatus(true);
-                                            } else if (level >= 26 && level < 65) {
-                                                showStatus(false);
-                                                tv_tishi.setText("������������������");
-                                                tv_desc.setText("���������������������������\n���������������������������������������������������");
-                                                if (level <= 45) {
-                                                    pv.setPercent(level / 50);
-                                                } else {
-                                                    pv.setPercent(0.9f);
-                                                }
-                                            } else if (level >= 65) {
-                                                showStatus(false);
-                                                tv_tishi.setText("������������������");
-                                                tv_desc.setText("���������������������������\n���������������������������������������������������");
-                                                pv.setPercent(1.0f);
-                                            }
-                                            realResult.clear();
-                                        }
+                                        //������������
+                                        parseCurrentData(result);
+                                        parseHisData(result);
                                     }
                                 });
                             }
@@ -191,12 +139,33 @@
                             }
 
                         });
+                /**
+                 * ������������������������
+                 */
+                heart();
+                /**
+                 * ������������������
+                 */
+                handler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        checkTime();
+                    }
+                }, 2000);
             }
-        }else if (msg.getType() == AppConfig.GET_BLE_DISCONNECT) {
+        } else if (msg.getType() == AppConfig.GET_BLE_DISCONNECT) {
             pv.setStatusStr("���������");
             pv.setPercent(0);
             tv_ljjl.setText("0");
             tv_shishi.setText("0");
+        } else if (msg.getType() == AppConfig.CHANGE_SETTING) {
+            if (timer != null) {
+                timer.cancel();
+                timer = null;
+            }
+            submitTime = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getRefresh_frequency();
+            isupLoad = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getIs_open_upload();
+            doTask();
         }
     }
 
@@ -215,6 +184,14 @@
     public void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
+        if (heartTimer != null) {
+            heartTimer.cancel();
+            heartTimer = null;
+        }
+        if (timer != null) {
+            timer.cancel();
+            timer = null;
+        }
     }
 
     @Override
@@ -240,13 +217,17 @@
     protected void initListener() {
         pv.setOnClickListener(this);
         iv_his.setOnClickListener(this);
-        iv_search.setOnClickListener(this);
+//        iv_search.setOnClickListener(this);
     }
+
+    int submitTime;
+    int isupLoad;
 
     @Override
     protected void initData() {
+        submitTime = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getRefresh_frequency();
+        isupLoad = MainApp.theApp.sharedPreferencesUtil.getLoginInfo().getIs_open_upload();
         doTask();
-
     }
 
     @Override
@@ -265,10 +246,13 @@
                 startActivity(intent);
                 break;
             case R.id.iv_search:
-                if(mBluetoothService==null){
-                    return;
-                }
-                mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(),mBluetoothService.getWirteCharacteristic().getUuid().toString(),"5A0014010001000000000000004600000000005B",null);
+//                if(mBluetoothService==null){
+//                    return;
+//                }
+//                if(mBluetoothService.getWirteCharacteristic()==null){
+//                    return;
+//                }
+//                mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(),mBluetoothService.getWirteCharacteristic().getUuid().toString(),BLECommon.BLE_SEARCH,null);
                 break;
         }
 
@@ -279,7 +263,6 @@
 
     }
 
-    private boolean isFinish = false;
     Timer timer;
 
     private void doTask() {
@@ -287,20 +270,59 @@
         timer.schedule(new TimerTask() {
             @Override
             public void run() {
-                if (!isFinish) {
+                if (isupLoad == 1) {
                     //������������
                     submitData();
                 }
             }
-        }, 0, 10000);
+        }, 0, submitTime * 1000);
+    }
+
+    /**
+     * ���������������������3������
+     */
+    private void heart() {
+        heartTimer = new Timer();
+        heartTimer.schedule(new TimerTask() {
+            @Override
+            public void run() {
+                //������������
+                if (mBluetoothService == null) {
+                    return;
+                }
+                if (mBluetoothService.getWirteCharacteristic() == null) {
+                    return;
+                }
+                mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), BLECommon.BLE_HEART, null);
+            }
+        }, 0, 1000 * 60 * 3);
+    }
+
+    private long timeComplete = 0;
+
+    private void checkResComplete(final String result) {
+        resTimer = new Timer();
+        resTimer.schedule(new TimerTask() {
+            @Override
+            public void run() {
+                if (!TextUtils.isEmpty(result) && result.startsWith("3A")) {
+                    timeComplete = 0;
+                } else {
+                    timeComplete++;
+                }
+                if (timeComplete >= 120) {
+                    submitResData();
+                }
+            }
+        }, 0, 1000);
     }
 
     private void submitData() {
         //���������������������������
         submitTempResult.addAll(submitResult);
         submitResult.clear();
-        HashMap<String,String> params = new HashMap<>();
-        if(submitTempResult.size()==0){
+        HashMap<String, String> params = new HashMap<>();
+        if (submitTempResult.size() == 0) {
             return;
         }
         UpLoadParam up = new UpLoadParam();
@@ -313,8 +335,44 @@
         HttpUtils.doPost(API.UPLOAD, params, CacheMode.DEFAULT, false, new HttpCallBack() {
             @Override
             public void onSuccess(String res, String msg) {
-                XLog.d("@@@@@@@@@@@@@@@@@@@@@@@@@@"+msg);
+                XLog.d("@@@@@@@@@@@@@@@@@@@@@@@@@@" + msg);
                 submitTempResult.clear();
+            }
+
+            @Override
+            public void showLoadingDialog() {
+
+            }
+
+            @Override
+            public void onFail(int errno, String s) {
+
+            }
+        });
+    }
+
+    private void submitResData() {
+        //���������������������������
+        HashMap<String, String> params = new HashMap<>();
+        if (submitHisResult.size() == 0) {
+            return;
+        }
+        UpLoadParam up = new UpLoadParam();
+        up.setUserid(MainApp.userId);
+        up.setAddress(MainApp.address);
+        up.setLat(MainApp.mLat);
+        up.setLon(MainApp.mLon);
+        up.setData(submitHisResult);
+        params.put("data", FastJsonTools.toJson(up));
+        HttpUtils.doPost(API.UPLOAD, params, CacheMode.DEFAULT, false, new HttpCallBack() {
+            @Override
+            public void onSuccess(String res, String msg) {
+                XLog.d("������������������������" + msg);
+                submitHisResult.clear();
+                if (resTimer != null) {
+                    resTimer.cancel();
+                    resTimer = null;
+                }
             }
 
             @Override
@@ -333,19 +391,142 @@
 
     /**
      * ������������������������������
+     *
      * @param safe
      */
-    private void showStatus(boolean safe){
-        if(safe){
+    private void showStatus(boolean safe) {
+        if (safe) {
             iv_status.setImageResource(R.mipmap.icon_safe);
             tv_status.setText("������");
             tv_status.setTextColor(getResources().getColor(R.color.green_txt));
             ll_status.setBackgroundResource(R.mipmap.bg_conner_green);
-        }else{
+        } else {
             iv_status.setImageResource(R.mipmap.icon_danger);
             tv_status.setText("������");
             tv_status.setTextColor(getResources().getColor(R.color.red_txt));
             ll_status.setBackgroundResource(R.mipmap.bg_conner_red);
         }
     }
+
+    /**
+     * ������������������
+     *
+     * @param result
+     */
+    private void parseCurrentData(String result) {
+        if (result.startsWith("5A")) {
+            realResult.clear();
+            realResult.add(result);
+        } else {
+            realResult.add(result);
+        }
+        String nowResult = "";
+        for (String s : realResult) {
+            nowResult += s;
+        }
+        Log.d("haijiang", "������������===nowResult=" + nowResult);
+        /**
+         * 20������������5A������  5B������
+         */
+        if (!TextUtils.isEmpty(nowResult) && nowResult.length() == 40 && nowResult.startsWith("5A") && nowResult.endsWith("5B")) {
+
+            int shunshiValue = Integer.parseInt(nowResult.substring(24, 26), 16) * 256 + Integer.parseInt(nowResult.substring(26, 28), 16);
+            int leijiValue = Integer.parseInt(nowResult.substring(28, 30), 16) * 1024 + Integer.parseInt(nowResult.substring(30, 32), 16) * 512 + Integer.parseInt(nowResult.substring(32, 34), 16) * 256 + Integer.parseInt(nowResult.substring(34, 36), 16);
+            float level = (float) (shunshiValue / 10 * 0.01);
+            XLog.d("���������" + shunshiValue + "|���������" + leijiValue);
+            tv_ljjl.setText(NumberUtils.getBigDecimalValue(leijiValue * 0.01, 3) + "");
+            double shishiValue = NumberUtils.getBigDecimalValue((shunshiValue) / 100.0, 3);
+            tv_shishi.setText(shishiValue + "");
+
+            /**
+             * ���������������������
+             */
+            RecData data = new RecData();
+            data.setValue(shishiValue);
+            data.setTime(TimeUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
+            submitResult.add(data);
+
+            if (level >= 0 && level < 15) {
+                pv.setPercent(level / 50);
+                tv_tishi.setText("������������������");
+                tv_desc.setText("���������������������������\n���������������������������������������������");
+                showStatus(true);
+            } else if (level >= 15 && level < 26) {
+                pv.setPercent(level / 50);
+                tv_tishi.setText("������������������");
+                tv_desc.setText("���������������������������\n���������������������������������������������������");
+                showStatus(true);
+            } else if (level >= 26 && level < 65) {
+                showStatus(false);
+                tv_tishi.setText("������������������");
+                tv_desc.setText("���������������������������\n���������������������������������������������������");
+                if (level <= 45) {
+                    pv.setPercent(level / 50);
+                } else {
+                    pv.setPercent(0.9f);
+                }
+            } else if (level >= 65) {
+                showStatus(false);
+                tv_tishi.setText("������������������");
+                tv_desc.setText("���������������������������\n���������������������������������������������������");
+                pv.setPercent(1.0f);
+            }
+            realResult.clear();
+        }
+    }
+
+    /**
+     * ���������������������������������
+     */
+    private void parseHisData(String result) {
+        if (!TextUtils.isEmpty(result) && result.length() == 16 && result.startsWith("3A") && result.endsWith("3B")) {
+            if (submitHisResult.size() == 0) {
+                //���������������������
+                checkResComplete(result);
+            }
+            String year = "20" + Integer.parseInt(result.substring(2, 4), 16);
+            String month = Integer.parseInt(result.substring(4, 6), 16) + "";
+            String day = Integer.parseInt(result.substring(6, 8), 16) + "";
+            String hour = Integer.parseInt(result.substring(8, 10), 16) + "";
+            int resValue = Integer.parseInt(result.substring(10, 12), 16) * 256 + Integer.parseInt(result.substring(12, 14), 16);
+            RecData data = new RecData();
+            StringBuilder time = new StringBuilder();
+            //yyyy-MM-dd HH:mm:ss
+            time.append(year).append("-").append(month).append("-").append(day).append(" ").append(hour).append(":00:00");
+            Log.d("haijiang", "=====time=====" + time.toString());
+            data.setTime(time.toString());
+            data.setValue(NumberUtils.getBigDecimalValue((resValue) / 100.0, 3));
+            submitHisResult.add(data);
+        }
+    }
+
+    /**
+     * ������������
+     */
+    private void checkTime() {
+        if (mBluetoothService == null) {
+            return;
+        }
+        if (mBluetoothService.getWirteCharacteristic() == null) {
+            return;
+        }
+        StringBuilder blesb = new StringBuilder();
+        blesb.append("4A");
+        Calendar now = Calendar.getInstance();
+        blesb.append(toHex(Integer.toHexString((now.get(Calendar.YEAR) - 2000))));
+        blesb.append(toHex(Integer.toHexString((now.get(Calendar.MONTH) + 1))));
+        blesb.append(toHex(Integer.toHexString((now.get(Calendar.DAY_OF_MONTH)))));
+        blesb.append(toHex(Integer.toHexString((now.get(Calendar.HOUR_OF_DAY)))));
+        blesb.append(toHex(Integer.toHexString((now.get(Calendar.MINUTE)))));
+        blesb.append("4B");
+        mBluetoothService.write(mBluetoothService.getWirteCharacteristic().getService().getUuid().toString(), mBluetoothService.getWirteCharacteristic().getUuid().toString(), blesb.toString(), null);
+    }
+
+    private String toHex(String s) {
+        if (s.length() == 1) {
+            return "0" + s;
+        } else {
+            return s;
+        }
+    }
 }

--
Gitblit v1.8.0