RemoteSupportService.java 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439
  1. package com.bgy.autosale;
  2. import static com.hboxs.base_library.util.ToastUtil.showToast;
  3. import static org.greenrobot.eventbus.EventBus.getDefault;
  4. import android.annotation.SuppressLint;
  5. import android.annotation.TargetApi;
  6. import android.app.Notification;
  7. import android.app.NotificationChannel;
  8. import android.app.NotificationManager;
  9. import android.app.Service;
  10. import android.content.Context;
  11. import android.content.Intent;
  12. import android.media.AudioManager;
  13. import android.os.Build;
  14. import android.os.Bundle;
  15. import android.os.Handler;
  16. import android.os.IBinder;
  17. import android.text.TextUtils;
  18. import android.util.Log;
  19. import com.bgy.autosale.helpers.CommunicationHelper;
  20. import com.bgy.autosale.interfaces.SendCallback;
  21. import com.bgy.autosale.payutil.AddAlarmRecordBean;
  22. import com.bgy.autosale.payutil.HeartbeatBean;
  23. import com.bgy.autosale.payutil.MQService;
  24. import com.bgy.autosale.payutil.PaymentMessage;
  25. import com.bgy.autosale.ui.MainActivity;
  26. import com.bgy.autosale.ui.operator.LockActivity;
  27. import com.bgy.autosale.utils.ShellUtils;
  28. import com.example.offpay.event.OfflineMessageEvent;
  29. import com.example.offpay.ictrs232.SerialPortUtil;
  30. import com.example.offpay.wmdb.WeaverUtil;
  31. import com.example.spunsugar.db.UpCoinOrderBeanDao;
  32. import com.example.spunsugar.system.model.bean.AlarmClockBean;
  33. import com.google.gson.Gson;
  34. import com.hboxs.base_library.base.BaseApplication;
  35. import com.hboxs.base_library.base.IView;
  36. import com.hboxs.base_library.beans.PaperInvoiceBean;
  37. import com.hboxs.base_library.beans.db.UpCoinOrderBean;
  38. import com.hboxs.base_library.beans.enums.WeekEnum;
  39. import com.hboxs.base_library.constant.BaseConstant;
  40. import com.hboxs.base_library.constant.Global;
  41. import com.hboxs.base_library.constant.Heartbeat;
  42. import com.hboxs.base_library.constant.Name;
  43. import com.hboxs.base_library.event.ApiMessageEvent;
  44. import com.hboxs.base_library.event.ErrorApiMessageEvent;
  45. import com.hboxs.base_library.http.NoPayOrderStringApi;
  46. import com.hboxs.base_library.http.OrderApi;
  47. import com.hboxs.base_library.http.PayApi;
  48. import com.hboxs.base_library.http.exception.ApiException;
  49. import com.hboxs.base_library.http.exception.BaseException;
  50. import com.hboxs.base_library.http.exception.ExceptionFactory;
  51. import com.hboxs.base_library.http.observer.HttpResultNotActivityObserver;
  52. import com.hboxs.base_library.http.observer.HttpResultObserver;
  53. import com.hboxs.base_library.http.response.HttpResult;
  54. import com.hboxs.base_library.http.response.HttpResultHandler;
  55. import com.hboxs.base_library.http.response.HttpStringResultHandler;
  56. import com.hboxs.base_library.util.AlarmManagerUtil;
  57. import com.hboxs.base_library.util.LogUtil;
  58. import com.hboxs.base_library.util.LogUtils;
  59. import com.hboxs.base_library.util.PreventSpeedClickUtil;
  60. import com.hboxs.base_library.util.SharedPreferencesUtils;
  61. import com.hboxs.base_library.util.TimeUtil;
  62. import com.hboxs.base_library.util.ToastUtil;
  63. import com.hboxs.base_library.util.UiUtil;
  64. import com.igexin.sdk.PushManager;
  65. import com.orhanobut.hawk.Hawk;
  66. import com.orhanobut.logger.Logger;
  67. import org.greenrobot.eventbus.Subscribe;
  68. import org.greenrobot.eventbus.ThreadMode;
  69. import java.text.ParseException;
  70. import java.text.SimpleDateFormat;
  71. import java.util.ArrayList;
  72. import java.util.Calendar;
  73. import java.util.Date;
  74. import java.util.HashMap;
  75. import java.util.List;
  76. import java.util.Map;
  77. import java.util.Timer;
  78. import java.util.TimerTask;
  79. import java.util.concurrent.ExecutorService;
  80. import java.util.concurrent.Executors;
  81. import java.util.concurrent.TimeUnit;
  82. import io.reactivex.Observable;
  83. import io.reactivex.ObservableSource;
  84. import io.reactivex.android.schedulers.AndroidSchedulers;
  85. import io.reactivex.disposables.CompositeDisposable;
  86. import io.reactivex.functions.Consumer;
  87. import io.reactivex.functions.Function;
  88. import io.reactivex.observers.DisposableObserver;
  89. import io.reactivex.schedulers.Schedulers;
  90. import okhttp3.RequestBody;
  91. /**
  92. * Created by bpb on 2020-01-10.
  93. * 说明:
  94. */
  95. public class RemoteSupportService extends Service implements SendCallback {
  96. private static final String TAG = "RemoteSupportService";
  97. private TimerTask alarmClockTask;
  98. private Timer timerAlarmClock;
  99. private ExecutorService executorService;
  100. @Override
  101. public void onCreate() {
  102. super.onCreate();
  103. getDefault().register(this);
  104. //获取闹钟
  105. startGeTui();
  106. SetAnAlarm();
  107. timerAlarmClock = new Timer();
  108. alarmClockTask = new TimerTask() {
  109. @Override
  110. public void run() {
  111. SetAnAlarm();
  112. }
  113. };
  114. timerAlarmClock.schedule(alarmClockTask, 60000, 3600000);
  115. executorService = Executors.newFixedThreadPool(2); // 创建一个固定大小的线程池
  116. executorService.execute(new Runnable() {
  117. @Override
  118. public void run() {
  119. String[] cmd = new String[]{"setprop service.adb.tcp.port 5555", "stop adbd", "start adbd"};
  120. ShellUtils.execCommand(cmd, true, false);
  121. }
  122. });
  123. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  124. createNotificationChannel();
  125. }
  126. if (Hawk.get(Name.WMDB, false)) {
  127. executorService.execute(new Runnable() {
  128. @Override
  129. public void run() {
  130. WeaverUtil.creditCardEnableReader();
  131. Log.d(TAG, "run: creditCardEnableReader1");
  132. }
  133. });
  134. }
  135. new Handler().postDelayed(new Runnable() {
  136. @Override
  137. public void run() {
  138. sendApkVersion();
  139. }
  140. }, 20000);
  141. if (Hawk.get(Name.AUTOUPLOADORDER, false)) {
  142. upCoinOrder();
  143. }
  144. }
  145. // 在适当的地方调用以下代码开始执行
  146. @Subscribe(threadMode = ThreadMode.MAIN)
  147. public void event(PaymentMessage messageEvent) {
  148. switch (messageEvent.getName()) {
  149. case "pay_ment":
  150. // OrderStatus(messageEvent.getData(), 0);
  151. break;
  152. //查詢訂單是否支付
  153. case "start_order_inquiry":
  154. OrderStatusInquiry(messageEvent.getData(), 0);
  155. break;
  156. //查詢訂單是否支付
  157. case "start_order_inquiry_sweep":
  158. // OrderStatusInquirySweep(messageEvent.getData(), 0);
  159. break;
  160. //取消后查詢訂單是否支付
  161. case "start_order_inquiry_cancel":
  162. // OrderStatusInquiryCancel(messageEvent.getData(), 0);
  163. break;
  164. //请求退优惠码
  165. case "promotion_code":
  166. // promotionCode(messageEvent.getData(), 0);
  167. Global.mapPromotionCOde.remove(messageEvent.getData());
  168. break;
  169. case "start_order_inquiry_hv":
  170. // getPayIsSuccess((String) messageEvent.getData(), 0);
  171. break;
  172. case "start_order_inquiry_cancel_hv":
  173. //先不写。
  174. // OrderStatusInquiryCancelHV((String) messageEvent.getData(), 0);
  175. break;
  176. case "start_order_inquiry_hk":
  177. // Querypaymentorder((String) messageEvent.getData(), 0);
  178. break;
  179. case "start_order_inquiry_america":
  180. // getNihaoPayMerchant((String) messageEvent.getData(), 0);
  181. break;
  182. case "start_order_zedian_sweep"://查询泽点的是否已经支付
  183. // myServicePresenter.zeDianTranxQuery(messageEvent.getData(), 0);
  184. Log.d(TAG, "event: start_order_zedian_sweep1");
  185. break;
  186. }
  187. }
  188. @Subscribe(threadMode = ThreadMode.MAIN)
  189. public void event(ApiMessageEvent messageEvent) {
  190. Log.d(TAG, "Service event: ApiMessageEvent"+messageEvent.getName());
  191. switch (messageEvent.getName()) {
  192. case "statusType1":
  193. //同步数据
  194. //showSyncDialog();
  195. break;
  196. case "DOWNKOADAD":
  197. //下载广告数据
  198. // saveAd();
  199. break;
  200. case "DOWNKOADADCID":
  201. // downAdvertising((String) messageEvent.getData());
  202. LogUtil.d(TAG, "DOWNKOADADCID event: 执行了。");
  203. break;
  204. case "DOWNKOADADCID_NEW":
  205. // downAdvertising((List) messageEvent.getData());
  206. LogUtil.d(TAG, "getAd DOWNKOADADCID event: 执行了。");
  207. break;
  208. case Name.OFFTIME:
  209. // LogUtil.d(TAG, "event: offtime:" + mOpen);
  210. // if (mOpen != 0) { //不能重复关机,
  211. // openOrClose("off");
  212. // }
  213. //// timingSwitcher();
  214. // // Global.temperatureGoUp = 1;
  215. // if (Global.isM490 == 1) {
  216. // //开启加湿15秒,然后关闭
  217. // EventBus.getDefault().post(new ApiMessageEvent("stophumidification", null));
  218. // }
  219. break;
  220. case Name.OFFTIME + "show":
  221. //开启一个定时闹钟,1.弹窗。2.倒计时。3.关机 4.结束弹窗
  222. // showShutdownDialog();
  223. break;
  224. case Name.BOOTIME:
  225. // LogUtil.d("AutoThrowStick", "event: boottime:" + mOpen);
  226. // openOrClose("boot");
  227. // LogUtils.logWrite("MyService定时开机");
  228. //// timingSwitcher();
  229. // // Global.temperatureGoUp = 0;
  230. // if (Global.isM490 == 1) {
  231. // //开启加湿15秒,然后关闭
  232. // EventBus.getDefault().post(new ApiMessageEvent("humidification", null));
  233. // }
  234. // //读取找零信息
  235. // startChangeInformation();
  236. break;
  237. case Name.SHUTDOWNSTATE:
  238. // updateEqeStatus((Integer) messageEvent.getData());
  239. break;
  240. case "eliminate":
  241. Constant.reasonKey="";
  242. HashMap<String, String> params = new HashMap<>();
  243. params.put("clientId", Heartbeat.deviceId);
  244. addSubscriptionNew(NoPayOrderStringApi.api.eliminateClean(params),String.class,
  245. new HttpResultObserver<String>(view, getApplicationContext()) {
  246. @Override
  247. public void onNext(String s) {
  248. Log.d(TAG, "报警eliminateApionNext: " + s);
  249. LogUtils.logWrite("消除报警next");
  250. }
  251. @Override
  252. public void onError(Throwable t) {
  253. super.onError(t);
  254. Log.d(TAG, "报警eliminateApi onError: "+t.getMessage());
  255. }
  256. });
  257. break;
  258. case "dosugar":
  259. // makingmarshmallows((String) messageEvent.getData());
  260. break;
  261. case "updataParamSet":
  262. if (!PreventSpeedClickUtil.isFastClick()) {
  263. return;
  264. }
  265. // plcPresenter.stopSet();
  266. // plcPresenter.startSet((String) messageEvent.getData());
  267. break;
  268. case "updataParamRst":
  269. // if (!PreventSpeedClickUtil.isFastClick()) {
  270. // return;
  271. // }
  272. // plcPresenter.stopRst();
  273. // plcPresenter.startRst((String) messageEvent.getData());
  274. break;
  275. case "updataParamWrite":
  276. // if (!PreventSpeedClickUtil.isFastClick()) {
  277. // return;
  278. // }
  279. // String[] split = (String[]) messageEvent.getData();
  280. // String address = split[0];
  281. // String data = split[1].trim();
  282. // long dec = Long.parseLong(data);
  283. // //不足四位补0
  284. // String hex;
  285. //// if (position == 15 || position == 16 || position == 17 || position == 18 || position == 19 || position == 20
  286. //// || position == 0 || position == 1 || position == 2 || position == 3 || position == 4 || position == 5
  287. //// ) {
  288. // if ("D436".equals(address) || "D438".equals(address) || "D440".equals(address)) {
  289. // //参数
  290. //// dec=(int)(dec*Global.num)/10;
  291. //// dec=(int)(dec*177.77778)/10;
  292. //// dec=Math.round((dec/ Global.num)*10);
  293. // LogUtil.d(TAG, "onItemListener: dec=" + dec);
  294. // //32位处理
  295. // hex = AdvacedUtil.toHex(data);
  296. // LogUtil.d(TAG, "onItemListener: dec=" + hex);
  297. //// } else if (position == 21 || position == 22 || position == 23) {
  298. // } else if ("D216".equals(address) || "D266".equals(address) || "D316".equals(address) ||
  299. // "D228".equals(address) || "D278".equals(address) || "D328".equals(address)
  300. // || "D224".equals(address) || "D274".equals(address) || "D324".equals(address)
  301. // || "D420".equals(address) || "D422".equals(address) || "D424".equals(address)
  302. // || "D421".equals(address) || "D423".equals(address) || "D425".equals(address)
  303. // || "D218".equals(address) || "D268".equals(address) || "D318".equals(address)) {
  304. // //16位处理
  305. // hex = AdvacedUtil.toHexWith16(data);
  306. // } else {
  307. // //不足四位补0
  308. // hex = ByteUtils.decimal2fitHex(dec);
  309. // LogUtil.d(TAG, "onItemListener: hex=" + hex);
  310. // if (hex.length() % 4 != 0) {
  311. // int length = hex.length();
  312. // for (int i = 0; i < 4 - length; i++) {
  313. // hex = "0" + hex;
  314. // }
  315. // }
  316. // }
  317. // //2进制
  318. // String bin = HexUtils.hexStr2BinStr(hex);
  319. // if ("D228".equals(address) && Global.isInProduction) {//如果数据是D228,并且是新花型,那么就得使用新地址。
  320. // address = "D224";
  321. // } else if ("D278".equals(address) && Global.isInProduction) {
  322. // address = "D274";
  323. // } else if ("D328".equals(address) && Global.isInProduction) {
  324. // address = "D324";
  325. // } else if ("D216".equals(address) && Global.isInProduction) {//如果数据是D228,并且是新花型,那么就得使用新地址。
  326. // address = "D218";
  327. // } else if ("D266".equals(address) && Global.isInProduction) {
  328. // address = "D268";
  329. // } else if ("D316".equals(address) && Global.isInProduction) {
  330. // address = "D318";
  331. // }
  332. // if (Arrays.asList(ThreadGetParameterUpdate.getParaFirstAddress()).contains(address)) {
  333. // plcPresenter.stopSet();
  334. // plcPresenter.startSet("M520");
  335. // }
  336. //
  337. // plcPresenter.stopWrite();
  338. // plcPresenter.startWrite(address, bin);
  339. break;
  340. case "is_sleep":
  341. LogUtils.logWrite("定时休眠了");
  342. sleep((String) messageEvent.getData());
  343. break;
  344. case "alarmClock":
  345. // parseWeekTime((String) messageEvent.getData());
  346. break;
  347. case "updateAloneParam":
  348. // String[] split1 = ((String) messageEvent.getData()).split(":");
  349. // UpdateAloneParam(split1[0], split1[1], "0");
  350. // LogUtil.d(TAG, "updateAloneParam: ");
  351. break;
  352. case "updateAdvancedParam":
  353. // String[] split2 = ((String) messageEvent.getData()).split(":");
  354. // UpdateAloneParam(split2[0], split2[1], "1");
  355. // LogUtil.d(TAG, "updateAloneParam: ");
  356. break;
  357. case "updateSteamParam":
  358. // String[] split3 = ((String) messageEvent.getData()).split(":");
  359. // UpdateAloneParam(split3[0], split3[1], "3");
  360. break;
  361. case "qrCodeImgUrl":
  362. // downLoadFile(0, "qrcode", (ArrayList<GetAdBean>) messageEvent.getData());
  363. // qrCodeImgUrl = ((ArrayList<GetAdBean>) messageEvent.getData()).get(0).getUrl();
  364. break;
  365. case Name.EXITPROGRAM:
  366. // Log.d(TAG, "EXITPROGRAM ");
  367. // stopTimerAndTimerTask(procedureISRunTimer, procedureISRunTimerTask);
  368. break;
  369. case "refreshToken":
  370. // refreshTokenRun();
  371. break;
  372. case "flowers":
  373. // //转成long类型
  374. // flowersNumber = (String) messageEvent.getData();
  375. // long dec1 = Long.parseLong(flowersNumber);
  376. // // 16进制 不足四位补0
  377. // String hex1 = ByteUtils.decimal2fitHex(dec1);
  378. // if (hex1.length() % 4 != 0) {
  379. // int length = hex1.length();
  380. // for (int j = 0; j < 4 - length; j++) {
  381. // hex1 = "0" + hex1;
  382. // }
  383. // }
  384. // //2进制
  385. // bin = HexUtils.hexStr2BinStr(hex1);
  386. // plcPresenter.stopWriteD490();
  387. // plcPresenter.startWriteD490("D490", bin);
  388. break;
  389. case Name.MDBRS232:
  390. // new Handler().postDelayed(new Runnable() {
  391. // @Override
  392. // public void run() {
  393. // WeaverUtil.billValidatorSetUp();
  394. // }
  395. // },5000);
  396. break;
  397. case "cashsale":
  398. new Handler().postDelayed(new Runnable() {
  399. @Override
  400. public void run() {
  401. Log.d(TAG, "run: cash sale0");
  402. if (Name.WMDB.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB))) {
  403. if (Hawk.get(Name.MDB_CASHCALE, true)) {
  404. String asfd = (String) messageEvent.getData();
  405. String[] split3 = asfd.split(";");
  406. Log.d(TAG, "run: cash sale1");
  407. WeaverUtil.billValidatorCashSale(split3[0], split3[1]);
  408. Log.d(TAG, "run: cash sale2");
  409. }
  410. }
  411. }
  412. }, 3000);
  413. break;
  414. case "vendsuccess":
  415. Log.d(TAG, "event: CreditCardMessage4");
  416. new Handler().postDelayed(new Runnable() {
  417. @Override
  418. public void run() {
  419. Log.d(TAG, "event: CreditCardMessage5");
  420. WeaverUtil.creditCardVendSuccess((String) messageEvent.getData());
  421. Log.d(TAG, "event: CreditCardMessage6");
  422. }
  423. }, 3000);
  424. break;
  425. case "sessioncomplete":
  426. new Handler().postDelayed(new Runnable() {
  427. @Override
  428. public void run() {
  429. WeaverUtil.creditCardSessionComplete();
  430. }
  431. }, 5000);
  432. break;
  433. case "humidification":
  434. // startHumidification();
  435. // if (Integer.parseInt(Heartbeat.cabinetTm) > 110) {
  436. // new Handler().postDelayed(new Runnable() {
  437. // @Override
  438. // public void run() {
  439. // Log.d(TAG, "event:humidification Set ");
  440. // LogUtils.logWrite("开始喷水1");
  441. // plcPresenter.stopSetM38();
  442. // plcPresenter.startSetM38("M38");
  443. // plcPresenter.stopSetM306();
  444. // plcPresenter.startSetM306("M306");
  445. // }
  446. // }, 10000);
  447. // new Handler().postDelayed(new Runnable() {
  448. // @Override
  449. // public void run() {
  450. // Log.d(TAG, "event:humidification Rst ");
  451. // plcPresenter.stopRstM38();
  452. // plcPresenter.startRstM38("M38");
  453. // plcPresenter.stopRstM306();
  454. // plcPresenter.startRstM306("M306");
  455. // }
  456. // }, 20000);
  457. // }
  458. break;
  459. case "humidification5":
  460. //启动
  461. // startHumidification();
  462. // new Handler().postDelayed(new Runnable() {
  463. // @Override
  464. // public void run() {
  465. // LogUtils.logWrite("开始喷水2");
  466. // Log.d(TAG, "event:humidification Set ");
  467. // plcPresenter.stopSetM38();
  468. // plcPresenter.startSetM38("M38");
  469. // plcPresenter.stopSetM306();
  470. // plcPresenter.startSetM306("M306");
  471. // }
  472. // }, 120000);
  473. // new Handler().postDelayed(new Runnable() {
  474. // @Override
  475. // public void run() {
  476. // Log.d(TAG, "event:humidification Rst ");
  477. // plcPresenter.stopRstM38();
  478. // plcPresenter.startRstM38("M38");
  479. // plcPresenter.stopRstM306();
  480. // plcPresenter.startRstM306("M306");
  481. // }
  482. // }, 130000);
  483. break;
  484. case "stophumidification":
  485. // stopHumidification();
  486. break;
  487. case "summer":
  488. // summerUnifiedChange("200");
  489. break;
  490. case "winter":
  491. // winterUnifiedChange("200");
  492. break;
  493. case "allUpdate":
  494. // Log.d(TAG, "event: D6");
  495. // unifiedChangeData = (String) messageEvent.getData();
  496. // plcPresenter.stopIncreasingDecline();
  497. // plcPresenter.startIncreasingDecline();
  498. break;
  499. case "allUpdateNew":
  500. // unifiedChangeData = (String) messageEvent.getData();
  501. // plcPresenter.stopReadMD516();
  502. // plcPresenter.startReadMD516();//必须要516的数据和区间数据全部读到后,才能去做。
  503. // plcPresenter.stopSection();
  504. // plcPresenter.startSection();
  505. Log.d(TAG, "event: allUpdateNew2 sectionSuccess");
  506. break;
  507. case "rule":
  508. // saveAdRulesBefore();
  509. break;
  510. case "buliao":
  511. // stopSetRst();
  512. // startSetMaterial();
  513. // new Handler().postDelayed(new Runnable() {
  514. // @Override
  515. // public void run() {
  516. // checkMaterial();
  517. // }
  518. // }, 15000);
  519. break;
  520. case "startChangeInformation":
  521. //读取找零信息
  522. // startChangeInformation();
  523. break;
  524. case "orderInformations":
  525. PaperInvoiceBean paperInvoiceBean = (PaperInvoiceBean) messageEvent.getData();
  526. // invoiceUtil.Print_Ex(paperInvoiceBean);
  527. break;
  528. case "power_turnedon":
  529. // showDialog1(R.string.warring_qshqs);
  530. // myServicePresenter.setError1(1, UiUtil.getStringRes(R.string.material));
  531. break;
  532. case "outdoor":
  533. // if (messageEvent.getData().equals("1")) {
  534. // plcPresenter.stopSetM301();
  535. // plcPresenter.startSetM301("M301");
  536. // } else if (messageEvent.getData().equals("0")) {
  537. // plcPresenter.stopRstM301();
  538. // plcPresenter.startRstM301("M301");
  539. // }
  540. break;
  541. case "indoor":
  542. // if (messageEvent.getData().equals("1")) {
  543. // plcPresenter.stopSetM300();
  544. // plcPresenter.startSetM300("M300");
  545. // } else if (messageEvent.getData().equals("0")) {
  546. // plcPresenter.stopRstM300();
  547. // plcPresenter.startRstM300("M300");
  548. // }
  549. break;
  550. case "equimentType"://更新设备状态
  551. // myServicePresenter.equimentType();
  552. break;
  553. case "paymentType"://修改支付方式
  554. // myServicePresenter.paymentType((String) messageEvent.getData());
  555. break;
  556. //--------------------------------------------------------鲸准小程序
  557. case "cardPayXCX":
  558. // cardPayXCX((String) messageEvent.getData());
  559. break;
  560. case "updateApk":
  561. // myServicePresenter.downloadApk((String) messageEvent.getData());
  562. break;
  563. case "couponStatus":
  564. // myServicePresenter.updateCouponStatus((String) messageEvent.getData());
  565. break;
  566. case "refuse_success":
  567. // String sn = (String) messageEvent.getData();
  568. // Gson gson = new Gson();
  569. // CardPayXCXBean syncPasBean = gson.fromJson(sn, CardPayXCXBean.class);
  570. //
  571. // Log.d(TAG, "refuse_success: " + syncPasBean.getMealCode());
  572. // for (int i1 = 0; i1 < MyService.cardPayXCXMapBeans.size(); i1++) {
  573. // if (syncPasBean.getMealCode().equals(MyService.cardPayXCXMapBeans.get(i1).getMealCode())) {
  574. // MyService.cardPayXCXMapBeans.remove(i1);
  575. // EventBus.getDefault().post(new ApiMessageEvent("refuse_success_activity", null));
  576. //
  577. // Log.d(TAG, "refuse_success: " + sn);
  578. // break;
  579. // }
  580. // }
  581. // Log.d(TAG, "refuse_success2: ");
  582. break;
  583. case "hotwifi":
  584. // openHotWifi((Bundle) messageEvent.getData());
  585. break;
  586. case "stopRestActivity":
  587. // int stopRestActivity = (int) messageEvent.getData();
  588. // if (stopRestActivity == 1) {//停止
  589. // MyService.stopRestActivity = 1;
  590. // stopTimerAndTimerTask(procedureISRunTimer, procedureISRunTimerTask);
  591. // } else if (stopRestActivity == 2) {//重啓
  592. // procedureISRun();
  593. // MyService.stopRestActivity = 2;
  594. // }
  595. break;
  596. case Name.ZE_DIAN:
  597. // myServicePresenter.zeDianGetDev();
  598. break;
  599. case "is_cooling":
  600. Log.d(TAG, "event: is_cooling");
  601. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_REFRIGERATION, this);
  602. break;
  603. case "is_freshness":
  604. Log.d(TAG, "event: is_freshness");
  605. CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_KEEP_FRESH, this);
  606. break;
  607. default:
  608. break;
  609. }
  610. }
  611. private void sleep(String baseBean) {
  612. if (baseBean.equals("1")) {
  613. //睡眠
  614. Intent intent = new Intent(RemoteSupportService.this, LockActivity.class);
  615. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  616. startActivity(intent);
  617. if (Name.WMDB.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB))) {
  618. WeaverUtil.billValidatorDisable();
  619. }
  620. } else {
  621. if (Name.WMDB.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB))) {
  622. WeaverUtil.billValidatorSetUp();
  623. } else if (Name.ICT.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB))) {
  624. SerialPortUtil.getSerialPortUtil().sendSerialPort("3E");
  625. }
  626. LogUtils.logWrite("开启:" + (Name.ICT.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB))));
  627. //唤醒
  628. SharedPreferencesUtils.setParam("sleep", 1);
  629. Intent intent = new Intent(RemoteSupportService.this, MainActivity.class);
  630. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  631. startActivity(intent);
  632. HashMap<String, Object> params = new HashMap<>();
  633. params.put("clientId", Heartbeat.deviceId);
  634. params.put("is_sleep", false);
  635. addSubscriptionNew(NoPayOrderStringApi.api.updateSleep(params), String.class,
  636. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  637. @Override
  638. public void onNext(String data) {
  639. Log.d(TAG, "onNext:is_sleep1 "+data);
  640. }
  641. @Override
  642. public void onError(Throwable t) {
  643. super.onError(t);
  644. }
  645. });
  646. }
  647. // 如果没跳到锁机界面 上传锁机失败
  648. new Handler().postDelayed(new Runnable() {
  649. @Override
  650. public void run() {
  651. boolean isSuccess = (boolean) SharedPreferencesUtils.getParam("sleep_state", false);
  652. if (isSuccess) {
  653. //进行网络请求
  654. LogUtil.d(TAG, "run: 睡眠状态上传false");
  655. HashMap<String, Object> params = new HashMap<>();
  656. params.put("clientId", Heartbeat.deviceId);
  657. params.put("is_sleep", false);
  658. addSubscriptionNew(NoPayOrderStringApi.api.UpdateBlockApi(params), String.class,
  659. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  660. @Override
  661. public void onNext(String data) {
  662. Log.d(TAG, "onNext:is_sleep "+data);
  663. }
  664. @Override
  665. public void onError(Throwable t) {
  666. super.onError(t);
  667. }
  668. });
  669. }
  670. SharedPreferencesUtils.setParam("block_state", false);
  671. }
  672. }, 1000 * 10);
  673. }
  674. @Override
  675. public void callBack(boolean ok, int[] result) {
  676. AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
  677. @Override
  678. public void run() {
  679. if (ok) {
  680. showToast(App.app.getString(R.string.setting_plc_send_success));
  681. LogUtils.logWrite("闹钟执行成功。");
  682. } else {
  683. showToast(App.app.getString(R.string.setting_plc_send_fail));
  684. LogUtils.logWrite("闹钟执行失败。");
  685. }
  686. }
  687. });
  688. }
  689. @Subscribe(threadMode = ThreadMode.MAIN)
  690. public void event(ErrorApiMessageEvent messageEvent) {
  691. switch (messageEvent.getName()){
  692. case Name.WARNING_ALARM:
  693. Log.d(TAG, "event: WARNING_ALARM"+messageEvent.getData());
  694. setError1(messageEvent.getId(), (String) messageEvent.getData(),messageEvent.getLevel());
  695. break;
  696. }
  697. }
  698. //获取个推id
  699. private Timer timerGeTui;
  700. private TimerTask taskGeTui;
  701. private void startGeTui() {
  702. stopGeTui();
  703. timerGeTui = new Timer();
  704. taskGeTui = new TimerTask() {
  705. @Override
  706. public void run() {
  707. if (Heartbeat.clientId == null) {
  708. String cid = PushManager.getInstance().getClientid(getApplicationContext());
  709. LogUtil.d(TAG, "run: cid1=");
  710. if (cid != null && !TextUtils.isEmpty(cid)) {
  711. Heartbeat.clientId = cid;
  712. LogUtil.d(TAG, "run: cid=" + cid);
  713. stopGeTui();
  714. }
  715. } else {
  716. LogUtil.d(TAG, "run: cid1!=null"+Heartbeat.clientId);
  717. // stopGeTui();
  718. }
  719. }
  720. };
  721. timerGeTui.schedule(taskGeTui, 1000, 2000);
  722. }
  723. private void stopGeTui() {
  724. if (timerGeTui != null) {
  725. taskGeTui.cancel();
  726. timerGeTui.cancel();
  727. timerGeTui = null;
  728. }
  729. }
  730. @TargetApi(Build.VERSION_CODES.O)
  731. private void createNotificationChannel() {
  732. Log.d("TTTT", "-createNotificationChannel-");
  733. NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  734. // 通知渠道的id
  735. String id = "my_channel_02";
  736. CharSequence name = "1";// 用户可以看到的通知渠道的描述
  737. String description = "2";
  738. int importance = NotificationManager.IMPORTANCE_NONE;
  739. NotificationChannel mChannel = new NotificationChannel(id, name, importance);//
  740. // 配置通知渠道的属性
  741. // mChannel.setDescription(description);//
  742. // 设置通知出现时的闪灯(如果 android 设备支持的话)
  743. // mChannel.enableLights(true);
  744. // mChannel.setLightColor(Color.RED);//
  745. // 设置通知出现时的震动(如果 android 设备支持的话)
  746. // mChannel.enableVibration(true);
  747. // mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});//
  748. // 最后在notificationmanager中创建该通知渠道 //
  749. mNotificationManager.createNotificationChannel(mChannel);
  750. // 为该通知设置一个id
  751. // 通知渠道的id
  752. String CHANNEL_ID = "my_channel_02";
  753. // Create a notification and set the notification channel.
  754. Notification notification = new Notification.Builder(this)
  755. .setContentTitle("售卖机服务").setContentText("不要杀掉我")
  756. .setSmallIcon(R.drawable.ic_launcher_foreground)
  757. .setChannelId(CHANNEL_ID).setAutoCancel(true)
  758. .build();
  759. startForeground(2, notification);
  760. }
  761. @Override
  762. public IBinder onBind(Intent intent) {
  763. return null;
  764. }
  765. //心跳
  766. private Timer timerHeartbeat;
  767. private TimerTask taskHeartbeat;
  768. /**
  769. * 开始心跳
  770. */
  771. private void startHeartbeat() {
  772. Log.e(TAG, "startHeartbeat: 开始心跳");
  773. timerHeartbeat = new Timer();
  774. taskHeartbeat = new TimerTask() {
  775. @Override
  776. public void run() {
  777. //经纬度不为0
  778. // if (Heartbeat.latitude != 0 && Heartbeat.longitude != 0) {
  779. //系统管理不为空
  780. String managerId = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "");
  781. Log.d(TAG, "run: 心跳" + managerId);
  782. if (managerId != null && !TextUtils.isEmpty(managerId)) {
  783. sendHeart();
  784. LogUtil.d(TAG, "run: 开始心跳");
  785. } else {
  786. Logger.i(TAG + "系统管理id为空");
  787. }
  788. // } else {
  789. // Logger.i(TAG + "经纬度未获取到");
  790. // }implementation 'com.getui:sdk-for-google-play:4.3.8.0'
  791. // 当设备发生变化时 调用:
  792. // payType = (int) SharedPreferencesUtils.getParam(Name.PAY_TYPE, -1);
  793. // if (payType == 45 | payType == 46) {
  794. // MqttHelper.getInstance().sendDeviceStatus(Global.deviceStatus, 1, Global.workStatus, Global.doorStatus, 0, Global.errorCode2);
  795. // }
  796. if (!MQService.connect) {
  797. //因为网络原因这里肯定还不行。需要重新开启。
  798. Intent intentOne = new Intent(RemoteSupportService.this, MQService.class);
  799. Bundle bundle = new Bundle();
  800. bundle.putInt("connect", 1);
  801. intentOne.putExtras(bundle);
  802. startService(intentOne);
  803. }
  804. if (Heartbeat.address != null && !ampAddress) {
  805. equimentArea();//上传地址,经纬度
  806. }
  807. }
  808. };
  809. timerHeartbeat.schedule(taskHeartbeat, 30000, 1000 * 60 * 5);
  810. }
  811. private IView view;
  812. /**
  813. * 发送心跳
  814. */
  815. private void sendHeart() {
  816. // if (Global.isLocal) return;
  817. if (Global.isVersions == 0) {
  818. return;
  819. }
  820. Heartbeat.managerId = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "2855");
  821. Heartbeat.lastUpdateTime = TimeUtil.getStrCurTime();
  822. HeartbeatBean heartbeatBean = new HeartbeatBean();
  823. heartbeatBean.setCabinetHd(Heartbeat.cabinetHd);
  824. heartbeatBean.setCabinetTm(Heartbeat.cabinetTm);
  825. heartbeatBean.setFurnaceTm(Heartbeat.furnaceTm);
  826. Log.d(TAG, "Heartbeat sendHeart: " + Heartbeat.cabinetHd + ":" + Heartbeat.cabinetTm + ":" + Heartbeat.furnaceTm);
  827. heartbeatBean.setOutsideTm(Heartbeat.outCabinetTm);
  828. heartbeatBean.setOutsideHd(Heartbeat.outCabinetHd);
  829. heartbeatBean.setCandyGeneratorTm(Heartbeat.generatorTm);
  830. heartbeatBean.setNumberOne(Heartbeat.numberOne);
  831. heartbeatBean.setFurnaceSp("0");
  832. heartbeatBean.setLastUpdateTime(Heartbeat.lastUpdateTime);
  833. heartbeatBean.setWhiteSugar(Heartbeat.whiteSugar);
  834. heartbeatBean.setRedSugar(Heartbeat.redSugar);
  835. heartbeatBean.setBlueSugar(Heartbeat.blueSugar);
  836. heartbeatBean.setYellowSugar(Heartbeat.yellowSugar);
  837. heartbeatBean.setWater(Heartbeat.water);
  838. heartbeatBean.setWasteWater(Heartbeat.wasteWater);
  839. heartbeatBean.setStick(Heartbeat.stick);
  840. Log.d(TAG, "sendHeart: " + Heartbeat.whiteSugar + Heartbeat.redSugar + Heartbeat.blueSugar);
  841. heartbeatBean.setEqeStatus(SharedPreferencesUtils.getParam("open", 0) + "");//1 开机, 0为关机
  842. heartbeatBean.setIs_sleep(((Integer) SharedPreferencesUtils.getParam("sleep", 1)) == 0 ? true : false);//t0为睡眠, f1为不睡眠
  843. AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  844. int currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);//上传音量
  845. heartbeatBean.setVolume(currentVolume + "");
  846. LogUtil.d(TAG, "HeartbeatsendHeart: " + Heartbeat.latitude);
  847. LogUtil.d(TAG, "HeartbeatsendHeart: " + Heartbeat.longitude);
  848. heartbeatBean.setManagerId(Heartbeat.managerId);
  849. int netType = (int) SharedPreferencesUtils.getParam(Name.NET_TYPE, -1);
  850. if (netType == 0) {
  851. Heartbeat.netWorkingMode = "4g";
  852. } else if (netType == 1) {
  853. Heartbeat.netWorkingMode = "wifi";
  854. } else {
  855. Heartbeat.netWorkingMode = "no";
  856. }
  857. heartbeatBean.setNetWorkingMode(Heartbeat.netWorkingMode);
  858. heartbeatBean.setGtClientId(Heartbeat.clientId);
  859. heartbeatBean.setClientId(Heartbeat.deviceId);
  860. Gson gson = new Gson();
  861. String json = gson.toJson(heartbeatBean);
  862. RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json;charset=utf-8"), json);
  863. Log.d(TAG, "sendHeart: " + json);
  864. addSubscriptionNew(NoPayOrderStringApi.api.heart(body), String.class,
  865. new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
  866. @Override
  867. public void onNext(String s) {
  868. Logger.i(TAG + "收到结果" + s);
  869. Log.d(TAG, "onNext: 测试 :"+ s);
  870. if (s.equals("心跳成功")) {
  871. // ToastUtil.showToast(UiUtil.getStringRes(R.string.heart_success));
  872. LogUtil.d(TAG, "onNext: 心跳成功");
  873. } else {
  874. ToastUtil.showToast(UiUtil.getStringRes(R.string.heart_failed));
  875. LogUtil.d(TAG, "onNext: 心跳失败");
  876. }
  877. }
  878. @Override
  879. public void onError(Throwable t) {
  880. super.onError(t);
  881. BaseException exception = ExceptionFactory.create(t);
  882. LogUtils.logWrite("heart e:" + t.getMessage());
  883. Logger.i(TAG + "心跳:" + exception.getErrorText());
  884. LogUtil.d(TAG, "onError: 心跳失败" + t.getMessage());
  885. t.printStackTrace();
  886. // goActivity();
  887. }
  888. });
  889. }
  890. @Override
  891. public int onStartCommand(Intent intent, int flags, int startId) {
  892. Log.d(TAG, "onStartCommand: ");
  893. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  894. createNotificationChannel();
  895. }
  896. Bundle extras = null;
  897. if (intent != null) {
  898. extras = intent.getExtras();
  899. }
  900. if (extras != null) {
  901. int heartbeat = extras.getInt("heartbeat");
  902. if (heartbeat == 3) {
  903. stopHeartbeat();
  904. startHeartbeat();
  905. }
  906. int first = extras.getInt("first");
  907. if (first == 4) {
  908. //第一次启动心跳
  909. checkHeartData();
  910. LogUtil.d(TAG, "onStartCommand: 第一次启动心跳");
  911. }
  912. }
  913. Logger.i(TAG + "onStartCommand");
  914. //进程保活相关
  915. flags = START_STICKY;
  916. //启用前台服务,主要是startForeground()
  917. String ns = Context.NOTIFICATION_SERVICE;
  918. //获得通知管理器
  919. NotificationManager manager1 = (NotificationManager) getSystemService(ns);
  920. Notification.Builder builder = new Notification.Builder(getApplicationContext());
  921. builder.setSmallIcon(R.drawable.logo_1);
  922. builder.setTicker("服务正在运行");
  923. builder.setContentTitle("服务正在运行");
  924. builder.setContentText("服务正在运行");
  925. builder.setWhen(System.currentTimeMillis()); //设置时间
  926. Notification notification = builder.build();
  927. //定义通知行为
  928. manager1.notify(0, notification);
  929. return super.onStartCommand(intent, flags, startId);
  930. }
  931. private CompositeDisposable mDisposables;
  932. /**
  933. * 检测心跳数据以及开始心跳
  934. */
  935. private void checkHeartData() {
  936. //系统管理不为空
  937. Heartbeat.managerId = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "");
  938. // Heartbeat.managerId = "2855";
  939. Log.d(TAG, "checkHeartData: " + Heartbeat.managerId);
  940. if (Heartbeat.managerId != null && !TextUtils.isEmpty(Heartbeat.managerId)) {
  941. Log.e(TAG, "checkHeartData: 开始心跳2");
  942. stopHeartbeat();
  943. startHeartbeat();
  944. Logger.i(TAG + "系统管理id为" + Heartbeat.managerId);
  945. } else {
  946. Logger.i(TAG + "系统管理id为空");
  947. }
  948. }
  949. protected void addSubscriptionNew(Observable observable, Class clazz, DisposableObserver observer) {
  950. if (mDisposables == null) {
  951. mDisposables = new CompositeDisposable();
  952. }
  953. if (clazz == HttpResult.class) {
  954. observable = observable.compose(HttpResultHandler.<String>transformer());
  955. }
  956. observable
  957. .unsubscribeOn(Schedulers.io())
  958. .subscribeOn(Schedulers.io())
  959. .observeOn(AndroidSchedulers.mainThread())
  960. .subscribe(observer);
  961. mDisposables.add(observer);
  962. }
  963. protected void addSubscription(Observable observable, DisposableObserver observer) {
  964. if (mDisposables == null) {
  965. mDisposables = new CompositeDisposable();
  966. }
  967. observable
  968. .unsubscribeOn(Schedulers.io())
  969. .subscribeOn(Schedulers.io())
  970. .observeOn(AndroidSchedulers.mainThread())
  971. .subscribe(observer);
  972. mDisposables.add(observer);
  973. }
  974. private void stopHeartbeat() {
  975. if (timerHeartbeat != null) {
  976. taskHeartbeat.cancel();
  977. timerHeartbeat.cancel();
  978. timerHeartbeat = null;
  979. }
  980. }
  981. private boolean ampAddress = false;//记录地图是否上传成功 false表示没有 true表示成功了
  982. /**
  983. * 上传地址,经纬度
  984. */
  985. private void equimentArea() {
  986. Map<String, String> params = new HashMap<>();
  987. params.put("clientId", Heartbeat.deviceId);
  988. params.put("longitude", Heartbeat.longitude + "");
  989. params.put("latitude", Heartbeat.latitude + "");
  990. params.put("fullName", Heartbeat.address);
  991. Log.d(TAG, "equimentArea: " + Heartbeat.address);
  992. LogUtils.logWrite("定位:" + Heartbeat.address + ":" + Heartbeat.latitude + ":" + Heartbeat.longitude);
  993. addSubscriptionNew(NoPayOrderStringApi.api.equimentArea(params), String.class,
  994. new HttpResultObserver<String>(view, getApplicationContext()) {
  995. @Override
  996. public void onNext(String o) {
  997. LogUtil.d(TAG, "equimentArea onNextupdateSuccess: " + o);
  998. LogUtils.logWrite("定位:" + o);
  999. //表示上传成功了。
  1000. ampAddress = true;
  1001. }
  1002. @Override
  1003. public void onError(Throwable t) {
  1004. LogUtil.d(TAG, "equimentArea onError: " + t.getMessage());
  1005. super.onError(t);
  1006. // BaseException exception= (BaseException) t;
  1007. BaseException exception = ExceptionFactory.create(t);
  1008. t.printStackTrace();
  1009. LogUtils.logWrite("定位:" + t.getMessage());
  1010. }
  1011. });
  1012. }
  1013. @SuppressLint("CheckResult")
  1014. private void OrderStatusInquiry(String sn, int i) {
  1015. LogUtils.logWrite("调用OrderStatusInquiry");
  1016. HashMap<String, String> params = new HashMap<>();
  1017. params.put("sn", sn);
  1018. PayApi.api.getOrderStatus(params).subscribeOn(Schedulers.io())
  1019. .repeatWhen(new Function<Observable<Object>, ObservableSource<?>>() {
  1020. @Override
  1021. public ObservableSource<?> apply(Observable<Object> objectObservable) throws Exception {
  1022. return objectObservable.flatMap(new Function<Object, ObservableSource<?>>() {
  1023. @Override
  1024. public ObservableSource<?> apply(Object o) throws Exception {
  1025. LogUtil.d(TAG, "acceptmm 正扫 asdfaccept1:" + o + BaseConstant.SWEEP_POLL);
  1026. if (BaseConstant.SWEEP_POLL) {
  1027. BaseConstant.SWEEP_POLL = false;
  1028. LogUtil.d(TAG, "正扫轮询结束 asdfaccept1:" + o + BaseConstant.SWEEP_POLL);
  1029. return Observable.error(new Throwable("轮询结束"));
  1030. }
  1031. // 加入判断条件:当轮询次数 = 5次后,就停止轮询
  1032. if (!BaseConstant.CANCEL_POLL) {//如果为true,不执行,如果为false,执行。
  1033. BaseConstant.CANCEL_POLL = false;
  1034. // 此处选择发送onError事件以结束轮询,因为可触发下游观察者的onError()方法回调
  1035. return Observable.error(new Throwable("轮询结束"));
  1036. }
  1037. // 若轮询次数<4次,则发送1Next事件以继续轮询
  1038. // 注:此处加入了delay操作符,作用 = 延迟一段时间发送(此处设置 = 2s),以实现轮询间间隔设置
  1039. return Observable.just(1).delay(5000, TimeUnit.MILLISECONDS);
  1040. }
  1041. });
  1042. }
  1043. })
  1044. .observeOn(AndroidSchedulers.mainThread())
  1045. .subscribe(new Consumer<HttpResult<String>>() {
  1046. @Override
  1047. public void accept(HttpResult<String> stringHttpResult) throws Exception {
  1048. String data = stringHttpResult.getData();
  1049. LogUtils.logWrite("正扫支付开始" + data);
  1050. if ("pay".equals(data)) {
  1051. LogUtils.logWrite("正扫支付成功" + sn);
  1052. //支付成功,停止轮询,改变全局变量的状态
  1053. if (BaseConstant.CANCEL_POLL) {//为true
  1054. BaseConstant.CANCEL_POLL = false;
  1055. getDefault().post(new ApiMessageEvent("pay_success", "4"));
  1056. return;
  1057. }
  1058. }
  1059. }
  1060. }, new Consumer<Throwable>() {
  1061. @Override
  1062. public void accept(Throwable t) throws Exception {
  1063. // LogUtils.logWrite("正扫支付error1" + data);
  1064. Log.d(TAG, "acceptmm: 失败了。");
  1065. if (t instanceof ApiException) {
  1066. ApiException a = (ApiException) t;
  1067. //后台返回
  1068. Log.d(TAG, "acceptmm: " + a.getErrorText());
  1069. } else {
  1070. Log.d(TAG, "acceptmm: 网络问题");
  1071. //没有网络的情况
  1072. // LogUtils.logWrite("正扫支付error1" + data);
  1073. int b = i + 1;
  1074. if (i < 2) {
  1075. new Handler().postDelayed(new Runnable() {
  1076. @Override
  1077. public void run() {
  1078. OrderStatusInquiry(sn, b);
  1079. }
  1080. }, 3000);
  1081. }
  1082. }
  1083. }
  1084. });
  1085. }
  1086. @Subscribe(threadMode = ThreadMode.MAIN)
  1087. public void event(OfflineMessageEvent messageEvent) {
  1088. switch (messageEvent.getName()) {
  1089. case Name.REMOTEVEND://mdb远程做糖
  1090. break;
  1091. case "sessioncomplete":
  1092. new Handler().postDelayed(new Runnable() {
  1093. @Override
  1094. public void run() {
  1095. WeaverUtil.creditCardSessionComplete();
  1096. }
  1097. }, Hawk.get(Name.SESSION_SUBMISSION_TIME, 5000));
  1098. break;
  1099. case "sessioncomplete500ms":
  1100. Log.d(TAG, "event: sessioncomplete500ms");
  1101. new Handler().postDelayed(new Runnable() {
  1102. @Override
  1103. public void run() {
  1104. WeaverUtil.creditCardSessionComplete();
  1105. getDefault().post(new OfflineMessageEvent(Name.ENDSESSION, null));
  1106. }
  1107. }, 200);
  1108. break;
  1109. }
  1110. }
  1111. @Override
  1112. public void onDestroy() {
  1113. super.onDestroy();
  1114. getDefault().unregister(this);
  1115. stopTimerAndTimerTask(timerAlarmClock, alarmClockTask);
  1116. Log.d(TAG, "RemoteSupportServiceonDestroy: ");
  1117. }
  1118. public void setError1(int key, String reason,String level) {
  1119. long currentTime = System.currentTimeMillis();
  1120. if (currentTime - Constant.lastProcessedTime < 3000) {
  1121. return;
  1122. }
  1123. Constant.lastProcessedTime = currentTime;
  1124. if (Constant.preKey1 != key) {
  1125. Constant.preKey1 = key;
  1126. long date = System.currentTimeMillis();
  1127. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1128. Date curDate = new Date(date);
  1129. String time = formatter.format(curDate);
  1130. AddAlarmRecordBean addAlarmRecordBean = new AddAlarmRecordBean(reason, Heartbeat.deviceId, time, "", level);
  1131. // WarringBean warringBean = new WarringBean();
  1132. // warringBean.setTime(date);
  1133. // warringBean.setThingError(reason);
  1134. // getBeanDao().insert(warringBean);
  1135. Log.d(TAG, "setError1: " + addAlarmRecordBean.toString());
  1136. Gson gson = new Gson();
  1137. String json = gson.toJson(addAlarmRecordBean);
  1138. Log.d(TAG, "setError2报警: " + json);
  1139. RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), json);
  1140. //上传到服务器
  1141. if (!Constant.reasonKey.equals(reason)) {
  1142. upError(body, 0,reason);
  1143. }
  1144. }
  1145. }
  1146. private void upError(RequestBody body, int alarmErrorNumber,String reason) {
  1147. addSubscriptionNew(NoPayOrderStringApi.api.addAlarmRecord(body), String.class,
  1148. new HttpResultNotActivityObserver<String>(view, BaseApplication.getContext()) {
  1149. @Override
  1150. public void onNext(String o) {
  1151. Log.d(TAG, "onNext报警测试1: "+o);
  1152. Constant.reasonKey=reason;
  1153. if (o != null) {
  1154. Log.d("AddAlarmRecordApi3", "onNext: " + o);
  1155. }
  1156. }
  1157. @Override
  1158. public void onError(Throwable t) {
  1159. super.onError(t);
  1160. Log.d(TAG, "onNext报警测试2: "+t.getMessage());
  1161. if (t instanceof ApiException) {
  1162. ApiException a = (ApiException) t;
  1163. //后台返回
  1164. Log.d(TAG, "acceptmm: " + a.getErrorText());
  1165. } else {
  1166. new Handler().postDelayed(new Runnable() {
  1167. @Override
  1168. public void run() {
  1169. //需要重新发送报警
  1170. if (alarmErrorNumber >= 3) {//重试三次。
  1171. return;
  1172. }
  1173. upError(body, alarmErrorNumber + 1,Constant.reasonKey);
  1174. Log.d(TAG, "run: asdfasdfasdf");
  1175. LogUtils.logWrite("报警了,但是上传失败,需要重新上传");
  1176. }
  1177. }, 1000 * 60 * 5);
  1178. }
  1179. }
  1180. });
  1181. }
  1182. int sendApkVersionNumber = 1;
  1183. private void sendApkVersion() {
  1184. //通知到后台
  1185. HashMap<String, String> params = new HashMap<>();
  1186. params.put("clientId", Heartbeat.deviceId);
  1187. params.put("apkVersion", App.app.getVersionName());
  1188. addSubscription(NoPayOrderStringApi.api.sendApkVersion(params).compose(HttpStringResultHandler.<String>transformer()),
  1189. new HttpResultNotActivityObserver<String>(view, BaseApplication.getContext()) {
  1190. @Override
  1191. public void onNext(String data) {
  1192. LogUtil.d("sendApkVersion", "onNext: " + data);
  1193. LogUtils.logWrite("apkVersion onnext:" + data);
  1194. sendApkVersionNumber = 1;
  1195. }
  1196. @Override
  1197. public void onError(Throwable t) {
  1198. super.onError(t);
  1199. LogUtils.logWrite("apkVersion onerro:" + t.getMessage());
  1200. LogUtil.d("sendApkVersion", "onerror: " + t.getMessage());
  1201. if (sendApkVersionNumber < 3) {
  1202. new Handler().postDelayed(new Runnable() {
  1203. @Override
  1204. public void run() {
  1205. sendApkVersion();
  1206. }
  1207. }, 5000);
  1208. }
  1209. sendApkVersionNumber++;
  1210. }
  1211. });
  1212. }
  1213. private void SetAnAlarm() {
  1214. setAlarmClock();
  1215. }
  1216. public void setAlarmClock() {
  1217. /**
  1218. * 1. 用户点击添加的时候,那么我就开始设置闹钟。
  1219. * 2. 用户点击修改的时候,那么我就开始设置闹钟。
  1220. * 3. id作为这个序号。需要乘以10
  1221. * 4. 增加一个选项,是否开启本地闹钟,如果开启,则使用,不开启则不管。
  1222. */
  1223. ArrayList<AlarmClockBean> alarmClockBeans = Hawk.get(Name.LOCAL_ALARM_CLOCK, new ArrayList<AlarmClockBean>());
  1224. for (AlarmClockBean clockBean : alarmClockBeans) {
  1225. //如果状态是关闭的则不要设置闹钟。
  1226. if (clockBean.getStatus() == false) {
  1227. continue;
  1228. }
  1229. int number = Integer.valueOf(clockBean.getId()) * 10;
  1230. try {
  1231. setAlarmClock(number, clockBean, clockBean.getType().getType() + "", number + 7);
  1232. } catch (ParseException e) {
  1233. throw new RuntimeException(e);
  1234. }
  1235. }
  1236. }
  1237. public int setAlarmClock(int number, AlarmClockBean alarmClockBean, String type, int alarmNumber) throws ParseException {
  1238. for (int i = number; i < alarmNumber; i++) {//清除所有的闹钟
  1239. AlarmManagerUtil.cancelAlarm(BaseApplication.getContext(), AlarmManagerUtil.ALARM_ACTION, i);
  1240. }
  1241. ArrayList<WeekEnum> week = alarmClockBean.getWeek();
  1242. String hour = "";
  1243. String minute = "";
  1244. String msg = "";
  1245. if ("1".equals(type)) {//只有关机的才需要。
  1246. if (Integer.valueOf(alarmClockBean.getMinute()) < 40) {//如果小于5,我们需要做好计算才行。00:00:00
  1247. //小于5,则
  1248. // alarmClockBean.getHour()-1:
  1249. // alarmClockBean.getMinute():4-5=-1,60-1=59,是正确的。
  1250. if (Integer.valueOf(alarmClockBean.getHour()) < 1) {
  1251. hour = (Integer.valueOf(alarmClockBean.getHour()) - 1 + 24) + "";
  1252. Log.d(TAG, "setAlarmClock: 小于1");
  1253. } else {
  1254. hour = (Integer.valueOf(alarmClockBean.getHour()) - 1) + "";
  1255. Log.d(TAG, "setAlarmClock: 大于1");
  1256. }
  1257. minute = (Integer.valueOf(alarmClockBean.getMinute()) - 40 + 60) + "";
  1258. Log.d(TAG, "setAlarmClock: 小于52:" + minute);
  1259. } else {
  1260. hour = alarmClockBean.getHour();
  1261. minute = (Integer.valueOf(alarmClockBean.getMinute()) - 40) + "";
  1262. Log.d(TAG, "setAlarmClock: 大于51:" + minute);
  1263. }
  1264. Calendar now = Calendar.getInstance();
  1265. SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  1266. //设置时间
  1267. Date date1 = sdf.parse(alarmClockBean.getHour() + ":" +
  1268. alarmClockBean.getMinute() + ":" +
  1269. "00");
  1270. Log.d(TAG, "setAlarmClock: service1" + date1.toString());
  1271. //当前时间
  1272. Date date2 = sdf.parse(now.get(Calendar.HOUR_OF_DAY) + ":" +
  1273. now.get(Calendar.MINUTE) + ":" +
  1274. now.get(Calendar.SECOND));
  1275. Log.d(TAG, "setAlarmClock: service2" + date2.toString());
  1276. Log.d(TAG, "setAlarmClock: " + alarmClockBean.getMinute() + "-" + now.get(Calendar.MINUTE));
  1277. if (date1.compareTo(date2) > 0) {
  1278. Log.d(TAG, "Date1 时间在 Date2 之后");//没过
  1279. long nowDate = date1.getTime();//当前时间
  1280. long startDateTime = date2.getTime();//真实时间
  1281. int diffSeconds = (int) ((nowDate - startDateTime) / 1000);
  1282. Log.d(TAG, "setAlarmClock: " + diffSeconds);
  1283. if (diffSeconds >= 2400) {
  1284. alarmClockBean.setHour(hour);
  1285. alarmClockBean.setMinute(minute);
  1286. msg = "hotwater";
  1287. LogUtils.logWrite("自动烧水7");
  1288. Log.d(TAG, alarmClockBean.getHour() + "setAlarmClock: 弹窗" + alarmClockBean.getMinute());
  1289. } else {
  1290. //不弹窗
  1291. Log.d(TAG, "Date1 时间在 Date2 之前");//没过
  1292. Log.d(TAG, "setAlarmClock1: 不弹窗");
  1293. }
  1294. } else {//过了
  1295. System.out.println("程序怎么会运行到这里?正常应该不会");
  1296. Log.d(TAG, "setAlarmClock1: 不弹窗");
  1297. }
  1298. }
  1299. //时间。
  1300. for (int i = 0; i < week.size(); i++) {
  1301. AlarmManagerUtil.setAlarm(
  1302. BaseApplication.getContext(),
  1303. 2,
  1304. Integer.valueOf(alarmClockBean.getHour()),
  1305. Integer.valueOf(alarmClockBean.getMinute()), 0,
  1306. Integer.valueOf(alarmClockBean.getId()) * 10 + i,
  1307. week.get(i).getType(),
  1308. type + msg);
  1309. Log.d(TAG, "setAlarmClock1: " + Integer.valueOf(alarmClockBean.getHour()));
  1310. Log.d(TAG, "setAlarmClock2: " + Integer.valueOf(alarmClockBean.getMinute()));
  1311. Log.d(TAG, "setAlarmClock3: " + week.get(0).getType());
  1312. Log.d(TAG, "setAlarmClock4: " + (Integer.valueOf(alarmClockBean.getId()) * 1000 + i));
  1313. Log.d(TAG, "setAlarmClock5: " + (type + msg));
  1314. }
  1315. number = number + week.size();//累积。
  1316. return number;
  1317. }
  1318. public void stopTimerAndTimerTask(Timer timer, TimerTask task) {
  1319. if (timer != null) {
  1320. task.cancel();
  1321. timer.cancel();
  1322. task = null;
  1323. timer = null;
  1324. }
  1325. }
  1326. /**
  1327. * 上传网络不好的时候存储在数据库的订单
  1328. */
  1329. public void upCoinOrder() {
  1330. UpCoinOrderBeanDao upCoinOrderBeanDao = BaseApplication.getBaseApplication().getDaoSession().getUpCoinOrderBeanDao();
  1331. List<UpCoinOrderBean> upCoinOrderBeans = upCoinOrderBeanDao.queryBuilder().list();
  1332. if (upCoinOrderBeans.size() <= 0) {
  1333. extracted(1000 * 60 * 5);
  1334. return;
  1335. }
  1336. UpCoinOrderBean selectedUpCoinOrderBean = upCoinOrderBeans.get(0); // 获取第一条数据
  1337. Gson gson = new Gson();
  1338. String json = gson.toJson(selectedUpCoinOrderBean);
  1339. Log.d(TAG, "upCoinOrder json: " + json);
  1340. RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json;charset=utf-8"), json);
  1341. addSubscription(OrderApi.api.saveCoinOrder(body).compose(HttpResultHandler.<String>transformer()),
  1342. new HttpResultObserver<String>(view, BaseApplication.getContext()) {
  1343. @Override
  1344. public void onNext(String o) {
  1345. LogUtil.d(TAG, "upCoinOrder onNextupdateSuccess: " + o);
  1346. upCoinOrderBeanDao.delete(selectedUpCoinOrderBean); // 删除第一条数据
  1347. extracted(3000);
  1348. }
  1349. @Override
  1350. public void onError(Throwable t) {
  1351. LogUtil.d(TAG, "upCoinOrder onError: " + t.getMessage());
  1352. super.onError(t);
  1353. extracted(1000 * 60 * 5);
  1354. }
  1355. });
  1356. }
  1357. private void extracted(int delayMillis) {
  1358. new Handler().postDelayed(new Runnable() {
  1359. @Override
  1360. public void run() {
  1361. upCoinOrder();
  1362. }
  1363. }, delayMillis);
  1364. }
  1365. }