MQService.java 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359
  1. package com.bgy.autosale.payutil;
  2. import static com.hboxs.base_library.util.ToastUtil.showToast;
  3. import android.app.Service;
  4. import android.content.BroadcastReceiver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.net.ConnectivityManager;
  9. import android.net.NetworkInfo;
  10. import android.net.wifi.WifiManager;
  11. import android.os.Bundle;
  12. import android.os.Handler;
  13. import android.os.IBinder;
  14. import android.os.Message;
  15. import android.util.Log;
  16. import com.alibaba.android.arouter.facade.annotation.Route;
  17. import com.bgy.autosale.App;
  18. import com.bgy.autosale.Constant;
  19. import com.bgy.autosale.IceCreamDeviceConstants;
  20. import com.bgy.autosale.R;
  21. import com.bgy.autosale.RemoteSupportService;
  22. import com.bgy.autosale.helpers.CommunicationHelper;
  23. import com.bgy.autosale.interfaces.SendCallback;
  24. import com.bgy.autosale.ui.operator.LockActivity;
  25. import com.bgy.autosale.ui.MainActivity;
  26. import com.bgy.autosale.ui.operator.fragments.PriceFragment;
  27. import com.bgy.autosale.utils.SPUtils;
  28. import com.example.spunsugar.http.bean.GetAdBean;
  29. import com.hboxs.base_library.event.ApiMessageEvent;
  30. import com.google.gson.Gson;
  31. import com.google.gson.reflect.TypeToken;
  32. import com.hboxs.base_library.base.IView;
  33. import com.hboxs.base_library.beans.ProductsBean;
  34. import com.hboxs.base_library.constant.BaseConstant;
  35. import com.hboxs.base_library.constant.Global;
  36. import com.hboxs.base_library.constant.Heartbeat;
  37. import com.hboxs.base_library.constant.Name;
  38. import com.hboxs.base_library.http.NoPayOrderApi;
  39. import com.hboxs.base_library.http.NoPayOrderStringApi;
  40. import com.hboxs.base_library.http.exception.BaseException;
  41. import com.hboxs.base_library.http.exception.ExceptionFactory;
  42. import com.hboxs.base_library.http.observer.HttpResultNotActivityObserver;
  43. import com.hboxs.base_library.http.observer.HttpResultObserver;
  44. import com.hboxs.base_library.http.response.HttpResult;
  45. import com.hboxs.base_library.http.response.HttpResultHandler;
  46. import com.hboxs.base_library.util.FileUtil;
  47. import com.hboxs.base_library.util.LogUtil;
  48. import com.hboxs.base_library.util.LogUtils;
  49. import com.hboxs.base_library.util.SharedPreferencesUtils;
  50. import com.hboxs.base_library.util.UiUtil;
  51. import com.orhanobut.hawk.Hawk;
  52. import com.rabbitmq.client.AMQP;
  53. import com.rabbitmq.client.Channel;
  54. import com.rabbitmq.client.Connection;
  55. import com.rabbitmq.client.ConnectionFactory;
  56. import com.rabbitmq.client.DefaultConsumer;
  57. import com.rabbitmq.client.Envelope;
  58. import org.greenrobot.eventbus.EventBus;
  59. import java.io.ByteArrayOutputStream;
  60. import java.io.DataInputStream;
  61. import java.io.File;
  62. import java.io.FileInputStream;
  63. import java.io.FileOutputStream;
  64. import java.io.IOException;
  65. import java.io.InputStream;
  66. import java.io.OutputStream;
  67. import java.net.HttpURLConnection;
  68. import java.net.URL;
  69. import java.text.SimpleDateFormat;
  70. import java.util.ArrayList;
  71. import java.util.Date;
  72. import java.util.HashMap;
  73. import java.util.List;
  74. import java.util.Map;
  75. import io.reactivex.Observable;
  76. import io.reactivex.android.schedulers.AndroidSchedulers;
  77. import io.reactivex.disposables.CompositeDisposable;
  78. import io.reactivex.observers.DisposableObserver;
  79. import io.reactivex.schedulers.Schedulers;
  80. @Route(path = "/module_app/mqservice")
  81. public class MQService extends Service implements SendCallback {
  82. private static final String TAG = "MQService";
  83. ConnectionFactory factory;
  84. private String userName = "admin";
  85. private String passWord = "admin";
  86. private String hostName = "112.74.63.148";
  87. // private String hostName = "192.168.0.184";//
  88. private int portNum = 5672;
  89. private String queueName = Heartbeat.deviceId; //队列
  90. public static volatile Boolean connect = false;
  91. final Handler handler = new Handler() {
  92. @Override
  93. public void handleMessage(Message msg) {
  94. Log.d(TAG, "handleMessage: " + msg);
  95. getMessage(msg);
  96. }
  97. };
  98. public int pushNumber = 0;
  99. private List<PriceFragment.PriceBean> priceBeans; //保存价格
  100. private File file = new File(FileUtil.FILEPATH + FileUtil.getFileName());
  101. private File fileMkdirs = new File(FileUtil.FILEPATH);
  102. private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  103. private String date = format.format(new Date(System.currentTimeMillis()));
  104. private FileOutputStream mFileOutputStream;
  105. private boolean isSetSuccess = false; //是否置为成功
  106. private boolean isRstSuccess = false; //是否复位成功
  107. private NetWorkBroadCastReciver mNetWorkBroadCastReciver;
  108. private boolean isManualMake = false;
  109. private void getMessage(Message msg) {
  110. String message = msg.getData().getString("msg");
  111. Gson gson = new Gson();
  112. Log.d(TAG, ":BJQXUserlogin getMessage: " + message);
  113. BaseBean baseBean = gson.fromJson(message, BaseBean.class);
  114. Log.d(TAG, baseBean.getKind() + ":BJQXUserlogin getMessage: " + message + baseBean);
  115. String kind = baseBean.getKind();
  116. // if (TextUtils.isEmpty(Heartbeat.managerId)) return;
  117. Log.d(TAG, "MQ getMessage: " + kind);
  118. switch (kind) {
  119. //显示花型
  120. case "updateProductsShow":
  121. // updateProductsShow(gson, baseBean, kind);
  122. break;
  123. case "products":
  124. //保存价格到本地
  125. savePriceData(gson, baseBean, kind);
  126. break;
  127. case "guestPwd":
  128. // savePas(gson, baseBean, Name.GUEST);
  129. break;
  130. case "adminPwd":
  131. savePas(gson, baseBean, Name.ADMIN);
  132. break;
  133. case "pay_success":
  134. pay(gson, baseBean, kind);
  135. break;
  136. case "statusType"://连接服务器
  137. statusType(gson, baseBean, kind);
  138. break;
  139. case "push":
  140. //更新广告
  141. // String json = baseBean.getKind_data();
  142. // if (json.equals("更新广告")) {
  143. // saveAd();
  144. // }
  145. break;
  146. case "phone":
  147. //联系方式
  148. saveContacts(gson, baseBean, kind);
  149. break;
  150. case "pushTimeRule"://广告是按照这里来的。
  151. //广告规则
  152. // if (Hawk.get(Name.ADVERTISING_RULES, true)) {
  153. // Log.d(TAG, "pushTimeRule etMessage1: ");
  154. // changeAdRules(gson, baseBean, kind);
  155. // } else {
  156. // if (pushNumber > 7) {
  157. // Log.d(TAG, "pushTimeRule etMessage2: ");
  158. // changeAdRules(gson, baseBean, kind);
  159. //
  160. // } else {
  161. // pushNumber++;
  162. //
  163. // }
  164. // }
  165. break;
  166. case "machineReset":
  167. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_RESET, this);
  168. break;
  169. case "eqeStatus":
  170. //远程开关机
  171. openOrClose(gson, baseBean, kind);
  172. break;
  173. case "block":
  174. //锁机
  175. // block(baseBean.getKind_data());
  176. break;
  177. case "is_sleep":
  178. // LogUtils.logWrite("远程操作休眠");
  179. sleep(baseBean.getKind_data());
  180. break;
  181. case "Param"://远程修改参数
  182. // UpdateAloneParam(baseBean.getKind_data());
  183. // LogUtils.logWrite("远程修改参数:" + baseBean.getKind_data());
  184. break;
  185. case "tuoji":
  186. //清除连接成功的数据
  187. // SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 0);
  188. // Heartbeat.managerId = "";
  189. // SharedPreferencesUtils.setParam(Name.SYSTEM_ID, Heartbeat.managerId);
  190. break;
  191. case "log":
  192. // LogUtil.d(TAG, "logdata" + baseBean.getKind_data());
  193. // 远程上传日志文件
  194. uploadLogApi(baseBean.getKind_data());
  195. break;
  196. case "onoffstatus":
  197. // Log.d(TAG, "onReceiveMessageData: onoffstatusonoffstatus");
  198. // updateEqeStatus((Integer) SharedPreferencesUtils.getParam("open", 0));
  199. break;
  200. case "updateBootTime":
  201. // LogUtil.d(TAG, "onReceiveMessageData: updateBootTime:" + baseBean.getKind_data());
  202. // updateOfforBootTime(baseBean, "boot");
  203. break;
  204. case "updateOffTime":
  205. // LogUtil.d(TAG, "onReceiveMessageData: updateOffTime:" + baseBean.getKind_data());
  206. // updateOfforBootTime(baseBean, "off");
  207. break;
  208. case "pay_faile":
  209. // todo 反扫失败,我们需要提示支付失败,请重新提供码
  210. // EventBus.getDefault().post(new ApiMessageEvent("pay_faile", null));
  211. break;
  212. case "eliminate":
  213. //todo 消除报警,并且告知后台消除报警成功。
  214. // if (IceCreamErrorUtils.getInstance().getErrorMessage()!=null){
  215. // EventBus.getDefault().post(new ApiMessageEvent(Name.WARNING_ALARM,IceCreamErrorUtils.getInstance().getErrorMessage()));
  216. // }
  217. // eliminateApi(gson, baseBean, kind);
  218. break;
  219. case "dosugar":
  220. //远程制作棉花糖
  221. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_OPERATE_CLEAN, this);
  222. // EventBus.getDefault().post(new ApiMessageEvent("dosugar", baseBean.getKind_data()));
  223. break;
  224. case "alarmClock":
  225. //远程星期调节闹钟
  226. // if (!Hawk.get(Name.ALARMCLOCK_TYPE, false)) {
  227. // parseWeekTime(gson, baseBean);
  228. // }
  229. //EventBus.getDefault().post(new ApiMessageEvent("alarmClock", baseBean.getKind_data()));
  230. break;
  231. case "volume":
  232. // String kind_data = baseBean.getKind_data();
  233. // try {
  234. // int i = Integer.parseInt(kind_data);
  235. // if (i >= 0 && i <= 15) {
  236. // AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  237. // am.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
  238. // LogUtils.logWrite("MQ的音量:" + i);
  239. // }
  240. // } catch (Exception e) {
  241. // }
  242. break;
  243. case "selfName"://客户自填地址
  244. // PushToinform(Name.SELFNAME, baseBean.getKind_data());
  245. break;
  246. case "operational"://运营名字:联系电话。
  247. // PushToinform(Name.OPERATIONAL, baseBean.getKind_data());
  248. break;
  249. case "qrCodeImgUrl"://公众号图片地址:http://47.112.127.131/img/qr.jpg
  250. // qrCodeImgUrl(kind, baseBean.getKind_data());
  251. break;
  252. case "flowers"://远程修改花型
  253. // if (Global.isInProduction) {//是否支持修改,如果支持就修改。
  254. // //首先判断是否支持,如果支持,直接修改plc,plc修改成功后,通知后台,通知成功后,再次进行增加花型。
  255. // Log.d(TAG, "flowers getMessage: " + kind + ":" + baseBean.getKind_data());
  256. // EventBus.getDefault().post(new ApiMessageEvent("flowers", baseBean.getKind_data()));
  257. // }
  258. break;
  259. case "payType":
  260. //支付方式
  261. // savaPayType(gson, baseBean, kind);
  262. break;
  263. case "updateLogo":
  264. //修改logo
  265. updateLogo(gson, baseBean, kind);
  266. EventBus.getDefault().post(new ApiMessageEvent("updateUI","1"));
  267. break;
  268. case "updateProductsPrice"://更新价格
  269. getProductPrice();
  270. break;
  271. case "humidityParameters"://区间参数
  272. // humidityParameters(baseBean.getKind_data());
  273. // LogUtils.logWrite("远程参数:" + baseBean.getKind_data());
  274. break;
  275. case "buliao"://补料
  276. // EventBus.getDefault().post(new ApiMessageEvent("buliao", baseBean.getKind_data()));
  277. break;
  278. case "appStatusType"://获取app的状态
  279. // Log.d(TAG, "appStatusType getMessage: appStatusTypeappStatusTypeappStatusTypeappStatusType");
  280. appStatusType(gson, baseBean, kind);
  281. break;
  282. case "indoor"://远程开关内门
  283. // EventBus.getDefault().post(new ApiMessageEvent("indoor", baseBean.getKind_data()));
  284. break;
  285. case "outdoor"://远程开关外门
  286. // EventBus.getDefault().post(new ApiMessageEvent("outdoor", baseBean.getKind_data()));
  287. break;
  288. case "youxun_pay_success":
  289. // pay(gson, baseBean, kind);
  290. break;
  291. case "sleepDesc":
  292. String hibernation = baseBean.getKind_data();
  293. sleepDesc(hibernation);
  294. break;
  295. case "paymentType"://修改支付方式
  296. // String kind_data1 = baseBean.getKind_data();
  297. // if (kind_data1 != null) {
  298. // EventBus.getDefault().post(new ApiMessageEvent("paymentType", baseBean.getKind_data()));
  299. // }
  300. break;
  301. case "cardPayXCX":
  302. // LogUtils.logWrite("cardPayXCX:" + baseBean.getKind_data());
  303. // EventBus.getDefault().post(new ApiMessageEvent("cardPayXCX", baseBean.getKind_data()));
  304. break;
  305. case "updateApk":
  306. // EventBus.getDefault().post(new ApiMessageEvent("updateApk", baseBean.getKind_data()));
  307. break;
  308. case "refuse_success"://删除排队中的某个订单
  309. // EventBus.getDefault().post(new ApiMessageEvent("refuse_success", baseBean.getKind_data()));
  310. break;
  311. case "couponStatus":// 关闭优惠券识别字符串 0:关闭,1:开启
  312. // EventBus.getDefault().post(new ApiMessageEvent("couponStatus", baseBean.getKind_data()));
  313. break;
  314. case "restartAndroid"://重启安卓屏
  315. try {
  316. Process proc = Runtime.getRuntime().exec(new String[]{"su", "-c", "reboot"});
  317. proc.waitFor();
  318. } catch (Exception ex) {
  319. ex.printStackTrace();
  320. }
  321. break;
  322. case "workingMode"://雪糕机的工作模式(0:制冷,1:搅拌,2:保鲜)
  323. String mode= baseBean.getKind_data();
  324. if (mode.equals("0")){
  325. LogUtils.logWrite("远程制冷");
  326. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_REFRIGERATION, this);
  327. }else if (mode.equals("1")){
  328. LogUtils.logWrite("远程搅拌");
  329. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_CLEAN, this);
  330. }else if (mode.equals("2")){
  331. LogUtils.logWrite("远程保鲜");
  332. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_KEEP_FRESH, this);
  333. }
  334. break;
  335. default:
  336. break;
  337. }
  338. }
  339. public void getProductPrice() {
  340. HashMap<String, String> params = new HashMap<>();
  341. params.put("clientId", Heartbeat.deviceId);
  342. addSubscriptionNew(NoPayOrderStringApi.api.getproducts(params), String.class,
  343. new HttpResultObserver<String>(view, getApplicationContext()) {
  344. @Override
  345. public void onNext(String result) {
  346. Log.d(TAG, "getProductPrice type onNext: " + result);
  347. Gson gson = new Gson();
  348. List<ProductsBean> userList = gson.fromJson(result, new TypeToken<List<ProductsBean>>() {
  349. }.getType());
  350. if (result != null) {
  351. ArrayList<PriceFragment.PriceBean> priceBeans = Hawk.get("PRICEBEAN",new ArrayList<PriceFragment.PriceBean>());
  352. //取出list
  353. for (ProductsBean productsBean : userList) {
  354. String productName;
  355. String no=productsBean.getNo();
  356. if (productsBean.getName() != null && !"".equals(productsBean.getName())) {
  357. productName = productsBean.getName();
  358. } else {
  359. productName = productsBean.getProductName();
  360. }
  361. Log.d(TAG, ":1getproducts onNext: " + productName + ":" + productsBean.getRmbPrice());
  362. for (PriceFragment.PriceBean priceBean : priceBeans) {
  363. Log.d(TAG, "getNoonNext: "+priceBean.getNo()+":"+no);
  364. if (priceBean.getNo().equals(no)){
  365. priceBean.setPriceKey(String.valueOf(productsBean.getRmbPrice()));
  366. }
  367. if (priceBean.getChineseName().equals(productName)) {
  368. priceBean.setPriceKey(String.valueOf(productsBean.getRmbPrice()));
  369. Log.d(TAG, "PriceFragment.PriceBean onNext: " + priceBean.getNameKey() + ":" + String.valueOf(productsBean.getRmbPrice()));
  370. }
  371. }
  372. }
  373. Hawk.put("PRICEBEAN", priceBeans);
  374. for (int i = 0; i < 6; i++) {
  375. SPUtils.getInstance(App.app).putString((PriceFragment.ProductAbout.priceKey[i]), priceBeans.get(i).getPriceKey());
  376. }
  377. EventBus.getDefault().post(new ApiMessageEvent("updateUI", 1));
  378. }
  379. }
  380. @Override
  381. public void onError(Throwable t) {
  382. super.onError(t);
  383. Log.d(TAG, "getProductPrice onError: " + t.getMessage());
  384. BaseException exception = ExceptionFactory.create(t);
  385. }
  386. });
  387. }
  388. private void pay(Gson gson, BaseBean baseBean, String kind) {
  389. //支付成功
  390. String json = baseBean.getKind_data();
  391. PaySucessBean paySucessBean = gson.fromJson(json, PaySucessBean.class);
  392. PaySuccessConstant.sn = paySucessBean.getSn();
  393. PaySuccessConstant.productName = paySucessBean.getProductName();
  394. LogUtils.logWrite("第一步:存儲信息,支付成功");
  395. EventBus.getDefault().post(new ApiMessageEvent(kind, "7"));
  396. }
  397. private void cheeckConnectState(boolean isFrist) {
  398. int connectState = (int) SharedPreferencesUtils.getParam(Name.CONNECT_STATE, -1);
  399. LogUtil.d(TAG, "cheeckConnectState: 当前状态为" + connectState);
  400. Log.e(TAG, "cheeckConnectState: " + connectState);
  401. if (connectState == 2) {
  402. String param = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "");
  403. Log.e(TAG, isFrist + ":cheeckConnectState:连接成功: " + connectState);
  404. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 2);
  405. Heartbeat.deviceId = FileUtil.getDeviceId();
  406. if (isFrist) {
  407. //开始心跳
  408. Intent intent = new Intent(this, RemoteSupportService.class);
  409. Bundle bundle = new Bundle();
  410. bundle.putInt("heartbeat", 3);
  411. intent.putExtras(bundle);
  412. startService(intent);
  413. }
  414. if (Hawk.get("show_out", null) == null ||
  415. Hawk.get("showAdA", null) == null) {
  416. EventBus.getDefault().post(new ApiMessageEvent("rule", null));
  417. }
  418. }
  419. }
  420. private void appStatusType(Gson gson, BaseBean baseBean, String kind) {
  421. Log.d(TAG, "appStatusType: " + baseBean);
  422. String json = baseBean.getKind_data();
  423. Log.d(TAG, "appStatusType: " + json);
  424. AppStatusType appStatusType = gson.fromJson(json, AppStatusType.class);
  425. Log.d(TAG, "appStatusType: " + appStatusType);
  426. if (appStatusType.getStatus().equals("rejected")) {
  427. //拒绝
  428. showToast(UiUtil.getStringRes(R.string.rejected));
  429. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 0);
  430. Log.e(TAG, "statusType: 申请拒绝");
  431. } else if (appStatusType.getStatus().equals("agreed")) {
  432. //申请通过
  433. showToast(UiUtil.getStringRes(R.string.rejected1));
  434. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 2);
  435. Log.e(TAG, "statusType: 申请通过");
  436. SharedPreferencesUtils.setParam(Name.SYSTEM_ID, appStatusType.getManagerId());
  437. } else if (appStatusType.getStatus().equals("agreed1")) {
  438. showToast("第二次");
  439. showToast(UiUtil.getStringRes(R.string.rejected1));
  440. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 2);
  441. Log.e(TAG, "statusType: 申请通过");
  442. SharedPreferencesUtils.setParam(Name.SYSTEM_ID, appStatusType.getManagerId());
  443. // interService 不能弹出弹窗 在 service中弹出
  444. }
  445. EventBus.getDefault().post(new ApiMessageEvent("statusType", null));
  446. cheeckConnectState(true);
  447. }
  448. /**
  449. * 初始化回调
  450. *
  451. * @param gson
  452. * @param baseBean
  453. * @param kind
  454. */
  455. private void statusType(Gson gson, BaseBean baseBean, String kind) {
  456. String json = baseBean.getKind_data();
  457. String s = gson.fromJson(json, String.class);
  458. if (s.equals("rejected")) {
  459. //拒绝
  460. showToast(UiUtil.getStringRes(R.string.rejected));
  461. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 0);
  462. Log.e(TAG, "statusType: 申请拒绝");
  463. } else if (s.equals("agreed")) {
  464. //申请通过
  465. showToast(UiUtil.getStringRes(R.string.rejected1));
  466. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 2);
  467. Log.e(TAG, "statusType: 申请通过");
  468. SharedPreferencesUtils.setParam(Name.SYSTEM_ID, Heartbeat.managerId);
  469. } else if (s.equals("agreed1")) {
  470. showToast("第二次");
  471. showToast(UiUtil.getStringRes(R.string.rejected1));
  472. SharedPreferencesUtils.setParam(Name.CONNECT_STATE, 2);
  473. Log.e(TAG, "statusType: 申请通过");
  474. SharedPreferencesUtils.setParam(Name.SYSTEM_ID, Heartbeat.managerId);
  475. // interService 不能弹出弹窗 在 service中弹出
  476. EventBus.getDefault().post(new ApiMessageEvent(kind + "1", null));
  477. }
  478. EventBus.getDefault().post(new ApiMessageEvent(kind, null));
  479. }
  480. //增加一个前置条件
  481. private void saveAdRulesBefore(String id) {
  482. //如果id为1,并且这里是全屏,那么就推送235的
  483. if (Hawk.get(Name.DEFAULT_FULL_SCREEN, true) && "1".equals(id) && !Hawk.get(Name.PLAY_MODE, false)) {
  484. saveAdRules("779");
  485. } else {
  486. saveAdRules(id);
  487. }
  488. }
  489. /**
  490. * 保存广告id
  491. */
  492. private void saveAdRules(String id) {
  493. Long lid = Long.valueOf(id);
  494. Map<String, Long> params = new HashMap<>();
  495. params.put("id", lid);
  496. addSubscriptionNew(NoPayOrderStringApi.api.getTimeRule(params), String.class,
  497. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  498. @Override
  499. public void onNext(String s) {
  500. LogUtil.d(TAG, "1ad_rules s ->" + s);
  501. //保存广告规则json
  502. SharedPreferencesUtils.setParam("ad_time_rule", s);
  503. //广告数据
  504. rule(s);
  505. //发送设备id
  506. getAdByEquipment(s);
  507. LogUtil.d(TAG, "onNextgetAdByEquipment: ");
  508. }
  509. @Override
  510. public void onError(Throwable t) {
  511. super.onError(t);
  512. Log.d(TAG, "onError: ");
  513. BaseException exception = ExceptionFactory.create(t);
  514. }
  515. });
  516. }
  517. int ruleNumber = 0;
  518. /**
  519. * 和旧系统不同之处
  520. *
  521. * @param s
  522. */
  523. private void rule(String s) {
  524. Gson gson = new Gson();
  525. List<String> list = gson.fromJson(s, new TypeToken<List<String>>() {
  526. }.getType());
  527. //每个id对应的时间数
  528. Map<String, String> adRulesMap = new HashMap<>();
  529. List<GetAdBean> adRulesList = new ArrayList<>();
  530. for (int j = 0; j < list.size(); j++) {
  531. //每个规则里对应的广告
  532. String ad = list.get(j);
  533. Map<String, String> params = new HashMap<>();
  534. params.put("id", ad);
  535. addSubscription(NoPayOrderApi.api.getAd(params).compose(HttpResultHandler.<String>transformer()),
  536. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  537. @Override
  538. public void onNext(String s) {
  539. ruleNumber++;
  540. List<GetAdBean> userList = gson.fromJson(s, new TypeToken<List<GetAdBean>>() {
  541. }.getType());
  542. String model = Hawk.get(Name.MACHINE_TYPE, Name.SI320);
  543. GetAdBean getAdBean = userList.get(0);
  544. String equipmentType = getAdBean.getEquipmentType();
  545. if (Global.isVersions == 2) {
  546. //国外330
  547. if (equipmentType.contains("en")) {//必须是国外的
  548. if (model.equals("SI320")) {
  549. if (equipmentType.equals("SI320")) {
  550. adRulesMap.put(ad, s);
  551. adRulesList.add(userList.get(0));
  552. }
  553. } else if (model.equals("SI320")) {
  554. if (equipmentType.equals("SI320")) {
  555. adRulesMap.put(ad, s);
  556. adRulesList.add(userList.get(0));
  557. }
  558. }
  559. }
  560. } else if (Global.isVersions == 1) {
  561. if (!equipmentType.contains("en")) {//必须是国内的
  562. if (model.equals("SI320")) {
  563. if (equipmentType.equals("SI320")) {
  564. adRulesMap.put(ad, s);
  565. adRulesList.add(userList.get(0));
  566. }
  567. } else if (model.equals("SI320")) {
  568. if (equipmentType.equals("SI320")) {
  569. adRulesMap.put(ad, s);
  570. adRulesList.add(userList.get(0));
  571. }
  572. }
  573. }
  574. }
  575. Log.d(TAG, list.size() + ":getAd onNext: " + ruleNumber + ":" + s);
  576. if (ruleNumber == list.size()) {
  577. Log.d(TAG, "getAd onNext: ");
  578. ruleNumber = 0;
  579. //说明全部请求完成
  580. Hawk.put("ad_rules_map", adRulesMap);
  581. Log.d(TAG, "ad_rules_map onNext: " + adRulesMap.size());
  582. String s1 = gson.toJson(adRulesList);
  583. // EventBus.getDefault().post(new ApiMessageEvent("DOWNKOADADCID_NEW", adRulesList));
  584. Log.d(TAG, adRulesList.size() + ":getAd onNext2: " + s1);
  585. }
  586. }
  587. @Override
  588. public void onError(Throwable t) {
  589. super.onError(t);
  590. BaseException exception = ExceptionFactory.create(t);
  591. }
  592. });
  593. }
  594. //保存对应的id对应的广告规则
  595. }
  596. /**
  597. * 上传设备id和型号 和旧系统不同之处
  598. */
  599. int downRuleNumber = 0;
  600. private void getAdByEquipment(String s) {
  601. Gson gson = new Gson();
  602. List<String> list = gson.fromJson(s, new TypeToken<List<String>>() {
  603. }.getType());
  604. //每个id对应的时间数
  605. Map<String, String> adRulesMap = new HashMap<>();
  606. List<GetAdBean> adRulesList = new ArrayList<>();
  607. for (int j = 0; j < list.size(); j++) {
  608. //每个规则里对应的广告
  609. String ad = list.get(j);
  610. Map<String, String> params = new HashMap<>();
  611. params.put("id", ad);
  612. addSubscription(NoPayOrderApi.api.getAd(params).compose(HttpResultHandler.<String>transformer()),
  613. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  614. @Override
  615. public void onNext(String s) {
  616. downRuleNumber++;
  617. List<GetAdBean> userList = gson.fromJson(s, new TypeToken<List<GetAdBean>>() {
  618. }.getType());
  619. String model = Hawk.get(Name.MACHINE_TYPE, Name.SI320);
  620. GetAdBean getAdBean = userList.get(0);
  621. String equipmentType = getAdBean.getEquipmentType();
  622. if (Global.isVersions == 2) {
  623. //国外330
  624. if (equipmentType.contains("en")) {//必须是国外的
  625. if (model.equals("SI320")) {
  626. if (equipmentType.equals("SI320en")) {
  627. adRulesMap.put(ad, s);
  628. adRulesList.add(userList.get(0));
  629. }
  630. } else if (model.equals("SI320")) {
  631. if (equipmentType.equals("SI320en")) {
  632. adRulesMap.put(ad, s);
  633. adRulesList.add(userList.get(0));
  634. }
  635. }
  636. }
  637. } else if (Global.isVersions == 1) {
  638. if (!equipmentType.contains("en")) {//必须是国内的
  639. if (model.equals("SI320")) {
  640. if (equipmentType.equals("SI320")) {
  641. adRulesMap.put(ad, s);
  642. adRulesList.add(userList.get(0));
  643. }
  644. } else if (model.equals("SI320")) {
  645. if (equipmentType.equals("SI320")) {
  646. adRulesMap.put(ad, s);
  647. adRulesList.add(userList.get(0));
  648. }
  649. }
  650. }
  651. }
  652. Log.d(TAG, list.size() + ":11getAd onNext: " + downRuleNumber + ":" + s);
  653. if (downRuleNumber == list.size()) {
  654. Log.d(TAG, "getAd onNext: ");
  655. downRuleNumber = 0;
  656. //说明全部请求完成
  657. Hawk.put("ad_rules_map", adRulesMap);
  658. Log.d(TAG, "ad_rules_map onNext: " + adRulesMap.size());
  659. String s1 = gson.toJson(adRulesList);
  660. EventBus.getDefault().post(new ApiMessageEvent("DOWNKOADADCID_NEW", adRulesList));
  661. Log.d(TAG, adRulesList.size() + ":11getAd onNext2: " + s1);
  662. }
  663. }
  664. @Override
  665. public void onError(Throwable t) {
  666. super.onError(t);
  667. BaseException exception = ExceptionFactory.create(t);
  668. }
  669. });
  670. }
  671. }
  672. @Override
  673. public IBinder onBind(Intent intent) {
  674. return null;
  675. }
  676. @Override
  677. public void onCreate() {
  678. super.onCreate();
  679. Log.d(TAG, "onCreate......");
  680. //连接设置
  681. setupConnectionFactory();
  682. //开启消费者线程
  683. //subscribe(incomingMessageHandler);
  684. basicConsume(1);
  685. Log.d(TAG, "oncrect里么的线程开启了");
  686. mNetWorkBroadCastReciver = new NetWorkBroadCastReciver();
  687. IntentFilter intentFilter = new IntentFilter();
  688. intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
  689. intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
  690. intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
  691. intentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
  692. registerReceiver(mNetWorkBroadCastReciver, intentFilter);
  693. }
  694. @Override
  695. public void onDestroy() {
  696. super.onDestroy();
  697. unregisterReceiver(mNetWorkBroadCastReciver);
  698. Log.d(TAG, "MQ onDestroy: ");
  699. }
  700. /**
  701. * 连接设置
  702. */
  703. private void setupConnectionFactory() {
  704. factory = new ConnectionFactory();
  705. factory.setHost(hostName);
  706. factory.setPort(portNum);
  707. factory.setUsername(userName);
  708. factory.setPassword(passWord);
  709. }
  710. private int addTime = 0;
  711. @Override
  712. public int onStartCommand(Intent intent, int flags, int startId) {
  713. if (intent != null) {
  714. Bundle extras = intent.getExtras();
  715. if (extras != null) {
  716. int first = extras.getInt("connect");
  717. if (first == 1) {//5分钟来一次。
  718. basicConsume(6);
  719. }
  720. }
  721. }
  722. int connectState = (int) SharedPreferencesUtils.getParam(Name.CONNECT_STATE, 999);
  723. Log.d(TAG, "onStartCommand......" + connectState);
  724. if (connectState == 999) {//如果说是第一次,则表示还没有创建
  725. initView();
  726. } else {//如果说是第二次,则可以直接打开。因为已经创建出来了。
  727. initView1();
  728. }
  729. //消费者服务线程
  730. return super.onStartCommand(intent, flags, startId);
  731. }
  732. //旧方法
  733. private void initView() {
  734. String data = (String) SharedPreferencesUtils.getParam(Name.QUEUE_DATA, ""); //连接设备id
  735. Log.d(TAG, "data initView: " + data);
  736. // String updateMaterialStatus = (String) SharedPreferencesUtils.getParam(Name.SEPARATE_SUCCESS, ""); //脱离系统
  737. String updateMaterialStatus = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "");
  738. if ("".equals(updateMaterialStatus)) {//因为脱离系统了,那么就清空,重新创建
  739. data = "";
  740. }
  741. String machineType = Hawk.get(Name.MACHINE_TYPE, Name.SI320);
  742. Log.d(TAG, data + ": mq getAddQueue: " + machineType);
  743. // SharedPreferencesUtils.setParam(Name.QUEUE_DATA, data);
  744. if ("".equals(Heartbeat.deviceId)) {
  745. //如果没有id,肯定是新机器,无创建过队列,直接 return;
  746. Log.d(TAG, "mq1,没有id,直接跳出");
  747. return;
  748. } else {
  749. Log.d(TAG, "mq1,有id的情况");
  750. if (data.equals("成功")) {
  751. //创建过队列。
  752. Log.d(TAG, "mq1,创建过队列,开启过线程,直接退出");
  753. return;
  754. } else {
  755. if (addTime > 0) {
  756. return;
  757. } else {
  758. Log.d(TAG, "mq1,没有创建过队列,没有开启过线程,现在开始创建和开启");
  759. getAddQueue(); //创建mq
  760. getChannel(); //修改通道
  761. }
  762. }
  763. }
  764. Log.d(TAG, "mq,这里都会执行");
  765. //开启消费者线程
  766. //subscribe(incomingMessageHandler);
  767. if (!connect) {
  768. basicConsume(2);
  769. }
  770. }
  771. private void initView1() {
  772. String data = (String) SharedPreferencesUtils.getParam(Name.QUEUE_DATA, ""); //连接设备id
  773. Log.d(TAG, "1data initView: " + data);
  774. // String updateMaterialStatus = (String) SharedPreferencesUtils.getParam(Name.SEPARATE_SUCCESS, ""); //脱离系统
  775. String updateMaterialStatus = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "");
  776. // if ("".equals(updateMaterialStatus)) {//因为脱离系统了,那么就清空,重新创建
  777. // data = "";
  778. // }
  779. String machineType = Hawk.get(Name.MACHINE_TYPE, Name.SI320);
  780. Log.d(TAG, data + ": mq getAddQueue: " + machineType);
  781. // SharedPreferencesUtils.setParam(Name.QUEUE_DATA, data);
  782. if ("".equals(FileUtil.getDeviceId1())) {
  783. //如果没有id,肯定是新机器,无创建过队列,直接 return;
  784. Log.d(TAG, "mq,没有id,直接跳出");
  785. return;
  786. } else {
  787. Log.d(TAG, "mq,有id的情况");
  788. if (data.equals("成功")) {
  789. //创建过队列。
  790. Log.d(TAG, "mq,创建过队列,开启过线程,直接退出");
  791. return;
  792. } else {
  793. if (addTime > 0) {
  794. return;
  795. } else {
  796. Log.d(TAG, "mq,没有创建过队列,没有开启过线程,现在开始创建和开启" + Heartbeat.deviceId);
  797. getAddQueue(); //创建mq
  798. getChannel(); //修改通道
  799. }
  800. }
  801. }
  802. Log.d(TAG, "mq,这里都会执行");
  803. //开启消费者线程
  804. //subscribe(incomingMessageHandler);
  805. if (!connect) {
  806. basicConsume(2);
  807. }
  808. }
  809. private int networkState = 100;
  810. //接收网络状态改变的广播
  811. public class NetWorkBroadCastReciver extends BroadcastReceiver {
  812. @Override
  813. public void onReceive(Context context, Intent intent) {
  814. isNetConnected(context);
  815. Log.d(TAG, "NetWorkBroadCastReciver: ");
  816. }
  817. }
  818. public boolean isNetConnected(Context context) {
  819. ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  820. Log.d(TAG, "isNetConnected0: ");
  821. if (connectivity != null) {
  822. Log.d(TAG, "isNetConnected1: ");
  823. NetworkInfo info = connectivity.getActiveNetworkInfo();
  824. if (info != null) {
  825. Log.d(TAG, "isNetConnected2: ");
  826. if (info.getType() == networkState) {
  827. return false;
  828. }
  829. networkState = info.getType();
  830. if (info.getType() == (ConnectivityManager.TYPE_WIFI)) {
  831. if (!connect) {
  832. Log.d(TAG, "isNetConnectedTYPE_WIFI: 执行了一次。");
  833. basicConsume(3);
  834. }
  835. LogUtil.d("type1RemoteSupportService", "TYPE_WIFI: ");
  836. return true;
  837. } else if (info.getType() == (ConnectivityManager.TYPE_MOBILE)) {
  838. if (!connect) {
  839. Log.d(TAG, "isNetConnectedTYPE_MOBILE: 执行了一次。");
  840. basicConsume(4);
  841. }
  842. LogUtil.d("type1RemoteSupportService", "TYPE_MOBILE: ");
  843. return true;
  844. } else if (info.getType() == (ConnectivityManager.TYPE_ETHERNET)) {
  845. Log.d(TAG, "isNetConnected3: ");
  846. if (!connect) {
  847. Log.d(TAG, "isNetConnected4: ");
  848. LogUtil.d("type1RemoteSupportService", "TYPE_ETHERNET: ");
  849. basicConsume(7);
  850. }
  851. return true;
  852. }
  853. }
  854. }
  855. LogUtil.d("type1RemoteSupportService", "TYPE_NONE: ");
  856. return false;
  857. }
  858. /**
  859. * 收消息(从发布者那边订阅消息)
  860. */
  861. private void basicConsume(int id) {
  862. Log.d(TAG, "basicConsume: " + id);
  863. new Thread(new Runnable() {
  864. @Override
  865. public void run() {
  866. if (connect != true) {
  867. synchronized (handler) {
  868. if (connect != true) {
  869. int connectState = (int) SharedPreferencesUtils.getParam(Name.CONNECT_STATE, 999);
  870. if (connectState == 999) {
  871. queueName = Heartbeat.deviceId;
  872. LogUtils.logWrite("测试MQ1是不是为空" + Heartbeat.deviceId);
  873. } else {
  874. queueName = FileUtil.getDeviceId1();
  875. LogUtils.logWrite("测试MQ2是不是为空" + FileUtil.getDeviceId1());
  876. }
  877. try {
  878. //连接
  879. Connection connection = factory.newConnection();
  880. //通道
  881. final Channel channel = connection.createChannel();
  882. Log.d(TAG, "mqrun: 4" + queueName);
  883. //实现Consumer的最简单方法是将便捷类DefaultConsumer子类化。可以在basicConsume 调用上传递此子类的对象以设置订阅:
  884. channel.basicConsume(queueName, false, new DefaultConsumer(channel) {
  885. @Override
  886. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  887. super.handleDelivery(consumerTag, envelope, properties, body);
  888. Log.d(TAG, "mqrun: 5");
  889. String msg = new String(body, "utf-8");
  890. Log.d(TAG, "msg->" + msg);
  891. long deliveryTag = envelope.getDeliveryTag();
  892. Log.d(TAG, "deliveryTag->" + deliveryTag);
  893. channel.basicAck(deliveryTag, false);
  894. // 从message池中获取msg对象更高效
  895. Message uimsg = handler.obtainMessage();
  896. Bundle bundle = new Bundle();
  897. bundle.putString("msg", msg);
  898. uimsg.setData(bundle);
  899. handler.sendMessage(uimsg);
  900. }
  901. });
  902. connect = true;
  903. Log.d(TAG, "basicConsume run: " + connect);
  904. LogUtils.logWrite("mq连接成功");
  905. } catch (Exception e) {
  906. networkState = 100;
  907. e.printStackTrace();
  908. LogUtils.logWrite("mq连接失败" + netConnectedNumber + "次");
  909. new Thread(new Runnable() {
  910. @Override
  911. public void run() {
  912. while (netConnectedNumber < 10) { // 当重连次数小于10时执行循环
  913. try {
  914. Log.d(TAG, "isNetConnected7: " + netConnectedNumber);
  915. Thread.sleep(10000); // 等待10秒后再次执行
  916. isNetConnected(getApplicationContext());
  917. netConnectedNumber++; // 增加重连次数
  918. Log.d(TAG, "isNetConnected8: ");
  919. } catch (InterruptedException e) {
  920. e.printStackTrace();
  921. }
  922. }
  923. }
  924. }).start();
  925. Log.d(TAG, "mqrun basicConsume: IOException");
  926. Log.d(TAG, "mqrun basicConsume: IOException" + e.getMessage());
  927. }
  928. }
  929. }
  930. }
  931. }
  932. }).start();
  933. }
  934. private int netConnectedNumber = 0;
  935. //获取mq中的相关信息
  936. private void getAddQueue() {
  937. addTime = 1;
  938. Map<String, Object> params = new HashMap<>();
  939. Log.d(TAG, "Heartbeat.deviceId-->" + Heartbeat.deviceId);
  940. String machineType = Hawk.get(Name.MACHINE_TYPE, Name.SI320);
  941. params.put("exchange", machineType); //交换机的名称,机型
  942. params.put("queue", Heartbeat.deviceId); //队列的名称,机器的设备编码
  943. params.put("routingKey", Heartbeat.deviceId); //队列的key,机器的设备编码
  944. params.put("durable", true); //队列的key,机器的设备编码
  945. Log.d(TAG, Heartbeat.deviceId + ": mq getAddQueue: " + machineType);
  946. addSubscriptionNew(NoPayOrderStringApi.api.addQueue(params), String.class,
  947. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  948. @Override
  949. public void onNext(String data) {
  950. SharedPreferencesUtils.setParam(Name.QUEUE_DATA, data);
  951. Log.d(TAG, "getAddQueue发送成功mqservice" + data);
  952. }
  953. @Override
  954. public void onError(Throwable t) {
  955. super.onError(t);
  956. Log.d(TAG, "getAddQueue发送失败onError: " + t.getMessage());
  957. }
  958. });
  959. }
  960. /**
  961. * 修改通道
  962. */
  963. private void getChannel() {
  964. addTime = 1;
  965. Map<String, Object> params = new HashMap<>();
  966. params.put("clientId", Heartbeat.deviceId); //设备编号
  967. params.put("type", "2"); //type:信道的方式:1:个推,2:Mq ,默认是2
  968. addSubscriptionNew(NoPayOrderStringApi.api.updateChannel(params), String.class,
  969. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  970. @Override
  971. public void onNext(String data) {
  972. SharedPreferencesUtils.setParam(Name.CHANNEL_DATA, data);
  973. Log.d(TAG, "getChannel发送成功mqservice修改通道" + data);
  974. }
  975. @Override
  976. public void onError(Throwable t) {
  977. super.onError(t);
  978. }
  979. });
  980. }
  981. /**
  982. * 远程上传日志文件
  983. *
  984. * @param kindData
  985. */
  986. public void uploadLogApi(String kindData) {
  987. new Thread(new Runnable() {
  988. @Override
  989. public void run() {
  990. File file = new File("/storage/emulated/0/logdata/" + kindData + ".txt");
  991. LogUtil.d(TAG, "uploadLogApi: " + kindData);
  992. if (file.exists()) {
  993. if (file.isFile()) {
  994. DataInputStream in = null;
  995. OutputStream out = null;
  996. HttpURLConnection conn = null;
  997. InputStream ins = null;
  998. ByteArrayOutputStream outStream = null;
  999. try {
  1000. URL url = new URL(BaseConstant.ONLINE_BASE_URL + "/api/app_equipment/index/sendLog.htm?fileName=" + kindData);
  1001. conn = (HttpURLConnection) url.openConnection();
  1002. // 发送POST请求必须设置如下两行
  1003. conn.setDoOutput(true);
  1004. conn.setUseCaches(false);
  1005. conn.setRequestMethod("POST");
  1006. conn.setRequestProperty("Content-Type", "text/html");
  1007. conn.setRequestProperty("Cache-Control", "no-cache");
  1008. conn.setRequestProperty("Charsert", "UTF-8");
  1009. conn.connect();
  1010. conn.setConnectTimeout(10000);
  1011. out = conn.getOutputStream();
  1012. // sb.append("Content-Disposition: form-data; fileName=\""
  1013. // + file.getName() + "\"" + LINE_END);
  1014. // sb.append("Content-Type: text/plain;");
  1015. // sb.append(LINE_END);
  1016. // out.write(sb.toString().getBytes());
  1017. in = new DataInputStream(new FileInputStream(file));
  1018. int bytes = 0;
  1019. byte[] buffer = new byte[1024];
  1020. while ((bytes = in.read(buffer)) != -1) {
  1021. out.write(buffer, 0, bytes);
  1022. }
  1023. out.flush();
  1024. // 返回流
  1025. if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
  1026. ins = conn.getInputStream();
  1027. outStream = new ByteArrayOutputStream();
  1028. byte[] data = new byte[1024];
  1029. int count = -1;
  1030. while ((count = ins.read(data, 0, 1024)) != -1) {
  1031. outStream.write(data, 0, count);
  1032. LogUtil.d(TAG, "uploadLogApi: " + new String(data));
  1033. }
  1034. } else {
  1035. LogUtil.d(TAG, "uploadLogApi: " + conn.getResponseCode());
  1036. }
  1037. } catch (Exception e) {
  1038. e.printStackTrace();
  1039. Log.d(TAG, "uploadLogApi: " + e.toString());
  1040. Log.d(TAG, "uploadLogApi: " + e.getLocalizedMessage());
  1041. } finally {
  1042. if (in != null) {
  1043. try {
  1044. in.close();
  1045. } catch (IOException e) {
  1046. e.printStackTrace();
  1047. }
  1048. }
  1049. if (out != null) {
  1050. try {
  1051. out.close();
  1052. } catch (IOException e) {
  1053. e.printStackTrace();
  1054. }
  1055. }
  1056. if (ins != null) {
  1057. try {
  1058. ins.close();
  1059. } catch (IOException e) {
  1060. e.printStackTrace();
  1061. }
  1062. }
  1063. if (outStream != null) {
  1064. try {
  1065. outStream.close();
  1066. } catch (IOException e) {
  1067. e.printStackTrace();
  1068. }
  1069. }
  1070. if (conn != null) {
  1071. conn.disconnect();
  1072. }
  1073. }
  1074. }
  1075. }
  1076. }
  1077. }).start();
  1078. }
  1079. private void savePriceData(Gson gson, BaseBean baseBean, String kind) {
  1080. if (kind.equals("products")) {
  1081. priceBeans = new ArrayList<>();
  1082. String kind_data = baseBean.getKind_data();
  1083. Log.d(TAG, "savePriceData: " + kind_data);
  1084. ArrayList<ProductBean> list = gson.fromJson(kind_data, new TypeToken<List<ProductBean>>() {
  1085. }.getType());
  1086. for (int i = 0; i < list.size(); i++) {
  1087. ProductBean productBean = list.get(i);
  1088. PriceFragment.PriceBean priceBean = new PriceFragment.PriceBean();
  1089. priceBean.setPriceDefault(String.valueOf(productBean.getRmbPrice()));
  1090. priceBean.setChineseName(PriceFragment.ProductAbout.chineseName[i]);
  1091. priceBean.setTitle(PriceFragment.ProductAbout.title[i]);
  1092. priceBean.setDefaultName(getString(PriceFragment.ProductAbout.defaultName[i]));
  1093. priceBeans.add(priceBean);
  1094. Log.d(TAG, "savePriceData: " + priceBean);
  1095. }
  1096. //保存价格到本地
  1097. Hawk.put("PRICEBEAN", priceBeans);
  1098. //通知刷新界面
  1099. EventBus.getDefault().post(new ApiMessageEvent(kind, null));
  1100. }
  1101. }
  1102. private CompositeDisposable mDisposables;
  1103. private IView view;
  1104. protected void addSubscription(Observable observable, DisposableObserver observer) {
  1105. if (mDisposables == null) {
  1106. mDisposables = new CompositeDisposable();
  1107. }
  1108. observable
  1109. .unsubscribeOn(Schedulers.io())
  1110. .subscribeOn(Schedulers.io())
  1111. .observeOn(AndroidSchedulers.mainThread())
  1112. .subscribe(observer);
  1113. mDisposables.add(observer);
  1114. }
  1115. protected void addSubscriptionNew(Observable observable, Class clazz, DisposableObserver
  1116. observer) {
  1117. if (mDisposables == null) {
  1118. mDisposables = new CompositeDisposable();
  1119. }
  1120. if (clazz == HttpResult.class) {
  1121. observable = observable.compose(HttpResultHandler.<String>transformer());
  1122. }
  1123. observable
  1124. .unsubscribeOn(Schedulers.io())
  1125. .subscribeOn(Schedulers.io())
  1126. .observeOn(AndroidSchedulers.mainThread())
  1127. .subscribe(observer);
  1128. mDisposables.add(observer);
  1129. }
  1130. @Override
  1131. public void callBack(boolean ok, int[] result) {
  1132. AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
  1133. @Override
  1134. public void run() {
  1135. showToast(ok ? App.app.getString(R.string.setting_plc_send_success) : App.app.getString(R.string.setting_plc_send_fail));
  1136. }
  1137. });
  1138. }
  1139. private void updateLogo(Gson gson, BaseBean baseBean, String kind) {
  1140. String s = baseBean.getKind_data();
  1141. Log.d(TAG, "updateLogo: " + s);
  1142. // if ("1".equals(s) || "2".equals(s) || "3".equals(s) || "4".equals(s) ||
  1143. // "5".equals(s) || "6".equals(s) || "7".equals(s) || "8".equals(s)||
  1144. // "9".equals(s)|| "10".equals(s)|| "11".equals(s)|| "12".equals(s)|| "14".equals(s)) {
  1145. if ("SUNZ".equals(s) || "7770".equals(s) || "8647".equals(s) || "7264".equals(s) || "1932".equals(s) ||
  1146. "2381".equals(s) || "0291".equals(s) || "1313".equals(s) || "3103".equals(s) ||
  1147. "4873".equals(s) || "5291".equals(s) || "9284".equals(s) || "2222".equals(s)
  1148. || "3212".equals(s) || "3535".equals(s) || "1921".equals(s) || "3624".equals(s)
  1149. || "2019".equals(s) || "7391".equals(s) || "0924".equals(s) || "9427".equals(s) || "0735".equals(s)
  1150. || "5769".equals(s) || "6894".equals(s) || "8123".equals(s) || "5217".equals(s) || "6431".equals(s)
  1151. || "7777".equals(s) || "8080".equals(s) || "6702".equals(s) || "7772".equals(s) || "7761".equals(s)
  1152. ||"7773".equals(s)||"7774".equals(s)||"7786".equals(s)) {
  1153. Hawk.put("logo", s);
  1154. Hawk.get("logo", "7777");
  1155. }
  1156. }
  1157. /**
  1158. * 远程开关机
  1159. * @param gson
  1160. * @param baseBean
  1161. * @param kind
  1162. */
  1163. private void openOrClose(Gson gson, BaseBean baseBean, String kind) {
  1164. String kind_data = baseBean.getKind_data();
  1165. Log.d(TAG, "openOrClose: " + baseBean);
  1166. if ((int) SharedPreferencesUtils.getParam(Name.toComplete, 0) == 1) {
  1167. Global.isSave = true;
  1168. }
  1169. if (kind_data.equals("0")) {
  1170. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_CUT_DOWN, this);
  1171. } else if (kind_data.equals("1")) {
  1172. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_CUT_DOWN, this);
  1173. }
  1174. }
  1175. private void sleep(String baseBean) {
  1176. if (baseBean.equals("1")) {
  1177. //睡眠
  1178. Intent intent = new Intent(this, LockActivity.class);
  1179. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  1180. startActivity(intent);
  1181. } else {
  1182. SharedPreferencesUtils.setParam("sleep", 1);
  1183. Intent intent = new Intent(this, MainActivity.class);
  1184. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  1185. startActivity(intent);
  1186. HashMap<String, Object> params = new HashMap<>();
  1187. params.put("clientId", Heartbeat.deviceId);
  1188. params.put("is_sleep", false);
  1189. addSubscriptionNew(NoPayOrderStringApi.api.updateSleep(params), String.class,
  1190. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  1191. @Override
  1192. public void onNext(String data) {
  1193. }
  1194. @Override
  1195. public void onError(Throwable t) {
  1196. super.onError(t);
  1197. }
  1198. });
  1199. }
  1200. // 如果没跳到锁机界面 上传锁机失败
  1201. new Handler().postDelayed(new Runnable() {
  1202. @Override
  1203. public void run() {
  1204. boolean isSuccess = (boolean) SharedPreferencesUtils.getParam("sleep_state", false);
  1205. if (isSuccess) {
  1206. //进行网络请求
  1207. LogUtil.d(TAG, "run: 睡眠状态上传false");
  1208. HashMap<String, Object> params = new HashMap<>();
  1209. params.put("clientId", Heartbeat.deviceId);
  1210. params.put("is_sleep", false);
  1211. addSubscriptionNew(NoPayOrderStringApi.api.UpdateBlockApi(params), String.class,
  1212. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  1213. @Override
  1214. public void onNext(String data) {
  1215. }
  1216. @Override
  1217. public void onError(Throwable t) {
  1218. super.onError(t);
  1219. }
  1220. });
  1221. }
  1222. SharedPreferencesUtils.setParam("block_state", false);
  1223. }
  1224. }, 1000 * 10);
  1225. }
  1226. private void sleepDesc(String hibernation) {
  1227. if (hibernation != null && !"".equals(hibernation)) {
  1228. Hawk.put(Name.HIBERNATION, hibernation);
  1229. } else {
  1230. Hawk.put(Name.HIBERNATION, "");
  1231. }
  1232. EventBus.getDefault().post(new ApiMessageEvent("sleepDesc", null));
  1233. }
  1234. private void saveContacts(Gson gson, BaseBean baseBean, String kind) {
  1235. String json = baseBean.getKind_data();
  1236. Log.e(TAG, "saveContacts:json= " + json);
  1237. Log.e(TAG, "saveContacts: " + json.contains(":"));
  1238. if (json.contains(":")) {
  1239. //获取:后的数据(广告规则id)
  1240. String contactsWay = json.substring(json.lastIndexOf(":") + 1, json.length());
  1241. Log.e(TAG, "saveContacts: 联系方式=" + contactsWay);
  1242. //去掉:的值
  1243. String contactsName = json.substring(0, json.lastIndexOf(":"));
  1244. Log.e(TAG, "saveContacts: 联系人=" + contactsName);
  1245. Hawk.put(Name.CONTACTS_NUM, contactsName);
  1246. Hawk.put(Name.CONTACTS_NAME, contactsWay);
  1247. EventBus.getDefault().post(new ApiMessageEvent(kind, null));
  1248. }
  1249. }
  1250. private void savePas(Gson gson, BaseBean baseBean, String type) {
  1251. String json = baseBean.getKind_data();
  1252. String s = gson.fromJson(json, String.class);
  1253. SPUtils.getInstance(this).putString(Constant.SHARE_PREFERENCE_MANAGER_PWD,s);
  1254. }
  1255. /**
  1256. * 上传服务器发送过来的报警id
  1257. */
  1258. private void eliminateApi(Gson gson, BaseBean baseBean, String kind) {
  1259. String json = baseBean.getKind_data();
  1260. EliminateBean eliminateApi = gson.fromJson(json, EliminateBean.class);
  1261. EventBus.getDefault().post(new ApiMessageEvent("eliminate", eliminateApi.getId()));
  1262. }
  1263. }