RemoteSupportService.java 76 KB

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